From 8d9a2d656e4ae007590c622e5f7c228adacdca49 Mon Sep 17 00:00:00 2001
From: rain <167982779@qq.com>
Date: Fri, 14 Jun 2024 10:11:36 +0800
Subject: [PATCH] 统一风格

---
 src/main/java/com/dji/sample/component/GlobalScheduleService.java |   59 +++++++++++++++++++++++++++++++++--------------------------
 1 files changed, 33 insertions(+), 26 deletions(-)

diff --git a/src/main/java/com/dji/sample/component/GlobalScheduleService.java b/src/main/java/com/dji/sample/component/GlobalScheduleService.java
index ea44a62..7e77a34 100644
--- a/src/main/java/com/dji/sample/component/GlobalScheduleService.java
+++ b/src/main/java/com/dji/sample/component/GlobalScheduleService.java
@@ -1,18 +1,20 @@
 package com.dji.sample.component;
 
+import com.dji.sample.component.mqtt.service.IMqttTopicService;
+import com.dji.sample.component.redis.RedisConst;
+import com.dji.sample.component.redis.RedisOpsUtils;
+import com.dji.sample.manage.model.dto.DeviceDTO;
 import com.dji.sample.manage.model.enums.DeviceDomainEnum;
 import com.dji.sample.manage.service.IDeviceService;
+import com.dji.sample.wayline.service.IWaylineJobService;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
-import java.time.LocalDateTime;
-import java.util.Map;
+import java.util.Arrays;
 import java.util.concurrent.TimeUnit;
-
-import static com.dji.sample.manage.model.DeviceStatusManager.DEFAULT_ALIVE_SECOND;
-import static com.dji.sample.manage.model.DeviceStatusManager.STATUS_MANAGER;
 
 /**
  * @author sean.zhou
@@ -26,33 +28,38 @@
     @Autowired
     private IDeviceService deviceService;
 
+    @Autowired
+    private IMqttTopicService topicService;
+
+    @Autowired
+    private IWaylineJobService waylineJobService;
+    @Autowired
+    private ObjectMapper mapper;
     /**
      * Check the status of the devices every 30 seconds. It is recommended to use cache.
      */
-    @Scheduled(fixedRate = 30, timeUnit = TimeUnit.SECONDS)
+    @Scheduled(initialDelay = 10, fixedRate = 30, timeUnit = TimeUnit.SECONDS)
     private void deviceStatusListen() {
-        for (Map.Entry<String, LocalDateTime> entry : STATUS_MANAGER.entrySet()) {
-            if (entry.getValue().isAfter(
-                    LocalDateTime.now().minusSeconds(DEFAULT_ALIVE_SECOND))) {
-                continue;
+        int start = RedisConst.DEVICE_ONLINE_PREFIX.length();
+
+        RedisOpsUtils.getAllKeys(RedisConst.DEVICE_ONLINE_PREFIX + "*").forEach(key -> {
+            long expire = RedisOpsUtils.getExpire(key);
+            if (expire <= 30) {
+                DeviceDTO device = (DeviceDTO) RedisOpsUtils.get(key);
+                if (DeviceDomainEnum.SUB_DEVICE.getVal() == device.getDomain()) {
+                    deviceService.subDeviceOffline(key.substring(start));
+                } else {
+                    deviceService.unsubscribeTopicOffline(key.substring(start));
+                    deviceService.pushDeviceOfflineTopo(device.getWorkspaceId(), device.getDeviceSn());
+                    RedisOpsUtils.hashDel(RedisConst.LIVE_CAPACITY, new String[]{device.getDeviceSn()});
+                    RedisOpsUtils.del(RedisConst.HMS_PREFIX + device.getDeviceSn());
+                    RedisOpsUtils.del(RedisConst.OSD_PREFIX + device.getDeviceSn());
+                }
+                RedisOpsUtils.del(key);
             }
+        });
 
-            String device = entry.getKey();
-            int index = device.indexOf("/");
-
-            STATUS_MANAGER.remove(device);
-
-            int type = Integer.parseInt(device.substring(0, index));
-            String sn = device.substring(index + 1);
-            // Determine whether it is a gateway device.
-            if (DeviceDomainEnum.GATEWAY.getVal() == type) {
-                deviceService.deviceOffline(sn);
-                deviceService.unsubscribeTopicOffline(sn);
-                continue;
-            }
-
-            deviceService.subDeviceOffline(sn);
-        }
+        log.info("Subscriptions: {}", Arrays.toString(topicService.getSubscribedTopic()));
     }
 
 }
\ No newline at end of file

--
Gitblit v1.9.3