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