Przeglądaj źródła

add table insert

HANTE 6 miesięcy temu
rodzic
commit
a438c2ac94
31 zmienionych plików z 638 dodań i 571 usunięć
  1. 3 12
      utic-ptis-server/src/main/java/com/utic/ptis/server/UticPtisServerApplication.java
  2. 0 37
      utic-ptis-server/src/main/java/com/utic/ptis/server/aspect/LoggingAspect.java
  3. 12 34
      utic-ptis-server/src/main/java/com/utic/ptis/server/controller/LinkTrafPrcsController.java
  4. 13 0
      utic-ptis-server/src/main/java/com/utic/ptis/server/dao/mapper/dwdb/DwdbTrafficMapper.java
  5. 0 11
      utic-ptis-server/src/main/java/com/utic/ptis/server/dao/mapper/utic/DeleteMapper.java
  6. 15 0
      utic-ptis-server/src/main/java/com/utic/ptis/server/dao/mapper/utic/UticTrafficMapper.java
  7. 16 0
      utic-ptis-server/src/main/java/com/utic/ptis/server/dto/DbmsJobResultDto.java
  8. 4 0
      utic-ptis-server/src/main/java/com/utic/ptis/server/dto/LinkDto.java
  9. 52 0
      utic-ptis-server/src/main/java/com/utic/ptis/server/dto/LinkMissingValueHist.java
  10. 22 0
      utic-ptis-server/src/main/java/com/utic/ptis/server/dto/LinkTrafCenterDto.java
  11. 27 0
      utic-ptis-server/src/main/java/com/utic/ptis/server/dto/LinkTrafCenterHistDto.java
  12. 1 0
      utic-ptis-server/src/main/java/com/utic/ptis/server/dto/LinkTrafFusionInfo.java
  13. 14 0
      utic-ptis-server/src/main/java/com/utic/ptis/server/dto/LinkTrafVal.java
  14. 0 21
      utic-ptis-server/src/main/java/com/utic/ptis/server/process/AbstractAppProcess.java
  15. 0 24
      utic-ptis-server/src/main/java/com/utic/ptis/server/process/AbstractAppWorker.java
  16. 0 35
      utic-ptis-server/src/main/java/com/utic/ptis/server/process/dbms/DbmsData.java
  17. 0 16
      utic-ptis-server/src/main/java/com/utic/ptis/server/process/dbms/DbmsDataAsyncTask.java
  18. 0 174
      utic-ptis-server/src/main/java/com/utic/ptis/server/process/dbms/DbmsDataProcess.java
  19. 6 6
      utic-ptis-server/src/main/java/com/utic/ptis/server/service/LinkTrafCollectSetupService.java
  20. 29 45
      utic-ptis-server/src/main/java/com/utic/ptis/server/service/LinkTrafDeleteService.java
  21. 28 0
      utic-ptis-server/src/main/java/com/utic/ptis/server/service/LinkTrafSaveService.java
  22. 50 0
      utic-ptis-server/src/main/java/com/utic/ptis/server/service/UticSqlSessionService.java
  23. 2 1
      utic-ptis-server/src/main/java/com/utic/ptis/server/service/worker/LinkTrafCollectWorker.java
  24. 17 87
      utic-ptis-server/src/main/java/com/utic/ptis/server/service/worker/LinkTrafDeleteWorker.java
  25. 46 0
      utic-ptis-server/src/main/java/com/utic/ptis/server/service/worker/LinkTrafSaveWorker.java
  26. 39 0
      utic-ptis-server/src/main/java/com/utic/ptis/server/utils/LogUtils.java
  27. 146 0
      utic-ptis-server/src/main/resources/mybatis/mapper/dwdb/DwdbTrafficMapper.xml
  28. 0 18
      utic-ptis-server/src/main/resources/mybatis/mapper/utic/DeleteMapper.xml
  29. 72 0
      utic-ptis-server/src/main/resources/mybatis/mapper/utic/UticTrafficMapper.xml
  30. 0 50
      utic-ptis-server/src/test/java/com/utic/ptis/server/UticPtisServerApplicationTests.java
  31. 24 0
      utic-ptis-server/src/test/java/com/utic/ptis/server/utils/LogUtilsTest.java

+ 3 - 12
utic-ptis-server/src/main/java/com/utic/ptis/server/UticPtisServerApplication.java

@@ -2,7 +2,7 @@ package com.utic.ptis.server;
 
 import com.utic.common.spring.SpringUtils;
 import com.utic.ptis.server.config.ApplicationConfig;
-import com.utic.ptis.server.process.dbms.DbmsDataProcess;
+import com.utic.ptis.server.controller.LinkTrafPrcsController;
 import com.utic.ptis.server.service.*;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.DisposableBean;
@@ -55,23 +55,14 @@ public class UticPtisServerApplication implements CommandLineRunner, Application
 
         ApplicationConfig applicationConfig = SpringUtils.getBean(ApplicationConfig.class);
 
-        DbmsDataProcess dbmsDataProcess = SpringUtils.getBean(DbmsDataProcess.class);
-        dbmsDataProcess.run();
-
         ProcessStateService processStateService = SpringUtils.getBean(ProcessStateService.class);
         processStateService.processStart();
 
         LinkRepositoryService linkRepositoryService = SpringUtils.getBean(LinkRepositoryService.class);
         linkRepositoryService.processing();
 
-        LinkTrafCollectService linkTrafCollectService = SpringUtils.getBean(LinkTrafCollectService.class);
-        linkTrafCollectService.processing();
-
-        LinkTrafFusionService linkTrafFusionService = SpringUtils.getBean(LinkTrafFusionService.class);
-        linkTrafFusionService.processing();
-
-        LinkTrafMissingService linkTrafMissingervice = SpringUtils.getBean(LinkTrafMissingService.class);
-        linkTrafMissingervice.processing();
+        LinkTrafPrcsController linkTrafPrcsController = SpringUtils.getBean(LinkTrafPrcsController.class);
+        linkTrafPrcsController.run();
 
         applicationConfig.setStartSchedule(true);
 

+ 0 - 37
utic-ptis-server/src/main/java/com/utic/ptis/server/aspect/LoggingAspect.java

@@ -1,7 +1,6 @@
 package com.utic.ptis.server.aspect;
 
 import com.utic.common.utils.Elapsed;
-import com.utic.ptis.server.process.dbms.DbmsData;
 import lombok.extern.slf4j.Slf4j;
 import org.aspectj.lang.ProceedingJoinPoint;
 import org.aspectj.lang.annotation.Around;
@@ -29,40 +28,4 @@ public class LoggingAspect {
         log.info("{}: {}", proceedName, Elapsed.elapsedStr(elapsed.nanoSeconds()));
         return proceed;
     }
-    @Around("@annotation(com.utic.common.annotation.DbmsElapsed)")
-    public Object dbmsElapsedTime(ProceedingJoinPoint joinPoint) throws Throwable {
-        Object[] params = joinPoint.getArgs();
-        DbmsData dbmsData = null;
-        if (params.length > 0) {
-            if (params[0] instanceof DbmsData) {
-                dbmsData = (DbmsData) params[0];
-            }
-        }
-
-        String proceedName = String.format("%45s", joinPoint.getTarget().getClass().getSimpleName() + "." + joinPoint.getSignature().getName());
-        Elapsed elapsed = new Elapsed();
-        Object proceed = joinPoint.proceed();
-        if (dbmsData != null) {
-//            switch(dbmsData.getType()) {
-//                case DbmsData.DBMS_DATA_SND_LOG_INCIDENT:
-//                    log.info("{}: DBMS_DATA_SND_LOG_INCIDENT, {}", proceedName, Elapsed.elapsedStr(elapsed.nanoSeconds()));
-//                    break;
-//                case DbmsData.DBMS_DATA_SND_LOG_TRAFFIC:
-//                    TbSndLog trfLog = (TbSndLog) dbmsData.getData();
-//                    log.info("{}: DBMS_DATA_SND_LOG_TRAFFIC, {} EA. {}", proceedName, trfLog.getDataCnt(), Elapsed.elapsedStr(elapsed.nanoSeconds()));
-//                    break;
-//                case DbmsData.DBMS_DATA_DELETE_SND_LOG:
-//                    log.info("{}: DBMS_DATA_DELETE_SND_LOG, {}", proceedName, Elapsed.elapsedStr(elapsed.nanoSeconds()));
-//                    break;
-//                case DbmsData.DBMS_DATA_DELETE_SND_INCIDENT:
-//                    log.info("{}: DBMS_DATA_DELETE_SND_INCIDENT, {}", proceedName, Elapsed.elapsedStr(elapsed.nanoSeconds()));
-//                    break;
-//                default:
-//            }
-        }
-        else {
-            log.info("{}: {}", proceedName, Elapsed.elapsedStr(elapsed.nanoSeconds()));
-        }
-        return proceed;
-    }
 }

+ 12 - 34
utic-ptis-server/src/main/java/com/utic/ptis/server/controller/LinkTrafPrcsController.java

@@ -13,10 +13,12 @@ import org.springframework.util.StopWatch;
 public class LinkTrafPrcsController implements AbstractProcessController {
 
     private final LinkTrafPrcsTime prcsTime;
-    private final LinkRepositoryService linkRepositoryService;
+    private final LinkRepositoryService repositoryService;
+    private final LinkTrafDeleteService trafDeleteService;
     private final LinkTrafCollectService trafCollectService;
     private final LinkTrafFusionService trafFusionService;
     private final LinkTrafMissingService trafMissingService;
+    private final LinkTrafSaveService trafSaveService;
 
     private String statTime;
     private String fromTime;
@@ -38,7 +40,7 @@ public class LinkTrafPrcsController implements AbstractProcessController {
          */
         this.prcsTime.init();
 
-        this.linkRepositoryService.getFusionInfo().init();
+        this.repositoryService.getFusionInfo().init();
 
         log.info("[PROCESSING]Current/Current_5M/Current_5M_Prcs: {}/{}/{}",    this.prcsTime.getCurrTime(),      this.prcsTime.getCurrFiveMin(),     this.prcsTime.getPrcsFiveMin());
         log.info("[PROCESSING]         Current_5M_Prcs/Start/End: {}/{}/{}",    this.prcsTime.getPrcsFiveMin(),   this.prcsTime.getPrcsFiveMinFrom(), this.prcsTime.getPrcsFiveMinTo());
@@ -66,6 +68,9 @@ public class LinkTrafPrcsController implements AbstractProcessController {
         // 가공처리 작업을 수행하기 위한 초기화 작업을 수행한다.
         initialize();
 
+        // 0. 소통정보 저장할 테이블 삭제
+        this.trafDeleteService.processing();
+
         // 1. 수집원별 링크 원시 교통정보 조회
         this.trafCollectService.processing();
 
@@ -75,38 +80,11 @@ public class LinkTrafPrcsController implements AbstractProcessController {
         // 3. 결측처리
         this.trafMissingService.processing();
 
-//        // 돌발발생구간 정보 로딩.
-//        this.incdOcrrService.load();
-//
-//        // 교통정보 가공
-//        this.linkService.processing();
-//        this.ifscService.processing();
-//        this.roadService.processing();
-//        this.vmsIfscService.processing();
-//        this.trafPrcsCountService.processing();
-//
-//        // 15분 통계 정보를 이용해서 15분 패턴정보를 생성하기 때문에 통계정보를 먼저 생성하도록 한다.
-//        if (this.prcsTime.isStat15Min()) {
-//            this.linkService.processStat();
-//            this.ifscService.processStat();
-//            this.roadService.processStat();
-//        }
-//
-//        // 패턴정보 생성 및 업데이트
-//        this.linkService.processPtrn();
-//        this.ifscService.processPtrn();
-//        this.roadService.processPtrn();
-//
-//        // 외부연계 처리
-//        this.externalLinkService.processing();
-//
-//        // 가공 완료
-//        this.prcsTime.setProcessing(false);
-//
-//        // 가공완료 정보를 통보
-//        this.trafficNotifyDataSender.notifyTrafficPrcsCompleted(this.prcsTime.getCurrFiveMin(), this.prcsTime.getPrcsFiveMin());
-//
-//        AppRepository.getInstance().endPrcsJob(eTrafPrcsJob.PRCS_05M_ALL, 0, true);
+        // 4. 소통정보 저장 테이블 삭제 작업 완료 대기
+        this.trafDeleteService.waitForComplete();
+
+        // 5. 소통정보 저장
+        this.trafSaveService.processing();
 
         stopWatch.stop();
         log.info("[TRAFFIC---]                         LinkTrafPrcsController: ..END. {} ms", stopWatch.getTotalTimeMillis());

+ 13 - 0
utic-ptis-server/src/main/java/com/utic/ptis/server/dao/mapper/dwdb/DwdbTrafficMapper.java

@@ -0,0 +1,13 @@
+package com.utic.ptis.server.dao.mapper.dwdb;
+
+import com.utic.ptis.server.dto.LinkTrafCenterHistDto;
+import com.utic.ptis.server.dto.LinkTrafFusionInfo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+@Mapper
+public interface DwdbTrafficMapper {
+    int insertTrafficCenterHist(@Param("obj") LinkTrafCenterHistDto obj);
+    int insertLinkFusionLog(@Param("obj") LinkTrafFusionInfo obj);
+
+}

+ 0 - 11
utic-ptis-server/src/main/java/com/utic/ptis/server/dao/mapper/utic/DeleteMapper.java

@@ -1,11 +0,0 @@
-package com.utic.ptis.server.dao.mapper.utic;
-
-import org.apache.ibatis.annotations.Mapper;
-
-@Mapper
-public interface DeleteMapper {
-
-    int deleteTrafficCenter();
-    int deleteTrafficCenterExt();
-
-}

+ 15 - 0
utic-ptis-server/src/main/java/com/utic/ptis/server/dao/mapper/utic/UticTrafficMapper.java

@@ -0,0 +1,15 @@
+package com.utic.ptis.server.dao.mapper.utic;
+
+import com.utic.ptis.server.dto.LinkTrafCenterDto;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+@Mapper
+public interface UticTrafficMapper {
+
+    int deleteTrafficCenter();
+    int deleteTrafficCenterExt();
+    int insertTrafficCenter(@Param("obj") LinkTrafCenterDto obj);
+    int insertTrafficCenterExt(@Param("obj") LinkTrafCenterDto obj);
+
+}

+ 16 - 0
utic-ptis-server/src/main/java/com/utic/ptis/server/dto/DbmsJobResultDto.java

@@ -0,0 +1,16 @@
+package com.utic.ptis.server.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor//(access = AccessLevel.PROTECTED)
+@AllArgsConstructor
+public class DbmsJobResultDto {
+    private String tableName;
+    private int effects;
+    private long elapsedTime;
+}

+ 4 - 0
utic-ptis-server/src/main/java/com/utic/ptis/server/dto/LinkDto.java

@@ -37,6 +37,10 @@ public class LinkDto  implements Serializable {
     private LinkTrafMiss missPsd;       // PSD 알고리즘 수행 값
     private LinkTrafMiss missKnn;       // k-NN 알고리즘 수행 값
 
+    public LinkTrafCenterDto getTrafficDto(String regDate) {
+        return this.trafFsn.toDto(this.linkId, this.linkLevel, regDate);
+    }
+
     public void init() {
         this.upLinkId = "";
         this.dnLinkId = "";

+ 52 - 0
utic-ptis-server/src/main/java/com/utic/ptis/server/dto/LinkMissingValueHist.java

@@ -0,0 +1,52 @@
+package com.utic.ptis.server.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class LinkMissingValueHist implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String linkId;
+    private String exeDate;
+    private int l4LinkSpd;
+    private int upLinkSpd;
+    private int dnLinkSpd;
+    private int l4PatnSpd;
+    private int upPatnSpd;
+    private int dnPatnSpd;
+    private int linkPatnSpd;
+    private String missingType;
+    private int revisionSpd;
+    private String l4LinkId;
+    private String upLinkId;
+    private String dnLinkId;
+    private int psdSpeed;
+    private int knnSpeed;
+    private int knnCnt;
+
+    public LinkMissingValueHist() {
+        init();
+    }
+
+    public void init() {
+        this.linkId = "";
+        this.exeDate = "";
+        this.l4LinkSpd = 0;
+        this.upLinkSpd = 0;
+        this.dnLinkSpd = 0;
+        this.l4PatnSpd = 0;
+        this.upPatnSpd = 0;
+        this.dnPatnSpd = 0;
+        this.linkPatnSpd = 0;
+        this.missingType = "";
+        this.revisionSpd = 0;
+        this.l4LinkId = "";
+        this.upLinkId = "";
+        this.dnLinkId = "";
+        this.psdSpeed = 0;
+        this.knnSpeed = 0;
+        this.knnCnt = 0;
+    }
+}

+ 22 - 0
utic-ptis-server/src/main/java/com/utic/ptis/server/dto/LinkTrafCenterDto.java

@@ -0,0 +1,22 @@
+package com.utic.ptis.server.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor//(access = AccessLevel.PROTECTED)
+@AllArgsConstructor
+public class LinkTrafCenterDto {
+    private String linkId;
+    private String missValueYn;
+    private String regDate;
+    private int    linkLevel;
+    private int    speed;
+    private int    travelTime;
+    private String trafficGrade;
+    private String dataResType;
+    private String centerId;
+}

+ 27 - 0
utic-ptis-server/src/main/java/com/utic/ptis/server/dto/LinkTrafCenterHistDto.java

@@ -0,0 +1,27 @@
+package com.utic.ptis.server.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor//(access = AccessLevel.PROTECTED)
+@AllArgsConstructor
+public class LinkTrafCenterHistDto {
+    private String linkId;
+    private String missValueYn;
+    private String regDate;
+    private int    linkLevel;
+    private int    speed;
+    private int    travelTime;
+    private String trafficGrade;
+    private String dataResType;
+    private String centerId;
+
+    private String psdMissValueYn;
+    private int    psdSpeed;
+    private int    knnSpeed;
+    private int    knnCnt;
+}

+ 1 - 0
utic-ptis-server/src/main/java/com/utic/ptis/server/dto/LinkTrafFusionInfo.java

@@ -8,6 +8,7 @@ import java.io.Serializable;
 public class LinkTrafFusionInfo implements Serializable {
     private static final long serialVersionUID = 1L;
 
+    private String regDate;
     private int prcsType;           /* 정보가공 유형(0:우선순위,1:가중치) */
     private int linkCnt;            /* 레벨1 링크 전체 갯수 */
 

+ 14 - 0
utic-ptis-server/src/main/java/com/utic/ptis/server/dto/LinkTrafVal.java

@@ -35,6 +35,20 @@ public class LinkTrafVal implements Serializable {
         this.travelTime = val.getTravelTime();
     }
 
+    public LinkTrafCenterDto toDto(String linkId, int linkLevel, String regDate) {
+        return LinkTrafCenterDto.builder()
+                .linkId(linkId)
+                .missValueYn(this.getState().getMissValueYn())
+                .regDate(regDate)
+                .linkLevel(linkLevel)
+                .speed(this.speed)
+                .travelTime(this.travelTime)
+                .trafficGrade("0" + this.getState().getTrafficGrade())
+                .dataResType(this.getState().getDataResType())
+                .centerId(this.centerId)
+                .build();
+    }
+
     public void setTraffic(LinkCollectDto traffic) {
         this.centerId = traffic.getCenterId();
         this.speed = traffic.getSpeed();

+ 0 - 21
utic-ptis-server/src/main/java/com/utic/ptis/server/process/AbstractAppProcess.java

@@ -1,21 +0,0 @@
-package com.utic.ptis.server.process;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public abstract class AbstractAppProcess {
-
-    protected ThreadGroup workerGroup;
-    protected int workers;
-    protected List<Thread> threadList = new ArrayList<Thread>();
-    protected List<AbstractAppWorker> workerList = new ArrayList<AbstractAppWorker>();
-
-    protected long startTm, endTm;
-//    protected Counter counter = new Counter();
-
-    public abstract boolean add(Object packet, int idx);
-
-    public abstract void run();
-    public abstract void stop();
-    public abstract void report();
-}

+ 0 - 24
utic-ptis-server/src/main/java/com/utic/ptis/server/process/AbstractAppWorker.java

@@ -1,24 +0,0 @@
-package com.utic.ptis.server.process;
-
-public abstract class AbstractAppWorker {
-
-    protected long avgTime = 0;
-    protected int idx;
-    protected int qSize;
-
-    public abstract boolean add(Object packet);
-    public abstract void process(Object packet);
-    public abstract void report();
-
-    protected long calcProcessTime(long recvTime) {
-        long jobTime = System.nanoTime() - recvTime;
-        if (this.avgTime == 0) {
-            this.avgTime = jobTime;
-        }
-        else {
-            this.avgTime = (this.avgTime + jobTime) / 2L;
-        }
-        return this.avgTime;
-    }
-
-}

+ 0 - 35
utic-ptis-server/src/main/java/com/utic/ptis/server/process/dbms/DbmsData.java

@@ -1,35 +0,0 @@
-package com.utic.ptis.server.process.dbms;
-
-import lombok.Getter;
-import lombok.Setter;
-
-@Getter
-@Setter
-public class DbmsData {
-
-    public static final int DBMS_DATA_PROCESS_STTS = 0;
-    public static final int DBMS_DATA_CENTER_STTS = 1;
-    public static final int DBMS_DATA_CENTER_STTS_UPDATE = 2;
-
-    public static final int DBMS_DATA_INT_PHASE_CHANGE = 10;
-    public static final int DBMS_DATA_INT_PHASE_CYCLE = 11;
-    public static final int DBMS_DATA_INT_EVENT_INFO = 12;
-    public static final int DBMS_DATA_INT_OPER_PLAN = 13;
-    public static final int DBMS_DATA_INT_HOLIDAY = 14;
-    public static final int DBMS_DATA_INT_WEEKDAY = 15;
-    public static final int DBMS_DATA_INT_FUNCTION = 16;
-    public static final int DBMS_DATA_INT_SIGNALMAP = 17;
-    public static final int DBMS_DATA_INT_TYPE = 18;
-
-
-    private int          type;
-    private boolean      isHistory;
-    private Object       data;
-
-    public DbmsData(int type, boolean isHistory, Object data) {
-        this.type      = type;
-        this.isHistory = isHistory;
-        this.data      = data;
-    }
-
-}

+ 0 - 16
utic-ptis-server/src/main/java/com/utic/ptis/server/process/dbms/DbmsDataAsyncTask.java

@@ -1,16 +0,0 @@
-package com.utic.ptis.server.process.dbms;
-
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.stereotype.Service;
-
-@Slf4j
-@Service
-public class DbmsDataAsyncTask {
-
-    @Async("dbmsDataExecutor")
-    public void run(DbmsDataProcess process, DbmsData data) {
-        process.runJob(data);
-    }
-
-}

+ 0 - 174
utic-ptis-server/src/main/java/com/utic/ptis/server/process/dbms/DbmsDataProcess.java

@@ -1,174 +0,0 @@
-package com.utic.ptis.server.process.dbms;
-
-import com.utic.common.dto.ProcessStateDto;
-import com.utic.common.spring.SpringUtils;
-import com.utic.common.utils.Elapsed;
-import com.utic.ptis.server.config.ThreadPoolInitializer;
-import com.utic.ptis.server.dao.mapper.utic.ProcessMapper;
-import com.utic.ptis.server.dao.mapper.utic.batch.UticPtisServerDao;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.slf4j.MDC;
-import org.springframework.stereotype.Service;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.concurrent.Executors;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-
-@Slf4j
-@SuppressWarnings("unchecked")
-@RequiredArgsConstructor
-@Service
-public class DbmsDataProcess {
-
-    private final LinkedBlockingQueue<DbmsData> dbmsDataBlockingQueue = new LinkedBlockingQueue<>(1000);
-    private final ThreadPoolExecutor taskExecutor = (ThreadPoolExecutor) Executors.newFixedThreadPool(1);
-
-    private final DbmsDataAsyncTask asyncTask;
-    private final ProcessMapper processMapper;
-    private final UticPtisServerDao uticPtisServerDao;
-
-    private int maxCore = Runtime.getRuntime().availableProcessors();
-
-    public void run() {
-        log.info("DbmsDataProcess.run: Start.");
-        if (this.maxCore < 8) {
-            this.maxCore = 8;
-        }
-        ThreadPoolInitializer poolInitializer = SpringUtils.getBean(ThreadPoolInitializer.class);
-        int executePool = poolInitializer.getDbms();
-        for (int ii = 0; ii < executePool; ii++) {
-            log.info("DbmsDataProcess.Task: {}", ii);
-            this.taskExecutor.execute(() -> {
-                boolean isRunning = true;
-                while (isRunning) {
-                    try {
-                        DbmsData data = dbmsDataBlockingQueue.take();
-                        this.asyncTask.run(this, data);
-                    }
-                    catch (Exception e) {
-                        log.error("DbmsDataProcess.Task: Exception: {}", e.getMessage(), e);
-                        Thread.currentThread().interrupt();
-                        isRunning = false;
-                    }
-                }
-            });
-        }
-        log.info("DbmsDataProcess.run: ..End.");
-    }
-
-    public void runJob(DbmsData data) {
-        if (data.getType() == DbmsData.DBMS_DATA_PROCESS_STTS) {
-            ProcessStateDto stts = (ProcessStateDto) data.getData();
-            this.processMapper.updateProcessState(stts);
-        }
-        else {
-            process(data);
-        }
-    }
-
-    public void process(DbmsData data) {
-        int result = -1;
-        int type = -1;
-//        RegionCenter center = data.getCenter();
-        try {
-//            MDC.put("id", center.getLogKey());
-            Elapsed elapsed1 = new Elapsed();
-
-            type = data.getType();
-            switch(type) {
-                case DbmsData.DBMS_DATA_INT_PHASE_CHANGE:
-                    List<HashMap<String, Object>> changeLists = (List<HashMap<String, Object>>)data.getData();
-//                    result = this.uticPtisServerDao.updateIntPhaseChange(center.getRegionCd(), changeLists);
-//                    List<IntStatusDto> intStatusLists = (List<IntStatusDto>)data.getData();
-//                    result = this.sigCommServerDao.updateIntPhaseChange(center.getRegionCd(), intStatusLists);
-                    break;
-                case DbmsData.DBMS_DATA_INT_PHASE_CYCLE:
-                    List<HashMap<String, Object>> cycleLists = (List<HashMap<String, Object>>)data.getData();
-//                    result = this.uticPtisServerDao.updateIntStaticCycle(center.getRegionCd(), cycleLists);
-                    break;
-
-                case DbmsData.DBMS_DATA_INT_EVENT_INFO:
-                    List<HashMap<String, Object>> eventLists = (List<HashMap<String, Object>>)data.getData();
-//                    result = this.uticPtisServerDao.insertIntEventHist(center.getRegionCd(), eventLists);
-                    break;
-
-
-                case DbmsData.DBMS_DATA_INT_OPER_PLAN:
-                    List<HashMap<String, Object>> operPlanLists = (List<HashMap<String, Object>>)data.getData();
-//                    result = this.uticPtisServerDao.updateIntTodPlan(center.getRegionCd(), operPlanLists);
-//                    result = this.uticPtisServerDao.updateIntOperPlan(center.getRegionCd(), operPlanLists);
-                    break;
-                case DbmsData.DBMS_DATA_INT_HOLIDAY:
-                    List<HashMap<String, Object>> holidayLists = (List<HashMap<String, Object>>)data.getData();
-//                    result = this.uticPtisServerDao.updateIntHolidayPlan(center.getRegionCd(), holidayLists);
-                    break;
-                case DbmsData.DBMS_DATA_INT_WEEKDAY:
-                    List<HashMap<String, Object>> weekdayLists = (List<HashMap<String, Object>>)data.getData();
-//                    result = this.uticPtisServerDao.updateIntWeekdayPlan(center.getRegionCd(), weekdayLists);
-                    break;
-                case DbmsData.DBMS_DATA_INT_FUNCTION:
-                    List<HashMap<String, Object>> functionLists = (List<HashMap<String, Object>>)data.getData();
-//                    result = this.uticPtisServerDao.updateIntReservedPlan(center.getRegionCd(), functionLists);
-                    break;
-                case DbmsData.DBMS_DATA_INT_SIGNALMAP:
-                    List<HashMap<String, Object>> signalMapLists = (List<HashMap<String, Object>>)data.getData();
-//                    result = this.uticPtisServerDao.updateIntSignalMap(center.getRegionCd(), signalMapLists);
-                    break;
-                case DbmsData.DBMS_DATA_INT_TYPE:
-//                    List<HashMap<String, Object>> intTypeLists = (List<HashMap<String, Object>>)data.getData();
-//                    result = this.uticPtisServerDao.updateIntType(center.getRegionCd(), intTypeLists);
-                    break;
-
-                case DbmsData.DBMS_DATA_CENTER_STTS_UPDATE:
-//                    TbRegionCenterComm updStts = (TbRegionCenterComm) data.getData();
-//                    this.centerMapper.updateCommState(updStts);
-                    break;
-
-                case DbmsData.DBMS_DATA_CENTER_STTS:
-//                    TbRegionCenterComm stts = (TbRegionCenterComm) data.getData();
-//                    if (TbRegionCenterComm.CENTER_COMM_START.equals(stts.getCommState())) {
-////                        result = this.centerMapper.updateCommStateConnect(stts);
-//                    }
-//                    else if (TbRegionCenterComm.CENTER_COMM_STOP.equals(stts.getCommState())) {
-////                        result = this.centerMapper.updateCommStateDisconnect(stts);
-////                        // 통신 Offline 인 센터에 속한 교차로 통신상태를 모두 Offline 으로 업데이트 한다.
-////                        result = this.intMapper.updateRegionIntSttsOffline(stts.getRegionCd());
-//                    }
-                    break;
-                default:
-                    log.error("DbmsJobProcess.process: Unknown Request {}.", type);
-                    break;
-            }
-//            log.info("DbmsDataProcess.run: [{}]. {}, {} EA. {}",
-//                    center.getLogKey(), type, result, Elapsed.elapsedStr(elapsed1.nanoSeconds()));
-        }
-        catch (Exception e) {
-//            log.error("DbmsJobProcess.process: [{}]. {}, Exception: {}", center.getLogKey(), type, e.toString());
-        }
-        finally {
-//            MDC.remove(center.getLogKey());
-            MDC.clear();
-        }
-    }
-
-    /*
-     *  작업큐에 데이터 추가
-     */
-    public boolean add(DbmsData data) {
-        boolean offer = false;
-        try {
-            offer = dbmsDataBlockingQueue.offer(data);
-            if (!offer) {
-                log.error("DbmsDataProcess.add: Queue Full Error, Size: {} EA", dbmsDataBlockingQueue.size());
-            }
-        }
-        catch (Exception e) {
-            log.error("DbmsDataProcess.add: Exception: {}", e.getMessage(), e);
-        }
-        return offer;
-    }
-
-}

+ 6 - 6
utic-ptis-server/src/main/java/com/utic/ptis/server/service/LinkTrafCollectSetupService.java

@@ -41,12 +41,12 @@ public class LinkTrafCollectSetupService {
     }
 
     public int load() {
-        LinkCollectSetupDto oper    =    LinkCollectSetupDto.builder().clctSystCd(OPER).clctSystNm(" (SEL)           운영자입력 소통정보").build();
-        LinkCollectSetupDto utis    =    LinkCollectSetupDto.builder().clctSystCd(UTIS).clctSystNm(" (SEL)                 UTIS 소통정보").build();
-        LinkCollectSetupDto prio    =    LinkCollectSetupDto.builder().clctSystCd(PRIO).clctSystNm(" (SEL)             우선순위 소통정보").build();
-        LinkCollectSetupDto prioEtc = LinkCollectSetupDto.builder().clctSystCd(PRIOETC).clctSystNm(" (SEL)        (ETC)우선순위 소통정보").build();
-        LinkCollectSetupDto dongbu  =  LinkCollectSetupDto.builder().clctSystCd(DONGBU).clctSystNm(" (SEL)              동부NTS 소통정보").build();
-        LinkCollectSetupDto moct    =    LinkCollectSetupDto.builder().clctSystCd(MOCT).clctSystNm(" (SEL)           국토부민간 소통정보").build();
+        LinkCollectSetupDto oper = LinkCollectSetupDto.builder().clctSystCd(OPER).clctSystNm("운영자입력 소통정보").build();
+        LinkCollectSetupDto utis = LinkCollectSetupDto.builder().clctSystCd(UTIS).clctSystNm("UTIS 소통정보").build();
+        LinkCollectSetupDto prio = LinkCollectSetupDto.builder().clctSystCd(PRIO).clctSystNm("우선순위 소통정보").build();
+        LinkCollectSetupDto prioEtc = LinkCollectSetupDto.builder().clctSystCd(PRIOETC).clctSystNm("(ETC)우선순위 소통정보").build();
+        LinkCollectSetupDto dongbu = LinkCollectSetupDto.builder().clctSystCd(DONGBU).clctSystNm("동부NTS 소통정보").build();
+        LinkCollectSetupDto moct = LinkCollectSetupDto.builder().clctSystCd(MOCT).clctSystNm("국토부민간 소통정보").build();
 
         oper.init();
         utis.init();

+ 29 - 45
utic-ptis-server/src/main/java/com/utic/ptis/server/service/LinkTrafDeleteService.java

@@ -1,16 +1,16 @@
 package com.utic.ptis.server.service;
 
 import com.utic.common.utils.Elapsed;
-import com.utic.ptis.server.dto.LinkCollectParam;
-import com.utic.ptis.server.dto.LinkCollectResultDto;
-import com.utic.ptis.server.dto.LinkCollectSetupDto;
-import com.utic.ptis.server.service.worker.LinkTrafCollectWorker;
+import com.utic.ptis.server.dao.mapper.utic.UticTrafficMapper;
+import com.utic.ptis.server.dto.DbmsJobResultDto;
+import com.utic.ptis.server.service.worker.LinkTrafDeleteWorker;
 import lombok.Data;
 import lombok.RequiredArgsConstructor;
 import lombok.ToString;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.PostConstruct;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -23,65 +23,49 @@ import java.util.concurrent.TimeUnit;
 @Service
 public class LinkTrafDeleteService implements AbstractProcessService {
 
-    private final LinkTrafPrcsTime prcsTime;
-    private final LinkTrafCollectSetupService collectSetupService;
+    public static final String TABLE_TRAFFIC_CENTER = "TRAFFIC_CENTER";
+    public static final String TABLE_TRAFFIC_CENTER_EXT = "TRAFFIC_CENTER_EXT";
 
-    private ConcurrentHashMap<String, LinkCollectResultDto> mapData = new ConcurrentHashMap<>();
-
-    public LinkCollectResultDto get(String key) {
-        return this.mapData.get(key);
-    }
+    private ExecutorService executorService = Executors.newFixedThreadPool(2);
+    private ConcurrentHashMap<String, DbmsJobResultDto> mapData = new ConcurrentHashMap<>();
+    private final UticTrafficMapper mapper;
 
+    @PostConstruct
     public void init() {
-        for (String id: this.mapData.keySet()) {
-            this.mapData.get(id).getLists().clear();
-        }
-        this.mapData.clear();
+        log.info("[DELETE.] LinkTrafDeleteService.init: start.");
+        Elapsed elapsed = new Elapsed();
+
+        // 초기화
+        this.mapData.put(TABLE_TRAFFIC_CENTER, DbmsJobResultDto.builder().tableName(TABLE_TRAFFIC_CENTER).effects(0).elapsedTime(0).build());
+        this.mapData.put(TABLE_TRAFFIC_CENTER_EXT, DbmsJobResultDto.builder().tableName(TABLE_TRAFFIC_CENTER_EXT).effects(0).elapsedTime(0).build());
+
+        log.info("[DELETE.] LinkTrafDeleteService.init: end. {} ms.", elapsed.milliSeconds());
     }
 
     public int processing() {
         log.info("[DELETE.] LinkTrafDeleteService.processing: start.");
         Elapsed elapsed = new Elapsed();
-        init();
-
-        int clctSystCnt = this.collectSetupService.count();
-        if (clctSystCnt <= 0) {
-            log.error("[DELETE.] LinkTrafDeleteService.processing: system no collect bean.");
-            return 0;
-        }
 
-        this.prcsTime.setCurrFiveMin("20250429150000");
-        LinkCollectParam collectParam = LinkCollectParam.builder()
-                .ansTime(this.prcsTime.getCurrFiveMin())
-                .build();
+        this.mapData.forEach((deleteTable, result) -> {
+            result.setEffects(0);
+            result.setElapsedTime(0);
+            this.executorService.execute(new LinkTrafDeleteWorker(deleteTable, result, this.mapper));
+        });
 
-        ExecutorService executorService = Executors.newFixedThreadPool(clctSystCnt);
-        for (String clctSystCode: this.collectSetupService.keySet()) {
-            executorService.execute(new LinkTrafCollectWorker(clctSystCode, collectParam, this.mapData, this.collectSetupService));
-        }
+        log.info("[DELETE.] LinkTrafDeleteService.processing: end. {}", Elapsed.elapsedStr(elapsed.nanoSeconds()));
+        return 2;
+    }
 
+    public void waitForComplete() {
         try {
             executorService.shutdown();
-            if (!executorService.awaitTermination(100, TimeUnit.SECONDS)) {
+            if (!executorService.awaitTermination(120, TimeUnit.SECONDS)) {
                 executorService.shutdownNow();
             }
         } catch (InterruptedException e) {
-            log.error("[DELETE.] LinkTrafDeleteService.processing: LinkCollectWorker InterruptedException, {}", e.getMessage());
+            log.error("[DELETE.] LinkTrafDeleteService.waitForComplete: LinkTrafDeleteWorker InterruptedException, {}", e.getMessage());
             executorService.shutdownNow();
         }
-
-        // 수집원 별 수집 데이터 건수 설정
-        for (String clctSystCode: this.collectSetupService.keySet()) {
-            LinkCollectSetupDto systStup = this.collectSetupService.get(clctSystCode);
-            systStup.setClctNum(0);
-            LinkCollectResultDto collect = this.mapData.get(clctSystCode);
-            if (collect != null) {
-                systStup.setClctNum(collect.getLists().size());
-            }
-            log.info("[DELETE.] LinkTrafDeleteService.processing: [{}] {}, [{}] EA.", clctSystCode, systStup.getClctSystNm(), systStup.getClctNum());
-        }
-        log.info("[DELETE.] LinkTrafDeleteService.processing: end. {}", Elapsed.elapsedStr(elapsed.nanoSeconds()));
-        return this.mapData.size();
     }
 
 }

+ 28 - 0
utic-ptis-server/src/main/java/com/utic/ptis/server/service/LinkTrafSaveService.java

@@ -0,0 +1,28 @@
+package com.utic.ptis.server.service;
+
+import com.utic.common.utils.Elapsed;
+import lombok.Data;
+import lombok.RequiredArgsConstructor;
+import lombok.ToString;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Data
+@ToString
+@RequiredArgsConstructor
+@Service
+public class LinkTrafSaveService implements AbstractProcessService {
+
+    private final UticSqlSessionService uticSqlSessionService;
+    private final LinkTrafPrcsTime prcsTime;
+    private final LinkRepositoryService linkRepositoryService;
+
+    public int processing() {
+        log.info("[SAVE...] LinkTrafSaveService.processing: start.");
+        Elapsed elapsed = new Elapsed();
+        log.info("[DELETE.] LinkTrafSaveService.processing: end. {}", Elapsed.elapsedStr(elapsed.nanoSeconds()));
+        return 0;
+    }
+
+}

+ 50 - 0
utic-ptis-server/src/main/java/com/utic/ptis/server/service/UticSqlSessionService.java

@@ -0,0 +1,50 @@
+package com.utic.ptis.server.service;
+
+import com.utic.common.utils.Elapsed;
+import lombok.Data;
+import lombok.RequiredArgsConstructor;
+import lombok.ToString;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.session.ExecutorType;
+import org.apache.ibatis.session.SqlSession;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Data
+@ToString
+@RequiredArgsConstructor
+@Service
+public class UticSqlSessionService implements AbstractProcessService {
+
+    private final SqlSessionFactory sqlSessionFactory;
+
+    private SqlSession trafficSqlSession = null;
+    private SqlSession trafficExtSqlSession = null;
+
+    public int initialize() {
+        this.trafficSqlSession = this.sqlSessionFactory.openSession(ExecutorType.BATCH, false);
+        this.trafficExtSqlSession = this.sqlSessionFactory.openSession(ExecutorType.BATCH, false);
+        return 0;
+    }
+    public void complete() {
+        if (this.trafficSqlSession != null) {
+            this.trafficSqlSession.commit();
+            this.trafficSqlSession.close();
+        }
+        if (this.trafficExtSqlSession != null) {
+            this.trafficExtSqlSession.commit();
+            this.trafficExtSqlSession.close();
+        }
+    }
+
+    public int processing() {
+        log.info("[COLLECT] UticSqlSessionService.processing: start.");
+        Elapsed elapsed = new Elapsed();
+
+        initialize();
+        log.info("[DELETE.] UticSqlSessionService.processing: end. {}", Elapsed.elapsedStr(elapsed.nanoSeconds()));
+        return 0;
+    }
+
+}

+ 2 - 1
utic-ptis-server/src/main/java/com/utic/ptis/server/service/worker/LinkTrafCollectWorker.java

@@ -6,6 +6,7 @@ import com.utic.ptis.server.dto.LinkCollectParam;
 import com.utic.ptis.server.dto.LinkCollectResultDto;
 import com.utic.ptis.server.dto.LinkCollectSetupDto;
 import com.utic.ptis.server.service.LinkTrafCollectSetupService;
+import com.utic.ptis.server.utils.LogUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.ibatis.mapping.MappedStatement;
@@ -110,7 +111,7 @@ public class LinkTrafCollectWorker implements Runnable {
             this.mapData.put(this.clctSystCd, LinkCollectResultDto.builder().clctSystCd(this.clctSystCd).lists(new ArrayList<>()).build());
         }
         stopWatch.stop();
-        log.info("[COLLECT] LinkTrafCollectWorker.run: {}: [{} EA. {} ms]", jobType, resultCount, stopWatch.getTotalTimeMillis());
+        log.info("[COLLECT] LinkTrafCollectWorker.run:  (SEL) {}", LogUtils.elapsedLog(jobType, resultCount, stopWatch.getTotalTimeMillis()));
     }
 
 }

+ 17 - 87
utic-ptis-server/src/main/java/com/utic/ptis/server/service/worker/LinkTrafDeleteWorker.java

@@ -1,116 +1,46 @@
 package com.utic.ptis.server.service.worker;
 
-import com.utic.common.spring.SpringUtils;
-import com.utic.ptis.server.dto.LinkCollectDto;
-import com.utic.ptis.server.dto.LinkCollectParam;
-import com.utic.ptis.server.dto.LinkCollectResultDto;
-import com.utic.ptis.server.dto.LinkCollectSetupDto;
-import com.utic.ptis.server.service.LinkTrafCollectSetupService;
+import com.utic.ptis.server.dao.mapper.utic.UticTrafficMapper;
+import com.utic.ptis.server.dto.DbmsJobResultDto;
+import com.utic.ptis.server.service.LinkTrafDeleteService;
+import com.utic.ptis.server.utils.LogUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.ibatis.mapping.MappedStatement;
-import org.apache.ibatis.session.ExecutorType;
-import org.apache.ibatis.session.SqlSession;
-import org.apache.ibatis.session.SqlSessionFactory;
 import org.springframework.util.StopWatch;
 
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-
 @Slf4j
 @RequiredArgsConstructor
 public class LinkTrafDeleteWorker implements Runnable {
 
-    private final String clctSystCd;
-    private final LinkCollectParam params;
-    private final ConcurrentHashMap<String, LinkCollectResultDto> mapData;
-    private final LinkTrafCollectSetupService collectSetupService;
+    private final String deleteTable;
+    private final DbmsJobResultDto dbmsJobResult;
+    private final UticTrafficMapper mapper;
 
     @Override
     public void run() {
-        SqlSessionFactory sqlSessionFactory;
-
-        LinkCollectSetupDto stup = this.collectSetupService.get(this.clctSystCd);
-        String jobType = (stup == null) ? " (SEL) UNKNOWN, " + this.clctSystCd : stup.getClctSystNm();
-
         StopWatch stopWatch = new StopWatch();
-        stopWatch.start(jobType);
-
-        try {
-            sqlSessionFactory = (SqlSessionFactory)SpringUtils.getBean(this.clctSystCd.toLowerCase());
-        } catch (Exception e) {
-            sqlSessionFactory = SpringUtils.getBean(SqlSessionFactory.class);
-        }
-
-        if (sqlSessionFactory == null) {
-            log.error("[COLLECT] LinkTrafDeleteWorker.run: SqlSessionFactory is null. [{}], {}.", this.clctSystCd, jobType);
-            this.mapData.put(this.clctSystCd, LinkCollectResultDto.builder().clctSystCd(this.clctSystCd).lists(new ArrayList<>()).build());
-            return;
-        }
-
+        stopWatch.start(this.deleteTable);
         int resultCount = 0;
         try {
             Thread.sleep(10);
 
-            String queryId = "findLinkCollect" + clctSystCd;
-            MappedStatement mappedStatement = sqlSessionFactory.getConfiguration().getMappedStatement(queryId);
-            if (mappedStatement == null) {
-                log.error("[COLLECT] LinkTrafDeleteWorker.run: [{}], {}, {}, queryId is not found.", this.clctSystCd, jobType, queryId);
-                this.mapData.put(this.clctSystCd, LinkCollectResultDto.builder().clctSystCd(this.clctSystCd).lists(new ArrayList<>()).build());
-                return;
-            }
-
-            // 쿼리 ID가 존재하는 경우에만 실행
-            List<LinkCollectDto> queryResult = null;
-            SqlSession sqlSession = null;
-            try {
-                sqlSession = sqlSessionFactory.openSession(ExecutorType.SIMPLE, false);
-                queryResult = sqlSession.selectList(queryId, params);
-            }
-            catch (Exception e) {
-                log.error("[COLLECT] LinkTrafDeleteWorker.run: Exception: [{}], {}, {}, {}", this.clctSystCd, jobType, queryId, e.getMessage());
+            if (LinkTrafDeleteService.TABLE_TRAFFIC_CENTER.equals(this.deleteTable)) {
+                resultCount = this.mapper.deleteTrafficCenter();
             }
-            finally {
-                if (sqlSession != null) {
-                    sqlSession.close();
-                }
-            }
-            if (queryResult == null) {
-                this.mapData.put(this.clctSystCd, LinkCollectResultDto.builder().clctSystCd(this.clctSystCd).lists(new ArrayList<>()).build());
-            }
-            else {
-                resultCount = queryResult.size();
-
-                if (LinkTrafCollectSetupService.PRIO.equals(this.clctSystCd) || LinkTrafCollectSetupService.PRIOETC.equals(this.clctSystCd)) {
-                    // 우선순위 수집의 경우 LinkId 가 중복될 수 있으므로
-                    // 중복된 LinkId 를 제거하기 위해 HashSet 을 사용하여 중복값을 제거
-                    List<LinkCollectDto> result = new ArrayList<>();
-                    Set<String> uniqueSet = new HashSet<>();
-                    for (LinkCollectDto dto : queryResult) {
-                        if (uniqueSet.add(dto.getLinkId())) {  // HashSet 의 add() 메서드는 중복값이 있으면 false 를 반환
-                            result.add(dto);
-                        }
-                    }
-                    this.mapData.put(this.clctSystCd, LinkCollectResultDto.builder().clctSystCd(this.clctSystCd).lists(result).build());
-                }
-                else {
-                    this.mapData.put(this.clctSystCd, LinkCollectResultDto.builder().clctSystCd(this.clctSystCd).lists(queryResult).build());
-                }
+            else if (LinkTrafDeleteService.TABLE_TRAFFIC_CENTER_EXT.equals(this.deleteTable)) {
+                resultCount = this.mapper.deleteTrafficCenterExt();
             }
         }
         catch (InterruptedException e) {
-            log.info("[COLLECT] LinkTrafDeleteWorker.run: InterruptedException, [{}], {}, {}.", this.clctSystCd, jobType, e.getMessage());
-            this.mapData.put(this.clctSystCd, LinkCollectResultDto.builder().clctSystCd(this.clctSystCd).lists(new ArrayList<>()).build());
+            log.info("[DELETE.] LinkTrafDeleteWorker.run: InterruptedException, [{}], {}.", this.deleteTable, e.getMessage());
         }
         catch (Exception e) {
-            log.info("[COLLECT] LinkTrafDeleteWorker.run: Exception, [{}], {}, {}.", this.clctSystCd, jobType, e.getMessage());
-            this.mapData.put(this.clctSystCd, LinkCollectResultDto.builder().clctSystCd(this.clctSystCd).lists(new ArrayList<>()).build());
+            log.info("[DELETE.] LinkTrafDeleteWorker.run: Exception, [{}], {}.", this.deleteTable, e.getMessage());
         }
         stopWatch.stop();
-        log.info("[COLLECT] LinkTrafDeleteWorker.run: {}: [{} EA. {} ms]", jobType, resultCount, stopWatch.getTotalTimeMillis());
+        this.dbmsJobResult.setEffects(resultCount);
+        this.dbmsJobResult.setElapsedTime(stopWatch.getTotalTimeMillis());
+        log.info("[DELETE.] LinkTrafDeleteWorker.run:  (DEL) {}", LogUtils.elapsedLog(this.deleteTable, resultCount, stopWatch.getTotalTimeMillis()));
     }
 
 }

+ 46 - 0
utic-ptis-server/src/main/java/com/utic/ptis/server/service/worker/LinkTrafSaveWorker.java

@@ -0,0 +1,46 @@
+package com.utic.ptis.server.service.worker;
+
+import com.utic.ptis.server.dao.mapper.utic.UticTrafficMapper;
+import com.utic.ptis.server.dto.DbmsJobResultDto;
+import com.utic.ptis.server.service.LinkTrafDeleteService;
+import com.utic.ptis.server.utils.LogUtils;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.util.StopWatch;
+
+@Slf4j
+@RequiredArgsConstructor
+public class LinkTrafSaveWorker implements Runnable {
+
+    private final String deleteTable;
+    private final DbmsJobResultDto dbmsJobResult;
+    private final UticTrafficMapper mapper;
+
+    @Override
+    public void run() {
+        StopWatch stopWatch = new StopWatch();
+        stopWatch.start(this.deleteTable);
+        int resultCount = 0;
+        try {
+            Thread.sleep(10);
+
+            if (LinkTrafDeleteService.TABLE_TRAFFIC_CENTER.equals(this.deleteTable)) {
+                resultCount = this.mapper.deleteTrafficCenter();
+            }
+            else if (LinkTrafDeleteService.TABLE_TRAFFIC_CENTER_EXT.equals(this.deleteTable)) {
+                resultCount = this.mapper.deleteTrafficCenterExt();
+            }
+        }
+        catch (InterruptedException e) {
+            log.info("[DELETE.] LinkTrafDeleteWorker.run: InterruptedException, [{}], {}.", this.deleteTable, e.getMessage());
+        }
+        catch (Exception e) {
+            log.info("[DELETE.] LinkTrafDeleteWorker.run: Exception, [{}], {}.", this.deleteTable, e.getMessage());
+        }
+        stopWatch.stop();
+        this.dbmsJobResult.setEffects(resultCount);
+        this.dbmsJobResult.setElapsedTime(stopWatch.getTotalTimeMillis());
+        log.info("[DELETE.] LinkTrafDeleteWorker.run:  (DEL) {}", LogUtils.elapsedLog(this.deleteTable, resultCount, stopWatch.getTotalTimeMillis()));
+    }
+
+}

+ 39 - 0
utic-ptis-server/src/main/java/com/utic/ptis/server/utils/LogUtils.java

@@ -0,0 +1,39 @@
+package com.utic.ptis.server.utils;
+
+import java.nio.charset.Charset;
+import java.text.DecimalFormat;
+
+public class LogUtils {
+
+    private LogUtils() {}
+
+    public static String repeatString(String str, int count) {
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < count; i++) {
+            sb.append(str);
+        }
+        return sb.toString();
+    }
+
+    public static String adjustLogMsg(String logMsg, int targetBytes) {
+        byte[] bytes = logMsg.getBytes(Charset.forName("EUC-KR"));
+
+        if (bytes.length > targetBytes) {
+            // 초과하는 경우 한글이 깨지지 않도록 문자열을 자름
+            while (logMsg.getBytes(Charset.forName("EUC-KR")).length > targetBytes) {
+                logMsg = logMsg.substring(0, logMsg.length() - 1);
+            }
+        } else {
+            // 부족한 경우 앞쪽에 공백 추가
+            int paddingSize = targetBytes - bytes.length;
+            logMsg = repeatString(" ", paddingSize) + logMsg; // 공백을 반복하여 추가
+        }
+        return logMsg;
+    }
+
+    public static String elapsedLog(String logMsg, int count, long elapsedTime) {
+        String adjustedMsg = adjustLogMsg(logMsg, 30);
+        DecimalFormat df = new DecimalFormat("#,###");
+        return String.format("%s: [%7s EA, %8s ms]", adjustedMsg, df.format(count), df.format(elapsedTime));
+    }
+}

+ 146 - 0
utic-ptis-server/src/main/resources/mybatis/mapper/dwdb/DwdbTrafficMapper.xml

@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.utic.ptis.server.dao.mapper.dwdb.DwdbTrafficMapper">
+
+    <insert id="insertTrafficCenterHist" parameterType="com.utic.ptis.server.dto.LinkTrafCenterHistDto">
+    <![CDATA[
+        INSERT /*+ APPEND PARALLEL(TRAFFIC_CENTER_HIST, 2) */ INTO TRAFFIC_CENTER_HIST NOLOGGING (
+                        regdate        ,
+                        linkid         ,
+                        missvalueyn    ,
+                        linklevel      ,
+                        speed          ,
+                        traveltime     ,
+                        trafficgrade   ,
+                        incidentid     ,
+                        datarestype    ,
+                        centerid       ,
+                        psdmissvalueyn ,
+                        psdspeed       ,
+                        knnspeed       ,
+                        knncnt
+                        )
+        VALUES(
+            #{linkId},
+            #{missValueYn},
+            TO_DATE(#{regDate}, 'YYYYMMDDHH24MISS'),
+            #{linkLevel},
+            #{speed},
+            #{travelTime},
+            #{trafficGrade},
+            #{dataResType},
+            #{centerId},
+            #{psdMissValueYn},
+            DECODE(#{psdSpeed},   0, NULL, #{psdSpeed}),
+            DECODE(#{knnSpeed},   0, NULL, #{knnSpeed}),
+            DECODE(#{knnCnt},     0, NULL, #{knnCnt})
+            )
+        ]]>
+    </insert>
+
+    <insert id="insertLinkFusionLog" parameterType="com.utic.ptis.server.dto.LinkTrafFusionInfo">
+    <![CDATA[
+        INSERT INTO LINK_FUSION_LOG (
+            REGDATE,
+            PRCSTYPE,
+            LINKCNT,
+            COLOPR,
+            COLMOCT,
+            COLGPS,
+            COLUTIS,
+            COLPRI,
+            COLPRIETC,
+            COLDONGBU,
+            COLPNT,
+            FSNOPR,
+            FSNPRI,
+            FSNWGT,
+            MISSKNN,
+            MISSPSD,
+            MISSPTN,
+            MISSMOCT,
+            MISSGG,
+            KNN,
+            PSDUP,
+            PSDDN,
+            PSDUPDN,
+            PSDLV4,
+            FLTSPD,
+            ZEROSPD
+        )
+        VALUES(
+                  TO_DATE(#{regDate}, 'YYYYMMDDHH24MISS'),
+                  #{prcsType},
+                  #{linkCnt},
+                  #{colOprCnt},
+                  #{colMoctCnt},
+                  #{colGpsCnt},
+                  #{colUtisCnt},
+                  #{colPriCnt},
+                  #{colPriEtcCnt},
+                  #{colDongbuCnt},
+                  #{colPtnCnt},
+                  #{fsnOprCnt},
+                  #{fsnPriCnt},
+                  #{fsnWgtCnt},
+                  #{missKnnCnt},
+                  #{missPsdCnt},
+                  #{missPtnCnt},
+                  #{missMoctCnt},
+                  #{missGgCnt},
+                  #{knnCnt},
+                  #{psdUpCnt},
+                  #{psdDnCnt},
+                  #{psdUpDnCnt},
+                  #{psdLv4Cnt},
+                  #{fltSpdCnt},
+                  #{zeroSpdCnt}
+              )
+        ]]>
+    </insert>
+
+    <insert id="insertLinkMissingValueHist" parameterType="com.utic.ptis.server.dto.LinkMissingValueHist">
+    <![CDATA[
+        INSERT /*+ APPEND PARALLEL(LINK_MISSING_VALUE_HIST, 2) */ INTO LINK_MISSING_VALUE_HIST NOLOGGING (
+                    linkid          ,
+                    exe_date        ,
+                    l4_link_speed   ,
+                    up_link_speed   ,
+                    dn_link_speed   ,
+                    l4_patn_speed   ,
+                    up_patn_speed   ,
+                    dn_patn_speed   ,
+                    link_patn_speed ,
+                    missing_type    ,
+                    revision_speed  ,
+                    l4_linkid       ,
+                    up_linkid       ,
+                    dn_linkid       ,
+                    psdspeed        ,
+                    knnspeed        ,
+                    knncnt
+                    )
+        VALUES(
+            #{linkId},
+            #{exeDate},
+            DECODE(#{l4LinkSpd},   0, NULL, #{l4LinkSpd}),
+            DECODE(#{upLinkSpd},   0, NULL, #{upLinkSpd}),
+            DECODE(#{dnLinkSpd},   0, NULL, #{dnLinkSpd}),
+            DECODE(#{l4PatnSpd},   0, NULL, #{l4PatnSpd}),
+            DECODE(#{upPatnSpd},   0, NULL, #{upPatnSpd}),
+            DECODE(#{dnPatnSpd},   0, NULL, #{dnPatnSpd}),
+            DECODE(#{linkPatnSpd}, 0, NULL, #{linkPatnSpd}),
+            #{missingType},
+            DECODE(#{revisionSpd}, 0, NULL, #{revisionSpd}),
+            #{l4LinkId},
+            #{upLinkId},
+            #{dnLinkId},
+            DECODE(#{psdSpeed},   0, NULL, #{psdSpeed}),
+            DECODE(#{knnSpeed},   0, NULL, #{knnSpeed}),
+            DECODE(#{knnCnt},     0, NULL, #{knnCnt})
+            );
+        ]]>
+    </insert>
+
+</mapper>

+ 0 - 18
utic-ptis-server/src/main/resources/mybatis/mapper/utic/DeleteMapper.xml

@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-
-<mapper namespace="com.utic.ptis.server.dao.mapper.utic.DeleteMapper">
-
-    <delete id="deleteTrafficCenter">
-    <![CDATA[
-        DELETE FROM TRAFFIC_CENTER
-        ]]>
-    </delete>
-
-    <delete id="deleteTrafficCenterExt">
-    <![CDATA[
-        DELETE FROM TRAFFIC_CENTER
-        ]]>
-    </delete>
-
-</mapper>

+ 72 - 0
utic-ptis-server/src/main/resources/mybatis/mapper/utic/UticTrafficMapper.xml

@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.utic.ptis.server.dao.mapper.utic.UticTrafficMapper">
+
+    <delete id="deleteTrafficCenter">
+    <![CDATA[
+        DELETE FROM TRAFFIC_CENTER
+        ]]>
+    </delete>
+
+    <delete id="deleteTrafficCenterExt">
+    <![CDATA[
+        DELETE FROM TRAFFIC_CENTER_EXT
+        ]]>
+    </delete>
+
+    <insert id="insertTrafficCenter" parameterType="com.utic.ptis.server.dto.LinkTrafCenterDto">
+    <![CDATA[
+        INSERT /*+ APPEND PARALLEL(TRAFFIC_CENTER, 2) */ INTO TRAFFIC_CENTER NOLOGGING (
+                        linkid       ,
+                        missvalueyn  ,
+                        regdate      ,
+                        linklevel    ,
+                        speed        ,
+                        traveltime   ,
+                        trafficgrade ,
+                        datarestype  ,
+                        centerid
+                        )
+        VALUES(
+            #{linkId},
+            #{missValueYn},
+            TO_DATE(#{regDate}, 'YYYYMMDDHH24MISS'),
+            #{linkLevel},
+            #{speed},
+            #{travelTime},
+            #{trafficGrade},
+            #{dataResType},
+            #{centerId}
+            )
+        ]]>
+    </insert>
+
+    <insert id="insertTrafficCenterExt" parameterType="com.utic.ptis.server.dto.LinkTrafCenterDto">
+    <![CDATA[
+        INSERT /*+ APPEND PARALLEL(TRAFFIC_CENTER_EXT, 2) */ INTO TRAFFIC_CENTER_EXT NOLOGGING (
+                        linkid       ,
+                        missvalueyn  ,
+                        regdate      ,
+                        linklevel    ,
+                        speed        ,
+                        traveltime   ,
+                        trafficgrade ,
+                        datarestype  ,
+                        centerid
+                        )
+        VALUES(
+            #{linkId},
+            #{missValueYn},
+            TO_DATE(#{regDate}, 'YYYYMMDDHH24MISS'),
+            #{linkLevel},
+            #{speed},
+            #{travelTime},
+            #{trafficGrade},
+            #{dataResType},
+            #{centerId}
+            )
+        ]]>
+    </insert>
+
+</mapper>

+ 0 - 50
utic-ptis-server/src/test/java/com/utic/ptis/server/UticPtisServerApplicationTests.java

@@ -1,16 +1,10 @@
 package com.utic.ptis.server;
 
-import com.its.common.utils.ByteUtils;
-import com.utic.ptis.server.xnet.server.process.protocol.SigCommPacket;
-import com.utic.ptis.server.xnet.server.process.response.RecvPacketDto;
-import com.utic.ptis.server.xnet.server.process.response.SigSignalMap;
-import com.sig.common.dto.NetState;
 import lombok.extern.slf4j.Slf4j;
 import org.junit.jupiter.api.Test;
 
 import java.net.InetAddress;
 import java.net.UnknownHostException;
-import java.util.HashMap;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.ThreadPoolExecutor;
@@ -20,44 +14,10 @@ import java.util.concurrent.TimeUnit;
 //@SpringBootTest
 public class UticPtisServerApplicationTests {
 
-    public static final RegionCenter rCenter = RegionCenter.builder()
-            .idx(0)
-            .isDeleted(false)
-            .regionCd("L01")
-            .regionNm("UTIC SIGNAL 센터")
-            .ipAddress("127.0.0.1")
-            .loginId("")
-            .loginPswd("")
-            .fileUpdDt("")
-            .simulateFlag(false)
-            .regionId(7600)
-            .extYn(false)
-            .realtimeYn(false)
-            .dbaseYn(false)
-            .commHistYn(false)
-            .minIntNo(0)
-            .maxIntNo(65535)
-            .intCount(65535)
-            .lastCommMilliSeconds(0)
-            .netState(new NetState())
-            .intMap(new HashMap<>())
-            .dump(false)
-            .build();
-
     @Test
     void testDecompress() {
         //ReadableBytes: 113 Bytes
         String data = "02C518081A01061A11571DB1020C00020003010004006C00001900C800400200140050088040000802A0040021001001408100020C10608000010808A0000000000000000000000000000000000000000000000000000000000000000000000000000001FFC234B7EEAFFBEBB2EDEFFF0C123C030A1E020307140203020C1B320203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003010104006C00008128084441200A0451508882401408A2A0000001001000400102021010808000040820A0000000000000000000000000000000000000000000000000000000000000000000000000000001FF020303030B0C5CEDAFBBFB3BFF0C123C030A1E03071403020C1B32020300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E803";
-        byte[] inBytes = ByteUtils.hexToByteArray(data);
-        log.error("Packet Length: {}", inBytes.length);
-        SigCommPacket sigCommPacket = new SigCommPacket(rCenter, inBytes);
-        RecvPacketDto packet = RecvPacketDto.builder()
-                .recvTime(0)
-                .center(rCenter)
-                .packet(sigCommPacket)
-                .build();
-        SigSignalMap response = new SigSignalMap(null);
-//        response.responseTEST(packet);
     }
 
 
@@ -71,16 +31,6 @@ public class UticPtisServerApplicationTests {
     void testDecompress2010() {
         //ReadableBytes: 113 Bytes
         String data = "02C518081901061911551DB1020C000200010200030036E04BC31020DDC10105E021C11020E030C80102D8C10105C2C10105E039C8010200555C9C2503000102090F3C090F3C010C1246006C2400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010201030025E041C80102E0B7C80102E021C5102000555C9C2503000102090F3C090F3C01040546003E450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AB03";
-        byte[] inBytes = ByteUtils.hexToByteArray(data);
-        log.error("Packet Length: {}", inBytes.length);
-        SigCommPacket sigCommPacket = new SigCommPacket(rCenter, inBytes);
-        RecvPacketDto packet = RecvPacketDto.builder()
-                .recvTime(0)
-                .center(rCenter)
-                .packet(sigCommPacket)
-                .build();
-        SigSignalMap response = new SigSignalMap(null);
-//        response.responseTEST(packet);
     }
 
 

+ 24 - 0
utic-ptis-server/src/test/java/com/utic/ptis/server/utils/LogUtilsTest.java

@@ -0,0 +1,24 @@
+package com.utic.ptis.server.utils;
+
+import lombok.extern.slf4j.Slf4j;
+import org.junit.jupiter.api.Test;
+
+import java.nio.charset.Charset;
+
+@Slf4j
+class LogUtilsTest {
+
+    @Test
+    void testLog() {
+        String message = "UTIS 소통정보";
+        byte[] bytes = message.getBytes(Charset.forName("EUC-KR"));
+        log.info("Length: {}", message.length());
+        log.info("UTF-8 bytes: {}", bytes.length);
+
+        log.info("Result: [{}]", LogUtils.elapsedLog("국토부민간 소통정보", 112, 1002022));
+        log.info("Result: [{}]", LogUtils.elapsedLog("UTIS 소통정보", 112, 1002022));
+        log.info("Result: [{}]", LogUtils.elapsedLog("동부NTS 소통정보", 112, 1002022));
+        log.info("Result: [{}]", LogUtils.elapsedLog("우선순위 소통정보", 112, 1002022));
+        log.info("Result: [{}]", LogUtils.elapsedLog("(ETC)우선순위 소통정보", 112, 1002022));
+    }
+}