Selaa lähdekoodia

update pagging processing

shjung 10 kuukautta sitten
vanhempi
commit
cbd77ed727

+ 1 - 1
conf/ggits-etlp-server.pid

@@ -1 +1 @@
-5892
+25048

+ 1 - 0
src/main/java/com/ggits/etlp/server/GgitsEtlpServerApplication.java

@@ -69,6 +69,7 @@ public class GgitsEtlpServerApplication implements CommandLineRunner, Applicatio
     @Override
     public void destroy() throws Exception {
         log.error("Application destroy");
+        System.exit(0);
     }
 
     @Override

+ 2 - 2
src/main/java/com/ggits/etlp/server/common/Elapsed.java

@@ -37,7 +37,7 @@ public class Elapsed {
 		long nanoSeconds = TimeUnit.NANOSECONDS.convert(elapsed, TimeUnit.NANOSECONDS) % 1000;
 
 		if (seconds > 0) {
-			return String.format("Elapsed: %,d sec. %3d ms. %d us. %3d ns.", seconds, miliSeconds, microSeconds, nanoSeconds);
+			return String.format("Elapsed: %,d sec. %3d ms. %3d us. %3d ns.", seconds, miliSeconds, microSeconds, nanoSeconds);
 		}
 		if (miliSeconds > 0) {
 			return String.format("Elapsed: %3d ms. %3d us. %3d ns.", miliSeconds, microSeconds, nanoSeconds);
@@ -55,7 +55,7 @@ public class Elapsed {
 		long nanoSeconds = TimeUnit.NANOSECONDS.convert(elapsed, TimeUnit.NANOSECONDS) % 1000;
 
 		if (seconds > 0) {
-			return String.format("Elapsed: %,d sec. %3d ms. %d us. %3d ns.", seconds, miliSeconds, microSeconds, nanoSeconds);
+			return String.format("Elapsed: %,d sec. %3d ms. %3d us. %3d ns.", seconds, miliSeconds, microSeconds, nanoSeconds);
 		}
 		if (miliSeconds > 0) {
 			return String.format("Elapsed: %3d ms. %3d us. %3d ns.", miliSeconds, microSeconds, nanoSeconds);

+ 10 - 1
src/main/java/com/ggits/etlp/server/common/TimeUtils.java

@@ -17,6 +17,15 @@ public class TimeUtils {
 
     private TimeUtils() {}
 
+    public static void sleep(long delay) {
+        try {
+            TimeUnit.MILLISECONDS.sleep(delay);
+        }
+        catch (InterruptedException e) {
+//            Thread.currentThread().interrupt();
+        }
+    }
+
     public static String elapsedTime(long startTime, long endTime) {
         return elapsedTimeStr(endTime - startTime);
     }
@@ -30,7 +39,7 @@ public class TimeUtils {
         long nanoSeconds = TimeUnit.NANOSECONDS.convert(elapsed, TimeUnit.NANOSECONDS) % 1000;
 
         if (seconds > 0) {
-            return String.format("Elapsed: %,d sec. %3d ms. %d us. %3d ns.", seconds, miliSeconds, microSeconds, nanoSeconds);
+            return String.format("Elapsed: %,d sec. %3d ms. %3d us. %3d ns.", seconds, miliSeconds, microSeconds, nanoSeconds);
         }
         if (miliSeconds > 0) {
             return String.format("Elapsed: %3d ms. %3d us. %3d ns.", miliSeconds, microSeconds, nanoSeconds);

+ 15 - 5
src/main/java/com/ggits/etlp/server/dao/mapper/ggits/GgitsMapper.java

@@ -11,9 +11,19 @@ import java.util.List;
 public interface GgitsMapper {
 
     List<TbScsTConIntLc> selectScsTConIntLc(@Param("obj") RegionCenter obj);
-    List<TbScsTConIntFlow> selectScsTConIntFlow(@Param("obj") RegionCenter obj);
-    List<TbScsTConIntDPlan> selectScsTConIntDPlan(@Param("obj") RegionCenter obj);
-    List<TbScsTConIntWeek> selectScsTConIntWeek(@Param("obj") RegionCenter obj);
-    List<TbScsTConIntFPlan> selectScsTConIntFPlan(@Param("obj") RegionCenter obj);
-    List<TbScsTConIntSigmap> selectScsTConIntSigmap(@Param("obj") RegionCenter obj);
+
+    Integer selectScsTConIntFlowCount(@Param("obj") RegionCenter obj);
+    List<TbScsTConIntFlow> selectScsTConIntFlow(@Param("obj") RegionCenter obj, @Param("fromSeq") Integer fromSeq, @Param("toSeq") Integer toSeq);
+
+    Integer selectScsTConIntDPlanCount(@Param("obj") RegionCenter obj);
+    List<TbScsTConIntDPlan> selectScsTConIntDPlan(@Param("obj") RegionCenter obj, @Param("fromSeq") Integer fromSeq, @Param("toSeq") Integer toSeq);
+
+    Integer selectScsTConIntWeekCount(@Param("obj") RegionCenter obj);
+    List<TbScsTConIntWeek> selectScsTConIntWeek(@Param("obj") RegionCenter obj, @Param("fromSeq") Integer fromSeq, @Param("toSeq") Integer toSeq);
+
+    Integer selectScsTConIntFPlanCount(@Param("obj") RegionCenter obj);
+    List<TbScsTConIntFPlan> selectScsTConIntFPlan(@Param("obj") RegionCenter obj, @Param("fromSeq") Integer fromSeq, @Param("toSeq") Integer toSeq);
+
+    Integer selectScsTConIntSigmapCount(@Param("obj") RegionCenter obj);
+    List<TbScsTConIntSigmap> selectScsTConIntSigmap(@Param("obj") RegionCenter obj, @Param("fromSeq") Integer fromSeq, @Param("toSeq") Integer toSeq);
 }

+ 1 - 0
src/main/java/com/ggits/etlp/server/entity/ggits/TbScsTConIntFlow.java

@@ -75,6 +75,7 @@ public class TbScsTConIntFlow implements Serializable {
         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_TP",    "A");
         param.put("FLOW_S_LAT", this.flowSLat);
         param.put("FLOW_S_LNG", this.flowSLng);
         param.put("FLOW_M_LAT", this.flowMLat);

+ 1 - 0
src/main/java/com/ggits/etlp/server/entity/ggits/TbScsTConIntSigmap.java

@@ -21,6 +21,7 @@ public class TbScsTConIntSigmap implements Serializable {
     */
     private Integer intLcNo;
     private Integer intNo;
+    private Long    rowSeq;
     /**
     * 일반시차제구분
     */

+ 259 - 95
src/main/java/com/ggits/etlp/server/service/GgitsEtlpService.java

@@ -36,6 +36,7 @@ public class GgitsEtlpService {
     private final GgitsMapper gitsMapper;
     private final SigMapper sigMapper;
     private final SigDao dao;
+    private final int MAX_PAGE_COUNT = 50000;
     private List<String> centerList;
 
     @PostConstruct
@@ -65,30 +66,37 @@ public class GgitsEtlpService {
 
     public void run() {
         Elapsed elapsed = new Elapsed();
-        log.info("================================================================================================>");
-        log.info("GGITS DBASE ETLP START.");
+        log.info("************************************************************************************************>");
+        log.info("GGITS DBASE ETLP TO SIG START.");
 
         initEtlp();
 
-//        //교차로구성_연계, SCS_T_CON_INTLC
+        //교차로구성_연계, SCS_T_CON_INTLC
         etlpIntLc();
+
         //교차로이동류_연계, SCS_T_CON_INTFLOW
         etlpIntFlow();
+
         //교차로일계획_연계, SCS_T_CON_INTDPLAN
         etlpIntDPlan();
-//        //교차로주간계획_연계, SCS_T_CON_INTWEEK
+
+        //교차로주간계획_연계, SCS_T_CON_INTWEEK
         etlpIntWeek();
-//        //교차로예약계획_연계, SCS_T_CON_INTFPLAN
+
+        //교차로예약계획_연계, SCS_T_CON_INTFPLAN
         etlpIntFPlan();
-//        //교차로시그널맵_연계, SCS_T_CON_INTSIGMAP
+
+        //교차로시그널맵_연계, SCS_T_CON_INTSIGMAP
         etlpIntSigmap();
-        log.info("GGITS DBASE ETLP ..END: {}", elapsed.elapsedTimeStr());
-        log.info("<================================================================================================");
+
+        log.info("GGITS DBASE ETLP TO SIG ..END: {}", elapsed.elapsedTimeStr());
+        log.info("<************************************************************************************************");
     }
 
     //교차로구성_연계, SCS_T_CON_INTLC
     private void etlpIntLc() {
         Elapsed elapsed = new Elapsed();
+        Elapsed totElapsed = new Elapsed();
         log.info("TB_INT, SCS_T_CON_INTLC START.");
         List<HashMap<String, Object>> lists = new ArrayList<>();
 
@@ -97,6 +105,8 @@ public class GgitsEtlpService {
             if (center == null) {
                 continue;
             }
+            TimeUtils.sleep(500);
+
             int writeCount = 0;
             Elapsed job = new Elapsed();
             EtlpInfo etlp = center.getEtlpIntLc();
@@ -117,8 +127,9 @@ public class GgitsEtlpService {
 
                 List<TbScsTConIntLc> jobLists = this.gitsMapper.selectScsTConIntLc(center);
 
-                log.info("TB_INT, SCS_T_CON_INTLC START. {}, {}, SIG: {} EA, GGITS: {} EA.",
-                        center.getRegionCd(), center.getRegionNm(), intLists.size(), jobLists.size());
+                log.info("TB_INT, SCS_T_CON_INTLC .READ. {}, {}, SIG: {} EA, GGITS: {} EA. {}",
+                        center.getRegionCd(), center.getRegionNm(), intLists.size(), jobLists.size(), job.elapsedTimeStr());
+                job.reset();
 
                 center.getEtlpIntLc().setReadCount(jobLists.size());
 
@@ -146,26 +157,27 @@ public class GgitsEtlpService {
                 }
                 etlp.setWriteCount(writeCount);
                 etlp.setSuccess(true);
-                log.info("TB_INT, SCS_T_CON_INTLC ..END. {}, {}, JOB: {}, WRITE: {} EA. {} ms.",
-                        center.getRegionCd(), center.getRegionNm(), jobLists.size(), writeCount, job.milliSeconds());
+                log.info("TB_INT, SCS_T_CON_INTLC WRITE. {}, {}, {} EA. {}",
+                        center.getRegionCd(), center.getRegionNm(), writeCount, elapsed.elapsedTimeStr());
+                log.info("-------------------------------------------------------------------------------------------------");
             }
             catch (Exception e) {
                 etlp.setSuccess(false);
-                log.error("{}", lists.get(0));
                 log.error("TB_INT, SCS_T_CON_INTLC: {}, {}, Exceptions: {}", center.getRegionCd(), center.getRegionNm(), e.getMessage());
             }
             finally {
-                center.setElapsed(center.getElapsed() + job.milliSeconds());
+                center.setElapsed(center.getElapsed() + elapsed.milliSeconds());
                 MDC.remove(center.getLogKey());
                 MDC.clear();
             }
         }
-        log.info("TB_INT, SCS_T_CON_INTLC ..END: {}", elapsed.elapsedTimeStr());
+        log.info("TB_INT, SCS_T_CON_INTLC ..END: {}", totElapsed.elapsedTimeStr());
     }
 
     //교차로이동류_연계, SCS_T_CON_INTFLOW
     private void etlpIntFlow() {
         Elapsed elapsed = new Elapsed();
+        Elapsed totElapsed = new Elapsed();
         log.info("TB_INT_FLOW, SCS_T_CON_INTFLOW START.");
         List<HashMap<String, Object>> lists = new ArrayList<>();
 
@@ -174,7 +186,11 @@ public class GgitsEtlpService {
             if (center == null) {
                 continue;
             }
+            TimeUtils.sleep(500);
+            elapsed.reset();
+
             int writeCount = 0;
+            int currWriteCount = 0;
             Elapsed job = new Elapsed();
             EtlpInfo etlp = center.getEtlpFlow();
             etlp.setSuccess(false);
@@ -183,42 +199,69 @@ public class GgitsEtlpService {
                 MDC.put("id", center.getLogKey());
                 log.info("TB_INT_FLOW, SCS_T_CON_INTFLOW START. {}, {}, {}, {}",
                         center.getRegionCd(), center.getRegionNm(), center.getMinNodeId(), center.getMaxNodeId());
-                List<TbScsTConIntFlow> result = this.gitsMapper.selectScsTConIntFlow(center);
-                etlp.setReadCount(result.size());
 
-                lists = new ArrayList<>();
-                for(TbScsTConIntFlow obj: result) {
-                    HashMap<String, Object> param = obj.toSig(center.getRegionCd());
-                    lists.add(param);
-                    if (lists.size() >= BatchDaoService.MAX_BATCH_SIZE) {
-                        writeCount += this.dao.updateTbIntFlow(lists);
+                Integer dataCount = this.gitsMapper.selectScsTConIntFlowCount(center);
+                etlp.setReadCount(dataCount);
+                log.info("TB_INT_FLOW, SCS_T_CON_INTFLOW .READ. {}, {}, {} EA. {}",
+                        center.getRegionCd(), center.getRegionNm(), dataCount, job.elapsedTimeStr());
+
+                if (dataCount > 0) {
+                    int fromSeq, toSeq;
+                    int pageCount = (dataCount / MAX_PAGE_COUNT) + 1;
+                    if (0 == (dataCount % MAX_PAGE_COUNT)) {
+                        pageCount--;
+                    }
+                    for (int ii = 0; ii < pageCount; ii++) {
+                        fromSeq = (ii * MAX_PAGE_COUNT);
+                        toSeq = fromSeq + MAX_PAGE_COUNT;
+                        fromSeq++;
+                        List<TbScsTConIntFlow> result = this.gitsMapper.selectScsTConIntFlow(center, fromSeq, toSeq);
+                        log.info("TB_INT_FLOW, SCS_T_CON_INTFLOW .READ. {}, {}, {}. {}",
+                                center.getRegionCd(), center.getRegionNm(), String.format("%6d ~ %6d, %6d EA", fromSeq, toSeq, result.size()), job.elapsedTimeStr());
+                        TimeUtils.sleep(500);
+                        job.reset();
+
                         lists = new ArrayList<>();
+                        currWriteCount = 0;
+                        for(TbScsTConIntFlow obj: result) {
+                            HashMap<String, Object> param = obj.toSig(center.getRegionCd());
+                            lists.add(param);
+                            if (lists.size() >= BatchDaoService.MAX_BATCH_SIZE) {
+                                currWriteCount += this.dao.updateTbIntFlow(lists);
+                                lists = new ArrayList<>();
+                            }
+                        }
+                        if (!lists.isEmpty()) {
+                            currWriteCount += this.dao.updateTbIntFlow(lists);
+                        }
+                        writeCount += currWriteCount;
+                        log.info("TB_INT_FLOW, SCS_T_CON_INTFLOW WRITE. {}, {}, {}. {}",
+                                center.getRegionCd(), center.getRegionNm(), String.format("%6d ~ %6d, %6d EA", fromSeq, toSeq, currWriteCount), job.elapsedTimeStr());
                     }
                 }
-                if (!lists.isEmpty()) {
-                    writeCount += this.dao.updateTbIntFlow(lists);
-                }
                 etlp.setWriteCount(writeCount);
                 etlp.setSuccess(true);
-                log.info("TB_INT_FLOW, SCS_T_CON_INTFLOW ..END. {}, {}, JOB: {}, WRITE: {} EA. {} ms.",
-                        center.getRegionCd(), center.getRegionNm(), result.size(), writeCount, job.milliSeconds());
+                log.info("TB_INT_FLOW, SCS_T_CON_INTFLOW WRITE. {}, {}, {} EA. {}",
+                        center.getRegionCd(), center.getRegionNm(), writeCount, elapsed.elapsedTimeStr());
+                log.info("-------------------------------------------------------------------------------------------------");
             }
             catch (Exception e) {
                 etlp.setSuccess(false);
-                log.error("{}", lists.get(0));
                 log.error("TB_INT_FLOW, SCS_T_CON_INTFLOW: {}, {}, Exceptions: {}", center.getRegionCd(), center.getRegionNm(), e.getMessage());
             }
             finally {
-                center.setElapsed(center.getElapsed() + job.milliSeconds());
+                center.setElapsed(center.getElapsed() + elapsed.milliSeconds());
                 MDC.remove(center.getLogKey());
                 MDC.clear();
             }
         }
-        log.info("TB_INT_FLOW, SCS_T_CON_INTFLOW ..END: {}", elapsed.elapsedTimeStr());
+        log.info("TB_INT_FLOW, SCS_T_CON_INTFLOW ..END: {}", totElapsed.elapsedTimeStr());
     }
+
     //교차로일계획_연계, SCS_T_CON_INTDPLAN
     private void etlpIntDPlan() {
         Elapsed elapsed = new Elapsed();
+        Elapsed totElapsed = new Elapsed();
         log.info("TB_INT_OPER_PLAN, SCS_T_CON_INTDPLAN START.");
         List<HashMap<String, Object>> lists = new ArrayList<>();
 
@@ -227,7 +270,11 @@ public class GgitsEtlpService {
             if (center == null) {
                 continue;
             }
+            TimeUtils.sleep(500);
+            elapsed.reset();
+
             int writeCount = 0;
+            int currWriteCount = 0;
             Elapsed job = new Elapsed();
             EtlpInfo etlp = center.getEtlpDPlan();
             etlp.setSuccess(false);
@@ -236,42 +283,69 @@ public class GgitsEtlpService {
                 MDC.put("id", center.getLogKey());
                 log.info("TB_INT_OPER_PLAN, SCS_T_CON_INTDPLAN START. {}, {}, {}, {}",
                         center.getRegionCd(), center.getRegionNm(), center.getMinNodeId(), center.getMaxNodeId());
-                List<TbScsTConIntDPlan> result = this.gitsMapper.selectScsTConIntDPlan(center);
-                etlp.setReadCount(result.size());
 
-                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);
+                Integer dataCount = this.gitsMapper.selectScsTConIntDPlanCount(center);
+                etlp.setReadCount(dataCount);
+                log.info("TB_INT_OPER_PLAN, SCS_T_CON_INTDPLAN .READ. {}, {}, {} EA. {}",
+                        center.getRegionCd(), center.getRegionNm(), dataCount, job.elapsedTimeStr());
+
+                if (dataCount > 0) {
+                    int fromSeq, toSeq;
+                    int pageCount = (dataCount / MAX_PAGE_COUNT) + 1;
+                    if (0 == (dataCount % MAX_PAGE_COUNT)) {
+                        pageCount--;
+                    }
+                    for (int ii = 0; ii < pageCount; ii++) {
+                        fromSeq = (ii * MAX_PAGE_COUNT);
+                        toSeq = fromSeq + MAX_PAGE_COUNT;
+                        fromSeq++;
+                        List<TbScsTConIntDPlan> result = this.gitsMapper.selectScsTConIntDPlan(center, fromSeq, toSeq);
+                        log.info("TB_INT_OPER_PLAN, SCS_T_CON_INTDPLAN .READ. {}, {}, {}. {}",
+                                center.getRegionCd(), center.getRegionNm(), String.format("%6d ~ %6d, %6d EA", fromSeq, toSeq, result.size()), job.elapsedTimeStr());
+                        TimeUtils.sleep(500);
+                        job.reset();
+
                         lists = new ArrayList<>();
+                        currWriteCount = 0;
+                        for(TbScsTConIntDPlan obj: result) {
+                            HashMap<String, Object> param = obj.toSig(center.getRegionCd());
+                            lists.add(param);
+                            if (lists.size() >= BatchDaoService.MAX_BATCH_SIZE) {
+                                currWriteCount += this.dao.updateTbIntOperPlan(lists);
+                                lists = new ArrayList<>();
+                            }
+                        }
+                        if (!lists.isEmpty()) {
+                            currWriteCount += this.dao.updateTbIntOperPlan(lists);
+                        }
+                        writeCount += currWriteCount;
+                        log.info("TB_INT_OPER_PLAN, SCS_T_CON_INTDPLAN WRITE. {}, {}, {}. {}",
+                                center.getRegionCd(), center.getRegionNm(), String.format("%6d ~ %6d, %6d EA", fromSeq, toSeq, currWriteCount), job.elapsedTimeStr());
                     }
                 }
-                if (!lists.isEmpty()) {
-                    writeCount += this.dao.updateTbIntOperPlan(lists);
-                }
                 etlp.setWriteCount(writeCount);
                 etlp.setSuccess(true);
-                log.info("TB_INT_OPER_PLAN, SCS_T_CON_INTDPLAN ..END. {}, {}, JOB: {}, WRITE: {} EA. {} ms.",
-                        center.getRegionCd(), center.getRegionNm(), result.size(), writeCount, job.milliSeconds());
+                log.info("TB_INT_OPER_PLAN, SCS_T_CON_INTDPLAN WRITE. {}, {}, {} EA. {}",
+                        center.getRegionCd(), center.getRegionNm(), writeCount, elapsed.elapsedTimeStr());
+                log.info("-------------------------------------------------------------------------------------------------");
             }
             catch (Exception e) {
                 etlp.setSuccess(false);
-                log.error("{}", lists.get(0));
                 log.error("TB_INT_OPER_PLAN, SCS_T_CON_INTDPLAN: {}, {}, Exceptions: {}", center.getRegionCd(), center.getRegionNm(), e.getMessage());
             }
             finally {
-                center.setElapsed(center.getElapsed() + job.milliSeconds());
+                center.setElapsed(center.getElapsed() + elapsed.milliSeconds());
                 MDC.remove(center.getLogKey());
                 MDC.clear();
             }
         }
-        log.info("TB_INT_OPER_PLAN, SCS_T_CON_INTDPLAN ..END: {}", elapsed.elapsedTimeStr());
+        log.info("TB_INT_OPER_PLAN, SCS_T_CON_INTDPLAN ..END: {}", totElapsed.elapsedTimeStr());
     }
+
     //교차로주간계획_연계, SCS_T_CON_INTWEEK
     private void etlpIntWeek() {
         Elapsed elapsed = new Elapsed();
+        Elapsed totElapsed = new Elapsed();
         log.info("TB_INT_DY_PLAN, SCS_T_CON_INTWEEK START.");
         List<HashMap<String, Object>> lists = new ArrayList<>();
 
@@ -280,7 +354,11 @@ public class GgitsEtlpService {
             if (center == null) {
                 continue;
             }
+            TimeUtils.sleep(500);
+            elapsed.reset();
+
             int writeCount = 0;
+            int currWriteCount = 0;
             Elapsed job = new Elapsed();
             EtlpInfo etlp = center.getEtlpWeek();
             etlp.setSuccess(false);
@@ -289,42 +367,69 @@ public class GgitsEtlpService {
                 MDC.put("id", center.getLogKey());
                 log.info("TB_INT_DY_PLAN, SCS_T_CON_INTWEEK START. {}, {}, {}, {}",
                         center.getRegionCd(), center.getRegionNm(), center.getMinNodeId(), center.getMaxNodeId());
-                List<TbScsTConIntWeek> result = this.gitsMapper.selectScsTConIntWeek(center);
-                etlp.setReadCount(result.size());
 
-                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);
+                Integer dataCount = this.gitsMapper.selectScsTConIntWeekCount(center);
+                etlp.setReadCount(dataCount);
+                log.info("TB_INT_DY_PLAN, SCS_T_CON_INTWEEK .READ. {}, {}, {} EA. {}",
+                        center.getRegionCd(), center.getRegionNm(), dataCount, job.elapsedTimeStr());
+
+                if (dataCount > 0) {
+                    int fromSeq, toSeq;
+                    int pageCount = (dataCount / MAX_PAGE_COUNT) + 1;
+                    if (0 == (dataCount % MAX_PAGE_COUNT)) {
+                        pageCount--;
+                    }
+                    for (int ii = 0; ii < pageCount; ii++) {
+                        fromSeq = (ii * MAX_PAGE_COUNT);
+                        toSeq = fromSeq + MAX_PAGE_COUNT;
+                        fromSeq++;
+                        List<TbScsTConIntWeek> result = this.gitsMapper.selectScsTConIntWeek(center, fromSeq, toSeq);
+                        log.info("TB_INT_DY_PLAN, SCS_T_CON_INTWEEK .READ. {}, {}, {}. {}",
+                                center.getRegionCd(), center.getRegionNm(), String.format("%6d ~ %6d, %6d EA", fromSeq, toSeq, result.size()), job.elapsedTimeStr());
+                        TimeUtils.sleep(500);
+                        job.reset();
+
                         lists = new ArrayList<>();
+                        currWriteCount = 0;
+                        for(TbScsTConIntWeek obj: result) {
+                            HashMap<String, Object> param = obj.toSig(center.getRegionCd());
+                            lists.add(param);
+                            if (lists.size() >= BatchDaoService.MAX_BATCH_SIZE) {
+                                currWriteCount += this.dao.updateTbIntDyPlan(lists);
+                                lists = new ArrayList<>();
+                            }
+                        }
+                        if (!lists.isEmpty()) {
+                            currWriteCount += this.dao.updateTbIntDyPlan(lists);
+                        }
+                        writeCount += currWriteCount;
+                        log.info("TB_INT_DY_PLAN, SCS_T_CON_INTWEEK WRITE. {}, {}, {}. {}",
+                                center.getRegionCd(), center.getRegionNm(), String.format("%6d ~ %6d, %6d EA", fromSeq, toSeq, currWriteCount), job.elapsedTimeStr());
                     }
                 }
-                if (!lists.isEmpty()) {
-                    writeCount += this.dao.updateTbIntDyPlan(lists);
-                }
                 etlp.setWriteCount(writeCount);
                 etlp.setSuccess(true);
-                log.info("TB_INT_DY_PLAN, SCS_T_CON_INTWEEK ..END. {}, {}, JOB: {}, WRITE: {} EA. {} ms.",
-                        center.getRegionCd(), center.getRegionNm(), result.size(), writeCount, job.milliSeconds());
+                log.info("TB_INT_DY_PLAN, SCS_T_CON_INTWEEK WRITE. {}, {}, {} EA. {}",
+                        center.getRegionCd(), center.getRegionNm(), writeCount, elapsed.elapsedTimeStr());
+                log.info("-------------------------------------------------------------------------------------------------");
             }
             catch (Exception e) {
                 etlp.setSuccess(false);
-                log.error("{}", lists.get(0));
                 log.error("TB_INT_DY_PLAN, SCS_T_CON_INTWEEK: {}, {}, Exceptions: {}", center.getRegionCd(), center.getRegionNm(), e.getMessage());
             }
             finally {
-                center.setElapsed(center.getElapsed() + job.milliSeconds());
+                center.setElapsed(center.getElapsed() + elapsed.milliSeconds());
                 MDC.remove(center.getLogKey());
                 MDC.clear();
             }
         }
-        log.info("TB_INT_DY_PLAN, SCS_T_CON_INTWEEK ..END: {}", elapsed.elapsedTimeStr());
+        log.info("TB_INT_DY_PLAN, SCS_T_CON_INTWEEK ..END: {}", totElapsed.elapsedTimeStr());
     }
+
     //교차로예약계획_연계, SCS_T_CON_INTFPLAN
     private void etlpIntFPlan() {
         Elapsed elapsed = new Elapsed();
+        Elapsed totElapsed = new Elapsed();
         log.info("TB_INT_RESRV_PLAN, SCS_T_CON_INTFPLAN START.");
         List<HashMap<String, Object>> lists = new ArrayList<>();
 
@@ -333,7 +438,11 @@ public class GgitsEtlpService {
             if (center == null) {
                 continue;
             }
+            TimeUtils.sleep(500);
+            elapsed.reset();
+
             int writeCount = 0;
+            int currWriteCount = 0;
             Elapsed job = new Elapsed();
             EtlpInfo etlp = center.getEtlpFPlan();
             etlp.setSuccess(false);
@@ -342,42 +451,69 @@ public class GgitsEtlpService {
                 MDC.put("id", center.getLogKey());
                 log.info("TB_INT_RESRV_PLAN, SCS_T_CON_INTFPLAN START. {}, {}, {}, {}",
                         center.getRegionCd(), center.getRegionNm(), center.getMinNodeId(), center.getMaxNodeId());
-                List<TbScsTConIntFPlan> result = this.gitsMapper.selectScsTConIntFPlan(center);
-                etlp.setReadCount(result.size());
 
-                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);
+                Integer dataCount = this.gitsMapper.selectScsTConIntFPlanCount(center);
+                etlp.setReadCount(dataCount);
+                log.info("TB_INT_RESRV_PLAN, SCS_T_CON_INTFPLAN .READ. {}, {}, {} EA. {}",
+                        center.getRegionCd(), center.getRegionNm(), dataCount, job.elapsedTimeStr());
+
+                if (dataCount > 0) {
+                    int fromSeq, toSeq;
+                    int pageCount = (dataCount / MAX_PAGE_COUNT) + 1;
+                    if (0 == (dataCount % MAX_PAGE_COUNT)) {
+                        pageCount--;
+                    }
+                    for (int ii = 0; ii < pageCount; ii++) {
+                        fromSeq = (ii * MAX_PAGE_COUNT);
+                        toSeq = fromSeq + MAX_PAGE_COUNT;
+                        fromSeq++;
+                        List<TbScsTConIntFPlan> result = this.gitsMapper.selectScsTConIntFPlan(center, fromSeq, toSeq);
+                        log.info("TB_INT_RESRV_PLAN, SCS_T_CON_INTFPLAN .READ. {}, {}, {}. {}",
+                                center.getRegionCd(), center.getRegionNm(), String.format("%6d ~ %6d, %6d EA", fromSeq, toSeq, result.size()), job.elapsedTimeStr());
+                        TimeUtils.sleep(500);
+                        job.reset();
+
                         lists = new ArrayList<>();
+                        currWriteCount = 0;
+                        for(TbScsTConIntFPlan obj: result) {
+                            HashMap<String, Object> param = obj.toSig(center.getRegionCd());
+                            lists.add(param);
+                            if (lists.size() >= BatchDaoService.MAX_BATCH_SIZE) {
+                                currWriteCount += this.dao.updateTbIntResrvPlan(lists);
+                                lists = new ArrayList<>();
+                            }
+                        }
+                        if (!lists.isEmpty()) {
+                            currWriteCount += this.dao.updateTbIntResrvPlan(lists);
+                        }
+                        writeCount += currWriteCount;
+                        log.info("TB_INT_RESRV_PLAN, SCS_T_CON_INTFPLAN WRITE. {}, {}, {}. {}",
+                                center.getRegionCd(), center.getRegionNm(), String.format("%6d ~ %6d, %6d EA", fromSeq, toSeq, currWriteCount), job.elapsedTimeStr());
                     }
                 }
-                if (!lists.isEmpty()) {
-                    writeCount += this.dao.updateTbIntResrvPlan(lists);
-                }
                 etlp.setWriteCount(writeCount);
                 etlp.setSuccess(true);
-                log.info("TB_INT_RESRV_PLAN, SCS_T_CON_INTFPLAN ..END. {}, {}, JOB: {}, WRITE: {} EA. {} ms.",
-                        center.getRegionCd(), center.getRegionNm(), result.size(), writeCount, job.milliSeconds());
+                log.info("TB_INT_RESRV_PLAN, SCS_T_CON_INTFPLAN WRITE. {}, {}, {} EA. {}",
+                        center.getRegionCd(), center.getRegionNm(), writeCount, elapsed.elapsedTimeStr());
+                log.info("-------------------------------------------------------------------------------------------------");
             }
             catch (Exception e) {
                 etlp.setSuccess(false);
-                log.error("{}", lists.get(0));
                 log.error("TB_INT_RESRV_PLAN, SCS_T_CON_INTFPLAN: {}, {}, Exceptions: {}", center.getRegionCd(), center.getRegionNm(), e.getMessage());
             }
             finally {
-                center.setElapsed(center.getElapsed() + job.milliSeconds());
+                center.setElapsed(center.getElapsed() + elapsed.milliSeconds());
                 MDC.remove(center.getLogKey());
                 MDC.clear();
             }
         }
-        log.info("TB_INT_RESRV_PLAN, SCS_T_CON_INTFPLAN ..END: {}", elapsed.elapsedTimeStr());
+        log.info("TB_INT_RESRV_PLAN, SCS_T_CON_INTFPLAN ..END: {}", totElapsed.elapsedTimeStr());
     }
+
     //교차로시그널맵_연계, SCS_T_CON_INTSIGMAP
     private void etlpIntSigmap() {
         Elapsed elapsed = new Elapsed();
+        Elapsed totElapsed = new Elapsed();
         log.info("TB_INT_SIGNALMAP, SCS_T_CON_INTSIGMAP START.");
         List<HashMap<String, Object>> lists = new ArrayList<>();
 
@@ -386,7 +522,11 @@ public class GgitsEtlpService {
             if (center == null) {
                 continue;
             }
+            TimeUtils.sleep(500);
+            elapsed.reset();
+
             int writeCount = 0;
+            int currWriteCount = 0;
             Elapsed job = new Elapsed();
             EtlpInfo etlp = center.getEtlpSigmap();
             etlp.setSuccess(false);
@@ -395,38 +535,62 @@ public class GgitsEtlpService {
                 MDC.put("id", center.getLogKey());
                 log.info("TB_INT_SIGNALMAP, SCS_T_CON_INTSIGMAP START. {}, {}, {}, {}",
                         center.getRegionCd(), center.getRegionNm(), center.getMinNodeId(), center.getMaxNodeId());
-                List<TbScsTConIntSigmap> result = this.gitsMapper.selectScsTConIntSigmap(center);
-                etlp.setReadCount(result.size());
 
-                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);
+                Integer dataCount = this.gitsMapper.selectScsTConIntSigmapCount(center);
+                etlp.setReadCount(dataCount);
+                log.info("TB_INT_SIGNALMAP, SCS_T_CON_INTSIGMAP .READ. {}, {}, {} EA. {}",
+                        center.getRegionCd(), center.getRegionNm(), dataCount, job.elapsedTimeStr());
+
+                if (dataCount > 0) {
+                    int fromSeq, toSeq;
+                    int pageCount = (dataCount / MAX_PAGE_COUNT) + 1;
+                    if (0 == (dataCount % MAX_PAGE_COUNT)) {
+                        pageCount--;
+                    }
+                    for (int ii = 0; ii < pageCount; ii++) {
+                        fromSeq = (ii * MAX_PAGE_COUNT);
+                        toSeq = fromSeq + MAX_PAGE_COUNT;
+                        fromSeq++;
+                        List<TbScsTConIntSigmap> result = this.gitsMapper.selectScsTConIntSigmap(center, fromSeq, toSeq);
+                        log.info("TB_INT_SIGNALMAP, SCS_T_CON_INTSIGMAP .READ. {}, {}, {}. {}",
+                                center.getRegionCd(), center.getRegionNm(), String.format("%6d ~ %6d, %6d EA", fromSeq, toSeq, result.size()), job.elapsedTimeStr());
+                        TimeUtils.sleep(500);
+                        job.reset();
+
                         lists = new ArrayList<>();
+                        currWriteCount = 0;
+                        for(TbScsTConIntSigmap obj: result) {
+                            HashMap<String, Object> param = obj.toSig(center.getRegionCd());
+                            lists.add(param);
+                            if (lists.size() >= BatchDaoService.MAX_BATCH_SIZE) {
+                                currWriteCount += this.dao.updateTbIntSignalMap(lists);
+                                lists = new ArrayList<>();
+                            }
+                        }
+                        if (!lists.isEmpty()) {
+                            currWriteCount += this.dao.updateTbIntSignalMap(lists);
+                        }
+                        writeCount += currWriteCount;
+                        log.info("TB_INT_SIGNALMAP, SCS_T_CON_INTSIGMAP WRITE. {}, {}, {}. {}",
+                                center.getRegionCd(), center.getRegionNm(), String.format("%6d ~ %6d, %6d EA", fromSeq, toSeq, currWriteCount), job.elapsedTimeStr());
                     }
                 }
-                if (!lists.isEmpty()) {
-                    writeCount += this.dao.updateTbIntSignalMap(lists);
-                }
                 etlp.setWriteCount(writeCount);
                 etlp.setSuccess(true);
-                log.info("TB_INT_SIGNALMAP, SCS_T_CON_INTSIGMAP ..END. {}, {}, JOB: {}, WRITE: {} EA. {} ms.",
-                        center.getRegionCd(), center.getRegionNm(), result.size(), writeCount, job.milliSeconds());
+                log.info("TB_INT_SIGNALMAP, SCS_T_CON_INTSIGMAP WRITE. {}, {}, {} EA. {}",
+                        center.getRegionCd(), center.getRegionNm(), writeCount, elapsed.elapsedTimeStr());
                 log.info("<================================================================================================");
             }
             catch (Exception e) {
                 etlp.setSuccess(false);
-                log.error("{}", lists.get(0));
                 log.error("TB_INT_SIGNALMAP, SCS_T_CON_INTSIGMAP: {}, {}, Exceptions: {}", center.getRegionCd(), center.getRegionNm(), e.getMessage());
             }
             finally {
-                center.setElapsed(center.getElapsed() + job.milliSeconds());
+                center.setElapsed(center.getElapsed() + elapsed.milliSeconds());
                 MDC.remove(center.getLogKey());
                 MDC.clear();
             }
         }
-        log.info("TB_INT_SIGNALMAP, SCS_T_CON_INTSIGMAP ..END: {}", elapsed.elapsedTimeStr());
+        log.info("TB_INT_SIGNALMAP, SCS_T_CON_INTSIGMAP ..END: {}", totElapsed.elapsedTimeStr());
     }
 }

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

@@ -23,91 +23,188 @@
         ]]>
     </select>
 
-    <select id="selectScsTConIntFlow" parameterType="com.ggits.etlp.server.dto.RegionCenter" resultType="com.ggits.etlp.server.entity.ggits.TbScsTConIntFlow" fetchSize="1024">
+    <select id="selectScsTConIntFlowCount" parameterType="com.ggits.etlp.server.dto.RegionCenter" resultType="java.lang.Integer" fetchSize="1024">
         <![CDATA[
-        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
+        SELECT count(1) as dataCount
         FROM SCS_T_CON_INTFLOW A
         WHERE A.int_lcno BETWEEN #{obj.minNodeId} AND #{obj.maxNodeId}
         ]]>
     </select>
 
-    <select id="selectScsTConIntDPlan" parameterType="com.ggits.etlp.server.dto.RegionCenter" resultType="com.ggits.etlp.server.entity.ggits.TbScsTConIntDPlan" fetchSize="1024">
+    <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,
-               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
+        SELECT * FROM (
+            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,
+                   rownum                 as rowSeq,
+                   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}
+            ORDER BY A.int_lcno, A.int_planclss, A.int_ring, A.int_phaseno
+        )
+        WHERE rowSeq between #{fromSeq} AND #{toSeq}
+        ]]>
+    </select>
+
+    <select id="selectScsTConIntDPlanCount" parameterType="com.ggits.etlp.server.dto.RegionCenter" resultType="java.lang.Integer" fetchSize="1024">
+        <![CDATA[
+        SELECT count(1) as dataCount
         FROM SCS_T_CON_INTDPLAN A
         WHERE A.int_lcno BETWEEN #{obj.minNodeId} AND #{obj.maxNodeId}
         ]]>
     </select>
 
-    <select id="selectScsTConIntWeek" parameterType="com.ggits.etlp.server.dto.RegionCenter" resultType="com.ggits.etlp.server.entity.ggits.TbScsTConIntWeek" fetchSize="1024">
+    <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,
-               MOD(A.int_lcno, 10000) as intNo,
-               A.week_no              as weekNo,
-               A.update_date          as updateDate,
-               A.int_wplan            as intWPlan
+        SELECT * FROM (
+            SELECT A.int_lcno             as intLcNo,
+                   MOD(A.int_lcno, 10000) as intNo,
+                   A.int_dplan            as intDPlan,
+                   A.int_dplanindex       as intDPlanIndex,
+                   rownum                 as rowSeq,
+                   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}
+            ORDER BY A.int_lcno, A.int_dplan, A.int_dplanindex
+        )
+        WHERE rowSeq between #{fromSeq} AND #{toSeq}
+        ]]>
+    </select>
+
+    <select id="selectScsTConIntWeekCount" parameterType="com.ggits.etlp.server.dto.RegionCenter" resultType="java.lang.Integer" fetchSize="1024">
+        <![CDATA[
+        SELECT count(1) as dataCount
         FROM SCS_T_CON_INTWEEK A
         WHERE A.int_lcno BETWEEN #{obj.minNodeId} AND #{obj.maxNodeId}
         ]]>
     </select>
 
-    <select id="selectScsTConIntFPlan" parameterType="com.ggits.etlp.server.dto.RegionCenter" resultType="com.ggits.etlp.server.entity.ggits.TbScsTConIntFPlan" fetchSize="1024">
+    <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,
-               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 intCntlEndHour,
-               A.int_cntlendmin       as intCntlEndMin,
-               A.int_cntltype         as intCntlType,
-               A.int_cntlspcno        as intCntlSpcNo
+        SELECT * FROM (
+            SELECT A.int_lcno             as intLcNo,
+                   MOD(A.int_lcno, 10000) as intNo,
+                   A.week_no              as weekNo,
+                   rownum                 as rowSeq,
+                   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}
+            ORDER BY A.int_lcno, A.week_no
+        )
+        WHERE rowSeq between #{fromSeq} AND #{toSeq}
+        ]]>
+    </select>
+
+    <select id="selectScsTConIntFPlanCount" parameterType="com.ggits.etlp.server.dto.RegionCenter" resultType="java.lang.Integer" fetchSize="1024">
+        <![CDATA[
+        SELECT count(1) as dataCount
         FROM SCS_T_CON_INTFPLAN A
         WHERE A.int_lcno BETWEEN #{obj.minNodeId} AND #{obj.maxNodeId}
         ]]>
     </select>
 
+    <select id="selectScsTConIntFPlan" parameterType="com.ggits.etlp.server.dto.RegionCenter" resultType="com.ggits.etlp.server.entity.ggits.TbScsTConIntFPlan" fetchSize="1024">
+        <![CDATA[
+        SELECT * FROM (
+            SELECT A.int_lcno             as intLcNo,
+                   MOD(A.int_lcno, 10000) as intNo,
+                   A.int_fplanindex       as intFPlanIndex,
+                   rownum                 as rowSeq,
+                   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 intCntlEndHour,
+                   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}
+            ORDER BY A.int_lcno, A.int_fplanindex
+        )
+        WHERE rowSeq between #{fromSeq} AND #{toSeq}
+        ]]>
+    </select>
+
+    <select id="selectScsTConIntSigmapCount" parameterType="com.ggits.etlp.server.dto.RegionCenter" resultType="java.lang.Integer" fetchSize="1">
+        <![CDATA[
+        SELECT count(1) as dataCount
+        FROM SCS_T_CON_INTSIGMAP A
+        WHERE A.int_lcno BETWEEN #{obj.minNodeId} AND #{obj.maxNodeId}
+        ]]>
+    </select>
+
     <select id="selectScsTConIntSigmap" parameterType="com.ggits.etlp.server.dto.RegionCenter" resultType="com.ggits.etlp.server.entity.ggits.TbScsTConIntSigmap" fetchSize="1024">
+        <![CDATA[
+        SELECT * FROM (
+            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,
+                   rownum                 as rowSeq,
+                   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}
+            ORDER BY A.int_lcno, A.int_planclss, A.int_ring, A.int_stepno
+        )
+        WHERE rowSeq between #{fromSeq} AND #{toSeq}
+        ]]>
+    </select>
+
+    <select id="selectScsTConIntSigmapOLD" parameterType="com.ggits.etlp.server.dto.RegionCenter" resultType="com.ggits.etlp.server.entity.ggits.TbScsTConIntSigmap" fetchSize="1024">
         <![CDATA[
         SELECT A.int_lcno             as intLcNo,
                MOD(A.int_lcno, 10000) as intNo,
@@ -138,5 +235,4 @@
         WHERE A.int_lcno BETWEEN #{obj.minNodeId} AND #{obj.maxNodeId}
         ]]>
     </select>
-
 </mapper>

+ 4 - 0
src/main/resources/mybatis/mapper/sig/SigMapper.xml

@@ -115,6 +115,7 @@
                        #{RING_NO}    AS RING_NO,
                        #{PHASE_NO}   AS PHASE_NO,
                        #{FLOW_NO}    AS FLOW_NO,
+                       #{FLOW_TP}    AS FLOW_TP,
                        #{FLOW_S_LAT} AS FLOW_S_LAT,
                        #{FLOW_S_LNG} AS FLOW_S_LNG,
                        #{FLOW_M_LAT} AS FLOW_M_LAT,
@@ -132,6 +133,7 @@
             WHEN MATCHED THEN
                 UPDATE SET
                     L.FLOW_NO      = M.FLOW_NO,
+                    L.FLOW_TP      = M.FLOW_TP,
                     L.FLOW_S_LAT   = M.FLOW_S_LAT,
                     L.FLOW_S_LNG   = M.FLOW_S_LNG,
                     L.FLOW_M_LAT   = M.FLOW_M_LAT,
@@ -147,6 +149,7 @@
                         RING_NO,
                         PHASE_NO,
                         FLOW_NO,
+                        FLOW_TP,
                         FLOW_S_LAT,
                         FLOW_S_LNG,
                         FLOW_M_LAT,
@@ -161,6 +164,7 @@
                                M.RING_NO,
                                M.PHASE_NO,
                                M.FLOW_NO,
+                               M.FLOW_TP,
                                M.FLOW_S_LAT,
                                M.FLOW_S_LNG,
                                M.FLOW_M_LAT,