Browse Source

机器离线超时

lijin 1 month ago
parent
commit
607a5a10b3

+ 24 - 0
device-api-service/src/main/java/com/xy/consumer/redis/DeviceOfflineConsumer.java

@@ -0,0 +1,24 @@
+package com.xy.consumer.redis;
+
+import com.xy.annotation.RedisTimeout;
+import com.xy.service.RedisTimeoutMessage;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * redis设备离线订阅
+ */
+@Slf4j
+@Service
+@AllArgsConstructor
+@RedisTimeout("device:offline")
+public class DeviceOfflineConsumer implements RedisTimeoutMessage {
+
+    @Override
+    public void message(String key) {
+        long deviceId = Long.parseLong(key.split(":")[2]);
+        log.info("设备:{} 离线已超时", deviceId);
+
+    }
+}

+ 31 - 0
device-api-service/src/main/java/com/xy/event/listener/DeviceNetWorkEventListener.java

@@ -7,15 +7,21 @@ import com.xy.dto.nfc.UpperDeviceStatusDTO;
 import com.xy.entity.DeviceInfo;
 import com.xy.entity.DeviceNetWorkSpi;
 import com.xy.entity.DeviceSysinfo;
+import com.xy.entity.SysDictRedis;
 import com.xy.event.DeviceEvent;
 import com.xy.service.*;
+import com.xy.utils.RedisService;
 import com.xy.utils.SpiUtils;
+import com.xy.utils.SysDictUtils;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.event.EventListener;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
 /**
  * 设备网络状态事件监听
  */
@@ -34,6 +40,8 @@ public class DeviceNetWorkEventListener {
 
     private DeviceInfoServiceImpl deviceInfoService;
 
+    private RedisService<Integer> redisService;
+
     /**
      * 上报状态
      *
@@ -76,6 +84,29 @@ public class DeviceNetWorkEventListener {
         }
     }
 
+    /**
+     * 告警消息处理
+     *
+     * @param netWorkEvent
+     */
+    @EventListener
+    public void msgHandle(DeviceEvent.NetWorkEvent netWorkEvent) {
+        String key = "device:offline:" + netWorkEvent.getValue();
+        if (netWorkEvent.getNetState() == 1) {
+            //在线
+            redisService.remove(key);
+        } else {
+            //离线
+            int minutes = 60;
+            Map<String, SysDictRedis> map = SysDictUtils.get("device_offline_time_code");
+            if (map != null) {
+                minutes = Integer.parseInt(map.get("minutes").getValue());
+            }
+            redisService.set(key, 0);
+            redisService.timeout(key, minutes, TimeUnit.MINUTES);
+        }
+    }
+
     /**
      * spi推送
      *

+ 4 - 0
device-start/src/main/resources/bootstrap-eprod.yml

@@ -1,3 +1,7 @@
+spring:
+  redis:
+    take: true
+
 #微服务相关配置
 cloud:
   center:

+ 4 - 0
device-start/src/main/resources/bootstrap-eprod2.yml

@@ -1,3 +1,7 @@
+spring:
+  redis:
+    take: true
+
 server:
   port: 8051
 

+ 4 - 0
device-start/src/main/resources/bootstrap-prod.yml

@@ -1,3 +1,7 @@
+spring:
+  redis:
+    take: true
+
 #微服务相关配置
 cloud:
   center:

+ 4 - 0
device-start/src/main/resources/bootstrap-prod2.yml

@@ -1,3 +1,7 @@
+spring:
+  redis:
+    take: true
+
 server:
   port: 8051
 

+ 4 - 0
device-start/src/main/resources/bootstrap-uat.yml

@@ -1,3 +1,7 @@
+spring:
+  redis:
+    take: true
+
 #微服务相关配置
 cloud:
   service: