diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml
index 2bdfa0e..75e6e82 100644
--- a/casic-iot-common/pom.xml
+++ b/casic-iot-common/pom.xml
@@ -32,10 +32,10 @@
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml
index 2bdfa0e..75e6e82 100644
--- a/casic-iot-common/pom.xml
+++ b/casic-iot-common/pom.xml
@@ -32,10 +32,10 @@
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml
index 2bdfa0e..75e6e82 100644
--- a/casic-iot-common/pom.xml
+++ b/casic-iot-common/pom.xml
@@ -32,10 +32,10 @@
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml
index 2bdfa0e..75e6e82 100644
--- a/casic-iot-common/pom.xml
+++ b/casic-iot-common/pom.xml
@@ -32,10 +32,10 @@
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml
index 2bdfa0e..75e6e82 100644
--- a/casic-iot-common/pom.xml
+++ b/casic-iot-common/pom.xml
@@ -32,10 +32,10 @@
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml
index 2bdfa0e..75e6e82 100644
--- a/casic-iot-common/pom.xml
+++ b/casic-iot-common/pom.xml
@@ -32,10 +32,10 @@
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
+
diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml
index 2bdfa0e..75e6e82 100644
--- a/casic-iot-common/pom.xml
+++ b/casic-iot-common/pom.xml
@@ -32,10 +32,10 @@
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
+
diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml
index 4797e3a..39bc3b2 100644
--- a/sensorhub-core/pom.xml
+++ b/sensorhub-core/pom.xml
@@ -20,14 +20,6 @@
4.5.7
-
-
- redis.clients
- jedis
- 3.1.0
- jar
-
-
com.casic
sensorhub-support
@@ -62,67 +54,14 @@
mybatis-plus-boot-starter
${mybatis-plus.version}
+
+
+ com.casic
+ casic-iot-service
+ ${iot.version}
+
+
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
- 2.4.5
-
- true
-
- com.casic.missiles.ServerApplication
- exec
-
-
-
-
- repackage
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
- 1.8
- 1.8
-
-
-
-
- org.apache.maven.plugins
- maven-war-plugin
-
-
- false
-
-
-
-
-
-
- src/main/resources
-
-
- /config/*/*
- /config/*-*.yml
-
- true
-
-
- src/main/resources
-
- **/*.xml
-
- true
-
-
-
-
diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml
index 2bdfa0e..75e6e82 100644
--- a/casic-iot-common/pom.xml
+++ b/casic-iot-common/pom.xml
@@ -32,10 +32,10 @@
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
+
diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml
index 4797e3a..39bc3b2 100644
--- a/sensorhub-core/pom.xml
+++ b/sensorhub-core/pom.xml
@@ -20,14 +20,6 @@
4.5.7
-
-
- redis.clients
- jedis
- 3.1.0
- jar
-
-
com.casic
sensorhub-support
@@ -62,67 +54,14 @@
mybatis-plus-boot-starter
${mybatis-plus.version}
+
+
+ com.casic
+ casic-iot-service
+ ${iot.version}
+
+
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
- 2.4.5
-
- true
-
- com.casic.missiles.ServerApplication
- exec
-
-
-
-
- repackage
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
- 1.8
- 1.8
-
-
-
-
- org.apache.maven.plugins
- maven-war-plugin
-
-
- false
-
-
-
-
-
-
- src/main/resources
-
-
- /config/*/*
- /config/*-*.yml
-
- true
-
-
- src/main/resources
-
- **/*.xml
-
- true
-
-
-
-
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java b/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
index 9753109..40c55e8 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
@@ -1,30 +1,30 @@
-package com.casic.missiles;
-
-import com.casic.missiles.netty.SensorhubServer;
-import lombok.extern.slf4j.Slf4j;
-import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.CommandLineRunner;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cache.annotation.EnableCaching;
-
-
-@SpringBootApplication(scanBasePackages = "com.casic.missiles")
-@MapperScan(basePackages = {"com.casic.missiles.**.dao", "com.casic.missiles.**.mapper"})
-@EnableCaching //开启缓存
-@Slf4j
-public class ServerApplication implements CommandLineRunner {
-
- @Autowired
- private SensorhubServer nettyServer;
- public static void main(String[] args) {
- SpringApplication.run(ServerApplication.class, args);
- }
-
- @Override
- public void run(String... args) {
- this.nettyServer.startServer();
- }
-
-}
+//package com.casic.missiles;
+//
+//import com.casic.missiles.netty.SensorhubServer;
+//import lombok.extern.slf4j.Slf4j;
+//import org.mybatis.spring.annotation.MapperScan;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.boot.CommandLineRunner;
+//import org.springframework.boot.SpringApplication;
+//import org.springframework.boot.autoconfigure.SpringBootApplication;
+//import org.springframework.cache.annotation.EnableCaching;
+//
+//
+//@SpringBootApplication(scanBasePackages = "com.casic.missiles")
+//@MapperScan(basePackages = {"com.casic.missiles.**.dao", "com.casic.missiles.**.mapper"})
+//@EnableCaching //开启缓存
+//@Slf4j
+//public class ServerApplication implements CommandLineRunner {
+//
+// @Autowired
+// private SensorhubServer nettyServer;
+// public static void main(String[] args) {
+// SpringApplication.run(ServerApplication.class, args);
+// }
+//
+// @Override
+// public void run(String... args) {
+// this.nettyServer.startServer();
+// }
+//
+//}
diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml
index 2bdfa0e..75e6e82 100644
--- a/casic-iot-common/pom.xml
+++ b/casic-iot-common/pom.xml
@@ -32,10 +32,10 @@
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
+
diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml
index 4797e3a..39bc3b2 100644
--- a/sensorhub-core/pom.xml
+++ b/sensorhub-core/pom.xml
@@ -20,14 +20,6 @@
4.5.7
-
-
- redis.clients
- jedis
- 3.1.0
- jar
-
-
com.casic
sensorhub-support
@@ -62,67 +54,14 @@
mybatis-plus-boot-starter
${mybatis-plus.version}
+
+
+ com.casic
+ casic-iot-service
+ ${iot.version}
+
+
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
- 2.4.5
-
- true
-
- com.casic.missiles.ServerApplication
- exec
-
-
-
-
- repackage
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
- 1.8
- 1.8
-
-
-
-
- org.apache.maven.plugins
- maven-war-plugin
-
-
- false
-
-
-
-
-
-
- src/main/resources
-
-
- /config/*/*
- /config/*-*.yml
-
- true
-
-
- src/main/resources
-
- **/*.xml
-
- true
-
-
-
-
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java b/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
index 9753109..40c55e8 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
@@ -1,30 +1,30 @@
-package com.casic.missiles;
-
-import com.casic.missiles.netty.SensorhubServer;
-import lombok.extern.slf4j.Slf4j;
-import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.CommandLineRunner;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cache.annotation.EnableCaching;
-
-
-@SpringBootApplication(scanBasePackages = "com.casic.missiles")
-@MapperScan(basePackages = {"com.casic.missiles.**.dao", "com.casic.missiles.**.mapper"})
-@EnableCaching //开启缓存
-@Slf4j
-public class ServerApplication implements CommandLineRunner {
-
- @Autowired
- private SensorhubServer nettyServer;
- public static void main(String[] args) {
- SpringApplication.run(ServerApplication.class, args);
- }
-
- @Override
- public void run(String... args) {
- this.nettyServer.startServer();
- }
-
-}
+//package com.casic.missiles;
+//
+//import com.casic.missiles.netty.SensorhubServer;
+//import lombok.extern.slf4j.Slf4j;
+//import org.mybatis.spring.annotation.MapperScan;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.boot.CommandLineRunner;
+//import org.springframework.boot.SpringApplication;
+//import org.springframework.boot.autoconfigure.SpringBootApplication;
+//import org.springframework.cache.annotation.EnableCaching;
+//
+//
+//@SpringBootApplication(scanBasePackages = "com.casic.missiles")
+//@MapperScan(basePackages = {"com.casic.missiles.**.dao", "com.casic.missiles.**.mapper"})
+//@EnableCaching //开启缓存
+//@Slf4j
+//public class ServerApplication implements CommandLineRunner {
+//
+// @Autowired
+// private SensorhubServer nettyServer;
+// public static void main(String[] args) {
+// SpringApplication.run(ServerApplication.class, args);
+// }
+//
+// @Override
+// public void run(String... args) {
+// this.nettyServer.startServer();
+// }
+//
+//}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java b/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java
deleted file mode 100644
index 624ed4f..0000000
--- a/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.casic.missiles.autoconfig;
-
-import com.casic.missiles.netty.SensorhubServer;
-import io.netty.bootstrap.ServerBootstrap;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * SensorhubServerAutoConfiguration 自动配置类
- */
-@Configuration
-@ConditionalOnProperty(
- prefix = "casic.sensorhub",
- name = "enable",
- havingValue = "true"
-)
-@EnableConfigurationProperties({SensorhubProperties.class})
-@ConditionalOnClass({ServerBootstrap.class})
-public class SensorhubServerAutoConfiguration {
-
- @Bean
- public SensorhubServer sensorhubServer(SensorhubProperties sensorhubProperties) throws Exception {
- return SensorhubServer.getInstance(sensorhubProperties);
- }
-
-}
diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml
index 2bdfa0e..75e6e82 100644
--- a/casic-iot-common/pom.xml
+++ b/casic-iot-common/pom.xml
@@ -32,10 +32,10 @@
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
+
diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml
index 4797e3a..39bc3b2 100644
--- a/sensorhub-core/pom.xml
+++ b/sensorhub-core/pom.xml
@@ -20,14 +20,6 @@
4.5.7
-
-
- redis.clients
- jedis
- 3.1.0
- jar
-
-
com.casic
sensorhub-support
@@ -62,67 +54,14 @@
mybatis-plus-boot-starter
${mybatis-plus.version}
+
+
+ com.casic
+ casic-iot-service
+ ${iot.version}
+
+
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
- 2.4.5
-
- true
-
- com.casic.missiles.ServerApplication
- exec
-
-
-
-
- repackage
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
- 1.8
- 1.8
-
-
-
-
- org.apache.maven.plugins
- maven-war-plugin
-
-
- false
-
-
-
-
-
-
- src/main/resources
-
-
- /config/*/*
- /config/*-*.yml
-
- true
-
-
- src/main/resources
-
- **/*.xml
-
- true
-
-
-
-
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java b/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
index 9753109..40c55e8 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
@@ -1,30 +1,30 @@
-package com.casic.missiles;
-
-import com.casic.missiles.netty.SensorhubServer;
-import lombok.extern.slf4j.Slf4j;
-import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.CommandLineRunner;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cache.annotation.EnableCaching;
-
-
-@SpringBootApplication(scanBasePackages = "com.casic.missiles")
-@MapperScan(basePackages = {"com.casic.missiles.**.dao", "com.casic.missiles.**.mapper"})
-@EnableCaching //开启缓存
-@Slf4j
-public class ServerApplication implements CommandLineRunner {
-
- @Autowired
- private SensorhubServer nettyServer;
- public static void main(String[] args) {
- SpringApplication.run(ServerApplication.class, args);
- }
-
- @Override
- public void run(String... args) {
- this.nettyServer.startServer();
- }
-
-}
+//package com.casic.missiles;
+//
+//import com.casic.missiles.netty.SensorhubServer;
+//import lombok.extern.slf4j.Slf4j;
+//import org.mybatis.spring.annotation.MapperScan;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.boot.CommandLineRunner;
+//import org.springframework.boot.SpringApplication;
+//import org.springframework.boot.autoconfigure.SpringBootApplication;
+//import org.springframework.cache.annotation.EnableCaching;
+//
+//
+//@SpringBootApplication(scanBasePackages = "com.casic.missiles")
+//@MapperScan(basePackages = {"com.casic.missiles.**.dao", "com.casic.missiles.**.mapper"})
+//@EnableCaching //开启缓存
+//@Slf4j
+//public class ServerApplication implements CommandLineRunner {
+//
+// @Autowired
+// private SensorhubServer nettyServer;
+// public static void main(String[] args) {
+// SpringApplication.run(ServerApplication.class, args);
+// }
+//
+// @Override
+// public void run(String... args) {
+// this.nettyServer.startServer();
+// }
+//
+//}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java b/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java
deleted file mode 100644
index 624ed4f..0000000
--- a/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.casic.missiles.autoconfig;
-
-import com.casic.missiles.netty.SensorhubServer;
-import io.netty.bootstrap.ServerBootstrap;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * SensorhubServerAutoConfiguration 自动配置类
- */
-@Configuration
-@ConditionalOnProperty(
- prefix = "casic.sensorhub",
- name = "enable",
- havingValue = "true"
-)
-@EnableConfigurationProperties({SensorhubProperties.class})
-@ConditionalOnClass({ServerBootstrap.class})
-public class SensorhubServerAutoConfiguration {
-
- @Bean
- public SensorhubServer sensorhubServer(SensorhubProperties sensorhubProperties) throws Exception {
- return SensorhubServer.getInstance(sensorhubProperties);
- }
-
-}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
index e90de5a..dec5e4e 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
@@ -9,6 +9,8 @@
import java.util.concurrent.*;
/**
+ * @author cz
+ * @date 2023-11-24
* 异步任务调用
*/
public class AsynTaskHelper {
@@ -25,23 +27,25 @@
/**
* 设置线程池
+ *
* @param executorService 线程池
* @return
*/
- public AsynTaskHelper setExecutorService(ExecutorService executorService){
+ public AsynTaskHelper setExecutorService(ExecutorService executorService) {
completionService = new ExecutorCompletionService(executorService);
return this;
}
/**
* 添加任务,返回结果
+ *
* @param taskId
* @param task
* @return
*/
public AsynTaskHelper addTask(String taskId, Callable task) {
AsynTaskCallable callProxy = new AsynTaskCallable(taskId, task);
- if(null == tasks || tasks.isEmpty()){
+ if (null == tasks || tasks.isEmpty()) {
tasks = new ArrayList<>();
}
tasks.add(callProxy);
@@ -50,10 +54,11 @@
/**
* 提交任务
+ *
* @return
*/
- public AsynTaskHelper submit(){
- if(null != tasks && !tasks.isEmpty()){
+ public AsynTaskHelper submit() {
+ if (null != tasks && !tasks.isEmpty()) {
for (Callable callResult : tasks) {
completionService.submit(callResult);
}
@@ -63,7 +68,8 @@
/**
* 获取返回结果
- * @return Map K为任务Id
+ *
+ * @return Map K为任务Id
* @throws ExecutionException
* @throws InterruptedException
*/
@@ -73,22 +79,23 @@
/**
* 获取返回结果
+ *
* @param timeout
* @param unit
- * @return Map K为任务Id
+ * @return Map K为任务Id
* @throws InterruptedException
* @throws ExecutionException
*/
- public Map getResult(long timeout,@NotNull TimeUnit unit) throws InterruptedException, ExecutionException {
+ public Map getResult(long timeout, @NotNull TimeUnit unit) throws InterruptedException, ExecutionException {
Map result = new HashMap<>();
- if(null == tasks){
+ if (null == tasks) {
return result;
}
for (int i = 0; i < tasks.size(); i++) {
Future> poll = completionService.poll(timeout, unit);
- if(null != poll){
+ if (null != poll) {
TaskResult task = poll.get();
- if(null != poll && null != task){
+ if (null != poll && null != task) {
result.put(task.getTaskId(), task.getData());
}
}
diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml
index 2bdfa0e..75e6e82 100644
--- a/casic-iot-common/pom.xml
+++ b/casic-iot-common/pom.xml
@@ -32,10 +32,10 @@
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
+
diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml
index 4797e3a..39bc3b2 100644
--- a/sensorhub-core/pom.xml
+++ b/sensorhub-core/pom.xml
@@ -20,14 +20,6 @@
4.5.7
-
-
- redis.clients
- jedis
- 3.1.0
- jar
-
-
com.casic
sensorhub-support
@@ -62,67 +54,14 @@
mybatis-plus-boot-starter
${mybatis-plus.version}
+
+
+ com.casic
+ casic-iot-service
+ ${iot.version}
+
+
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
- 2.4.5
-
- true
-
- com.casic.missiles.ServerApplication
- exec
-
-
-
-
- repackage
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
- 1.8
- 1.8
-
-
-
-
- org.apache.maven.plugins
- maven-war-plugin
-
-
- false
-
-
-
-
-
-
- src/main/resources
-
-
- /config/*/*
- /config/*-*.yml
-
- true
-
-
- src/main/resources
-
- **/*.xml
-
- true
-
-
-
-
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java b/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
index 9753109..40c55e8 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
@@ -1,30 +1,30 @@
-package com.casic.missiles;
-
-import com.casic.missiles.netty.SensorhubServer;
-import lombok.extern.slf4j.Slf4j;
-import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.CommandLineRunner;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cache.annotation.EnableCaching;
-
-
-@SpringBootApplication(scanBasePackages = "com.casic.missiles")
-@MapperScan(basePackages = {"com.casic.missiles.**.dao", "com.casic.missiles.**.mapper"})
-@EnableCaching //开启缓存
-@Slf4j
-public class ServerApplication implements CommandLineRunner {
-
- @Autowired
- private SensorhubServer nettyServer;
- public static void main(String[] args) {
- SpringApplication.run(ServerApplication.class, args);
- }
-
- @Override
- public void run(String... args) {
- this.nettyServer.startServer();
- }
-
-}
+//package com.casic.missiles;
+//
+//import com.casic.missiles.netty.SensorhubServer;
+//import lombok.extern.slf4j.Slf4j;
+//import org.mybatis.spring.annotation.MapperScan;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.boot.CommandLineRunner;
+//import org.springframework.boot.SpringApplication;
+//import org.springframework.boot.autoconfigure.SpringBootApplication;
+//import org.springframework.cache.annotation.EnableCaching;
+//
+//
+//@SpringBootApplication(scanBasePackages = "com.casic.missiles")
+//@MapperScan(basePackages = {"com.casic.missiles.**.dao", "com.casic.missiles.**.mapper"})
+//@EnableCaching //开启缓存
+//@Slf4j
+//public class ServerApplication implements CommandLineRunner {
+//
+// @Autowired
+// private SensorhubServer nettyServer;
+// public static void main(String[] args) {
+// SpringApplication.run(ServerApplication.class, args);
+// }
+//
+// @Override
+// public void run(String... args) {
+// this.nettyServer.startServer();
+// }
+//
+//}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java b/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java
deleted file mode 100644
index 624ed4f..0000000
--- a/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.casic.missiles.autoconfig;
-
-import com.casic.missiles.netty.SensorhubServer;
-import io.netty.bootstrap.ServerBootstrap;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * SensorhubServerAutoConfiguration 自动配置类
- */
-@Configuration
-@ConditionalOnProperty(
- prefix = "casic.sensorhub",
- name = "enable",
- havingValue = "true"
-)
-@EnableConfigurationProperties({SensorhubProperties.class})
-@ConditionalOnClass({ServerBootstrap.class})
-public class SensorhubServerAutoConfiguration {
-
- @Bean
- public SensorhubServer sensorhubServer(SensorhubProperties sensorhubProperties) throws Exception {
- return SensorhubServer.getInstance(sensorhubProperties);
- }
-
-}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
index e90de5a..dec5e4e 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
@@ -9,6 +9,8 @@
import java.util.concurrent.*;
/**
+ * @author cz
+ * @date 2023-11-24
* 异步任务调用
*/
public class AsynTaskHelper {
@@ -25,23 +27,25 @@
/**
* 设置线程池
+ *
* @param executorService 线程池
* @return
*/
- public AsynTaskHelper setExecutorService(ExecutorService executorService){
+ public AsynTaskHelper setExecutorService(ExecutorService executorService) {
completionService = new ExecutorCompletionService(executorService);
return this;
}
/**
* 添加任务,返回结果
+ *
* @param taskId
* @param task
* @return
*/
public AsynTaskHelper addTask(String taskId, Callable task) {
AsynTaskCallable callProxy = new AsynTaskCallable(taskId, task);
- if(null == tasks || tasks.isEmpty()){
+ if (null == tasks || tasks.isEmpty()) {
tasks = new ArrayList<>();
}
tasks.add(callProxy);
@@ -50,10 +54,11 @@
/**
* 提交任务
+ *
* @return
*/
- public AsynTaskHelper submit(){
- if(null != tasks && !tasks.isEmpty()){
+ public AsynTaskHelper submit() {
+ if (null != tasks && !tasks.isEmpty()) {
for (Callable callResult : tasks) {
completionService.submit(callResult);
}
@@ -63,7 +68,8 @@
/**
* 获取返回结果
- * @return Map K为任务Id
+ *
+ * @return Map K为任务Id
* @throws ExecutionException
* @throws InterruptedException
*/
@@ -73,22 +79,23 @@
/**
* 获取返回结果
+ *
* @param timeout
* @param unit
- * @return Map K为任务Id
+ * @return Map K为任务Id
* @throws InterruptedException
* @throws ExecutionException
*/
- public Map getResult(long timeout,@NotNull TimeUnit unit) throws InterruptedException, ExecutionException {
+ public Map getResult(long timeout, @NotNull TimeUnit unit) throws InterruptedException, ExecutionException {
Map result = new HashMap<>();
- if(null == tasks){
+ if (null == tasks) {
return result;
}
for (int i = 0; i < tasks.size(); i++) {
Future> poll = completionService.poll(timeout, unit);
- if(null != poll){
+ if (null != poll) {
TaskResult task = poll.get();
- if(null != poll && null != task){
+ if (null != poll && null != task) {
result.put(task.getTaskId(), task.getData());
}
}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
index 0401822..e03781c 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
@@ -7,14 +7,6 @@
public class GuavaCacheUtil {
- /**
- * 使用guava需要引入依赖
- *
- * com.google.guava
- * guava
- * 28.2-jre
- *
- */
private static Cache cache = CacheBuilder.newBuilder()
//10分钟后过期
.expireAfterWrite(10, TimeUnit.MINUTES)
@@ -27,8 +19,22 @@
return cache.getIfPresent(k);
}
+ /**
+ * 添加缓存
+ * @param k
+ * @param value
+ */
public static void putCache(String k, Object value) {
cache.put(k, value);
}
+ /**
+ * 删除缓存
+ *
+ * @param key
+ */
+ public static void remove(String key) {
+ cache.invalidate(key);
+ }
+
}
diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml
index 2bdfa0e..75e6e82 100644
--- a/casic-iot-common/pom.xml
+++ b/casic-iot-common/pom.xml
@@ -32,10 +32,10 @@
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
+
diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml
index 4797e3a..39bc3b2 100644
--- a/sensorhub-core/pom.xml
+++ b/sensorhub-core/pom.xml
@@ -20,14 +20,6 @@
4.5.7
-
-
- redis.clients
- jedis
- 3.1.0
- jar
-
-
com.casic
sensorhub-support
@@ -62,67 +54,14 @@
mybatis-plus-boot-starter
${mybatis-plus.version}
+
+
+ com.casic
+ casic-iot-service
+ ${iot.version}
+
+
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
- 2.4.5
-
- true
-
- com.casic.missiles.ServerApplication
- exec
-
-
-
-
- repackage
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
- 1.8
- 1.8
-
-
-
-
- org.apache.maven.plugins
- maven-war-plugin
-
-
- false
-
-
-
-
-
-
- src/main/resources
-
-
- /config/*/*
- /config/*-*.yml
-
- true
-
-
- src/main/resources
-
- **/*.xml
-
- true
-
-
-
-
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java b/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
index 9753109..40c55e8 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
@@ -1,30 +1,30 @@
-package com.casic.missiles;
-
-import com.casic.missiles.netty.SensorhubServer;
-import lombok.extern.slf4j.Slf4j;
-import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.CommandLineRunner;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cache.annotation.EnableCaching;
-
-
-@SpringBootApplication(scanBasePackages = "com.casic.missiles")
-@MapperScan(basePackages = {"com.casic.missiles.**.dao", "com.casic.missiles.**.mapper"})
-@EnableCaching //开启缓存
-@Slf4j
-public class ServerApplication implements CommandLineRunner {
-
- @Autowired
- private SensorhubServer nettyServer;
- public static void main(String[] args) {
- SpringApplication.run(ServerApplication.class, args);
- }
-
- @Override
- public void run(String... args) {
- this.nettyServer.startServer();
- }
-
-}
+//package com.casic.missiles;
+//
+//import com.casic.missiles.netty.SensorhubServer;
+//import lombok.extern.slf4j.Slf4j;
+//import org.mybatis.spring.annotation.MapperScan;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.boot.CommandLineRunner;
+//import org.springframework.boot.SpringApplication;
+//import org.springframework.boot.autoconfigure.SpringBootApplication;
+//import org.springframework.cache.annotation.EnableCaching;
+//
+//
+//@SpringBootApplication(scanBasePackages = "com.casic.missiles")
+//@MapperScan(basePackages = {"com.casic.missiles.**.dao", "com.casic.missiles.**.mapper"})
+//@EnableCaching //开启缓存
+//@Slf4j
+//public class ServerApplication implements CommandLineRunner {
+//
+// @Autowired
+// private SensorhubServer nettyServer;
+// public static void main(String[] args) {
+// SpringApplication.run(ServerApplication.class, args);
+// }
+//
+// @Override
+// public void run(String... args) {
+// this.nettyServer.startServer();
+// }
+//
+//}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java b/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java
deleted file mode 100644
index 624ed4f..0000000
--- a/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.casic.missiles.autoconfig;
-
-import com.casic.missiles.netty.SensorhubServer;
-import io.netty.bootstrap.ServerBootstrap;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * SensorhubServerAutoConfiguration 自动配置类
- */
-@Configuration
-@ConditionalOnProperty(
- prefix = "casic.sensorhub",
- name = "enable",
- havingValue = "true"
-)
-@EnableConfigurationProperties({SensorhubProperties.class})
-@ConditionalOnClass({ServerBootstrap.class})
-public class SensorhubServerAutoConfiguration {
-
- @Bean
- public SensorhubServer sensorhubServer(SensorhubProperties sensorhubProperties) throws Exception {
- return SensorhubServer.getInstance(sensorhubProperties);
- }
-
-}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
index e90de5a..dec5e4e 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
@@ -9,6 +9,8 @@
import java.util.concurrent.*;
/**
+ * @author cz
+ * @date 2023-11-24
* 异步任务调用
*/
public class AsynTaskHelper {
@@ -25,23 +27,25 @@
/**
* 设置线程池
+ *
* @param executorService 线程池
* @return
*/
- public AsynTaskHelper setExecutorService(ExecutorService executorService){
+ public AsynTaskHelper setExecutorService(ExecutorService executorService) {
completionService = new ExecutorCompletionService(executorService);
return this;
}
/**
* 添加任务,返回结果
+ *
* @param taskId
* @param task
* @return
*/
public AsynTaskHelper addTask(String taskId, Callable task) {
AsynTaskCallable callProxy = new AsynTaskCallable(taskId, task);
- if(null == tasks || tasks.isEmpty()){
+ if (null == tasks || tasks.isEmpty()) {
tasks = new ArrayList<>();
}
tasks.add(callProxy);
@@ -50,10 +54,11 @@
/**
* 提交任务
+ *
* @return
*/
- public AsynTaskHelper submit(){
- if(null != tasks && !tasks.isEmpty()){
+ public AsynTaskHelper submit() {
+ if (null != tasks && !tasks.isEmpty()) {
for (Callable callResult : tasks) {
completionService.submit(callResult);
}
@@ -63,7 +68,8 @@
/**
* 获取返回结果
- * @return Map K为任务Id
+ *
+ * @return Map K为任务Id
* @throws ExecutionException
* @throws InterruptedException
*/
@@ -73,22 +79,23 @@
/**
* 获取返回结果
+ *
* @param timeout
* @param unit
- * @return Map K为任务Id
+ * @return Map K为任务Id
* @throws InterruptedException
* @throws ExecutionException
*/
- public Map getResult(long timeout,@NotNull TimeUnit unit) throws InterruptedException, ExecutionException {
+ public Map getResult(long timeout, @NotNull TimeUnit unit) throws InterruptedException, ExecutionException {
Map result = new HashMap<>();
- if(null == tasks){
+ if (null == tasks) {
return result;
}
for (int i = 0; i < tasks.size(); i++) {
Future> poll = completionService.poll(timeout, unit);
- if(null != poll){
+ if (null != poll) {
TaskResult task = poll.get();
- if(null != poll && null != task){
+ if (null != poll && null != task) {
result.put(task.getTaskId(), task.getData());
}
}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
index 0401822..e03781c 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
@@ -7,14 +7,6 @@
public class GuavaCacheUtil {
- /**
- * 使用guava需要引入依赖
- *
- * com.google.guava
- * guava
- * 28.2-jre
- *
- */
private static Cache cache = CacheBuilder.newBuilder()
//10分钟后过期
.expireAfterWrite(10, TimeUnit.MINUTES)
@@ -27,8 +19,22 @@
return cache.getIfPresent(k);
}
+ /**
+ * 添加缓存
+ * @param k
+ * @param value
+ */
public static void putCache(String k, Object value) {
cache.put(k, value);
}
+ /**
+ * 删除缓存
+ *
+ * @param key
+ */
+ public static void remove(String key) {
+ cache.invalidate(key);
+ }
+
}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java
new file mode 100644
index 0000000..88baf61
--- /dev/null
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java
@@ -0,0 +1,174 @@
+package com.casic.missiles.cache;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSON;
+import com.casic.missiles.model.Device;
+import com.casic.missiles.model.DeviceData;
+import com.casic.missiles.pojo.ParseResult;
+import com.casic.missiles.pojo.ProcessEventTask;
+import com.casic.missiles.service.IDeviceDataService;
+import com.casic.missiles.service.impl.DeviceDataServiceImpl;
+import com.casic.missiles.util.SpringContextUtil;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 流程节点事件监听器
+ */
+public class ProtocolProcessEventListener {
+
+ private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 20, 100,
+ TimeUnit.SECONDS, new LinkedBlockingQueue<>(20));
+
+ /**
+ * 异步生成缓存
+ *
+ * @param processEventTask
+ */
+ public static void asynAddTask(ProcessEventTask processEventTask) {
+ if (StringUtils.isNotEmpty(processEventTask.getDevcode())) {
+ GuavaCacheUtil.putCache(processEventTask.getDevcode(), processEventTask);
+ }
+ }
+
+ /**
+ * 异步设置缓存
+ *
+ * @param key
+ * @param json
+ */
+ public static void setTask(String key, Object json, Integer node) {
+ //如果key为空,则直接返回
+ if (StringUtils.isEmpty(key) || ObjectUtil.isEmpty(json)) {
+ return;
+ }
+ ProcessEventTask processEventTask = null;
+ switch (node) {
+ //解密前的数据
+ case 1:
+ //如果为空可以补救
+// if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+// processEventTask = ProcessEventTask.builder()
+// .devcode(key)
+// .decryptSoureData((String) json)
+// .decryptBeforeData((String) json)
+// .build();
+// asynAddTask(processEventTask);
+// } else {
+// processEventTask.setDecryptBeforeData((String) json);
+// }
+// break;
+ //解密后的数据
+ case 2:
+ //如果为空,则源报文和解密报文为空,作为异常判断依据
+ if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+ processEventTask = ProcessEventTask.builder()
+ .devcode(key)
+ .decryptAfterData((String) json)
+ .build();
+ asynAddTask(processEventTask);
+ } else {
+ processEventTask.setDecryptAfterData((String) json);
+ }
+ break;
+ //解析的数据
+ case 3:
+ //如果为空,则源报文和解密报文为空,作为异常判断依据
+ if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+ processEventTask = ProcessEventTask.builder()
+ .devcode(key)
+ .bizDataList((List) json)
+ .build();
+ asynAddTask(processEventTask);
+ } else {
+ processEventTask.setBizDataList((List) json);
+ }
+ break;
+ case 4:
+ //如果为空,则源报文和解密报文为空,作为异常判断依据
+ if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+ processEventTask = ProcessEventTask.builder()
+ .devcode(key)
+ .exceptionMsg((String) json)
+ .build();
+ asynAddTask(processEventTask);
+ } else {
+ processEventTask.setExceptionMsg((String) json);
+ }
+ break;
+ default:
+ return;
+ }
+ }
+
+ /**
+ * 异步设置缓存
+ *
+ * @param key
+ */
+ public static ProcessEventTask getTask(String key) {
+ if (StringUtils.isEmpty(key)) {
+ return null;
+ }
+ return (ProcessEventTask) GuavaCacheUtil.getCache(key);
+ }
+
+ /**
+ * 存库操作
+ *
+ * @param devcode
+ */
+ public static void saveData(String devcode, ParseResult result) {
+ //添加到线程池执行,异步存库
+ threadPool.execute(
+ () -> {
+ ProcessEventTask processEventTask;
+ if (ObjectUtil.isNotEmpty(getTask(devcode))) {
+ synchronized (processEventTask = getTask(devcode)) {
+ IDeviceDataService deviceDataService = SpringContextUtil.getBean(DeviceDataServiceImpl.class);
+ if (ObjectUtil.isNotEmpty(processEventTask)) {
+ List deviceDataList = new ArrayList<>();
+ for (Map BizDataMap : processEventTask.getBizDataList()) {
+ DeviceData deviceData = new DeviceData();
+ deviceData.setDevcode(processEventTask.getDevcode());
+ deviceData.setDeviceType((Integer) BizDataMap.get("deviceType"));
+ deviceData.setUptime((String) BizDataMap.get("uptime"));
+ deviceData.setLogtime(new Date());
+ deviceData.setDataJson(JSON.toJSONString(BizDataMap));
+ deviceData.setDecryptBeforeData(processEventTask.getDecryptSoureData());
+ deviceData.setDecryptAfterData(processEventTask.getDecryptAfterData());
+ if (BizDataMap.containsKey("cell")) {
+ //电量不一定每次都有
+ deviceData.setCell((Integer) BizDataMap.get("cell"));
+ }
+ if (BizDataMap.containsKey("dataValue")) {
+ //电量不一定每次都有
+ deviceData.setDataValue((float) BizDataMap.get("dataValue"));
+ }
+ deviceData.setExceptionMsg(processEventTask.getExceptionMsg());
+ deviceDataList.add(deviceData);
+ }
+ //批量保存
+ deviceDataService.saveBatch(deviceDataList);
+ }
+ }
+ //移除缓存
+ GuavaCacheUtil.remove(devcode);
+ }
+ }
+ );
+ }
+
+ //暂时不做设备的更新
+ public void setDevice(String status) {
+ Device device = new Device();
+ }
+
+}
diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml
index 2bdfa0e..75e6e82 100644
--- a/casic-iot-common/pom.xml
+++ b/casic-iot-common/pom.xml
@@ -32,10 +32,10 @@
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
+
diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml
index 4797e3a..39bc3b2 100644
--- a/sensorhub-core/pom.xml
+++ b/sensorhub-core/pom.xml
@@ -20,14 +20,6 @@
4.5.7
-
-
- redis.clients
- jedis
- 3.1.0
- jar
-
-
com.casic
sensorhub-support
@@ -62,67 +54,14 @@
mybatis-plus-boot-starter
${mybatis-plus.version}
+
+
+ com.casic
+ casic-iot-service
+ ${iot.version}
+
+
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
- 2.4.5
-
- true
-
- com.casic.missiles.ServerApplication
- exec
-
-
-
-
- repackage
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
- 1.8
- 1.8
-
-
-
-
- org.apache.maven.plugins
- maven-war-plugin
-
-
- false
-
-
-
-
-
-
- src/main/resources
-
-
- /config/*/*
- /config/*-*.yml
-
- true
-
-
- src/main/resources
-
- **/*.xml
-
- true
-
-
-
-
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java b/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
index 9753109..40c55e8 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
@@ -1,30 +1,30 @@
-package com.casic.missiles;
-
-import com.casic.missiles.netty.SensorhubServer;
-import lombok.extern.slf4j.Slf4j;
-import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.CommandLineRunner;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cache.annotation.EnableCaching;
-
-
-@SpringBootApplication(scanBasePackages = "com.casic.missiles")
-@MapperScan(basePackages = {"com.casic.missiles.**.dao", "com.casic.missiles.**.mapper"})
-@EnableCaching //开启缓存
-@Slf4j
-public class ServerApplication implements CommandLineRunner {
-
- @Autowired
- private SensorhubServer nettyServer;
- public static void main(String[] args) {
- SpringApplication.run(ServerApplication.class, args);
- }
-
- @Override
- public void run(String... args) {
- this.nettyServer.startServer();
- }
-
-}
+//package com.casic.missiles;
+//
+//import com.casic.missiles.netty.SensorhubServer;
+//import lombok.extern.slf4j.Slf4j;
+//import org.mybatis.spring.annotation.MapperScan;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.boot.CommandLineRunner;
+//import org.springframework.boot.SpringApplication;
+//import org.springframework.boot.autoconfigure.SpringBootApplication;
+//import org.springframework.cache.annotation.EnableCaching;
+//
+//
+//@SpringBootApplication(scanBasePackages = "com.casic.missiles")
+//@MapperScan(basePackages = {"com.casic.missiles.**.dao", "com.casic.missiles.**.mapper"})
+//@EnableCaching //开启缓存
+//@Slf4j
+//public class ServerApplication implements CommandLineRunner {
+//
+// @Autowired
+// private SensorhubServer nettyServer;
+// public static void main(String[] args) {
+// SpringApplication.run(ServerApplication.class, args);
+// }
+//
+// @Override
+// public void run(String... args) {
+// this.nettyServer.startServer();
+// }
+//
+//}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java b/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java
deleted file mode 100644
index 624ed4f..0000000
--- a/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.casic.missiles.autoconfig;
-
-import com.casic.missiles.netty.SensorhubServer;
-import io.netty.bootstrap.ServerBootstrap;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * SensorhubServerAutoConfiguration 自动配置类
- */
-@Configuration
-@ConditionalOnProperty(
- prefix = "casic.sensorhub",
- name = "enable",
- havingValue = "true"
-)
-@EnableConfigurationProperties({SensorhubProperties.class})
-@ConditionalOnClass({ServerBootstrap.class})
-public class SensorhubServerAutoConfiguration {
-
- @Bean
- public SensorhubServer sensorhubServer(SensorhubProperties sensorhubProperties) throws Exception {
- return SensorhubServer.getInstance(sensorhubProperties);
- }
-
-}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
index e90de5a..dec5e4e 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
@@ -9,6 +9,8 @@
import java.util.concurrent.*;
/**
+ * @author cz
+ * @date 2023-11-24
* 异步任务调用
*/
public class AsynTaskHelper {
@@ -25,23 +27,25 @@
/**
* 设置线程池
+ *
* @param executorService 线程池
* @return
*/
- public AsynTaskHelper setExecutorService(ExecutorService executorService){
+ public AsynTaskHelper setExecutorService(ExecutorService executorService) {
completionService = new ExecutorCompletionService(executorService);
return this;
}
/**
* 添加任务,返回结果
+ *
* @param taskId
* @param task
* @return
*/
public AsynTaskHelper addTask(String taskId, Callable task) {
AsynTaskCallable callProxy = new AsynTaskCallable(taskId, task);
- if(null == tasks || tasks.isEmpty()){
+ if (null == tasks || tasks.isEmpty()) {
tasks = new ArrayList<>();
}
tasks.add(callProxy);
@@ -50,10 +54,11 @@
/**
* 提交任务
+ *
* @return
*/
- public AsynTaskHelper submit(){
- if(null != tasks && !tasks.isEmpty()){
+ public AsynTaskHelper submit() {
+ if (null != tasks && !tasks.isEmpty()) {
for (Callable callResult : tasks) {
completionService.submit(callResult);
}
@@ -63,7 +68,8 @@
/**
* 获取返回结果
- * @return Map K为任务Id
+ *
+ * @return Map K为任务Id
* @throws ExecutionException
* @throws InterruptedException
*/
@@ -73,22 +79,23 @@
/**
* 获取返回结果
+ *
* @param timeout
* @param unit
- * @return Map K为任务Id
+ * @return Map K为任务Id
* @throws InterruptedException
* @throws ExecutionException
*/
- public Map getResult(long timeout,@NotNull TimeUnit unit) throws InterruptedException, ExecutionException {
+ public Map getResult(long timeout, @NotNull TimeUnit unit) throws InterruptedException, ExecutionException {
Map result = new HashMap<>();
- if(null == tasks){
+ if (null == tasks) {
return result;
}
for (int i = 0; i < tasks.size(); i++) {
Future> poll = completionService.poll(timeout, unit);
- if(null != poll){
+ if (null != poll) {
TaskResult task = poll.get();
- if(null != poll && null != task){
+ if (null != poll && null != task) {
result.put(task.getTaskId(), task.getData());
}
}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
index 0401822..e03781c 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
@@ -7,14 +7,6 @@
public class GuavaCacheUtil {
- /**
- * 使用guava需要引入依赖
- *
- * com.google.guava
- * guava
- * 28.2-jre
- *
- */
private static Cache cache = CacheBuilder.newBuilder()
//10分钟后过期
.expireAfterWrite(10, TimeUnit.MINUTES)
@@ -27,8 +19,22 @@
return cache.getIfPresent(k);
}
+ /**
+ * 添加缓存
+ * @param k
+ * @param value
+ */
public static void putCache(String k, Object value) {
cache.put(k, value);
}
+ /**
+ * 删除缓存
+ *
+ * @param key
+ */
+ public static void remove(String key) {
+ cache.invalidate(key);
+ }
+
}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java
new file mode 100644
index 0000000..88baf61
--- /dev/null
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java
@@ -0,0 +1,174 @@
+package com.casic.missiles.cache;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSON;
+import com.casic.missiles.model.Device;
+import com.casic.missiles.model.DeviceData;
+import com.casic.missiles.pojo.ParseResult;
+import com.casic.missiles.pojo.ProcessEventTask;
+import com.casic.missiles.service.IDeviceDataService;
+import com.casic.missiles.service.impl.DeviceDataServiceImpl;
+import com.casic.missiles.util.SpringContextUtil;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 流程节点事件监听器
+ */
+public class ProtocolProcessEventListener {
+
+ private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 20, 100,
+ TimeUnit.SECONDS, new LinkedBlockingQueue<>(20));
+
+ /**
+ * 异步生成缓存
+ *
+ * @param processEventTask
+ */
+ public static void asynAddTask(ProcessEventTask processEventTask) {
+ if (StringUtils.isNotEmpty(processEventTask.getDevcode())) {
+ GuavaCacheUtil.putCache(processEventTask.getDevcode(), processEventTask);
+ }
+ }
+
+ /**
+ * 异步设置缓存
+ *
+ * @param key
+ * @param json
+ */
+ public static void setTask(String key, Object json, Integer node) {
+ //如果key为空,则直接返回
+ if (StringUtils.isEmpty(key) || ObjectUtil.isEmpty(json)) {
+ return;
+ }
+ ProcessEventTask processEventTask = null;
+ switch (node) {
+ //解密前的数据
+ case 1:
+ //如果为空可以补救
+// if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+// processEventTask = ProcessEventTask.builder()
+// .devcode(key)
+// .decryptSoureData((String) json)
+// .decryptBeforeData((String) json)
+// .build();
+// asynAddTask(processEventTask);
+// } else {
+// processEventTask.setDecryptBeforeData((String) json);
+// }
+// break;
+ //解密后的数据
+ case 2:
+ //如果为空,则源报文和解密报文为空,作为异常判断依据
+ if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+ processEventTask = ProcessEventTask.builder()
+ .devcode(key)
+ .decryptAfterData((String) json)
+ .build();
+ asynAddTask(processEventTask);
+ } else {
+ processEventTask.setDecryptAfterData((String) json);
+ }
+ break;
+ //解析的数据
+ case 3:
+ //如果为空,则源报文和解密报文为空,作为异常判断依据
+ if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+ processEventTask = ProcessEventTask.builder()
+ .devcode(key)
+ .bizDataList((List) json)
+ .build();
+ asynAddTask(processEventTask);
+ } else {
+ processEventTask.setBizDataList((List) json);
+ }
+ break;
+ case 4:
+ //如果为空,则源报文和解密报文为空,作为异常判断依据
+ if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+ processEventTask = ProcessEventTask.builder()
+ .devcode(key)
+ .exceptionMsg((String) json)
+ .build();
+ asynAddTask(processEventTask);
+ } else {
+ processEventTask.setExceptionMsg((String) json);
+ }
+ break;
+ default:
+ return;
+ }
+ }
+
+ /**
+ * 异步设置缓存
+ *
+ * @param key
+ */
+ public static ProcessEventTask getTask(String key) {
+ if (StringUtils.isEmpty(key)) {
+ return null;
+ }
+ return (ProcessEventTask) GuavaCacheUtil.getCache(key);
+ }
+
+ /**
+ * 存库操作
+ *
+ * @param devcode
+ */
+ public static void saveData(String devcode, ParseResult result) {
+ //添加到线程池执行,异步存库
+ threadPool.execute(
+ () -> {
+ ProcessEventTask processEventTask;
+ if (ObjectUtil.isNotEmpty(getTask(devcode))) {
+ synchronized (processEventTask = getTask(devcode)) {
+ IDeviceDataService deviceDataService = SpringContextUtil.getBean(DeviceDataServiceImpl.class);
+ if (ObjectUtil.isNotEmpty(processEventTask)) {
+ List deviceDataList = new ArrayList<>();
+ for (Map BizDataMap : processEventTask.getBizDataList()) {
+ DeviceData deviceData = new DeviceData();
+ deviceData.setDevcode(processEventTask.getDevcode());
+ deviceData.setDeviceType((Integer) BizDataMap.get("deviceType"));
+ deviceData.setUptime((String) BizDataMap.get("uptime"));
+ deviceData.setLogtime(new Date());
+ deviceData.setDataJson(JSON.toJSONString(BizDataMap));
+ deviceData.setDecryptBeforeData(processEventTask.getDecryptSoureData());
+ deviceData.setDecryptAfterData(processEventTask.getDecryptAfterData());
+ if (BizDataMap.containsKey("cell")) {
+ //电量不一定每次都有
+ deviceData.setCell((Integer) BizDataMap.get("cell"));
+ }
+ if (BizDataMap.containsKey("dataValue")) {
+ //电量不一定每次都有
+ deviceData.setDataValue((float) BizDataMap.get("dataValue"));
+ }
+ deviceData.setExceptionMsg(processEventTask.getExceptionMsg());
+ deviceDataList.add(deviceData);
+ }
+ //批量保存
+ deviceDataService.saveBatch(deviceDataList);
+ }
+ }
+ //移除缓存
+ GuavaCacheUtil.remove(devcode);
+ }
+ }
+ );
+ }
+
+ //暂时不做设备的更新
+ public void setDevice(String status) {
+ Device device = new Device();
+ }
+
+}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/listenerEvent.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/listenerEvent.java
deleted file mode 100644
index 2f9c711..0000000
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/listenerEvent.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.casic.missiles.cache;
-
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
-
-public class listenerEvent {
-
- private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 20, 100,
- TimeUnit.SECONDS, new LinkedBlockingQueue<>(20));
-
- /**
- * 异步生成缓存
- *
- * @param key
- * @param json
- */
- public void asynCreateLogCache(String key, String json) {
-
-
- }
-
-
-}
diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml
index 2bdfa0e..75e6e82 100644
--- a/casic-iot-common/pom.xml
+++ b/casic-iot-common/pom.xml
@@ -32,10 +32,10 @@
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
+
diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml
index 4797e3a..39bc3b2 100644
--- a/sensorhub-core/pom.xml
+++ b/sensorhub-core/pom.xml
@@ -20,14 +20,6 @@
4.5.7
-
-
- redis.clients
- jedis
- 3.1.0
- jar
-
-
com.casic
sensorhub-support
@@ -62,67 +54,14 @@
mybatis-plus-boot-starter
${mybatis-plus.version}
+
+
+ com.casic
+ casic-iot-service
+ ${iot.version}
+
+
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
- 2.4.5
-
- true
-
- com.casic.missiles.ServerApplication
- exec
-
-
-
-
- repackage
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
- 1.8
- 1.8
-
-
-
-
- org.apache.maven.plugins
- maven-war-plugin
-
-
- false
-
-
-
-
-
-
- src/main/resources
-
-
- /config/*/*
- /config/*-*.yml
-
- true
-
-
- src/main/resources
-
- **/*.xml
-
- true
-
-
-
-
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java b/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
index 9753109..40c55e8 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
@@ -1,30 +1,30 @@
-package com.casic.missiles;
-
-import com.casic.missiles.netty.SensorhubServer;
-import lombok.extern.slf4j.Slf4j;
-import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.CommandLineRunner;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cache.annotation.EnableCaching;
-
-
-@SpringBootApplication(scanBasePackages = "com.casic.missiles")
-@MapperScan(basePackages = {"com.casic.missiles.**.dao", "com.casic.missiles.**.mapper"})
-@EnableCaching //开启缓存
-@Slf4j
-public class ServerApplication implements CommandLineRunner {
-
- @Autowired
- private SensorhubServer nettyServer;
- public static void main(String[] args) {
- SpringApplication.run(ServerApplication.class, args);
- }
-
- @Override
- public void run(String... args) {
- this.nettyServer.startServer();
- }
-
-}
+//package com.casic.missiles;
+//
+//import com.casic.missiles.netty.SensorhubServer;
+//import lombok.extern.slf4j.Slf4j;
+//import org.mybatis.spring.annotation.MapperScan;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.boot.CommandLineRunner;
+//import org.springframework.boot.SpringApplication;
+//import org.springframework.boot.autoconfigure.SpringBootApplication;
+//import org.springframework.cache.annotation.EnableCaching;
+//
+//
+//@SpringBootApplication(scanBasePackages = "com.casic.missiles")
+//@MapperScan(basePackages = {"com.casic.missiles.**.dao", "com.casic.missiles.**.mapper"})
+//@EnableCaching //开启缓存
+//@Slf4j
+//public class ServerApplication implements CommandLineRunner {
+//
+// @Autowired
+// private SensorhubServer nettyServer;
+// public static void main(String[] args) {
+// SpringApplication.run(ServerApplication.class, args);
+// }
+//
+// @Override
+// public void run(String... args) {
+// this.nettyServer.startServer();
+// }
+//
+//}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java b/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java
deleted file mode 100644
index 624ed4f..0000000
--- a/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.casic.missiles.autoconfig;
-
-import com.casic.missiles.netty.SensorhubServer;
-import io.netty.bootstrap.ServerBootstrap;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * SensorhubServerAutoConfiguration 自动配置类
- */
-@Configuration
-@ConditionalOnProperty(
- prefix = "casic.sensorhub",
- name = "enable",
- havingValue = "true"
-)
-@EnableConfigurationProperties({SensorhubProperties.class})
-@ConditionalOnClass({ServerBootstrap.class})
-public class SensorhubServerAutoConfiguration {
-
- @Bean
- public SensorhubServer sensorhubServer(SensorhubProperties sensorhubProperties) throws Exception {
- return SensorhubServer.getInstance(sensorhubProperties);
- }
-
-}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
index e90de5a..dec5e4e 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
@@ -9,6 +9,8 @@
import java.util.concurrent.*;
/**
+ * @author cz
+ * @date 2023-11-24
* 异步任务调用
*/
public class AsynTaskHelper {
@@ -25,23 +27,25 @@
/**
* 设置线程池
+ *
* @param executorService 线程池
* @return
*/
- public AsynTaskHelper setExecutorService(ExecutorService executorService){
+ public AsynTaskHelper setExecutorService(ExecutorService executorService) {
completionService = new ExecutorCompletionService(executorService);
return this;
}
/**
* 添加任务,返回结果
+ *
* @param taskId
* @param task
* @return
*/
public AsynTaskHelper addTask(String taskId, Callable task) {
AsynTaskCallable callProxy = new AsynTaskCallable(taskId, task);
- if(null == tasks || tasks.isEmpty()){
+ if (null == tasks || tasks.isEmpty()) {
tasks = new ArrayList<>();
}
tasks.add(callProxy);
@@ -50,10 +54,11 @@
/**
* 提交任务
+ *
* @return
*/
- public AsynTaskHelper submit(){
- if(null != tasks && !tasks.isEmpty()){
+ public AsynTaskHelper submit() {
+ if (null != tasks && !tasks.isEmpty()) {
for (Callable callResult : tasks) {
completionService.submit(callResult);
}
@@ -63,7 +68,8 @@
/**
* 获取返回结果
- * @return Map K为任务Id
+ *
+ * @return Map K为任务Id
* @throws ExecutionException
* @throws InterruptedException
*/
@@ -73,22 +79,23 @@
/**
* 获取返回结果
+ *
* @param timeout
* @param unit
- * @return Map K为任务Id
+ * @return Map K为任务Id
* @throws InterruptedException
* @throws ExecutionException
*/
- public Map getResult(long timeout,@NotNull TimeUnit unit) throws InterruptedException, ExecutionException {
+ public Map getResult(long timeout, @NotNull TimeUnit unit) throws InterruptedException, ExecutionException {
Map result = new HashMap<>();
- if(null == tasks){
+ if (null == tasks) {
return result;
}
for (int i = 0; i < tasks.size(); i++) {
Future> poll = completionService.poll(timeout, unit);
- if(null != poll){
+ if (null != poll) {
TaskResult task = poll.get();
- if(null != poll && null != task){
+ if (null != poll && null != task) {
result.put(task.getTaskId(), task.getData());
}
}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
index 0401822..e03781c 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
@@ -7,14 +7,6 @@
public class GuavaCacheUtil {
- /**
- * 使用guava需要引入依赖
- *
- * com.google.guava
- * guava
- * 28.2-jre
- *
- */
private static Cache cache = CacheBuilder.newBuilder()
//10分钟后过期
.expireAfterWrite(10, TimeUnit.MINUTES)
@@ -27,8 +19,22 @@
return cache.getIfPresent(k);
}
+ /**
+ * 添加缓存
+ * @param k
+ * @param value
+ */
public static void putCache(String k, Object value) {
cache.put(k, value);
}
+ /**
+ * 删除缓存
+ *
+ * @param key
+ */
+ public static void remove(String key) {
+ cache.invalidate(key);
+ }
+
}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java
new file mode 100644
index 0000000..88baf61
--- /dev/null
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java
@@ -0,0 +1,174 @@
+package com.casic.missiles.cache;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSON;
+import com.casic.missiles.model.Device;
+import com.casic.missiles.model.DeviceData;
+import com.casic.missiles.pojo.ParseResult;
+import com.casic.missiles.pojo.ProcessEventTask;
+import com.casic.missiles.service.IDeviceDataService;
+import com.casic.missiles.service.impl.DeviceDataServiceImpl;
+import com.casic.missiles.util.SpringContextUtil;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 流程节点事件监听器
+ */
+public class ProtocolProcessEventListener {
+
+ private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 20, 100,
+ TimeUnit.SECONDS, new LinkedBlockingQueue<>(20));
+
+ /**
+ * 异步生成缓存
+ *
+ * @param processEventTask
+ */
+ public static void asynAddTask(ProcessEventTask processEventTask) {
+ if (StringUtils.isNotEmpty(processEventTask.getDevcode())) {
+ GuavaCacheUtil.putCache(processEventTask.getDevcode(), processEventTask);
+ }
+ }
+
+ /**
+ * 异步设置缓存
+ *
+ * @param key
+ * @param json
+ */
+ public static void setTask(String key, Object json, Integer node) {
+ //如果key为空,则直接返回
+ if (StringUtils.isEmpty(key) || ObjectUtil.isEmpty(json)) {
+ return;
+ }
+ ProcessEventTask processEventTask = null;
+ switch (node) {
+ //解密前的数据
+ case 1:
+ //如果为空可以补救
+// if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+// processEventTask = ProcessEventTask.builder()
+// .devcode(key)
+// .decryptSoureData((String) json)
+// .decryptBeforeData((String) json)
+// .build();
+// asynAddTask(processEventTask);
+// } else {
+// processEventTask.setDecryptBeforeData((String) json);
+// }
+// break;
+ //解密后的数据
+ case 2:
+ //如果为空,则源报文和解密报文为空,作为异常判断依据
+ if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+ processEventTask = ProcessEventTask.builder()
+ .devcode(key)
+ .decryptAfterData((String) json)
+ .build();
+ asynAddTask(processEventTask);
+ } else {
+ processEventTask.setDecryptAfterData((String) json);
+ }
+ break;
+ //解析的数据
+ case 3:
+ //如果为空,则源报文和解密报文为空,作为异常判断依据
+ if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+ processEventTask = ProcessEventTask.builder()
+ .devcode(key)
+ .bizDataList((List) json)
+ .build();
+ asynAddTask(processEventTask);
+ } else {
+ processEventTask.setBizDataList((List) json);
+ }
+ break;
+ case 4:
+ //如果为空,则源报文和解密报文为空,作为异常判断依据
+ if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+ processEventTask = ProcessEventTask.builder()
+ .devcode(key)
+ .exceptionMsg((String) json)
+ .build();
+ asynAddTask(processEventTask);
+ } else {
+ processEventTask.setExceptionMsg((String) json);
+ }
+ break;
+ default:
+ return;
+ }
+ }
+
+ /**
+ * 异步设置缓存
+ *
+ * @param key
+ */
+ public static ProcessEventTask getTask(String key) {
+ if (StringUtils.isEmpty(key)) {
+ return null;
+ }
+ return (ProcessEventTask) GuavaCacheUtil.getCache(key);
+ }
+
+ /**
+ * 存库操作
+ *
+ * @param devcode
+ */
+ public static void saveData(String devcode, ParseResult result) {
+ //添加到线程池执行,异步存库
+ threadPool.execute(
+ () -> {
+ ProcessEventTask processEventTask;
+ if (ObjectUtil.isNotEmpty(getTask(devcode))) {
+ synchronized (processEventTask = getTask(devcode)) {
+ IDeviceDataService deviceDataService = SpringContextUtil.getBean(DeviceDataServiceImpl.class);
+ if (ObjectUtil.isNotEmpty(processEventTask)) {
+ List deviceDataList = new ArrayList<>();
+ for (Map BizDataMap : processEventTask.getBizDataList()) {
+ DeviceData deviceData = new DeviceData();
+ deviceData.setDevcode(processEventTask.getDevcode());
+ deviceData.setDeviceType((Integer) BizDataMap.get("deviceType"));
+ deviceData.setUptime((String) BizDataMap.get("uptime"));
+ deviceData.setLogtime(new Date());
+ deviceData.setDataJson(JSON.toJSONString(BizDataMap));
+ deviceData.setDecryptBeforeData(processEventTask.getDecryptSoureData());
+ deviceData.setDecryptAfterData(processEventTask.getDecryptAfterData());
+ if (BizDataMap.containsKey("cell")) {
+ //电量不一定每次都有
+ deviceData.setCell((Integer) BizDataMap.get("cell"));
+ }
+ if (BizDataMap.containsKey("dataValue")) {
+ //电量不一定每次都有
+ deviceData.setDataValue((float) BizDataMap.get("dataValue"));
+ }
+ deviceData.setExceptionMsg(processEventTask.getExceptionMsg());
+ deviceDataList.add(deviceData);
+ }
+ //批量保存
+ deviceDataService.saveBatch(deviceDataList);
+ }
+ }
+ //移除缓存
+ GuavaCacheUtil.remove(devcode);
+ }
+ }
+ );
+ }
+
+ //暂时不做设备的更新
+ public void setDevice(String status) {
+ Device device = new Device();
+ }
+
+}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/listenerEvent.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/listenerEvent.java
deleted file mode 100644
index 2f9c711..0000000
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/listenerEvent.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.casic.missiles.cache;
-
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
-
-public class listenerEvent {
-
- private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 20, 100,
- TimeUnit.SECONDS, new LinkedBlockingQueue<>(20));
-
- /**
- * 异步生成缓存
- *
- * @param key
- * @param json
- */
- public void asynCreateLogCache(String key, String json) {
-
-
- }
-
-
-}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java
index 4e6beea..01b20f5 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java
@@ -2,7 +2,7 @@
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
-import com.casic.missiles.cache.GuavaCacheUtil;
+import com.casic.missiles.cache.ProtocolProcessEventListener;
import com.casic.missiles.enums.EngineExceptionEnum;
import com.casic.missiles.enums.ReplyCommandEnum;
import com.casic.missiles.exception.EngineException;
@@ -56,12 +56,16 @@
}
ParseResult result = null;
+ String devcode = null;
try {
//暂时先取第一个, 减少类的创建销毁与构建
AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig);
+ Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf);
+ devcode = (String) parseFixedDataMap.get("devcode");
// 通过协议工厂匹配,匹配规则,获取规则配置
- RuleConfig ruleConfig = getRuleConfig(protocolFactory, byteBuf);
+ RuleConfig ruleConfig = getRuleConfig(protocolFactory, parseFixedDataMap);
if (ObjectUtil.isEmpty(ruleConfig)) {
+ //打印源数据,设备编号
byteBuf.resetReaderIndex();
log.error("解析匹配失败,匹配帧信息为{}", ByteBufUtil.hexDump(byteBuf));
byteBuf.readBytes(protocolConfig.getPreFix().length());
@@ -94,10 +98,14 @@
}
//获取报文的业务内容
ByteBuf bizDataByteBuf = protocolFactory.getProtocolFieldConfigProvider().getDataContentBuf(intactMessageByte);
- log.debug("解析的密文是----------"+ByteBufUtil.hexDump(bizDataByteBuf));
+ //解密前的报文
+ log.debug("解析的密文是----------" + ByteBufUtil.hexDump(bizDataByteBuf));
+// ProtocolProcessEventListener.setTask(devcode, ByteBufUtil.hexDump(bizDataByteBuf), 1);
//密文解析
- ByteBuf clearZeroPlainBuf = datagramEventProvider.getSafeDatagram(bizDataByteBuf, protocolFactory.getProtocolFieldConfigProvider().getFixFieldConfigMap(),fieldLengthSupplier);
- log.debug("解析的明文是----------"+ByteBufUtil.hexDump(clearZeroPlainBuf));
+ ByteBuf clearZeroPlainBuf = datagramEventProvider.getSafeDatagram(bizDataByteBuf, protocolFactory.getProtocolFieldConfigProvider().getFixFieldConfigMap(), fieldLengthSupplier);
+ log.debug("解析的明文是----------" + ByteBufUtil.hexDump(clearZeroPlainBuf));
+ ProtocolProcessEventListener.setTask(devcode, ByteBufUtil.hexDump(clearZeroPlainBuf), 2);
+ //解密后报文
//解析组合业务字段
ruleConfigFactory.getCombinedFieldConfigProvider().parseDataField(ruleConfig, clearZeroPlainBuf,
ruleConfigFactory.getFieldConfigProvider().getFieldConfigsMap(), protocolConfig.getFieldRuleConfigMap());
@@ -112,16 +120,19 @@
for (AbstractReplyCommandPostProcessing replyCommandPostProcessing : replyCommandPostProcessings) {
result = replyCommandPostProcessing.obtainReplyCommand(bizDataMap, result, ruleConfigFactory, protocolFactory);
}
- //数据发送,异步
+ ProtocolProcessEventListener.setTask(devcode, bizDataMap, 3);
+ //存储数据
datagramEventProvider.storeData(bizDataMap);
} catch (RuntimeException rex) {
log.error("解析出现异常,异常信息为{}", rex);
- result=null;
+ //数据发送,异步,异常拦截
+ ProtocolProcessEventListener.setTask(devcode, rex.getMessage(), 4);
+ result = null;
frozenInvalidByteBuf(byteBuf, protocolConfig);
LeadingCodeMatcher.rematch(byteBuf, protocolConfigProvider.getMatchList());
- }finally {
-// GuavaCacheUtil.putCache("licValid",validLicResult);
-// ValidateResult validLicResult = (ValidateResult) GuavaCacheUtil.getCache("licValid");
+ } finally {
+ //数据发送,异步,转存整体数据
+ ProtocolProcessEventListener.saveData(devcode, result);
return result;
}
}
diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml
index 2bdfa0e..75e6e82 100644
--- a/casic-iot-common/pom.xml
+++ b/casic-iot-common/pom.xml
@@ -32,10 +32,10 @@
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
+
diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml
index 4797e3a..39bc3b2 100644
--- a/sensorhub-core/pom.xml
+++ b/sensorhub-core/pom.xml
@@ -20,14 +20,6 @@
4.5.7
-
-
- redis.clients
- jedis
- 3.1.0
- jar
-
-
com.casic
sensorhub-support
@@ -62,67 +54,14 @@
mybatis-plus-boot-starter
${mybatis-plus.version}
+
+
+ com.casic
+ casic-iot-service
+ ${iot.version}
+
+
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
- 2.4.5
-
- true
-
- com.casic.missiles.ServerApplication
- exec
-
-
-
-
- repackage
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
- 1.8
- 1.8
-
-
-
-
- org.apache.maven.plugins
- maven-war-plugin
-
-
- false
-
-
-
-
-
-
- src/main/resources
-
-
- /config/*/*
- /config/*-*.yml
-
- true
-
-
- src/main/resources
-
- **/*.xml
-
- true
-
-
-
-
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java b/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
index 9753109..40c55e8 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
@@ -1,30 +1,30 @@
-package com.casic.missiles;
-
-import com.casic.missiles.netty.SensorhubServer;
-import lombok.extern.slf4j.Slf4j;
-import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.CommandLineRunner;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cache.annotation.EnableCaching;
-
-
-@SpringBootApplication(scanBasePackages = "com.casic.missiles")
-@MapperScan(basePackages = {"com.casic.missiles.**.dao", "com.casic.missiles.**.mapper"})
-@EnableCaching //开启缓存
-@Slf4j
-public class ServerApplication implements CommandLineRunner {
-
- @Autowired
- private SensorhubServer nettyServer;
- public static void main(String[] args) {
- SpringApplication.run(ServerApplication.class, args);
- }
-
- @Override
- public void run(String... args) {
- this.nettyServer.startServer();
- }
-
-}
+//package com.casic.missiles;
+//
+//import com.casic.missiles.netty.SensorhubServer;
+//import lombok.extern.slf4j.Slf4j;
+//import org.mybatis.spring.annotation.MapperScan;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.boot.CommandLineRunner;
+//import org.springframework.boot.SpringApplication;
+//import org.springframework.boot.autoconfigure.SpringBootApplication;
+//import org.springframework.cache.annotation.EnableCaching;
+//
+//
+//@SpringBootApplication(scanBasePackages = "com.casic.missiles")
+//@MapperScan(basePackages = {"com.casic.missiles.**.dao", "com.casic.missiles.**.mapper"})
+//@EnableCaching //开启缓存
+//@Slf4j
+//public class ServerApplication implements CommandLineRunner {
+//
+// @Autowired
+// private SensorhubServer nettyServer;
+// public static void main(String[] args) {
+// SpringApplication.run(ServerApplication.class, args);
+// }
+//
+// @Override
+// public void run(String... args) {
+// this.nettyServer.startServer();
+// }
+//
+//}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java b/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java
deleted file mode 100644
index 624ed4f..0000000
--- a/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.casic.missiles.autoconfig;
-
-import com.casic.missiles.netty.SensorhubServer;
-import io.netty.bootstrap.ServerBootstrap;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * SensorhubServerAutoConfiguration 自动配置类
- */
-@Configuration
-@ConditionalOnProperty(
- prefix = "casic.sensorhub",
- name = "enable",
- havingValue = "true"
-)
-@EnableConfigurationProperties({SensorhubProperties.class})
-@ConditionalOnClass({ServerBootstrap.class})
-public class SensorhubServerAutoConfiguration {
-
- @Bean
- public SensorhubServer sensorhubServer(SensorhubProperties sensorhubProperties) throws Exception {
- return SensorhubServer.getInstance(sensorhubProperties);
- }
-
-}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
index e90de5a..dec5e4e 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
@@ -9,6 +9,8 @@
import java.util.concurrent.*;
/**
+ * @author cz
+ * @date 2023-11-24
* 异步任务调用
*/
public class AsynTaskHelper {
@@ -25,23 +27,25 @@
/**
* 设置线程池
+ *
* @param executorService 线程池
* @return
*/
- public AsynTaskHelper setExecutorService(ExecutorService executorService){
+ public AsynTaskHelper setExecutorService(ExecutorService executorService) {
completionService = new ExecutorCompletionService(executorService);
return this;
}
/**
* 添加任务,返回结果
+ *
* @param taskId
* @param task
* @return
*/
public AsynTaskHelper addTask(String taskId, Callable task) {
AsynTaskCallable callProxy = new AsynTaskCallable(taskId, task);
- if(null == tasks || tasks.isEmpty()){
+ if (null == tasks || tasks.isEmpty()) {
tasks = new ArrayList<>();
}
tasks.add(callProxy);
@@ -50,10 +54,11 @@
/**
* 提交任务
+ *
* @return
*/
- public AsynTaskHelper submit(){
- if(null != tasks && !tasks.isEmpty()){
+ public AsynTaskHelper submit() {
+ if (null != tasks && !tasks.isEmpty()) {
for (Callable callResult : tasks) {
completionService.submit(callResult);
}
@@ -63,7 +68,8 @@
/**
* 获取返回结果
- * @return Map K为任务Id
+ *
+ * @return Map K为任务Id
* @throws ExecutionException
* @throws InterruptedException
*/
@@ -73,22 +79,23 @@
/**
* 获取返回结果
+ *
* @param timeout
* @param unit
- * @return Map K为任务Id
+ * @return Map K为任务Id
* @throws InterruptedException
* @throws ExecutionException
*/
- public Map getResult(long timeout,@NotNull TimeUnit unit) throws InterruptedException, ExecutionException {
+ public Map getResult(long timeout, @NotNull TimeUnit unit) throws InterruptedException, ExecutionException {
Map result = new HashMap<>();
- if(null == tasks){
+ if (null == tasks) {
return result;
}
for (int i = 0; i < tasks.size(); i++) {
Future> poll = completionService.poll(timeout, unit);
- if(null != poll){
+ if (null != poll) {
TaskResult task = poll.get();
- if(null != poll && null != task){
+ if (null != poll && null != task) {
result.put(task.getTaskId(), task.getData());
}
}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
index 0401822..e03781c 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
@@ -7,14 +7,6 @@
public class GuavaCacheUtil {
- /**
- * 使用guava需要引入依赖
- *
- * com.google.guava
- * guava
- * 28.2-jre
- *
- */
private static Cache cache = CacheBuilder.newBuilder()
//10分钟后过期
.expireAfterWrite(10, TimeUnit.MINUTES)
@@ -27,8 +19,22 @@
return cache.getIfPresent(k);
}
+ /**
+ * 添加缓存
+ * @param k
+ * @param value
+ */
public static void putCache(String k, Object value) {
cache.put(k, value);
}
+ /**
+ * 删除缓存
+ *
+ * @param key
+ */
+ public static void remove(String key) {
+ cache.invalidate(key);
+ }
+
}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java
new file mode 100644
index 0000000..88baf61
--- /dev/null
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java
@@ -0,0 +1,174 @@
+package com.casic.missiles.cache;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSON;
+import com.casic.missiles.model.Device;
+import com.casic.missiles.model.DeviceData;
+import com.casic.missiles.pojo.ParseResult;
+import com.casic.missiles.pojo.ProcessEventTask;
+import com.casic.missiles.service.IDeviceDataService;
+import com.casic.missiles.service.impl.DeviceDataServiceImpl;
+import com.casic.missiles.util.SpringContextUtil;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 流程节点事件监听器
+ */
+public class ProtocolProcessEventListener {
+
+ private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 20, 100,
+ TimeUnit.SECONDS, new LinkedBlockingQueue<>(20));
+
+ /**
+ * 异步生成缓存
+ *
+ * @param processEventTask
+ */
+ public static void asynAddTask(ProcessEventTask processEventTask) {
+ if (StringUtils.isNotEmpty(processEventTask.getDevcode())) {
+ GuavaCacheUtil.putCache(processEventTask.getDevcode(), processEventTask);
+ }
+ }
+
+ /**
+ * 异步设置缓存
+ *
+ * @param key
+ * @param json
+ */
+ public static void setTask(String key, Object json, Integer node) {
+ //如果key为空,则直接返回
+ if (StringUtils.isEmpty(key) || ObjectUtil.isEmpty(json)) {
+ return;
+ }
+ ProcessEventTask processEventTask = null;
+ switch (node) {
+ //解密前的数据
+ case 1:
+ //如果为空可以补救
+// if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+// processEventTask = ProcessEventTask.builder()
+// .devcode(key)
+// .decryptSoureData((String) json)
+// .decryptBeforeData((String) json)
+// .build();
+// asynAddTask(processEventTask);
+// } else {
+// processEventTask.setDecryptBeforeData((String) json);
+// }
+// break;
+ //解密后的数据
+ case 2:
+ //如果为空,则源报文和解密报文为空,作为异常判断依据
+ if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+ processEventTask = ProcessEventTask.builder()
+ .devcode(key)
+ .decryptAfterData((String) json)
+ .build();
+ asynAddTask(processEventTask);
+ } else {
+ processEventTask.setDecryptAfterData((String) json);
+ }
+ break;
+ //解析的数据
+ case 3:
+ //如果为空,则源报文和解密报文为空,作为异常判断依据
+ if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+ processEventTask = ProcessEventTask.builder()
+ .devcode(key)
+ .bizDataList((List) json)
+ .build();
+ asynAddTask(processEventTask);
+ } else {
+ processEventTask.setBizDataList((List) json);
+ }
+ break;
+ case 4:
+ //如果为空,则源报文和解密报文为空,作为异常判断依据
+ if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+ processEventTask = ProcessEventTask.builder()
+ .devcode(key)
+ .exceptionMsg((String) json)
+ .build();
+ asynAddTask(processEventTask);
+ } else {
+ processEventTask.setExceptionMsg((String) json);
+ }
+ break;
+ default:
+ return;
+ }
+ }
+
+ /**
+ * 异步设置缓存
+ *
+ * @param key
+ */
+ public static ProcessEventTask getTask(String key) {
+ if (StringUtils.isEmpty(key)) {
+ return null;
+ }
+ return (ProcessEventTask) GuavaCacheUtil.getCache(key);
+ }
+
+ /**
+ * 存库操作
+ *
+ * @param devcode
+ */
+ public static void saveData(String devcode, ParseResult result) {
+ //添加到线程池执行,异步存库
+ threadPool.execute(
+ () -> {
+ ProcessEventTask processEventTask;
+ if (ObjectUtil.isNotEmpty(getTask(devcode))) {
+ synchronized (processEventTask = getTask(devcode)) {
+ IDeviceDataService deviceDataService = SpringContextUtil.getBean(DeviceDataServiceImpl.class);
+ if (ObjectUtil.isNotEmpty(processEventTask)) {
+ List deviceDataList = new ArrayList<>();
+ for (Map BizDataMap : processEventTask.getBizDataList()) {
+ DeviceData deviceData = new DeviceData();
+ deviceData.setDevcode(processEventTask.getDevcode());
+ deviceData.setDeviceType((Integer) BizDataMap.get("deviceType"));
+ deviceData.setUptime((String) BizDataMap.get("uptime"));
+ deviceData.setLogtime(new Date());
+ deviceData.setDataJson(JSON.toJSONString(BizDataMap));
+ deviceData.setDecryptBeforeData(processEventTask.getDecryptSoureData());
+ deviceData.setDecryptAfterData(processEventTask.getDecryptAfterData());
+ if (BizDataMap.containsKey("cell")) {
+ //电量不一定每次都有
+ deviceData.setCell((Integer) BizDataMap.get("cell"));
+ }
+ if (BizDataMap.containsKey("dataValue")) {
+ //电量不一定每次都有
+ deviceData.setDataValue((float) BizDataMap.get("dataValue"));
+ }
+ deviceData.setExceptionMsg(processEventTask.getExceptionMsg());
+ deviceDataList.add(deviceData);
+ }
+ //批量保存
+ deviceDataService.saveBatch(deviceDataList);
+ }
+ }
+ //移除缓存
+ GuavaCacheUtil.remove(devcode);
+ }
+ }
+ );
+ }
+
+ //暂时不做设备的更新
+ public void setDevice(String status) {
+ Device device = new Device();
+ }
+
+}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/listenerEvent.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/listenerEvent.java
deleted file mode 100644
index 2f9c711..0000000
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/listenerEvent.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.casic.missiles.cache;
-
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
-
-public class listenerEvent {
-
- private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 20, 100,
- TimeUnit.SECONDS, new LinkedBlockingQueue<>(20));
-
- /**
- * 异步生成缓存
- *
- * @param key
- * @param json
- */
- public void asynCreateLogCache(String key, String json) {
-
-
- }
-
-
-}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java
index 4e6beea..01b20f5 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java
@@ -2,7 +2,7 @@
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
-import com.casic.missiles.cache.GuavaCacheUtil;
+import com.casic.missiles.cache.ProtocolProcessEventListener;
import com.casic.missiles.enums.EngineExceptionEnum;
import com.casic.missiles.enums.ReplyCommandEnum;
import com.casic.missiles.exception.EngineException;
@@ -56,12 +56,16 @@
}
ParseResult result = null;
+ String devcode = null;
try {
//暂时先取第一个, 减少类的创建销毁与构建
AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig);
+ Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf);
+ devcode = (String) parseFixedDataMap.get("devcode");
// 通过协议工厂匹配,匹配规则,获取规则配置
- RuleConfig ruleConfig = getRuleConfig(protocolFactory, byteBuf);
+ RuleConfig ruleConfig = getRuleConfig(protocolFactory, parseFixedDataMap);
if (ObjectUtil.isEmpty(ruleConfig)) {
+ //打印源数据,设备编号
byteBuf.resetReaderIndex();
log.error("解析匹配失败,匹配帧信息为{}", ByteBufUtil.hexDump(byteBuf));
byteBuf.readBytes(protocolConfig.getPreFix().length());
@@ -94,10 +98,14 @@
}
//获取报文的业务内容
ByteBuf bizDataByteBuf = protocolFactory.getProtocolFieldConfigProvider().getDataContentBuf(intactMessageByte);
- log.debug("解析的密文是----------"+ByteBufUtil.hexDump(bizDataByteBuf));
+ //解密前的报文
+ log.debug("解析的密文是----------" + ByteBufUtil.hexDump(bizDataByteBuf));
+// ProtocolProcessEventListener.setTask(devcode, ByteBufUtil.hexDump(bizDataByteBuf), 1);
//密文解析
- ByteBuf clearZeroPlainBuf = datagramEventProvider.getSafeDatagram(bizDataByteBuf, protocolFactory.getProtocolFieldConfigProvider().getFixFieldConfigMap(),fieldLengthSupplier);
- log.debug("解析的明文是----------"+ByteBufUtil.hexDump(clearZeroPlainBuf));
+ ByteBuf clearZeroPlainBuf = datagramEventProvider.getSafeDatagram(bizDataByteBuf, protocolFactory.getProtocolFieldConfigProvider().getFixFieldConfigMap(), fieldLengthSupplier);
+ log.debug("解析的明文是----------" + ByteBufUtil.hexDump(clearZeroPlainBuf));
+ ProtocolProcessEventListener.setTask(devcode, ByteBufUtil.hexDump(clearZeroPlainBuf), 2);
+ //解密后报文
//解析组合业务字段
ruleConfigFactory.getCombinedFieldConfigProvider().parseDataField(ruleConfig, clearZeroPlainBuf,
ruleConfigFactory.getFieldConfigProvider().getFieldConfigsMap(), protocolConfig.getFieldRuleConfigMap());
@@ -112,16 +120,19 @@
for (AbstractReplyCommandPostProcessing replyCommandPostProcessing : replyCommandPostProcessings) {
result = replyCommandPostProcessing.obtainReplyCommand(bizDataMap, result, ruleConfigFactory, protocolFactory);
}
- //数据发送,异步
+ ProtocolProcessEventListener.setTask(devcode, bizDataMap, 3);
+ //存储数据
datagramEventProvider.storeData(bizDataMap);
} catch (RuntimeException rex) {
log.error("解析出现异常,异常信息为{}", rex);
- result=null;
+ //数据发送,异步,异常拦截
+ ProtocolProcessEventListener.setTask(devcode, rex.getMessage(), 4);
+ result = null;
frozenInvalidByteBuf(byteBuf, protocolConfig);
LeadingCodeMatcher.rematch(byteBuf, protocolConfigProvider.getMatchList());
- }finally {
-// GuavaCacheUtil.putCache("licValid",validLicResult);
-// ValidateResult validLicResult = (ValidateResult) GuavaCacheUtil.getCache("licValid");
+ } finally {
+ //数据发送,异步,转存整体数据
+ ProtocolProcessEventListener.saveData(devcode, result);
return result;
}
}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/ProtocolParserSupport.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/ProtocolParserSupport.java
index 8af55a6..e4a79ae 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/ProtocolParserSupport.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/ProtocolParserSupport.java
@@ -1,10 +1,13 @@
package com.casic.missiles.parser;
+import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.cache.ProtocolProcessEventListener;
import com.casic.missiles.factory.AbstractProtocolConfigFactory;
import com.casic.missiles.factory.AbstractRuleConfigFactory;
import com.casic.missiles.parser.processor.AbstractPostFieldProcessor;
+import com.casic.missiles.pojo.ProcessEventTask;
import com.casic.missiles.pojo.ProtocolConfig;
import com.casic.missiles.pojo.ProtocolFieldConfig;
import com.casic.missiles.pojo.RuleConfig;
@@ -12,6 +15,7 @@
import com.casic.missiles.provider.RuleConfigProvider;
import com.casic.missiles.util.ClazzUtil;
import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils;
@@ -25,10 +29,28 @@
public class ProtocolParserSupport {
+ protected Map getParseFixedDataMap(AbstractProtocolConfigFactory protocolFactory, ByteBuf wholeDatagramByte) {
+ ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider();
+ RuleConfigProvider ruleConfigProvider = protocolFactory.getRuleConfigProvider();
+ ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig();
+ if (ObjectUtils.isEmpty(protocolFieldConfigProvider)
+ || ObjectUtils.isEmpty(ruleConfigProvider) || ObjectUtils.isEmpty(protocolConfig)) {
+ return null;
+ }
+ Map parseFixedDataMap = protocolFieldConfigProvider.getProtocolDataMap(wholeDatagramByte, protocolConfig.getFieldRuleConfigMap());
+ //打印源数据,设备编号
+ ProcessEventTask processEventTask = ProcessEventTask.builder()
+ .devcode((String) parseFixedDataMap.get("devcode"))
+ .decryptSoureData(ByteBufUtil.hexDump(wholeDatagramByte))
+ .build();
+ ProtocolProcessEventListener.asynAddTask(processEventTask);
+ return parseFixedDataMap;
+ }
+
/**
* 获取规则配置,执行规则匹配
*/
- protected RuleConfig getRuleConfig(AbstractProtocolConfigFactory protocolFactory, ByteBuf wholeDatagramByte) {
+ protected RuleConfig getRuleConfig(AbstractProtocolConfigFactory protocolFactory, Map parseFixedDataMap) {
//取出其中参与逻辑provider并判空
ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider();
RuleConfigProvider ruleConfigProvider = protocolFactory.getRuleConfigProvider();
@@ -39,10 +61,8 @@
}
String rulePrepareFields = protocolConfig.getRulePrepareFields();
//固定字段
- if (StringUtils.isNotEmpty(rulePrepareFields)) {
- //获取统一固定字段解析
- Map parseFixedDataMap = protocolFieldConfigProvider.getProtocolDataMap(wholeDatagramByte, protocolConfig.getFieldRuleConfigMap());
- log.debug("协议字段内容为" + JSON.toJSONString(parseFixedDataMap) );
+ if (StringUtils.isNotEmpty(rulePrepareFields) && ObjectUtil.isNotEmpty(parseFixedDataMap)) {
+ log.debug("协议字段内容为" + JSON.toJSONString(parseFixedDataMap));
//获取该协议的字段配置,用于协议规则匹配
List protocolFieldConfigs = protocolFieldConfigProvider.getProtocolFieldConfigs();
//获取规则
diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml
index 2bdfa0e..75e6e82 100644
--- a/casic-iot-common/pom.xml
+++ b/casic-iot-common/pom.xml
@@ -32,10 +32,10 @@
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
+
diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml
index 4797e3a..39bc3b2 100644
--- a/sensorhub-core/pom.xml
+++ b/sensorhub-core/pom.xml
@@ -20,14 +20,6 @@
4.5.7
-
-
- redis.clients
- jedis
- 3.1.0
- jar
-
-
com.casic
sensorhub-support
@@ -62,67 +54,14 @@
mybatis-plus-boot-starter
${mybatis-plus.version}
+
+
+ com.casic
+ casic-iot-service
+ ${iot.version}
+
+
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
- 2.4.5
-
- true
-
- com.casic.missiles.ServerApplication
- exec
-
-
-
-
- repackage
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
- 1.8
- 1.8
-
-
-
-
- org.apache.maven.plugins
- maven-war-plugin
-
-
- false
-
-
-
-
-
-
- src/main/resources
-
-
- /config/*/*
- /config/*-*.yml
-
- true
-
-
- src/main/resources
-
- **/*.xml
-
- true
-
-
-
-
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java b/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
index 9753109..40c55e8 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
@@ -1,30 +1,30 @@
-package com.casic.missiles;
-
-import com.casic.missiles.netty.SensorhubServer;
-import lombok.extern.slf4j.Slf4j;
-import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.CommandLineRunner;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cache.annotation.EnableCaching;
-
-
-@SpringBootApplication(scanBasePackages = "com.casic.missiles")
-@MapperScan(basePackages = {"com.casic.missiles.**.dao", "com.casic.missiles.**.mapper"})
-@EnableCaching //开启缓存
-@Slf4j
-public class ServerApplication implements CommandLineRunner {
-
- @Autowired
- private SensorhubServer nettyServer;
- public static void main(String[] args) {
- SpringApplication.run(ServerApplication.class, args);
- }
-
- @Override
- public void run(String... args) {
- this.nettyServer.startServer();
- }
-
-}
+//package com.casic.missiles;
+//
+//import com.casic.missiles.netty.SensorhubServer;
+//import lombok.extern.slf4j.Slf4j;
+//import org.mybatis.spring.annotation.MapperScan;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.boot.CommandLineRunner;
+//import org.springframework.boot.SpringApplication;
+//import org.springframework.boot.autoconfigure.SpringBootApplication;
+//import org.springframework.cache.annotation.EnableCaching;
+//
+//
+//@SpringBootApplication(scanBasePackages = "com.casic.missiles")
+//@MapperScan(basePackages = {"com.casic.missiles.**.dao", "com.casic.missiles.**.mapper"})
+//@EnableCaching //开启缓存
+//@Slf4j
+//public class ServerApplication implements CommandLineRunner {
+//
+// @Autowired
+// private SensorhubServer nettyServer;
+// public static void main(String[] args) {
+// SpringApplication.run(ServerApplication.class, args);
+// }
+//
+// @Override
+// public void run(String... args) {
+// this.nettyServer.startServer();
+// }
+//
+//}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java b/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java
deleted file mode 100644
index 624ed4f..0000000
--- a/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.casic.missiles.autoconfig;
-
-import com.casic.missiles.netty.SensorhubServer;
-import io.netty.bootstrap.ServerBootstrap;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * SensorhubServerAutoConfiguration 自动配置类
- */
-@Configuration
-@ConditionalOnProperty(
- prefix = "casic.sensorhub",
- name = "enable",
- havingValue = "true"
-)
-@EnableConfigurationProperties({SensorhubProperties.class})
-@ConditionalOnClass({ServerBootstrap.class})
-public class SensorhubServerAutoConfiguration {
-
- @Bean
- public SensorhubServer sensorhubServer(SensorhubProperties sensorhubProperties) throws Exception {
- return SensorhubServer.getInstance(sensorhubProperties);
- }
-
-}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
index e90de5a..dec5e4e 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
@@ -9,6 +9,8 @@
import java.util.concurrent.*;
/**
+ * @author cz
+ * @date 2023-11-24
* 异步任务调用
*/
public class AsynTaskHelper {
@@ -25,23 +27,25 @@
/**
* 设置线程池
+ *
* @param executorService 线程池
* @return
*/
- public AsynTaskHelper setExecutorService(ExecutorService executorService){
+ public AsynTaskHelper setExecutorService(ExecutorService executorService) {
completionService = new ExecutorCompletionService(executorService);
return this;
}
/**
* 添加任务,返回结果
+ *
* @param taskId
* @param task
* @return
*/
public AsynTaskHelper addTask(String taskId, Callable task) {
AsynTaskCallable callProxy = new AsynTaskCallable(taskId, task);
- if(null == tasks || tasks.isEmpty()){
+ if (null == tasks || tasks.isEmpty()) {
tasks = new ArrayList<>();
}
tasks.add(callProxy);
@@ -50,10 +54,11 @@
/**
* 提交任务
+ *
* @return
*/
- public AsynTaskHelper submit(){
- if(null != tasks && !tasks.isEmpty()){
+ public AsynTaskHelper submit() {
+ if (null != tasks && !tasks.isEmpty()) {
for (Callable callResult : tasks) {
completionService.submit(callResult);
}
@@ -63,7 +68,8 @@
/**
* 获取返回结果
- * @return Map K为任务Id
+ *
+ * @return Map K为任务Id
* @throws ExecutionException
* @throws InterruptedException
*/
@@ -73,22 +79,23 @@
/**
* 获取返回结果
+ *
* @param timeout
* @param unit
- * @return Map K为任务Id
+ * @return Map K为任务Id
* @throws InterruptedException
* @throws ExecutionException
*/
- public Map getResult(long timeout,@NotNull TimeUnit unit) throws InterruptedException, ExecutionException {
+ public Map getResult(long timeout, @NotNull TimeUnit unit) throws InterruptedException, ExecutionException {
Map result = new HashMap<>();
- if(null == tasks){
+ if (null == tasks) {
return result;
}
for (int i = 0; i < tasks.size(); i++) {
Future> poll = completionService.poll(timeout, unit);
- if(null != poll){
+ if (null != poll) {
TaskResult task = poll.get();
- if(null != poll && null != task){
+ if (null != poll && null != task) {
result.put(task.getTaskId(), task.getData());
}
}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
index 0401822..e03781c 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
@@ -7,14 +7,6 @@
public class GuavaCacheUtil {
- /**
- * 使用guava需要引入依赖
- *
- * com.google.guava
- * guava
- * 28.2-jre
- *
- */
private static Cache cache = CacheBuilder.newBuilder()
//10分钟后过期
.expireAfterWrite(10, TimeUnit.MINUTES)
@@ -27,8 +19,22 @@
return cache.getIfPresent(k);
}
+ /**
+ * 添加缓存
+ * @param k
+ * @param value
+ */
public static void putCache(String k, Object value) {
cache.put(k, value);
}
+ /**
+ * 删除缓存
+ *
+ * @param key
+ */
+ public static void remove(String key) {
+ cache.invalidate(key);
+ }
+
}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java
new file mode 100644
index 0000000..88baf61
--- /dev/null
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java
@@ -0,0 +1,174 @@
+package com.casic.missiles.cache;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSON;
+import com.casic.missiles.model.Device;
+import com.casic.missiles.model.DeviceData;
+import com.casic.missiles.pojo.ParseResult;
+import com.casic.missiles.pojo.ProcessEventTask;
+import com.casic.missiles.service.IDeviceDataService;
+import com.casic.missiles.service.impl.DeviceDataServiceImpl;
+import com.casic.missiles.util.SpringContextUtil;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 流程节点事件监听器
+ */
+public class ProtocolProcessEventListener {
+
+ private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 20, 100,
+ TimeUnit.SECONDS, new LinkedBlockingQueue<>(20));
+
+ /**
+ * 异步生成缓存
+ *
+ * @param processEventTask
+ */
+ public static void asynAddTask(ProcessEventTask processEventTask) {
+ if (StringUtils.isNotEmpty(processEventTask.getDevcode())) {
+ GuavaCacheUtil.putCache(processEventTask.getDevcode(), processEventTask);
+ }
+ }
+
+ /**
+ * 异步设置缓存
+ *
+ * @param key
+ * @param json
+ */
+ public static void setTask(String key, Object json, Integer node) {
+ //如果key为空,则直接返回
+ if (StringUtils.isEmpty(key) || ObjectUtil.isEmpty(json)) {
+ return;
+ }
+ ProcessEventTask processEventTask = null;
+ switch (node) {
+ //解密前的数据
+ case 1:
+ //如果为空可以补救
+// if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+// processEventTask = ProcessEventTask.builder()
+// .devcode(key)
+// .decryptSoureData((String) json)
+// .decryptBeforeData((String) json)
+// .build();
+// asynAddTask(processEventTask);
+// } else {
+// processEventTask.setDecryptBeforeData((String) json);
+// }
+// break;
+ //解密后的数据
+ case 2:
+ //如果为空,则源报文和解密报文为空,作为异常判断依据
+ if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+ processEventTask = ProcessEventTask.builder()
+ .devcode(key)
+ .decryptAfterData((String) json)
+ .build();
+ asynAddTask(processEventTask);
+ } else {
+ processEventTask.setDecryptAfterData((String) json);
+ }
+ break;
+ //解析的数据
+ case 3:
+ //如果为空,则源报文和解密报文为空,作为异常判断依据
+ if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+ processEventTask = ProcessEventTask.builder()
+ .devcode(key)
+ .bizDataList((List) json)
+ .build();
+ asynAddTask(processEventTask);
+ } else {
+ processEventTask.setBizDataList((List) json);
+ }
+ break;
+ case 4:
+ //如果为空,则源报文和解密报文为空,作为异常判断依据
+ if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+ processEventTask = ProcessEventTask.builder()
+ .devcode(key)
+ .exceptionMsg((String) json)
+ .build();
+ asynAddTask(processEventTask);
+ } else {
+ processEventTask.setExceptionMsg((String) json);
+ }
+ break;
+ default:
+ return;
+ }
+ }
+
+ /**
+ * 异步设置缓存
+ *
+ * @param key
+ */
+ public static ProcessEventTask getTask(String key) {
+ if (StringUtils.isEmpty(key)) {
+ return null;
+ }
+ return (ProcessEventTask) GuavaCacheUtil.getCache(key);
+ }
+
+ /**
+ * 存库操作
+ *
+ * @param devcode
+ */
+ public static void saveData(String devcode, ParseResult result) {
+ //添加到线程池执行,异步存库
+ threadPool.execute(
+ () -> {
+ ProcessEventTask processEventTask;
+ if (ObjectUtil.isNotEmpty(getTask(devcode))) {
+ synchronized (processEventTask = getTask(devcode)) {
+ IDeviceDataService deviceDataService = SpringContextUtil.getBean(DeviceDataServiceImpl.class);
+ if (ObjectUtil.isNotEmpty(processEventTask)) {
+ List deviceDataList = new ArrayList<>();
+ for (Map BizDataMap : processEventTask.getBizDataList()) {
+ DeviceData deviceData = new DeviceData();
+ deviceData.setDevcode(processEventTask.getDevcode());
+ deviceData.setDeviceType((Integer) BizDataMap.get("deviceType"));
+ deviceData.setUptime((String) BizDataMap.get("uptime"));
+ deviceData.setLogtime(new Date());
+ deviceData.setDataJson(JSON.toJSONString(BizDataMap));
+ deviceData.setDecryptBeforeData(processEventTask.getDecryptSoureData());
+ deviceData.setDecryptAfterData(processEventTask.getDecryptAfterData());
+ if (BizDataMap.containsKey("cell")) {
+ //电量不一定每次都有
+ deviceData.setCell((Integer) BizDataMap.get("cell"));
+ }
+ if (BizDataMap.containsKey("dataValue")) {
+ //电量不一定每次都有
+ deviceData.setDataValue((float) BizDataMap.get("dataValue"));
+ }
+ deviceData.setExceptionMsg(processEventTask.getExceptionMsg());
+ deviceDataList.add(deviceData);
+ }
+ //批量保存
+ deviceDataService.saveBatch(deviceDataList);
+ }
+ }
+ //移除缓存
+ GuavaCacheUtil.remove(devcode);
+ }
+ }
+ );
+ }
+
+ //暂时不做设备的更新
+ public void setDevice(String status) {
+ Device device = new Device();
+ }
+
+}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/listenerEvent.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/listenerEvent.java
deleted file mode 100644
index 2f9c711..0000000
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/listenerEvent.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.casic.missiles.cache;
-
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
-
-public class listenerEvent {
-
- private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 20, 100,
- TimeUnit.SECONDS, new LinkedBlockingQueue<>(20));
-
- /**
- * 异步生成缓存
- *
- * @param key
- * @param json
- */
- public void asynCreateLogCache(String key, String json) {
-
-
- }
-
-
-}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java
index 4e6beea..01b20f5 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java
@@ -2,7 +2,7 @@
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
-import com.casic.missiles.cache.GuavaCacheUtil;
+import com.casic.missiles.cache.ProtocolProcessEventListener;
import com.casic.missiles.enums.EngineExceptionEnum;
import com.casic.missiles.enums.ReplyCommandEnum;
import com.casic.missiles.exception.EngineException;
@@ -56,12 +56,16 @@
}
ParseResult result = null;
+ String devcode = null;
try {
//暂时先取第一个, 减少类的创建销毁与构建
AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig);
+ Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf);
+ devcode = (String) parseFixedDataMap.get("devcode");
// 通过协议工厂匹配,匹配规则,获取规则配置
- RuleConfig ruleConfig = getRuleConfig(protocolFactory, byteBuf);
+ RuleConfig ruleConfig = getRuleConfig(protocolFactory, parseFixedDataMap);
if (ObjectUtil.isEmpty(ruleConfig)) {
+ //打印源数据,设备编号
byteBuf.resetReaderIndex();
log.error("解析匹配失败,匹配帧信息为{}", ByteBufUtil.hexDump(byteBuf));
byteBuf.readBytes(protocolConfig.getPreFix().length());
@@ -94,10 +98,14 @@
}
//获取报文的业务内容
ByteBuf bizDataByteBuf = protocolFactory.getProtocolFieldConfigProvider().getDataContentBuf(intactMessageByte);
- log.debug("解析的密文是----------"+ByteBufUtil.hexDump(bizDataByteBuf));
+ //解密前的报文
+ log.debug("解析的密文是----------" + ByteBufUtil.hexDump(bizDataByteBuf));
+// ProtocolProcessEventListener.setTask(devcode, ByteBufUtil.hexDump(bizDataByteBuf), 1);
//密文解析
- ByteBuf clearZeroPlainBuf = datagramEventProvider.getSafeDatagram(bizDataByteBuf, protocolFactory.getProtocolFieldConfigProvider().getFixFieldConfigMap(),fieldLengthSupplier);
- log.debug("解析的明文是----------"+ByteBufUtil.hexDump(clearZeroPlainBuf));
+ ByteBuf clearZeroPlainBuf = datagramEventProvider.getSafeDatagram(bizDataByteBuf, protocolFactory.getProtocolFieldConfigProvider().getFixFieldConfigMap(), fieldLengthSupplier);
+ log.debug("解析的明文是----------" + ByteBufUtil.hexDump(clearZeroPlainBuf));
+ ProtocolProcessEventListener.setTask(devcode, ByteBufUtil.hexDump(clearZeroPlainBuf), 2);
+ //解密后报文
//解析组合业务字段
ruleConfigFactory.getCombinedFieldConfigProvider().parseDataField(ruleConfig, clearZeroPlainBuf,
ruleConfigFactory.getFieldConfigProvider().getFieldConfigsMap(), protocolConfig.getFieldRuleConfigMap());
@@ -112,16 +120,19 @@
for (AbstractReplyCommandPostProcessing replyCommandPostProcessing : replyCommandPostProcessings) {
result = replyCommandPostProcessing.obtainReplyCommand(bizDataMap, result, ruleConfigFactory, protocolFactory);
}
- //数据发送,异步
+ ProtocolProcessEventListener.setTask(devcode, bizDataMap, 3);
+ //存储数据
datagramEventProvider.storeData(bizDataMap);
} catch (RuntimeException rex) {
log.error("解析出现异常,异常信息为{}", rex);
- result=null;
+ //数据发送,异步,异常拦截
+ ProtocolProcessEventListener.setTask(devcode, rex.getMessage(), 4);
+ result = null;
frozenInvalidByteBuf(byteBuf, protocolConfig);
LeadingCodeMatcher.rematch(byteBuf, protocolConfigProvider.getMatchList());
- }finally {
-// GuavaCacheUtil.putCache("licValid",validLicResult);
-// ValidateResult validLicResult = (ValidateResult) GuavaCacheUtil.getCache("licValid");
+ } finally {
+ //数据发送,异步,转存整体数据
+ ProtocolProcessEventListener.saveData(devcode, result);
return result;
}
}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/ProtocolParserSupport.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/ProtocolParserSupport.java
index 8af55a6..e4a79ae 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/ProtocolParserSupport.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/ProtocolParserSupport.java
@@ -1,10 +1,13 @@
package com.casic.missiles.parser;
+import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.cache.ProtocolProcessEventListener;
import com.casic.missiles.factory.AbstractProtocolConfigFactory;
import com.casic.missiles.factory.AbstractRuleConfigFactory;
import com.casic.missiles.parser.processor.AbstractPostFieldProcessor;
+import com.casic.missiles.pojo.ProcessEventTask;
import com.casic.missiles.pojo.ProtocolConfig;
import com.casic.missiles.pojo.ProtocolFieldConfig;
import com.casic.missiles.pojo.RuleConfig;
@@ -12,6 +15,7 @@
import com.casic.missiles.provider.RuleConfigProvider;
import com.casic.missiles.util.ClazzUtil;
import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils;
@@ -25,10 +29,28 @@
public class ProtocolParserSupport {
+ protected Map getParseFixedDataMap(AbstractProtocolConfigFactory protocolFactory, ByteBuf wholeDatagramByte) {
+ ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider();
+ RuleConfigProvider ruleConfigProvider = protocolFactory.getRuleConfigProvider();
+ ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig();
+ if (ObjectUtils.isEmpty(protocolFieldConfigProvider)
+ || ObjectUtils.isEmpty(ruleConfigProvider) || ObjectUtils.isEmpty(protocolConfig)) {
+ return null;
+ }
+ Map parseFixedDataMap = protocolFieldConfigProvider.getProtocolDataMap(wholeDatagramByte, protocolConfig.getFieldRuleConfigMap());
+ //打印源数据,设备编号
+ ProcessEventTask processEventTask = ProcessEventTask.builder()
+ .devcode((String) parseFixedDataMap.get("devcode"))
+ .decryptSoureData(ByteBufUtil.hexDump(wholeDatagramByte))
+ .build();
+ ProtocolProcessEventListener.asynAddTask(processEventTask);
+ return parseFixedDataMap;
+ }
+
/**
* 获取规则配置,执行规则匹配
*/
- protected RuleConfig getRuleConfig(AbstractProtocolConfigFactory protocolFactory, ByteBuf wholeDatagramByte) {
+ protected RuleConfig getRuleConfig(AbstractProtocolConfigFactory protocolFactory, Map parseFixedDataMap) {
//取出其中参与逻辑provider并判空
ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider();
RuleConfigProvider ruleConfigProvider = protocolFactory.getRuleConfigProvider();
@@ -39,10 +61,8 @@
}
String rulePrepareFields = protocolConfig.getRulePrepareFields();
//固定字段
- if (StringUtils.isNotEmpty(rulePrepareFields)) {
- //获取统一固定字段解析
- Map parseFixedDataMap = protocolFieldConfigProvider.getProtocolDataMap(wholeDatagramByte, protocolConfig.getFieldRuleConfigMap());
- log.debug("协议字段内容为" + JSON.toJSONString(parseFixedDataMap) );
+ if (StringUtils.isNotEmpty(rulePrepareFields) && ObjectUtil.isNotEmpty(parseFixedDataMap)) {
+ log.debug("协议字段内容为" + JSON.toJSONString(parseFixedDataMap));
//获取该协议的字段配置,用于协议规则匹配
List protocolFieldConfigs = protocolFieldConfigProvider.getProtocolFieldConfigs();
//获取规则
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java
index b162def..9c413ed 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java
@@ -1,13 +1,13 @@
package com.casic.missiles.parser.matcher;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.casic.missiles.enums.FrameStructEnum;
import com.casic.missiles.provider.ProtocolConfigProvider;
import com.casic.missiles.pojo.CombinedFieldConfig;
import com.casic.missiles.pojo.ProtocolConfig;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufUtil;
+import org.apache.commons.lang3.StringUtils;
import java.util.*;
diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml
index 2bdfa0e..75e6e82 100644
--- a/casic-iot-common/pom.xml
+++ b/casic-iot-common/pom.xml
@@ -32,10 +32,10 @@
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
+
diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml
index 4797e3a..39bc3b2 100644
--- a/sensorhub-core/pom.xml
+++ b/sensorhub-core/pom.xml
@@ -20,14 +20,6 @@
4.5.7
-
-
- redis.clients
- jedis
- 3.1.0
- jar
-
-
com.casic
sensorhub-support
@@ -62,67 +54,14 @@
mybatis-plus-boot-starter
${mybatis-plus.version}
+
+
+ com.casic
+ casic-iot-service
+ ${iot.version}
+
+
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
- 2.4.5
-
- true
-
- com.casic.missiles.ServerApplication
- exec
-
-
-
-
- repackage
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
- 1.8
- 1.8
-
-
-
-
- org.apache.maven.plugins
- maven-war-plugin
-
-
- false
-
-
-
-
-
-
- src/main/resources
-
-
- /config/*/*
- /config/*-*.yml
-
- true
-
-
- src/main/resources
-
- **/*.xml
-
- true
-
-
-
-
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java b/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
index 9753109..40c55e8 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
@@ -1,30 +1,30 @@
-package com.casic.missiles;
-
-import com.casic.missiles.netty.SensorhubServer;
-import lombok.extern.slf4j.Slf4j;
-import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.CommandLineRunner;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cache.annotation.EnableCaching;
-
-
-@SpringBootApplication(scanBasePackages = "com.casic.missiles")
-@MapperScan(basePackages = {"com.casic.missiles.**.dao", "com.casic.missiles.**.mapper"})
-@EnableCaching //开启缓存
-@Slf4j
-public class ServerApplication implements CommandLineRunner {
-
- @Autowired
- private SensorhubServer nettyServer;
- public static void main(String[] args) {
- SpringApplication.run(ServerApplication.class, args);
- }
-
- @Override
- public void run(String... args) {
- this.nettyServer.startServer();
- }
-
-}
+//package com.casic.missiles;
+//
+//import com.casic.missiles.netty.SensorhubServer;
+//import lombok.extern.slf4j.Slf4j;
+//import org.mybatis.spring.annotation.MapperScan;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.boot.CommandLineRunner;
+//import org.springframework.boot.SpringApplication;
+//import org.springframework.boot.autoconfigure.SpringBootApplication;
+//import org.springframework.cache.annotation.EnableCaching;
+//
+//
+//@SpringBootApplication(scanBasePackages = "com.casic.missiles")
+//@MapperScan(basePackages = {"com.casic.missiles.**.dao", "com.casic.missiles.**.mapper"})
+//@EnableCaching //开启缓存
+//@Slf4j
+//public class ServerApplication implements CommandLineRunner {
+//
+// @Autowired
+// private SensorhubServer nettyServer;
+// public static void main(String[] args) {
+// SpringApplication.run(ServerApplication.class, args);
+// }
+//
+// @Override
+// public void run(String... args) {
+// this.nettyServer.startServer();
+// }
+//
+//}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java b/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java
deleted file mode 100644
index 624ed4f..0000000
--- a/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.casic.missiles.autoconfig;
-
-import com.casic.missiles.netty.SensorhubServer;
-import io.netty.bootstrap.ServerBootstrap;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * SensorhubServerAutoConfiguration 自动配置类
- */
-@Configuration
-@ConditionalOnProperty(
- prefix = "casic.sensorhub",
- name = "enable",
- havingValue = "true"
-)
-@EnableConfigurationProperties({SensorhubProperties.class})
-@ConditionalOnClass({ServerBootstrap.class})
-public class SensorhubServerAutoConfiguration {
-
- @Bean
- public SensorhubServer sensorhubServer(SensorhubProperties sensorhubProperties) throws Exception {
- return SensorhubServer.getInstance(sensorhubProperties);
- }
-
-}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
index e90de5a..dec5e4e 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
@@ -9,6 +9,8 @@
import java.util.concurrent.*;
/**
+ * @author cz
+ * @date 2023-11-24
* 异步任务调用
*/
public class AsynTaskHelper {
@@ -25,23 +27,25 @@
/**
* 设置线程池
+ *
* @param executorService 线程池
* @return
*/
- public AsynTaskHelper setExecutorService(ExecutorService executorService){
+ public AsynTaskHelper setExecutorService(ExecutorService executorService) {
completionService = new ExecutorCompletionService(executorService);
return this;
}
/**
* 添加任务,返回结果
+ *
* @param taskId
* @param task
* @return
*/
public AsynTaskHelper addTask(String taskId, Callable task) {
AsynTaskCallable callProxy = new AsynTaskCallable(taskId, task);
- if(null == tasks || tasks.isEmpty()){
+ if (null == tasks || tasks.isEmpty()) {
tasks = new ArrayList<>();
}
tasks.add(callProxy);
@@ -50,10 +54,11 @@
/**
* 提交任务
+ *
* @return
*/
- public AsynTaskHelper submit(){
- if(null != tasks && !tasks.isEmpty()){
+ public AsynTaskHelper submit() {
+ if (null != tasks && !tasks.isEmpty()) {
for (Callable callResult : tasks) {
completionService.submit(callResult);
}
@@ -63,7 +68,8 @@
/**
* 获取返回结果
- * @return Map K为任务Id
+ *
+ * @return Map K为任务Id
* @throws ExecutionException
* @throws InterruptedException
*/
@@ -73,22 +79,23 @@
/**
* 获取返回结果
+ *
* @param timeout
* @param unit
- * @return Map K为任务Id
+ * @return Map K为任务Id
* @throws InterruptedException
* @throws ExecutionException
*/
- public Map getResult(long timeout,@NotNull TimeUnit unit) throws InterruptedException, ExecutionException {
+ public Map getResult(long timeout, @NotNull TimeUnit unit) throws InterruptedException, ExecutionException {
Map result = new HashMap<>();
- if(null == tasks){
+ if (null == tasks) {
return result;
}
for (int i = 0; i < tasks.size(); i++) {
Future> poll = completionService.poll(timeout, unit);
- if(null != poll){
+ if (null != poll) {
TaskResult task = poll.get();
- if(null != poll && null != task){
+ if (null != poll && null != task) {
result.put(task.getTaskId(), task.getData());
}
}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
index 0401822..e03781c 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
@@ -7,14 +7,6 @@
public class GuavaCacheUtil {
- /**
- * 使用guava需要引入依赖
- *
- * com.google.guava
- * guava
- * 28.2-jre
- *
- */
private static Cache cache = CacheBuilder.newBuilder()
//10分钟后过期
.expireAfterWrite(10, TimeUnit.MINUTES)
@@ -27,8 +19,22 @@
return cache.getIfPresent(k);
}
+ /**
+ * 添加缓存
+ * @param k
+ * @param value
+ */
public static void putCache(String k, Object value) {
cache.put(k, value);
}
+ /**
+ * 删除缓存
+ *
+ * @param key
+ */
+ public static void remove(String key) {
+ cache.invalidate(key);
+ }
+
}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java
new file mode 100644
index 0000000..88baf61
--- /dev/null
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java
@@ -0,0 +1,174 @@
+package com.casic.missiles.cache;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSON;
+import com.casic.missiles.model.Device;
+import com.casic.missiles.model.DeviceData;
+import com.casic.missiles.pojo.ParseResult;
+import com.casic.missiles.pojo.ProcessEventTask;
+import com.casic.missiles.service.IDeviceDataService;
+import com.casic.missiles.service.impl.DeviceDataServiceImpl;
+import com.casic.missiles.util.SpringContextUtil;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 流程节点事件监听器
+ */
+public class ProtocolProcessEventListener {
+
+ private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 20, 100,
+ TimeUnit.SECONDS, new LinkedBlockingQueue<>(20));
+
+ /**
+ * 异步生成缓存
+ *
+ * @param processEventTask
+ */
+ public static void asynAddTask(ProcessEventTask processEventTask) {
+ if (StringUtils.isNotEmpty(processEventTask.getDevcode())) {
+ GuavaCacheUtil.putCache(processEventTask.getDevcode(), processEventTask);
+ }
+ }
+
+ /**
+ * 异步设置缓存
+ *
+ * @param key
+ * @param json
+ */
+ public static void setTask(String key, Object json, Integer node) {
+ //如果key为空,则直接返回
+ if (StringUtils.isEmpty(key) || ObjectUtil.isEmpty(json)) {
+ return;
+ }
+ ProcessEventTask processEventTask = null;
+ switch (node) {
+ //解密前的数据
+ case 1:
+ //如果为空可以补救
+// if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+// processEventTask = ProcessEventTask.builder()
+// .devcode(key)
+// .decryptSoureData((String) json)
+// .decryptBeforeData((String) json)
+// .build();
+// asynAddTask(processEventTask);
+// } else {
+// processEventTask.setDecryptBeforeData((String) json);
+// }
+// break;
+ //解密后的数据
+ case 2:
+ //如果为空,则源报文和解密报文为空,作为异常判断依据
+ if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+ processEventTask = ProcessEventTask.builder()
+ .devcode(key)
+ .decryptAfterData((String) json)
+ .build();
+ asynAddTask(processEventTask);
+ } else {
+ processEventTask.setDecryptAfterData((String) json);
+ }
+ break;
+ //解析的数据
+ case 3:
+ //如果为空,则源报文和解密报文为空,作为异常判断依据
+ if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+ processEventTask = ProcessEventTask.builder()
+ .devcode(key)
+ .bizDataList((List) json)
+ .build();
+ asynAddTask(processEventTask);
+ } else {
+ processEventTask.setBizDataList((List) json);
+ }
+ break;
+ case 4:
+ //如果为空,则源报文和解密报文为空,作为异常判断依据
+ if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+ processEventTask = ProcessEventTask.builder()
+ .devcode(key)
+ .exceptionMsg((String) json)
+ .build();
+ asynAddTask(processEventTask);
+ } else {
+ processEventTask.setExceptionMsg((String) json);
+ }
+ break;
+ default:
+ return;
+ }
+ }
+
+ /**
+ * 异步设置缓存
+ *
+ * @param key
+ */
+ public static ProcessEventTask getTask(String key) {
+ if (StringUtils.isEmpty(key)) {
+ return null;
+ }
+ return (ProcessEventTask) GuavaCacheUtil.getCache(key);
+ }
+
+ /**
+ * 存库操作
+ *
+ * @param devcode
+ */
+ public static void saveData(String devcode, ParseResult result) {
+ //添加到线程池执行,异步存库
+ threadPool.execute(
+ () -> {
+ ProcessEventTask processEventTask;
+ if (ObjectUtil.isNotEmpty(getTask(devcode))) {
+ synchronized (processEventTask = getTask(devcode)) {
+ IDeviceDataService deviceDataService = SpringContextUtil.getBean(DeviceDataServiceImpl.class);
+ if (ObjectUtil.isNotEmpty(processEventTask)) {
+ List deviceDataList = new ArrayList<>();
+ for (Map BizDataMap : processEventTask.getBizDataList()) {
+ DeviceData deviceData = new DeviceData();
+ deviceData.setDevcode(processEventTask.getDevcode());
+ deviceData.setDeviceType((Integer) BizDataMap.get("deviceType"));
+ deviceData.setUptime((String) BizDataMap.get("uptime"));
+ deviceData.setLogtime(new Date());
+ deviceData.setDataJson(JSON.toJSONString(BizDataMap));
+ deviceData.setDecryptBeforeData(processEventTask.getDecryptSoureData());
+ deviceData.setDecryptAfterData(processEventTask.getDecryptAfterData());
+ if (BizDataMap.containsKey("cell")) {
+ //电量不一定每次都有
+ deviceData.setCell((Integer) BizDataMap.get("cell"));
+ }
+ if (BizDataMap.containsKey("dataValue")) {
+ //电量不一定每次都有
+ deviceData.setDataValue((float) BizDataMap.get("dataValue"));
+ }
+ deviceData.setExceptionMsg(processEventTask.getExceptionMsg());
+ deviceDataList.add(deviceData);
+ }
+ //批量保存
+ deviceDataService.saveBatch(deviceDataList);
+ }
+ }
+ //移除缓存
+ GuavaCacheUtil.remove(devcode);
+ }
+ }
+ );
+ }
+
+ //暂时不做设备的更新
+ public void setDevice(String status) {
+ Device device = new Device();
+ }
+
+}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/listenerEvent.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/listenerEvent.java
deleted file mode 100644
index 2f9c711..0000000
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/listenerEvent.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.casic.missiles.cache;
-
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
-
-public class listenerEvent {
-
- private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 20, 100,
- TimeUnit.SECONDS, new LinkedBlockingQueue<>(20));
-
- /**
- * 异步生成缓存
- *
- * @param key
- * @param json
- */
- public void asynCreateLogCache(String key, String json) {
-
-
- }
-
-
-}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java
index 4e6beea..01b20f5 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java
@@ -2,7 +2,7 @@
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
-import com.casic.missiles.cache.GuavaCacheUtil;
+import com.casic.missiles.cache.ProtocolProcessEventListener;
import com.casic.missiles.enums.EngineExceptionEnum;
import com.casic.missiles.enums.ReplyCommandEnum;
import com.casic.missiles.exception.EngineException;
@@ -56,12 +56,16 @@
}
ParseResult result = null;
+ String devcode = null;
try {
//暂时先取第一个, 减少类的创建销毁与构建
AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig);
+ Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf);
+ devcode = (String) parseFixedDataMap.get("devcode");
// 通过协议工厂匹配,匹配规则,获取规则配置
- RuleConfig ruleConfig = getRuleConfig(protocolFactory, byteBuf);
+ RuleConfig ruleConfig = getRuleConfig(protocolFactory, parseFixedDataMap);
if (ObjectUtil.isEmpty(ruleConfig)) {
+ //打印源数据,设备编号
byteBuf.resetReaderIndex();
log.error("解析匹配失败,匹配帧信息为{}", ByteBufUtil.hexDump(byteBuf));
byteBuf.readBytes(protocolConfig.getPreFix().length());
@@ -94,10 +98,14 @@
}
//获取报文的业务内容
ByteBuf bizDataByteBuf = protocolFactory.getProtocolFieldConfigProvider().getDataContentBuf(intactMessageByte);
- log.debug("解析的密文是----------"+ByteBufUtil.hexDump(bizDataByteBuf));
+ //解密前的报文
+ log.debug("解析的密文是----------" + ByteBufUtil.hexDump(bizDataByteBuf));
+// ProtocolProcessEventListener.setTask(devcode, ByteBufUtil.hexDump(bizDataByteBuf), 1);
//密文解析
- ByteBuf clearZeroPlainBuf = datagramEventProvider.getSafeDatagram(bizDataByteBuf, protocolFactory.getProtocolFieldConfigProvider().getFixFieldConfigMap(),fieldLengthSupplier);
- log.debug("解析的明文是----------"+ByteBufUtil.hexDump(clearZeroPlainBuf));
+ ByteBuf clearZeroPlainBuf = datagramEventProvider.getSafeDatagram(bizDataByteBuf, protocolFactory.getProtocolFieldConfigProvider().getFixFieldConfigMap(), fieldLengthSupplier);
+ log.debug("解析的明文是----------" + ByteBufUtil.hexDump(clearZeroPlainBuf));
+ ProtocolProcessEventListener.setTask(devcode, ByteBufUtil.hexDump(clearZeroPlainBuf), 2);
+ //解密后报文
//解析组合业务字段
ruleConfigFactory.getCombinedFieldConfigProvider().parseDataField(ruleConfig, clearZeroPlainBuf,
ruleConfigFactory.getFieldConfigProvider().getFieldConfigsMap(), protocolConfig.getFieldRuleConfigMap());
@@ -112,16 +120,19 @@
for (AbstractReplyCommandPostProcessing replyCommandPostProcessing : replyCommandPostProcessings) {
result = replyCommandPostProcessing.obtainReplyCommand(bizDataMap, result, ruleConfigFactory, protocolFactory);
}
- //数据发送,异步
+ ProtocolProcessEventListener.setTask(devcode, bizDataMap, 3);
+ //存储数据
datagramEventProvider.storeData(bizDataMap);
} catch (RuntimeException rex) {
log.error("解析出现异常,异常信息为{}", rex);
- result=null;
+ //数据发送,异步,异常拦截
+ ProtocolProcessEventListener.setTask(devcode, rex.getMessage(), 4);
+ result = null;
frozenInvalidByteBuf(byteBuf, protocolConfig);
LeadingCodeMatcher.rematch(byteBuf, protocolConfigProvider.getMatchList());
- }finally {
-// GuavaCacheUtil.putCache("licValid",validLicResult);
-// ValidateResult validLicResult = (ValidateResult) GuavaCacheUtil.getCache("licValid");
+ } finally {
+ //数据发送,异步,转存整体数据
+ ProtocolProcessEventListener.saveData(devcode, result);
return result;
}
}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/ProtocolParserSupport.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/ProtocolParserSupport.java
index 8af55a6..e4a79ae 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/ProtocolParserSupport.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/ProtocolParserSupport.java
@@ -1,10 +1,13 @@
package com.casic.missiles.parser;
+import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.cache.ProtocolProcessEventListener;
import com.casic.missiles.factory.AbstractProtocolConfigFactory;
import com.casic.missiles.factory.AbstractRuleConfigFactory;
import com.casic.missiles.parser.processor.AbstractPostFieldProcessor;
+import com.casic.missiles.pojo.ProcessEventTask;
import com.casic.missiles.pojo.ProtocolConfig;
import com.casic.missiles.pojo.ProtocolFieldConfig;
import com.casic.missiles.pojo.RuleConfig;
@@ -12,6 +15,7 @@
import com.casic.missiles.provider.RuleConfigProvider;
import com.casic.missiles.util.ClazzUtil;
import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils;
@@ -25,10 +29,28 @@
public class ProtocolParserSupport {
+ protected Map getParseFixedDataMap(AbstractProtocolConfigFactory protocolFactory, ByteBuf wholeDatagramByte) {
+ ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider();
+ RuleConfigProvider ruleConfigProvider = protocolFactory.getRuleConfigProvider();
+ ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig();
+ if (ObjectUtils.isEmpty(protocolFieldConfigProvider)
+ || ObjectUtils.isEmpty(ruleConfigProvider) || ObjectUtils.isEmpty(protocolConfig)) {
+ return null;
+ }
+ Map parseFixedDataMap = protocolFieldConfigProvider.getProtocolDataMap(wholeDatagramByte, protocolConfig.getFieldRuleConfigMap());
+ //打印源数据,设备编号
+ ProcessEventTask processEventTask = ProcessEventTask.builder()
+ .devcode((String) parseFixedDataMap.get("devcode"))
+ .decryptSoureData(ByteBufUtil.hexDump(wholeDatagramByte))
+ .build();
+ ProtocolProcessEventListener.asynAddTask(processEventTask);
+ return parseFixedDataMap;
+ }
+
/**
* 获取规则配置,执行规则匹配
*/
- protected RuleConfig getRuleConfig(AbstractProtocolConfigFactory protocolFactory, ByteBuf wholeDatagramByte) {
+ protected RuleConfig getRuleConfig(AbstractProtocolConfigFactory protocolFactory, Map parseFixedDataMap) {
//取出其中参与逻辑provider并判空
ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider();
RuleConfigProvider ruleConfigProvider = protocolFactory.getRuleConfigProvider();
@@ -39,10 +61,8 @@
}
String rulePrepareFields = protocolConfig.getRulePrepareFields();
//固定字段
- if (StringUtils.isNotEmpty(rulePrepareFields)) {
- //获取统一固定字段解析
- Map parseFixedDataMap = protocolFieldConfigProvider.getProtocolDataMap(wholeDatagramByte, protocolConfig.getFieldRuleConfigMap());
- log.debug("协议字段内容为" + JSON.toJSONString(parseFixedDataMap) );
+ if (StringUtils.isNotEmpty(rulePrepareFields) && ObjectUtil.isNotEmpty(parseFixedDataMap)) {
+ log.debug("协议字段内容为" + JSON.toJSONString(parseFixedDataMap));
//获取该协议的字段配置,用于协议规则匹配
List protocolFieldConfigs = protocolFieldConfigProvider.getProtocolFieldConfigs();
//获取规则
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java
index b162def..9c413ed 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java
@@ -1,13 +1,13 @@
package com.casic.missiles.parser.matcher;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.casic.missiles.enums.FrameStructEnum;
import com.casic.missiles.provider.ProtocolConfigProvider;
import com.casic.missiles.pojo.CombinedFieldConfig;
import com.casic.missiles.pojo.ProtocolConfig;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufUtil;
+import org.apache.commons.lang3.StringUtils;
import java.util.*;
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/PreBizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/PreBizFieldParseProcessor.java
index 8eb0682..23d1e4c 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/PreBizFieldParseProcessor.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/PreBizFieldParseProcessor.java
@@ -2,7 +2,7 @@
import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import com.casic.missiles.enums.EngineExceptionEnum;
import com.casic.missiles.exception.EngineException;
import com.casic.missiles.parser.resolver.combined.AbstractCombinedFieldProcessor;
diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml
index 2bdfa0e..75e6e82 100644
--- a/casic-iot-common/pom.xml
+++ b/casic-iot-common/pom.xml
@@ -32,10 +32,10 @@
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
+
diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml
index 4797e3a..39bc3b2 100644
--- a/sensorhub-core/pom.xml
+++ b/sensorhub-core/pom.xml
@@ -20,14 +20,6 @@
4.5.7
-
-
- redis.clients
- jedis
- 3.1.0
- jar
-
-
com.casic
sensorhub-support
@@ -62,67 +54,14 @@
mybatis-plus-boot-starter
${mybatis-plus.version}
+
+
+ com.casic
+ casic-iot-service
+ ${iot.version}
+
+
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
- 2.4.5
-
- true
-
- com.casic.missiles.ServerApplication
- exec
-
-
-
-
- repackage
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
- 1.8
- 1.8
-
-
-
-
- org.apache.maven.plugins
- maven-war-plugin
-
-
- false
-
-
-
-
-
-
- src/main/resources
-
-
- /config/*/*
- /config/*-*.yml
-
- true
-
-
- src/main/resources
-
- **/*.xml
-
- true
-
-
-
-
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java b/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
index 9753109..40c55e8 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
@@ -1,30 +1,30 @@
-package com.casic.missiles;
-
-import com.casic.missiles.netty.SensorhubServer;
-import lombok.extern.slf4j.Slf4j;
-import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.CommandLineRunner;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cache.annotation.EnableCaching;
-
-
-@SpringBootApplication(scanBasePackages = "com.casic.missiles")
-@MapperScan(basePackages = {"com.casic.missiles.**.dao", "com.casic.missiles.**.mapper"})
-@EnableCaching //开启缓存
-@Slf4j
-public class ServerApplication implements CommandLineRunner {
-
- @Autowired
- private SensorhubServer nettyServer;
- public static void main(String[] args) {
- SpringApplication.run(ServerApplication.class, args);
- }
-
- @Override
- public void run(String... args) {
- this.nettyServer.startServer();
- }
-
-}
+//package com.casic.missiles;
+//
+//import com.casic.missiles.netty.SensorhubServer;
+//import lombok.extern.slf4j.Slf4j;
+//import org.mybatis.spring.annotation.MapperScan;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.boot.CommandLineRunner;
+//import org.springframework.boot.SpringApplication;
+//import org.springframework.boot.autoconfigure.SpringBootApplication;
+//import org.springframework.cache.annotation.EnableCaching;
+//
+//
+//@SpringBootApplication(scanBasePackages = "com.casic.missiles")
+//@MapperScan(basePackages = {"com.casic.missiles.**.dao", "com.casic.missiles.**.mapper"})
+//@EnableCaching //开启缓存
+//@Slf4j
+//public class ServerApplication implements CommandLineRunner {
+//
+// @Autowired
+// private SensorhubServer nettyServer;
+// public static void main(String[] args) {
+// SpringApplication.run(ServerApplication.class, args);
+// }
+//
+// @Override
+// public void run(String... args) {
+// this.nettyServer.startServer();
+// }
+//
+//}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java b/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java
deleted file mode 100644
index 624ed4f..0000000
--- a/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.casic.missiles.autoconfig;
-
-import com.casic.missiles.netty.SensorhubServer;
-import io.netty.bootstrap.ServerBootstrap;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * SensorhubServerAutoConfiguration 自动配置类
- */
-@Configuration
-@ConditionalOnProperty(
- prefix = "casic.sensorhub",
- name = "enable",
- havingValue = "true"
-)
-@EnableConfigurationProperties({SensorhubProperties.class})
-@ConditionalOnClass({ServerBootstrap.class})
-public class SensorhubServerAutoConfiguration {
-
- @Bean
- public SensorhubServer sensorhubServer(SensorhubProperties sensorhubProperties) throws Exception {
- return SensorhubServer.getInstance(sensorhubProperties);
- }
-
-}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
index e90de5a..dec5e4e 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
@@ -9,6 +9,8 @@
import java.util.concurrent.*;
/**
+ * @author cz
+ * @date 2023-11-24
* 异步任务调用
*/
public class AsynTaskHelper {
@@ -25,23 +27,25 @@
/**
* 设置线程池
+ *
* @param executorService 线程池
* @return
*/
- public AsynTaskHelper setExecutorService(ExecutorService executorService){
+ public AsynTaskHelper setExecutorService(ExecutorService executorService) {
completionService = new ExecutorCompletionService(executorService);
return this;
}
/**
* 添加任务,返回结果
+ *
* @param taskId
* @param task
* @return
*/
public AsynTaskHelper addTask(String taskId, Callable task) {
AsynTaskCallable callProxy = new AsynTaskCallable(taskId, task);
- if(null == tasks || tasks.isEmpty()){
+ if (null == tasks || tasks.isEmpty()) {
tasks = new ArrayList<>();
}
tasks.add(callProxy);
@@ -50,10 +54,11 @@
/**
* 提交任务
+ *
* @return
*/
- public AsynTaskHelper submit(){
- if(null != tasks && !tasks.isEmpty()){
+ public AsynTaskHelper submit() {
+ if (null != tasks && !tasks.isEmpty()) {
for (Callable callResult : tasks) {
completionService.submit(callResult);
}
@@ -63,7 +68,8 @@
/**
* 获取返回结果
- * @return Map K为任务Id
+ *
+ * @return Map K为任务Id
* @throws ExecutionException
* @throws InterruptedException
*/
@@ -73,22 +79,23 @@
/**
* 获取返回结果
+ *
* @param timeout
* @param unit
- * @return Map K为任务Id
+ * @return Map K为任务Id
* @throws InterruptedException
* @throws ExecutionException
*/
- public Map getResult(long timeout,@NotNull TimeUnit unit) throws InterruptedException, ExecutionException {
+ public Map getResult(long timeout, @NotNull TimeUnit unit) throws InterruptedException, ExecutionException {
Map result = new HashMap<>();
- if(null == tasks){
+ if (null == tasks) {
return result;
}
for (int i = 0; i < tasks.size(); i++) {
Future> poll = completionService.poll(timeout, unit);
- if(null != poll){
+ if (null != poll) {
TaskResult task = poll.get();
- if(null != poll && null != task){
+ if (null != poll && null != task) {
result.put(task.getTaskId(), task.getData());
}
}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
index 0401822..e03781c 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
@@ -7,14 +7,6 @@
public class GuavaCacheUtil {
- /**
- * 使用guava需要引入依赖
- *
- * com.google.guava
- * guava
- * 28.2-jre
- *
- */
private static Cache cache = CacheBuilder.newBuilder()
//10分钟后过期
.expireAfterWrite(10, TimeUnit.MINUTES)
@@ -27,8 +19,22 @@
return cache.getIfPresent(k);
}
+ /**
+ * 添加缓存
+ * @param k
+ * @param value
+ */
public static void putCache(String k, Object value) {
cache.put(k, value);
}
+ /**
+ * 删除缓存
+ *
+ * @param key
+ */
+ public static void remove(String key) {
+ cache.invalidate(key);
+ }
+
}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java
new file mode 100644
index 0000000..88baf61
--- /dev/null
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java
@@ -0,0 +1,174 @@
+package com.casic.missiles.cache;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSON;
+import com.casic.missiles.model.Device;
+import com.casic.missiles.model.DeviceData;
+import com.casic.missiles.pojo.ParseResult;
+import com.casic.missiles.pojo.ProcessEventTask;
+import com.casic.missiles.service.IDeviceDataService;
+import com.casic.missiles.service.impl.DeviceDataServiceImpl;
+import com.casic.missiles.util.SpringContextUtil;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 流程节点事件监听器
+ */
+public class ProtocolProcessEventListener {
+
+ private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 20, 100,
+ TimeUnit.SECONDS, new LinkedBlockingQueue<>(20));
+
+ /**
+ * 异步生成缓存
+ *
+ * @param processEventTask
+ */
+ public static void asynAddTask(ProcessEventTask processEventTask) {
+ if (StringUtils.isNotEmpty(processEventTask.getDevcode())) {
+ GuavaCacheUtil.putCache(processEventTask.getDevcode(), processEventTask);
+ }
+ }
+
+ /**
+ * 异步设置缓存
+ *
+ * @param key
+ * @param json
+ */
+ public static void setTask(String key, Object json, Integer node) {
+ //如果key为空,则直接返回
+ if (StringUtils.isEmpty(key) || ObjectUtil.isEmpty(json)) {
+ return;
+ }
+ ProcessEventTask processEventTask = null;
+ switch (node) {
+ //解密前的数据
+ case 1:
+ //如果为空可以补救
+// if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+// processEventTask = ProcessEventTask.builder()
+// .devcode(key)
+// .decryptSoureData((String) json)
+// .decryptBeforeData((String) json)
+// .build();
+// asynAddTask(processEventTask);
+// } else {
+// processEventTask.setDecryptBeforeData((String) json);
+// }
+// break;
+ //解密后的数据
+ case 2:
+ //如果为空,则源报文和解密报文为空,作为异常判断依据
+ if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+ processEventTask = ProcessEventTask.builder()
+ .devcode(key)
+ .decryptAfterData((String) json)
+ .build();
+ asynAddTask(processEventTask);
+ } else {
+ processEventTask.setDecryptAfterData((String) json);
+ }
+ break;
+ //解析的数据
+ case 3:
+ //如果为空,则源报文和解密报文为空,作为异常判断依据
+ if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+ processEventTask = ProcessEventTask.builder()
+ .devcode(key)
+ .bizDataList((List) json)
+ .build();
+ asynAddTask(processEventTask);
+ } else {
+ processEventTask.setBizDataList((List) json);
+ }
+ break;
+ case 4:
+ //如果为空,则源报文和解密报文为空,作为异常判断依据
+ if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+ processEventTask = ProcessEventTask.builder()
+ .devcode(key)
+ .exceptionMsg((String) json)
+ .build();
+ asynAddTask(processEventTask);
+ } else {
+ processEventTask.setExceptionMsg((String) json);
+ }
+ break;
+ default:
+ return;
+ }
+ }
+
+ /**
+ * 异步设置缓存
+ *
+ * @param key
+ */
+ public static ProcessEventTask getTask(String key) {
+ if (StringUtils.isEmpty(key)) {
+ return null;
+ }
+ return (ProcessEventTask) GuavaCacheUtil.getCache(key);
+ }
+
+ /**
+ * 存库操作
+ *
+ * @param devcode
+ */
+ public static void saveData(String devcode, ParseResult result) {
+ //添加到线程池执行,异步存库
+ threadPool.execute(
+ () -> {
+ ProcessEventTask processEventTask;
+ if (ObjectUtil.isNotEmpty(getTask(devcode))) {
+ synchronized (processEventTask = getTask(devcode)) {
+ IDeviceDataService deviceDataService = SpringContextUtil.getBean(DeviceDataServiceImpl.class);
+ if (ObjectUtil.isNotEmpty(processEventTask)) {
+ List deviceDataList = new ArrayList<>();
+ for (Map BizDataMap : processEventTask.getBizDataList()) {
+ DeviceData deviceData = new DeviceData();
+ deviceData.setDevcode(processEventTask.getDevcode());
+ deviceData.setDeviceType((Integer) BizDataMap.get("deviceType"));
+ deviceData.setUptime((String) BizDataMap.get("uptime"));
+ deviceData.setLogtime(new Date());
+ deviceData.setDataJson(JSON.toJSONString(BizDataMap));
+ deviceData.setDecryptBeforeData(processEventTask.getDecryptSoureData());
+ deviceData.setDecryptAfterData(processEventTask.getDecryptAfterData());
+ if (BizDataMap.containsKey("cell")) {
+ //电量不一定每次都有
+ deviceData.setCell((Integer) BizDataMap.get("cell"));
+ }
+ if (BizDataMap.containsKey("dataValue")) {
+ //电量不一定每次都有
+ deviceData.setDataValue((float) BizDataMap.get("dataValue"));
+ }
+ deviceData.setExceptionMsg(processEventTask.getExceptionMsg());
+ deviceDataList.add(deviceData);
+ }
+ //批量保存
+ deviceDataService.saveBatch(deviceDataList);
+ }
+ }
+ //移除缓存
+ GuavaCacheUtil.remove(devcode);
+ }
+ }
+ );
+ }
+
+ //暂时不做设备的更新
+ public void setDevice(String status) {
+ Device device = new Device();
+ }
+
+}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/listenerEvent.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/listenerEvent.java
deleted file mode 100644
index 2f9c711..0000000
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/listenerEvent.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.casic.missiles.cache;
-
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
-
-public class listenerEvent {
-
- private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 20, 100,
- TimeUnit.SECONDS, new LinkedBlockingQueue<>(20));
-
- /**
- * 异步生成缓存
- *
- * @param key
- * @param json
- */
- public void asynCreateLogCache(String key, String json) {
-
-
- }
-
-
-}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java
index 4e6beea..01b20f5 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java
@@ -2,7 +2,7 @@
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
-import com.casic.missiles.cache.GuavaCacheUtil;
+import com.casic.missiles.cache.ProtocolProcessEventListener;
import com.casic.missiles.enums.EngineExceptionEnum;
import com.casic.missiles.enums.ReplyCommandEnum;
import com.casic.missiles.exception.EngineException;
@@ -56,12 +56,16 @@
}
ParseResult result = null;
+ String devcode = null;
try {
//暂时先取第一个, 减少类的创建销毁与构建
AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig);
+ Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf);
+ devcode = (String) parseFixedDataMap.get("devcode");
// 通过协议工厂匹配,匹配规则,获取规则配置
- RuleConfig ruleConfig = getRuleConfig(protocolFactory, byteBuf);
+ RuleConfig ruleConfig = getRuleConfig(protocolFactory, parseFixedDataMap);
if (ObjectUtil.isEmpty(ruleConfig)) {
+ //打印源数据,设备编号
byteBuf.resetReaderIndex();
log.error("解析匹配失败,匹配帧信息为{}", ByteBufUtil.hexDump(byteBuf));
byteBuf.readBytes(protocolConfig.getPreFix().length());
@@ -94,10 +98,14 @@
}
//获取报文的业务内容
ByteBuf bizDataByteBuf = protocolFactory.getProtocolFieldConfigProvider().getDataContentBuf(intactMessageByte);
- log.debug("解析的密文是----------"+ByteBufUtil.hexDump(bizDataByteBuf));
+ //解密前的报文
+ log.debug("解析的密文是----------" + ByteBufUtil.hexDump(bizDataByteBuf));
+// ProtocolProcessEventListener.setTask(devcode, ByteBufUtil.hexDump(bizDataByteBuf), 1);
//密文解析
- ByteBuf clearZeroPlainBuf = datagramEventProvider.getSafeDatagram(bizDataByteBuf, protocolFactory.getProtocolFieldConfigProvider().getFixFieldConfigMap(),fieldLengthSupplier);
- log.debug("解析的明文是----------"+ByteBufUtil.hexDump(clearZeroPlainBuf));
+ ByteBuf clearZeroPlainBuf = datagramEventProvider.getSafeDatagram(bizDataByteBuf, protocolFactory.getProtocolFieldConfigProvider().getFixFieldConfigMap(), fieldLengthSupplier);
+ log.debug("解析的明文是----------" + ByteBufUtil.hexDump(clearZeroPlainBuf));
+ ProtocolProcessEventListener.setTask(devcode, ByteBufUtil.hexDump(clearZeroPlainBuf), 2);
+ //解密后报文
//解析组合业务字段
ruleConfigFactory.getCombinedFieldConfigProvider().parseDataField(ruleConfig, clearZeroPlainBuf,
ruleConfigFactory.getFieldConfigProvider().getFieldConfigsMap(), protocolConfig.getFieldRuleConfigMap());
@@ -112,16 +120,19 @@
for (AbstractReplyCommandPostProcessing replyCommandPostProcessing : replyCommandPostProcessings) {
result = replyCommandPostProcessing.obtainReplyCommand(bizDataMap, result, ruleConfigFactory, protocolFactory);
}
- //数据发送,异步
+ ProtocolProcessEventListener.setTask(devcode, bizDataMap, 3);
+ //存储数据
datagramEventProvider.storeData(bizDataMap);
} catch (RuntimeException rex) {
log.error("解析出现异常,异常信息为{}", rex);
- result=null;
+ //数据发送,异步,异常拦截
+ ProtocolProcessEventListener.setTask(devcode, rex.getMessage(), 4);
+ result = null;
frozenInvalidByteBuf(byteBuf, protocolConfig);
LeadingCodeMatcher.rematch(byteBuf, protocolConfigProvider.getMatchList());
- }finally {
-// GuavaCacheUtil.putCache("licValid",validLicResult);
-// ValidateResult validLicResult = (ValidateResult) GuavaCacheUtil.getCache("licValid");
+ } finally {
+ //数据发送,异步,转存整体数据
+ ProtocolProcessEventListener.saveData(devcode, result);
return result;
}
}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/ProtocolParserSupport.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/ProtocolParserSupport.java
index 8af55a6..e4a79ae 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/ProtocolParserSupport.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/ProtocolParserSupport.java
@@ -1,10 +1,13 @@
package com.casic.missiles.parser;
+import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.cache.ProtocolProcessEventListener;
import com.casic.missiles.factory.AbstractProtocolConfigFactory;
import com.casic.missiles.factory.AbstractRuleConfigFactory;
import com.casic.missiles.parser.processor.AbstractPostFieldProcessor;
+import com.casic.missiles.pojo.ProcessEventTask;
import com.casic.missiles.pojo.ProtocolConfig;
import com.casic.missiles.pojo.ProtocolFieldConfig;
import com.casic.missiles.pojo.RuleConfig;
@@ -12,6 +15,7 @@
import com.casic.missiles.provider.RuleConfigProvider;
import com.casic.missiles.util.ClazzUtil;
import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils;
@@ -25,10 +29,28 @@
public class ProtocolParserSupport {
+ protected Map getParseFixedDataMap(AbstractProtocolConfigFactory protocolFactory, ByteBuf wholeDatagramByte) {
+ ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider();
+ RuleConfigProvider ruleConfigProvider = protocolFactory.getRuleConfigProvider();
+ ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig();
+ if (ObjectUtils.isEmpty(protocolFieldConfigProvider)
+ || ObjectUtils.isEmpty(ruleConfigProvider) || ObjectUtils.isEmpty(protocolConfig)) {
+ return null;
+ }
+ Map parseFixedDataMap = protocolFieldConfigProvider.getProtocolDataMap(wholeDatagramByte, protocolConfig.getFieldRuleConfigMap());
+ //打印源数据,设备编号
+ ProcessEventTask processEventTask = ProcessEventTask.builder()
+ .devcode((String) parseFixedDataMap.get("devcode"))
+ .decryptSoureData(ByteBufUtil.hexDump(wholeDatagramByte))
+ .build();
+ ProtocolProcessEventListener.asynAddTask(processEventTask);
+ return parseFixedDataMap;
+ }
+
/**
* 获取规则配置,执行规则匹配
*/
- protected RuleConfig getRuleConfig(AbstractProtocolConfigFactory protocolFactory, ByteBuf wholeDatagramByte) {
+ protected RuleConfig getRuleConfig(AbstractProtocolConfigFactory protocolFactory, Map parseFixedDataMap) {
//取出其中参与逻辑provider并判空
ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider();
RuleConfigProvider ruleConfigProvider = protocolFactory.getRuleConfigProvider();
@@ -39,10 +61,8 @@
}
String rulePrepareFields = protocolConfig.getRulePrepareFields();
//固定字段
- if (StringUtils.isNotEmpty(rulePrepareFields)) {
- //获取统一固定字段解析
- Map parseFixedDataMap = protocolFieldConfigProvider.getProtocolDataMap(wholeDatagramByte, protocolConfig.getFieldRuleConfigMap());
- log.debug("协议字段内容为" + JSON.toJSONString(parseFixedDataMap) );
+ if (StringUtils.isNotEmpty(rulePrepareFields) && ObjectUtil.isNotEmpty(parseFixedDataMap)) {
+ log.debug("协议字段内容为" + JSON.toJSONString(parseFixedDataMap));
//获取该协议的字段配置,用于协议规则匹配
List protocolFieldConfigs = protocolFieldConfigProvider.getProtocolFieldConfigs();
//获取规则
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java
index b162def..9c413ed 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java
@@ -1,13 +1,13 @@
package com.casic.missiles.parser.matcher;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.casic.missiles.enums.FrameStructEnum;
import com.casic.missiles.provider.ProtocolConfigProvider;
import com.casic.missiles.pojo.CombinedFieldConfig;
import com.casic.missiles.pojo.ProtocolConfig;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufUtil;
+import org.apache.commons.lang3.StringUtils;
import java.util.*;
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/PreBizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/PreBizFieldParseProcessor.java
index 8eb0682..23d1e4c 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/PreBizFieldParseProcessor.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/PreBizFieldParseProcessor.java
@@ -2,7 +2,7 @@
import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import com.casic.missiles.enums.EngineExceptionEnum;
import com.casic.missiles.exception.EngineException;
import com.casic.missiles.parser.resolver.combined.AbstractCombinedFieldProcessor;
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/ByteFieldParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/ByteFieldParser.java
index 4c02a81..e8506e7 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/ByteFieldParser.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/ByteFieldParser.java
@@ -1,10 +1,10 @@
package com.casic.missiles.parser.resolver.fields;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.casic.missiles.parser.resolver.GenericFiledRuleResolver;
import com.casic.missiles.pojo.FieldRuleConfig;
import io.netty.buffer.ByteBuf;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
import java.util.Map;
diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml
index 2bdfa0e..75e6e82 100644
--- a/casic-iot-common/pom.xml
+++ b/casic-iot-common/pom.xml
@@ -32,10 +32,10 @@
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
+
diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml
index 4797e3a..39bc3b2 100644
--- a/sensorhub-core/pom.xml
+++ b/sensorhub-core/pom.xml
@@ -20,14 +20,6 @@
4.5.7
-
-
- redis.clients
- jedis
- 3.1.0
- jar
-
-
com.casic
sensorhub-support
@@ -62,67 +54,14 @@
mybatis-plus-boot-starter
${mybatis-plus.version}
+
+
+ com.casic
+ casic-iot-service
+ ${iot.version}
+
+
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
- 2.4.5
-
- true
-
- com.casic.missiles.ServerApplication
- exec
-
-
-
-
- repackage
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
- 1.8
- 1.8
-
-
-
-
- org.apache.maven.plugins
- maven-war-plugin
-
-
- false
-
-
-
-
-
-
- src/main/resources
-
-
- /config/*/*
- /config/*-*.yml
-
- true
-
-
- src/main/resources
-
- **/*.xml
-
- true
-
-
-
-
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java b/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
index 9753109..40c55e8 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
@@ -1,30 +1,30 @@
-package com.casic.missiles;
-
-import com.casic.missiles.netty.SensorhubServer;
-import lombok.extern.slf4j.Slf4j;
-import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.CommandLineRunner;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cache.annotation.EnableCaching;
-
-
-@SpringBootApplication(scanBasePackages = "com.casic.missiles")
-@MapperScan(basePackages = {"com.casic.missiles.**.dao", "com.casic.missiles.**.mapper"})
-@EnableCaching //开启缓存
-@Slf4j
-public class ServerApplication implements CommandLineRunner {
-
- @Autowired
- private SensorhubServer nettyServer;
- public static void main(String[] args) {
- SpringApplication.run(ServerApplication.class, args);
- }
-
- @Override
- public void run(String... args) {
- this.nettyServer.startServer();
- }
-
-}
+//package com.casic.missiles;
+//
+//import com.casic.missiles.netty.SensorhubServer;
+//import lombok.extern.slf4j.Slf4j;
+//import org.mybatis.spring.annotation.MapperScan;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.boot.CommandLineRunner;
+//import org.springframework.boot.SpringApplication;
+//import org.springframework.boot.autoconfigure.SpringBootApplication;
+//import org.springframework.cache.annotation.EnableCaching;
+//
+//
+//@SpringBootApplication(scanBasePackages = "com.casic.missiles")
+//@MapperScan(basePackages = {"com.casic.missiles.**.dao", "com.casic.missiles.**.mapper"})
+//@EnableCaching //开启缓存
+//@Slf4j
+//public class ServerApplication implements CommandLineRunner {
+//
+// @Autowired
+// private SensorhubServer nettyServer;
+// public static void main(String[] args) {
+// SpringApplication.run(ServerApplication.class, args);
+// }
+//
+// @Override
+// public void run(String... args) {
+// this.nettyServer.startServer();
+// }
+//
+//}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java b/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java
deleted file mode 100644
index 624ed4f..0000000
--- a/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.casic.missiles.autoconfig;
-
-import com.casic.missiles.netty.SensorhubServer;
-import io.netty.bootstrap.ServerBootstrap;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * SensorhubServerAutoConfiguration 自动配置类
- */
-@Configuration
-@ConditionalOnProperty(
- prefix = "casic.sensorhub",
- name = "enable",
- havingValue = "true"
-)
-@EnableConfigurationProperties({SensorhubProperties.class})
-@ConditionalOnClass({ServerBootstrap.class})
-public class SensorhubServerAutoConfiguration {
-
- @Bean
- public SensorhubServer sensorhubServer(SensorhubProperties sensorhubProperties) throws Exception {
- return SensorhubServer.getInstance(sensorhubProperties);
- }
-
-}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
index e90de5a..dec5e4e 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
@@ -9,6 +9,8 @@
import java.util.concurrent.*;
/**
+ * @author cz
+ * @date 2023-11-24
* 异步任务调用
*/
public class AsynTaskHelper {
@@ -25,23 +27,25 @@
/**
* 设置线程池
+ *
* @param executorService 线程池
* @return
*/
- public AsynTaskHelper setExecutorService(ExecutorService executorService){
+ public AsynTaskHelper setExecutorService(ExecutorService executorService) {
completionService = new ExecutorCompletionService(executorService);
return this;
}
/**
* 添加任务,返回结果
+ *
* @param taskId
* @param task
* @return
*/
public AsynTaskHelper addTask(String taskId, Callable task) {
AsynTaskCallable callProxy = new AsynTaskCallable(taskId, task);
- if(null == tasks || tasks.isEmpty()){
+ if (null == tasks || tasks.isEmpty()) {
tasks = new ArrayList<>();
}
tasks.add(callProxy);
@@ -50,10 +54,11 @@
/**
* 提交任务
+ *
* @return
*/
- public AsynTaskHelper submit(){
- if(null != tasks && !tasks.isEmpty()){
+ public AsynTaskHelper submit() {
+ if (null != tasks && !tasks.isEmpty()) {
for (Callable callResult : tasks) {
completionService.submit(callResult);
}
@@ -63,7 +68,8 @@
/**
* 获取返回结果
- * @return Map K为任务Id
+ *
+ * @return Map K为任务Id
* @throws ExecutionException
* @throws InterruptedException
*/
@@ -73,22 +79,23 @@
/**
* 获取返回结果
+ *
* @param timeout
* @param unit
- * @return Map K为任务Id
+ * @return Map K为任务Id
* @throws InterruptedException
* @throws ExecutionException
*/
- public Map getResult(long timeout,@NotNull TimeUnit unit) throws InterruptedException, ExecutionException {
+ public Map getResult(long timeout, @NotNull TimeUnit unit) throws InterruptedException, ExecutionException {
Map result = new HashMap<>();
- if(null == tasks){
+ if (null == tasks) {
return result;
}
for (int i = 0; i < tasks.size(); i++) {
Future> poll = completionService.poll(timeout, unit);
- if(null != poll){
+ if (null != poll) {
TaskResult task = poll.get();
- if(null != poll && null != task){
+ if (null != poll && null != task) {
result.put(task.getTaskId(), task.getData());
}
}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
index 0401822..e03781c 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
@@ -7,14 +7,6 @@
public class GuavaCacheUtil {
- /**
- * 使用guava需要引入依赖
- *
- * com.google.guava
- * guava
- * 28.2-jre
- *
- */
private static Cache cache = CacheBuilder.newBuilder()
//10分钟后过期
.expireAfterWrite(10, TimeUnit.MINUTES)
@@ -27,8 +19,22 @@
return cache.getIfPresent(k);
}
+ /**
+ * 添加缓存
+ * @param k
+ * @param value
+ */
public static void putCache(String k, Object value) {
cache.put(k, value);
}
+ /**
+ * 删除缓存
+ *
+ * @param key
+ */
+ public static void remove(String key) {
+ cache.invalidate(key);
+ }
+
}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java
new file mode 100644
index 0000000..88baf61
--- /dev/null
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java
@@ -0,0 +1,174 @@
+package com.casic.missiles.cache;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSON;
+import com.casic.missiles.model.Device;
+import com.casic.missiles.model.DeviceData;
+import com.casic.missiles.pojo.ParseResult;
+import com.casic.missiles.pojo.ProcessEventTask;
+import com.casic.missiles.service.IDeviceDataService;
+import com.casic.missiles.service.impl.DeviceDataServiceImpl;
+import com.casic.missiles.util.SpringContextUtil;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 流程节点事件监听器
+ */
+public class ProtocolProcessEventListener {
+
+ private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 20, 100,
+ TimeUnit.SECONDS, new LinkedBlockingQueue<>(20));
+
+ /**
+ * 异步生成缓存
+ *
+ * @param processEventTask
+ */
+ public static void asynAddTask(ProcessEventTask processEventTask) {
+ if (StringUtils.isNotEmpty(processEventTask.getDevcode())) {
+ GuavaCacheUtil.putCache(processEventTask.getDevcode(), processEventTask);
+ }
+ }
+
+ /**
+ * 异步设置缓存
+ *
+ * @param key
+ * @param json
+ */
+ public static void setTask(String key, Object json, Integer node) {
+ //如果key为空,则直接返回
+ if (StringUtils.isEmpty(key) || ObjectUtil.isEmpty(json)) {
+ return;
+ }
+ ProcessEventTask processEventTask = null;
+ switch (node) {
+ //解密前的数据
+ case 1:
+ //如果为空可以补救
+// if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+// processEventTask = ProcessEventTask.builder()
+// .devcode(key)
+// .decryptSoureData((String) json)
+// .decryptBeforeData((String) json)
+// .build();
+// asynAddTask(processEventTask);
+// } else {
+// processEventTask.setDecryptBeforeData((String) json);
+// }
+// break;
+ //解密后的数据
+ case 2:
+ //如果为空,则源报文和解密报文为空,作为异常判断依据
+ if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+ processEventTask = ProcessEventTask.builder()
+ .devcode(key)
+ .decryptAfterData((String) json)
+ .build();
+ asynAddTask(processEventTask);
+ } else {
+ processEventTask.setDecryptAfterData((String) json);
+ }
+ break;
+ //解析的数据
+ case 3:
+ //如果为空,则源报文和解密报文为空,作为异常判断依据
+ if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+ processEventTask = ProcessEventTask.builder()
+ .devcode(key)
+ .bizDataList((List) json)
+ .build();
+ asynAddTask(processEventTask);
+ } else {
+ processEventTask.setBizDataList((List) json);
+ }
+ break;
+ case 4:
+ //如果为空,则源报文和解密报文为空,作为异常判断依据
+ if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+ processEventTask = ProcessEventTask.builder()
+ .devcode(key)
+ .exceptionMsg((String) json)
+ .build();
+ asynAddTask(processEventTask);
+ } else {
+ processEventTask.setExceptionMsg((String) json);
+ }
+ break;
+ default:
+ return;
+ }
+ }
+
+ /**
+ * 异步设置缓存
+ *
+ * @param key
+ */
+ public static ProcessEventTask getTask(String key) {
+ if (StringUtils.isEmpty(key)) {
+ return null;
+ }
+ return (ProcessEventTask) GuavaCacheUtil.getCache(key);
+ }
+
+ /**
+ * 存库操作
+ *
+ * @param devcode
+ */
+ public static void saveData(String devcode, ParseResult result) {
+ //添加到线程池执行,异步存库
+ threadPool.execute(
+ () -> {
+ ProcessEventTask processEventTask;
+ if (ObjectUtil.isNotEmpty(getTask(devcode))) {
+ synchronized (processEventTask = getTask(devcode)) {
+ IDeviceDataService deviceDataService = SpringContextUtil.getBean(DeviceDataServiceImpl.class);
+ if (ObjectUtil.isNotEmpty(processEventTask)) {
+ List deviceDataList = new ArrayList<>();
+ for (Map BizDataMap : processEventTask.getBizDataList()) {
+ DeviceData deviceData = new DeviceData();
+ deviceData.setDevcode(processEventTask.getDevcode());
+ deviceData.setDeviceType((Integer) BizDataMap.get("deviceType"));
+ deviceData.setUptime((String) BizDataMap.get("uptime"));
+ deviceData.setLogtime(new Date());
+ deviceData.setDataJson(JSON.toJSONString(BizDataMap));
+ deviceData.setDecryptBeforeData(processEventTask.getDecryptSoureData());
+ deviceData.setDecryptAfterData(processEventTask.getDecryptAfterData());
+ if (BizDataMap.containsKey("cell")) {
+ //电量不一定每次都有
+ deviceData.setCell((Integer) BizDataMap.get("cell"));
+ }
+ if (BizDataMap.containsKey("dataValue")) {
+ //电量不一定每次都有
+ deviceData.setDataValue((float) BizDataMap.get("dataValue"));
+ }
+ deviceData.setExceptionMsg(processEventTask.getExceptionMsg());
+ deviceDataList.add(deviceData);
+ }
+ //批量保存
+ deviceDataService.saveBatch(deviceDataList);
+ }
+ }
+ //移除缓存
+ GuavaCacheUtil.remove(devcode);
+ }
+ }
+ );
+ }
+
+ //暂时不做设备的更新
+ public void setDevice(String status) {
+ Device device = new Device();
+ }
+
+}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/listenerEvent.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/listenerEvent.java
deleted file mode 100644
index 2f9c711..0000000
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/listenerEvent.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.casic.missiles.cache;
-
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
-
-public class listenerEvent {
-
- private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 20, 100,
- TimeUnit.SECONDS, new LinkedBlockingQueue<>(20));
-
- /**
- * 异步生成缓存
- *
- * @param key
- * @param json
- */
- public void asynCreateLogCache(String key, String json) {
-
-
- }
-
-
-}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java
index 4e6beea..01b20f5 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java
@@ -2,7 +2,7 @@
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
-import com.casic.missiles.cache.GuavaCacheUtil;
+import com.casic.missiles.cache.ProtocolProcessEventListener;
import com.casic.missiles.enums.EngineExceptionEnum;
import com.casic.missiles.enums.ReplyCommandEnum;
import com.casic.missiles.exception.EngineException;
@@ -56,12 +56,16 @@
}
ParseResult result = null;
+ String devcode = null;
try {
//暂时先取第一个, 减少类的创建销毁与构建
AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig);
+ Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf);
+ devcode = (String) parseFixedDataMap.get("devcode");
// 通过协议工厂匹配,匹配规则,获取规则配置
- RuleConfig ruleConfig = getRuleConfig(protocolFactory, byteBuf);
+ RuleConfig ruleConfig = getRuleConfig(protocolFactory, parseFixedDataMap);
if (ObjectUtil.isEmpty(ruleConfig)) {
+ //打印源数据,设备编号
byteBuf.resetReaderIndex();
log.error("解析匹配失败,匹配帧信息为{}", ByteBufUtil.hexDump(byteBuf));
byteBuf.readBytes(protocolConfig.getPreFix().length());
@@ -94,10 +98,14 @@
}
//获取报文的业务内容
ByteBuf bizDataByteBuf = protocolFactory.getProtocolFieldConfigProvider().getDataContentBuf(intactMessageByte);
- log.debug("解析的密文是----------"+ByteBufUtil.hexDump(bizDataByteBuf));
+ //解密前的报文
+ log.debug("解析的密文是----------" + ByteBufUtil.hexDump(bizDataByteBuf));
+// ProtocolProcessEventListener.setTask(devcode, ByteBufUtil.hexDump(bizDataByteBuf), 1);
//密文解析
- ByteBuf clearZeroPlainBuf = datagramEventProvider.getSafeDatagram(bizDataByteBuf, protocolFactory.getProtocolFieldConfigProvider().getFixFieldConfigMap(),fieldLengthSupplier);
- log.debug("解析的明文是----------"+ByteBufUtil.hexDump(clearZeroPlainBuf));
+ ByteBuf clearZeroPlainBuf = datagramEventProvider.getSafeDatagram(bizDataByteBuf, protocolFactory.getProtocolFieldConfigProvider().getFixFieldConfigMap(), fieldLengthSupplier);
+ log.debug("解析的明文是----------" + ByteBufUtil.hexDump(clearZeroPlainBuf));
+ ProtocolProcessEventListener.setTask(devcode, ByteBufUtil.hexDump(clearZeroPlainBuf), 2);
+ //解密后报文
//解析组合业务字段
ruleConfigFactory.getCombinedFieldConfigProvider().parseDataField(ruleConfig, clearZeroPlainBuf,
ruleConfigFactory.getFieldConfigProvider().getFieldConfigsMap(), protocolConfig.getFieldRuleConfigMap());
@@ -112,16 +120,19 @@
for (AbstractReplyCommandPostProcessing replyCommandPostProcessing : replyCommandPostProcessings) {
result = replyCommandPostProcessing.obtainReplyCommand(bizDataMap, result, ruleConfigFactory, protocolFactory);
}
- //数据发送,异步
+ ProtocolProcessEventListener.setTask(devcode, bizDataMap, 3);
+ //存储数据
datagramEventProvider.storeData(bizDataMap);
} catch (RuntimeException rex) {
log.error("解析出现异常,异常信息为{}", rex);
- result=null;
+ //数据发送,异步,异常拦截
+ ProtocolProcessEventListener.setTask(devcode, rex.getMessage(), 4);
+ result = null;
frozenInvalidByteBuf(byteBuf, protocolConfig);
LeadingCodeMatcher.rematch(byteBuf, protocolConfigProvider.getMatchList());
- }finally {
-// GuavaCacheUtil.putCache("licValid",validLicResult);
-// ValidateResult validLicResult = (ValidateResult) GuavaCacheUtil.getCache("licValid");
+ } finally {
+ //数据发送,异步,转存整体数据
+ ProtocolProcessEventListener.saveData(devcode, result);
return result;
}
}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/ProtocolParserSupport.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/ProtocolParserSupport.java
index 8af55a6..e4a79ae 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/ProtocolParserSupport.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/ProtocolParserSupport.java
@@ -1,10 +1,13 @@
package com.casic.missiles.parser;
+import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.cache.ProtocolProcessEventListener;
import com.casic.missiles.factory.AbstractProtocolConfigFactory;
import com.casic.missiles.factory.AbstractRuleConfigFactory;
import com.casic.missiles.parser.processor.AbstractPostFieldProcessor;
+import com.casic.missiles.pojo.ProcessEventTask;
import com.casic.missiles.pojo.ProtocolConfig;
import com.casic.missiles.pojo.ProtocolFieldConfig;
import com.casic.missiles.pojo.RuleConfig;
@@ -12,6 +15,7 @@
import com.casic.missiles.provider.RuleConfigProvider;
import com.casic.missiles.util.ClazzUtil;
import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils;
@@ -25,10 +29,28 @@
public class ProtocolParserSupport {
+ protected Map getParseFixedDataMap(AbstractProtocolConfigFactory protocolFactory, ByteBuf wholeDatagramByte) {
+ ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider();
+ RuleConfigProvider ruleConfigProvider = protocolFactory.getRuleConfigProvider();
+ ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig();
+ if (ObjectUtils.isEmpty(protocolFieldConfigProvider)
+ || ObjectUtils.isEmpty(ruleConfigProvider) || ObjectUtils.isEmpty(protocolConfig)) {
+ return null;
+ }
+ Map parseFixedDataMap = protocolFieldConfigProvider.getProtocolDataMap(wholeDatagramByte, protocolConfig.getFieldRuleConfigMap());
+ //打印源数据,设备编号
+ ProcessEventTask processEventTask = ProcessEventTask.builder()
+ .devcode((String) parseFixedDataMap.get("devcode"))
+ .decryptSoureData(ByteBufUtil.hexDump(wholeDatagramByte))
+ .build();
+ ProtocolProcessEventListener.asynAddTask(processEventTask);
+ return parseFixedDataMap;
+ }
+
/**
* 获取规则配置,执行规则匹配
*/
- protected RuleConfig getRuleConfig(AbstractProtocolConfigFactory protocolFactory, ByteBuf wholeDatagramByte) {
+ protected RuleConfig getRuleConfig(AbstractProtocolConfigFactory protocolFactory, Map parseFixedDataMap) {
//取出其中参与逻辑provider并判空
ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider();
RuleConfigProvider ruleConfigProvider = protocolFactory.getRuleConfigProvider();
@@ -39,10 +61,8 @@
}
String rulePrepareFields = protocolConfig.getRulePrepareFields();
//固定字段
- if (StringUtils.isNotEmpty(rulePrepareFields)) {
- //获取统一固定字段解析
- Map parseFixedDataMap = protocolFieldConfigProvider.getProtocolDataMap(wholeDatagramByte, protocolConfig.getFieldRuleConfigMap());
- log.debug("协议字段内容为" + JSON.toJSONString(parseFixedDataMap) );
+ if (StringUtils.isNotEmpty(rulePrepareFields) && ObjectUtil.isNotEmpty(parseFixedDataMap)) {
+ log.debug("协议字段内容为" + JSON.toJSONString(parseFixedDataMap));
//获取该协议的字段配置,用于协议规则匹配
List protocolFieldConfigs = protocolFieldConfigProvider.getProtocolFieldConfigs();
//获取规则
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java
index b162def..9c413ed 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java
@@ -1,13 +1,13 @@
package com.casic.missiles.parser.matcher;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.casic.missiles.enums.FrameStructEnum;
import com.casic.missiles.provider.ProtocolConfigProvider;
import com.casic.missiles.pojo.CombinedFieldConfig;
import com.casic.missiles.pojo.ProtocolConfig;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufUtil;
+import org.apache.commons.lang3.StringUtils;
import java.util.*;
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/PreBizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/PreBizFieldParseProcessor.java
index 8eb0682..23d1e4c 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/PreBizFieldParseProcessor.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/PreBizFieldParseProcessor.java
@@ -2,7 +2,7 @@
import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import com.casic.missiles.enums.EngineExceptionEnum;
import com.casic.missiles.exception.EngineException;
import com.casic.missiles.parser.resolver.combined.AbstractCombinedFieldProcessor;
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/ByteFieldParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/ByteFieldParser.java
index 4c02a81..e8506e7 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/ByteFieldParser.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/ByteFieldParser.java
@@ -1,10 +1,10 @@
package com.casic.missiles.parser.resolver.fields;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.casic.missiles.parser.resolver.GenericFiledRuleResolver;
import com.casic.missiles.pojo.FieldRuleConfig;
import io.netty.buffer.ByteBuf;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
import java.util.Map;
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/rule/RuleResolverCore.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/rule/RuleResolverCore.java
index 204b4dc..54b4e58 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/rule/RuleResolverCore.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/rule/RuleResolverCore.java
@@ -1,7 +1,7 @@
package com.casic.missiles.parser.rule;
import com.alibaba.fastjson.JSON;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import com.casic.missiles.pojo.RuleConfig;
import lombok.extern.slf4j.Slf4j;
diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml
index 2bdfa0e..75e6e82 100644
--- a/casic-iot-common/pom.xml
+++ b/casic-iot-common/pom.xml
@@ -32,10 +32,10 @@
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
+
diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml
index 4797e3a..39bc3b2 100644
--- a/sensorhub-core/pom.xml
+++ b/sensorhub-core/pom.xml
@@ -20,14 +20,6 @@
4.5.7
-
-
- redis.clients
- jedis
- 3.1.0
- jar
-
-
com.casic
sensorhub-support
@@ -62,67 +54,14 @@
mybatis-plus-boot-starter
${mybatis-plus.version}
+
+
+ com.casic
+ casic-iot-service
+ ${iot.version}
+
+
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
- 2.4.5
-
- true
-
- com.casic.missiles.ServerApplication
- exec
-
-
-
-
- repackage
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
- 1.8
- 1.8
-
-
-
-
- org.apache.maven.plugins
- maven-war-plugin
-
-
- false
-
-
-
-
-
-
- src/main/resources
-
-
- /config/*/*
- /config/*-*.yml
-
- true
-
-
- src/main/resources
-
- **/*.xml
-
- true
-
-
-
-
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java b/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
index 9753109..40c55e8 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
@@ -1,30 +1,30 @@
-package com.casic.missiles;
-
-import com.casic.missiles.netty.SensorhubServer;
-import lombok.extern.slf4j.Slf4j;
-import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.CommandLineRunner;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cache.annotation.EnableCaching;
-
-
-@SpringBootApplication(scanBasePackages = "com.casic.missiles")
-@MapperScan(basePackages = {"com.casic.missiles.**.dao", "com.casic.missiles.**.mapper"})
-@EnableCaching //开启缓存
-@Slf4j
-public class ServerApplication implements CommandLineRunner {
-
- @Autowired
- private SensorhubServer nettyServer;
- public static void main(String[] args) {
- SpringApplication.run(ServerApplication.class, args);
- }
-
- @Override
- public void run(String... args) {
- this.nettyServer.startServer();
- }
-
-}
+//package com.casic.missiles;
+//
+//import com.casic.missiles.netty.SensorhubServer;
+//import lombok.extern.slf4j.Slf4j;
+//import org.mybatis.spring.annotation.MapperScan;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.boot.CommandLineRunner;
+//import org.springframework.boot.SpringApplication;
+//import org.springframework.boot.autoconfigure.SpringBootApplication;
+//import org.springframework.cache.annotation.EnableCaching;
+//
+//
+//@SpringBootApplication(scanBasePackages = "com.casic.missiles")
+//@MapperScan(basePackages = {"com.casic.missiles.**.dao", "com.casic.missiles.**.mapper"})
+//@EnableCaching //开启缓存
+//@Slf4j
+//public class ServerApplication implements CommandLineRunner {
+//
+// @Autowired
+// private SensorhubServer nettyServer;
+// public static void main(String[] args) {
+// SpringApplication.run(ServerApplication.class, args);
+// }
+//
+// @Override
+// public void run(String... args) {
+// this.nettyServer.startServer();
+// }
+//
+//}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java b/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java
deleted file mode 100644
index 624ed4f..0000000
--- a/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.casic.missiles.autoconfig;
-
-import com.casic.missiles.netty.SensorhubServer;
-import io.netty.bootstrap.ServerBootstrap;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * SensorhubServerAutoConfiguration 自动配置类
- */
-@Configuration
-@ConditionalOnProperty(
- prefix = "casic.sensorhub",
- name = "enable",
- havingValue = "true"
-)
-@EnableConfigurationProperties({SensorhubProperties.class})
-@ConditionalOnClass({ServerBootstrap.class})
-public class SensorhubServerAutoConfiguration {
-
- @Bean
- public SensorhubServer sensorhubServer(SensorhubProperties sensorhubProperties) throws Exception {
- return SensorhubServer.getInstance(sensorhubProperties);
- }
-
-}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
index e90de5a..dec5e4e 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
@@ -9,6 +9,8 @@
import java.util.concurrent.*;
/**
+ * @author cz
+ * @date 2023-11-24
* 异步任务调用
*/
public class AsynTaskHelper {
@@ -25,23 +27,25 @@
/**
* 设置线程池
+ *
* @param executorService 线程池
* @return
*/
- public AsynTaskHelper setExecutorService(ExecutorService executorService){
+ public AsynTaskHelper setExecutorService(ExecutorService executorService) {
completionService = new ExecutorCompletionService(executorService);
return this;
}
/**
* 添加任务,返回结果
+ *
* @param taskId
* @param task
* @return
*/
public AsynTaskHelper addTask(String taskId, Callable task) {
AsynTaskCallable callProxy = new AsynTaskCallable(taskId, task);
- if(null == tasks || tasks.isEmpty()){
+ if (null == tasks || tasks.isEmpty()) {
tasks = new ArrayList<>();
}
tasks.add(callProxy);
@@ -50,10 +54,11 @@
/**
* 提交任务
+ *
* @return
*/
- public AsynTaskHelper submit(){
- if(null != tasks && !tasks.isEmpty()){
+ public AsynTaskHelper submit() {
+ if (null != tasks && !tasks.isEmpty()) {
for (Callable callResult : tasks) {
completionService.submit(callResult);
}
@@ -63,7 +68,8 @@
/**
* 获取返回结果
- * @return Map K为任务Id
+ *
+ * @return Map K为任务Id
* @throws ExecutionException
* @throws InterruptedException
*/
@@ -73,22 +79,23 @@
/**
* 获取返回结果
+ *
* @param timeout
* @param unit
- * @return Map K为任务Id
+ * @return Map K为任务Id
* @throws InterruptedException
* @throws ExecutionException
*/
- public Map getResult(long timeout,@NotNull TimeUnit unit) throws InterruptedException, ExecutionException {
+ public Map getResult(long timeout, @NotNull TimeUnit unit) throws InterruptedException, ExecutionException {
Map result = new HashMap<>();
- if(null == tasks){
+ if (null == tasks) {
return result;
}
for (int i = 0; i < tasks.size(); i++) {
Future> poll = completionService.poll(timeout, unit);
- if(null != poll){
+ if (null != poll) {
TaskResult task = poll.get();
- if(null != poll && null != task){
+ if (null != poll && null != task) {
result.put(task.getTaskId(), task.getData());
}
}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
index 0401822..e03781c 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
@@ -7,14 +7,6 @@
public class GuavaCacheUtil {
- /**
- * 使用guava需要引入依赖
- *
- * com.google.guava
- * guava
- * 28.2-jre
- *
- */
private static Cache cache = CacheBuilder.newBuilder()
//10分钟后过期
.expireAfterWrite(10, TimeUnit.MINUTES)
@@ -27,8 +19,22 @@
return cache.getIfPresent(k);
}
+ /**
+ * 添加缓存
+ * @param k
+ * @param value
+ */
public static void putCache(String k, Object value) {
cache.put(k, value);
}
+ /**
+ * 删除缓存
+ *
+ * @param key
+ */
+ public static void remove(String key) {
+ cache.invalidate(key);
+ }
+
}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java
new file mode 100644
index 0000000..88baf61
--- /dev/null
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java
@@ -0,0 +1,174 @@
+package com.casic.missiles.cache;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSON;
+import com.casic.missiles.model.Device;
+import com.casic.missiles.model.DeviceData;
+import com.casic.missiles.pojo.ParseResult;
+import com.casic.missiles.pojo.ProcessEventTask;
+import com.casic.missiles.service.IDeviceDataService;
+import com.casic.missiles.service.impl.DeviceDataServiceImpl;
+import com.casic.missiles.util.SpringContextUtil;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 流程节点事件监听器
+ */
+public class ProtocolProcessEventListener {
+
+ private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 20, 100,
+ TimeUnit.SECONDS, new LinkedBlockingQueue<>(20));
+
+ /**
+ * 异步生成缓存
+ *
+ * @param processEventTask
+ */
+ public static void asynAddTask(ProcessEventTask processEventTask) {
+ if (StringUtils.isNotEmpty(processEventTask.getDevcode())) {
+ GuavaCacheUtil.putCache(processEventTask.getDevcode(), processEventTask);
+ }
+ }
+
+ /**
+ * 异步设置缓存
+ *
+ * @param key
+ * @param json
+ */
+ public static void setTask(String key, Object json, Integer node) {
+ //如果key为空,则直接返回
+ if (StringUtils.isEmpty(key) || ObjectUtil.isEmpty(json)) {
+ return;
+ }
+ ProcessEventTask processEventTask = null;
+ switch (node) {
+ //解密前的数据
+ case 1:
+ //如果为空可以补救
+// if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+// processEventTask = ProcessEventTask.builder()
+// .devcode(key)
+// .decryptSoureData((String) json)
+// .decryptBeforeData((String) json)
+// .build();
+// asynAddTask(processEventTask);
+// } else {
+// processEventTask.setDecryptBeforeData((String) json);
+// }
+// break;
+ //解密后的数据
+ case 2:
+ //如果为空,则源报文和解密报文为空,作为异常判断依据
+ if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+ processEventTask = ProcessEventTask.builder()
+ .devcode(key)
+ .decryptAfterData((String) json)
+ .build();
+ asynAddTask(processEventTask);
+ } else {
+ processEventTask.setDecryptAfterData((String) json);
+ }
+ break;
+ //解析的数据
+ case 3:
+ //如果为空,则源报文和解密报文为空,作为异常判断依据
+ if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+ processEventTask = ProcessEventTask.builder()
+ .devcode(key)
+ .bizDataList((List) json)
+ .build();
+ asynAddTask(processEventTask);
+ } else {
+ processEventTask.setBizDataList((List) json);
+ }
+ break;
+ case 4:
+ //如果为空,则源报文和解密报文为空,作为异常判断依据
+ if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+ processEventTask = ProcessEventTask.builder()
+ .devcode(key)
+ .exceptionMsg((String) json)
+ .build();
+ asynAddTask(processEventTask);
+ } else {
+ processEventTask.setExceptionMsg((String) json);
+ }
+ break;
+ default:
+ return;
+ }
+ }
+
+ /**
+ * 异步设置缓存
+ *
+ * @param key
+ */
+ public static ProcessEventTask getTask(String key) {
+ if (StringUtils.isEmpty(key)) {
+ return null;
+ }
+ return (ProcessEventTask) GuavaCacheUtil.getCache(key);
+ }
+
+ /**
+ * 存库操作
+ *
+ * @param devcode
+ */
+ public static void saveData(String devcode, ParseResult result) {
+ //添加到线程池执行,异步存库
+ threadPool.execute(
+ () -> {
+ ProcessEventTask processEventTask;
+ if (ObjectUtil.isNotEmpty(getTask(devcode))) {
+ synchronized (processEventTask = getTask(devcode)) {
+ IDeviceDataService deviceDataService = SpringContextUtil.getBean(DeviceDataServiceImpl.class);
+ if (ObjectUtil.isNotEmpty(processEventTask)) {
+ List deviceDataList = new ArrayList<>();
+ for (Map BizDataMap : processEventTask.getBizDataList()) {
+ DeviceData deviceData = new DeviceData();
+ deviceData.setDevcode(processEventTask.getDevcode());
+ deviceData.setDeviceType((Integer) BizDataMap.get("deviceType"));
+ deviceData.setUptime((String) BizDataMap.get("uptime"));
+ deviceData.setLogtime(new Date());
+ deviceData.setDataJson(JSON.toJSONString(BizDataMap));
+ deviceData.setDecryptBeforeData(processEventTask.getDecryptSoureData());
+ deviceData.setDecryptAfterData(processEventTask.getDecryptAfterData());
+ if (BizDataMap.containsKey("cell")) {
+ //电量不一定每次都有
+ deviceData.setCell((Integer) BizDataMap.get("cell"));
+ }
+ if (BizDataMap.containsKey("dataValue")) {
+ //电量不一定每次都有
+ deviceData.setDataValue((float) BizDataMap.get("dataValue"));
+ }
+ deviceData.setExceptionMsg(processEventTask.getExceptionMsg());
+ deviceDataList.add(deviceData);
+ }
+ //批量保存
+ deviceDataService.saveBatch(deviceDataList);
+ }
+ }
+ //移除缓存
+ GuavaCacheUtil.remove(devcode);
+ }
+ }
+ );
+ }
+
+ //暂时不做设备的更新
+ public void setDevice(String status) {
+ Device device = new Device();
+ }
+
+}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/listenerEvent.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/listenerEvent.java
deleted file mode 100644
index 2f9c711..0000000
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/listenerEvent.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.casic.missiles.cache;
-
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
-
-public class listenerEvent {
-
- private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 20, 100,
- TimeUnit.SECONDS, new LinkedBlockingQueue<>(20));
-
- /**
- * 异步生成缓存
- *
- * @param key
- * @param json
- */
- public void asynCreateLogCache(String key, String json) {
-
-
- }
-
-
-}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java
index 4e6beea..01b20f5 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java
@@ -2,7 +2,7 @@
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
-import com.casic.missiles.cache.GuavaCacheUtil;
+import com.casic.missiles.cache.ProtocolProcessEventListener;
import com.casic.missiles.enums.EngineExceptionEnum;
import com.casic.missiles.enums.ReplyCommandEnum;
import com.casic.missiles.exception.EngineException;
@@ -56,12 +56,16 @@
}
ParseResult result = null;
+ String devcode = null;
try {
//暂时先取第一个, 减少类的创建销毁与构建
AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig);
+ Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf);
+ devcode = (String) parseFixedDataMap.get("devcode");
// 通过协议工厂匹配,匹配规则,获取规则配置
- RuleConfig ruleConfig = getRuleConfig(protocolFactory, byteBuf);
+ RuleConfig ruleConfig = getRuleConfig(protocolFactory, parseFixedDataMap);
if (ObjectUtil.isEmpty(ruleConfig)) {
+ //打印源数据,设备编号
byteBuf.resetReaderIndex();
log.error("解析匹配失败,匹配帧信息为{}", ByteBufUtil.hexDump(byteBuf));
byteBuf.readBytes(protocolConfig.getPreFix().length());
@@ -94,10 +98,14 @@
}
//获取报文的业务内容
ByteBuf bizDataByteBuf = protocolFactory.getProtocolFieldConfigProvider().getDataContentBuf(intactMessageByte);
- log.debug("解析的密文是----------"+ByteBufUtil.hexDump(bizDataByteBuf));
+ //解密前的报文
+ log.debug("解析的密文是----------" + ByteBufUtil.hexDump(bizDataByteBuf));
+// ProtocolProcessEventListener.setTask(devcode, ByteBufUtil.hexDump(bizDataByteBuf), 1);
//密文解析
- ByteBuf clearZeroPlainBuf = datagramEventProvider.getSafeDatagram(bizDataByteBuf, protocolFactory.getProtocolFieldConfigProvider().getFixFieldConfigMap(),fieldLengthSupplier);
- log.debug("解析的明文是----------"+ByteBufUtil.hexDump(clearZeroPlainBuf));
+ ByteBuf clearZeroPlainBuf = datagramEventProvider.getSafeDatagram(bizDataByteBuf, protocolFactory.getProtocolFieldConfigProvider().getFixFieldConfigMap(), fieldLengthSupplier);
+ log.debug("解析的明文是----------" + ByteBufUtil.hexDump(clearZeroPlainBuf));
+ ProtocolProcessEventListener.setTask(devcode, ByteBufUtil.hexDump(clearZeroPlainBuf), 2);
+ //解密后报文
//解析组合业务字段
ruleConfigFactory.getCombinedFieldConfigProvider().parseDataField(ruleConfig, clearZeroPlainBuf,
ruleConfigFactory.getFieldConfigProvider().getFieldConfigsMap(), protocolConfig.getFieldRuleConfigMap());
@@ -112,16 +120,19 @@
for (AbstractReplyCommandPostProcessing replyCommandPostProcessing : replyCommandPostProcessings) {
result = replyCommandPostProcessing.obtainReplyCommand(bizDataMap, result, ruleConfigFactory, protocolFactory);
}
- //数据发送,异步
+ ProtocolProcessEventListener.setTask(devcode, bizDataMap, 3);
+ //存储数据
datagramEventProvider.storeData(bizDataMap);
} catch (RuntimeException rex) {
log.error("解析出现异常,异常信息为{}", rex);
- result=null;
+ //数据发送,异步,异常拦截
+ ProtocolProcessEventListener.setTask(devcode, rex.getMessage(), 4);
+ result = null;
frozenInvalidByteBuf(byteBuf, protocolConfig);
LeadingCodeMatcher.rematch(byteBuf, protocolConfigProvider.getMatchList());
- }finally {
-// GuavaCacheUtil.putCache("licValid",validLicResult);
-// ValidateResult validLicResult = (ValidateResult) GuavaCacheUtil.getCache("licValid");
+ } finally {
+ //数据发送,异步,转存整体数据
+ ProtocolProcessEventListener.saveData(devcode, result);
return result;
}
}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/ProtocolParserSupport.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/ProtocolParserSupport.java
index 8af55a6..e4a79ae 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/ProtocolParserSupport.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/ProtocolParserSupport.java
@@ -1,10 +1,13 @@
package com.casic.missiles.parser;
+import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.cache.ProtocolProcessEventListener;
import com.casic.missiles.factory.AbstractProtocolConfigFactory;
import com.casic.missiles.factory.AbstractRuleConfigFactory;
import com.casic.missiles.parser.processor.AbstractPostFieldProcessor;
+import com.casic.missiles.pojo.ProcessEventTask;
import com.casic.missiles.pojo.ProtocolConfig;
import com.casic.missiles.pojo.ProtocolFieldConfig;
import com.casic.missiles.pojo.RuleConfig;
@@ -12,6 +15,7 @@
import com.casic.missiles.provider.RuleConfigProvider;
import com.casic.missiles.util.ClazzUtil;
import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils;
@@ -25,10 +29,28 @@
public class ProtocolParserSupport {
+ protected Map getParseFixedDataMap(AbstractProtocolConfigFactory protocolFactory, ByteBuf wholeDatagramByte) {
+ ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider();
+ RuleConfigProvider ruleConfigProvider = protocolFactory.getRuleConfigProvider();
+ ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig();
+ if (ObjectUtils.isEmpty(protocolFieldConfigProvider)
+ || ObjectUtils.isEmpty(ruleConfigProvider) || ObjectUtils.isEmpty(protocolConfig)) {
+ return null;
+ }
+ Map parseFixedDataMap = protocolFieldConfigProvider.getProtocolDataMap(wholeDatagramByte, protocolConfig.getFieldRuleConfigMap());
+ //打印源数据,设备编号
+ ProcessEventTask processEventTask = ProcessEventTask.builder()
+ .devcode((String) parseFixedDataMap.get("devcode"))
+ .decryptSoureData(ByteBufUtil.hexDump(wholeDatagramByte))
+ .build();
+ ProtocolProcessEventListener.asynAddTask(processEventTask);
+ return parseFixedDataMap;
+ }
+
/**
* 获取规则配置,执行规则匹配
*/
- protected RuleConfig getRuleConfig(AbstractProtocolConfigFactory protocolFactory, ByteBuf wholeDatagramByte) {
+ protected RuleConfig getRuleConfig(AbstractProtocolConfigFactory protocolFactory, Map parseFixedDataMap) {
//取出其中参与逻辑provider并判空
ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider();
RuleConfigProvider ruleConfigProvider = protocolFactory.getRuleConfigProvider();
@@ -39,10 +61,8 @@
}
String rulePrepareFields = protocolConfig.getRulePrepareFields();
//固定字段
- if (StringUtils.isNotEmpty(rulePrepareFields)) {
- //获取统一固定字段解析
- Map parseFixedDataMap = protocolFieldConfigProvider.getProtocolDataMap(wholeDatagramByte, protocolConfig.getFieldRuleConfigMap());
- log.debug("协议字段内容为" + JSON.toJSONString(parseFixedDataMap) );
+ if (StringUtils.isNotEmpty(rulePrepareFields) && ObjectUtil.isNotEmpty(parseFixedDataMap)) {
+ log.debug("协议字段内容为" + JSON.toJSONString(parseFixedDataMap));
//获取该协议的字段配置,用于协议规则匹配
List protocolFieldConfigs = protocolFieldConfigProvider.getProtocolFieldConfigs();
//获取规则
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java
index b162def..9c413ed 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java
@@ -1,13 +1,13 @@
package com.casic.missiles.parser.matcher;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.casic.missiles.enums.FrameStructEnum;
import com.casic.missiles.provider.ProtocolConfigProvider;
import com.casic.missiles.pojo.CombinedFieldConfig;
import com.casic.missiles.pojo.ProtocolConfig;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufUtil;
+import org.apache.commons.lang3.StringUtils;
import java.util.*;
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/PreBizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/PreBizFieldParseProcessor.java
index 8eb0682..23d1e4c 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/PreBizFieldParseProcessor.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/PreBizFieldParseProcessor.java
@@ -2,7 +2,7 @@
import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import com.casic.missiles.enums.EngineExceptionEnum;
import com.casic.missiles.exception.EngineException;
import com.casic.missiles.parser.resolver.combined.AbstractCombinedFieldProcessor;
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/ByteFieldParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/ByteFieldParser.java
index 4c02a81..e8506e7 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/ByteFieldParser.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/ByteFieldParser.java
@@ -1,10 +1,10 @@
package com.casic.missiles.parser.resolver.fields;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.casic.missiles.parser.resolver.GenericFiledRuleResolver;
import com.casic.missiles.pojo.FieldRuleConfig;
import io.netty.buffer.ByteBuf;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
import java.util.Map;
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/rule/RuleResolverCore.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/rule/RuleResolverCore.java
index 204b4dc..54b4e58 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/rule/RuleResolverCore.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/rule/RuleResolverCore.java
@@ -1,7 +1,7 @@
package com.casic.missiles.parser.rule;
import com.alibaba.fastjson.JSON;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import com.casic.missiles.pojo.RuleConfig;
import lombok.extern.slf4j.Slf4j;
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java
index 7c6350b..3d89d0d 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.casic.missiles.cache.ProtocolProcessEventListener;
import com.casic.missiles.parser.safe.SafeStrategy;
import com.casic.missiles.parser.sender.DataSubscribeProvider;
import com.casic.missiles.parser.sender.impl.KafkaSubscribe;
diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml
index 2bdfa0e..75e6e82 100644
--- a/casic-iot-common/pom.xml
+++ b/casic-iot-common/pom.xml
@@ -32,10 +32,10 @@
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
+
diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml
index 4797e3a..39bc3b2 100644
--- a/sensorhub-core/pom.xml
+++ b/sensorhub-core/pom.xml
@@ -20,14 +20,6 @@
4.5.7
-
-
- redis.clients
- jedis
- 3.1.0
- jar
-
-
com.casic
sensorhub-support
@@ -62,67 +54,14 @@
mybatis-plus-boot-starter
${mybatis-plus.version}
+
+
+ com.casic
+ casic-iot-service
+ ${iot.version}
+
+
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
- 2.4.5
-
- true
-
- com.casic.missiles.ServerApplication
- exec
-
-
-
-
- repackage
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
- 1.8
- 1.8
-
-
-
-
- org.apache.maven.plugins
- maven-war-plugin
-
-
- false
-
-
-
-
-
-
- src/main/resources
-
-
- /config/*/*
- /config/*-*.yml
-
- true
-
-
- src/main/resources
-
- **/*.xml
-
- true
-
-
-
-
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java b/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
index 9753109..40c55e8 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
@@ -1,30 +1,30 @@
-package com.casic.missiles;
-
-import com.casic.missiles.netty.SensorhubServer;
-import lombok.extern.slf4j.Slf4j;
-import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.CommandLineRunner;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cache.annotation.EnableCaching;
-
-
-@SpringBootApplication(scanBasePackages = "com.casic.missiles")
-@MapperScan(basePackages = {"com.casic.missiles.**.dao", "com.casic.missiles.**.mapper"})
-@EnableCaching //开启缓存
-@Slf4j
-public class ServerApplication implements CommandLineRunner {
-
- @Autowired
- private SensorhubServer nettyServer;
- public static void main(String[] args) {
- SpringApplication.run(ServerApplication.class, args);
- }
-
- @Override
- public void run(String... args) {
- this.nettyServer.startServer();
- }
-
-}
+//package com.casic.missiles;
+//
+//import com.casic.missiles.netty.SensorhubServer;
+//import lombok.extern.slf4j.Slf4j;
+//import org.mybatis.spring.annotation.MapperScan;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.boot.CommandLineRunner;
+//import org.springframework.boot.SpringApplication;
+//import org.springframework.boot.autoconfigure.SpringBootApplication;
+//import org.springframework.cache.annotation.EnableCaching;
+//
+//
+//@SpringBootApplication(scanBasePackages = "com.casic.missiles")
+//@MapperScan(basePackages = {"com.casic.missiles.**.dao", "com.casic.missiles.**.mapper"})
+//@EnableCaching //开启缓存
+//@Slf4j
+//public class ServerApplication implements CommandLineRunner {
+//
+// @Autowired
+// private SensorhubServer nettyServer;
+// public static void main(String[] args) {
+// SpringApplication.run(ServerApplication.class, args);
+// }
+//
+// @Override
+// public void run(String... args) {
+// this.nettyServer.startServer();
+// }
+//
+//}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java b/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java
deleted file mode 100644
index 624ed4f..0000000
--- a/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.casic.missiles.autoconfig;
-
-import com.casic.missiles.netty.SensorhubServer;
-import io.netty.bootstrap.ServerBootstrap;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * SensorhubServerAutoConfiguration 自动配置类
- */
-@Configuration
-@ConditionalOnProperty(
- prefix = "casic.sensorhub",
- name = "enable",
- havingValue = "true"
-)
-@EnableConfigurationProperties({SensorhubProperties.class})
-@ConditionalOnClass({ServerBootstrap.class})
-public class SensorhubServerAutoConfiguration {
-
- @Bean
- public SensorhubServer sensorhubServer(SensorhubProperties sensorhubProperties) throws Exception {
- return SensorhubServer.getInstance(sensorhubProperties);
- }
-
-}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
index e90de5a..dec5e4e 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
@@ -9,6 +9,8 @@
import java.util.concurrent.*;
/**
+ * @author cz
+ * @date 2023-11-24
* 异步任务调用
*/
public class AsynTaskHelper {
@@ -25,23 +27,25 @@
/**
* 设置线程池
+ *
* @param executorService 线程池
* @return
*/
- public AsynTaskHelper setExecutorService(ExecutorService executorService){
+ public AsynTaskHelper setExecutorService(ExecutorService executorService) {
completionService = new ExecutorCompletionService(executorService);
return this;
}
/**
* 添加任务,返回结果
+ *
* @param taskId
* @param task
* @return
*/
public AsynTaskHelper addTask(String taskId, Callable task) {
AsynTaskCallable callProxy = new AsynTaskCallable(taskId, task);
- if(null == tasks || tasks.isEmpty()){
+ if (null == tasks || tasks.isEmpty()) {
tasks = new ArrayList<>();
}
tasks.add(callProxy);
@@ -50,10 +54,11 @@
/**
* 提交任务
+ *
* @return
*/
- public AsynTaskHelper submit(){
- if(null != tasks && !tasks.isEmpty()){
+ public AsynTaskHelper submit() {
+ if (null != tasks && !tasks.isEmpty()) {
for (Callable callResult : tasks) {
completionService.submit(callResult);
}
@@ -63,7 +68,8 @@
/**
* 获取返回结果
- * @return Map K为任务Id
+ *
+ * @return Map K为任务Id
* @throws ExecutionException
* @throws InterruptedException
*/
@@ -73,22 +79,23 @@
/**
* 获取返回结果
+ *
* @param timeout
* @param unit
- * @return Map K为任务Id
+ * @return Map K为任务Id
* @throws InterruptedException
* @throws ExecutionException
*/
- public Map getResult(long timeout,@NotNull TimeUnit unit) throws InterruptedException, ExecutionException {
+ public Map getResult(long timeout, @NotNull TimeUnit unit) throws InterruptedException, ExecutionException {
Map result = new HashMap<>();
- if(null == tasks){
+ if (null == tasks) {
return result;
}
for (int i = 0; i < tasks.size(); i++) {
Future> poll = completionService.poll(timeout, unit);
- if(null != poll){
+ if (null != poll) {
TaskResult task = poll.get();
- if(null != poll && null != task){
+ if (null != poll && null != task) {
result.put(task.getTaskId(), task.getData());
}
}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
index 0401822..e03781c 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
@@ -7,14 +7,6 @@
public class GuavaCacheUtil {
- /**
- * 使用guava需要引入依赖
- *
- * com.google.guava
- * guava
- * 28.2-jre
- *
- */
private static Cache cache = CacheBuilder.newBuilder()
//10分钟后过期
.expireAfterWrite(10, TimeUnit.MINUTES)
@@ -27,8 +19,22 @@
return cache.getIfPresent(k);
}
+ /**
+ * 添加缓存
+ * @param k
+ * @param value
+ */
public static void putCache(String k, Object value) {
cache.put(k, value);
}
+ /**
+ * 删除缓存
+ *
+ * @param key
+ */
+ public static void remove(String key) {
+ cache.invalidate(key);
+ }
+
}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java
new file mode 100644
index 0000000..88baf61
--- /dev/null
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java
@@ -0,0 +1,174 @@
+package com.casic.missiles.cache;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSON;
+import com.casic.missiles.model.Device;
+import com.casic.missiles.model.DeviceData;
+import com.casic.missiles.pojo.ParseResult;
+import com.casic.missiles.pojo.ProcessEventTask;
+import com.casic.missiles.service.IDeviceDataService;
+import com.casic.missiles.service.impl.DeviceDataServiceImpl;
+import com.casic.missiles.util.SpringContextUtil;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 流程节点事件监听器
+ */
+public class ProtocolProcessEventListener {
+
+ private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 20, 100,
+ TimeUnit.SECONDS, new LinkedBlockingQueue<>(20));
+
+ /**
+ * 异步生成缓存
+ *
+ * @param processEventTask
+ */
+ public static void asynAddTask(ProcessEventTask processEventTask) {
+ if (StringUtils.isNotEmpty(processEventTask.getDevcode())) {
+ GuavaCacheUtil.putCache(processEventTask.getDevcode(), processEventTask);
+ }
+ }
+
+ /**
+ * 异步设置缓存
+ *
+ * @param key
+ * @param json
+ */
+ public static void setTask(String key, Object json, Integer node) {
+ //如果key为空,则直接返回
+ if (StringUtils.isEmpty(key) || ObjectUtil.isEmpty(json)) {
+ return;
+ }
+ ProcessEventTask processEventTask = null;
+ switch (node) {
+ //解密前的数据
+ case 1:
+ //如果为空可以补救
+// if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+// processEventTask = ProcessEventTask.builder()
+// .devcode(key)
+// .decryptSoureData((String) json)
+// .decryptBeforeData((String) json)
+// .build();
+// asynAddTask(processEventTask);
+// } else {
+// processEventTask.setDecryptBeforeData((String) json);
+// }
+// break;
+ //解密后的数据
+ case 2:
+ //如果为空,则源报文和解密报文为空,作为异常判断依据
+ if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+ processEventTask = ProcessEventTask.builder()
+ .devcode(key)
+ .decryptAfterData((String) json)
+ .build();
+ asynAddTask(processEventTask);
+ } else {
+ processEventTask.setDecryptAfterData((String) json);
+ }
+ break;
+ //解析的数据
+ case 3:
+ //如果为空,则源报文和解密报文为空,作为异常判断依据
+ if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+ processEventTask = ProcessEventTask.builder()
+ .devcode(key)
+ .bizDataList((List) json)
+ .build();
+ asynAddTask(processEventTask);
+ } else {
+ processEventTask.setBizDataList((List) json);
+ }
+ break;
+ case 4:
+ //如果为空,则源报文和解密报文为空,作为异常判断依据
+ if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+ processEventTask = ProcessEventTask.builder()
+ .devcode(key)
+ .exceptionMsg((String) json)
+ .build();
+ asynAddTask(processEventTask);
+ } else {
+ processEventTask.setExceptionMsg((String) json);
+ }
+ break;
+ default:
+ return;
+ }
+ }
+
+ /**
+ * 异步设置缓存
+ *
+ * @param key
+ */
+ public static ProcessEventTask getTask(String key) {
+ if (StringUtils.isEmpty(key)) {
+ return null;
+ }
+ return (ProcessEventTask) GuavaCacheUtil.getCache(key);
+ }
+
+ /**
+ * 存库操作
+ *
+ * @param devcode
+ */
+ public static void saveData(String devcode, ParseResult result) {
+ //添加到线程池执行,异步存库
+ threadPool.execute(
+ () -> {
+ ProcessEventTask processEventTask;
+ if (ObjectUtil.isNotEmpty(getTask(devcode))) {
+ synchronized (processEventTask = getTask(devcode)) {
+ IDeviceDataService deviceDataService = SpringContextUtil.getBean(DeviceDataServiceImpl.class);
+ if (ObjectUtil.isNotEmpty(processEventTask)) {
+ List deviceDataList = new ArrayList<>();
+ for (Map BizDataMap : processEventTask.getBizDataList()) {
+ DeviceData deviceData = new DeviceData();
+ deviceData.setDevcode(processEventTask.getDevcode());
+ deviceData.setDeviceType((Integer) BizDataMap.get("deviceType"));
+ deviceData.setUptime((String) BizDataMap.get("uptime"));
+ deviceData.setLogtime(new Date());
+ deviceData.setDataJson(JSON.toJSONString(BizDataMap));
+ deviceData.setDecryptBeforeData(processEventTask.getDecryptSoureData());
+ deviceData.setDecryptAfterData(processEventTask.getDecryptAfterData());
+ if (BizDataMap.containsKey("cell")) {
+ //电量不一定每次都有
+ deviceData.setCell((Integer) BizDataMap.get("cell"));
+ }
+ if (BizDataMap.containsKey("dataValue")) {
+ //电量不一定每次都有
+ deviceData.setDataValue((float) BizDataMap.get("dataValue"));
+ }
+ deviceData.setExceptionMsg(processEventTask.getExceptionMsg());
+ deviceDataList.add(deviceData);
+ }
+ //批量保存
+ deviceDataService.saveBatch(deviceDataList);
+ }
+ }
+ //移除缓存
+ GuavaCacheUtil.remove(devcode);
+ }
+ }
+ );
+ }
+
+ //暂时不做设备的更新
+ public void setDevice(String status) {
+ Device device = new Device();
+ }
+
+}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/listenerEvent.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/listenerEvent.java
deleted file mode 100644
index 2f9c711..0000000
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/listenerEvent.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.casic.missiles.cache;
-
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
-
-public class listenerEvent {
-
- private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 20, 100,
- TimeUnit.SECONDS, new LinkedBlockingQueue<>(20));
-
- /**
- * 异步生成缓存
- *
- * @param key
- * @param json
- */
- public void asynCreateLogCache(String key, String json) {
-
-
- }
-
-
-}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java
index 4e6beea..01b20f5 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java
@@ -2,7 +2,7 @@
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
-import com.casic.missiles.cache.GuavaCacheUtil;
+import com.casic.missiles.cache.ProtocolProcessEventListener;
import com.casic.missiles.enums.EngineExceptionEnum;
import com.casic.missiles.enums.ReplyCommandEnum;
import com.casic.missiles.exception.EngineException;
@@ -56,12 +56,16 @@
}
ParseResult result = null;
+ String devcode = null;
try {
//暂时先取第一个, 减少类的创建销毁与构建
AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig);
+ Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf);
+ devcode = (String) parseFixedDataMap.get("devcode");
// 通过协议工厂匹配,匹配规则,获取规则配置
- RuleConfig ruleConfig = getRuleConfig(protocolFactory, byteBuf);
+ RuleConfig ruleConfig = getRuleConfig(protocolFactory, parseFixedDataMap);
if (ObjectUtil.isEmpty(ruleConfig)) {
+ //打印源数据,设备编号
byteBuf.resetReaderIndex();
log.error("解析匹配失败,匹配帧信息为{}", ByteBufUtil.hexDump(byteBuf));
byteBuf.readBytes(protocolConfig.getPreFix().length());
@@ -94,10 +98,14 @@
}
//获取报文的业务内容
ByteBuf bizDataByteBuf = protocolFactory.getProtocolFieldConfigProvider().getDataContentBuf(intactMessageByte);
- log.debug("解析的密文是----------"+ByteBufUtil.hexDump(bizDataByteBuf));
+ //解密前的报文
+ log.debug("解析的密文是----------" + ByteBufUtil.hexDump(bizDataByteBuf));
+// ProtocolProcessEventListener.setTask(devcode, ByteBufUtil.hexDump(bizDataByteBuf), 1);
//密文解析
- ByteBuf clearZeroPlainBuf = datagramEventProvider.getSafeDatagram(bizDataByteBuf, protocolFactory.getProtocolFieldConfigProvider().getFixFieldConfigMap(),fieldLengthSupplier);
- log.debug("解析的明文是----------"+ByteBufUtil.hexDump(clearZeroPlainBuf));
+ ByteBuf clearZeroPlainBuf = datagramEventProvider.getSafeDatagram(bizDataByteBuf, protocolFactory.getProtocolFieldConfigProvider().getFixFieldConfigMap(), fieldLengthSupplier);
+ log.debug("解析的明文是----------" + ByteBufUtil.hexDump(clearZeroPlainBuf));
+ ProtocolProcessEventListener.setTask(devcode, ByteBufUtil.hexDump(clearZeroPlainBuf), 2);
+ //解密后报文
//解析组合业务字段
ruleConfigFactory.getCombinedFieldConfigProvider().parseDataField(ruleConfig, clearZeroPlainBuf,
ruleConfigFactory.getFieldConfigProvider().getFieldConfigsMap(), protocolConfig.getFieldRuleConfigMap());
@@ -112,16 +120,19 @@
for (AbstractReplyCommandPostProcessing replyCommandPostProcessing : replyCommandPostProcessings) {
result = replyCommandPostProcessing.obtainReplyCommand(bizDataMap, result, ruleConfigFactory, protocolFactory);
}
- //数据发送,异步
+ ProtocolProcessEventListener.setTask(devcode, bizDataMap, 3);
+ //存储数据
datagramEventProvider.storeData(bizDataMap);
} catch (RuntimeException rex) {
log.error("解析出现异常,异常信息为{}", rex);
- result=null;
+ //数据发送,异步,异常拦截
+ ProtocolProcessEventListener.setTask(devcode, rex.getMessage(), 4);
+ result = null;
frozenInvalidByteBuf(byteBuf, protocolConfig);
LeadingCodeMatcher.rematch(byteBuf, protocolConfigProvider.getMatchList());
- }finally {
-// GuavaCacheUtil.putCache("licValid",validLicResult);
-// ValidateResult validLicResult = (ValidateResult) GuavaCacheUtil.getCache("licValid");
+ } finally {
+ //数据发送,异步,转存整体数据
+ ProtocolProcessEventListener.saveData(devcode, result);
return result;
}
}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/ProtocolParserSupport.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/ProtocolParserSupport.java
index 8af55a6..e4a79ae 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/ProtocolParserSupport.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/ProtocolParserSupport.java
@@ -1,10 +1,13 @@
package com.casic.missiles.parser;
+import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.cache.ProtocolProcessEventListener;
import com.casic.missiles.factory.AbstractProtocolConfigFactory;
import com.casic.missiles.factory.AbstractRuleConfigFactory;
import com.casic.missiles.parser.processor.AbstractPostFieldProcessor;
+import com.casic.missiles.pojo.ProcessEventTask;
import com.casic.missiles.pojo.ProtocolConfig;
import com.casic.missiles.pojo.ProtocolFieldConfig;
import com.casic.missiles.pojo.RuleConfig;
@@ -12,6 +15,7 @@
import com.casic.missiles.provider.RuleConfigProvider;
import com.casic.missiles.util.ClazzUtil;
import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils;
@@ -25,10 +29,28 @@
public class ProtocolParserSupport {
+ protected Map getParseFixedDataMap(AbstractProtocolConfigFactory protocolFactory, ByteBuf wholeDatagramByte) {
+ ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider();
+ RuleConfigProvider ruleConfigProvider = protocolFactory.getRuleConfigProvider();
+ ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig();
+ if (ObjectUtils.isEmpty(protocolFieldConfigProvider)
+ || ObjectUtils.isEmpty(ruleConfigProvider) || ObjectUtils.isEmpty(protocolConfig)) {
+ return null;
+ }
+ Map parseFixedDataMap = protocolFieldConfigProvider.getProtocolDataMap(wholeDatagramByte, protocolConfig.getFieldRuleConfigMap());
+ //打印源数据,设备编号
+ ProcessEventTask processEventTask = ProcessEventTask.builder()
+ .devcode((String) parseFixedDataMap.get("devcode"))
+ .decryptSoureData(ByteBufUtil.hexDump(wholeDatagramByte))
+ .build();
+ ProtocolProcessEventListener.asynAddTask(processEventTask);
+ return parseFixedDataMap;
+ }
+
/**
* 获取规则配置,执行规则匹配
*/
- protected RuleConfig getRuleConfig(AbstractProtocolConfigFactory protocolFactory, ByteBuf wholeDatagramByte) {
+ protected RuleConfig getRuleConfig(AbstractProtocolConfigFactory protocolFactory, Map parseFixedDataMap) {
//取出其中参与逻辑provider并判空
ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider();
RuleConfigProvider ruleConfigProvider = protocolFactory.getRuleConfigProvider();
@@ -39,10 +61,8 @@
}
String rulePrepareFields = protocolConfig.getRulePrepareFields();
//固定字段
- if (StringUtils.isNotEmpty(rulePrepareFields)) {
- //获取统一固定字段解析
- Map parseFixedDataMap = protocolFieldConfigProvider.getProtocolDataMap(wholeDatagramByte, protocolConfig.getFieldRuleConfigMap());
- log.debug("协议字段内容为" + JSON.toJSONString(parseFixedDataMap) );
+ if (StringUtils.isNotEmpty(rulePrepareFields) && ObjectUtil.isNotEmpty(parseFixedDataMap)) {
+ log.debug("协议字段内容为" + JSON.toJSONString(parseFixedDataMap));
//获取该协议的字段配置,用于协议规则匹配
List protocolFieldConfigs = protocolFieldConfigProvider.getProtocolFieldConfigs();
//获取规则
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java
index b162def..9c413ed 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java
@@ -1,13 +1,13 @@
package com.casic.missiles.parser.matcher;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.casic.missiles.enums.FrameStructEnum;
import com.casic.missiles.provider.ProtocolConfigProvider;
import com.casic.missiles.pojo.CombinedFieldConfig;
import com.casic.missiles.pojo.ProtocolConfig;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufUtil;
+import org.apache.commons.lang3.StringUtils;
import java.util.*;
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/PreBizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/PreBizFieldParseProcessor.java
index 8eb0682..23d1e4c 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/PreBizFieldParseProcessor.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/PreBizFieldParseProcessor.java
@@ -2,7 +2,7 @@
import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import com.casic.missiles.enums.EngineExceptionEnum;
import com.casic.missiles.exception.EngineException;
import com.casic.missiles.parser.resolver.combined.AbstractCombinedFieldProcessor;
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/ByteFieldParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/ByteFieldParser.java
index 4c02a81..e8506e7 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/ByteFieldParser.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/ByteFieldParser.java
@@ -1,10 +1,10 @@
package com.casic.missiles.parser.resolver.fields;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.casic.missiles.parser.resolver.GenericFiledRuleResolver;
import com.casic.missiles.pojo.FieldRuleConfig;
import io.netty.buffer.ByteBuf;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
import java.util.Map;
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/rule/RuleResolverCore.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/rule/RuleResolverCore.java
index 204b4dc..54b4e58 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/rule/RuleResolverCore.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/rule/RuleResolverCore.java
@@ -1,7 +1,7 @@
package com.casic.missiles.parser.rule;
import com.alibaba.fastjson.JSON;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import com.casic.missiles.pojo.RuleConfig;
import lombok.extern.slf4j.Slf4j;
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java
index 7c6350b..3d89d0d 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.casic.missiles.cache.ProtocolProcessEventListener;
import com.casic.missiles.parser.safe.SafeStrategy;
import com.casic.missiles.parser.sender.DataSubscribeProvider;
import com.casic.missiles.parser.sender.impl.KafkaSubscribe;
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProtocolFieldConfigProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProtocolFieldConfigProvider.java
index 68aca0e..81644ea 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProtocolFieldConfigProvider.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProtocolFieldConfigProvider.java
@@ -3,7 +3,7 @@
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import com.casic.missiles.enums.FrameStructEnum;
import com.casic.missiles.parser.resolver.FieldParser;
import com.casic.missiles.parser.resolver.fields.DefaultProtocolFieldParser;
@@ -271,7 +271,7 @@
if (showSkip()) {
return null;
}
- //获取缓存
+ //缓存命中
if (this.singleObjects.containsKey(FIXED_FIELD_DS)) {
return (Map) singleObjects.get(FIXED_FIELD_DS);
}
diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml
index 2bdfa0e..75e6e82 100644
--- a/casic-iot-common/pom.xml
+++ b/casic-iot-common/pom.xml
@@ -32,10 +32,10 @@
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List
+
diff --git a/sensorhub-core/pom.xml b/sensorhub-core/pom.xml
index 4797e3a..39bc3b2 100644
--- a/sensorhub-core/pom.xml
+++ b/sensorhub-core/pom.xml
@@ -20,14 +20,6 @@
4.5.7
-
-
- redis.clients
- jedis
- 3.1.0
- jar
-
-
com.casic
sensorhub-support
@@ -62,67 +54,14 @@
mybatis-plus-boot-starter
${mybatis-plus.version}
+
+
+ com.casic
+ casic-iot-service
+ ${iot.version}
+
+
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
- 2.4.5
-
- true
-
- com.casic.missiles.ServerApplication
- exec
-
-
-
-
- repackage
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
- 1.8
- 1.8
-
-
-
-
- org.apache.maven.plugins
- maven-war-plugin
-
-
- false
-
-
-
-
-
-
- src/main/resources
-
-
- /config/*/*
- /config/*-*.yml
-
- true
-
-
- src/main/resources
-
- **/*.xml
-
- true
-
-
-
-
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java b/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
index 9753109..40c55e8 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/ServerApplication.java
@@ -1,30 +1,30 @@
-package com.casic.missiles;
-
-import com.casic.missiles.netty.SensorhubServer;
-import lombok.extern.slf4j.Slf4j;
-import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.CommandLineRunner;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cache.annotation.EnableCaching;
-
-
-@SpringBootApplication(scanBasePackages = "com.casic.missiles")
-@MapperScan(basePackages = {"com.casic.missiles.**.dao", "com.casic.missiles.**.mapper"})
-@EnableCaching //开启缓存
-@Slf4j
-public class ServerApplication implements CommandLineRunner {
-
- @Autowired
- private SensorhubServer nettyServer;
- public static void main(String[] args) {
- SpringApplication.run(ServerApplication.class, args);
- }
-
- @Override
- public void run(String... args) {
- this.nettyServer.startServer();
- }
-
-}
+//package com.casic.missiles;
+//
+//import com.casic.missiles.netty.SensorhubServer;
+//import lombok.extern.slf4j.Slf4j;
+//import org.mybatis.spring.annotation.MapperScan;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.boot.CommandLineRunner;
+//import org.springframework.boot.SpringApplication;
+//import org.springframework.boot.autoconfigure.SpringBootApplication;
+//import org.springframework.cache.annotation.EnableCaching;
+//
+//
+//@SpringBootApplication(scanBasePackages = "com.casic.missiles")
+//@MapperScan(basePackages = {"com.casic.missiles.**.dao", "com.casic.missiles.**.mapper"})
+//@EnableCaching //开启缓存
+//@Slf4j
+//public class ServerApplication implements CommandLineRunner {
+//
+// @Autowired
+// private SensorhubServer nettyServer;
+// public static void main(String[] args) {
+// SpringApplication.run(ServerApplication.class, args);
+// }
+//
+// @Override
+// public void run(String... args) {
+// this.nettyServer.startServer();
+// }
+//
+//}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java b/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java
deleted file mode 100644
index 624ed4f..0000000
--- a/sensorhub-core/src/main/java/com/casic/missiles/autoconfig/SensorhubServerAutoConfiguration.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.casic.missiles.autoconfig;
-
-import com.casic.missiles.netty.SensorhubServer;
-import io.netty.bootstrap.ServerBootstrap;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * SensorhubServerAutoConfiguration 自动配置类
- */
-@Configuration
-@ConditionalOnProperty(
- prefix = "casic.sensorhub",
- name = "enable",
- havingValue = "true"
-)
-@EnableConfigurationProperties({SensorhubProperties.class})
-@ConditionalOnClass({ServerBootstrap.class})
-public class SensorhubServerAutoConfiguration {
-
- @Bean
- public SensorhubServer sensorhubServer(SensorhubProperties sensorhubProperties) throws Exception {
- return SensorhubServer.getInstance(sensorhubProperties);
- }
-
-}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
index e90de5a..dec5e4e 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/AsynTaskHelper.java
@@ -9,6 +9,8 @@
import java.util.concurrent.*;
/**
+ * @author cz
+ * @date 2023-11-24
* 异步任务调用
*/
public class AsynTaskHelper {
@@ -25,23 +27,25 @@
/**
* 设置线程池
+ *
* @param executorService 线程池
* @return
*/
- public AsynTaskHelper setExecutorService(ExecutorService executorService){
+ public AsynTaskHelper setExecutorService(ExecutorService executorService) {
completionService = new ExecutorCompletionService(executorService);
return this;
}
/**
* 添加任务,返回结果
+ *
* @param taskId
* @param task
* @return
*/
public AsynTaskHelper addTask(String taskId, Callable task) {
AsynTaskCallable callProxy = new AsynTaskCallable(taskId, task);
- if(null == tasks || tasks.isEmpty()){
+ if (null == tasks || tasks.isEmpty()) {
tasks = new ArrayList<>();
}
tasks.add(callProxy);
@@ -50,10 +54,11 @@
/**
* 提交任务
+ *
* @return
*/
- public AsynTaskHelper submit(){
- if(null != tasks && !tasks.isEmpty()){
+ public AsynTaskHelper submit() {
+ if (null != tasks && !tasks.isEmpty()) {
for (Callable callResult : tasks) {
completionService.submit(callResult);
}
@@ -63,7 +68,8 @@
/**
* 获取返回结果
- * @return Map K为任务Id
+ *
+ * @return Map K为任务Id
* @throws ExecutionException
* @throws InterruptedException
*/
@@ -73,22 +79,23 @@
/**
* 获取返回结果
+ *
* @param timeout
* @param unit
- * @return Map K为任务Id
+ * @return Map K为任务Id
* @throws InterruptedException
* @throws ExecutionException
*/
- public Map getResult(long timeout,@NotNull TimeUnit unit) throws InterruptedException, ExecutionException {
+ public Map getResult(long timeout, @NotNull TimeUnit unit) throws InterruptedException, ExecutionException {
Map result = new HashMap<>();
- if(null == tasks){
+ if (null == tasks) {
return result;
}
for (int i = 0; i < tasks.size(); i++) {
Future> poll = completionService.poll(timeout, unit);
- if(null != poll){
+ if (null != poll) {
TaskResult task = poll.get();
- if(null != poll && null != task){
+ if (null != poll && null != task) {
result.put(task.getTaskId(), task.getData());
}
}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
index 0401822..e03781c 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/GuavaCacheUtil.java
@@ -7,14 +7,6 @@
public class GuavaCacheUtil {
- /**
- * 使用guava需要引入依赖
- *
- * com.google.guava
- * guava
- * 28.2-jre
- *
- */
private static Cache cache = CacheBuilder.newBuilder()
//10分钟后过期
.expireAfterWrite(10, TimeUnit.MINUTES)
@@ -27,8 +19,22 @@
return cache.getIfPresent(k);
}
+ /**
+ * 添加缓存
+ * @param k
+ * @param value
+ */
public static void putCache(String k, Object value) {
cache.put(k, value);
}
+ /**
+ * 删除缓存
+ *
+ * @param key
+ */
+ public static void remove(String key) {
+ cache.invalidate(key);
+ }
+
}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java
new file mode 100644
index 0000000..88baf61
--- /dev/null
+++ b/sensorhub-core/src/main/java/com/casic/missiles/cache/ProtocolProcessEventListener.java
@@ -0,0 +1,174 @@
+package com.casic.missiles.cache;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSON;
+import com.casic.missiles.model.Device;
+import com.casic.missiles.model.DeviceData;
+import com.casic.missiles.pojo.ParseResult;
+import com.casic.missiles.pojo.ProcessEventTask;
+import com.casic.missiles.service.IDeviceDataService;
+import com.casic.missiles.service.impl.DeviceDataServiceImpl;
+import com.casic.missiles.util.SpringContextUtil;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 流程节点事件监听器
+ */
+public class ProtocolProcessEventListener {
+
+ private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 20, 100,
+ TimeUnit.SECONDS, new LinkedBlockingQueue<>(20));
+
+ /**
+ * 异步生成缓存
+ *
+ * @param processEventTask
+ */
+ public static void asynAddTask(ProcessEventTask processEventTask) {
+ if (StringUtils.isNotEmpty(processEventTask.getDevcode())) {
+ GuavaCacheUtil.putCache(processEventTask.getDevcode(), processEventTask);
+ }
+ }
+
+ /**
+ * 异步设置缓存
+ *
+ * @param key
+ * @param json
+ */
+ public static void setTask(String key, Object json, Integer node) {
+ //如果key为空,则直接返回
+ if (StringUtils.isEmpty(key) || ObjectUtil.isEmpty(json)) {
+ return;
+ }
+ ProcessEventTask processEventTask = null;
+ switch (node) {
+ //解密前的数据
+ case 1:
+ //如果为空可以补救
+// if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+// processEventTask = ProcessEventTask.builder()
+// .devcode(key)
+// .decryptSoureData((String) json)
+// .decryptBeforeData((String) json)
+// .build();
+// asynAddTask(processEventTask);
+// } else {
+// processEventTask.setDecryptBeforeData((String) json);
+// }
+// break;
+ //解密后的数据
+ case 2:
+ //如果为空,则源报文和解密报文为空,作为异常判断依据
+ if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+ processEventTask = ProcessEventTask.builder()
+ .devcode(key)
+ .decryptAfterData((String) json)
+ .build();
+ asynAddTask(processEventTask);
+ } else {
+ processEventTask.setDecryptAfterData((String) json);
+ }
+ break;
+ //解析的数据
+ case 3:
+ //如果为空,则源报文和解密报文为空,作为异常判断依据
+ if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+ processEventTask = ProcessEventTask.builder()
+ .devcode(key)
+ .bizDataList((List) json)
+ .build();
+ asynAddTask(processEventTask);
+ } else {
+ processEventTask.setBizDataList((List) json);
+ }
+ break;
+ case 4:
+ //如果为空,则源报文和解密报文为空,作为异常判断依据
+ if (ObjectUtil.isEmpty(processEventTask = (ProcessEventTask) GuavaCacheUtil.getCache(key))) {
+ processEventTask = ProcessEventTask.builder()
+ .devcode(key)
+ .exceptionMsg((String) json)
+ .build();
+ asynAddTask(processEventTask);
+ } else {
+ processEventTask.setExceptionMsg((String) json);
+ }
+ break;
+ default:
+ return;
+ }
+ }
+
+ /**
+ * 异步设置缓存
+ *
+ * @param key
+ */
+ public static ProcessEventTask getTask(String key) {
+ if (StringUtils.isEmpty(key)) {
+ return null;
+ }
+ return (ProcessEventTask) GuavaCacheUtil.getCache(key);
+ }
+
+ /**
+ * 存库操作
+ *
+ * @param devcode
+ */
+ public static void saveData(String devcode, ParseResult result) {
+ //添加到线程池执行,异步存库
+ threadPool.execute(
+ () -> {
+ ProcessEventTask processEventTask;
+ if (ObjectUtil.isNotEmpty(getTask(devcode))) {
+ synchronized (processEventTask = getTask(devcode)) {
+ IDeviceDataService deviceDataService = SpringContextUtil.getBean(DeviceDataServiceImpl.class);
+ if (ObjectUtil.isNotEmpty(processEventTask)) {
+ List deviceDataList = new ArrayList<>();
+ for (Map BizDataMap : processEventTask.getBizDataList()) {
+ DeviceData deviceData = new DeviceData();
+ deviceData.setDevcode(processEventTask.getDevcode());
+ deviceData.setDeviceType((Integer) BizDataMap.get("deviceType"));
+ deviceData.setUptime((String) BizDataMap.get("uptime"));
+ deviceData.setLogtime(new Date());
+ deviceData.setDataJson(JSON.toJSONString(BizDataMap));
+ deviceData.setDecryptBeforeData(processEventTask.getDecryptSoureData());
+ deviceData.setDecryptAfterData(processEventTask.getDecryptAfterData());
+ if (BizDataMap.containsKey("cell")) {
+ //电量不一定每次都有
+ deviceData.setCell((Integer) BizDataMap.get("cell"));
+ }
+ if (BizDataMap.containsKey("dataValue")) {
+ //电量不一定每次都有
+ deviceData.setDataValue((float) BizDataMap.get("dataValue"));
+ }
+ deviceData.setExceptionMsg(processEventTask.getExceptionMsg());
+ deviceDataList.add(deviceData);
+ }
+ //批量保存
+ deviceDataService.saveBatch(deviceDataList);
+ }
+ }
+ //移除缓存
+ GuavaCacheUtil.remove(devcode);
+ }
+ }
+ );
+ }
+
+ //暂时不做设备的更新
+ public void setDevice(String status) {
+ Device device = new Device();
+ }
+
+}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/cache/listenerEvent.java b/sensorhub-core/src/main/java/com/casic/missiles/cache/listenerEvent.java
deleted file mode 100644
index 2f9c711..0000000
--- a/sensorhub-core/src/main/java/com/casic/missiles/cache/listenerEvent.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.casic.missiles.cache;
-
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
-
-public class listenerEvent {
-
- private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 20, 100,
- TimeUnit.SECONDS, new LinkedBlockingQueue<>(20));
-
- /**
- * 异步生成缓存
- *
- * @param key
- * @param json
- */
- public void asynCreateLogCache(String key, String json) {
-
-
- }
-
-
-}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java
index 4e6beea..01b20f5 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java
@@ -2,7 +2,7 @@
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
-import com.casic.missiles.cache.GuavaCacheUtil;
+import com.casic.missiles.cache.ProtocolProcessEventListener;
import com.casic.missiles.enums.EngineExceptionEnum;
import com.casic.missiles.enums.ReplyCommandEnum;
import com.casic.missiles.exception.EngineException;
@@ -56,12 +56,16 @@
}
ParseResult result = null;
+ String devcode = null;
try {
//暂时先取第一个, 减少类的创建销毁与构建
AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig);
+ Map parseFixedDataMap = getParseFixedDataMap(protocolFactory, byteBuf);
+ devcode = (String) parseFixedDataMap.get("devcode");
// 通过协议工厂匹配,匹配规则,获取规则配置
- RuleConfig ruleConfig = getRuleConfig(protocolFactory, byteBuf);
+ RuleConfig ruleConfig = getRuleConfig(protocolFactory, parseFixedDataMap);
if (ObjectUtil.isEmpty(ruleConfig)) {
+ //打印源数据,设备编号
byteBuf.resetReaderIndex();
log.error("解析匹配失败,匹配帧信息为{}", ByteBufUtil.hexDump(byteBuf));
byteBuf.readBytes(protocolConfig.getPreFix().length());
@@ -94,10 +98,14 @@
}
//获取报文的业务内容
ByteBuf bizDataByteBuf = protocolFactory.getProtocolFieldConfigProvider().getDataContentBuf(intactMessageByte);
- log.debug("解析的密文是----------"+ByteBufUtil.hexDump(bizDataByteBuf));
+ //解密前的报文
+ log.debug("解析的密文是----------" + ByteBufUtil.hexDump(bizDataByteBuf));
+// ProtocolProcessEventListener.setTask(devcode, ByteBufUtil.hexDump(bizDataByteBuf), 1);
//密文解析
- ByteBuf clearZeroPlainBuf = datagramEventProvider.getSafeDatagram(bizDataByteBuf, protocolFactory.getProtocolFieldConfigProvider().getFixFieldConfigMap(),fieldLengthSupplier);
- log.debug("解析的明文是----------"+ByteBufUtil.hexDump(clearZeroPlainBuf));
+ ByteBuf clearZeroPlainBuf = datagramEventProvider.getSafeDatagram(bizDataByteBuf, protocolFactory.getProtocolFieldConfigProvider().getFixFieldConfigMap(), fieldLengthSupplier);
+ log.debug("解析的明文是----------" + ByteBufUtil.hexDump(clearZeroPlainBuf));
+ ProtocolProcessEventListener.setTask(devcode, ByteBufUtil.hexDump(clearZeroPlainBuf), 2);
+ //解密后报文
//解析组合业务字段
ruleConfigFactory.getCombinedFieldConfigProvider().parseDataField(ruleConfig, clearZeroPlainBuf,
ruleConfigFactory.getFieldConfigProvider().getFieldConfigsMap(), protocolConfig.getFieldRuleConfigMap());
@@ -112,16 +120,19 @@
for (AbstractReplyCommandPostProcessing replyCommandPostProcessing : replyCommandPostProcessings) {
result = replyCommandPostProcessing.obtainReplyCommand(bizDataMap, result, ruleConfigFactory, protocolFactory);
}
- //数据发送,异步
+ ProtocolProcessEventListener.setTask(devcode, bizDataMap, 3);
+ //存储数据
datagramEventProvider.storeData(bizDataMap);
} catch (RuntimeException rex) {
log.error("解析出现异常,异常信息为{}", rex);
- result=null;
+ //数据发送,异步,异常拦截
+ ProtocolProcessEventListener.setTask(devcode, rex.getMessage(), 4);
+ result = null;
frozenInvalidByteBuf(byteBuf, protocolConfig);
LeadingCodeMatcher.rematch(byteBuf, protocolConfigProvider.getMatchList());
- }finally {
-// GuavaCacheUtil.putCache("licValid",validLicResult);
-// ValidateResult validLicResult = (ValidateResult) GuavaCacheUtil.getCache("licValid");
+ } finally {
+ //数据发送,异步,转存整体数据
+ ProtocolProcessEventListener.saveData(devcode, result);
return result;
}
}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/ProtocolParserSupport.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/ProtocolParserSupport.java
index 8af55a6..e4a79ae 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/ProtocolParserSupport.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/ProtocolParserSupport.java
@@ -1,10 +1,13 @@
package com.casic.missiles.parser;
+import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
+import com.casic.missiles.cache.ProtocolProcessEventListener;
import com.casic.missiles.factory.AbstractProtocolConfigFactory;
import com.casic.missiles.factory.AbstractRuleConfigFactory;
import com.casic.missiles.parser.processor.AbstractPostFieldProcessor;
+import com.casic.missiles.pojo.ProcessEventTask;
import com.casic.missiles.pojo.ProtocolConfig;
import com.casic.missiles.pojo.ProtocolFieldConfig;
import com.casic.missiles.pojo.RuleConfig;
@@ -12,6 +15,7 @@
import com.casic.missiles.provider.RuleConfigProvider;
import com.casic.missiles.util.ClazzUtil;
import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils;
@@ -25,10 +29,28 @@
public class ProtocolParserSupport {
+ protected Map getParseFixedDataMap(AbstractProtocolConfigFactory protocolFactory, ByteBuf wholeDatagramByte) {
+ ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider();
+ RuleConfigProvider ruleConfigProvider = protocolFactory.getRuleConfigProvider();
+ ProtocolConfig protocolConfig = protocolFactory.getProtocolConfigProvider().getCurrentProtocolConfig();
+ if (ObjectUtils.isEmpty(protocolFieldConfigProvider)
+ || ObjectUtils.isEmpty(ruleConfigProvider) || ObjectUtils.isEmpty(protocolConfig)) {
+ return null;
+ }
+ Map parseFixedDataMap = protocolFieldConfigProvider.getProtocolDataMap(wholeDatagramByte, protocolConfig.getFieldRuleConfigMap());
+ //打印源数据,设备编号
+ ProcessEventTask processEventTask = ProcessEventTask.builder()
+ .devcode((String) parseFixedDataMap.get("devcode"))
+ .decryptSoureData(ByteBufUtil.hexDump(wholeDatagramByte))
+ .build();
+ ProtocolProcessEventListener.asynAddTask(processEventTask);
+ return parseFixedDataMap;
+ }
+
/**
* 获取规则配置,执行规则匹配
*/
- protected RuleConfig getRuleConfig(AbstractProtocolConfigFactory protocolFactory, ByteBuf wholeDatagramByte) {
+ protected RuleConfig getRuleConfig(AbstractProtocolConfigFactory protocolFactory, Map parseFixedDataMap) {
//取出其中参与逻辑provider并判空
ProtocolFieldConfigProvider protocolFieldConfigProvider = protocolFactory.getProtocolFieldConfigProvider();
RuleConfigProvider ruleConfigProvider = protocolFactory.getRuleConfigProvider();
@@ -39,10 +61,8 @@
}
String rulePrepareFields = protocolConfig.getRulePrepareFields();
//固定字段
- if (StringUtils.isNotEmpty(rulePrepareFields)) {
- //获取统一固定字段解析
- Map parseFixedDataMap = protocolFieldConfigProvider.getProtocolDataMap(wholeDatagramByte, protocolConfig.getFieldRuleConfigMap());
- log.debug("协议字段内容为" + JSON.toJSONString(parseFixedDataMap) );
+ if (StringUtils.isNotEmpty(rulePrepareFields) && ObjectUtil.isNotEmpty(parseFixedDataMap)) {
+ log.debug("协议字段内容为" + JSON.toJSONString(parseFixedDataMap));
//获取该协议的字段配置,用于协议规则匹配
List protocolFieldConfigs = protocolFieldConfigProvider.getProtocolFieldConfigs();
//获取规则
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java
index b162def..9c413ed 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java
@@ -1,13 +1,13 @@
package com.casic.missiles.parser.matcher;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.casic.missiles.enums.FrameStructEnum;
import com.casic.missiles.provider.ProtocolConfigProvider;
import com.casic.missiles.pojo.CombinedFieldConfig;
import com.casic.missiles.pojo.ProtocolConfig;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufUtil;
+import org.apache.commons.lang3.StringUtils;
import java.util.*;
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/PreBizFieldParseProcessor.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/PreBizFieldParseProcessor.java
index 8eb0682..23d1e4c 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/PreBizFieldParseProcessor.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/combined/impl/PreBizFieldParseProcessor.java
@@ -2,7 +2,7 @@
import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import com.casic.missiles.enums.EngineExceptionEnum;
import com.casic.missiles.exception.EngineException;
import com.casic.missiles.parser.resolver.combined.AbstractCombinedFieldProcessor;
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/ByteFieldParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/ByteFieldParser.java
index 4c02a81..e8506e7 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/ByteFieldParser.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/resolver/fields/ByteFieldParser.java
@@ -1,10 +1,10 @@
package com.casic.missiles.parser.resolver.fields;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.casic.missiles.parser.resolver.GenericFiledRuleResolver;
import com.casic.missiles.pojo.FieldRuleConfig;
import io.netty.buffer.ByteBuf;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
import java.util.Map;
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/rule/RuleResolverCore.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/rule/RuleResolverCore.java
index 204b4dc..54b4e58 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/parser/rule/RuleResolverCore.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/rule/RuleResolverCore.java
@@ -1,7 +1,7 @@
package com.casic.missiles.parser.rule;
import com.alibaba.fastjson.JSON;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import com.casic.missiles.pojo.RuleConfig;
import lombok.extern.slf4j.Slf4j;
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java
index 7c6350b..3d89d0d 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProcessorInstanceProvider.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.casic.missiles.cache.ProtocolProcessEventListener;
import com.casic.missiles.parser.safe.SafeStrategy;
import com.casic.missiles.parser.sender.DataSubscribeProvider;
import com.casic.missiles.parser.sender.impl.KafkaSubscribe;
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProtocolFieldConfigProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProtocolFieldConfigProvider.java
index 68aca0e..81644ea 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/provider/ProtocolFieldConfigProvider.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/provider/ProtocolFieldConfigProvider.java
@@ -3,7 +3,7 @@
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import com.casic.missiles.enums.FrameStructEnum;
import com.casic.missiles.parser.resolver.FieldParser;
import com.casic.missiles.parser.resolver.fields.DefaultProtocolFieldParser;
@@ -271,7 +271,7 @@
if (showSkip()) {
return null;
}
- //获取缓存
+ //缓存命中
if (this.singleObjects.containsKey(FIXED_FIELD_DS)) {
return (Map) singleObjects.get(FIXED_FIELD_DS);
}
diff --git a/sensorhub-core/src/main/java/com/casic/missiles/provider/UpgradeFileProvider.java b/sensorhub-core/src/main/java/com/casic/missiles/provider/UpgradeFileProvider.java
index 0523447..9dc64f1 100644
--- a/sensorhub-core/src/main/java/com/casic/missiles/provider/UpgradeFileProvider.java
+++ b/sensorhub-core/src/main/java/com/casic/missiles/provider/UpgradeFileProvider.java
@@ -1,7 +1,7 @@
package com.casic.missiles.provider;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import com.casic.missiles.enums.FileNameEnums;
import com.casic.missiles.parser.crc.CRC16;
import com.casic.missiles.pojo.UpgradeFileResult;
diff --git a/casic-iot-common/pom.xml b/casic-iot-common/pom.xml
index 2bdfa0e..75e6e82 100644
--- a/casic-iot-common/pom.xml
+++ b/casic-iot-common/pom.xml
@@ -32,10 +32,10 @@
- com.casic
- casic-core
- ${core.version}
-
+ com.casic
+ casic-core
+ ${core.version}
+
com.casic
casic-admin-support
diff --git a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
index beb153c..30beef4 100644
--- a/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/BusConfigMapper.xml
@@ -18,7 +18,7 @@
id, Pid, devcode, config_json, status, update_time, create_time, create_user_id
-
+
diff --git a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
index 528a74b..b124015 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceDataMapper.xml
@@ -15,6 +15,18 @@
+
+ ${paramStr}
+
+
+
+ TO_TIMESTAMP(${paramStr},'yyyy-MM-dd hh24:mi:ss')::timestamp without time zone
+
+
+
+ TO_DATE(${paramStr},'yyyy-mm-dd hh24:mi')
+
+
id, devcode, device_type, cell, data_json, decrypt_before_data, decrypt_after_data, uptime, logtime
@@ -28,30 +40,43 @@
SELECT
FROM device_data
WHERE 1=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
+
+ AND uptime = ]]>
+
+
+
+
+
+ AND uptime
+
+
+
+
and id in
#{id}
+
)dd
JOIN (
SELECT id,group_id
FROM device
WHERE valid=1
-
+
AND devcode like CONCAT('%',#{request.devcode},'%')
-
+
AND device_type =#{request.deviceType}
-
+
AND greoup_id=#{request.groupId}
)d ON d.devcode=dd.devcode
@@ -59,11 +84,11 @@
SELECT deptid,id,group_name
FROM device_group
WHERE valid=1
-
+
AND id=#{request.groupId}
) dg ON dg.id=dd.group_id
-
+ order by logtime desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
index 1475a8b..93cec97 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceGroupMapper.xml
@@ -80,6 +80,7 @@
FROM subscribe_store
) s ON s.groupId = dg.id
GROUP BY dg.id
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
index 7006b62..0b308f2 100644
--- a/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/DeviceMapper.xml
@@ -75,6 +75,7 @@
FROM device_data
GROUP BY devcode,data_value,cell
)dd ON dd.devcode=d.devcode
+ order by create_time desc
diff --git a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
index 82a394a..2f96661 100644
--- a/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
+++ b/casic-iot-dao/src/resource/mapper/SubscribeStoreMapper.xml
@@ -4,17 +4,17 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -23,36 +23,38 @@
- SELECT device_type AS "deviceType",create_time AS "createTime",devcode,uptime,
- data_value AS "dataValue",model,imei,cell
+ SELECT message_type AS "messageType",create_time AS "createTime",subscribe_no AS
+ "subscribeNo",subscribe_content_json AS "subscribeContentJson",
+ subscribe_status AS "subscribeStatus",create_user_name AS "createUserName"
FROM (
- SELECT *
- FROM subscribe_store
- WHERE 1=1
-
- AND group_id =#{request.groupId}
-
-
- AND message_type =#{request.messageType}
-
-
- AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
-
-
- AND subscribe_type =#{request.subscribeType}
-
-
- AND subscribe_status =#{request.status}
-
- order by create_time desc
+ SELECT *
+ FROM subscribe_store
+ WHERE 1=1
+
+ AND group_id =#{request.groupId}
+
+
+ AND message_type =#{request.messageType}
+
+
+ AND subscribe_no like CONCAT('%',#{request.subscribeNo},'%')
+
+
+ AND subscribe_type =#{request.subscribeType}
+
+
+ AND subscribe_status =#{request.status}
+
+ order by create_time desc
)d JOIN (
- SELECT deptid,id
- FROM device_group
- WHERE VALID=1
-
- AND id =#{request.groupId}
-
+ SELECT deptid,id
+ FROM device_group
+ WHERE VALID=1
+
+ AND id =#{request.groupId}
+
)dg ON dg.id=d.group_id
+ order by create_time desc
diff --git a/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
new file mode 100644
index 0000000..e0c72e3
--- /dev/null
+++ b/casic-iot-model/src/main/java/com/casic/missiles/dto/BusConfigDTO.java
@@ -0,0 +1,175 @@
+package com.casic.missiles.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.alibaba.excel.enums.poi.BorderStyleEnum;
+import com.casic.missiles.enums.DeviceTypeEnum;
+import lombok.Data;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author cz
+ * @date 2023/11/24
+ */
+@ColumnWidth(30)
+@HeadRowHeight(15)
+@ContentRowHeight(20)
+@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
+@ExcelIgnoreUnannotated
+@Data
+public class BusConfigDTO {
+
+ private Long id;
+
+ /**
+ * 设备编号
+ */
+ private String devcode;
+ /**
+ * 设备名称
+ */
+ private String deviceName;
+ /**
+ * 设备类型编号
+ */
+ private Long deviceType;
+ /**
+ * 设备类型名称
+ */
+ private String deviceTypeName;
+ /**
+ * 权属单位id
+ */
+ private String deptid;
+ /**
+ * 权属单位名称
+ */
+ private String deptName;
+
+ /**
+ * 低报警阈值 导出字段
+ */
+ @ExcelProperty("低报警阈值")
+ private float lowerThreshold;
+ /**
+ * 高报警阈值
+ */
+ @ExcelProperty("高报警阈值")
+ private float upperThreshold;
+
+ @ExcelProperty("重传次数")
+ private Integer retryTimes;
+ @ExcelProperty("IP地址")
+ private String ip;
+ @ExcelProperty("端口号")
+ private String port;
+ @ExcelProperty("最大尝试次数")
+ private Integer attemptsMax;
+ /**
+ * 已尝试次数
+ */
+ private String attemptsCurrent;
+
+ /**
+ * 下发状态
+ */
+ private String status;
+
+ /**
+ * 下发状态次数
+ */
+ private String statusName;
+
+ /**
+ * 燃气监测终端-采集间隔
+ */
+ @ExcelProperty("采集间隔(分)")
+ private Integer collectInterval;
+
+ /**
+ * 采集次数
+ */
+ @ExcelProperty("采集次数")
+ private Integer collectCount;
+
+ /**
+ * 休眠周期
+ */
+ private String sleepPeriod;
+
+ /**
+ * 燃气监测终端-上传周期
+ */
+ @ExcelProperty("上传周期(分)")
+ private String uploadPeriod;
+ /**
+ * 温湿度监测仪-采集时间
+ */
+ @ExcelProperty("采集时间(时:分)")
+ private String collectTime;
+ /**
+ * 休眠开始时间
+ */
+ @ExcelProperty("睡眠开始时间(时:分)")
+ private String sleepStartTime;
+ /**
+ * 休眠开始时间
+ */
+ private String sensorId;
+
+ public static Map sensorHashMap = new HashMap();
+
+ {//根据前期产品化文档,配置时存入config表中对应的sensorid字段,区分是哪类设备
+ sensorHashMap.put(DeviceTypeEnum.Liquid.getIndex(), "000034");
+ sensorHashMap.put(DeviceTypeEnum.Methane.getIndex(), "000044");
+ sensorHashMap.put(DeviceTypeEnum.Tube.getIndex(), "000080");
+ sensorHashMap.put(DeviceTypeEnum.WasteGas.getIndex(), "000035");
+ sensorHashMap.put(DeviceTypeEnum.TempHumi.getIndex(), "000055");
+ sensorHashMap.put(DeviceTypeEnum.Dig.getIndex(), "000064");
+ sensorHashMap.put(DeviceTypeEnum.Noise.getIndex(), "000032");
+ sensorHashMap.put(DeviceTypeEnum.LG.getIndex(), "000065");
+ sensorHashMap.put(DeviceTypeEnum.H2s.getIndex(), "000084");
+ sensorHashMap.put(DeviceTypeEnum.Well.getIndex(), "000085");
+ }
+
+ public static BusConfigDTO ConvertDTO(Map objectMap) {
+ if (null != objectMap) {
+ BusConfigDTO dto = new BusConfigDTO();
+ dto.setId(null != objectMap.get("id") ?
+ Long.valueOf(objectMap.get("id").toString()) : null);
+ dto.setDevcode((String) objectMap.get("devcode"));
+// dto.setDeviceName(objectMap.get("deviceName").toString());
+ dto.setDeviceType(null != objectMap.get("deviceType") ?
+ Long.valueOf(objectMap.get("deviceType").toString()) : null);
+ dto.setDeviceTypeName(objectMap.get("deviceTypeName").toString());
+ dto.setDeptid(objectMap.get("deptid").toString());
+ dto.setDeptName(objectMap.get("deptName").toString());
+ dto.setAttemptsCurrent(null != objectMap.get("attemptscurrent") ?
+ objectMap.get("attemptscurrent").toString() : "");
+ dto.setStatus(objectMap.get("status").toString());
+ dto.setStatusName("1".equals(objectMap.get("status").toString()) ?
+ "已下发" : "未下发");
+ dto.setAttemptsMax((Integer) objectMap.get("attemptsmax"));
+ return dto;
+ }
+ return new BusConfigDTO();
+ }
+
+ public static List convert(List