浏览代码

data process update

shjung 2 年之前
父节点
当前提交
33aa2cb3a6

+ 6 - 6
src/main/java/com/its/pis/PisCommServerApplication.java

@@ -3,8 +3,8 @@ package com.its.pis;
 import com.its.app.AppUtils;
 import com.its.app.utils.SysUtils;
 import com.its.pis.config.ProcessConfig;
-import com.its.pis.process.DbmsJobProcess;
-import com.its.pis.process.MessageDataProcess;
+import com.its.pis.process.DbmsDataProcess;
+import com.its.pis.process.WorkDataProcess;
 import com.its.pis.service.PisInfrService;
 import com.its.pis.service.UnitSystService;
 import com.its.pis.ui.JTextAreaOutputStream;
@@ -88,11 +88,11 @@ public class PisCommServerApplication implements CommandLineRunner, ApplicationL
         log.info("************************************************************************************");
 
         // init application
-        DbmsJobProcess dbmsJobProcess = (DbmsJobProcess)AppUtils.getBean(DbmsJobProcess.class);
-        dbmsJobProcess.run();
+        DbmsDataProcess dbmsDataProcess = (DbmsDataProcess)AppUtils.getBean(DbmsDataProcess.class);
+        dbmsDataProcess.run();
 
-        MessageDataProcess messageDataProcess = (MessageDataProcess)AppUtils.getBean(MessageDataProcess.class);
-        messageDataProcess.run();
+        WorkDataProcess workDataProcess = (WorkDataProcess)AppUtils.getBean(WorkDataProcess.class);
+        workDataProcess.run();
 
         UnitSystService unitSystService = (UnitSystService)AppUtils.getBean(UnitSystService.class);
         unitSystService.loadMaster();

+ 4 - 4
src/main/java/com/its/pis/config/ThreadPoolInitializer.java

@@ -71,16 +71,16 @@ public class ThreadPoolInitializer extends AsyncConfigurerSupport {
         return threadPoolTaskExecutor;
     }
 
-    @Bean(name="dbmsJobExecutor")
-    public Executor getDbmsJobExecutor() {
+    @Bean(name="dbmsDataExecutor")
+    public Executor getDbmsDataExecutor() {
         ThreadPoolTaskExecutor threadPoolTaskExecutor = getDefaultExecutor(this.dbms);
         threadPoolTaskExecutor.setThreadNamePrefix("dbms-pool-");
         threadPoolTaskExecutor.initialize();
         return threadPoolTaskExecutor;
     }
 
-    @Bean(name="appJobExecutor")
-    public Executor getAppJobExecutor() {
+    @Bean(name="workDataExecutor")
+    public Executor getWorkDataExecutor() {
         ThreadPoolTaskExecutor threadPoolTaskExecutor = getDefaultExecutor(this.work);
         threadPoolTaskExecutor.setThreadNamePrefix("work-pool-");
         threadPoolTaskExecutor.initialize();

+ 0 - 112
src/main/java/com/its/pis/process/AbstractDbmsJobProcess.java

@@ -1,112 +0,0 @@
-package com.its.pis.process;
-
-import com.its.app.AppUtils;
-import com.its.pis.config.ThreadPoolInitializer;
-import com.its.pis.dao.mapper.UnitSystMapper;
-import com.its.pis.entity.TbUnitSystStts;
-import lombok.extern.slf4j.Slf4j;
-
-import javax.annotation.PostConstruct;
-import java.util.concurrent.Executors;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-
-@Slf4j
-public abstract class AbstractDbmsJobProcess {
-
-    public static LinkedBlockingQueue<DbmsJobData> DBMS_DATA_QUEUE = new LinkedBlockingQueue<>(1000);
-    private UnitSystMapper unitSystMapper;
-    private final ThreadPoolExecutor taskExecutor = (ThreadPoolExecutor)Executors.newFixedThreadPool(1);
-    int MAX_CORE = Runtime.getRuntime().availableProcessors();
-
-    @PostConstruct
-    void init() {
-        this.unitSystMapper = (UnitSystMapper) AppUtils.getBean(UnitSystMapper.class);
-        postConstruct();
-    }
-
-    protected abstract void postConstruct();
-    public abstract void process(DbmsJobData data);
-
-    public void run() {
-        log.info("AbstractDbmsJobProcess.run: Start.");
-        if (this.MAX_CORE < 8) {
-            this.MAX_CORE = 8;
-        }
-        ThreadPoolInitializer poolInitializer = (ThreadPoolInitializer) AppUtils.getBean(ThreadPoolInitializer.class);
-        int executePool = Math.max(this.MAX_CORE, poolInitializer.getWork());
-        for (int ii = 0; ii < executePool; ii++) {
-            log.info("AbstractDbmsJobProcess.Task: {}", ii);
-            this.taskExecutor.execute(() -> {
-                while (true) {
-                    try {
-                        DbmsJobData dbmsJobData = AbstractDbmsJobProcess.DBMS_DATA_QUEUE.take();
-                        if (dbmsJobData != null) {
-                            //log.info("DBMS_DATA_QUEUE..take: {} EA, Type={}, {}", DBMS_DATA_QUEUE.size(), dbmsJobData.getType(), Thread.currentThread().getName());
-                            DbmsJobTask handler = (DbmsJobTask) AppUtils.getBean(DbmsJobTask.class);
-                            handler.run(this, dbmsJobData);
-                        }
-                        else {
-                            log.error("AbstractDbmsJobProcess.Task: Received data null");
-                        }
-                    }
-                    catch (Exception e) {
-                        log.error("AbstractDbmsJobProcess.Task: Exception: {}", e.getMessage(), e);
-                    }
-                }
-            });
-        }
-
-        log.info("AbstractDbmsJobProcess.run: ..End.");
-    }
-
-    /*
-     *  작업큐에 데이터 추가
-     */
-    public boolean add(DbmsJobData dbmsJobData) {
-        boolean offer = false;
-        try {
-            //offer => full -> return
-            //add   => full -> wait
-            //큐가 차더라도 바로 리턴함.
-            offer = AbstractDbmsJobProcess.DBMS_DATA_QUEUE.offer(dbmsJobData);
-            if (!offer) {
-                log.error("DbmsJobProcess.add: Queue Full Error, Size: {} EA", DBMS_DATA_QUEUE.size());
-            }
-        } catch (Exception e) {
-            log.error("DbmsJobProcess.add: Exception: {}", e.getMessage(), e);
-        }
-        return offer;
-    }
-
-    public static boolean addQ(DbmsJobData dbmsJobData) {
-        try {
-            //offer => full -> return
-            //add   => full -> wait
-            //큐가 차더라도 바로 리턴함.
-            if (!AbstractDbmsJobProcess.DBMS_DATA_QUEUE.offer(dbmsJobData)) {
-                log.error("AbstractDbmsJobProcess.add: Queue Full Error, Size: {} EA, {}", DBMS_DATA_QUEUE.size(), dbmsJobData);
-                return false;
-            }
-            //log.info("DBMS_DATA_QUEUE.offer: {} EA, {}", DBMS_DATA_QUEUE.size(), dbmsJobData);
-            return true;
-        } catch (Exception e) {
-            log.error("AbstractDbmsJobProcess.add: Exception: {}", e.getMessage(), e);
-        }
-        return false;
-    }
-
-    public void runJob(DbmsJobData dbmsJobData) {
-        if (dbmsJobData.getType() == DbmsJobType.DATA_TYPE_UNIT_SYST_STTS) {
-            TbUnitSystStts stts = (TbUnitSystStts)dbmsJobData.getData();
-            this.unitSystMapper.updateUnitSystStts(stts);       // 상태정보 업데이트
-            if (dbmsJobData.isHistory()) {
-                this.unitSystMapper.insertUnitSystSttsHs(stts); // 상태정보 이력저장
-            }
-        }
-        else {
-            process(dbmsJobData);
-        }
-    }
-
-}

+ 0 - 111
src/main/java/com/its/pis/process/AbstractMessageDataProcess.java

@@ -1,111 +0,0 @@
-package com.its.pis.process;
-
-import com.its.app.AppUtils;
-import com.its.pis.config.ThreadPoolInitializer;
-import com.its.pis.dao.mapper.UnitSystMapper;
-import lombok.extern.slf4j.Slf4j;
-
-import javax.annotation.PostConstruct;
-import java.util.concurrent.Executors;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-
-@Slf4j
-public abstract class AbstractMessageDataProcess {
-
-    public static LinkedBlockingQueue<MessageData> DBMS_DATA_QUEUE = new LinkedBlockingQueue<>(1000);
-    private UnitSystMapper unitSystMapper;
-    private final ThreadPoolExecutor taskExecutor = (ThreadPoolExecutor)Executors.newFixedThreadPool(1);
-    int MAX_CORE = Runtime.getRuntime().availableProcessors();
-
-    @PostConstruct
-    void init() {
-        this.unitSystMapper = (UnitSystMapper) AppUtils.getBean(UnitSystMapper.class);
-        postConstruct();
-    }
-
-    protected abstract void postConstruct();
-    public abstract void process(DbmsJobData data);
-
-    public void run() {
-        log.info("AbstractMessageDataProcess.run: Start.");
-        if (this.MAX_CORE < 8) {
-            this.MAX_CORE = 8;
-        }
-        ThreadPoolInitializer poolInitializer = (ThreadPoolInitializer) AppUtils.getBean(ThreadPoolInitializer.class);
-        int executePool = Math.max(this.MAX_CORE, poolInitializer.getWork());
-        for (int ii = 0; ii < executePool; ii++) {
-            log.info("AbstractMessageDataProcess.Task: {}", ii);
-            this.taskExecutor.execute(() -> {
-                while (true) {
-                    try {
-                        MessageData messageData = AbstractMessageDataProcess.DBMS_DATA_QUEUE.take();
-                        if (messageData != null) {
-                            //log.info("DBMS_DATA_QUEUE..take: {} EA, {}, {}", DBMS_DATA_QUEUE.size(), messageData, Thread.currentThread().getName());
-                            MessageDataTask handler = (MessageDataTask) AppUtils.getBean(MessageDataTask.class);
-                            handler.run(this, messageData);
-                        }
-                        else {
-                            log.error("AbstractMessageDataProcess.Task: Received data null");
-                        }
-                    }
-                    catch (Exception e) {
-                        log.error("AbstractMessageDataProcess.Task: Exception: {}", e.getMessage(), e);
-                    }
-                }
-            });
-        }
-
-        log.info("AbstractMessageDataProcess.run: ..End.");
-    }
-
-    /*
-     *  작업큐에 데이터 추가
-     */
-    public boolean add(MessageData messageData) {
-        boolean offer = false;
-        try {
-            //offer => full -> return
-            //add   => full -> wait
-            //큐가 차더라도 바로 리턴함.
-            offer = AbstractMessageDataProcess.DBMS_DATA_QUEUE.offer(messageData);
-            if (!offer) {
-                log.error("MessageDataProcess.add: Queue Full Error, Size: {} EA", DBMS_DATA_QUEUE.size());
-            }
-        } catch (Exception e) {
-            log.error("MessageDataProcess.add: Exception: {}", e.getMessage(), e);
-        }
-        return offer;
-    }
-
-    public static boolean addQ(MessageData messageData) {
-        try {
-            //offer => full -> return
-            //add   => full -> wait
-            //큐가 차더라도 바로 리턴함.
-            if (!AbstractMessageDataProcess.DBMS_DATA_QUEUE.offer(messageData)) {
-                log.error("AbstractMessageDataProcess.add: Queue Full Error, Size: {} EA, {}", DBMS_DATA_QUEUE.size(), messageData);
-                return false;
-            }
-            //log.info("DBMS_DATA_QUEUE.offer: {} EA, {}", DBMS_DATA_QUEUE.size(), messageData);
-            return true;
-        } catch (Exception e) {
-            log.error("AbstractMessageDataProcess.add: Exception: {}", e.getMessage(), e);
-        }
-        return false;
-    }
-
-    public void runJob(MessageData messageData) {
-//        if (dbmsJobData.getType() == DbmsJobType.DATA_TYPE_UNIT_SYST_STTS) {
-//            TbUnitSystStts stts = (TbUnitSystStts)dbmsJobData.getData();
-//            this.unitSystMapper.updateUnitSystStts(stts);       // 상태정보 업데이트
-//            if (dbmsJobData.isHistory()) {
-//                this.unitSystMapper.insertUnitSystSttsHs(stts); // 상태정보 이력저장
-//            }
-//        }
-//        else {
-//            process(dbmsJobData);
-//        }
-    }
-
-}

+ 31 - 0
src/main/java/com/its/pis/process/DbmsData.java

@@ -0,0 +1,31 @@
+package com.its.pis.process;
+
+import com.its.pis.entity.TbPisInfr;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class DbmsData {
+
+    public static final int DBMS_DATA_UNIT_SYST_STTS = 0;
+    public static final int DBMS_DATA_PIS_STTS = 1;
+    public static final int DBMS_DATA_PRK_PLCE_STTS = 2;
+    public static final int DBMS_DATA_STTUS_INFO = 3;
+    public static final int DBMS_DATA_OPR_INFO = 4;
+    public static final int DBMS_DATA_RL_TIME = 5;
+    public static final int DBMS_DATA_RL_TIME_HS = 6;
+
+    private int     type;
+    private boolean isHistory;
+    private Object  data;
+    private TbPisInfr obj;
+
+    public DbmsData(int type, boolean isHistory, Object data, TbPisInfr obj) {
+        this.type      = type;
+        this.isHistory = isHistory;
+        this.data      = data;
+        this.obj       = obj;
+    }
+
+}

+ 16 - 0
src/main/java/com/its/pis/process/DbmsDataAsyncTask.java

@@ -0,0 +1,16 @@
+package com.its.pis.process;
+
+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);
+    }
+
+}

+ 171 - 0
src/main/java/com/its/pis/process/DbmsDataProcess.java

@@ -0,0 +1,171 @@
+package com.its.pis.process;
+
+import com.its.app.AppUtils;
+import com.its.app.utils.SysUtils;
+import com.its.pis.config.ThreadPoolInitializer;
+import com.its.pis.dao.mapper.PrkPlceMapper;
+import com.its.pis.dao.mapper.UnitSystMapper;
+import com.its.pis.dao.mapper.batch.PisInfrDao;
+import com.its.pis.dao.mapper.batch.PrkPlceDao;
+import com.its.pis.entity.*;
+import com.its.pis.websocket.message.c2f.C2FMessage;
+import com.its.pis.websocket.message.c2f.PrkPlceRlTimeResponseInfo;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PostConstruct;
+import java.util.List;
+import java.util.concurrent.Executors;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class DbmsDataProcess {
+
+    private final LinkedBlockingQueue<DbmsData> DBMS_DATA_QUEUE = new LinkedBlockingQueue<>(1000);
+    private final ThreadPoolExecutor taskExecutor = (ThreadPoolExecutor) Executors.newFixedThreadPool(1);
+
+    private final DbmsDataAsyncTask asyncTask;
+    private final PisInfrDao pisInfrDao;
+    private final PrkPlceDao prkPlceDao;
+
+    private UnitSystMapper unitSystMapper;
+    private PrkPlceMapper prkPlceMapper;
+    int MAX_CORE = Runtime.getRuntime().availableProcessors();
+
+    @PostConstruct
+    void init() {
+        this.unitSystMapper = (UnitSystMapper) AppUtils.getBean(UnitSystMapper.class);
+        this.prkPlceMapper = (PrkPlceMapper) AppUtils.getBean(PrkPlceMapper.class);
+    }
+
+    public void run() {
+        log.info("DbmsDataProcess.run: Start.");
+        if (this.MAX_CORE < 8) {
+            this.MAX_CORE = 8;
+        }
+        ThreadPoolInitializer poolInitializer = (ThreadPoolInitializer) AppUtils.getBean(ThreadPoolInitializer.class);
+        int executePool = Math.max(this.MAX_CORE, poolInitializer.getWork());
+        for (int ii = 0; ii < executePool; ii++) {
+            log.info("DbmsDataProcess.Task: {}", ii);
+            this.taskExecutor.execute(() -> {
+                while (true) {
+                    try {
+                        DbmsData data = DBMS_DATA_QUEUE.take();
+                        if (data != null) {
+                            asyncTask.run(this, data);
+                        }
+                        else {
+                            log.error("DbmsDataProcess.Task: Received data null");
+                        }
+                    }
+                    catch (Exception e) {
+                        log.error("DbmsDataProcess.Task: Exception: {}", e.getMessage(), e);
+                    }
+                }
+            });
+        }
+
+        log.info("DbmsDataProcess.run: ..End.");
+    }
+
+    /**
+     * 비동기 타스크에서 실행되는 함수.
+     * 클래스가 달라야 비동기 타스크로 실행된다.
+     * @param data
+     */
+    public void runJob(DbmsData data) {
+        if (data.getType() == DbmsData.DBMS_DATA_UNIT_SYST_STTS) {
+            TbUnitSystStts stts = (TbUnitSystStts) data.getData();
+            this.unitSystMapper.updateUnitSystStts(stts);       // 상태정보 업데이트
+            if (data.isHistory()) {
+                this.unitSystMapper.insertUnitSystSttsHs(stts); // 상태정보 이력저장
+            }
+        }
+        else {
+            process(data);
+        }
+    }
+
+    public void process(DbmsData data) {
+        try {
+            int type = data.getType();
+            TbPisInfr pis = data.getObj();
+            switch(type) {
+                case DbmsData.DBMS_DATA_RL_TIME:
+                    if (pis != null) {
+                        String DATA_COLCT_TIME = SysUtils.getSysTime();
+                        C2FMessage<PrkPlceRlTimeResponseInfo> rlTimeInfo = (C2FMessage<PrkPlceRlTimeResponseInfo>) data.getData();
+                        if (rlTimeInfo != null) {
+                            PrkPlceRlTimeResponseInfo info = rlTimeInfo.getData().getPayload();
+                            TbPrkPlceRt rt = TbPrkPlceRt.toEntity(pis.getPIS_NMBR(), DATA_COLCT_TIME, info);
+
+                            this.prkPlceMapper.updatePrkPlceRlTime(rt);
+                            this.prkPlceDao.updateRlTimeFlr(pis.getPIS_NMBR(), DATA_COLCT_TIME, info.getFlr_info());
+                            this.prkPlceDao.updateRlTimeAr(pis.getPIS_NMBR(), info.getAr_info());
+                            this.prkPlceDao.updateRlTimePrv(pis.getPIS_NMBR(), info.getPrvuse_prkar_info());
+                            this.prkPlceDao.updateRlTimeDev(pis.getPIS_NMBR(), info.getPrk_colct_device_info());
+                        }
+                        else {
+                            log.error("RL TIME Data NULL...............");
+                        }
+                    }
+                    else {
+                        log.error("PIS Object null");
+                    }
+                    break;
+                case DbmsData.DBMS_DATA_RL_TIME_HS:
+                    TbPrkPlceRtHs rtHs = (TbPrkPlceRtHs)data.getData();
+                    int result = this.prkPlceMapper.insertPrkPlceRlTimeHs(rtHs);
+                    log.error("DATA_TYPE_RL_TIME_HS: {}, {} EA.", rtHs.getCrtnDt(), result);
+                    break;
+                case DbmsData.DBMS_DATA_PIS_STTS:
+                    List<TbPisInfrStts> pisSttsList = (List<TbPisInfrStts>)data.getData();
+                    this.pisInfrDao.updateStts(pisSttsList, data.isHistory());
+                    if (data.isHistory()) {
+                        // 주차정보시스템 상태정보 이력은 저장하지 않는다.
+                        //this.pisInfrDao.insertStts(pisSttsList);
+                    }
+                    pisSttsList.clear();
+                    break;
+                case DbmsData.DBMS_DATA_PRK_PLCE_STTS:
+                    List<TbPrkPlceStts> prltSttsList = (List<TbPrkPlceStts>)data.getData();
+                    this.prkPlceDao.updatePrkPlceStts(prltSttsList, data.isHistory());
+                    if (data.isHistory()) {
+                        int res = this.prkPlceDao.insertPrkPlceSttsHs(prltSttsList);
+                        log.error("DATA_TYPE_PRK_PLCE_STTS: {}, {}/{} EA. ", prltSttsList.get(0).getUPDT_DT(), prltSttsList.size(), res);
+                    }
+                    prltSttsList.clear();
+                    break;
+                default:
+                    log.error("DbmsDataProcess.process: Unknown Job Type: {}", type);
+                    break;
+            }
+        } catch (Exception e) {
+            log.error("DbmsDataProcess.process: Exception: {}", e.toString());
+        }
+    }
+
+    /*
+     *  작업큐에 데이터 추가
+     */
+    public boolean add(DbmsData data) {
+        boolean offer = false;
+        try {
+            //offer => full -> return
+            //add   => full -> wait
+            //큐가 차더라도 바로 리턴함.
+            offer = DBMS_DATA_QUEUE.offer(data);
+            if (!offer) {
+                log.error("DbmsDataProcess.add: Queue Full Error, Size: {} EA", DBMS_DATA_QUEUE.size());
+            }
+        } catch (Exception e) {
+            log.error("DbmsDataProcess.add: Exception: {}", e.getMessage(), e);
+        }
+        return offer;
+    }
+
+}

+ 0 - 25
src/main/java/com/its/pis/process/DbmsJobData.java

@@ -1,25 +0,0 @@
-package com.its.pis.process;
-
-import com.its.pis.entity.TbPisInfr;
-import lombok.Getter;
-import lombok.Setter;
-
-@Getter
-@Setter
-public class DbmsJobData {
-
-    public static final int DATA_TYPE_UNIT_SYST_STTS = 0;
-
-    private int     type;
-    private boolean isHistory;
-    private Object  data;
-    private TbPisInfr obj;
-
-    public DbmsJobData(int type, boolean isHistory, Object data, TbPisInfr obj) {
-        this.type      = type;
-        this.isHistory = isHistory;
-        this.data      = data;
-        this.obj       = obj;
-    }
-
-}

+ 0 - 93
src/main/java/com/its/pis/process/DbmsJobProcess.java

@@ -1,93 +0,0 @@
-package com.its.pis.process;
-
-import com.its.app.AppUtils;
-import com.its.app.utils.SysUtils;
-import com.its.pis.dao.mapper.PrkPlceMapper;
-import com.its.pis.dao.mapper.batch.PisInfrDao;
-import com.its.pis.dao.mapper.batch.PrkPlceDao;
-import com.its.pis.entity.*;
-import com.its.pis.websocket.message.c2f.C2FMessage;
-import com.its.pis.websocket.message.c2f.PrkPlceRlTimeResponseInfo;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import oracle.sql.DATE;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-@Slf4j
-@RequiredArgsConstructor
-@Service
-public class DbmsJobProcess extends AbstractDbmsJobProcess {
-
-    private final PisInfrDao pisInfrDao;
-    private final PrkPlceDao prkPlceDao;
-
-//    private PisInfrMapper pisInfrMapper;
-    private PrkPlceMapper prkPlceMapper;
-
-    @Override
-    protected void postConstruct() {
-//        this.pisInfrMapper = (PisInfrMapper) AppUtils.getBean(PisInfrMapper.class);
-        this.prkPlceMapper = (PrkPlceMapper) AppUtils.getBean(PrkPlceMapper.class);
-    }
-
-    @Override
-    public void process(DbmsJobData data) {
-        try {
-            int type = data.getType();
-            TbPisInfr pis = data.getObj();
-            switch(type) {
-                case DbmsJobType.DATA_TYPE_RL_TIME:
-                    if (pis != null) {
-                        String DATA_COLCT_TIME = SysUtils.getSysTime();
-                        C2FMessage<PrkPlceRlTimeResponseInfo> rlTimeInfo = (C2FMessage<PrkPlceRlTimeResponseInfo>) data.getData();
-                        if (rlTimeInfo != null) {
-                            PrkPlceRlTimeResponseInfo info = rlTimeInfo.getData().getPayload();
-                            TbPrkPlceRt rt = TbPrkPlceRt.toEntity(pis.getPIS_NMBR(), DATA_COLCT_TIME, info);
-
-                            this.prkPlceMapper.updatePrkPlceRlTime(rt);
-                            this.prkPlceDao.updateRlTimeFlr(pis.getPIS_NMBR(), DATA_COLCT_TIME, info.getFlr_info());
-                            this.prkPlceDao.updateRlTimeAr(pis.getPIS_NMBR(), info.getAr_info());
-                            this.prkPlceDao.updateRlTimePrv(pis.getPIS_NMBR(), info.getPrvuse_prkar_info());
-                            this.prkPlceDao.updateRlTimeDev(pis.getPIS_NMBR(), info.getPrk_colct_device_info());
-                        }
-                        else {
-                            log.error("RL TIME Data NULL...............");
-                        }
-                    }
-                    else {
-                        log.error("PIS Object null");
-                    }
-                    break;
-                case DbmsJobType.DATA_TYPE_RL_TIME_HS:
-                    TbPrkPlceRtHs rtHs = (TbPrkPlceRtHs)data.getData();
-                    this.prkPlceMapper.insertPrkPlceRlTimeHs(rtHs);
-                    break;
-                case DbmsJobType.DATA_TYPE_PIS_STTS:
-                    List<TbPisInfrStts> pisSttsList = (List<TbPisInfrStts>)data.getData();
-                    this.pisInfrDao.updateStts(pisSttsList, data.isHistory());
-                    if (data.isHistory()) {
-                        // 주차정보시스템 상태정보 이력은 저장하지 않는다.
-                        //this.pisInfrDao.insertStts(pisSttsList);
-                    }
-                    pisSttsList.clear();
-                    break;
-                case DbmsJobType.DATA_TYPE_PRK_PLCE_STTS:
-                    List<TbPrkPlceStts> prltSttsList = (List<TbPrkPlceStts>)data.getData();
-                    this.prkPlceDao.updatePrkPlceStts(prltSttsList, data.isHistory());
-                    if (data.isHistory()) {
-                        this.prkPlceDao.insertPrkPlceSttsHs(prltSttsList);
-                    }
-                    prltSttsList.clear();
-                    break;
-                default:
-                    log.error("DbmsJobProcess.process: Unknown Job Type: {}", type);
-                    break;
-            }
-        } catch (Exception e) {
-            log.error("DbmsJobProcess.process: Exception: {}", e.toString());
-        }
-    }
-
-}

+ 0 - 19
src/main/java/com/its/pis/process/MessageData.java

@@ -1,19 +0,0 @@
-package com.its.pis.process;
-
-import com.its.pis.entity.TbPisInfr;
-import io.netty.channel.ChannelHandlerContext;
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import lombok.Setter;
-
-@Getter
-@Setter
-@RequiredArgsConstructor
-public class MessageData {
-
-    private final TbPisInfr obj;
-    private final String ipAddress;
-    private final ChannelHandlerContext ctx;
-    private final Object data;
-
-}

+ 0 - 57
src/main/java/com/its/pis/process/MessageDataProcess.java

@@ -1,57 +0,0 @@
-package com.its.pis.process;
-
-import com.its.pis.dao.mapper.batch.PisInfrDao;
-import com.its.pis.dao.mapper.batch.PrkPlceDao;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-
-@Slf4j
-@RequiredArgsConstructor
-@Service
-public class MessageDataProcess extends AbstractDbmsJobProcess {
-
-    private final PisInfrDao pisInfrDao;
-    private final PrkPlceDao prkPlceDao;
-
-//    private final UnitSystMapper unitSystMapper;
-//    private final PisInfrMapper pisInfrMapper;
-//    private final PrltCtlrMapper prltCtlrMapper;
-//    private final VdsStatMapper vdsStatMapper;
-
-    @Override
-    protected void postConstruct() {
-//        this.unitSystMapper = (UnitSystMapper) AppUtils.getBean(UnitSystMapper.class);
-//        this.vdsCtlrMapper = (VdsCtlrMapper) AppUtils.getBean(VdsCtlrMapper.class);
-//        this.vdsDtctMapper = (VdsDtctMapper) AppUtils.getBean(VdsDtctMapper.class);
-//        this.vdsStatMapper = (VdsStatMapper) AppUtils.getBean(VdsStatMapper.class);
-    }
-
-    @Override
-    public void process(DbmsJobData data) {
-        try {
-            int type = data.getType();
-//            switch(type) {
-//                case DbmsJobType.DATA_TYPE_PIS_STTS:
-//                    List<TbPisInfrStts> pisSttsList = (List<TbPisInfrStts>)data.getData();
-//                    this.pisInfrDao.updateStts(pisSttsList, data.isHistory());
-//                    if (data.isHistory()) {
-//                        //this.pisInfrDao.insertStts(pisSttsList);
-//                    }
-//                    pisSttsList.clear();
-//                    break;
-//                case DbmsJobType.DATA_TYPE_PRLT_STTS:
-//                    List<TbPrltCtlrStts> prltSttsList = (List<TbPrltCtlrStts>)data.getData();
-//                    this.prltCtlrDao.updateStts(prltSttsList, data.isHistory());
-//                    if (data.isHistory()) {
-//                        this.prltCtlrDao.insertStts(prltSttsList);
-//                    }
-//                    prltSttsList.clear();
-//                    break;
-//            }
-        } catch (Exception e) {
-            log.error("DbmsJobProcess.process: Exception: {}", e.toString());
-        }
-    }
-
-}

+ 0 - 18
src/main/java/com/its/pis/process/MessageDataTask.java

@@ -1,18 +0,0 @@
-package com.its.pis.process;
-
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.stereotype.Service;
-
-@Slf4j
-@Service
-public class MessageDataTask {
-
-
-    @Async("appJobExecutor")
-    public void run(AbstractMessageDataProcess messageDataProcess, MessageData messageData) {
-
-        messageDataProcess.runJob(messageData);
-    }
-
-}

+ 12 - 1
src/main/java/com/its/pis/process/DbmsJobType.java → src/main/java/com/its/pis/process/WorkData.java

@@ -1,11 +1,16 @@
 package com.its.pis.process;
 
+import com.its.pis.entity.TbPisInfr;
+import io.netty.channel.ChannelHandlerContext;
 import lombok.Getter;
+import lombok.RequiredArgsConstructor;
 import lombok.Setter;
 
 @Getter
 @Setter
-public class DbmsJobType {
+@RequiredArgsConstructor
+public class WorkData {
+
     public static final int DATA_TYPE_UNIT_SYST_STTS  = 0;
     public static final int DATA_TYPE_PIS_STTS        = 1;
     public static final int DATA_TYPE_PRK_PLCE_STTS   = 2;
@@ -13,4 +18,10 @@ public class DbmsJobType {
     public static final int DATA_TYPE_OPR_INFO        = 4;
     public static final int DATA_TYPE_RL_TIME         = 5;
     public static final int DATA_TYPE_RL_TIME_HS      = 6;
+
+    private final TbPisInfr obj;
+    private final String ipAddress;
+    private final ChannelHandlerContext ctx;
+    private final Object data;
+
 }

+ 4 - 4
src/main/java/com/its/pis/process/DbmsJobTask.java → src/main/java/com/its/pis/process/WorkDataAsyncTask.java

@@ -6,12 +6,12 @@ import org.springframework.stereotype.Service;
 
 @Slf4j
 @Service
-public class DbmsJobTask {
+public class WorkDataAsyncTask {
 
-    @Async("dbmsJobExecutor")
-    public void run(AbstractDbmsJobProcess dbmsJobProcess, DbmsJobData dbmsJobData) {
 
-        dbmsJobProcess.runJob(dbmsJobData);
+    @Async("workDataExecutor")
+    public void run(WorkDataProcess process, WorkData data) {
+        process.runJob(data);
     }
 
 }

+ 158 - 0
src/main/java/com/its/pis/process/WorkDataProcess.java

@@ -0,0 +1,158 @@
+package com.its.pis.process;
+
+import com.its.app.AppUtils;
+import com.its.pis.config.ThreadPoolInitializer;
+import com.its.pis.dao.mapper.PrkPlceMapper;
+import com.its.pis.dao.mapper.UnitSystMapper;
+import com.its.pis.dao.mapper.batch.PisInfrDao;
+import com.its.pis.dao.mapper.batch.PrkPlceDao;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PostConstruct;
+import java.util.concurrent.Executors;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class WorkDataProcess {
+
+    private final LinkedBlockingQueue<WorkData> WORK_DATA_QUEUE = new LinkedBlockingQueue<>(1000);
+    private final ThreadPoolExecutor taskExecutor = (ThreadPoolExecutor) Executors.newFixedThreadPool(1);
+
+    private final WorkDataAsyncTask asyncTask;
+    private final PisInfrDao pisInfrDao;
+    private final PrkPlceDao prkPlceDao;
+
+    private UnitSystMapper unitSystMapper;
+    private PrkPlceMapper prkPlceMapper;
+    int MAX_CORE = Runtime.getRuntime().availableProcessors();
+
+    @PostConstruct
+    void init() {
+        this.unitSystMapper = (UnitSystMapper) AppUtils.getBean(UnitSystMapper.class);
+        this.prkPlceMapper = (PrkPlceMapper) AppUtils.getBean(PrkPlceMapper.class);
+    }
+
+    public void run() {
+        log.info("WorkDataProcess.run: Start.");
+        if (this.MAX_CORE < 8) {
+            this.MAX_CORE = 8;
+        }
+        ThreadPoolInitializer poolInitializer = (ThreadPoolInitializer) AppUtils.getBean(ThreadPoolInitializer.class);
+        int executePool = Math.max(this.MAX_CORE, poolInitializer.getWork());
+        for (int ii = 0; ii < executePool; ii++) {
+            log.info("WorkDataProcess.Task: {}", ii);
+            this.taskExecutor.execute(() -> {
+                while (true) {
+                    try {
+                        WorkData data = WORK_DATA_QUEUE.take();
+                        if (data != null) {
+                            asyncTask.run(this, data);
+                        }
+                        else {
+                            log.error("WorkDataProcess.Task: Received data null");
+                        }
+                    }
+                    catch (Exception e) {
+                        log.error("WorkDataProcess.Task: Exception: {}", e.getMessage(), e);
+                    }
+                }
+            });
+        }
+
+        log.info("WorkDataProcess.run: ..End.");
+    }
+
+    /**
+     * 비동기 타스크에서 실행되는 함수.
+     * 클래스가 달라야 비동기 타스크로 실행된다.
+     * @param data
+     */
+    public void runJob(WorkData data) {
+        log.error("WorkDataProcess.runJob: {}", Thread.currentThread().getName());
+        process(data);
+    }
+
+    public void process(WorkData data) {
+//        try {
+//            int type = data.getType();
+//            TbPisInfr pis = data.getObj();
+//            switch(type) {
+//                case DbmsData.DBMS_DATA_RL_TIME:
+//                    if (pis != null) {
+//                        String DATA_COLCT_TIME = SysUtils.getSysTime();
+//                        C2FMessage<PrkPlceRlTimeResponseInfo> rlTimeInfo = (C2FMessage<PrkPlceRlTimeResponseInfo>) data.getData();
+//                        if (rlTimeInfo != null) {
+//                            PrkPlceRlTimeResponseInfo info = rlTimeInfo.getData().getPayload();
+//                            TbPrkPlceRt rt = TbPrkPlceRt.toEntity(pis.getPIS_NMBR(), DATA_COLCT_TIME, info);
+//
+//                            this.prkPlceMapper.updatePrkPlceRlTime(rt);
+//                            this.prkPlceDao.updateRlTimeFlr(pis.getPIS_NMBR(), DATA_COLCT_TIME, info.getFlr_info());
+//                            this.prkPlceDao.updateRlTimeAr(pis.getPIS_NMBR(), info.getAr_info());
+//                            this.prkPlceDao.updateRlTimePrv(pis.getPIS_NMBR(), info.getPrvuse_prkar_info());
+//                            this.prkPlceDao.updateRlTimeDev(pis.getPIS_NMBR(), info.getPrk_colct_device_info());
+//                        }
+//                        else {
+//                            log.error("RL TIME Data NULL...............");
+//                        }
+//                    }
+//                    else {
+//                        log.error("PIS Object null");
+//                    }
+//                    break;
+//                case DbmsData.DBMS_DATA_RL_TIME_HS:
+//                    TbPrkPlceRtHs rtHs = (TbPrkPlceRtHs)data.getData();
+//                    int result = this.prkPlceMapper.insertPrkPlceRlTimeHs(rtHs);
+//                    log.error("DATA_TYPE_RL_TIME_HS: {}, {} EA.", rtHs.getCrtnDt(), result);
+//                    break;
+//                case DbmsData.DBMS_DATA_PIS_STTS:
+//                    List<TbPisInfrStts> pisSttsList = (List<TbPisInfrStts>)data.getData();
+//                    this.pisInfrDao.updateStts(pisSttsList, data.isHistory());
+//                    if (data.isHistory()) {
+//                        // 주차정보시스템 상태정보 이력은 저장하지 않는다.
+//                        //this.pisInfrDao.insertStts(pisSttsList);
+//                    }
+//                    pisSttsList.clear();
+//                    break;
+//                case DbmsData.DBMS_DATA_PRK_PLCE_STTS:
+//                    List<TbPrkPlceStts> prltSttsList = (List<TbPrkPlceStts>)data.getData();
+//                    this.prkPlceDao.updatePrkPlceStts(prltSttsList, data.isHistory());
+//                    if (data.isHistory()) {
+//                        int res = this.prkPlceDao.insertPrkPlceSttsHs(prltSttsList);
+//                        log.error("DATA_TYPE_PRK_PLCE_STTS: {}, {}/{} EA. ", prltSttsList.get(0).getUPDT_DT(), prltSttsList.size(), res);
+//                    }
+//                    prltSttsList.clear();
+//                    break;
+//                default:
+//                    log.error("WorkDataProcess.process: Unknown Job Type: {}", type);
+//                    break;
+//            }
+//        } catch (Exception e) {
+//            log.error("WorkDataProcess.process: Exception: {}", e.toString());
+//        }
+    }
+
+    /*
+     *  작업큐에 데이터 추가
+     */
+    public boolean add(WorkData data) {
+        boolean offer = false;
+        try {
+            //offer => full -> return
+            //add   => full -> wait
+            //큐가 차더라도 바로 리턴함.
+            offer = WORK_DATA_QUEUE.offer(data);
+            if (!offer) {
+                log.error("WorkDataProcess.add: Queue Full Error, Size: {} EA", WORK_DATA_QUEUE.size());
+            }
+        } catch (Exception e) {
+            log.error("WorkDataProcess.add: Exception: {}", e.getMessage(), e);
+        }
+        return offer;
+    }
+
+}

+ 14 - 13
src/main/java/com/its/pis/service/PisInfrService.java

@@ -7,9 +7,8 @@ import com.its.pis.dao.mapper.PrkPlceMapper;
 import com.its.pis.domain.NET;
 import com.its.pis.entity.*;
 import com.its.pis.global.AppRepository;
-import com.its.pis.process.DbmsJobData;
-import com.its.pis.process.DbmsJobProcess;
-import com.its.pis.process.DbmsJobType;
+import com.its.pis.process.DbmsData;
+import com.its.pis.process.DbmsDataProcess;
 import com.its.pis.websocket.PisConstants;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -26,7 +25,7 @@ public class PisInfrService {
 
     private PisInfrMapper pisInfrMapper;
     private PrkPlceMapper prkPlceMapper;
-    private DbmsJobProcess dbmsJobProcess;
+    private DbmsDataProcess dbmsDataProcess;
 
     private int sttsMin;
 
@@ -35,7 +34,7 @@ public class PisInfrService {
         log.info("PisInfrService.init: Start.");
         this.pisInfrMapper = (PisInfrMapper) AppUtils.getBean(PisInfrMapper.class);
         this.prkPlceMapper = (PrkPlceMapper) AppUtils.getBean(PrkPlceMapper.class);
-        this.dbmsJobProcess = (DbmsJobProcess) AppUtils.getBean(DbmsJobProcess.class);
+        this.dbmsDataProcess = (DbmsDataProcess) AppUtils.getBean(DbmsDataProcess.class);
         log.info("PisInfrService.init: ..End.");
     }
 
@@ -176,15 +175,14 @@ public class PisInfrService {
         boolean insHs = false;
         Calendar cal = Calendar.getInstance();
         int min = cal.get(Calendar.MINUTE);
-        log.error("updateCtlrStts: {}, {}", min, (min%5));
         if ((min % 5) == 0) {
             insHs = true;
             this.sttsMin = min;
         }
 
-        if (isRun && insHs) {
+        if (insHs) {
             // 5분 마다 실시간 주차장 이력 정보를 저장하자.
-            insertPrkPlceSttsHs();
+            insertPrkPlceRlTimeHs();
         }
 
         // 주차정보시스템 상태정보 업데이트
@@ -245,21 +243,24 @@ public class PisInfrService {
 
         // 주차정보시스템 상태정보 DB 업데이트
         if (pisSttsList.size() > 0) {
-            this.dbmsJobProcess.add(new DbmsJobData(DbmsJobType.DATA_TYPE_PIS_STTS, insHs, pisSttsList, null));
+            this.dbmsDataProcess.add(new DbmsData(DbmsData.DBMS_DATA_PIS_STTS, insHs, pisSttsList, null));
         }
         // 주차장 상태정보 DB 업데이트
         if (prkPlceSttsList.size() > 0) {
-            this.dbmsJobProcess.add(new DbmsJobData(DbmsJobType.DATA_TYPE_PRK_PLCE_STTS, insHs, prkPlceSttsList, null));
+            this.dbmsDataProcess.add(new DbmsData(DbmsData.DBMS_DATA_PRK_PLCE_STTS, insHs, prkPlceSttsList, null));
+        }
+        if (insHs) {
+            log.error("DATA_TYPE_PRK_PLCE_STTS: {}, {} EA.", UPDT_DT, prkPlceSttsList.size());
         }
-
         log.info("PisInfrService.updateCtlrStts: PIS, total {}, normal {}, error {}", normal + error, normal, error);
     }
 
-    public void insertPrkPlceSttsHs() {
+    public void insertPrkPlceRlTimeHs() {
         TbPrkPlceRtHs rtHs = TbPrkPlceRtHs.builder()
                 .crtnDt(SysUtils.getSysTimeHm())
                 .build();
-        this.dbmsJobProcess.addQ(new DbmsJobData(DbmsJobType.DATA_TYPE_RL_TIME_HS, true, rtHs, null));
+        log.error("insertPrkPlceRlTimeHs: {}", rtHs.getCrtnDt());
+        this.dbmsDataProcess.add(new DbmsData(DbmsData.DBMS_DATA_RL_TIME_HS, true, rtHs, null));
     }
 
     /**

+ 4 - 3
src/main/java/com/its/pis/service/UnitSystService.java

@@ -6,8 +6,8 @@ import com.its.pis.config.ProcessConfig;
 import com.its.pis.dao.mapper.UnitSystMapper;
 import com.its.pis.entity.TbUnitSyst;
 import com.its.pis.entity.TbUnitSystStts;
-import com.its.pis.process.AbstractDbmsJobProcess;
-import com.its.pis.process.DbmsJobData;
+import com.its.pis.process.DbmsData;
+import com.its.pis.process.DbmsDataProcess;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -34,6 +34,7 @@ public class UnitSystService {
     private final UnitSystMapper unitSystMapper;
     private final ConcurrentHashMap<String, TbUnitSyst> unitSystMap = new ConcurrentHashMap<>();
     private final TbUnitSystStts unitSystStts = TbUnitSystStts.builder().build();
+    private final DbmsDataProcess dbmsDataProcess;
 
     private String processId;
     private int sttsMin;
@@ -118,7 +119,7 @@ public class UnitSystService {
             }
         }
         else {
-            AbstractDbmsJobProcess.addQ(new DbmsJobData(DbmsJobData.DATA_TYPE_UNIT_SYST_STTS, insHs, this.unitSystStts, null));
+            this.dbmsDataProcess.add(new DbmsData(DbmsData.DBMS_DATA_UNIT_SYST_STTS, insHs, this.unitSystStts, null));
             if (insHs) {
                 //loadMaster();
             }

+ 6 - 7
src/main/java/com/its/pis/websocket/PisWebSocketHandler.java

@@ -8,9 +8,8 @@ import com.its.pis.entity.TbPisInfrStts;
 import com.its.pis.entity.TbPrkPlce;
 import com.its.pis.entity.TbPrkPlceStts;
 import com.its.pis.global.AppRepository;
-import com.its.pis.process.DbmsJobData;
-import com.its.pis.process.DbmsJobProcess;
-import com.its.pis.process.DbmsJobType;
+import com.its.pis.process.DbmsData;
+import com.its.pis.process.DbmsDataProcess;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.socket.CloseStatus;
 import org.springframework.web.socket.WebSocketSession;
@@ -27,7 +26,7 @@ public class PisWebSocketHandler extends TextWebSocketHandler {
 
     protected String type;
     protected ObjectMapper mapper;
-    protected DbmsJobProcess dbmsJobProcess;
+    protected DbmsDataProcess dbmsDataProcess;
 
     public PisWebSocketHandler(String type) {
 
@@ -40,7 +39,7 @@ public class PisWebSocketHandler extends TextWebSocketHandler {
 
         this.type = type;
         this.mapper = new ObjectMapper();
-        this.dbmsJobProcess = (DbmsJobProcess) AppUtils.getBean(DbmsJobProcess.class);
+        this.dbmsDataProcess = (DbmsDataProcess) AppUtils.getBean(DbmsDataProcess.class);
 
         log.info("PisWebSocketHandler() START, type={}", this.type);
     }
@@ -55,7 +54,7 @@ public class PisWebSocketHandler extends TextWebSocketHandler {
         pis.getStts().setUPDT_DT(UPDT_DT);
         pis.getStts().setCMNC_STTS_CD(CMNC_STTS_CD);
         pisOnSttsList.add(pis.getStts());
-        this.dbmsJobProcess.add(new DbmsJobData(DbmsJobType.DATA_TYPE_PIS_STTS, false, pisOnSttsList, pis));
+        this.dbmsDataProcess.add(new DbmsData(DbmsData.DBMS_DATA_PIS_STTS, false, pisOnSttsList, pis));
 
         if (PisConstants.C2F.equals(pis.getPIS_TP())) {
             // 자체수집하는 경우 주차정보시스템의 상태가 주차장의 상태정보이다.
@@ -67,7 +66,7 @@ public class PisWebSocketHandler extends TextWebSocketHandler {
                 prkPlceSttsList.add(obj.getStts());
             }
             if (prkPlceSttsList.size() > 0) {
-                this.dbmsJobProcess.add(new DbmsJobData(DbmsJobType.DATA_TYPE_PRK_PLCE_STTS, false, prkPlceSttsList, null));
+                this.dbmsDataProcess.add(new DbmsData(DbmsData.DBMS_DATA_PRK_PLCE_STTS, false, prkPlceSttsList, null));
             }
         }
 

+ 2 - 3
src/main/java/com/its/pis/websocket/PisWebSocketHandlerC2C.java

@@ -4,8 +4,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.its.app.utils.ItsUtils;
 import com.its.pis.entity.TbPisInfr;
-import com.its.pis.process.DbmsJobData;
-import com.its.pis.process.DbmsJobType;
+import com.its.pis.process.DbmsData;
 import com.its.pis.websocket.common.SubscribeIdentifier;
 import com.its.pis.websocket.common.SubscribeRequest;
 import com.its.pis.websocket.common.SubscribeResponseAccept;
@@ -136,7 +135,7 @@ public class PisWebSocketHandlerC2C extends PisWebSocketHandler {
             } else if (C2FConstants.prk_plce_rl_time_info.equals(eventName) || C2FConstants.prk_plce_rl_time_info_cycle.equals(eventName)) {
                 C2FMessage<PrkPlceRlTimeResponseInfo> rlTimeInfo = this.mapper.readValue(payloadMessage, new TypeReference<C2FMessage<PrkPlceRlTimeResponseInfo>>(){});
                 pis.setRlTimeInfo(rlTimeInfo);
-                dbmsJobProcess.add(new DbmsJobData(DbmsJobType.DATA_TYPE_RL_TIME, false, rlTimeInfo, pis));
+                dbmsDataProcess.add(new DbmsData(DbmsData.DBMS_DATA_RL_TIME, false, rlTimeInfo, pis));
                 log.info("C2C: RX] prk_plce_rl_time_info");
                 log.info("RX] {}", this.mapper.writeValueAsString(rlTimeInfo));
             } else if (C2FConstants.prk_plce_reservation_response_info.equals(eventName)) {

+ 2 - 3
src/main/java/com/its/pis/websocket/PisWebSocketHandlerC2F.java

@@ -4,8 +4,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.its.app.utils.ItsUtils;
 import com.its.pis.entity.TbPisInfr;
-import com.its.pis.process.DbmsJobData;
-import com.its.pis.process.DbmsJobType;
+import com.its.pis.process.DbmsData;
 import com.its.pis.websocket.common.SubscribeIdentifier;
 import com.its.pis.websocket.common.SubscribeRequest;
 import com.its.pis.websocket.common.SubscribeResponseAccept;
@@ -125,7 +124,7 @@ public class PisWebSocketHandlerC2F extends PisWebSocketHandler {
             } else if (C2FConstants.prk_plce_rl_time_info.equals(eventName) || C2FConstants.prk_plce_rl_time_info_cycle.equals(eventName)) {
                 C2FMessage<PrkPlceRlTimeResponseInfo> rlTimeInfo = this.mapper.readValue(payloadMessage, new TypeReference<C2FMessage<PrkPlceRlTimeResponseInfo>>(){});
                 pis.setRlTimeInfo(rlTimeInfo);
-                dbmsJobProcess.add(new DbmsJobData(DbmsJobType.DATA_TYPE_RL_TIME, false, rlTimeInfo, pis));
+                dbmsDataProcess.add(new DbmsData(DbmsData.DBMS_DATA_RL_TIME, false, rlTimeInfo, pis));
                 log.info("C2F: RX] prk_plce_rl_time_info");
                 log.info("RX] {}", this.mapper.writeValueAsString(rlTimeInfo));
             } else if (C2FConstants.prk_plce_reservation_response_info.equals(eventName)) {

+ 1 - 1
src/main/resources/logback-spring.xml

@@ -24,7 +24,7 @@
     <property name="MAX_FILESIZE" value="10MB"/>
     <property name="MAX_HISTORY"  value="30"/>
     <property name="LOG_PATTERN_FILE"        value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %msg%n"/>
-    <property name="LOG_PATTERN_ERROR"       value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%30t] [%5level] %42logger{35}.%-20M ${PID:-} %n%msg%n"/>
+    <property name="LOG_PATTERN_ERROR"       value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%30t] [%5level] %42logger{35}.%-20M ${PID:-} %msg%n"/>
     <property name="LOG_PATTERN_PACKET"      value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %msg%n"/>
     <property name="LOG_PATTERN_SESSION"     value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %msg%n"/>
     <property name="LOG_PATTERN_CENTER_COMM" value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %msg%n"/>