ItsRotaServerService.java 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. package com.its.rota.server.service;
  2. import com.its.app.common.utils.Elapsed;
  3. import com.its.rota.server.aspect.annotation.ProcessElapsed;
  4. import com.its.rota.server.dao.mapper.IncidentMapper;
  5. import com.its.rota.server.dao.mapper.TrafficMapper;
  6. import com.its.rota.server.dto.CenterDto;
  7. import com.its.rota.server.entity.TbCheckIncident;
  8. import com.its.rota.server.entity.TbCheckTraffic;
  9. import com.its.rota.server.entity.TbSndIncident;
  10. import com.its.rota.server.entity.TbTrafficCenter;
  11. import com.its.rota.server.repository.ApplicationRepository;
  12. import lombok.Getter;
  13. import lombok.RequiredArgsConstructor;
  14. import lombok.extern.slf4j.Slf4j;
  15. import org.springframework.stereotype.Service;
  16. import org.springframework.transaction.annotation.Transactional;
  17. import javax.annotation.PostConstruct;
  18. import javax.annotation.PreDestroy;
  19. import java.util.ArrayList;
  20. import java.util.Collections;
  21. import java.util.List;
  22. @Slf4j
  23. @Getter
  24. @Service
  25. @RequiredArgsConstructor
  26. @Transactional(rollbackFor = {Exception.class})
  27. public class ItsRotaServerService {
  28. private final ApplicationRepository repo;
  29. private final IncidentMapper incidentMapper;
  30. private final TrafficMapper mapper;
  31. private boolean isRunning = false;
  32. private boolean isRunningCheckIncident = false;
  33. @PostConstruct
  34. private void init() {
  35. log.info("ItsRotaServerService.init: start.");
  36. log.info("ItsRotaServerService.init: ..end.");
  37. }
  38. @PreDestroy
  39. public void destroyService() {
  40. log.error("ItsRotaServerService.destroy. system terminated.......");
  41. }
  42. public void resetCenterTrafficSend() {
  43. long baseTime = System.currentTimeMillis();
  44. List<String> keySet = new ArrayList<>(this.repo.getCenterMap().keySet());
  45. Collections.sort(keySet);
  46. for (String key : keySet) {
  47. CenterDto center = this.repo.getCenterMap().get(key);
  48. if (center == null) {
  49. continue;
  50. }
  51. center.getTraffic().init(baseTime);
  52. }
  53. }
  54. public int checkSendTraffic() {
  55. String proceedName = String.format("%45s", this.getClass().getSimpleName() + ".checkSendTraffic");
  56. if (this.isRunning) {
  57. log.warn("{}: Already running.", proceedName);
  58. return 1;
  59. }
  60. Elapsed elapsed = new Elapsed();
  61. this.isRunning = true;
  62. log.info("{}: start.", proceedName);
  63. try {
  64. Elapsed elapsed1 = new Elapsed();
  65. List<TbCheckTraffic> result = this.mapper.selCheckTraffic();
  66. if (!result.isEmpty()) {
  67. String trafficTime = result.get(0).getRegDate();
  68. log.info("{}: checkTrafficTime: {}, currTrafficTime: {}.", proceedName, ApplicationRepository.checkTrafficTime, trafficTime);
  69. if (!ApplicationRepository.checkTrafficTime.equals(trafficTime)) {
  70. resetCenterTrafficSend();
  71. elapsed1.reset();
  72. List<TbTrafficCenter> traffics = this.mapper.selTrafficCenter();
  73. log.info("{}: {} EA. {}", proceedName, traffics.size(), Elapsed.elapsedTimeStr(elapsed1.nanoSeconds()));
  74. ApplicationRepository.checkTrafficTime = trafficTime;
  75. ApplicationRepository.traffics = traffics;
  76. List<String> keySet = new ArrayList<>(this.repo.getCenterMap().keySet());
  77. Collections.sort(keySet);
  78. for (String key : keySet) {
  79. CenterDto center = this.repo.getCenterMap().get(key);
  80. if (center == null) {
  81. continue;
  82. }
  83. center.executeSendTraffic();
  84. }
  85. }
  86. }
  87. }
  88. catch (Exception e) {
  89. log.error("{}: Exception {}", proceedName, e.getMessage());
  90. }
  91. this.isRunning = false;
  92. log.info("{}: ..end. {}", proceedName, Elapsed.elapsedTimeStr(elapsed.nanoSeconds()));
  93. return 0;
  94. }
  95. public int checkSendIncident() {
  96. String proceedName = String.format("%45s", this.getClass().getSimpleName() + ".checkSendIncident");
  97. if (this.isRunningCheckIncident) {
  98. log.warn("{}: Already running.", proceedName);
  99. return 1;
  100. }
  101. Elapsed elapsed = new Elapsed();
  102. this.isRunningCheckIncident = true;
  103. log.info("{}: start.", proceedName);
  104. try {
  105. Elapsed elapsed1 = new Elapsed();
  106. int deletes = this.incidentMapper.delCheckIncident();
  107. if (deletes > 0) {
  108. log.info("{}: delCheckIncident {} EA. {}", proceedName, deletes, Elapsed.elapsedTimeStr(elapsed1.nanoSeconds()));
  109. }
  110. long baseTime = System.currentTimeMillis();
  111. List<String> keySet = new ArrayList<>(this.repo.getCenterMap().keySet());
  112. Collections.sort(keySet);
  113. for (String key : keySet) {
  114. CenterDto center = this.repo.getCenterMap().get(key);
  115. if (center == null) {
  116. continue;
  117. }
  118. TbCheckIncident incident = TbCheckIncident.builder()
  119. .fromCenterId(ApplicationRepository.center.getCenterId())
  120. .toCenterId(center.getCenterId())
  121. .build();
  122. elapsed1.reset();
  123. int inserts = this.incidentMapper.insSndIncident(incident);
  124. if (inserts > 0) {
  125. log.info("{}: insSndIncident {}, {} EA. {}", proceedName, center.getCenterId(), inserts, Elapsed.elapsedTimeStr(elapsed1.nanoSeconds()));
  126. }
  127. // 지역센터에 전송할 돌발정보를 메모리에 저장하고 지역센터에 전송하여야 한다.
  128. List<TbSndIncident> result = this.incidentMapper.selSndIncident(incident);
  129. // if ("L99".equals(center.getCenterId())) {
  130. // TbSndIncident data = TbSndIncident.builder()
  131. // .linkId("1111111111")
  132. // .nodeId("1111111111")
  133. // .contactOrganizationNameText("1111111111")
  134. // .descriptionTypeIncidentCode(1)
  135. // .descriptionTypeIncidentOther("1111111111")
  136. // .incidentVehiclesInvolvedCode(1)
  137. // .incidentVehiclesInvolvedOther("1111111111")
  138. // .incidentStatusCode(1)
  139. // .incidentStatusOther(" 127.787941624999 37.7560849154680")
  140. // .updateTypeCode(1)
  141. // .updateTypeOther("202408081639002024080812170020240808124700")
  142. // .build();
  143. // result.add(data);
  144. // TbSndIncident data1 = TbSndIncident.builder()
  145. // .linkId("2222222222")
  146. // .nodeId("2222222222")
  147. // .contactOrganizationNameText("2222222222")
  148. // .descriptionTypeIncidentCode(2)
  149. // .descriptionTypeIncidentOther("2222222222")
  150. // .incidentVehiclesInvolvedCode(2)
  151. // .incidentVehiclesInvolvedOther("2222222222")
  152. // .incidentStatusCode(2)
  153. // .incidentStatusOther(" 127.787941624999 37.7560849154680")
  154. // .updateTypeCode(2)
  155. // .updateTypeOther("202408081639002024080812170020240808124700")
  156. // .build();
  157. // result.add(data1);
  158. // }
  159. center.getIncident().init(baseTime, result);
  160. if (!result.isEmpty()) {
  161. log.info("{}: selSndIncident {}, {} EA. {}", proceedName, center.getCenterId(), result.size(), Elapsed.elapsedTimeStr(elapsed1.nanoSeconds()));
  162. center.executeSendIncident();
  163. }
  164. }
  165. }
  166. catch (Exception e) {
  167. log.error("{}: Exception {}", proceedName, e.getMessage());
  168. }
  169. this.isRunningCheckIncident = false;
  170. log.info("{}: ..end. {}", proceedName, Elapsed.elapsedTimeStr(elapsed.nanoSeconds()));
  171. return 0;
  172. }
  173. }