|
@@ -11,6 +11,8 @@ import vip.xiaonuo.coldchain.core.alarm.bean.SensorAlarmUser;
|
|
|
import vip.xiaonuo.coldchain.core.alarm.config.ColdChainAlarmMessageProperties;
|
|
|
import vip.xiaonuo.coldchain.core.event.SensorAlarmEvent;
|
|
|
import vip.xiaonuo.coldchain.core.renke.config.JfcloudColdChainServerProperties;
|
|
|
+import vip.xiaonuo.coldchain.modular.monitortarget.enums.MonitorStatusEnum;
|
|
|
+import vip.xiaonuo.coldchain.modular.monitortarget.service.MonitorTargetService;
|
|
|
import vip.xiaonuo.coldchain.modular.monitortargetregion.entity.MonitorTargetRegion;
|
|
|
import vip.xiaonuo.coldchain.modular.monitortargetregion.service.MonitorTargetRegionService;
|
|
|
import vip.xiaonuo.common.cache.CommonCacheOperator;
|
|
@@ -40,6 +42,7 @@ public class DeviceOfflineDetectionService {
|
|
|
private final CommonCacheOperator commonCacheOperator;
|
|
|
private final ApplicationEventPublisher applicationEventPublisher;
|
|
|
private final MonitorTargetRegionService monitorTargetRegionService;
|
|
|
+ private final MonitorTargetService monitorTargetService;
|
|
|
private final ColdChainAlarmMessageProperties alarmMessageProperties;
|
|
|
private final JfcloudColdChainServerProperties jfcloudColdChainServerProperties;
|
|
|
private static final String KEY_SPILT = "-";
|
|
@@ -85,7 +88,7 @@ public class DeviceOfflineDetectionService {
|
|
|
route = Integer.valueOf(split[1]);
|
|
|
}
|
|
|
// 从 Redis 中获取设备的最后上报时间
|
|
|
- String lastReportTimeStr = getLastDeviceTime(getKey(deviceCode,route));
|
|
|
+ String lastReportTimeStr = getLastDeviceTime(getKey(deviceCode, route));
|
|
|
if (lastReportTimeStr != null) {
|
|
|
// 将上报时间字符串解析为 LocalDateTime 对象
|
|
|
LocalDateTime lastReportTime = LocalDateTime.parse(lastReportTimeStr, DATE_TIME_FORMATTER);
|
|
@@ -96,10 +99,10 @@ public class DeviceOfflineDetectionService {
|
|
|
if (lastReportTime.plusMinutes(OFFLINE_THRESHOLD_MINUTES).isBefore(now)) {
|
|
|
log.error("设备{}-{} 已离线,最后上报时间:{}。\n", deviceCode, route, lastReportTimeStr);
|
|
|
publishAlarm(deviceCode, route, lastReportTimeStr);
|
|
|
- // TODO 标识设备离线
|
|
|
+ monitorTargetService.updateStatusByDeviceCode(deviceCode, route, MonitorStatusEnum.OFF);
|
|
|
} else {
|
|
|
- // TODO 标识设备在线
|
|
|
log.info("设备 {}-{} 在线,最后上报时间:{}。\n", deviceCode, route, lastReportTimeStr);
|
|
|
+ monitorTargetService.updateStatusByDeviceCode(deviceCode, route, MonitorStatusEnum.ONLINE);
|
|
|
}
|
|
|
} else {
|
|
|
// 如果设备上报时间为空,认为设备可能从未上报过数据
|
|
@@ -114,6 +117,13 @@ public class DeviceOfflineDetectionService {
|
|
|
if (Objects.isNull(monitorTargetRegion)) {
|
|
|
return;
|
|
|
}
|
|
|
+ /**
|
|
|
+ * jackzhou add 设备下线预警标识
|
|
|
+ */
|
|
|
+ if (Objects.isNull(monitorTargetRegion.getDeviceOfflineAlarm()) || !monitorTargetRegion.getDeviceOfflineAlarm()) {
|
|
|
+ log.error("***********************设备未启动设备下线预警设置");
|
|
|
+ return;
|
|
|
+ }
|
|
|
String monitorTargetId = monitorTargetRegion.getMonitorTargetId();
|
|
|
Integer sensorRoute = monitorTargetRegion.getSensorRoute();
|
|
|
String sensorCode = monitorTargetRegion.getSensorCode();
|
|
@@ -161,8 +171,10 @@ public class DeviceOfflineDetectionService {
|
|
|
* @param time
|
|
|
*/
|
|
|
private void cacheDeviceTime(String deviceCode, Integer route, String time) {
|
|
|
- final long OFFLINE_THRESHOLD_MINUTES = jfcloudColdChainServerProperties.getDeviceOfflineInterval() / 60 / 1000;
|
|
|
- commonCacheOperator.put(getKey(deviceCode, route), time/*, OFFLINE_THRESHOLD_MINUTES + 1, TimeUnit.MINUTES*/);
|
|
|
+// final int minte_sufix = 2;
|
|
|
+// final long OFFLINE_THRESHOLD_MINUTES = jfcloudColdChainServerProperties.getDeviceOfflineInterval() / 60 / 1000;
|
|
|
+// commonCacheOperator.put(getKey(deviceCode, route), time, OFFLINE_THRESHOLD_MINUTES + minte_sufix, TimeUnit.MINUTES);
|
|
|
+ commonCacheOperator.put(getKey(deviceCode, route), time);
|
|
|
}
|
|
|
|
|
|
@NotNull
|
|
@@ -186,8 +198,7 @@ public class DeviceOfflineDetectionService {
|
|
|
}
|
|
|
|
|
|
private Set<String> getAllDeviceCodes() {
|
|
|
- return commonCacheOperator.getAllKeys().stream()
|
|
|
- .filter(key -> key.startsWith(CACHE_KEY_PREFIX)) // 过滤指定前缀的键
|
|
|
+ return commonCacheOperator.getAllKeys().stream().filter(key -> key.startsWith(CACHE_KEY_PREFIX)) // 过滤指定前缀的键
|
|
|
.map(key -> key.replace(CACHE_KEY_PREFIX, "")) // 去掉前缀
|
|
|
.collect(Collectors.toSet());
|
|
|
}
|