AlarmScannerService.java 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. package com.gyee.alarm.service;
  2. import com.gyee.alarm.feigns.IAlarmService;
  3. import com.gyee.alarm.model.vo.AlarmSuperTalbeType;
  4. import com.gyee.alarm.model.vo.AlarmTag;
  5. import com.gyee.alarm.task.thread.AlarmThread;
  6. import com.gyee.alarm.util.realtimesource.IEdosUtil;
  7. import lombok.extern.slf4j.Slf4j;
  8. import org.springframework.beans.factory.annotation.Qualifier;
  9. import org.springframework.beans.factory.annotation.Value;
  10. import org.springframework.stereotype.Service;
  11. import javax.annotation.Resource;
  12. import java.util.ArrayList;
  13. import java.util.List;
  14. import java.util.concurrent.CountDownLatch;
  15. import java.util.concurrent.Executor;
  16. @Service
  17. @Slf4j
  18. public class AlarmScannerService {
  19. @Value("${task-count}")
  20. private Integer taskCount;
  21. @Value("${interval}")
  22. private Integer interval;
  23. @Value("${alarmType}")
  24. private String alarmType;
  25. @Value("${read-rows}")
  26. private Integer readRows;
  27. @Resource
  28. private IEdosUtil edosUtil;
  29. @Resource
  30. private IAlarmService alarmService;
  31. private List<AlarmTag> alarmTags=new ArrayList<>();
  32. @Resource
  33. @Qualifier(value = "taskExecutor")
  34. private Executor executor;
  35. /**
  36. * 初始化
  37. */
  38. public void init() {
  39. //#WT("wt_alarms", "设备报警超级表"),
  40. //#BT("bt_alarms", "升压站报警超级表"),
  41. //#IN("in_alarms", "逆变器报警超级表"),
  42. switch (alarmType){
  43. case "wt_alarms":
  44. alarmTags =alarmService.findTagsByWt();
  45. break;
  46. case "bt_alarms":
  47. alarmTags =alarmService.findTagsByBt();
  48. break;
  49. case "in_alarms":
  50. alarmTags =alarmService.findTagsByIn();
  51. break;
  52. }
  53. }
  54. /**
  55. * 分配任务
  56. */
  57. public void taskJobs(boolean start) throws InterruptedException {
  58. while (start) {
  59. int len = 1;
  60. List<AlarmTag> alarmls = new ArrayList<>();
  61. int listNumber = alarmTags.size() / taskCount;
  62. int number = 0;
  63. if (alarmTags.size() % listNumber == 0) {
  64. number = taskCount;
  65. } else {
  66. number = taskCount + 1;
  67. }
  68. CountDownLatch countDownLatch = new CountDownLatch(number);
  69. StringBuilder str = new StringBuilder();
  70. str.append("总数:").append(alarmTags.size()).append(",线程数:").append(number).append(",分块大小:").append(listNumber);
  71. log.info(String.valueOf(str));
  72. for (int i = 0; i < alarmTags.size(); i++) {
  73. alarmls.add(alarmTags.get(i));
  74. if (i != 0 && (i+1) % listNumber == 0) {
  75. new Thread(new AlarmThread(executor, edosUtil, alarmService, alarmls, interval, String.valueOf(len), readRows, alarmType,countDownLatch)).start();
  76. alarmls = new ArrayList<>();
  77. len++;
  78. }
  79. }
  80. if (!alarmls.isEmpty()) {
  81. new Thread(new AlarmThread(executor, edosUtil, alarmService, alarmls, interval, String.valueOf(len), readRows, alarmType,countDownLatch)).start();
  82. }
  83. countDownLatch.await();
  84. log.info("报警排查完成!");
  85. try {
  86. Thread.sleep((interval * 500));
  87. } catch (InterruptedException e) {
  88. throw new RuntimeException(e);
  89. }
  90. }
  91. }
  92. }