SchedulerTask.java 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package com.its.vds.scheduler;
  2. import com.its.app.AppUtils;
  3. import com.its.app.utils.Elapsed;
  4. import com.its.app.utils.StatisticsTime;
  5. import com.its.vds.config.ProcessConfig;
  6. import com.its.vds.service.StatisticsServices;
  7. import com.its.vds.service.UnitSystService;
  8. import com.its.vds.service.VdsCtlrService;
  9. import lombok.AllArgsConstructor;
  10. import lombok.extern.slf4j.Slf4j;
  11. import org.springframework.scheduling.annotation.EnableScheduling;
  12. import org.springframework.scheduling.annotation.Scheduled;
  13. import org.springframework.stereotype.Component;
  14. import javax.annotation.PreDestroy;
  15. @Slf4j
  16. @AllArgsConstructor
  17. @EnableScheduling
  18. @Component
  19. public class SchedulerTask {
  20. private final ProcessConfig processConfig;
  21. private final UnitSystService unitSystService;
  22. private final VdsCtlrService vdsCtlrService;
  23. private final StatisticsServices statisticsServices;
  24. @Scheduled(cron = "6 * * * * *") // 1분주기 작업 실행(매분 6초)
  25. public void UnitSystSchedule() {
  26. if (!this.processConfig.isStartSchedule()) {
  27. return;
  28. }
  29. Elapsed elapsed = new Elapsed();
  30. log.info(" UnitSystSchedule: start. {}", Thread.currentThread().getName());
  31. // 프로세스 상태정보 업데이트
  32. this.unitSystService.updateUnitSystStts(true);
  33. // 제어기 상태정보 업데이트(제어기/프로세스 상태정보 UDP 전송)
  34. this.vdsCtlrService.updateCtlrStts(true);
  35. log.info(" UnitSystSchedule: ..end. {} ms. {}", elapsed.milliSeconds(), Thread.currentThread().getName());
  36. }
  37. @Scheduled(cron = "15 1 0/1 * * *") // 매시 1분 15초
  38. public void VdsRTCSchedule() {
  39. if (!this.processConfig.isStartSchedule()) {
  40. return;
  41. }
  42. Elapsed elapsed = new Elapsed();
  43. log.info("VdsRTCSchedule: start. {}", Thread.currentThread().getName());
  44. // 온도정보(온도/입력전압/출력전압) 요청
  45. // 제어기 동기화 요청
  46. this.vdsCtlrService.requestRTC();
  47. log.info("VdsRTCSchedule: ..end. {} ms. {}", elapsed.milliSeconds(), Thread.currentThread().getName());
  48. }
  49. @Scheduled(cron = "4/30 * * * * *") // 30초마다 요청(4초, 34초)
  50. public void VdsSynchronizationSchedule() {
  51. if (!this.processConfig.isStartSchedule()) {
  52. return;
  53. }
  54. Elapsed elapsed = new Elapsed();
  55. log.info("VdsSynchronizationSchedule: start. {}", Thread.currentThread().getName());
  56. // 온도정보(온도/입력전압/출력전압) 요청
  57. // 제어기 동기화 요청
  58. this.vdsCtlrService.requestSynchronization();
  59. log.info("VdsSynchronizationSchedule: ..end. {} ms. {}", elapsed.milliSeconds(), Thread.currentThread().getName());
  60. }
  61. @Scheduled(cron = "9/30 * * * * *") // 30초마다 요청(9초, 39초)
  62. public void VdsDataRequestSchedule() {
  63. if (!this.processConfig.isStartSchedule()) {
  64. return;
  65. }
  66. Elapsed elapsed = new Elapsed();
  67. // VDS 교통 데이터를 요청한 다음에 차량 정보를 요청한다.
  68. // 제어기에서 동기화가 안되기 때문에 교통 데이터를 요청한 다음에 5초 후에 요청한다.
  69. log.info("VdsDataRequestSchedule: start. {}", Thread.currentThread().getName());
  70. this.vdsCtlrService.requestData();
  71. log.info("VdsDataRequestSchedule: ..end. {} ms. {}", elapsed.milliSeconds(), Thread.currentThread().getName());
  72. }
  73. @Scheduled(cron = "40 0/5 * * * *") // 정주기 5분 40초에 스케쥴 실행
  74. public void StatisticsSchedule() {
  75. if (!this.processConfig.isStartSchedule()) {
  76. return;
  77. }
  78. Elapsed elapsed = new Elapsed();
  79. log.info(" StatisticsSchedule: start. {}", Thread.currentThread().getName());
  80. ProcessConfig processConfig = (ProcessConfig) AppUtils.getBean(ProcessConfig.class);
  81. if (processConfig.isStatistics()) {
  82. StatisticsTime its = new StatisticsTime();
  83. its.init();
  84. its.setProcessing(true);
  85. // if (true) {
  86. // // VDS 검지기 5분 가공
  87. // this.statisticsServices.CRT_TB_VDS_DTCT_HS(its.getPrcsFiveMin(), its.getPrcsFiveMinFrom(), its.getPrcsFiveMinTo());
  88. // }
  89. if (its.isStat15Min()) {
  90. // 5분 정주기 가공이 끝나고 15분 주기일 경우(00, 15, 30, 45 분 일경우 15분 통계 정보를 생성한다)
  91. this.statisticsServices.CRT_TB_VDS_DTCT_15M_STAT(its.getStat15MinFrom(), its.getStat15MinFrom(), its.getStat15MinTo());
  92. }
  93. if (its.isStatHour()) {
  94. // 매시 5분 가공완료후 1시간 통계
  95. this.statisticsServices.CRT_TB_VDS_DTCT_HH_STAT(its.getStatHourTime(), its.getStatHourTime(), its.getStatHourTo());
  96. }
  97. if (its.isStatDay()) {
  98. // 00시 10분 가공이 끝나면 이전일의 통계 정보를 가공.
  99. this.statisticsServices.CRT_TB_VDS_DTCT_DD_STAT(its.getStatDayFrom(), its.getStatDayFrom(), its.getStatDayTo());
  100. }
  101. if (its.isStatMon()) {
  102. // 02시 10분 가공이 끝나면 이전일의 월통계 정보를 누적 가공.
  103. String STAT_DT = its.getStatMonFrom().substring(0, 6) + "00000000";
  104. this.statisticsServices.CRT_TB_VDS_DTCT_MN_STAT(STAT_DT, its.getStatMonFrom(), its.getStatMonTo());
  105. }
  106. // if (its.isStatYear()) {
  107. // // 02시 35분 가공이 끝나면 이전일의 연통계 정보를 누적 가공.
  108. // String STAT_DT = its.getStatYearFrom().substring(0, 4) + "0000000000";
  109. // this.statisticsServices.CRT_TB_VDS_DTCT_YY_STAT(STAT_DT, its.getStatYearFrom(), its.getStatYearTo());
  110. // }
  111. its.setProcessing(false);
  112. }
  113. log.info(" StatisticsSchedule: ..end. {} ms. {}", elapsed.milliSeconds(), Thread.currentThread().getName());
  114. }
  115. @PreDestroy
  116. public void onShutDown() {
  117. this.unitSystService.updateUnitSystStts(false);
  118. }
  119. }