Просмотр исходного кода

feat(devices): 统一设备离线检测与在线状态管理功能

- 在多个微服务中实现统一的设备离线检测定时任务
- 重构设备状态更新逻辑,统一通过REST API接口调用
- 新增环境监测服务中的设备离线检测任务模块
- 实现设备在线状态标记与状态变更通知机制
- 优化设备状态更新配置,支持自定义超时时间与检查间隔
- 移除各服务中独立的数据库操作,统一通过API服务处理
- 集成设备状态变更发布器,确保状态变更及时推送
- 修复多服务间设备状态管理不一致的问题
林仔 4 дней назад
Родитель
Сommit
aeb0851fe6

+ 2 - 0
environment-service/src/main/java/com/zksy/environment/EnvironmentApplication.java

@@ -5,7 +5,9 @@ import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.EnableScheduling;
 
+@EnableScheduling
 @MapperScan({
         "com.zksy.environment.mapper",
         "com.zksy.base.mapper",

+ 8 - 0
environment-service/src/main/java/com/zksy/environment/config/RSServerService.java

@@ -6,6 +6,7 @@ import com.zksy.api.utils.SmsUtil;
 import com.zksy.environment.domain.ERealTimeData;
 import com.zksy.environment.mapper.ERealTimeDataMapper;
 import com.zksy.environment.utils.AlarmUtil;
+import com.zksy.environment.utils.DeviceOfflineCheckTask;
 import com.zksy.utils.DevicePhoneFetchUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -22,6 +23,7 @@ import javax.annotation.PreDestroy;
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -58,6 +60,9 @@ public class RSServerService {
     @Autowired
     private RestTemplate restTemplate;
 
+    @Autowired
+    private DeviceOfflineCheckTask deviceOfflineCheckTask;
+
     @Value("${device.status.api.url:http://zk-api-service/equipmentStatus/updateAlarmStatus}")
     private String deviceStatusApiUrl;
 
@@ -130,6 +135,9 @@ public class RSServerService {
                 @Override
                 public void receiveRealtimeData(RealTimeData data) {
                     String deviceId = String.valueOf(data.getDeviceId());
+                    // 更新设备最后接收数据时间,并标记设备在线
+                    DeviceOfflineCheckTask.deviceLastReceiveTimeMap.put(deviceId, new Date());
+                    deviceOfflineCheckTask.markDeviceOnline(deviceId);
                     boolean hasAlarm = false;
                     for (NodeData nd : data.getNodeList()) {
                         try {