VmsCtlrService.java 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. package com.its.vms.service;
  2. import com.its.app.AppUtils;
  3. import com.its.app.utils.Elapsed;
  4. import com.its.app.utils.SysUtils;
  5. import com.its.vms.config.ApplicationConfig;
  6. import com.its.vms.dao.mapper.VmsCtlrMapper;
  7. import com.its.vms.domain.NET;
  8. import com.its.vms.entity.TbVmsCtlr;
  9. import com.its.vms.entity.TbVmsCtlrStts;
  10. import com.its.vms.dto.TbVmsCtlrDto;
  11. import com.its.vms.process.DbmsData;
  12. import com.its.vms.process.DbmsDataProcess;
  13. import com.its.vms.process.DbmsDataType;
  14. import lombok.RequiredArgsConstructor;
  15. import lombok.extern.slf4j.Slf4j;
  16. import org.springframework.stereotype.Service;
  17. import org.springframework.transaction.annotation.Transactional;
  18. import javax.annotation.PostConstruct;
  19. import java.io.File;
  20. import java.util.*;
  21. @Slf4j
  22. @Service
  23. @RequiredArgsConstructor
  24. @Transactional(rollbackFor = {Exception.class})
  25. public class VmsCtlrService {
  26. private final ApplicationConfig config;
  27. private final AppRepositoryService repoService;
  28. private final VmsCtlrMapper mapper;
  29. private int historyMin;
  30. @PostConstruct
  31. private void init() {
  32. log.info("VmsCtlrService.init: Start.");
  33. this.historyMin = -1;
  34. log.info("VmsCtlrService.init: ..End.");
  35. }
  36. public void loadDb() {
  37. loadCtlrInfo();
  38. loadCtlrSttsInfo();
  39. }
  40. public void loadCtlrInfo() {
  41. Elapsed elapsed = new Elapsed();
  42. this.repoService.initCtlrInfo();
  43. try {
  44. List<TbVmsCtlr> infoList = this.mapper.selectAll();
  45. log.info("VmsCtlrService.loadCtlrInfo: {} EA", infoList.size());
  46. for (TbVmsCtlr dto : infoList) {
  47. log.info("VmsCtlrService.loadCtlrInfo: {}", dto);
  48. TbVmsCtlrDto vmsObj = dto.toDto();
  49. //TbVmsCtlrDto oldObj = this.repoService.getCtrlMap(vmsObj.getCtlrNmbr());
  50. if (vmsObj.getCtlrId().trim().equals("")) {
  51. log.error("VmsCtlrService.loadCtlrInfo: Controller Ip Address Error: {}", vmsObj);
  52. continue;
  53. }
  54. this.repoService.putCtrlMap(vmsObj);
  55. this.repoService.putIpAddrMap(vmsObj);
  56. vmsObj.getStts().initUnknown();
  57. if (vmsObj.getMaxPhaseNum() > this.config.getMaxDownloadForms()) {
  58. log.error("VmsCtlrService.loadCtlrInfo: VMS {} Download Form Size Error: {}/{}", vmsObj.getCtlrNmbr(), vmsObj.getMaxPhaseNum(), this.config.getMaxDownloadForms());
  59. vmsObj.setMaxPhaseNum(this.config.getMaxDownloadForms());
  60. }
  61. vmsObj.setLocalFormDir(this.config.getFtpFormDir() + File.separator + vmsObj.getCtlrNmbr());
  62. vmsObj.setFtpFormDir(ApplicationConfig.FTP_FORM + File.separator + vmsObj.getCtlrNmbr() + File.separator);
  63. vmsObj.setFtpDownload(true);
  64. this.config.makeDirectory(vmsObj.getLocalFormDir(), "VMS " + vmsObj.getCtlrNmbr() + " Directory.");
  65. }
  66. }
  67. catch (Exception e) {
  68. log.error("VmsCtlrService.loadCtlrInfo: {}", e.toString());
  69. }
  70. this.repoService.getCtlrMap().forEach((key, obj) -> {
  71. log.info("VmsCtlrService.loadCtlrInfo:: {}", obj.toString());
  72. });
  73. log.info("VmsCtlrService.loadCtlrInfo: {} ms.", elapsed.milliSeconds());
  74. }
  75. public void loadCtlrSttsInfo() {
  76. Elapsed elapsed = new Elapsed();
  77. try {
  78. List<TbVmsCtlrStts> infoList = this.mapper.selectCtlrStts();
  79. log.info("VmsCtlrService.loadCtlrSttsInfo: {} EA", infoList.size());
  80. infoList.forEach(dto -> {
  81. TbVmsCtlrDto obj = this.repoService.getCtrlMap(dto.getVmsCtlrNmbr());
  82. if (obj == null) {
  83. log.error("VmsCtlrService.loadCtlrSttsInfo: Not Found VMS {}.", dto.getVmsCtlrNmbr());
  84. return;
  85. }
  86. obj.getStts().updateStts(dto);
  87. });
  88. }
  89. catch (Exception e) {
  90. log.error("VmsCtlrService.loadCtlrSttsInfo: {}", e.toString());
  91. }
  92. log.info("VmsCtlrService.loadCtlrSttsInfo: {} ms.", elapsed.milliSeconds());
  93. }
  94. public void updateCtlrStts(boolean isRun, TbVmsCtlrDto AObj) {
  95. boolean insHs = false;
  96. Calendar cal = Calendar.getInstance();
  97. int min = cal.get(Calendar.MINUTE);
  98. if (((min % 5) == 0) && this.historyMin != min) {
  99. insHs = true;
  100. this.historyMin = min;
  101. }
  102. //제어기 상태정보 업데이트
  103. List<TbVmsCtlrStts> ctlrSttsList = Collections.synchronizedList(new ArrayList<>());
  104. String UPDT_DT = SysUtils.getSysTime();
  105. int normal = 0;
  106. int error = 0;
  107. for (Map.Entry<Long, TbVmsCtlrDto> e : this.repoService.getCtlrMap().entrySet()) {
  108. TbVmsCtlrDto obj = e.getValue();
  109. if (AObj != null && !Objects.equals(AObj.getCtlrNmbr(), obj.getCtlrNmbr())) {
  110. continue;
  111. }
  112. obj.getStts().setUpdtDt(UPDT_DT);
  113. if (isRun && obj.getNetState() >= NET.LOGINED && obj.getChannel() != null) {
  114. //제어기 통신정상
  115. normal++;
  116. obj.getStts().setCmncSttsCd("CMS0");
  117. obj.getStts().setCommSttsCd("CMS0");
  118. }
  119. else {
  120. //제어기 통신이상
  121. error++;
  122. obj.getStts().initError();
  123. }
  124. if (isRun) {
  125. ctlrSttsList.add(obj.getStts());
  126. }
  127. else {
  128. this.mapper.updateCtlrStts(obj.getStts());
  129. if (insHs) {
  130. this.mapper.insertCtlrSttsHs(obj.getStts());
  131. }
  132. }
  133. }
  134. // 제어기 상태정보 DB 업데이트
  135. if (!ctlrSttsList.isEmpty()) {
  136. DbmsDataProcess dbmsDataProcess = (DbmsDataProcess) AppUtils.getBean(DbmsDataProcess.class);
  137. dbmsDataProcess.add(new DbmsData(DbmsDataType.DBMS_DATA_CTLR_STTS_LIST, insHs, ctlrSttsList));
  138. }
  139. log.info("VmsCtlrService.updateCtlrStts: total {}, normal {}, error {}", normal + error, normal, error);
  140. }
  141. }