AlarmPlanCheckTask.java 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package com.hfln.device.application.task;
  2. import com.hfln.device.domain.entity.AlarmPlan;
  3. import com.hfln.device.domain.entity.Device;
  4. import com.hfln.device.domain.service.AlarmPlanService;
  5. import com.hfln.device.domain.service.DeviceManagerService;
  6. import lombok.extern.slf4j.Slf4j;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.scheduling.annotation.Scheduled;
  9. import org.springframework.stereotype.Component;
  10. import java.util.Collection;
  11. import java.util.List;
  12. import java.util.Optional;
  13. /**
  14. * 告警计划检查定时任务
  15. * 定期检查所有设备的告警计划,触发滞留告警
  16. */
  17. @Component
  18. @Slf4j
  19. public class AlarmPlanCheckTask {
  20. @Autowired
  21. private DeviceManagerService deviceManagerService;
  22. @Autowired
  23. private AlarmPlanService alarmPlanService;
  24. /**
  25. * 定期检查告警计划
  26. * 每30秒执行一次
  27. */
  28. @Scheduled(fixedRate = 30000)
  29. public void checkAlarmPlans() {
  30. log.debug("开始检查告警计划...");
  31. try {
  32. // 获取所有设备
  33. Collection<Device> devices = deviceManagerService.getAllDevicesFromCache();
  34. // 检查每个设备的告警计划
  35. for (Device device : devices) {
  36. if (device.getOnline() != null && device.getOnline() == 1) {
  37. // 只检查在线设备
  38. String deviceId = device.getDevId();
  39. // todo 添加停留事件,告警事件保存 stay_time alarm_event
  40. // 检查设备的告警计划
  41. List<AlarmPlan> alarmedPlans = alarmPlanService.checkAlarmPlans(deviceId);
  42. if (!alarmedPlans.isEmpty()) {
  43. log.info("设备[{}]触发了{}个告警计划", deviceId, alarmedPlans.size());
  44. }
  45. }
  46. }
  47. } catch (Exception e) {
  48. log.error("检查告警计划异常: {}", e.getMessage(), e);
  49. }
  50. }
  51. }