|
@@ -1,14 +1,19 @@
|
|
|
package vip.xiaonuo.coldchain.core.service.dataprocess.dataclean.impl;
|
|
|
|
|
|
+import lombok.SneakyThrows;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.context.ApplicationEventPublisher;
|
|
|
import rk.netDevice.sdk.p2.RealTimeData;
|
|
|
import vip.xiaonuo.coldchain.core.bean.influxdb.SensorData;
|
|
|
+import vip.xiaonuo.coldchain.core.event.MonitorDeviceHeartBeatEvent;
|
|
|
+import vip.xiaonuo.coldchain.core.event.MonitorDeviceLoginEvent;
|
|
|
import vip.xiaonuo.coldchain.core.event.SensorDataEvent;
|
|
|
import vip.xiaonuo.coldchain.core.service.dataprocess.dataclean.MonitorDataProcessor;
|
|
|
+import vip.xiaonuo.coldchain.core.service.dataprocess.model.RenKeColdChainMessageData;
|
|
|
import vip.xiaonuo.coldchain.modular.monitordevice.enums.DeviceModelEnum;
|
|
|
|
|
|
import java.time.Instant;
|
|
|
+import java.util.Date;
|
|
|
import java.util.List;
|
|
|
import java.util.Objects;
|
|
|
|
|
@@ -22,7 +27,7 @@ import java.util.Objects;
|
|
|
* @date 2024/11/19
|
|
|
*/
|
|
|
@Slf4j // 引入日志功能
|
|
|
-public abstract class AbsRenkeMonitorDataProcessor implements MonitorDataProcessor<RealTimeData> {
|
|
|
+public abstract class AbsRenkeMonitorDataProcessor implements MonitorDataProcessor<RenKeColdChainMessageData> {
|
|
|
// 设备型号
|
|
|
protected String modelName;
|
|
|
// 事件发布器
|
|
@@ -40,11 +45,12 @@ public abstract class AbsRenkeMonitorDataProcessor implements MonitorDataProcess
|
|
|
* 3. 转换数据格式为传感器数据
|
|
|
* 4. 发布传感器数据事件
|
|
|
*
|
|
|
- * @param data 实时数据
|
|
|
+ * @param renKeColdChainMessageData 实时数据
|
|
|
* @return 处理是否成功
|
|
|
*/
|
|
|
@Override
|
|
|
- public Boolean processData(RealTimeData data) {
|
|
|
+ public Boolean processData(RenKeColdChainMessageData renKeColdChainMessageData) {
|
|
|
+ RealTimeData data = renKeColdChainMessageData.getRealTimeData();
|
|
|
// 1. 确保实时数据不为空
|
|
|
if (Objects.isNull(data) || Objects.isNull(data.getNodeList()) || data.getNodeList().isEmpty()) {
|
|
|
return false;
|
|
@@ -54,7 +60,7 @@ public abstract class AbsRenkeMonitorDataProcessor implements MonitorDataProcess
|
|
|
// 3. 获取设备ID,并从设备缓存中获取设备型号
|
|
|
final String deviceId = String.valueOf(data.getDeviceId());
|
|
|
// 4. 日志记录:输出当前设备的型号信息
|
|
|
- log.info("开始处理设备数据,设备ID: {}, 设备型号: {}", deviceId, modelName);
|
|
|
+ log.info("开始处理设备数据,设备ID: {}, 设备型号: {}", deviceId, getModelName());
|
|
|
// 5. 将实时数据转换为传感器数据列表
|
|
|
List<SensorData> sensorDataList = transRealTimeData2SensorDatas(data);
|
|
|
// 6. 发布传感器数据事件
|
|
@@ -62,9 +68,8 @@ public abstract class AbsRenkeMonitorDataProcessor implements MonitorDataProcess
|
|
|
// 7. 日志记录:输出处理结果
|
|
|
if (result) {
|
|
|
postProcess(sensorDataList);
|
|
|
- log.info("处理设备数据结束,设备ID: {}, 设备型号: {}", deviceId, modelName);
|
|
|
} else {
|
|
|
- log.error("处理设备数据结束,但保存失败,设备ID: {}, 设备型号: {}", deviceId, modelName);
|
|
|
+ log.error("处理设备数据结束,但保存失败,设备ID: {}, 设备型号: {}", deviceId, getModelName());
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
@@ -165,4 +170,30 @@ public abstract class AbsRenkeMonitorDataProcessor implements MonitorDataProcess
|
|
|
sensorData.setDeviceId(deviceId);
|
|
|
return sensorData;
|
|
|
}
|
|
|
+
|
|
|
+ // 公共的事件发布方法
|
|
|
+ @SneakyThrows
|
|
|
+ private void publishDeviceEvent(Integer deviceId, Date timestamp, Class<?> eventType) {
|
|
|
+ if (timestamp == null) {
|
|
|
+ // 默认使用当前时间
|
|
|
+ timestamp = new Date();
|
|
|
+ }
|
|
|
+ applicationEventPublisher.publishEvent(eventType.getConstructor(Object.class, Integer.class, String.class, Date.class)
|
|
|
+ .newInstance(this, deviceId, null, timestamp));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void login(RenKeColdChainMessageData data) {
|
|
|
+ Integer deviceId = data.getDeviceId();
|
|
|
+ Date timestamp = new Date();
|
|
|
+ publishDeviceEvent(deviceId, timestamp, MonitorDeviceLoginEvent.class);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void heartbeat(RenKeColdChainMessageData data) {
|
|
|
+ Integer deviceId = data.getDeviceId();
|
|
|
+ Date timestamp = new Date();
|
|
|
+ publishDeviceEvent(deviceId, timestamp, MonitorDeviceHeartBeatEvent.class);
|
|
|
+ }
|
|
|
+
|
|
|
}
|