shjung 2 years ago
parent
commit
80f340294b
22 changed files with 431 additions and 216 deletions
  1. 31 0
      src/main/java/com/its/op/controller/ReloadDatabaseController.java
  2. 1 1
      src/main/java/com/its/op/controller/its/vms/TbVmsIfscController.java
  3. 1 1
      src/main/java/com/its/op/controller/its/vms/TbVmsRltnIfscController.java
  4. 3 3
      src/main/java/com/its/op/entity/its/facility/TbFcltFail.java
  5. 5 5
      src/main/java/com/its/op/entity/its/facility/TbFcltFailAct.java
  6. 76 6
      src/main/java/com/its/op/global/CmmnCdManager.java
  7. 224 0
      src/main/java/com/its/op/global/CmmnFcltCdManager.java
  8. 0 113
      src/main/java/com/its/op/global/FcltCodeManager.java
  9. 10 39
      src/main/java/com/its/op/scheduler/ItsApiScheduler.java
  10. 4 11
      src/main/java/com/its/op/scheduler/job/BaseDbmsJobThread.java
  11. 0 1
      src/main/java/com/its/op/scheduler/job/DbmsSttsJobThread.java
  12. 0 2
      src/main/java/com/its/op/scheduler/job/FcltSttsJobThread.java
  13. 0 1
      src/main/java/com/its/op/scheduler/job/SigPhaseJobThread.java
  14. 0 1
      src/main/java/com/its/op/scheduler/job/TrafficJobThread.java
  15. 0 2
      src/main/java/com/its/op/scheduler/job/UnitSttsJobThread.java
  16. 13 3
      src/main/java/com/its/op/service/its/code/TbCmmnCdService.java
  17. 9 2
      src/main/java/com/its/op/service/its/facility/TbFcltFailOcrrTypeService.java
  18. 9 2
      src/main/java/com/its/op/service/its/facility/TbFcltFailTypeActService.java
  19. 9 2
      src/main/java/com/its/op/service/its/facility/TbFcltFailTypeService.java
  20. 10 3
      src/main/java/com/its/op/service/its/facility/TbFcltSubjPartService.java
  21. 10 3
      src/main/java/com/its/op/service/its/facility/TbFcltSubjService.java
  22. 16 15
      src/main/java/com/its/op/service/its/vms/TbVmsIfscService.java

+ 31 - 0
src/main/java/com/its/op/controller/ReloadDatabaseController.java

@@ -1,6 +1,8 @@
 package com.its.op.controller;
 
 import com.its.op.entity.its.cctv.TbCctvCtlr;
+import com.its.op.entity.its.code.TbCmmnCd;
+import com.its.op.entity.its.facility.TbFcltFailOcrrType;
 import com.its.op.entity.its.ifsc.TbIfsc;
 import com.its.op.entity.its.ifsc.TbIfscTraf;
 import com.its.op.entity.its.ifsc.TbIfscVrtxArr;
@@ -19,6 +21,7 @@ import com.its.op.entity.its.scrs.TbScSgnlIxrMngm;
 import com.its.op.entity.its.unit.TbUnitSyst;
 import com.its.op.entity.its.vds.TbVdsCtlr;
 import com.its.op.entity.its.vms.TbVmsCtlr;
+import com.its.op.entity.its.vms.TbVmsIfsc;
 import com.its.op.entity.its.wcam.TbWcamCtlr;
 import com.its.op.global.*;
 import io.swagger.annotations.Api;
@@ -58,6 +61,10 @@ public class ReloadDatabaseController {
     private final TbScSgnlCtlrManager scSgnlCtlrManager;
     private final TbScIxrCmraManager scIxrCmraManager;
 
+    private final CmmnCdManager cmmnCdManager;
+    private final CmmnFcltCdManager cmmnFcltCdManager;
+    private final TbVmsIfscManager vmsIfscManager;
+
     /******************************************************************************************************************/
     @ApiOperation(value = "시스템 UNIT 정보", response = TbUnitSyst.class, responseContainer = "ArrayList")
     @GetMapping(path="/unit", produces = MediaType.APPLICATION_JSON_VALUE)
@@ -208,4 +215,28 @@ public class ReloadDatabaseController {
         return ResponseEntity.ok(result);
     }
 
+    /******************************************************************************************************************/
+    @ApiOperation(value = "공통 코드 정보", response = TbCmmnCd.class, responseContainer = "ArrayList")
+    @GetMapping(path="/cmmn-cd", produces = MediaType.APPLICATION_JSON_VALUE)
+    public ResponseEntity<List<TbCmmnCd>> reloadCmmnCd() {
+        List<TbCmmnCd> result = this.cmmnCdManager.reload();
+        return ResponseEntity.ok(result);
+    }
+
+    /******************************************************************************************************************/
+    @ApiOperation(value = "시설물 코드 정보", response = TbFcltFailOcrrType.class, responseContainer = "ArrayList")
+    @GetMapping(path="/cmmn-fclt-cd", produces = MediaType.APPLICATION_JSON_VALUE)
+    public ResponseEntity<List<TbFcltFailOcrrType>> reloadCmmnFcltCd() {
+        List<TbFcltFailOcrrType> result = this.cmmnFcltCdManager.reload();
+        return ResponseEntity.ok(result);
+    }
+
+    /******************************************************************************************************************/
+    @ApiOperation(value = "VMS IFSC 정보", response = TbVmsIfsc.class, responseContainer = "ArrayList")
+    @GetMapping(path="/vms-ifsc", produces = MediaType.APPLICATION_JSON_VALUE)
+    public ResponseEntity<List<TbVmsIfsc>> reloadVmsIfsc() {
+        List<TbVmsIfsc> result = this.vmsIfscManager.reload();
+        return ResponseEntity.ok(result);
+    }
+
 }

+ 1 - 1
src/main/java/com/its/op/controller/its/vms/TbVmsIfscController.java

@@ -30,7 +30,7 @@ public class TbVmsIfscController {
     @ApiOperation(value = "VMS 정보제공구간 전체조회(TB_VMS_IFSC)", response = TbVmsIfscDto.class)
     @GetMapping(value = "", produces = {"application/json; charset=utf8"})
     public List<TbVmsIfscDto> findAll() {
-        return service.findAll();
+        return service.findAll(true);
     }
 
     @ApiOperation(value = "VMS 정보제공구간 개별조회(TB_VMS_IFSC)", response = TbVmsIfscDto.class)

+ 1 - 1
src/main/java/com/its/op/controller/its/vms/TbVmsRltnIfscController.java

@@ -26,7 +26,7 @@ public class TbVmsRltnIfscController {
     @ApiOperation(value = "VMS 정보제공구간 목록 조회(TB_VMS_IFSC_RLTN)", response = TbVmsRltnIfscDto.class)
     @GetMapping(value = "/vms-ifsc", produces = {"application/json; charset=utf8"})
     public List<TbVmsIfscDto> findVmsIfscAll() {
-        return this.vmsIfscService.findAll();
+        return this.vmsIfscService.findAll(true);
     }
 
     @ApiOperation(value = "VMS 정보제공구간 관계 전체조회(TB_VMS_IFSC_RLTN)", response = TbVmsRltnIfscDto.class)

+ 3 - 3
src/main/java/com/its/op/entity/its/facility/TbFcltFail.java

@@ -2,7 +2,7 @@ package com.its.op.entity.its.facility;
 
 import com.its.op.dto.its.facility.TbFcltFailDto;
 import com.its.op.global.CmmnCdManager;
-import com.its.op.global.FcltCodeManager;
+import com.its.op.global.CmmnFcltCdManager;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -136,12 +136,12 @@ public class TbFcltFail implements Serializable {
             dto.setFcltNm("?");
         }
 
-        dto.setFailOcrrDesc(FcltCodeManager.getFailOcrrTypeName(this.failOcrrCd));
+        dto.setFailOcrrDesc(CmmnFcltCdManager.getFailOcrrTypeName(this.failOcrrCd));
         dto.setStepDesc(CmmnCdManager.getCodeDescShort(CmmnCdManager.FMS_FSTEP, this.stepCd));
         dto.setFailRegDesc(CmmnCdManager.getCodeDescShort(CmmnCdManager.FMS_FREG, this.failRegCd));
         dto.setFailLevlDesc(CmmnCdManager.getCodeDescShort(CmmnCdManager.FMS_FLVL, this.failLevlCd));
         dto.setWthrDesc(CmmnCdManager.getCodeDescShort(CmmnCdManager.FMS_FWTHR, this.wthrCd));
-        dto.setSubjNm(FcltCodeManager.getFcltSubjName(this.subjNmbr));  // 부품명
+        dto.setSubjNm(CmmnFcltCdManager.getFcltSubjName(this.subjNmbr));  // 부품명
 
         return dto;
     }

+ 5 - 5
src/main/java/com/its/op/entity/its/facility/TbFcltFailAct.java

@@ -2,7 +2,7 @@ package com.its.op.entity.its.facility;
 
 import com.its.op.dto.its.facility.TbFcltFailActDto;
 import com.its.op.global.CmmnCdManager;
-import com.its.op.global.FcltCodeManager;
+import com.its.op.global.CmmnFcltCdManager;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -114,10 +114,10 @@ public class TbFcltFailAct implements Serializable {
                 .build();
 
         dto.setStepDesc(CmmnCdManager.getCodeDescShort("FSTEP", this.stepCd));
-        dto.setFailOcrrDesc(FcltCodeManager.getFailOcrrTypeName(this.failOcrrCd));
-        dto.setFailDesc(FcltCodeManager.getFailTypeName(this.failCd));
-        dto.setFailActDesc(FcltCodeManager.getFailTypeActName(this.failActCd));
-        dto.setPartNm(FcltCodeManager.getFcltSubjPartName(this.partNmbr));
+        dto.setFailOcrrDesc(CmmnFcltCdManager.getFailOcrrTypeName(this.failOcrrCd));
+        dto.setFailDesc(CmmnFcltCdManager.getFailTypeName(this.failCd));
+        dto.setFailActDesc(CmmnFcltCdManager.getFailTypeActName(this.failActCd));
+        dto.setPartNm(CmmnFcltCdManager.getFcltSubjPartName(this.partNmbr));
 
         return dto;
     }

+ 76 - 6
src/main/java/com/its/op/global/CmmnCdManager.java

@@ -1,7 +1,8 @@
 package com.its.op.global;
 
+import com.its.op.dao.repository.its.code.TbCmmnCdRepository;
 import com.its.op.dto.its.code.TbCmmnCdDto;
-import com.its.op.service.its.code.TbCmmnCdService;
+import com.its.op.entity.its.code.TbCmmnCd;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
@@ -21,7 +22,7 @@ import java.util.concurrent.ConcurrentHashMap;
 @Component
 public class CmmnCdManager {
 
-    private final TbCmmnCdService cmmnCdService;
+    private final TbCmmnCdRepository repo;
     //private final TbSectGradClsfRepository sectGradClsfRepository;
 
     // 소통정보 결측 소통등급 코드
@@ -126,7 +127,7 @@ public class CmmnCdManager {
     public static final String FMS_FWTHR  = "FWTHR";    // 시설물 장애발생시 날씨
     public static final String FMS_FMSG   = "FMSG";     // 사용자 메지시 종류
 
-    private static final ConcurrentHashMap<String, HashMap<String, Code>> codes = new ConcurrentHashMap<>();
+    private static ConcurrentHashMap<String, HashMap<String, Code>> codes = new ConcurrentHashMap<>();
 
     @PostConstruct
     void init() {
@@ -134,8 +135,9 @@ public class CmmnCdManager {
     }
 
     public void load() {
-        List<TbCmmnCdDto> codeList = this.cmmnCdService.findAll();
-        for (TbCmmnCdDto cd : codeList) {
+        List<TbCmmnCd> codeList = this.repo.findAll();
+        for (TbCmmnCd entity : codeList) {
+            TbCmmnCdDto cd = entity.toDto();
             HashMap<String, Code> codeMap = codes.get(cd.getCmmnClsfCd());
             if (codeMap == null) {
                 codeMap = new HashMap<>();
@@ -148,8 +150,76 @@ public class CmmnCdManager {
         }
     }
 
-    public void reload() {
+    public List<TbCmmnCd> reload() {
+        ConcurrentHashMap<String, HashMap<String, Code>> tempMap = new ConcurrentHashMap<>();
+        List<TbCmmnCd> codeList = this.repo.findAll();
+        for (TbCmmnCd entity : codeList) {
+            TbCmmnCdDto cd = entity.toDto();
+            HashMap<String, Code> codeMap = tempMap.get(cd.getCmmnClsfCd());
+            if (codeMap == null) {
+                codeMap = new HashMap<>();
+                codeMap.put(cd.getCmmnCd(), new Code(cd.getCmmnCd(), cd.getCmmnCdKorNm(), cd.getCmmnDescEnglNm()));
+                tempMap.put(cd.getCmmnClsfCd(), codeMap);
+            }
+            else {
+                codeMap.put(cd.getCmmnCd(), new Code(cd.getCmmnCd(), cd.getCmmnCdKorNm(), cd.getCmmnDescEnglNm()));
+            }
+        }
+
+        codes = tempMap;
+
+        return codeList;
+    }
+
+    public void refresh(List<TbCmmnCdDto> codeList) {
+        ConcurrentHashMap<String, HashMap<String, Code>> tempMap = new ConcurrentHashMap<>();
+        for (TbCmmnCdDto cd : codeList) {
+            HashMap<String, Code> codeMap = tempMap.get(cd.getCmmnClsfCd());
+            if (codeMap == null) {
+                codeMap = new HashMap<>();
+                codeMap.put(cd.getCmmnCd(), new Code(cd.getCmmnCd(), cd.getCmmnCdKorNm(), cd.getCmmnDescEnglNm()));
+                tempMap.put(cd.getCmmnClsfCd(), codeMap);
+            }
+            else {
+                codeMap.put(cd.getCmmnCd(), new Code(cd.getCmmnCd(), cd.getCmmnCdKorNm(), cd.getCmmnDescEnglNm()));
+            }
+        }
+
+        codes = tempMap;
+    }
+
+    public void merge(TbCmmnCdDto cd) {
+        if (cd == null) {
+            return;
+        }
+
+        HashMap<String, Code> codeMap = codes.get(cd.getCmmnClsfCd());
+        if (codeMap == null) {
+            HashMap<String, Code> codeMap_ = new HashMap<>();
+            codeMap_.put(cd.getCmmnCd(), new Code(cd.getCmmnCd(), cd.getCmmnCdKorNm(), cd.getCmmnDescEnglNm()));
+            codes.put(cd.getCmmnClsfCd(), codeMap_);
+        }
+        else {
+            codeMap.put(cd.getCmmnCd(), new Code(cd.getCmmnCd(), cd.getCmmnCdKorNm(), cd.getCmmnDescEnglNm()));
+        }
+    }
+
+    public void remove(String cmmnClsfCd, String cmmnCd) {
+        HashMap<String, Code> codeMap = codes.get(cmmnClsfCd);
+        if (codeMap != null) {
+            codeMap.remove(cmmnCd);
+        }
+    }
 
+    public void update(String cmmnClsfCd, List<TbCmmnCdDto> result) {
+        if (result == null) {
+            return;
+        }
+        HashMap<String, Code> codeMap = new HashMap<>();
+        for (TbCmmnCdDto cd : result) {
+            codeMap.put(cd.getCmmnCd(), new Code(cd.getCmmnCd(), cd.getCmmnCdKorNm(), cd.getCmmnDescEnglNm()));
+        }
+        codes.put(cmmnClsfCd, codeMap);
     }
 
     public static String getCodeDesc(String CMMN_CLSF_CD, String CMMN_CD) {

+ 224 - 0
src/main/java/com/its/op/global/CmmnFcltCdManager.java

@@ -0,0 +1,224 @@
+package com.its.op.global;
+
+import com.its.op.dao.repository.its.facility.*;
+import com.its.op.dto.its.facility.*;
+import com.its.op.entity.its.facility.*;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+
+@Slf4j
+@RequiredArgsConstructor
+@Getter
+@Component
+public class CmmnFcltCdManager {
+
+    // 시설물 장애 발생 구분
+    private final TbFcltFailOcrrTypeRepository failOcrrTypeRepo;
+    // 시설물 장애 유형
+    private final TbFcltFailTypeRepository failTypeRepo;
+    // 시설물 장애 유형별 조치
+    private final TbFcltFailTypeActRepository failTypeActRepo;
+    // 시설물 품목
+    private final TbFcltSubjRepository fcltSubRepo;
+    // 시설물 품목별 부품
+    private final TbFcltSubjPartRepository fcltSubjPartRepo;
+
+    public static final String defFcltCodeUnknown = "UNKNOWN";
+
+    private static ConcurrentHashMap<String, TbFcltFailOcrrTypeDto> codeFailOcrrType = new ConcurrentHashMap<>();
+    private static ConcurrentHashMap<String, TbFcltFailTypeDto> codeFailType = new ConcurrentHashMap<>();
+    private static ConcurrentHashMap<String, TbFcltFailTypeActDto> codeFailTypeAct = new ConcurrentHashMap<>();
+    private static ConcurrentHashMap<Long, TbFcltSubjDto> codeFcltSubj = new ConcurrentHashMap<>();
+    private static ConcurrentHashMap<Long, TbFcltSubjPartDto> codeFcltSubjPart = new ConcurrentHashMap<>();
+
+    @PostConstruct
+    void init() {
+        load();
+    }
+
+    public void load() {
+        List<TbFcltFailOcrrType> codeList1 = this.failOcrrTypeRepo.findAll();
+        for (TbFcltFailOcrrType e : codeList1) {
+            TbFcltFailOcrrTypeDto code = e.toDto();
+            codeFailOcrrType.put(code.getFailOcrrCd(), code);
+        }
+
+        List<TbFcltFailType> codeList2 = this.failTypeRepo.findAll();
+        for (TbFcltFailType e : codeList2) {
+            TbFcltFailTypeDto code = e.toDto();
+            codeFailType.put(code.getFailCd(), code);
+        }
+
+        List<TbFcltFailTypeAct> codeList3 = this.failTypeActRepo.findAll();
+        for (TbFcltFailTypeAct e : codeList3) {
+            TbFcltFailTypeActDto code = e.toDto();
+            codeFailTypeAct.put(code.getFailActCd(), code);
+        }
+
+        List<TbFcltSubj> codeList4 = this.fcltSubRepo.findAll();
+        for (TbFcltSubj e : codeList4) {
+            TbFcltSubjDto code = e.toDto();
+            codeFcltSubj.put(code.getSubjNmbr(), code);
+        }
+
+        List<TbFcltSubjPart> codeList5 = this.fcltSubjPartRepo.findAll();
+        for (TbFcltSubjPart e : codeList5) {
+            TbFcltSubjPartDto code = e.toDto();
+            codeFcltSubjPart.put(code.getPartNmbr(), code);
+        }
+    }
+
+    public List<TbFcltFailOcrrType> reload() {
+        ConcurrentHashMap<String, TbFcltFailOcrrTypeDto> tempCodeFailOcrrType = new ConcurrentHashMap<>();
+        ConcurrentHashMap<String, TbFcltFailTypeDto> tempCodeFailType = new ConcurrentHashMap<>();
+        ConcurrentHashMap<String, TbFcltFailTypeActDto> tempCodeFailTypeAct = new ConcurrentHashMap<>();
+        ConcurrentHashMap<Long, TbFcltSubjDto> tempCodeFcltSubj = new ConcurrentHashMap<>();
+        ConcurrentHashMap<Long, TbFcltSubjPartDto> tempCodeFcltSubjPart = new ConcurrentHashMap<>();
+
+        List<TbFcltFailOcrrType> codeList1 = this.failOcrrTypeRepo.findAll();
+        for (TbFcltFailOcrrType e : codeList1) {
+            TbFcltFailOcrrTypeDto code = e.toDto();
+            tempCodeFailOcrrType.put(code.getFailOcrrCd(), code);
+        }
+
+        List<TbFcltFailType> codeList2 = this.failTypeRepo.findAll();
+        for (TbFcltFailType e : codeList2) {
+            TbFcltFailTypeDto code = e.toDto();
+            tempCodeFailType.put(code.getFailCd(), code);
+        }
+
+        List<TbFcltFailTypeAct> codeList3 = this.failTypeActRepo.findAll();
+        for (TbFcltFailTypeAct e : codeList3) {
+            TbFcltFailTypeActDto code = e.toDto();
+            tempCodeFailTypeAct.put(code.getFailActCd(), code);
+        }
+
+        List<TbFcltSubj> codeList4 = this.fcltSubRepo.findAll();
+        for (TbFcltSubj e : codeList4) {
+            TbFcltSubjDto code = e.toDto();
+            tempCodeFcltSubj.put(code.getSubjNmbr(), code);
+        }
+
+        List<TbFcltSubjPart> codeList5 = this.fcltSubjPartRepo.findAll();
+        for (TbFcltSubjPart e : codeList5) {
+            TbFcltSubjPartDto code = e.toDto();
+            tempCodeFcltSubjPart.put(code.getPartNmbr(), code);
+        }
+
+        codeFailOcrrType = tempCodeFailOcrrType;
+        codeFailType = tempCodeFailType;
+        codeFailTypeAct = tempCodeFailTypeAct;
+        codeFcltSubj = tempCodeFcltSubj;
+        codeFcltSubjPart = tempCodeFcltSubjPart;
+
+        return codeList1;
+    }
+
+    public void refreshFailOcrrType(List<TbFcltFailOcrrTypeDto> codeList1) {
+        ConcurrentHashMap<String, TbFcltFailOcrrTypeDto> tempCodeFailOcrrType = new ConcurrentHashMap<>();
+        for (TbFcltFailOcrrTypeDto code : codeList1) {
+            tempCodeFailOcrrType.put(code.getFailOcrrCd(), code);
+        }
+        codeFailOcrrType = tempCodeFailOcrrType;
+    }
+    public void updateFailOcrrType(TbFcltFailOcrrTypeDto code) {
+        codeFailOcrrType.put(code.getFailOcrrCd(), code);
+    }
+
+    public void refreshFailType(List<TbFcltFailTypeDto> codeList2) {
+        ConcurrentHashMap<String, TbFcltFailTypeDto> tempCodeFailType = new ConcurrentHashMap<>();
+        for (TbFcltFailTypeDto code : codeList2) {
+            tempCodeFailType.put(code.getFailCd(), code);
+        }
+        codeFailType = tempCodeFailType;
+    }
+    public void updateFailType(TbFcltFailTypeDto code) {
+        codeFailType.put(code.getFailCd(), code);
+    }
+
+    public void refreshFailTypeAct(List<TbFcltFailTypeActDto> codeList3) {
+        ConcurrentHashMap<String, TbFcltFailTypeActDto> tempCodeFailTypeAct = new ConcurrentHashMap<>();
+        for (TbFcltFailTypeActDto code : codeList3) {
+            tempCodeFailTypeAct.put(code.getFailActCd(), code);
+        }
+        codeFailTypeAct = tempCodeFailTypeAct;
+    }
+    public void updateFailTypeAct(TbFcltFailTypeActDto code) {
+        codeFailTypeAct.put(code.getFailActCd(), code);
+    }
+
+    public void refreshSubj(List<TbFcltSubjDto> codeList4) {
+        ConcurrentHashMap<Long, TbFcltSubjDto> tempCodeFcltSubj = new ConcurrentHashMap<>();
+        for (TbFcltSubjDto code : codeList4) {
+            tempCodeFcltSubj.put(code.getSubjNmbr(), code);
+        }
+        codeFcltSubj = tempCodeFcltSubj;
+    }
+    public void updateSubj(TbFcltSubjDto code) {
+        codeFcltSubj.put(code.getSubjNmbr(), code);
+    }
+    public void removeSubj(Long id) {
+        codeFcltSubj.remove(id);
+    }
+
+    public void refreshSubPart(List<TbFcltSubjPartDto> codeList5) {
+        ConcurrentHashMap<Long, TbFcltSubjPartDto> tempCodeFcltSubjPart = new ConcurrentHashMap<>();
+        for (TbFcltSubjPartDto code : codeList5) {
+            tempCodeFcltSubjPart.put(code.getPartNmbr(), code);
+        }
+        codeFcltSubjPart = tempCodeFcltSubjPart;
+    }
+    public void updateSubPart(TbFcltSubjPartDto code) {
+        codeFcltSubjPart.put(code.getPartNmbr(), code);
+    }
+    public void removeSubjPart(Long id) {
+        codeFcltSubjPart.remove(id);
+    }
+
+    public static String getFailOcrrTypeName(String CODE) {
+        TbFcltFailOcrrTypeDto code = codeFailOcrrType.get(CODE);
+        if (code != null) {
+            return code.getFailOcrrCdNm();
+        }
+        return defFcltCodeUnknown;
+    }
+
+    public static String getFailTypeName(String CODE) {
+        TbFcltFailTypeDto code = codeFailType.get(CODE);
+        if (code != null) {
+            return code.getFailCdNm();
+        }
+        return defFcltCodeUnknown;
+    }
+
+    public static String getFailTypeActName(String CODE) {
+        TbFcltFailTypeActDto code = codeFailTypeAct.get(CODE);
+        if (code != null) {
+            return code.getFailActCdNm();
+        }
+        return defFcltCodeUnknown;
+    }
+
+    public static String getFcltSubjName(Long CODE) {
+        TbFcltSubjDto code = codeFcltSubj.get(CODE);
+        if (code != null) {
+            return code.getSubjNm();
+        }
+        return defFcltCodeUnknown;
+    }
+
+    public static String getFcltSubjPartName(Long CODE) {
+        TbFcltSubjPartDto code = codeFcltSubjPart.get(CODE);
+        if (code != null) {
+            return code.getPartNm();
+        }
+        return defFcltCodeUnknown;
+    }
+
+}

+ 0 - 113
src/main/java/com/its/op/global/FcltCodeManager.java

@@ -1,113 +0,0 @@
-package com.its.op.global;
-
-import com.its.op.dto.its.facility.*;
-import com.its.op.service.its.facility.*;
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
-import java.util.List;
-import java.util.concurrent.ConcurrentHashMap;
-
-@Slf4j
-@RequiredArgsConstructor
-@Getter
-@Component
-public class FcltCodeManager {
-
-    // 시설물 장애 발생 구분
-    private final TbFcltFailOcrrTypeService failOcrrTypeService;
-    // 시설물 장애 유형
-    private final TbFcltFailTypeService failTypeService;
-    // 시설물 장애 유형별 조치
-    private final TbFcltFailTypeActService failTypeActService;
-    // 시설물 품목
-    private final TbFcltSubjService fcltSubService;
-    // 시설물 품목별 부품
-    private final TbFcltSubjPartService fcltSubjPartService;
-
-    public static final String defFcltCodeUnknown = "UNKNOWN";
-
-    private static final ConcurrentHashMap<String, TbFcltFailOcrrTypeDto> codeFailOcrrType = new ConcurrentHashMap<>();
-    private static final ConcurrentHashMap<String, TbFcltFailTypeDto> codeFailType = new ConcurrentHashMap<>();
-    private static final ConcurrentHashMap<String, TbFcltFailTypeActDto> codeFailTypeAct = new ConcurrentHashMap<>();
-    private static final ConcurrentHashMap<Long, TbFcltSubjDto> codeFcltSubj = new ConcurrentHashMap<>();
-    private static final ConcurrentHashMap<Long, TbFcltSubjPartDto> codeFcltSubjPart = new ConcurrentHashMap<>();
-
-    @PostConstruct
-    void init() {
-        load();
-    }
-
-    public void load() {
-        List<TbFcltFailOcrrTypeDto> codeList1 = this.failOcrrTypeService.findAll();
-        for (TbFcltFailOcrrTypeDto code : codeList1) {
-            codeFailOcrrType.put(code.getFailOcrrCd(), code);
-        }
-
-        List<TbFcltFailTypeDto> codeList2 = this.failTypeService.findAll();
-        for (TbFcltFailTypeDto code : codeList2) {
-            codeFailType.put(code.getFailCd(), code);
-        }
-
-        List<TbFcltFailTypeActDto> codeList3 = this.failTypeActService.findAll();
-        for (TbFcltFailTypeActDto code : codeList3) {
-            codeFailTypeAct.put(code.getFailActCd(), code);
-        }
-
-        List<TbFcltSubjDto> codeList4 = this.fcltSubService.findAll();
-        for (TbFcltSubjDto code : codeList4) {
-            codeFcltSubj.put(code.getSubjNmbr(), code);
-        }
-
-        List<TbFcltSubjPartDto> codeList5 = this.fcltSubjPartService.findAll();
-        for (TbFcltSubjPartDto code : codeList5) {
-            codeFcltSubjPart.put(code.getPartNmbr(), code);
-        }
-    }
-
-    public void reload() {
-    }
-
-    public static String getFailOcrrTypeName(String CODE) {
-        TbFcltFailOcrrTypeDto code = codeFailOcrrType.get(CODE);
-        if (code != null) {
-            return code.getFailOcrrCdNm();
-        }
-        return defFcltCodeUnknown;
-    }
-
-    public static String getFailTypeName(String CODE) {
-        TbFcltFailTypeDto code = codeFailType.get(CODE);
-        if (code != null) {
-            return code.getFailCdNm();
-        }
-        return defFcltCodeUnknown;
-    }
-
-    public static String getFailTypeActName(String CODE) {
-        TbFcltFailTypeActDto code = codeFailTypeAct.get(CODE);
-        if (code != null) {
-            return code.getFailActCdNm();
-        }
-        return defFcltCodeUnknown;
-    }
-
-    public static String getFcltSubjName(Long CODE) {
-        TbFcltSubjDto code = codeFcltSubj.get(CODE);
-        if (code != null) {
-            return code.getSubjNm();
-        }
-        return defFcltCodeUnknown;
-    }
-
-    public static String getFcltSubjPartName(Long CODE) {
-        TbFcltSubjPartDto code = codeFcltSubjPart.get(CODE);
-        if (code != null) {
-            return code.getPartNm();
-        }
-        return defFcltCodeUnknown;
-    }
-}

+ 10 - 39
src/main/java/com/its/op/scheduler/ItsApiScheduler.java

@@ -22,30 +22,13 @@ public class ItsApiScheduler {
     private final JobConfig jobConfig;
     private final FcltSttsJobThread fcltSttsJobThread;
     private final UnitSttsJobThread unitSttsJobThread;
-    private final BaseDbmsJobThread baseDbmsJobThread;
     private final DbmsSttsJobThread dbmsSttsJobThread;
     private final TrafficJobThread trafficJobThread;
 
-//    private final SigPhaseJobThread sigPhaseJobThread;
-
     @PreDestroy
     public void onShutDown() {
     }
 
-    /**
-     * 기초데이터 메모리 로딩
-     */
-    @Async
-    @Scheduled(cron = "5 * * * * *")  // 60초 주기 작업 실행
-    public void pollingBaseDbms() {
-        if (!this.applicationConfig.isStartSchedule()) {
-            return;
-        }
-        if (this.jobConfig.isBaseDbms()) {
-           this.baseDbmsJobThread.run();
-       }
-    }
-
     /**
      * 프로세스 상태정보 조회 및 전송
      */
@@ -61,29 +44,29 @@ public class ItsApiScheduler {
     }
 
     /**
-     * 소통정보 조회 후 메모리 로딩
+     * 시설물 상태정보 조회 및 전송
      */
     @Async
-    @Scheduled(cron = "25 0/5 * * * *")  // 5분 주기 작업 실행
-    public void loadTraffic() {
+    @Scheduled(cron = "10/30 * * * * *")  // 30초 주기 작업 실행
+    public void pollingFcltStts() {
         if (!this.applicationConfig.isStartSchedule()) {
             return;
         }
-        this.trafficJobThread.run();
+        if (this.jobConfig.isFcltStts()) {
+            this.fcltSttsJobThread.run();
+        }
     }
 
     /**
-     * 시설물 상태정보 조회 및 전송
+     * 소통정보 조회 후 메모리 로딩
      */
     @Async
-    @Scheduled(cron = "10/30 * * * * *")  // 30초 주기 작업 실행
-    public void pollingFcltStts() {
+    @Scheduled(cron = "25 0/5 * * * *")  // 5분 주기 작업 실행
+    public void loadTraffic() {
         if (!this.applicationConfig.isStartSchedule()) {
             return;
         }
-        if (this.jobConfig.isFcltStts()) {
-            this.fcltSttsJobThread.run();
-        }
+        this.trafficJobThread.run();
     }
 
     /**
@@ -98,16 +81,4 @@ public class ItsApiScheduler {
         this.dbmsSttsJobThread.run();
     }
 
-    /**
-     * 신호 현시
-     */
-//    @Async
-//    @Scheduled(cron = "0/3 * * * * *")  // 3초 주기 작업 실행
-//    public void jobSignalPhaseCurrent() {
-//        if (!this.applicationConfig.isStartSchedule()) {
-//            return;
-//        }
-//        this.sigPhaseJobThread.run();
-//    }
-
 }

+ 4 - 11
src/main/java/com/its/op/scheduler/job/BaseDbmsJobThread.java

@@ -1,26 +1,19 @@
 package com.its.op.scheduler.job;
 
-import com.its.op.global.*;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.scheduling.annotation.Async;
-import org.springframework.stereotype.Service;
 import org.springframework.util.StopWatch;
 
 import javax.annotation.PostConstruct;
 
 @Slf4j
 @AllArgsConstructor
-@Service
+//@Service
 public class BaseDbmsJobThread {
 
-    private final CmmnCdManager cmmnCdManager;
-    private final FcltCodeManager fcltCodeManager;
-    private final TbVmsIfscManager tbVmsIfscManager;
-
     @PostConstruct
     private void init() {
-        log.info("{}", this);
     }
 
     @Async("schJobExecutor")
@@ -30,9 +23,9 @@ public class BaseDbmsJobThread {
         StopWatch stopWatch = new StopWatch();
         stopWatch.start();
 
-        this.cmmnCdManager.load();
-        this.tbVmsIfscManager.load();
-        this.fcltCodeManager.load();
+//        this.cmmnCdManager.load();
+//        this.cmmnFcltCdManager.load();
+//        this.tbVmsIfscManager.load();
 
         stopWatch.stop();
         long totalTimeMillis = stopWatch.getTotalTimeMillis();

+ 0 - 1
src/main/java/com/its/op/scheduler/job/DbmsSttsJobThread.java

@@ -26,7 +26,6 @@ public class DbmsSttsJobThread {
 
     @PostConstruct
     private void init() {
-        log.info("{}", this);
     }
 
     @Async("schJobExecutor")

+ 0 - 2
src/main/java/com/its/op/scheduler/job/FcltSttsJobThread.java

@@ -37,8 +37,6 @@ public class FcltSttsJobThread {
     @PostConstruct
     private void init() {
         this.objectMapper = new ObjectMapper();
-
-        log.info("{}", this);
     }
 
     @Async("schJobExecutor")

+ 0 - 1
src/main/java/com/its/op/scheduler/job/SigPhaseJobThread.java

@@ -29,7 +29,6 @@ public class SigPhaseJobThread {
     @PostConstruct
     private void init() {
         this.mapper = new ObjectMapper();
-        log.info("{}", this);
     }
 
     @Async("schJobExecutor")

+ 0 - 1
src/main/java/com/its/op/scheduler/job/TrafficJobThread.java

@@ -20,7 +20,6 @@ public class TrafficJobThread {
 
     @PostConstruct
     private void init() {
-        log.info("{}", this);
     }
 
     @Async("schJobExecutor")

+ 0 - 2
src/main/java/com/its/op/scheduler/job/UnitSttsJobThread.java

@@ -31,8 +31,6 @@ public class UnitSttsJobThread {
     @PostConstruct
     private void init() {
         this.mapper = new ObjectMapper();
-
-        log.info("{}", this);
     }
 
     @Async("schJobExecutor")

+ 13 - 3
src/main/java/com/its/op/service/its/code/TbCmmnCdService.java

@@ -23,6 +23,7 @@ import java.util.Optional;
 public class TbCmmnCdService {
 
     private final TbCmmnCdRepository repo;
+    private final CmmnCdManager manager;
     private final TbCmmnClsfCdRepository clsfCdRepository;
 
     // 데이터 1건 조회, 없으면 exception
@@ -46,6 +47,8 @@ public class TbCmmnCdService {
         for (TbCmmnCd entity : data) {
             result.add(entity.toDto());
         }
+        this.manager.refresh(result);
+
         return result;
     }
 
@@ -56,9 +59,11 @@ public class TbCmmnCdService {
         for (TbCmmnCdDto.TbCmmnCdUpdReq req : reqList) {
             TbCmmnCd obj = req.toEntity();
             this.repo.save(obj);
-            result.add(obj.toDto());
+            TbCmmnCdDto dto = obj.toDto();
+            result.add(dto);
+            this.manager.merge(dto);
         }
-        return result;
+       return result;
     }
 
     // 데이터 변경 또는 생성-개별(데이터가 존재하면 업데이트 없으면 신규로 생성)
@@ -66,7 +71,9 @@ public class TbCmmnCdService {
     public TbCmmnCdDto mergeInfo(TbCmmnCdDto.TbCmmnCdUpdReq req) {
         TbCmmnCd obj = req.toEntity();
         this.repo.save(obj);
-        return obj.toDto();
+        TbCmmnCdDto result = obj.toDto();
+        this.manager.merge(result);
+        return result;
     }
 
     // 정보 삭제-개별, 데이터 존재하지 않으면 Exception
@@ -75,6 +82,7 @@ public class TbCmmnCdService {
         TbCmmnCdKey key = new TbCmmnCdKey(cmmnCd, cmmnClsfCd);
         TbCmmnCd entity = requireOne(key);
         this.repo.deleteById(key);
+        this.manager.remove(cmmnClsfCd, cmmnCd);
         return entity.toDto();
     }
 
@@ -86,6 +94,7 @@ public class TbCmmnCdService {
             Optional<TbCmmnCd> obj = this.repo.findById(id);
             if (obj.isPresent()) {
                 this.repo.deleteById(id);
+                this.manager.remove(id.getCmmnClsfCd(), id.getCmmnCd());
                 result.add(obj.get().toDto());
             }
         }
@@ -100,6 +109,7 @@ public class TbCmmnCdService {
         for (TbCmmnCd entity : data) {
             result.add(entity.toDto());
         }
+        this.manager.update(cmmnClsfCd, result);
         return result;
     }
 

+ 9 - 2
src/main/java/com/its/op/service/its/facility/TbFcltFailOcrrTypeService.java

@@ -3,6 +3,7 @@ package com.its.op.service.its.facility;
 import com.its.op.dao.repository.its.facility.TbFcltFailOcrrTypeRepository;
 import com.its.op.dto.its.facility.TbFcltFailOcrrTypeDto;
 import com.its.op.entity.its.facility.TbFcltFailOcrrType;
+import com.its.op.global.CmmnFcltCdManager;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -19,6 +20,7 @@ import java.util.Optional;
 public class TbFcltFailOcrrTypeService {
 
     private final TbFcltFailOcrrTypeRepository repo;
+    private final CmmnFcltCdManager manager;
 
     // 데이터 1건 조회, 없으면 exception
     private TbFcltFailOcrrType requireOne(String id) throws NoSuchElementException {
@@ -39,6 +41,7 @@ public class TbFcltFailOcrrTypeService {
         for (TbFcltFailOcrrType entity : data) {
             result.add(entity.toDto());
         }
+        this.manager.refreshFailOcrrType(result);
         return result;
     }
 
@@ -46,7 +49,9 @@ public class TbFcltFailOcrrTypeService {
     @Transactional(readOnly = true)
     public TbFcltFailOcrrTypeDto findById(String id) {
         TbFcltFailOcrrType entity = requireOne(id);
-        return entity.toDto();
+        TbFcltFailOcrrTypeDto result = entity.toDto();
+        this.manager.updateFailOcrrType(result);
+        return result;
     }
 
     // 데이터 변경 또는 생성-개별(데이터가 존재하면 업데이트 없으면 신규로 생성)
@@ -54,7 +59,9 @@ public class TbFcltFailOcrrTypeService {
     public TbFcltFailOcrrTypeDto mergeInfo(TbFcltFailOcrrTypeDto.TbFcltFailOcrrTypeUpdReq req) {
         TbFcltFailOcrrType obj = req.toEntity();
         this.repo.save(obj);
-        return obj.toDto();
+        TbFcltFailOcrrTypeDto result = obj.toDto();
+        this.manager.updateFailOcrrType(result);
+        return result;
     }
 
 }

+ 9 - 2
src/main/java/com/its/op/service/its/facility/TbFcltFailTypeActService.java

@@ -3,6 +3,7 @@ package com.its.op.service.its.facility;
 import com.its.op.dao.repository.its.facility.TbFcltFailTypeActRepository;
 import com.its.op.dto.its.facility.TbFcltFailTypeActDto;
 import com.its.op.entity.its.facility.TbFcltFailTypeAct;
+import com.its.op.global.CmmnFcltCdManager;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -19,6 +20,7 @@ import java.util.Optional;
 public class TbFcltFailTypeActService {
 
     private final TbFcltFailTypeActRepository repo;
+    private final CmmnFcltCdManager manager;
 
     // 데이터 1건 조회, 없으면 exception
     private TbFcltFailTypeAct requireOne(String id) throws NoSuchElementException {
@@ -39,6 +41,7 @@ public class TbFcltFailTypeActService {
         for (TbFcltFailTypeAct entity : data) {
             result.add(entity.toDto());
         }
+        this.manager.refreshFailTypeAct(result);
         return result;
     }
 
@@ -46,7 +49,9 @@ public class TbFcltFailTypeActService {
     @Transactional(readOnly = true)
     public TbFcltFailTypeActDto findById(String id) {
         TbFcltFailTypeAct entity = requireOne(id);
-        return entity.toDto();
+        TbFcltFailTypeActDto result = entity.toDto();
+        this.manager.updateFailTypeAct(result);
+        return result;
     }
 
     // 데이터 변경 또는 생성-개별(데이터가 존재하면 업데이트 없으면 신규로 생성)
@@ -54,7 +59,9 @@ public class TbFcltFailTypeActService {
     public TbFcltFailTypeActDto mergeInfo(TbFcltFailTypeActDto.TbFcltFailTypeActUpdReq req) {
         TbFcltFailTypeAct obj = req.toEntity();
         this.repo.save(obj);
-        return obj.toDto();
+        TbFcltFailTypeActDto result = obj.toDto();
+        this.manager.updateFailTypeAct(result);
+        return result;
     }
 
 }

+ 9 - 2
src/main/java/com/its/op/service/its/facility/TbFcltFailTypeService.java

@@ -3,6 +3,7 @@ package com.its.op.service.its.facility;
 import com.its.op.dao.repository.its.facility.TbFcltFailTypeRepository;
 import com.its.op.dto.its.facility.TbFcltFailTypeDto;
 import com.its.op.entity.its.facility.TbFcltFailType;
+import com.its.op.global.CmmnFcltCdManager;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -19,6 +20,7 @@ import java.util.Optional;
 public class TbFcltFailTypeService {
 
     private final TbFcltFailTypeRepository repo;
+    private final CmmnFcltCdManager manager;
 
     // 데이터 1건 조회, 없으면 exception
     private TbFcltFailType requireOne(String id) throws NoSuchElementException {
@@ -39,6 +41,7 @@ public class TbFcltFailTypeService {
         for (TbFcltFailType entity : data) {
             result.add(entity.toDto());
         }
+        this.manager.refreshFailType(result);
         return result;
     }
 
@@ -46,7 +49,9 @@ public class TbFcltFailTypeService {
     @Transactional(readOnly = true)
     public TbFcltFailTypeDto findById(String id) {
         TbFcltFailType entity = requireOne(id);
-        return entity.toDto();
+        TbFcltFailTypeDto result = entity.toDto();
+        this.manager.updateFailType(result);
+        return result;
     }
 
     // 데이터 변경 또는 생성-개별(데이터가 존재하면 업데이트 없으면 신규로 생성)
@@ -54,7 +59,9 @@ public class TbFcltFailTypeService {
     public TbFcltFailTypeDto mergeInfo(TbFcltFailTypeDto.TbFcltFailTypeUpdReq req) {
         TbFcltFailType obj = req.toEntity();
         this.repo.save(obj);
-        return obj.toDto();
+        TbFcltFailTypeDto result = obj.toDto();
+        this.manager.updateFailType(result);
+        return result;
     }
 
 }

+ 10 - 3
src/main/java/com/its/op/service/its/facility/TbFcltSubjPartService.java

@@ -4,6 +4,7 @@ import com.its.op.dao.repository.its.facility.TbFcltSubjPartRepository;
 import com.its.op.dto.its.common.NewIdLongDto;
 import com.its.op.dto.its.facility.TbFcltSubjPartDto;
 import com.its.op.entity.its.facility.TbFcltSubjPart;
+import com.its.op.global.CmmnFcltCdManager;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -20,6 +21,7 @@ import java.util.Optional;
 public class TbFcltSubjPartService {
 
     private final TbFcltSubjPartRepository repo;
+    private final CmmnFcltCdManager manager;
 
     // 데이터 1건 조회, 없으면 exception
     private TbFcltSubjPart requireOne(Long id) throws NoSuchElementException {
@@ -40,6 +42,7 @@ public class TbFcltSubjPartService {
         for (TbFcltSubjPart entity : data) {
             result.add(entity.toDto());
         }
+        this.manager.refreshSubPart(result);
         return result;
     }
 
@@ -47,7 +50,9 @@ public class TbFcltSubjPartService {
     @Transactional(readOnly = true)
     public TbFcltSubjPartDto findById(Long id) {
         TbFcltSubjPart entity = requireOne(id);
-        return entity.toDto();
+        TbFcltSubjPartDto result = entity.toDto();
+        this.manager.updateSubPart(result);
+        return result;
     }
 
     // 데이터 변경 또는 생성-개별(데이터가 존재하면 업데이트 없으면 신규로 생성)
@@ -55,7 +60,9 @@ public class TbFcltSubjPartService {
     public TbFcltSubjPartDto mergeInfo(TbFcltSubjPartDto.TbFcltSubjPartUpdReq req) {
         TbFcltSubjPart obj = req.toEntity();
         this.repo.save(obj);
-        return obj.toDto();
+        TbFcltSubjPartDto result = obj.toDto();
+        this.manager.updateSubPart(result);
+        return result;
     }
 
     // 정보 삭제-개별, 데이터 존재하지 않으면 Exception
@@ -63,6 +70,7 @@ public class TbFcltSubjPartService {
     public TbFcltSubjPartDto deleteById(Long id) {
         TbFcltSubjPart entity = requireOne(id);
         this.repo.deleteById(id);
+        this.manager.removeSubjPart(id);
         return entity.toDto();
     }
 
@@ -71,7 +79,6 @@ public class TbFcltSubjPartService {
         return this.repo.updateValidCount(partNmbr, validCount);
     }
 
-
     @Transactional(readOnly = true)
     public NewIdLongDto getNewNmbr() {
         Long newId = this.repo.getNewNmbr();

+ 10 - 3
src/main/java/com/its/op/service/its/facility/TbFcltSubjService.java

@@ -4,6 +4,7 @@ import com.its.op.dao.repository.its.facility.TbFcltSubjRepository;
 import com.its.op.dto.its.common.NewIdLongDto;
 import com.its.op.dto.its.facility.TbFcltSubjDto;
 import com.its.op.entity.its.facility.TbFcltSubj;
+import com.its.op.global.CmmnFcltCdManager;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -20,6 +21,7 @@ import java.util.Optional;
 public class TbFcltSubjService {
 
     private final TbFcltSubjRepository repo;
+    private final CmmnFcltCdManager manager;
 
     // 데이터 1건 조회, 없으면 exception
     private TbFcltSubj requireOne(Long id) throws NoSuchElementException {
@@ -40,6 +42,7 @@ public class TbFcltSubjService {
         for (TbFcltSubj entity : data) {
             result.add(entity.toDto());
         }
+        this.manager.refreshSubj(result);
         return result;
     }
 
@@ -47,15 +50,18 @@ public class TbFcltSubjService {
     @Transactional(readOnly = true)
     public TbFcltSubjDto findById(Long id) {
         TbFcltSubj entity = requireOne(id);
-        return entity.toDto();
+        TbFcltSubjDto result = entity.toDto();
+        this.manager.updateSubj(result);
+        return result;
     }
 
     // 데이터 변경 또는 생성-개별(데이터가 존재하면 업데이트 없으면 신규로 생성)
     @Transactional
     public TbFcltSubjDto mergeInfo(TbFcltSubjDto.TbFcltSubjUpdReq req) {
         TbFcltSubj obj = req.toEntity();
-        this.repo.save(obj);
-        return obj.toDto();
+        TbFcltSubjDto result = obj.toDto();
+        this.manager.updateSubj(result);
+        return result;
     }
 
     // 정보 삭제-개별, 데이터 존재하지 않으면 Exception
@@ -63,6 +69,7 @@ public class TbFcltSubjService {
     public TbFcltSubjDto deleteById(Long id) {
         TbFcltSubj entity = requireOne(id);
         this.repo.deleteById(id);
+        this.manager.removeSubj(id);
         return entity.toDto();
     }
 

+ 16 - 15
src/main/java/com/its/op/service/its/vms/TbVmsIfscService.java

@@ -7,6 +7,7 @@ import com.its.op.dto.its.vms.TbVmsIfscCmtrGradDto;
 import com.its.op.dto.its.vms.TbVmsIfscDto;
 import com.its.op.dto.its.vms.TbVmsIfscRltnIfscDto;
 import com.its.op.entity.its.vms.TbVmsIfsc;
+import com.its.op.global.TbVmsIfscManager;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -20,6 +21,7 @@ import java.util.*;
 public class TbVmsIfscService {
 
     private final TbVmsIfscRepository repo;
+    private final TbVmsIfscManager manager;
     private final TbVmsRltnIfscService ifscRltnService;
     private final TbVmsFormObjectService formObjectService;
     private final TbVmsIfscRltnIfscService linkIfscService;
@@ -40,12 +42,19 @@ public class TbVmsIfscService {
     }
 
     // 전체 데이터 조회
-    public List<TbVmsIfscDto> findAll() {
+    public List<TbVmsIfscDto> findAll(boolean isMemory) {
         List<TbVmsIfscDto> result = new ArrayList<>();
+//        List<TbVmsIfsc> data;
+//        if (isMemory) {
+//            data = this.manager.findAll();
+//        } else {
+//            data = this.repo.findAll();
+//        }
         List<TbVmsIfsc> data = this.repo.findAll();
-        for (TbVmsIfsc entity : data) {
-            result.add(entity.toDto());
-        }
+
+        data.forEach(obj -> {
+            result.add(obj.toDto());
+        });
         return result;
     }
 
@@ -91,20 +100,10 @@ public class TbVmsIfscService {
         TbVmsIfsc entity = requireOne(id);
         entity.updateInfo(req);
         this.repo.save(entity);
+        this.manager.put(entity.getVmsIfscId(), entity);
         return entity.toDto();
     }
 
-    // 데이터 변경 또는 생성-목록(데이터가 존재하면 업데이트 없으면 신규로 생성)
-    public List<TbVmsIfscDto> mergeInfoList(List<TbVmsIfscDto.TbVmsIfscUpdReq> reqList) {
-        List<TbVmsIfscDto> result = new ArrayList<>();
-        for (TbVmsIfscDto.TbVmsIfscUpdReq req : reqList) {
-            TbVmsIfsc obj = req.toEntity();
-            this.repo.save(obj);
-            result.add(obj.toDto());
-        }
-        return result;
-    }
-
     // 데이터 변경 또는 생성-개별(데이터가 존재하면 업데이트 없으면 신규로 생성)
     @Transactional
     public TbVmsIfscDto.TbVmsIfscUpdReq mergeInfo(TbVmsIfscDto.TbVmsIfscUpdReq req) {
@@ -119,6 +118,7 @@ public class TbVmsIfscService {
         }
         TbVmsIfsc obj = req.toEntity();
         this.repo.save(obj);
+        this.manager.put(obj.getVmsIfscId(), obj);
 
         // 소통등급 정보 저장(merge)
         TbVmsIfscCmtrGradDto.TbVmsIfscCmtrGradUpdReq grad1 = new TbVmsIfscCmtrGradDto.TbVmsIfscCmtrGradUpdReq(req.getVmsIfscId(), "1", req.getGrad1().getLwstsped(), req.getGrad1().getHghssped());
@@ -179,6 +179,7 @@ public class TbVmsIfscService {
 
         // VMS 정보제공구간 정보 삭제
         this.repo.deleteById(id);
+        this.manager.remove(id);
 
         return entity.toDto();
     }