VmsCtlrService.java 5.3 KB

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