AlarmScannerService.java 3.3 KB

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