Browse Source

update int phase current program version. tb_int_phase

shjung 9 months ago
parent
commit
1196f3bddb

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

@@ -22,6 +22,7 @@ public interface SigMapper {
 
     int updateTbInt(Map<String, Object> obj);
     int updateTbIntFlow(Map<String, Object> obj);
+    int updateTbIntPhase(Map<String, Object> obj);
     int updateTbIntOperPlan(Map<String, Object> obj);
     int updateTbIntDyPlan(Map<String, Object> obj);
     int updateTbIntResrvPlan(Map<String, Object> obj);

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

@@ -28,10 +28,15 @@ public class SigDao extends BatchDaoService {
     public int insertGgitsEtlpHist(List<HashMap<String, Object>> req) {
         return insertBatch("insertGgitsEtlpHist", req);
     }
+
     public int updateTbIntFlow(List<HashMap<String, Object>> req) {
         return updateBatch("updateTbIntFlow", req);
     }
 
+    public int updateTbIntPhase(List<HashMap<String, Object>> req) {
+        return updateBatch("updateTbIntPhase", req);
+    }
+
     public int updateTbIntOperPlan(List<HashMap<String, Object>> req) {
         return updateBatch("updateTbIntOperPlan", req);
     }

+ 160 - 23
src/main/java/com/ggits/etlp/server/entity/ggits/TbScsTConIntFlow.java

@@ -67,20 +67,29 @@ public class TbScsTConIntFlow implements Serializable {
     private Double flowELat;
 
     private boolean isValid() {
-        if (this.flowSLng == 0. ||
-                this.flowSLat == 0. ||
-                this.flowMLng == 0. ||
-                this.flowMLat == 0. ||
-                this.flowELng == 0. ||
-                this.flowELat == 0.) {
+        if (this.intRing != 1 && this.intRing != 2) {
+            // 1:A링, 2:B링
             return false;
         }
-        if (this.flowNo == 0 || this.flowNo == 18) {
-            // flowNo == 18 --> 무신호, 현시를 그리지 않는다. A링 하나만 있는 경우
+        if (this.intPhaseNo < 1 || this.intPhaseNo > 7) {
+            // 1~8
             return false;
         }
+
+//        if ( this.flowSLng == 0. ||
+//                this.flowSLat == 0. ||
+//                this.flowMLng == 0. ||
+//                this.flowMLat == 0. ||
+//                this.flowELng == 0. ||
+//                this.flowELat == 0.) {
+//            return false;
+//        }
+//        if (this.flowNo == 0) {
+//            return false;
+//        }
         return true;
     }
+
     public HashMap<String, Object> toSig(String regionCd) {
         HashMap<String, Object> param = new HashMap<>();
         if (!isValid()) {
@@ -88,30 +97,158 @@ public class TbScsTConIntFlow implements Serializable {
             return new HashMap<>();
         }
 
-        // 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);   //이동류번호(1-16, 17, 18), 21, 23, 26, 27
 
-        String flowTp;
-        if (this.flowNo == 17) {
-            flowTp = "P";   // 보행자
+        // A_RING_1_PHASE_CONF_CD, ..., A_RING_8_PHASE_CONF_CD, B_RING_1_PHASE_CONF_CD, ..., B_RING_8_PHASE_CONF_CD
+        final String RING_PHASE = this.intRing == 1 ? "A_RING_" : "B_RING_"; // 0:A링, 1:B링
+        final String PHASE_CD_COL = RING_PHASE + (this.intPhaseNo) + "_PHASE_CONF_CD";  // 원천데이터는 1 부터 시작함.
+
+        // A1_FLOW_NUM, ..., A8_FLOW_NUM, B1_FLOW_NUM, ..., B8_FLOW_NUM
+        final String FLOW_NUM = this.intRing == 1 ? "A" : "B"; // 0:A링, 1:B링
+        final String FLOW_NUM_COL = FLOW_NUM + (this.intPhaseNo) + "_FLOW_NUM";
+
+        param.put("PHASE_CD_COL",    PHASE_CD_COL);
+        param.put("FLOW_NUM_COL",    FLOW_NUM_COL);
+        param.put("FLOW_NUM_VAL", this.flowNo);   //이동류번호(1-16, 17, 18), 21, 23, 26, 27
+
+        String sTurn;
+        if (this.flowNo == 17 || this.flowNo == 18) {
+            // flowNo == 18 --> 무신호, 현시를 그리지 않는다. A링 하나만 있는 경우
+            sTurn = "P";   // 보행자
         }
         else {
-            flowTp = (this.flowNo % 2) == 1 ? "L" : "S";    // 1,3,5,7,9,11,13,15 --> 홀수 --> 좌회전, 짝수 --> 직진
+            sTurn = (this.flowNo % 2) == 1 ? "L" : "S";    // 1,3,5,7,9,11,13,15 --> 홀수 --> 좌회전, 짝수 --> 직진
         }
 
-        param.put("FLOW_TP",    flowTp);
+        String iPhase, oPhase;
+
+        iPhase = "";
+        oPhase = "";
+
+        //화살표시작에서 중심
+        if (this.flowMLat > 0 &&
+            this.flowMLng > 0 &&
+            this.flowELat > 0 &&
+            this.flowELng > 0) {
+            int angle = calAngle(this.flowMLat, this.flowMLng, this.flowELat, this.flowELng);
+            iPhase = String.format("%03d", angle);
+        }
+
+        //중심에서 화살표끝
+        if (this.flowMLat > 0 &&
+            this.flowMLng > 0 &&
+            this.flowSLat > 0 &&
+            this.flowSLng > 0) {
+            int angle = calAngle(this.flowMLat, this.flowMLng, this.flowSLat, this.flowSLng);
+            oPhase = String.format("%03d", angle);
+        }
+
+        if (iPhase.isEmpty() && oPhase.isEmpty()) {
+            return new HashMap<>();
+        }
+
+        String PHASE_CD_VAL = sTurn + iPhase + oPhase;
+        param.put("PHASE_CD_VAL", PHASE_CD_VAL);
 
-        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;
     }
+
+    private double safeAcos(double x) {
+        if (x < -1.0) {
+            x = -1.0;
+        }
+        else if (x > 1.0) {
+            x = 1.0;
+        }
+        return Math.acos(x) ;
+    }
+
+    private int round(double value, double pos) {
+        double temp;
+        temp = value * Math.pow(10, pos);  // 원하는 소수점 자리수만큼 10의 누승을 함
+        temp = Math.floor(temp + 0.5);          // 0.5를 더한후 버림하면 반올림이 됨
+        temp *= Math.pow(10, -pos);           // 다시 원래 소수점 자리수로
+        return (int)temp;
+    }
+
+    private int calAngle(double p1Lat, double p1Lng, double p2Lat, double p2Lng)
+    {
+        // 현재 위치 : 위도나 경도는 지구 중심을 기반으로 하는 각도이기 때문에 라디안 각도로 변환한다.
+        double curLatRadian = p1Lat  * (Math.PI / 180);
+        double curLngRadian = p1Lng * (Math.PI / 180);
+
+        // 목표 위치 : 위도나 경도는 지구 중심을 기반으로 하는 각도이기 때문에 라디안 각도로 변환한다.
+        double destLatRadian = p2Lat  * (Math.PI / 180);
+        double destLngRadian = p2Lng * (Math.PI / 180);
+
+        double radianDistance = safeAcos( Math.sin(curLatRadian) * Math.sin(destLatRadian) + Math.cos(curLatRadian) * Math.cos(destLatRadian) * Math.cos(curLngRadian - destLngRadian) );
+
+        // 목적지 이동 방향을 구한다.(현재 좌표에서 다음 좌표로 이동하기 위해서는 방향을 설정해야 한다. 라디안값이다.
+        // acos 의 인수로 주어지는 x는 360분법의 각도가 아닌 radian(호도)값이다.
+        double radianBearing = safeAcos((Math.sin(destLatRadian) - Math.sin(curLatRadian) * Math.cos(radianDistance)) / (Math.cos(curLatRadian) * Math.sin(radianDistance)));
+        double trueBearing   = 0;
+
+        if (Math.sin(destLngRadian - curLngRadian) < 0) {
+            trueBearing = radianBearing * (180 / Math.PI);
+            trueBearing = 360 - trueBearing;
+        }
+        else
+        {
+            trueBearing = radianBearing * (180 / Math.PI);
+        }
+
+        return round(trueBearing, 0);
+    }
+
+//    private boolean isValid() {
+//        if (this.flowSLng == 0. ||
+//                this.flowSLat == 0. ||
+//                this.flowMLng == 0. ||
+//                this.flowMLat == 0. ||
+//                this.flowELng == 0. ||
+//                this.flowELat == 0.) {
+//            return false;
+//        }
+//        if (this.flowNo == 0 || this.flowNo == 18) {
+//            // flowNo == 18 --> 무신호, 현시를 그리지 않는다. A링 하나만 있는 경우
+//            return false;
+//        }
+//        return true;
+//    }
+//    public HashMap<String, Object> toSig(String regionCd) {
+//        HashMap<String, Object> param = new HashMap<>();
+//        if (!isValid()) {
+//            // flowNo == 18 --> 무신호, 현시를 그리지 않는다. A링 하나만 있는 경우
+//            return new HashMap<>();
+//        }
+//
+//        // 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);   //이동류번호(1-16, 17, 18), 21, 23, 26, 27
+//
+//        String flowTp;
+//        if (this.flowNo == 17) {
+//            flowTp = "P";   // 보행자
+//        }
+//        else {
+//            flowTp = (this.flowNo % 2) == 1 ? "L" : "S";    // 1,3,5,7,9,11,13,15 --> 홀수 --> 좌회전, 짝수 --> 직진
+//        }
+//
+//        param.put("FLOW_TP",    flowTp);
+//
+//        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;
+//    }
+
 }

+ 1 - 1
src/main/java/com/ggits/etlp/server/repository/EtlpConst.java

@@ -7,7 +7,7 @@ public class EtlpConst {
     public static final String etlpSuccess = "Y";
 
     public static final String etlpTableInt = "TB_INT";
-    public static final String etlpTableFlow = "TB_INT_FLOW";
+    public static final String etlpTableFlow = "TB_INT_PHASE";  //"TB_INT_FLOW";
     public static final String etlpTableOperPlan = "TB_INT_OPER_PLAN";
     public static final String etlpTableDyPlan = "TB_INT_DY_PLAN";
     public static final String etlpTableResrvPlan = "TB_INT_RESRV_PLAN";

+ 103 - 12
src/main/java/com/ggits/etlp/server/service/GgitsEtlpService.java

@@ -96,10 +96,10 @@ public class GgitsEtlpService {
         initEtlp();
 
         //교차로구성_연계, SCS_T_CON_INTLC
-        etlpIntLc();
+//        etlpIntLc();
 
         //교차로이동류_연계, SCS_T_CON_INTFLOW
-        etlpIntFlow();
+        etlpIntPhase();
 
         //교차로일계획_연계, SCS_T_CON_INTDPLAN
         etlpIntDPlan();
@@ -171,8 +171,8 @@ public class GgitsEtlpService {
             try {
                 MDC.put("id", center.getLogKey());
                 log.info("================================================================================================>");
-                log.info("TB_INT, SCS_T_CON_INTLC START. {}, {}, {}, {}, ETLP: {}",
-                        center.getRegionCd(), center.getRegionNm(), center.getMinNodeId(), center.getMaxNodeId(), this.config.isEtlpInt());
+                log.info("TB_INT, SCS_T_CON_INTLC START. {}, {}, {}, {}, {}, ETLP: {}",
+                        center.getRegionCd(), center.getRegionNm(), center.getMinNodeId(), center.getMaxNodeId(), etlp.getQryDt(), this.config.isEtlpInt());
 
 //                this.sigMapper.initTbInt(center.getRegionCd());
                 HashMap<Integer, TbInt> intMap = new HashMap<>();
@@ -239,6 +239,97 @@ public class GgitsEtlpService {
         log.info("<^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
     }
 
+    //교차로이동류_연계, SCS_T_CON_INTFLOW
+    private void etlpIntPhase() {
+        log.info("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^>");
+        Elapsed elapsed = new Elapsed();
+        Elapsed totElapsed = new Elapsed();
+        log.info("TB_INT_PHASE, SCS_T_CON_INTFLOW START.");
+        List<HashMap<String, Object>> etlpLists = new ArrayList<>();
+        List<HashMap<String, Object>> lists;
+
+        for (String key : this.centerList) {
+            RegionCenter center = this.repo.getCenterMap().get(key);
+            if (center == null) {
+                continue;
+            }
+            TimeUtils.sleep(500);
+            elapsed.reset();
+
+            int invalidData = 0;
+            int writeCount = 0;
+            int currWriteCount;
+            Elapsed job = new Elapsed();
+            EtlpInfo etlp = center.getEtlpFlow();
+            etlp.startEtlp();
+
+            try {
+                MDC.put("id", center.getLogKey());
+                log.info("TB_INT_PHASE, SCS_T_CON_INTFLOW START. {}, {}, {}, {}, {}",
+                        center.getRegionCd(), center.getRegionNm(), center.getMinNodeId(), center.getMaxNodeId(), etlp.getQryDt());
+
+                Integer dataCount = this.gitsMapper.selectScsTConIntFlowCount(center, EtlpConst.qryCountAll);
+                Integer etlpCount = this.gitsMapper.selectScsTConIntFlowCount(center, etlp.getQryDt());
+                etlp.setCount(dataCount, etlpCount);
+                log.info("TB_INT_PHASE, SCS_T_CON_INTFLOW .READ. {}, {}, DATA({}) ETLP({}) EA. {}",
+                        center.getRegionCd(), center.getRegionNm(), dataCount, etlpCount, job.elapsedTimeStr());
+
+                if (etlpCount > 0) {
+                    int pageCount = getPageCount(etlpCount);
+                    for (int ii = 0; ii < pageCount; ii++) {
+                        int fromSeq = (ii * this.config.getPageCount());
+                        int toSeq = fromSeq + this.config.getPageCount();
+                        fromSeq++;
+                        List<TbScsTConIntFlow> result = this.gitsMapper.selectScsTConIntFlow(center, fromSeq, toSeq, etlp.getQryDt());
+                        log.info("TB_INT_PHASE, 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());
+                            if (!param.isEmpty()) {
+                                lists.add(param);
+                                if (lists.size() >= BatchDaoService.MAX_BATCH_SIZE) {
+                                    currWriteCount += this.dao.updateTbIntPhase(lists);
+                                    lists = new ArrayList<>();
+                                }
+                            }
+                            else {
+                                invalidData++;
+                            }
+                        }
+                        if (!lists.isEmpty()) {
+                            currWriteCount += this.dao.updateTbIntPhase(lists);
+                        }
+                        writeCount += currWriteCount;
+                        log.info("TB_INT_PHASE, SCS_T_CON_INTFLOW WRITE. {}, {}, {}. {}",
+                                center.getRegionCd(), center.getRegionNm(), String.format("%6d ~ %6d, %6d EA", fromSeq, toSeq, currWriteCount), job.elapsedTimeStr());
+                    }
+                }
+                etlp.endEtlp(true, writeCount);
+                log.info("TB_INT_PHASE, SCS_T_CON_INTFLOW WRITE. {}, {}, {} EA. Invalid Data {} EA. {}",
+                        center.getRegionCd(), center.getRegionNm(), writeCount, invalidData, elapsed.elapsedTimeStr());
+                log.info("-------------------------------------------------------------------------------------------------");
+            }
+            catch (Exception e) {
+                etlp.endEtlp(false, writeCount);
+                log.error("TB_INT_PHASE, SCS_T_CON_INTFLOW: {}, {}, Exceptions: {}", center.getRegionCd(), center.getRegionNm(), e.getMessage());
+            }
+            finally {
+                center.setElapsed(center.getElapsed() + elapsed.milliSeconds());
+                MDC.remove(center.getLogKey());
+                MDC.clear();
+            }
+            etlpLists.add(etlp.toSig(center.getRegionCd(), EtlpConst.etlpTableFlow));
+        }
+        updateEtlpResult(EtlpConst.etlpTableFlow, etlpLists);
+        log.info("TB_INT_PHASE, SCS_T_CON_INTFLOW ..END. {}", totElapsed.elapsedTimeStr());
+        log.info("<^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
+    }
+
     //교차로이동류_연계, SCS_T_CON_INTFLOW
     private void etlpIntFlow() {
         log.info("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^>");
@@ -265,8 +356,8 @@ public class GgitsEtlpService {
 
             try {
                 MDC.put("id", center.getLogKey());
-                log.info("TB_INT_FLOW, SCS_T_CON_INTFLOW START. {}, {}, {}, {}",
-                        center.getRegionCd(), center.getRegionNm(), center.getMinNodeId(), center.getMaxNodeId());
+                log.info("TB_INT_FLOW, SCS_T_CON_INTFLOW START. {}, {}, {}, {}, {}",
+                        center.getRegionCd(), center.getRegionNm(), center.getMinNodeId(), center.getMaxNodeId(), etlp.getQryDt());
 
                 Integer dataCount = this.gitsMapper.selectScsTConIntFlowCount(center, EtlpConst.qryCountAll);
                 Integer etlpCount = this.gitsMapper.selectScsTConIntFlowCount(center, etlp.getQryDt());
@@ -355,8 +446,8 @@ public class GgitsEtlpService {
 
             try {
                 MDC.put("id", center.getLogKey());
-                log.info("TB_INT_OPER_PLAN, SCS_T_CON_INTDPLAN START. {}, {}, {}, {}",
-                        center.getRegionCd(), center.getRegionNm(), center.getMinNodeId(), center.getMaxNodeId());
+                log.info("TB_INT_OPER_PLAN, SCS_T_CON_INTDPLAN START. {}, {}, {}, {}, {}",
+                        center.getRegionCd(), center.getRegionNm(), center.getMinNodeId(), center.getMaxNodeId(), etlp.getQryDt());
 
                 Integer dataCount = this.gitsMapper.selectScsTConIntDPlanCount(center, EtlpConst.qryCountAll);
                 Integer etlpCount = this.gitsMapper.selectScsTConIntDPlanCount(center, etlp.getQryDt());
@@ -525,8 +616,8 @@ public class GgitsEtlpService {
 
             try {
                 MDC.put("id", center.getLogKey());
-                log.info("TB_INT_RESRV_PLAN, SCS_T_CON_INTFPLAN START. {}, {}, {}, {}",
-                        center.getRegionCd(), center.getRegionNm(), center.getMinNodeId(), center.getMaxNodeId());
+                log.info("TB_INT_RESRV_PLAN, SCS_T_CON_INTFPLAN START. {}, {}, {}, {}, {}",
+                        center.getRegionCd(), center.getRegionNm(), center.getMinNodeId(), center.getMaxNodeId(), etlp.getQryDt());
 
                 Integer dataCount = this.gitsMapper.selectScsTConIntFPlanCount(center, EtlpConst.qryCountAll);
                 Integer etlpCount = this.gitsMapper.selectScsTConIntFPlanCount(center, etlp.getQryDt());
@@ -610,8 +701,8 @@ public class GgitsEtlpService {
             
             try {
                 MDC.put("id", center.getLogKey());
-                log.info("TB_INT_SIGNALMAP, SCS_T_CON_INTSIGMAP START. {}, {}, {}, {}",
-                        center.getRegionCd(), center.getRegionNm(), center.getMinNodeId(), center.getMaxNodeId());
+                log.info("TB_INT_SIGNALMAP, SCS_T_CON_INTSIGMAP START. {}, {}, {}, {}, {}",
+                        center.getRegionCd(), center.getRegionNm(), center.getMinNodeId(), center.getMaxNodeId(), etlp.getQryDt());
 
                 Integer dataCount = this.gitsMapper.selectScsTConIntSigmapCount(center, EtlpConst.qryCountAll);
                 Integer etlpCount = this.gitsMapper.selectScsTConIntSigmapCount(center, etlp.getQryDt());

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

@@ -267,6 +267,44 @@
         ]]>
     </update>
 
+    <update id="updateTbIntPhase" parameterType="java.util.Map">
+    <![CDATA[
+        MERGE INTO TB_INT_PHASE L
+            USING (SELECT
+                       #{REGION_CD}    AS REGION_CD,
+                       #{INT_NO}       AS INT_NO,
+                       #{MAP_NO}       AS MAP_NO,
+                       #{PHASE_CD_VAL} AS PHASE_CD_VAL,
+                       #{FLOW_NUM_VAL} AS FLOW_NUM_VAL,
+                       'N'             AS BATCH_JOB_DEL
+                   FROM DUAL) M
+            ON (    L.REGION_CD = M.REGION_CD
+                AND L.INT_NO    = M.INT_NO
+                AND L.MAP_NO    = M.MAP_NO
+                )
+            WHEN MATCHED THEN
+                UPDATE SET
+                    L.${PHASE_CD_COL} = M.PHASE_CD_VAL,
+                    L.${FLOW_NUM_COL} = M.FLOW_NUM_VAL,
+                    L.BATCH_JOB_DEL   = M.BATCH_JOB_DEL
+            WHEN NOT MATCHED THEN
+                INSERT (
+                        REGION_CD,
+                        INT_NO,
+                        MAP_NO,
+                        ${PHASE_CD_COL},
+                        ${FLOW_NUM_COL},
+                        BATCH_JOB_DEL  )
+                    VALUES (
+                               M.REGION_CD,
+                               M.INT_NO,
+                               M.MAP_NO,
+                               M.PHASE_CD_VAL,
+                               M.FLOW_NUM_VAL,
+                               M.BATCH_JOB_DEL )
+        ]]>
+    </update>
+
     <update id="updateTbIntOperPlan" parameterType="java.util.Map">
     <![CDATA[
         MERGE INTO TB_INT_OPER_PLAN L