DeviceOfflineCheckTask.java 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. package com.zksy.manhole.utils;
  2. import com.zksy.manhole.service.BaseDevicesService;
  3. import com.zksy.manhole.service.ManholeDataService;
  4. import org.slf4j.Logger;
  5. import org.slf4j.LoggerFactory;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.scheduling.annotation.Scheduled;
  8. import org.springframework.stereotype.Component;
  9. import java.util.Date;
  10. import java.util.HashMap;
  11. import java.util.Map;
  12. @Component
  13. public class DeviceOfflineCheckTask {
  14. private static final Logger logger = LoggerFactory.getLogger(DeviceOfflineCheckTask.class);
  15. // 用于存储设备编号及其最后一次接收数据的时间
  16. public static Map<String, Date> deviceLastReceiveTimeMap = new HashMap<>();
  17. @Autowired
  18. private BaseDevicesService baseDevicesService;
  19. // 定时检查设备是否离线
  20. @Scheduled(fixedRate = 24 * 60 * 60 * 1000) // 每24小时执行一次
  21. public void checkDeviceOffline() {
  22. Date now = new Date();
  23. for (Map.Entry<String, Date> entry : deviceLastReceiveTimeMap.entrySet()) {
  24. long diff = now.getTime() - entry.getValue().getTime();
  25. // 如果设备在 23 小时内没有接收数据,则认为设备离线
  26. if (diff > 23 * 60 * 60 * 1000) {
  27. baseDevicesService.getByDeviceNumberStatus(entry.getKey(), 1, 0);
  28. logger.info("设备 {} 已离线", entry.getKey());
  29. }
  30. }
  31. }
  32. }