shjung 10 mesi fa
parent
commit
bba1549642

+ 1 - 1
src/main/java/com/ggits/etlp/server/dao/mapper/sig/SigMapper.java

@@ -17,7 +17,7 @@ public interface SigMapper {
     List<TbInt> selectTbInt(@Param("regionCd") String regionCd);
 
     int updateTbInt(Map<String, Object> obj);
-    int updateTbIntPhase(Map<String, Object> obj);
+    int updateTbIntFlow(Map<String, Object> obj);
     int updateTbIntOperPlan(Map<String, Object> obj);
     int updateTbIntDyPlan(Map<String, Object> obj);
     int updateTbIntResrvPlan(Map<String, Object> obj);

+ 20 - 0
src/main/java/com/ggits/etlp/server/dao/mapper/sig/batch/SigDao.java

@@ -26,4 +26,24 @@ public class SigDao extends BatchDaoService {
         return updateBatch("updateTbInt", req);
     }
 
+    public int updateTbIntFlow(List<HashMap<String, Object>> req) {
+        return updateBatch("updateTbIntFlow", req);
+    }
+
+    public int updateTbIntOperPlan(List<HashMap<String, Object>> req) {
+        return updateBatch("updateTbIntOperPlan", req);
+    }
+
+    public int updateTbIntDyPlan(List<HashMap<String, Object>> req) {
+        return updateBatch("updateTbIntDyPlan", req);
+    }
+
+    public int updateTbIntResrvPlan(List<HashMap<String, Object>> req) {
+        return updateBatch("updateTbIntResrvPlan", req);
+    }
+
+    public int updateTbIntSignalMap(List<HashMap<String, Object>> req) {
+        return updateBatch("updateTbIntSignalMap", req);
+    }
+
 }

+ 25 - 11
src/main/java/com/ggits/etlp/server/entity/ggits/TbScsTConIntDPlan.java

@@ -115,18 +115,32 @@ public class TbScsTConIntDPlan implements Serializable {
     private Integer intBSplit8;
 
     public HashMap<String, Object> toSig(String regionCd) {
+        // OK
         HashMap<String, Object> param = new HashMap<>();
-        param.put("REGION_CD",    regionCd);
-        param.put("INT_NO",       this.intNo);
-//        param.put("INT_NM",       this.intName);
-//        param.put("INT_TYPE",     this.intType);
-//        param.put("INT_LCTYPE",   this.intLcType);
-//        param.put("INT_LAMPTYPE", this.intLampType == 1 ? 4 : 3);
-//        param.put("MAIN_INTNO",   this.mainLcNo);
-//        param.put("GROUP_NO",     this.saNo);
-//        param.put("X_COORD",      this.intLng);
-//        param.put("Y_COORD",      this.intLat);
-//        param.put("NODE_ID",      this.intNodeId);
+        param.put("REGION_CD",           regionCd);
+        param.put("INT_NO",              this.intNo);
+        param.put("INT_PLAN_NO",         this.intDPlan);        // 교차로 계획번호(1~10)
+        param.put("INT_PLAN_IDX_NO",     this.intDPlanIndex);   // 교차로 계획 인덱스 번호(1~16)
+        param.put("OPER_PLAN_HH",        this.intSHour);
+        param.put("OPER_PLAN_MI",        this.intSMin);
+        param.put("INT_OPER_CYCLE_VAL",  this.intCycle);
+        param.put("INT_OPER_OFFSET_VAL", this.intOffset);
+        param.put("A_RING_1_PHASE_VAL",  this.intASplit1);
+        param.put("A_RING_2_PHASE_VAL",  this.intASplit2);
+        param.put("A_RING_3_PHASE_VAL",  this.intASplit3);
+        param.put("A_RING_4_PHASE_VAL",  this.intASplit4);
+        param.put("A_RING_5_PHASE_VAL",  this.intASplit5);
+        param.put("A_RING_6_PHASE_VAL",  this.intASplit6);
+        param.put("A_RING_7_PHASE_VAL",  this.intASplit7);
+        param.put("A_RING_8_PHASE_VAL",  this.intASplit8);
+        param.put("B_RING_1_PHASE_VAL",  this.intBSplit1);
+        param.put("B_RING_2_PHASE_VAL",  this.intBSplit2);
+        param.put("B_RING_3_PHASE_VAL",  this.intBSplit3);
+        param.put("B_RING_4_PHASE_VAL",  this.intBSplit4);
+        param.put("B_RING_5_PHASE_VAL",  this.intBSplit5);
+        param.put("B_RING_6_PHASE_VAL",  this.intBSplit6);
+        param.put("B_RING_7_PHASE_VAL",  this.intBSplit7);
+        param.put("B_RING_8_PHASE_VAL",  this.intBSplit8);
         return param;
     }
 }

+ 24 - 12
src/main/java/com/ggits/etlp/server/entity/ggits/TbScsTConIntFPlan.java

@@ -64,21 +64,33 @@ public class TbScsTConIntFPlan implements Serializable {
     /**
     * 
     */
-    private Integer intCntlSpcno;
+    private Integer intCntlSpcNo;
 
     public HashMap<String, Object> toSig(String regionCd) {
         HashMap<String, Object> param = new HashMap<>();
-        param.put("REGION_CD",    regionCd);
-        param.put("INT_NO",       this.intNo);
-//        param.put("INT_NM",       this.intName);
-//        param.put("INT_TYPE",     this.intType);
-//        param.put("INT_LCTYPE",   this.intLcType);
-//        param.put("INT_LAMPTYPE", this.intLampType == 1 ? 4 : 3);
-//        param.put("MAIN_INTNO",   this.mainLcNo);
-//        param.put("GROUP_NO",     this.saNo);
-//        param.put("X_COORD",      this.intLng);
-//        param.put("Y_COORD",      this.intLat);
-//        param.put("NODE_ID",      this.intNodeId);
+        param.put("REGION_CD",       regionCd);
+        param.put("INT_NO",          this.intNo);
+        param.put("RESRV_NO",        this.intFPlanIndex);       // 예약 번호(1~10)
+        param.put("RESRV_MM",        this.intRsrvMonth);        // TODO: 확인해야함...........
+        param.put("RESRV_DD",        this.intRsrvDay);          // TODO: 확인해야함...........
+        param.put("RESRV_DY",        this.intRsrvWkd);
+//        param.put("RESRV_DY",        this.intRsrvWkd+1);        // 예약 요일1:일~7:토(우선순위 4)
+//                                                                 8:공휴일(휴일계획에 지정된 휴일)(우선순위 1)
+//                                                                 9:모든 주중(월-금) (우선순위 3)
+//                                                                 10:모든 주말(토, 일) (우선순위 3)
+//                                                                 11:매 월 격주 첫 번째 토요일 (우선순위 2)
+//                                                                 12:매 월 격주 두 번째  	(우선순위 2)
+        param.put("RESRV_STRT_HH",   this.intCntlStartHour);
+        param.put("RESRV_STRT_MI",   this.intCntlStartMin);
+        param.put("RESRV_END_HH",    this.intCntlEndHour);
+        param.put("RESRV_END_MI",    this.intCntlEndMin);
+        param.put("RESRV_CONTRL_CD", this.intCntlType);
+//        param.put("RESRV_CONTRL_CD", this.intCntlType+1);       // 예약 제어 코드1:조광제어, 2:점멸제어, 3: 소등제어,
+//                                                                 4:시차제어, 5:감응제어, 6: 보행작동신호기활성
+//                                                                 7:음향발생, 8:감응+푸시버튼활성
+//                                                                 9:시차+감응+푸시버튼 활성 10 - 15: (예약)
+//                                                                 10:PPC제어, 11:단독압막힘제어
+        param.put("RESRV_PLAN_NO",   this.intCntlSpcNo);        // RESRV_CONTRL_CD = 4일때 운영될 시차제 플랜 번호(6-10), (0이면 6번플랜)
         return param;
     }
 }

+ 13 - 11
src/main/java/com/ggits/etlp/server/entity/ggits/TbScsTConIntFlow.java

@@ -68,17 +68,19 @@ public class TbScsTConIntFlow implements Serializable {
 
     public HashMap<String, Object> toSig(String regionCd) {
         HashMap<String, Object> param = new HashMap<>();
-        param.put("REGION_CD",    regionCd);
-        param.put("INT_NO",       this.intNo);
-//        param.put("INT_NM",       this.intName);
-//        param.put("INT_TYPE",     this.intType);
-//        param.put("INT_LCTYPE",   this.intLcType);
-//        param.put("INT_LAMPTYPE", this.intLampType == 1 ? 4 : 3);
-//        param.put("MAIN_INTNO",   this.mainLcNo);
-//        param.put("GROUP_NO",     this.saNo);
-//        param.put("X_COORD",      this.intLng);
-//        param.put("Y_COORD",      this.intLat);
-//        param.put("NODE_ID",      this.intNodeId);
+        // OK
+        param.put("REGION_CD",  regionCd);
+        param.put("INT_NO",     this.intNo);
+        param.put("MAP_NO",     this.intPlanClss > 0 ? this.intPlanClss -1 : this.intPlanClss); // 0~6
+        param.put("RING_NO",    this.intRing == 1 ? 0 : 1); // 0:A링, 1:B링
+        param.put("PHASE_NO",   this.intPhaseNo > 0 ? this.intPhaseNo-1 : this.intPhaseNo); // 0~7
+        param.put("FLOW_NO",    this.flowNo);
+        param.put("FLOW_S_LAT", this.flowSLat);
+        param.put("FLOW_S_LNG", this.flowSLng);
+        param.put("FLOW_M_LAT", this.flowMLat);
+        param.put("FLOW_M_LNG", this.flowMLng);
+        param.put("FLOW_E_LAT", this.flowELat);
+        param.put("FLOW_E_LNG", this.flowELng);
         return param;
     }
 }

+ 2 - 0
src/main/java/com/ggits/etlp/server/entity/ggits/TbScsTConIntLc.java

@@ -67,12 +67,14 @@ public class TbScsTConIntLc implements Serializable {
     private Integer ppcType;
 
     public HashMap<String, Object> toSig(String regionCd) {
+        // OK
         HashMap<String, Object> param = new HashMap<>();
         param.put("REGION_CD",    regionCd);
         param.put("INT_NO",       this.intNo);
         param.put("INT_NM",       this.intName);
         param.put("INT_TYPE",     this.intType);
         param.put("INT_LCTYPE",   this.intLcType);
+        // 등화기유형(3:3색등화기, 4:4색등화기)
         param.put("INT_LAMPTYPE", this.intLampType == 1 ? 4 : 3);
         param.put("MAIN_INTNO",   this.mainLcNo);
         param.put("GROUP_NO",     this.saNo);

+ 25 - 11
src/main/java/com/ggits/etlp/server/entity/ggits/TbScsTConIntSigmap.java

@@ -115,18 +115,32 @@ public class TbScsTConIntSigmap implements Serializable {
     private Integer intEop;
 
     public HashMap<String, Object> toSig(String regionCd) {
+        // OK
         HashMap<String, Object> param = new HashMap<>();
-        param.put("REGION_CD",    regionCd);
-        param.put("INT_NO",       this.intNo);
-//        param.put("INT_NM",       this.intName);
-//        param.put("INT_TYPE",     this.intType);
-//        param.put("INT_LCTYPE",   this.intLcType);
-//        param.put("INT_LAMPTYPE", this.intLampType == 1 ? 4 : 3);
-//        param.put("MAIN_INTNO",   this.mainLcNo);
-//        param.put("GROUP_NO",     this.saNo);
-//        param.put("X_COORD",      this.intLng);
-//        param.put("Y_COORD",      this.intLat);
-//        param.put("NODE_ID",      this.intNodeId);
+        param.put("REGION_CD",  regionCd);
+        param.put("INT_NO",     this.intNo);
+        param.put("RING_NO",    this.intRing == 1 ? 0 : 1); // 0:A링, 1:B링
+        param.put("PLAN_TP",    this.intPlanClss > 0 ? this.intPlanClss -1 : this.intPlanClss); // 0~6
+        param.put("STEP_NO",    this.intStepNo);
+        param.put("CAR1",       this.intVeh1);
+        param.put("PED1",       this.intPed1);
+        param.put("CAR2",       this.intVeh2);
+        param.put("PED2",       this.intPed2);
+        param.put("CAR3",       this.intVeh3);
+        param.put("PED3",       this.intPed3);
+        param.put("CAR4",       this.intVeh4);
+        param.put("PED4",       this.intPed4);
+        param.put("CAR5",       this.intVeh5);
+        param.put("PED5",       this.intPed5);
+        param.put("CAR6",       this.intVeh6);
+        param.put("PED6",       this.intPed6);
+        param.put("CAR7",       this.intVeh7);
+        param.put("PED7",       this.intPed7);
+        param.put("CAR8",       this.intVeh8);
+        param.put("PED8",       this.intPed8);
+        param.put("MIN_TM",     this.intMinSplit);
+        param.put("MAX_TM",     this.intMaxSplit);
+        param.put("EOP",        this.intEop);
         return param;
     }
 }

+ 4 - 11
src/main/java/com/ggits/etlp/server/entity/ggits/TbScsTConIntWeek.java

@@ -36,17 +36,10 @@ public class TbScsTConIntWeek implements Serializable {
 
     public HashMap<String, Object> toSig(String regionCd) {
         HashMap<String, Object> param = new HashMap<>();
-        param.put("REGION_CD",    regionCd);
-        param.put("INT_NO",       this.intNo);
-//        param.put("INT_NM",       this.intName);
-//        param.put("INT_TYPE",     this.intType);
-//        param.put("INT_LCTYPE",   this.intLcType);
-//        param.put("INT_LAMPTYPE", this.intLampType == 1 ? 4 : 3);
-//        param.put("MAIN_INTNO",   this.mainLcNo);
-//        param.put("GROUP_NO",     this.saNo);
-//        param.put("X_COORD",      this.intLng);
-//        param.put("Y_COORD",      this.intLat);
-//        param.put("NODE_ID",      this.intNodeId);
+        param.put("REGION_CD",      regionCd);
+        param.put("INT_NO",         this.intNo);
+        param.put("PLAN_DY",        this.weekNo+1);     // 계획 요일(1~7, 1:일요일,2:월요일...7:토요일)
+        param.put("INT_PLAN_DY",    this.intWPlan);
         return param;
     }
 }

+ 81 - 9
src/main/java/com/ggits/etlp/server/service/GgitsEtlpService.java

@@ -69,11 +69,11 @@ public class GgitsEtlpService {
 
         initEtlp();
 
-        //교차로구성_연계, SCS_T_CON_INTLC
-        etlpIntLc();
+//        //교차로구성_연계, SCS_T_CON_INTLC
+//        etlpIntLc();
         //교차로이동류_연계, SCS_T_CON_INTFLOW
-//        etlpIntFlow();
-//        //교차로일계획_연계, SCS_T_CON_INTDPLAN
+        etlpIntFlow();
+        //교차로일계획_연계, SCS_T_CON_INTDPLAN
 //        etlpIntDPlan();
 //        //교차로주간계획_연계, SCS_T_CON_INTWEEK
 //        etlpIntWeek();
@@ -118,6 +118,7 @@ public class GgitsEtlpService {
                         center.getRegionCd(), center.getRegionNm(), intLists.size(), jobLists.size());
 
                 center.getEtlpIntLc().setReadCount(jobLists.size());
+
                 lists = new ArrayList<>();
                 for(TbScsTConIntLc obj: jobLists) {
                     if (obj.getIntName() == null || obj.getIntName().isEmpty()) {
@@ -162,11 +163,14 @@ public class GgitsEtlpService {
     private void etlpIntFlow() {
         Elapsed elapsed = new Elapsed();
         log.info("교차로이동류_연계, SCS_T_CON_INTFLOW START.");
+        List<HashMap<String, Object>> lists = new ArrayList<>();
+
         for (String key : this.centerList) {
             RegionCenter center = this.repo.getCenterMap().get(key);
             if (center == null) {
                 continue;
             }
+            int writeCount = 0;
             Elapsed job = new Elapsed();
             EtlpInfo etlp = center.getEtlpFlow();
             etlp.setSuccess(false);
@@ -177,9 +181,21 @@ public class GgitsEtlpService {
                         center.getRegionCd(), center.getRegionNm(), center.getMinNodeId(), center.getMaxNodeId());
                 List<TbScsTConIntFlow> result = this.gitsMapper.selectScsTConIntFlow(center);
                 etlp.setReadCount(result.size());
-                for(TbScsTConIntFlow obj: result) {
 
+                lists = new ArrayList<>();
+                for(TbScsTConIntFlow obj: result) {
+                    HashMap<String, Object> param = obj.toSig(center.getRegionCd());
+                    lists.add(param);
+                    log.info("{}", param);
+                    if (lists.size() >= BatchDaoService.MAX_BATCH_SIZE) {
+                        writeCount += this.dao.updateTbIntFlow(lists);
+                        lists = new ArrayList<>();
+                    }
+                }
+                if (!lists.isEmpty()) {
+                    writeCount += this.dao.updateTbIntFlow(lists);
                 }
+                etlp.setWriteCount(writeCount);
                 etlp.setSuccess(true);
                 log.info("교차로이동류_연계, SCS_T_CON_INTFLOW ..END. {}, {}, {} EA. {} ms.",
                         center.getRegionCd(), center.getRegionNm(), result.size(), job.milliSeconds());
@@ -200,11 +216,14 @@ public class GgitsEtlpService {
     private void etlpIntDPlan() {
         Elapsed elapsed = new Elapsed();
         log.info("교차로일계획_연계, SCS_T_CON_INTDPLAN START.");
+        List<HashMap<String, Object>> lists = new ArrayList<>();
+
         for (String key : this.centerList) {
             RegionCenter center = this.repo.getCenterMap().get(key);
             if (center == null) {
                 continue;
             }
+            int writeCount = 0;
             Elapsed job = new Elapsed();
             EtlpInfo etlp = center.getEtlpDPlan();
             etlp.setSuccess(false);
@@ -215,9 +234,20 @@ public class GgitsEtlpService {
                         center.getRegionCd(), center.getRegionNm(), center.getMinNodeId(), center.getMaxNodeId());
                 List<TbScsTConIntDPlan> result = this.gitsMapper.selectScsTConIntDPlan(center);
                 etlp.setReadCount(result.size());
-                for(TbScsTConIntDPlan obj: result) {
 
+                lists = new ArrayList<>();
+                for(TbScsTConIntDPlan obj: result) {
+                    HashMap<String, Object> param = obj.toSig(center.getRegionCd());
+                    lists.add(param);
+                    if (lists.size() >= BatchDaoService.MAX_BATCH_SIZE) {
+                        writeCount += this.dao.updateTbIntOperPlan(lists);
+                        lists = new ArrayList<>();
+                    }
+                }
+                if (!lists.isEmpty()) {
+                    writeCount += this.dao.updateTbIntOperPlan(lists);
                 }
+                etlp.setWriteCount(writeCount);
                 etlp.setSuccess(true);
                 log.info("교차로일계획_연계, SCS_T_CON_INTDPLAN ..END. {}, {}, {} EA. {} ms.",
                         center.getRegionCd(), center.getRegionNm(), result.size(), job.milliSeconds());
@@ -238,11 +268,14 @@ public class GgitsEtlpService {
     private void etlpIntWeek() {
         Elapsed elapsed = new Elapsed();
         log.info("교차로주간계획_연계, SCS_T_CON_INTWEEK START.");
+        List<HashMap<String, Object>> lists = new ArrayList<>();
+
         for (String key : this.centerList) {
             RegionCenter center = this.repo.getCenterMap().get(key);
             if (center == null) {
                 continue;
             }
+            int writeCount = 0;
             Elapsed job = new Elapsed();
             EtlpInfo etlp = center.getEtlpWeek();
             etlp.setSuccess(false);
@@ -253,9 +286,20 @@ public class GgitsEtlpService {
                         center.getRegionCd(), center.getRegionNm(), center.getMinNodeId(), center.getMaxNodeId());
                 List<TbScsTConIntWeek> result = this.gitsMapper.selectScsTConIntWeek(center);
                 etlp.setReadCount(result.size());
-                for(TbScsTConIntWeek obj: result) {
 
+                lists = new ArrayList<>();
+                for(TbScsTConIntWeek obj: result) {
+                    HashMap<String, Object> param = obj.toSig(center.getRegionCd());
+                    lists.add(param);
+                    if (lists.size() >= BatchDaoService.MAX_BATCH_SIZE) {
+                        writeCount += this.dao.updateTbIntDyPlan(lists);
+                        lists = new ArrayList<>();
+                    }
                 }
+                if (!lists.isEmpty()) {
+                    writeCount += this.dao.updateTbIntDyPlan(lists);
+                }
+                etlp.setWriteCount(writeCount);
                 etlp.setSuccess(true);
                 log.info("교차로주간계획_연계, SCS_T_CON_INTWEEK ..END. {}, {}, {} EA. {} ms.",
                         center.getRegionCd(), center.getRegionNm(), result.size(), job.milliSeconds());
@@ -276,11 +320,14 @@ public class GgitsEtlpService {
     private void etlpIntFPlan() {
         Elapsed elapsed = new Elapsed();
         log.info("교차로예약계획_연계, SCS_T_CON_INTFPLAN START.");
+        List<HashMap<String, Object>> lists = new ArrayList<>();
+
         for (String key : this.centerList) {
             RegionCenter center = this.repo.getCenterMap().get(key);
             if (center == null) {
                 continue;
             }
+            int writeCount = 0;
             Elapsed job = new Elapsed();
             EtlpInfo etlp = center.getEtlpFPlan();
             etlp.setSuccess(false);
@@ -291,9 +338,20 @@ public class GgitsEtlpService {
                         center.getRegionCd(), center.getRegionNm(), center.getMinNodeId(), center.getMaxNodeId());
                 List<TbScsTConIntFPlan> result = this.gitsMapper.selectScsTConIntFPlan(center);
                 etlp.setReadCount(result.size());
-                for(TbScsTConIntFPlan obj: result) {
 
+                lists = new ArrayList<>();
+                for(TbScsTConIntFPlan obj: result) {
+                    HashMap<String, Object> param = obj.toSig(center.getRegionCd());
+                    lists.add(param);
+                    if (lists.size() >= BatchDaoService.MAX_BATCH_SIZE) {
+                        writeCount += this.dao.updateTbIntResrvPlan(lists);
+                        lists = new ArrayList<>();
+                    }
                 }
+                if (!lists.isEmpty()) {
+                    writeCount += this.dao.updateTbIntResrvPlan(lists);
+                }
+                etlp.setWriteCount(writeCount);
                 etlp.setSuccess(true);
                 log.info("교차로예약계획_연계, SCS_T_CON_INTFPLAN ..END. {}, {}, {} EA. {} ms.",
                         center.getRegionCd(), center.getRegionNm(), result.size(), job.milliSeconds());
@@ -314,11 +372,14 @@ public class GgitsEtlpService {
     private void etlpIntSigmap() {
         Elapsed elapsed = new Elapsed();
         log.info("교차로시그널맵_연계, SCS_T_CON_INTSIGMAP START.");
+        List<HashMap<String, Object>> lists = new ArrayList<>();
+
         for (String key : this.centerList) {
             RegionCenter center = this.repo.getCenterMap().get(key);
             if (center == null) {
                 continue;
             }
+            int writeCount = 0;
             Elapsed job = new Elapsed();
             EtlpInfo etlp = center.getEtlpSigmap();
             etlp.setSuccess(false);
@@ -329,9 +390,20 @@ public class GgitsEtlpService {
                         center.getRegionCd(), center.getRegionNm(), center.getMinNodeId(), center.getMaxNodeId());
                 List<TbScsTConIntSigmap> result = this.gitsMapper.selectScsTConIntSigmap(center);
                 etlp.setReadCount(result.size());
-                for(TbScsTConIntSigmap obj: result) {
 
+                lists = new ArrayList<>();
+                for(TbScsTConIntSigmap obj: result) {
+                    HashMap<String, Object> param = obj.toSig(center.getRegionCd());
+                    lists.add(param);
+                    if (lists.size() >= BatchDaoService.MAX_BATCH_SIZE) {
+                        writeCount += this.dao.updateTbIntSignalMap(lists);
+                        lists = new ArrayList<>();
+                    }
+                }
+                if (!lists.isEmpty()) {
+                    writeCount += this.dao.updateTbIntSignalMap(lists);
                 }
+                etlp.setWriteCount(writeCount);
                 etlp.setSuccess(true);
                 log.info("교차로시그널맵_연계, SCS_T_CON_INTSIGMAP ..END. {}, {}, {} EA. {} ms.",
                         center.getRegionCd(), center.getRegionNm(), result.size(), job.milliSeconds());

+ 76 - 76
src/main/resources/mybatis/mapper/ggits/ggtisMapper.xml

@@ -25,19 +25,19 @@
 
     <select id="selectScsTConIntFlow" parameterType="com.ggits.etlp.server.dto.RegionCenter" resultType="com.ggits.etlp.server.entity.ggits.TbScsTConIntFlow" fetchSize="1024">
         <![CDATA[
-        SELECT A.int_lcno     as intLcNo,
+        SELECT A.int_lcno             as intLcNo,
                MOD(A.int_lcno, 10000) as intNo,
-               A.int_planclss as intPlanClss,
-               A.int_ring     as intRing,
-               A.int_phaseno  as intPhaseNo,
-               A.update_date  as updateDate,
-               A.flow_no      as flowNo,
-               A.flow_s_lng   as flowSLng,
-               A.flow_s_lat   as flowSLat,
-               A.flow_m_lng   as flowMLng,
-               A.flow_m_lat   as flowMLat,
-               A.flow_e_lng   as flowELng,
-               A.flow_e_lat   as flowELat
+               A.int_planclss         as intPlanClss,
+               A.int_ring             as intRing,
+               A.int_phaseno          as intPhaseNo,
+               A.update_date          as updateDate,
+               A.flow_no              as flowNo,
+               A.flow_s_lng           as flowSLng,
+               A.flow_s_lat           as flowSLat,
+               A.flow_m_lng           as flowMLng,
+               A.flow_m_lat           as flowMLat,
+               A.flow_e_lng           as flowELng,
+               A.flow_e_lat           as flowELat
         FROM SCS_T_CON_INTFLOW A
         WHERE A.int_lcno BETWEEN #{obj.minNodeId} AND #{obj.maxNodeId}
         ]]>
@@ -45,31 +45,31 @@
 
     <select id="selectScsTConIntDPlan" parameterType="com.ggits.etlp.server.dto.RegionCenter" resultType="com.ggits.etlp.server.entity.ggits.TbScsTConIntDPlan" fetchSize="1024">
         <![CDATA[
-        SELECT A.int_lcno       as intLcNo,
+        SELECT A.int_lcno             as intLcNo,
                MOD(A.int_lcno, 10000) as intNo,
-               A.int_dplan      as intDPlan,
-               A.int_dplanindex as intDPlanIndex,
-               A.update_date    as updateDate,
-               A.int_shour      as intSHour,
-               A.int_smin       as intSMin,
-               A.int_cycle      as intCycle,
-               A.int_offset     as intOffset,
-               A.int_asplit1    as intASplit1,
-               A.int_asplit2    as intASplit2,
-               A.int_asplit3    as intASplit3,
-               A.int_asplit4    as intASplit4,
-               A.int_asplit5    as intASplit5,
-               A.int_asplit6    as intASplit6,
-               A.int_asplit7    as intASplit7,
-               A.int_asplit8    as intASplit8,
-               A.int_bsplit1    as intBSplit1,
-               A.int_bsplit2    as intBSplit2,
-               A.int_bsplit3    as intBSplit3,
-               A.int_bsplit4    as intBSplit4,
-               A.int_bsplit5    as intBSplit5,
-               A.int_bsplit6    as intBSplit6,
-               A.int_bsplit7    as intBSplit7,
-               A.int_bsplit8    as intBSplit8
+               A.int_dplan            as intDPlan,
+               A.int_dplanindex       as intDPlanIndex,
+               A.update_date          as updateDate,
+               A.int_shour            as intSHour,
+               A.int_smin             as intSMin,
+               A.int_cycle            as intCycle,
+               A.int_offset           as intOffset,
+               A.int_asplit1          as intASplit1,
+               A.int_asplit2          as intASplit2,
+               A.int_asplit3          as intASplit3,
+               A.int_asplit4          as intASplit4,
+               A.int_asplit5          as intASplit5,
+               A.int_asplit6          as intASplit6,
+               A.int_asplit7          as intASplit7,
+               A.int_asplit8          as intASplit8,
+               A.int_bsplit1          as intBSplit1,
+               A.int_bsplit2          as intBSplit2,
+               A.int_bsplit3          as intBSplit3,
+               A.int_bsplit4          as intBSplit4,
+               A.int_bsplit5          as intBSplit5,
+               A.int_bsplit6          as intBSplit6,
+               A.int_bsplit7          as intBSplit7,
+               A.int_bsplit8          as intBSplit8
         FROM SCS_T_CON_INTDPLAN A
         WHERE A.int_lcno BETWEEN #{obj.minNodeId} AND #{obj.maxNodeId}
         ]]>
@@ -77,11 +77,11 @@
 
     <select id="selectScsTConIntWeek" parameterType="com.ggits.etlp.server.dto.RegionCenter" resultType="com.ggits.etlp.server.entity.ggits.TbScsTConIntWeek" fetchSize="1024">
         <![CDATA[
-        SELECT A.int_lcno    as intLcNo,
+        SELECT A.int_lcno             as intLcNo,
                MOD(A.int_lcno, 10000) as intNo,
-               A.week_no     as weekNo,
-               A.update_date as updateDate,
-               A.int_wplan   as intWPlan
+               A.week_no              as weekNo,
+               A.update_date          as updateDate,
+               A.int_wplan            as intWPlan
         FROM SCS_T_CON_INTWEEK A
         WHERE A.int_lcno BETWEEN #{obj.minNodeId} AND #{obj.maxNodeId}
         ]]>
@@ -89,19 +89,19 @@
 
     <select id="selectScsTConIntFPlan" parameterType="com.ggits.etlp.server.dto.RegionCenter" resultType="com.ggits.etlp.server.entity.ggits.TbScsTConIntFPlan" fetchSize="1024">
         <![CDATA[
-        SELECT A.int_lcno          as intLcNo,
+        SELECT A.int_lcno             as intLcNo,
                MOD(A.int_lcno, 10000) as intNo,
-               A.int_fplanindex    as intFPlanIndex,
-               A.update_date       as updateDate,
-               A.int_rsrvmonth     as intRsrvMonth,
-               A.int_rsrvday       as intRsrvDay,
-               A.int_rsrvwkd       as intRsrvWkd,
-               A.int_cntlstarthour as intCntlStartHour,
-               A.int_cntlstartmin  as intCntlStartMin,
-               A.int_cntlendhour   as intCntlEndHout,
-               A.int_cntlendmin    as intCntlEndMin,
-               A.int_cntltype      as intCntlType,
-               A.int_cntlspcno     as intCntlSpCno
+               A.int_fplanindex       as intFPlanIndex,
+               A.update_date          as updateDate,
+               A.int_rsrvmonth        as intRsrvMonth,
+               A.int_rsrvday          as intRsrvDay,
+               A.int_rsrvwkd          as intRsrvWkd,
+               A.int_cntlstarthour    as intCntlStartHour,
+               A.int_cntlstartmin     as intCntlStartMin,
+               A.int_cntlendhour      as intCntlEndHout,
+               A.int_cntlendmin       as intCntlEndMin,
+               A.int_cntltype         as intCntlType,
+               A.int_cntlspcno        as intCntlSpcNo
         FROM SCS_T_CON_INTFPLAN A
         WHERE A.int_lcno BETWEEN #{obj.minNodeId} AND #{obj.maxNodeId}
         ]]>
@@ -109,31 +109,31 @@
 
     <select id="selectScsTConIntSigmap" parameterType="com.ggits.etlp.server.dto.RegionCenter" resultType="com.ggits.etlp.server.entity.ggits.TbScsTConIntSigmap" fetchSize="1024">
         <![CDATA[
-        SELECT A.int_lcno     as intLcNo,
+        SELECT A.int_lcno             as intLcNo,
                MOD(A.int_lcno, 10000) as intNo,
-               A.int_planclss as intPlanClss,
-               A.int_ring     as intRing,
-               A.int_stepno   as intStepNo,
-               A.update_date  as updateDate,
-               A.int_veh1     as intVeh1,
-               A.int_ped1     as intPed1,
-               A.int_veh2     as intVeh2,
-               A.int_ped2     as intPed2,
-               A.int_veh3     as intVeh3,
-               A.int_ped3     as intPed3,
-               A.int_veh4     as intVeh4,
-               A.int_ped4     as intPed4,
-               A.int_veh5     as intVeh5,
-               A.int_ped5     as intPed5,
-               A.int_veh6     as intVeh6,
-               A.int_ped6     as intPed6,
-               A.int_veh7     as intVeh7,
-               A.int_ped7     as intPed7,
-               A.int_veh8     as intVeh8,
-               A.int_ped8     as intPed8,
-               A.int_minsplit as intMinSplit,
-               A.int_maxsplit as intMaxSplit,
-               A.int_eop      as intEop
+               A.int_planclss         as intPlanClss,
+               A.int_ring             as intRing,
+               A.int_stepno           as intStepNo,
+               A.update_date          as updateDate,
+               A.int_veh1             as intVeh1,
+               A.int_ped1             as intPed1,
+               A.int_veh2             as intVeh2,
+               A.int_ped2             as intPed2,
+               A.int_veh3             as intVeh3,
+               A.int_ped3             as intPed3,
+               A.int_veh4             as intVeh4,
+               A.int_ped4             as intPed4,
+               A.int_veh5             as intVeh5,
+               A.int_ped5             as intPed5,
+               A.int_veh6             as intVeh6,
+               A.int_ped6             as intPed6,
+               A.int_veh7             as intVeh7,
+               A.int_ped7             as intPed7,
+               A.int_veh8             as intVeh8,
+               A.int_ped8             as intPed8,
+               A.int_minsplit         as intMinSplit,
+               A.int_maxsplit         as intMaxSplit,
+               A.int_eop              as intEop
         FROM SCS_T_CON_INTSIGMAP A
         WHERE A.int_lcno BETWEEN #{obj.minNodeId} AND #{obj.maxNodeId}
         ]]>

+ 356 - 26
src/main/resources/mybatis/mapper/sig/SigMapper.xml

@@ -106,53 +106,383 @@
         ]]>
     </update>
 
-    <update id="updateTbIntPhase" parameterType="java.util.Map">
+    <update id="updateTbIntFlow" parameterType="java.util.Map">
     <![CDATA[
-        UPDATE TB_INT_PLAN
-        SET UPD_DTIME = SYSDATE
-        WHERE REGION_CD   = #{REGION_CD}
-          AND INT_NO      = #{INT_NO}
-          AND INT_PLAN_NO = #{INT_PLAN_NO}
+        MERGE INTO TB_INT_FLOW L
+            USING (SELECT
+                       #{REGION_CD}  AS REGION_CD,
+                       #{INT_NO}     AS INT_NO,
+                       #{MAP_NO}     AS MAP_NO,
+                       #{RING_NO}    AS RING_NO,
+                       #{PHASE_NO}   AS PHASE_NO,
+                       #{FLOW_NO}    AS FLOW_NO,
+                       #{FLOW_S_LAT} AS FLOW_S_LAT,
+                       #{FLOW_S_LNG} AS FLOW_S_LNG,
+                       #{FLOW_M_LAT} AS FLOW_M_LAT,
+                       #{FLOW_M_LNG} AS FLOW_M_LNG,
+                       #{FLOW_E_LAT} AS FLOW_E_LAT,
+                       #{FLOW_E_LNG} AS FLOW_E_LNG,
+                       SYSDATE       AS COLLCT_DTIME
+                   FROM DUAL) M
+            ON (    L.REGION_CD = M.REGION_CD
+                AND L.INT_NO    = M.INT_NO
+                AND L.MAP_NO    = M.MAP_NO
+                AND L.RING_NO   = M.RING_NO
+                AND L.PHASE_NO  = M.PHASE_NO
+                )
+            WHEN MATCHED THEN
+                UPDATE SET
+                    L.FLOW_NO      = M.FLOW_NO,
+                    L.FLOW_S_LAT   = M.FLOW_S_LAT,
+                    L.FLOW_S_LNG   = M.FLOW_S_LNG,
+                    L.FLOW_M_LAT   = M.FLOW_M_LAT,
+                    L.FLOW_M_LNG   = M.FLOW_M_LNG,
+                    L.FLOW_E_LAT   = M.FLOW_E_LAT,
+                    L.FLOW_E_LNG   = M.FLOW_E_LNG,
+                    L.COLLCT_DTIME = M.COLLCT_DTIME
+            WHEN NOT MATCHED THEN
+                INSERT (
+                        REGION_CD,
+                        INT_NO,
+                        MAP_NO,
+                        RING_NO,
+                        PHASE_NO,
+                        FLOW_NO,
+                        FLOW_S_LAT,
+                        FLOW_S_LNG,
+                        FLOW_M_LAT,
+                        FLOW_M_LNG,
+                        FLOW_E_LAT,
+                        FLOW_E_LNG,
+                        COLLCT_DTIME  )
+                    VALUES (
+                               M.REGION_CD,
+                               M.INT_NO,
+                               M.MAP_NO,
+                               M.RING_NO,
+                               M.PHASE_NO,
+                               M.FLOW_NO,
+                               M.FLOW_S_LAT,
+                               M.FLOW_S_LNG,
+                               M.FLOW_M_LAT,
+                               M.FLOW_M_LNG,
+                               M.FLOW_E_LAT,
+                               M.FLOW_E_LNG,
+                               M.COLLCT_DTIME )
         ]]>
     </update>
 
     <update id="updateTbIntOperPlan" parameterType="java.util.Map">
     <![CDATA[
-        UPDATE TB_INT_PLAN
-        SET UPD_DTIME = SYSDATE
-        WHERE REGION_CD   = #{REGION_CD}
-          AND INT_NO      = #{INT_NO}
-          AND INT_PLAN_NO = #{INT_PLAN_NO}
+        MERGE INTO TB_INT_OPER_PLAN L
+            USING (SELECT
+                       #{REGION_CD}           AS REGION_CD,
+                       #{INT_NO}              AS INT_NO,
+                       #{INT_PLAN_NO}         AS INT_PLAN_NO,
+                       #{INT_PLAN_IDX_NO}     AS INT_PLAN_IDX_NO,
+                       #{OPER_PLAN_HH}        AS OPER_PLAN_HH,
+                       #{OPER_PLAN_MI}        AS OPER_PLAN_MI,
+                       #{INT_OPER_CYCLE_VAL}  AS INT_OPER_CYCLE_VAL,
+                       #{INT_OPER_OFFSET_VAL} AS INT_OPER_OFFSET_VAL,
+                       #{A_RING_1_PHASE_VAL}  AS A_RING_1_PHASE_VAL,
+                       #{A_RING_2_PHASE_VAL}  AS A_RING_2_PHASE_VAL,
+                       #{A_RING_3_PHASE_VAL}  AS A_RING_3_PHASE_VAL,
+                       #{A_RING_4_PHASE_VAL}  AS A_RING_4_PHASE_VAL,
+                       #{A_RING_5_PHASE_VAL}  AS A_RING_5_PHASE_VAL,
+                       #{A_RING_6_PHASE_VAL}  AS A_RING_6_PHASE_VAL,
+                       #{A_RING_7_PHASE_VAL}  AS A_RING_7_PHASE_VAL,
+                       #{A_RING_8_PHASE_VAL}  AS A_RING_8_PHASE_VAL,
+                       #{B_RING_1_PHASE_VAL}  AS B_RING_1_PHASE_VAL,
+                       #{B_RING_2_PHASE_VAL}  AS B_RING_2_PHASE_VAL,
+                       #{B_RING_3_PHASE_VAL}  AS B_RING_3_PHASE_VAL,
+                       #{B_RING_4_PHASE_VAL}  AS B_RING_4_PHASE_VAL,
+                       #{B_RING_5_PHASE_VAL}  AS B_RING_5_PHASE_VAL,
+                       #{B_RING_6_PHASE_VAL}  AS B_RING_6_PHASE_VAL,
+                       #{B_RING_7_PHASE_VAL}  AS B_RING_7_PHASE_VAL,
+                       #{B_RING_8_PHASE_VAL}  AS B_RING_8_PHASE_VAL
+                   FROM DUAL) M
+            ON (    L.REGION_CD       = M.REGION_CD
+                AND L.INT_NO          = M.INT_NO
+                AND L.INT_PLAN_NO     = M.INT_PLAN_NO
+                AND L.INT_PLAN_IDX_NO = M.INT_PLAN_IDX_NO
+                )
+            WHEN MATCHED THEN
+                UPDATE SET
+                    L.OPER_PLAN_HH        = M.OPER_PLAN_HH,
+                    L.OPER_PLAN_MI        = M.OPER_PLAN_MI,
+                    L.INT_OPER_CYCLE_VAL  = M.INT_OPER_CYCLE_VAL,
+                    L.INT_OPER_OFFSET_VAL = M.INT_OPER_OFFSET_VAL,
+                    L.A_RING_1_PHASE_VAL  = M.A_RING_1_PHASE_VAL,
+                    L.A_RING_2_PHASE_VAL  = M.A_RING_2_PHASE_VAL,
+                    L.A_RING_3_PHASE_VAL  = M.A_RING_3_PHASE_VAL,
+                    L.A_RING_4_PHASE_VAL  = M.A_RING_4_PHASE_VAL,
+                    L.A_RING_5_PHASE_VAL  = M.A_RING_5_PHASE_VAL,
+                    L.A_RING_6_PHASE_VAL  = M.A_RING_6_PHASE_VAL,
+                    L.A_RING_7_PHASE_VAL  = M.A_RING_7_PHASE_VAL,
+                    L.A_RING_8_PHASE_VAL  = M.A_RING_8_PHASE_VAL,
+                    L.B_RING_1_PHASE_VAL  = M.B_RING_1_PHASE_VAL,
+                    L.B_RING_2_PHASE_VAL  = M.B_RING_2_PHASE_VAL,
+                    L.B_RING_3_PHASE_VAL  = M.B_RING_3_PHASE_VAL,
+                    L.B_RING_4_PHASE_VAL  = M.B_RING_4_PHASE_VAL,
+                    L.B_RING_5_PHASE_VAL  = M.B_RING_5_PHASE_VAL,
+                    L.B_RING_6_PHASE_VAL  = M.B_RING_6_PHASE_VAL,
+                    L.B_RING_7_PHASE_VAL  = M.B_RING_7_PHASE_VAL,
+                    L.B_RING_8_PHASE_VAL  = M.B_RING_8_PHASE_VAL
+            WHEN NOT MATCHED THEN
+                INSERT (
+                        REGION_CD,
+                        INT_NO,
+                        INT_PLAN_NO,
+                        INT_PLAN_IDX_NO,
+                        OPER_PLAN_HH,
+                        OPER_PLAN_MI,
+                        INT_OPER_CYCLE_VAL,
+                        INT_OPER_OFFSET_VAL,
+                        A_RING_1_PHASE_VAL,
+                        A_RING_2_PHASE_VAL,
+                        A_RING_3_PHASE_VAL,
+                        A_RING_4_PHASE_VAL,
+                        A_RING_5_PHASE_VAL,
+                        A_RING_6_PHASE_VAL,
+                        A_RING_7_PHASE_VAL,
+                        A_RING_8_PHASE_VAL,
+                        B_RING_1_PHASE_VAL,
+                        B_RING_2_PHASE_VAL,
+                        B_RING_3_PHASE_VAL,
+                        B_RING_4_PHASE_VAL,
+                        B_RING_5_PHASE_VAL,
+                        B_RING_6_PHASE_VAL,
+                        B_RING_7_PHASE_VAL,
+                        B_RING_8_PHASE_VAL )
+                    VALUES (
+                               M.REGION_CD,
+                               M.INT_NO,
+                               M.INT_PLAN_NO,
+                               M.INT_PLAN_IDX_NO,
+                               M.OPER_PLAN_HH,
+                               M.OPER_PLAN_MI,
+                               M.INT_OPER_CYCLE_VAL,
+                               M.INT_OPER_OFFSET_VAL,
+                               M.A_RING_1_PHASE_VAL,
+                               M.A_RING_2_PHASE_VAL,
+                               M.A_RING_3_PHASE_VAL,
+                               M.A_RING_4_PHASE_VAL,
+                               M.A_RING_5_PHASE_VAL,
+                               M.A_RING_6_PHASE_VAL,
+                               M.A_RING_7_PHASE_VAL,
+                               M.A_RING_8_PHASE_VAL,
+                               M.B_RING_1_PHASE_VAL,
+                               M.B_RING_2_PHASE_VAL,
+                               M.B_RING_3_PHASE_VAL,
+                               M.B_RING_4_PHASE_VAL,
+                               M.B_RING_5_PHASE_VAL,
+                               M.B_RING_6_PHASE_VAL,
+                               M.B_RING_7_PHASE_VAL,
+                               M.B_RING_8_PHASE_VAL )
         ]]>
     </update>
 
     <update id="updateTbIntDyPlan" parameterType="java.util.Map">
     <![CDATA[
-        UPDATE TB_INT_PLAN
-        SET UPD_DTIME = SYSDATE
-        WHERE REGION_CD   = #{REGION_CD}
-          AND INT_NO      = #{INT_NO}
-          AND INT_PLAN_NO = #{INT_PLAN_NO}
+        MERGE INTO TB_INT_DY_PLAN L
+            USING (SELECT
+                       #{REGION_CD}     AS REGION_CD,
+                       #{INT_NO}        AS INT_NO,
+                       #{PLAN_DY}       AS PLAN_DY,
+                       #{INT_PLAN_DY}   AS INT_PLAN_DY,
+                       SYSDATE          AS COLLCT_DTIME
+                   FROM DUAL) M
+            ON (L.REGION_CD = M.REGION_CD AND L.INT_NO = M.INT_NO AND L.PLAN_DY = M.PLAN_DY)
+            WHEN MATCHED THEN
+                UPDATE SET
+                    L.INT_PLAN_DY   = M.INT_PLAN_DY,
+                    L.COLLCT_DTIME  = M.COLLCT_DTIME
+            WHEN NOT MATCHED THEN
+                INSERT (
+                        REGION_CD,
+                        INT_NO,
+                        PLAN_DY,
+                        INT_PLAN_DY,
+                        COLLCT_DTIME )
+                    VALUES (
+                               M.REGION_CD,
+                               M.INT_NO,
+                               M.PLAN_DY,
+                               M.INT_PLAN_DY,
+                               M.COLLCT_DTIME )
         ]]>
     </update>
 
     <update id="updateTbIntResrvPlan" parameterType="java.util.Map">
     <![CDATA[
-        UPDATE TB_INT_PLAN
-        SET UPD_DTIME = SYSDATE
-        WHERE REGION_CD   = #{REGION_CD}
-          AND INT_NO      = #{INT_NO}
-          AND INT_PLAN_NO = #{INT_PLAN_NO}
+        MERGE INTO TB_INT_RESRV_PLAN L
+            USING (SELECT
+                       #{REGION_CD}       AS REGION_CD,
+                       #{INT_NO}          AS INT_NO,
+                       #{RESRV_NO}        AS RESRV_NO,
+                       #{RESRV_MM}        AS RESRV_MM,
+                       #{RESRV_DD}        AS RESRV_DD,
+                       #{RESRV_DY}        AS RESRV_DY,
+                       #{RESRV_STRT_HH}   AS RESRV_STRT_HH,
+                       #{RESRV_STRT_MI}   AS RESRV_STRT_MI,
+                       #{RESRV_END_HH}    AS RESRV_END_HH,
+                       #{RESRV_END_MI}    AS RESRV_END_MI,
+                       #{RESRV_CONTRL_CD} AS RESRV_CONTRL_CD,
+                       #{RESRV_PLAN_NO}   AS RESRV_PLAN_NO,
+                       SYSDATE            AS COLLCT_DTIME
+                   FROM DUAL) M
+            ON (L.REGION_CD = M.REGION_CD AND L.INT_NO = M.INT_NO AND L.RESRV_NO = M.RESRV_NO)
+            WHEN MATCHED THEN
+                UPDATE SET
+                    L.RESRV_MM        = M.RESRV_MM,
+                    L.RESRV_DD        = M.RESRV_DD,
+                    L.RESRV_DY        = M.RESRV_DY,
+                    L.RESRV_STRT_HH   = M.RESRV_STRT_HH,
+                    L.RESRV_STRT_MI   = M.RESRV_STRT_MI,
+                    L.RESRV_END_HH    = M.RESRV_END_HH,
+                    L.RESRV_END_MI    = M.RESRV_END_MI,
+                    L.RESRV_CONTRL_CD = M.RESRV_CONTRL_CD,
+                    L.RESRV_PLAN_NO   = M.RESRV_PLAN_NO,
+                    L.COLLCT_DTIME    = M.COLLCT_DTIME
+            WHEN NOT MATCHED THEN
+                INSERT (
+                        REGION_CD,
+                        INT_NO,
+                        RESRV_NO,
+                        RESRV_MM,
+                        RESRV_DD,
+                        RESRV_DY,
+                        RESRV_STRT_HH,
+                        RESRV_STRT_MI,
+                        RESRV_END_HH,
+                        RESRV_END_MI,
+                        RESRV_CONTRL_CD,
+                        RESRV_PLAN_NO,
+                        COLLCT_DTIME )
+                    VALUES (
+                               M.REGION_CD,
+                               M.INT_NO,
+                               M.RESRV_NO,
+                               M.RESRV_MM,
+                               M.RESRV_DD,
+                               M.RESRV_DY,
+                               M.RESRV_STRT_HH,
+                               M.RESRV_STRT_MI,
+                               M.RESRV_END_HH,
+                               M.RESRV_END_MI,
+                               M.RESRV_CONTRL_CD,
+                               M.RESRV_PLAN_NO,
+                               M.COLLCT_DTIME )
         ]]>
     </update>
 
     <update id="updateTbIntSignalMap" parameterType="java.util.Map">
     <![CDATA[
-        UPDATE TB_INT_PLAN
-        SET UPD_DTIME = SYSDATE
-        WHERE REGION_CD   = #{REGION_CD}
-          AND INT_NO      = #{INT_NO}
-          AND INT_PLAN_NO = #{INT_PLAN_NO}
+        MERGE INTO TB_INT_SIGNALMAP L
+            USING (SELECT
+                       #{REGION_CD} AS REGION_CD,
+                       #{INT_NO}    AS INT_NO,
+                       #{RING_NO}   AS RING_NO,
+                       #{PLAN_TP}   AS PLAN_TP,
+                       #{STEP_NO}   AS STEP_NO,
+                       #{CAR1}      AS CAR1,
+                       #{PED1}      AS PED1,
+                       #{CAR2}      AS CAR2,
+                       #{PED2}      AS PED2,
+                       #{CAR3}      AS CAR3,
+                       #{PED3}      AS PED3,
+                       #{CAR4}      AS CAR4,
+                       #{PED4}      AS PED4,
+                       #{CAR5}      AS CAR5,
+                       #{PED5}      AS PED5,
+                       #{CAR6}      AS CAR6,
+                       #{PED6}      AS PED6,
+                       #{CAR7}      AS CAR7,
+                       #{PED7}      AS PED7,
+                       #{CAR8}      AS CAR8,
+                       #{PED8}      AS PED8,
+                       #{MIN_TM}    AS MIN_TM,
+                       #{MAX_TM}    AS MAX_TM,
+                       #{EOP}       AS EOP
+                   FROM DUAL) M
+            ON (    L.REGION_CD = M.REGION_CD
+                AND L.INT_NO    = M.INT_NO
+                AND L.RING_NO   = M.RING_NO
+                AND L.PLAN_TP   = M.PLAN_TP
+                AND L.STEP_NO   = M.STEP_NO
+                )
+            WHEN MATCHED THEN
+                UPDATE SET
+                    L.CAR1      = M.CAR1,
+                    L.PED1      = M.PED1,
+                    L.CAR2      = M.CAR2,
+                    L.PED2      = M.PED2,
+                    L.CAR3      = M.CAR3,
+                    L.PED3      = M.PED3,
+                    L.CAR4      = M.CAR4,
+                    L.PED4      = M.PED4,
+                    L.CAR5      = M.CAR5,
+                    L.PED5      = M.PED5,
+                    L.CAR6      = M.CAR6,
+                    L.PED6      = M.PED6,
+                    L.CAR7      = M.CAR7,
+                    L.PED7      = M.PED7,
+                    L.CAR8      = M.CAR8,
+                    L.PED8      = M.PED8,
+                    L.MIN_TM    = M.MIN_TM,
+                    L.MAX_TM    = M.MAX_TM,
+                    L.EOP       = M.EOP
+            WHEN NOT MATCHED THEN
+                INSERT (
+                        REGION_CD,
+                        INT_NO,
+                        RING_NO,
+                        PLAN_TP,
+                        STEP_NO,
+                        CAR1,
+                        PED1,
+                        CAR2,
+                        PED2,
+                        CAR3,
+                        PED3,
+                        CAR4,
+                        PED4,
+                        CAR5,
+                        PED5,
+                        CAR6,
+                        PED6,
+                        CAR7,
+                        PED7,
+                        CAR8,
+                        PED8,
+                        MIN_TM,
+                        MAX_TM,
+                        EOP )
+                    VALUES (
+                               M.REGION_CD,
+                               M.INT_NO,
+                               M.RING_NO,
+                               M.PLAN_TP,
+                               M.STEP_NO,
+                               M.CAR1,
+                               M.PED1,
+                               M.CAR2,
+                               M.PED2,
+                               M.CAR3,
+                               M.PED3,
+                               M.CAR4,
+                               M.PED4,
+                               M.CAR5,
+                               M.PED5,
+                               M.CAR6,
+                               M.PED6,
+                               M.CAR7,
+                               M.PED7,
+                               M.CAR8,
+                               M.PED8,
+                               M.MIN_TM,
+                               M.MAX_TM,
+                               M.EOP )
         ]]>
     </update>