shjung 9 月之前
父節點
當前提交
787b16840a
共有 29 個文件被更改,包括 329 次插入360 次删除
  1. 1 0
      evps-comm-server/src/main/java/com/evps/comm/server/dao/mapper/EvpsCenterMapper.java
  2. 2 0
      evps-comm-server/src/main/java/com/evps/comm/server/entity/TbRegionCenterComm.java
  3. 0 4
      evps-comm-server/src/main/java/com/evps/comm/server/process/dbms/DbmsData.java
  4. 33 12
      evps-comm-server/src/main/java/com/evps/comm/server/process/dbms/DbmsDataProcess.java
  5. 13 1
      evps-comm-server/src/main/java/com/evps/comm/server/repository/ApplicationRepository.java
  6. 15 3
      evps-comm-server/src/main/java/com/evps/comm/server/scheduler/ApplicationScheduler.java
  7. 28 0
      evps-comm-server/src/main/java/com/evps/comm/server/service/EvpsServiceManagerService.java
  8. 2 0
      evps-comm-server/src/main/java/com/evps/comm/server/xnet/server/handler/EvpsCommServerInboundMessageHandler.java
  9. 1 1
      evps-comm-server/src/main/java/com/evps/comm/server/xnet/server/process/response/EvpsEvent.java
  10. 19 13
      evps-comm-server/src/main/java/com/evps/comm/server/xnet/server/process/response/EvpsNode.java
  11. 5 4
      evps-comm-server/src/main/java/com/evps/comm/server/xnet/server/process/response/EvpsService.java
  12. 7 6
      evps-comm-server/src/main/java/com/evps/comm/server/xnet/server/process/response/EvpsServiceEnd.java
  13. 6 5
      evps-comm-server/src/main/java/com/evps/comm/server/xnet/server/process/response/EvpsSignal.java
  14. 6 4
      evps-comm-server/src/main/java/com/evps/comm/server/xnet/server/process/work/DataPacketProcess.java
  15. 2 2
      evps-comm-server/src/main/resources/application.yml
  16. 7 0
      evps-comm-server/src/main/resources/mybatis/mapper/EvpsCenterMapper.xml
  17. 9 54
      evps-comm-server/src/main/resources/mybatis/mapper/EvpsServiceMapper.xml
  18. 11 10
      evps-comm-server/src/test/java/com/evps/comm/server/EvpsCommServerApplicationTest.java
  19. 36 0
      evps-common/src/main/java/com/evps/common/kafka/dto/EvpsNodeInfo.java
  20. 66 0
      evps-common/src/main/java/com/evps/common/kafka/dto/EvpsPhaseInfo.java
  21. 3 4
      evps-common/src/main/java/com/evps/common/kafka/dto/EvpsRouteInfo.java
  22. 45 0
      evps-common/src/main/java/com/evps/common/kafka/dto/EvpsSignalInfo.java
  23. 0 96
      evps-common/src/main/java/com/evps/common/kafka/dto/KafkaEvpsNodeDto.java
  24. 0 64
      evps-common/src/main/java/com/evps/common/kafka/dto/KafkaEvpsPhaseDto.java
  25. 4 18
      evps-common/src/main/java/com/evps/common/kafka/dto/KafkaEvpsRouteDto.java
  26. 3 20
      evps-common/src/main/java/com/evps/common/kafka/dto/KafkaEvpsServiceDto.java
  27. 0 38
      evps-common/src/main/java/com/evps/common/kafka/dto/KafkaEvpsSignalDto.java
  28. 4 0
      evps-common/src/main/java/com/evps/common/protocol/EvpsCommPacket.java
  29. 1 1
      evps-common/src/main/java/com/evps/common/utils/EvpsUtils.java

+ 1 - 0
evps-comm-server/src/main/java/com/evps/comm/server/dao/mapper/EvpsCenterMapper.java

@@ -14,4 +14,5 @@ public interface EvpsCenterMapper {
     int updateCommLastComm(@Param("centerId") String centerId);
     int updateCommStateConnect(@Param("centerId") String centerId);
     int updateCommStateDisconnect(@Param("centerId") String centerId);
+    int insertEvpCommHs(@Param("centerId") String centerId, @Param("commSts") String commSts, @Param("opCode") String opCode);
 }

+ 2 - 0
evps-comm-server/src/main/java/com/evps/comm/server/entity/TbRegionCenterComm.java

@@ -20,4 +20,6 @@ public class TbRegionCenterComm implements Serializable {
 
     private String centerId;        /* 지역 센터 코드 */
     private int commState;       /* 통신상태(0:정상, 1:종료, 2:오류발생) */
+    private byte opCode;
+    private String opCodeDesc;
 }

+ 0 - 4
evps-comm-server/src/main/java/com/evps/comm/server/process/dbms/DbmsData.java

@@ -4,9 +4,6 @@ import com.evps.common.dto.EvpsCenter;
 import lombok.Getter;
 import lombok.Setter;
 
-import java.util.HashMap;
-import java.util.List;
-
 @Getter
 @Setter
 public class DbmsData {
@@ -24,7 +21,6 @@ public class DbmsData {
     public static final int DBMS_DATA_INS_PHASE = 15;
     public static final int DBMS_DATA_INS_SIGNAL = 16;
 
-
     private int          type;
     private EvpsCenter center;
     private Object       data;

+ 33 - 12
evps-comm-server/src/main/java/com/evps/comm/server/process/dbms/DbmsDataProcess.java

@@ -6,9 +6,11 @@ import com.evps.comm.server.dao.mapper.EvpsServiceMapper;
 import com.evps.comm.server.dao.mapper.ProcessMapper;
 import com.evps.comm.server.dao.mapper.batch.EvpCommServerDao;
 import com.evps.comm.server.entity.TbRegionCenterComm;
+import com.evps.comm.server.repository.ApplicationRepository;
 import com.evps.common.dto.EvpsCenter;
 import com.evps.common.kafka.dto.KafkaEvpsEventDto;
 import com.evps.common.kafka.dto.KafkaEvpsServiceDto;
+import com.evps.common.protocol.eEvpsOpCode;
 import com.its.common.spring.SpringUtils;
 import com.its.common.utils.Elapsed;
 import lombok.RequiredArgsConstructor;
@@ -37,13 +39,8 @@ public class DbmsDataProcess {
     private final EvpCommServerDao evpCommServerDao;
     private final EvpsCenterMapper evpsCenterMapper;
 
-    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++) {
@@ -103,8 +100,7 @@ public class DbmsDataProcess {
                     KafkaEvpsServiceDto updService = (KafkaEvpsServiceDto)data.getData();
                     try {
                         result = this.serviceMapper.updateEvpService(updService);
-                    }
-                    catch (Exception e) {
+                    } catch (Exception e) {
                         log.error("DBMS_DATA_UPD_SERVICE: [{}]. {}", center.getLogKey(), updService);
                         log.error("DBMS_DATA_UPD_SERVICE: [{}]. Exception: {}\r\n", center.getLogKey(), e.toString());
                     }
@@ -112,15 +108,32 @@ public class DbmsDataProcess {
 
                 case DbmsData.DBMS_DATA_INS_EVENT:
                     typeDesc = "DBMS_DATA_INS_EVENT";
+                    // TODO:
+                    //  종료 이벤트가 아닌경우 서비스가 메모리에 존재하는지를 확인하고 데이터를 저장하자.
+                    //  지역센터에서 종료이벤트를 중복으로 전송하는 경우가 는 경우, 또는 멀티스레드 처리 중에 시간의 역전.
+                    // 종료 이벤트 인 경우 메모리에서 삭제 한 후에 이벤트(종료) 이벤트를 저장한다.
+                    boolean insData = true;
                     KafkaEvpsEventDto event = (KafkaEvpsEventDto)data.getData();
-                    try {
-                        result = this.serviceMapper.insertEvpEventCurr(event);
+                    if (event.getEventCd() < KafkaEvpsEventDto.EVPS_EVENT_SERVICE_END) {
+                        KafkaEvpsServiceDto service = ApplicationRepository.getService(event.getServiceId());
+                        if (service == null) {
+                            insData = false;
+                            result = 0;
+                            log.warn("DBMS_DATA_INS_EVENT: [{}]. EVPS service has already ended. {}", center.getLogKey(), event);
+                        }
                     }
-                    catch (Exception e) {
-                        log.error("DBMS_DATA_INS_EVENT_CURR: [{}]. {}", center.getLogKey(), event);
-                        log.error("DBMS_DATA_INS_EVENT_CURR: [{}]. Exception: {}\r\n", center.getLogKey(), e.toString());
+                    if (insData) {
+                        try {
+                            // 현재 서비스 이벤트 정보에서 종료 후 다른 이벤트가 처리되지 않도록 한다.
+                            result = this.serviceMapper.insertEvpEventCurr(event);
+                        }
+                        catch (Exception e) {
+                            log.error("DBMS_DATA_INS_EVENT_CURR: [{}]. {}", center.getLogKey(), event);
+                            log.error("DBMS_DATA_INS_EVENT_CURR: [{}]. Exception: {}\r\n", center.getLogKey(), e.toString());
+                        }
                     }
                     try {
+                        // 이벤트 이력은 모두 입력 되도록 한다.
                         result = this.serviceMapper.insertEvpEvent(event);
                     }
                     catch (Exception e) {
@@ -198,14 +211,19 @@ public class DbmsDataProcess {
                             case TbRegionCenterComm.CENTER_COMM_START:
                                 typeDesc = "CENTER_COMM_START";
                                 result = this.evpsCenterMapper.updateCommStateConnect(stts.getCenterId());
+                                result = this.evpsCenterMapper.insertEvpCommHs(stts.getCenterId(), "1", "");
                                 break;
                             case TbRegionCenterComm.CENTER_COMM_STOP:
                                 typeDesc = "CENTER_COMM_STOP";
                                 result = this.evpsCenterMapper.updateCommStateDisconnect(stts.getCenterId());
+                                result = this.evpsCenterMapper.insertEvpCommHs(stts.getCenterId(), "0", "");
                                 break;
                             case TbRegionCenterComm.CENTER_COMM_LAST:
                                 typeDesc = "CENTER_COMM_LAST";
                                 result = this.evpsCenterMapper.updateCommLastComm(stts.getCenterId());
+                                if (stts.getOpCode() != eEvpsOpCode.EVPS_NET_PING.getValue()) {
+                                    result = this.evpsCenterMapper.insertEvpCommHs(stts.getCenterId(), "0", stts.getOpCodeDesc());
+                                }
                                 break;
                             default:
                                 typeDesc = "UNKNOWN DBMS_DATA_CENTER_STTS";
@@ -247,3 +265,6 @@ public class DbmsDataProcess {
     }
 
 }
+//select SYSDATE(), now(), STR_TO_DATE('2024-10-17 10:42:13.899','%Y-%m-%d %H:%i:%s.%f'),
+//STR_TO_DATE('2024-10-17 10:42:13.899','%Y-%m-%d %H:%i:%s'),
+//current_timestamp(6), current_timestamp(3), current_timestamp(), to_days('2024-02-01 00:00:00');

+ 13 - 1
evps-comm-server/src/main/java/com/evps/comm/server/repository/ApplicationRepository.java

@@ -44,7 +44,8 @@ public class ApplicationRepository {
             .dump(false)
             .build();
 
-    public static final ConcurrentHashMap<String, KafkaEvpsServiceDto> serviceMap = new ConcurrentHashMap<>();
+    @Getter
+    private static final ConcurrentHashMap<String, KafkaEvpsServiceDto> serviceMap = new ConcurrentHashMap<>();
 
     private final ConcurrentHashMap<String, EvpsCenter> centerMap = new ConcurrentHashMap<>();
     private final ConcurrentHashMap<String, EvpsCenter> ipAddrMap = new ConcurrentHashMap<>();
@@ -52,6 +53,16 @@ public class ApplicationRepository {
     private final EvpsCenterMapper mapper;
     private final DbmsDataProcess dbmsDataProcess;
 
+    public static void addService(String serviceId, KafkaEvpsServiceDto service) {
+        serviceMap.put(serviceId, service);
+    }
+    public static void delService(String serviceId) {
+        serviceMap.remove(serviceId);
+    }
+    public static KafkaEvpsServiceDto getService(String serviceId) {
+        return serviceMap.get(serviceId);
+    }
+
     public static void closeChannel(EvpsCenter center, Channel channel) {
         try {
             if (center != null && center.getNetState().getState() > NET.LOGIN_WAIT) {
@@ -70,6 +81,7 @@ public class ApplicationRepository {
     public static void setCenterObject(Channel channel, EvpsCenter center) {
         channel.attr(ApplicationRepository.SIG_REGION_ATTRIBUTE_KEY).set(center);
     }
+
     public static EvpsCenter getCenterObject(Channel channel) {
         EvpsCenter center = channel.attr(ApplicationRepository.SIG_REGION_ATTRIBUTE_KEY).get();
         if (center == null) {

+ 15 - 3
evps-comm-server/src/main/java/com/evps/comm/server/scheduler/ApplicationScheduler.java

@@ -3,7 +3,6 @@ package com.evps.comm.server.scheduler;
 import com.evps.comm.server.config.TraceConfig;
 import com.evps.comm.server.repository.ApplicationRepository;
 import com.evps.comm.server.service.UnitSystService;
-import com.its.common.annotation.ScheduleElapsed;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.scheduling.annotation.Async;
@@ -22,6 +21,7 @@ public class ApplicationScheduler {
     private final TraceConfig traceConfig;
     private final UnitSystService unitSystService;
     private final ApplicationRepository applicationRepository;
+//    private final EvpsServiceManagerService evpsServiceManagerService;
 
     @PreDestroy
     public void onShutDown() {
@@ -30,7 +30,7 @@ public class ApplicationScheduler {
 
 //    @ScheduleElapsed
     @Async
-    @Scheduled(cron = "0 * * * * *")  // 10초 주기 작업 실행
+    @Scheduled(cron = "0 * * * * *")
     public void updateProcessState() {
         try {
             this.unitSystService.updateUnitSystStts();
@@ -40,7 +40,7 @@ public class ApplicationScheduler {
         }
     }
 
-//    @ScheduleElapsed
+    //    @ScheduleElapsed
     @Async
     @Scheduled(cron = "30 * * * * *")  // 1분주기 작업 실행
     public void loadTraceConfig() {
@@ -52,6 +52,18 @@ public class ApplicationScheduler {
         }
     }
 
+    //    @ScheduleElapsed
+//    @Async
+//    @Scheduled(cron = "0/30 * * * * *")
+//    public void serviceMangerSchedule() {
+//        try {
+//            this.evpsServiceManagerService.run();
+//        }
+//        catch(Exception e) {
+//            log.error("ApplicationScheduler.serviceMangerSchedule: Exception {}", e.getMessage());
+//        }
+//    }
+
 //    @ScheduleElapsed
     @Async
     @Scheduled(cron = "20 * * * * *")  // 1분주기 작업 실행

+ 28 - 0
evps-comm-server/src/main/java/com/evps/comm/server/service/EvpsServiceManagerService.java

@@ -0,0 +1,28 @@
+package com.evps.comm.server.service;
+
+import com.evps.comm.server.kafka.KafkaProducerService;
+import com.evps.comm.server.process.dbms.DbmsDataProcess;
+import com.evps.comm.server.repository.ApplicationRepository;
+import com.evps.common.kafka.dto.KafkaEvpsServiceDto;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.concurrent.ConcurrentHashMap;
+
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class EvpsServiceManagerService {
+
+    private final DbmsDataProcess dbmsDataProcess;
+    private final KafkaProducerService kafkaProducerService;
+
+    public void run() {
+
+        ConcurrentHashMap<String, KafkaEvpsServiceDto> serviceMap = ApplicationRepository.getServiceMap();
+        serviceMap.forEach((key, evpsService) -> {
+        });
+    }
+
+}

+ 2 - 0
evps-comm-server/src/main/java/com/evps/comm/server/xnet/server/handler/EvpsCommServerInboundMessageHandler.java

@@ -76,6 +76,8 @@ public class EvpsCommServerInboundMessageHandler extends SimpleChannelInboundHan
                 TbRegionCenterComm stts = TbRegionCenterComm.builder()
                         .centerId(center.getCenterId())
                         .commState(TbRegionCenterComm.CENTER_COMM_LAST)
+                        .opCode(evpsCommPacket.getOpCode())
+                        .opCodeDesc(evpsCommPacket.getOpCodeDesc())
                         .build();
                 this.dbmsDataProcess.add(new DbmsData(DbmsData.DBMS_DATA_CENTER_STTS, center, stts));
             }

+ 1 - 1
evps-comm-server/src/main/java/com/evps/comm/server/xnet/server/process/response/EvpsEvent.java

@@ -95,7 +95,7 @@ public class EvpsEvent implements EvpsCommResponse {
         // 이벤트 정보 입력(차량 이동)
         this.dbmsDataProcess.add(new DbmsData(DbmsData.DBMS_DATA_INS_EVENT, center, data));
 
-        KafkaEvpsServiceDto service = ApplicationRepository.serviceMap.get(data.getServiceId());
+        KafkaEvpsServiceDto service = ApplicationRepository.getService(data.getServiceId());
         if (service == null) {
             log.error("[{}], EvpsEvent.response: Not Found Service Information. Service Id: {}", center.getLogKey(), data.getServiceId());
         }

+ 19 - 13
evps-comm-server/src/main/java/com/evps/comm/server/xnet/server/process/response/EvpsNode.java

@@ -5,12 +5,14 @@ import com.evps.comm.server.process.dbms.DbmsData;
 import com.evps.comm.server.process.dbms.DbmsDataProcess;
 import com.evps.comm.server.repository.ApplicationRepository;
 import com.evps.common.dto.EvpsCenter;
+import com.evps.common.kafka.dto.EvpsNodeInfo;
+import com.evps.common.kafka.dto.EvpsPhaseInfo;
+import com.evps.common.kafka.dto.KafkaEvpsNodeDto;
+import com.evps.common.kafka.dto.KafkaEvpsServiceDto;
 import com.evps.common.protocol.EvpsProtocolConst;
 import com.evps.common.protocol.response.EvpsCommResponse;
 import com.evps.common.protocol.response.RecvPacketDto;
 import com.evps.common.utils.EvpsByteUtils;
-import com.evps.common.kafka.dto.KafkaEvpsNodeDto;
-import com.evps.common.kafka.dto.KafkaEvpsServiceDto;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.slf4j.MDC;
@@ -101,6 +103,11 @@ public class EvpsNode implements EvpsCommResponse {
                 .nodeList(new ArrayList<>())
                 .build();
 
+        KafkaEvpsServiceDto service = ApplicationRepository.getService(data.getServiceId());
+        if (service == null) {
+            log.error("[{}], EvpsNode.response: Not Found Service Information. Service Id: {}", center.getLogKey(), data.getServiceId());
+        }
+
         List<HashMap<String, Object>> lists = new ArrayList<>();
         List<HashMap<String, Object>> phaseLists = new ArrayList<>();
         for (int ii = 0; ii < nodeCount; ii++) {
@@ -110,8 +117,9 @@ public class EvpsNode implements EvpsCommResponse {
             int currentLat   = ((buffer[idx++] & 0xFF) << 24) | ((buffer[idx++] & 0xFF) << 16) | ((buffer[idx++] & 0xFF) << 8) | (buffer[idx++] & 0xFF);
             int currentLng   = ((buffer[idx++] & 0xFF) << 24) | ((buffer[idx++] & 0xFF) << 16) | ((buffer[idx++] & 0xFF) << 8) | (buffer[idx++] & 0xFF);
 
-            KafkaEvpsNodeDto.EvpsNodeInfo node = KafkaEvpsNodeDto.EvpsNodeInfo.builder()
-                    .seqNo(ii+1)
+            int seqNo = ii+1;
+            EvpsNodeInfo node = EvpsNodeInfo.builder()
+                    .seqNo(seqNo)
                     .nodeId(nodeId)
                     .nodeNm(EvpsByteUtils.toString(nodeNmArr))
                     .lat(currentLat/EvpsProtocolConst.EVPS_GEO_CORRECT)
@@ -119,6 +127,9 @@ public class EvpsNode implements EvpsCommResponse {
                     .phaseList(new ArrayList<>())
                     .build();
             data.getNodeList().add(node);
+            if (service != null) {
+                service.getNodeList().add(node);
+            }
 
             HashMap<String, Object> param = getNodeInfoMap(serviceId, node);
             lists.add(param);
@@ -145,8 +156,8 @@ public class EvpsNode implements EvpsCommResponse {
                 int headAngle = ((buffer[idx++] & 0xFF) <<  8) | ( buffer[idx++] & 0xFF);
                 int endAngle  = ((buffer[idx++] & 0xFF) <<  8) | ( buffer[idx++] & 0xFF);
 
-                KafkaEvpsNodeDto.EvpsPhaseInfo phase = KafkaEvpsNodeDto.EvpsPhaseInfo.builder()
-                        .seqNo(jj+1)
+                EvpsPhaseInfo phase = EvpsPhaseInfo.builder()
+                        .seqNo(seqNo)
                         .nodeId(nodeId)
                         .ring(ring)
                         .phaseNo(phaseNo)
@@ -170,11 +181,6 @@ public class EvpsNode implements EvpsCommResponse {
         log.info("[{}], EvpsNode.response: Service Node List {} EA.", center.getLogKey(), lists.size());
         log.info("[{}], EvpsNode.response: Service Node: {}.", center.getLogKey(), lists);
 
-        KafkaEvpsServiceDto service = ApplicationRepository.serviceMap.get(data.getServiceId());
-        if (service == null) {
-            log.error("[{}], EvpsNode.response: Not Found Service Information. Service Id: {}", center.getLogKey(), data.getServiceId());
-        }
-
         if (!lists.isEmpty()) {
             // kafka 전송
             this.kafkaProducerService.sendEvpsNodeTopic(data);
@@ -187,7 +193,7 @@ public class EvpsNode implements EvpsCommResponse {
         return true;
     }
 
-    private static HashMap<String, Object> getNodeInfoMap(String serviceId, KafkaEvpsNodeDto.EvpsNodeInfo node) {
+    private static HashMap<String, Object> getNodeInfoMap(String serviceId, EvpsNodeInfo node) {
         HashMap<String, Object> param = new HashMap<>();
 
         param.put("SERVICE_ID",  serviceId);
@@ -199,7 +205,7 @@ public class EvpsNode implements EvpsCommResponse {
         return param;
     }
 
-    private static HashMap<String, Object> getNodePhaseInfoMap(String serviceId, Long nodeId, KafkaEvpsNodeDto.EvpsPhaseInfo phase) {
+    private static HashMap<String, Object> getNodePhaseInfoMap(String serviceId, Long nodeId, EvpsPhaseInfo phase) {
         HashMap<String, Object> param = new HashMap<>();
 
         param.put("SERVICE_ID",  serviceId);

+ 5 - 4
evps-comm-server/src/main/java/com/evps/comm/server/xnet/server/process/response/EvpsService.java

@@ -5,13 +5,14 @@ import com.evps.comm.server.process.dbms.DbmsData;
 import com.evps.comm.server.process.dbms.DbmsDataProcess;
 import com.evps.comm.server.repository.ApplicationRepository;
 import com.evps.common.dto.EvpsCenter;
+import com.evps.common.kafka.dto.EvpsRouteInfo;
+import com.evps.common.kafka.dto.KafkaEvpsEventDto;
+import com.evps.common.kafka.dto.KafkaEvpsServiceDto;
 import com.evps.common.protocol.EvpsProtocolConst;
 import com.evps.common.protocol.response.EvpsCommResponse;
 import com.evps.common.protocol.response.RecvPacketDto;
 import com.evps.common.utils.EvpsByteUtils;
 import com.evps.common.utils.EvpsUtils;
-import com.evps.common.kafka.dto.KafkaEvpsEventDto;
-import com.evps.common.kafka.dto.KafkaEvpsServiceDto;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.slf4j.MDC;
@@ -159,7 +160,7 @@ public class EvpsService implements EvpsCommResponse {
             int routeLat = ((buffer[idx++] & 0xFF) << 24) | ((buffer[idx++] & 0xFF) << 16) | ((buffer[idx++] & 0xFF) << 8) | (buffer[idx++] & 0xFF);
             int routeLng = ((buffer[idx++] & 0xFF) << 24) | ((buffer[idx++] & 0xFF) << 16) | ((buffer[idx++] & 0xFF) << 8) | (buffer[idx++] & 0xFF);
 
-            KafkaEvpsServiceDto.KafkaEvpsRouteInfo route = KafkaEvpsServiceDto.KafkaEvpsRouteInfo.builder()
+            EvpsRouteInfo route = EvpsRouteInfo.builder()
                     .seqNo(ii + 1)
                     .lat(routeLat / EvpsProtocolConst.EVPS_GEO_CORRECT)
                     .lng(routeLng / EvpsProtocolConst.EVPS_GEO_CORRECT)
@@ -176,7 +177,7 @@ public class EvpsService implements EvpsCommResponse {
         log.info("[{}], EvpsService.response: Service Route List {} EA.", center.getLogKey(), lists.size());
         log.info("[{}], EvpsService.response: Service Route: {}.", center.getLogKey(), lists);
 
-        ApplicationRepository.serviceMap.put(service.getServiceId(), service);
+        ApplicationRepository.addService(service.getServiceId(), service);
 
         // kafka 전송
         this.kafkaProducerService.sendEvpsServiceTopic(service);

+ 7 - 6
evps-comm-server/src/main/java/com/evps/comm/server/xnet/server/process/response/EvpsServiceEnd.java

@@ -88,7 +88,7 @@ public class EvpsServiceEnd implements EvpsCommResponse {
                 .build();
 
         // 서비스 종료 정보 업데이트
-        KafkaEvpsServiceDto service = ApplicationRepository.serviceMap.get(data.getServiceId());
+        KafkaEvpsServiceDto service = ApplicationRepository.getService(data.getServiceId());
         if (service == null) {
             log.error("[{}], EvpsServiceEnd.response: Not Found Service Information. Service Id: {}", center.getLogKey(), data.getServiceId());
             service = new KafkaEvpsServiceDto();
@@ -107,18 +107,19 @@ public class EvpsServiceEnd implements EvpsCommResponse {
         event.setCurSpd(service.getCurSpd());
         event.setRemDist(service.getServiceDist());
 
-        // kafka 전송
+        // TODO:
+        //  종료이벤트이므로 메모리에서 먼저 삭제해서 종료후 다른 이벤트가 발생하지 않도록 한다.
+        ApplicationRepository.delService(service.getServiceId());
+
+        // kafka service 전송
         this.kafkaProducerService.sendEvpsServiceTopic(service);
 
-        // kafka 전송
+        // kafka event-terminate 전송
         this.kafkaProducerService.sendEvpsEventTopic(event);
 
         this.dbmsDataProcess.add(new DbmsData(DbmsData.DBMS_DATA_UPD_SERVICE, center, service));
-
         this.dbmsDataProcess.add(new DbmsData(DbmsData.DBMS_DATA_INS_EVENT, center, event));
 
-        // 서비스를 메모리에서 삭제한다.
-        ApplicationRepository.serviceMap.remove(service.getServiceId());
         return true;
     }
 }

+ 6 - 5
evps-comm-server/src/main/java/com/evps/comm/server/xnet/server/process/response/EvpsSignal.java

@@ -5,12 +5,13 @@ import com.evps.comm.server.process.dbms.DbmsData;
 import com.evps.comm.server.process.dbms.DbmsDataProcess;
 import com.evps.comm.server.repository.ApplicationRepository;
 import com.evps.common.dto.EvpsCenter;
+import com.evps.common.kafka.dto.EvpsSignalInfo;
+import com.evps.common.kafka.dto.KafkaEvpsServiceDto;
+import com.evps.common.kafka.dto.KafkaEvpsSignalDto;
 import com.evps.common.protocol.EvpsProtocolConst;
 import com.evps.common.protocol.response.EvpsCommResponse;
 import com.evps.common.protocol.response.RecvPacketDto;
 import com.evps.common.utils.EvpsUtils;
-import com.evps.common.kafka.dto.KafkaEvpsServiceDto;
-import com.evps.common.kafka.dto.KafkaEvpsSignalDto;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.slf4j.MDC;
@@ -113,7 +114,7 @@ public class EvpsSignal implements EvpsCommResponse {
             int bRingPhase  = buffer[idx++] & 0xFF;
             int holdPhase   = buffer[idx++] & 0xFF;
 
-            KafkaEvpsSignalDto.EvpsSignalInfo signal = KafkaEvpsSignalDto.EvpsSignalInfo.builder()
+            EvpsSignalInfo signal = EvpsSignalInfo.builder()
                     .nodeId(nodeId)
                     .seqNo(ii+1)
                     .remDist(remDist)
@@ -131,7 +132,7 @@ public class EvpsSignal implements EvpsCommResponse {
         log.info("[{}], EvpsSignal.response: Service Signal List {} EA.", center.getLogKey(), lists.size());
         log.info("[{}], EvpsSignal.response: Service Signal: {}.", center.getLogKey(), lists);
 
-        KafkaEvpsServiceDto service = ApplicationRepository.serviceMap.get(data.getServiceId());
+        KafkaEvpsServiceDto service = ApplicationRepository.getService(data.getServiceId());
         if (service == null) {
             log.error("[{}], EvpsSignal.response: Not Found Service Information. Service Id: {}", center.getLogKey(), data.getServiceId());
         }
@@ -145,7 +146,7 @@ public class EvpsSignal implements EvpsCommResponse {
         return true;
     }
 
-    private static HashMap<String, Object> getSignalInfoMap(String serviceId, KafkaEvpsSignalDto.EvpsSignalInfo signal) {
+    private static HashMap<String, Object> getSignalInfoMap(String serviceId, EvpsSignalInfo signal) {
         HashMap<String, Object> param = new HashMap<>();
 
         param.put("SERVICE_ID",   serviceId);

+ 6 - 4
evps-comm-server/src/main/java/com/evps/comm/server/xnet/server/process/work/DataPacketProcess.java

@@ -10,6 +10,7 @@ import com.evps.common.protocol.eEvpsOpCode;
 import com.evps.common.protocol.response.EvpsCommResponse;
 import com.evps.common.protocol.response.RecvPacketDto;
 import com.evps.common.utils.EvpsUtils;
+import com.its.common.spring.SpringUtils;
 import io.netty.channel.Channel;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -31,12 +32,11 @@ public class DataPacketProcess {
     private final DataPacketAsyncTask asyncTask;
     private final DbmsDataProcess dbmsDataProcess;
     private final KafkaProducerService kafkaProducerService;
-    private final ThreadPoolInitializer poolInitializer;
 
     public void run() {
         log.info("DataPacketProcess.run: Start.");
-//        ThreadPoolInitializer poolInitializer = SpringUtils.getBean(ThreadPoolInitializer.class);
-        int executePool = this.poolInitializer.getWork();
+        ThreadPoolInitializer poolInitializer = SpringUtils.getBean(ThreadPoolInitializer.class);
+        int executePool = poolInitializer.getWork();
         for (int ii = 0; ii < executePool; ii++) {
             log.info("DataPacketProcess.Task: {}", ii);
             this.taskExecutor.execute(() -> {
@@ -89,7 +89,9 @@ public class DataPacketProcess {
                 if (!response.response(packet)) {
                     isError = true;
                 }
-                log.info("{} END: {}, {}", opCode, !isError, EvpsUtils.serviceEndString());
+                if (opCode != eEvpsOpCode.EVPS_NET_PING) {
+                    log.info("{} END: {}, {}", opCode, !isError, EvpsUtils.serviceEndString());
+                }
             }
             else {
                 log.error("DataPacketProcess.process: [{}]. Unknown packet cmd: {}. will be closed.", center.getLogKey(), opCode);

+ 2 - 2
evps-comm-server/src/main/resources/application.yml

@@ -47,8 +47,8 @@ application:
   dbms-workers: 1
   queue-size: 0
   thread-pool:
-    dbms: 10
-    work: 5
+    dbms: 1
+    work: 1
 
   kafka:
     bootstrap-servers: 172.24.0.30:9092,172.24.0.31:9093,172.24.0.32:9094

+ 7 - 0
evps-comm-server/src/main/resources/mybatis/mapper/EvpsCenterMapper.xml

@@ -49,4 +49,11 @@
         ]]>
     </update>
 
+    <insert id="insertEvpCommHs" parameterType="java.lang.String">
+    <![CDATA[
+        INSERT INTO tb_evp_comm_hs (center_id, clct_dt, comm_sts, op_code)
+        VALUES ( #{centerId}, current_timestamp(3), #{commSts},  #{opCode})
+        ]]>
+    </insert>
+
 </mapper>

+ 9 - 54
evps-comm-server/src/main/resources/mybatis/mapper/EvpsServiceMapper.xml

@@ -130,8 +130,8 @@
                                   seq_no,
                                   node_id,
                                   ring,
-                                  phase_no,
                                   plan_class,
+                                  phase_no,
                                   flow_no,
                                   head_lat,
                                   head_lng,
@@ -145,8 +145,8 @@
                  #{SEQ_NO},
                  #{NODE_ID},
                  #{RING},
-                 #{PHASE_NO},
                  #{PLAN_CLASS},
+                 #{PHASE_NO},
                  #{FLOW_NO},
                  #{HEAD_LAT},
                  #{HEAD_LNG},
@@ -210,13 +210,13 @@
                  #{HOLD_PHASE}
                )
             ON DUPLICATE KEY UPDATE
-                                 clct_dt       = current_timestamp(3),
-                                 rem_dist      = #{REM_DIST},
-                                 state         = #{STATE},
-                                 plan_class    = #{PLAN_CLASS},
-                                 a_ring_phase  = #{A_RING_PHASE},
-                                 b_ring_phase  = #{B_RING_PHASE},
-                                 hold_phase    = #{HOLD_PHASE}
+                 clct_dt       = current_timestamp(3),
+                 rem_dist      = #{REM_DIST},
+                 state         = #{STATE},
+                 plan_class    = #{PLAN_CLASS},
+                 a_ring_phase  = #{A_RING_PHASE},
+                 b_ring_phase  = #{B_RING_PHASE},
+                 hold_phase    = #{HOLD_PHASE}
         ]]>
     </insert>
 
@@ -254,49 +254,4 @@
     ]]>
     </insert>
 
-<!--    <update id="updateEvpSignalOracle" parameterType="java.util.Map">-->
-<!--    <![CDATA[-->
-<!--        MERGE INTO tb_evp_signal L-->
-<!--            USING(SELECT #{SERVICE_ID} AS service_id,-->
-<!--                         #{SEQ_NO} AS seq_no,-->
-<!--                         #{NODE_ID} AS node_id,-->
-<!--                         #{REM_DIST} AS rem_dist,-->
-<!--                         #{STATE} AS state,-->
-<!--                         #{PLAN_CLASS} AS plan_class,-->
-<!--                         #{A_RING_PHASE} AS a_ring_phase,-->
-<!--                         #{B_RING_PHASE} AS b_ring_phase,-->
-<!--                         #{HOLD_PHASE} AS hold_phase-->
-<!--                  FROM dual A) M-->
-<!--            ON (L.service_id = M.service_id AND A.node_id = B.node_id)-->
-<!--            WHEN MATCHED THEN-->
-<!--                UPDATE SET-->
-<!--                    L.rem_dist      = M.rem_dist,-->
-<!--                    L.state         = M.state,-->
-<!--                    L.plan_class    = M.plan_class,-->
-<!--                    L.a_ring_phase  = M.a_ring_phase,-->
-<!--                    L.b_ring_phase  = M.b_ring_phase,-->
-<!--                    L.hold_phase    = M.hold_phase-->
-<!--            WHEN NOT MATCHED THEN-->
-<!--                INSERT (service_id,-->
-<!--                        seq_no,-->
-<!--                        node_id,-->
-<!--                        rem_dist,-->
-<!--                        state,-->
-<!--                        plan_class,-->
-<!--                        a_ring_phase,-->
-<!--                        b_ring_phase,-->
-<!--                        hold_phase)-->
-<!--                    VALUES (M.service_id,-->
-<!--                            M.seq_no,-->
-<!--                            M.node_id,-->
-<!--                            M.rem_dist,-->
-<!--                            M.state,-->
-<!--                            M.plan_class,-->
-<!--                            M.a_ring_phase,-->
-<!--                            M.b_ring_phase,-->
-<!--                            M.hold_phase)-->
-
-<!--        ]]>-->
-<!--    </update>-->
-
 </mapper>

File diff suppressed because it is too large
+ 11 - 10
evps-comm-server/src/test/java/com/evps/comm/server/EvpsCommServerApplicationTest.java


+ 36 - 0
evps-common/src/main/java/com/evps/common/kafka/dto/EvpsNodeInfo.java

@@ -0,0 +1,36 @@
+package com.evps.common.kafka.dto;
+
+import lombok.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class EvpsNodeInfo {
+    /**
+     * 교차로 순서(1,...,N)
+     */
+    private Integer seqNo;
+    /**
+     * 교차로 ID
+     */
+    private Long nodeId;
+    /**
+     * 교차로명
+     */
+    private String nodeNm;
+    /**
+     * 위치 위도
+     */
+    private double lat;
+    /**
+     * 위치 경로
+     */
+    private double lng;
+
+    @Builder.Default
+    private List<EvpsPhaseInfo> phaseList = new ArrayList<>();
+}

+ 66 - 0
evps-common/src/main/java/com/evps/common/kafka/dto/EvpsPhaseInfo.java

@@ -0,0 +1,66 @@
+package com.evps.common.kafka.dto;
+
+import lombok.*;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class EvpsPhaseInfo {
+    /**
+     * 교차로 순서(1,...,N)
+     */
+    private Integer seqNo;
+    /**
+     * 교차로 ID
+     */
+    private Long nodeId;
+    /**
+     * 링번호(1:A링, 2:B링)
+     */
+    private Integer ring;
+    /**
+     * 현시번호(1~8)
+     */
+    private Integer phaseNo;
+    /**
+     * 맵 번호(0:일반제, 1~5:시차제, 6:전용맵)
+     */
+    private Integer planClass;
+    /**
+     * 이동류번호(1-16, 17, 18)
+     */
+    private Integer flowNo;
+    /**
+     * 시작점 위치 위도
+     */
+    private Double headLat;
+    /**
+     * 시작점 위치 경로
+     */
+    private Double headLng;
+    /**
+     * 중심점 위치 위도
+     */
+    private Double midLat;
+    /**
+     * 중심점 위치 경로
+     */
+    private Double midLng;
+    /**
+     * 끝점 위치 위도
+     */
+    private Double endLat;
+    /**
+     * 끝점 위치 경로
+     */
+    private Double endLng;
+    /**
+     * 시작점 각도
+     */
+    private Integer headAngle;
+    /**
+     * 종점 각도
+     */
+    private Integer endAngle;
+}

+ 3 - 4
evps-common/src/main/java/com/evps/common/kafka/dto/KafkaEvpsServiceRouteInfo.java → evps-common/src/main/java/com/evps/common/kafka/dto/EvpsRouteInfo.java

@@ -1,16 +1,15 @@
 package com.evps.common.kafka.dto;
 
 import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
-/**
-* 긴급차량 서비스 경로 정보
-*/
 @Data
+@Builder
 @NoArgsConstructor
 @AllArgsConstructor
-public class KafkaEvpsServiceRouteInfo {
+public class EvpsRouteInfo {
 
     /**
      * 경로 순서(1,...,N)

+ 45 - 0
evps-common/src/main/java/com/evps/common/kafka/dto/EvpsSignalInfo.java

@@ -0,0 +1,45 @@
+package com.evps.common.kafka.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class EvpsSignalInfo {
+    /**
+     * 교차로 순서(1,...,N)
+     */
+    private Integer seqNo;
+    /**
+     * 교차로 ID
+     */
+    private Long nodeId;
+    /**
+     * 목적지 남은거리(m)
+     */
+    private Integer remDist;
+    /**
+     * 교차로운영상태(0:통신이상, 1:정상, 2:점멸, 3:소등, 4:수동진행, 5:현시유지)
+     */
+    private Integer state;
+    /**
+     * 현재 운영중인 맵 번호(0:일반제, 1~5:시차제, 6:전용맵)
+     */
+    private Integer planClass;
+    /**
+     * A링 현시번호(1-8)
+     */
+    private Integer aRingPhase;
+    /**
+     * B링 현시번호(1-8)
+     */
+    private Integer bRingPhase;
+    /**
+     * 유지현시번호(1-8)
+     */
+    private Integer holdPhase;
+}

+ 0 - 96
evps-common/src/main/java/com/evps/common/kafka/dto/KafkaEvpsNodeDto.java

@@ -21,100 +21,4 @@ public class KafkaEvpsNodeDto {
     @Builder.Default
     private List<EvpsNodeInfo> nodeList = new ArrayList<>();
 
-    @ToString
-    @Getter
-    @Builder
-    @NoArgsConstructor
-    @AllArgsConstructor
-    public static class EvpsNodeInfo {
-        /**
-         * 교차로 순서(1,...,N)
-         */
-        private Integer seqNo;
-        /**
-         * 교차로 ID
-         */
-        private Long nodeId;
-        /**
-         * 교차로명
-         */
-        private String nodeNm;
-        /**
-         * 위치 위도
-         */
-        private double lat;
-        /**
-         * 위치 경로
-         */
-        private double lng;
-
-        @Builder.Default
-        private List<EvpsPhaseInfo> phaseList = new ArrayList<>();
-    }
-
-    @ToString
-    @Getter
-    @Builder
-    @NoArgsConstructor
-    @AllArgsConstructor
-    public static class EvpsPhaseInfo {
-
-        /**
-         * 교차로 순서(1,...,N)
-         */
-        private Integer seqNo;
-        /**
-         * 교차로 ID
-         */
-        private Long nodeId;
-        /**
-         * 링번호(1:A링, 2:B링)
-         */
-        private Integer ring;
-        /**
-         * 현시번호(1~8)
-         */
-        private Integer phaseNo;
-        /**
-         * 맵 번호(0:일반제, 1~5:시차제, 6:전용맵)
-         */
-        private Integer planClass;
-        /**
-         * 이동류번호(1-16, 17, 18)
-         */
-        private Integer flowNo;
-        /**
-         * 시작점 위치 위도
-         */
-        private Double headLat;
-        /**
-         * 시작점 위치 경로
-         */
-        private Double headLng;
-        /**
-         * 중심점 위치 위도
-         */
-        private Double midLat;
-        /**
-         * 중심점 위치 경로
-         */
-        private Double midLng;
-        /**
-         * 끝점 위치 위도
-         */
-        private Double endLat;
-        /**
-         * 끝점 위치 경로
-         */
-        private Double endLng;
-        /**
-         * 시작점 각도
-         */
-        private Integer headAngle;
-        /**
-         * 종점 각도
-         */
-        private Integer endAngle;
-
-    }
 }

+ 0 - 64
evps-common/src/main/java/com/evps/common/kafka/dto/KafkaEvpsPhaseDto.java

@@ -22,68 +22,4 @@ public class KafkaEvpsPhaseDto {
     @Builder.Default
     private List<EvpsPhaseInfo> phaseList = new ArrayList<>();
 
-    @Getter
-    @Builder
-    @NoArgsConstructor
-    @AllArgsConstructor
-    public static class EvpsPhaseInfo {
-
-        /**
-         * 교차로 순서(1,...,N)
-         */
-        private Integer seqNo;
-        /**
-         * 교차로 ID
-         */
-        private Long nodeId;
-        /**
-         * 링번호(1:A링, 2:B링)
-         */
-        private Integer ring;
-        /**
-         * 현시번호(1~8)
-         */
-        private Integer phaseNo;
-        /**
-         * 맵 번호(0:일반제, 1~5:시차제, 6:전용맵)
-         */
-        private Integer planClass;
-        /**
-         * 이동류번호(1-16, 17, 18)
-         */
-        private Integer flowNo;
-        /**
-         * 시작점 위치 위도
-         */
-        private Double headLat;
-        /**
-         * 시작점 위치 경로
-         */
-        private Double headLng;
-        /**
-         * 중심점 위치 위도
-         */
-        private Double midLat;
-        /**
-         * 중심점 위치 경로
-         */
-        private Double midLng;
-        /**
-         * 끝점 위치 위도
-         */
-        private Double endLat;
-        /**
-         * 끝점 위치 경로
-         */
-        private Double endLng;
-        /**
-         * 시작점 각도
-         */
-        private Integer headAngle;
-        /**
-         * 종점 각도
-         */
-        private Integer endAngle;
-
-    }
 }

+ 4 - 18
evps-common/src/main/java/com/evps/common/kafka/dto/KafkaEvpsRouteDto.java

@@ -1,8 +1,8 @@
 package com.evps.common.kafka.dto;
 
 import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
-import lombok.Getter;
 import lombok.NoArgsConstructor;
 
 import java.util.ArrayList;
@@ -12,6 +12,7 @@ import java.util.List;
 * 긴급차량 서비스 경로 정보
 */
 @Data
+@Builder
 @NoArgsConstructor
 @AllArgsConstructor
 public class KafkaEvpsRouteDto {
@@ -20,23 +21,8 @@ public class KafkaEvpsRouteDto {
     * 긴급차량 서비스 ID
     */
     private String serviceId;
+
+    @Builder.Default
     private List<EvpsRouteInfo> routeList = new ArrayList<>();
 
-    @Getter
-    @NoArgsConstructor
-    @AllArgsConstructor
-    public static class EvpsRouteInfo {
-        /**
-         * 경로 순서(1,...,N)
-         */
-        private Integer seqNo;
-        /**
-         * 위치 위도
-         */
-        private double lat;
-        /**
-         * 위치 경로
-         */
-        private double lng;
-    }
 }

+ 3 - 20
evps-common/src/main/java/com/evps/common/kafka/dto/KafkaEvpsServiceDto.java

@@ -83,26 +83,9 @@ public class KafkaEvpsServiceDto {
     private Integer statusCd;
 
     @Builder.Default
-    private List<KafkaEvpsRouteInfo> routeList = new ArrayList<>();
+    private List<EvpsRouteInfo> routeList = new ArrayList<>();
 
-    @Data
-    @Builder
-    @NoArgsConstructor
-    @AllArgsConstructor
-    public static class KafkaEvpsRouteInfo {
-
-        /**
-         * 경로 순서(1,...,N)
-         */
-        private Integer seqNo;
-        /**
-         * 위치 위도
-         */
-        private double lat;
-        /**
-         * 위치 경로
-         */
-        private double lng;
-    }
+    @Builder.Default
+    private List<EvpsNodeInfo> nodeList = new ArrayList<>();
 
 }

+ 0 - 38
evps-common/src/main/java/com/evps/common/kafka/dto/KafkaEvpsSignalDto.java

@@ -26,42 +26,4 @@ public class KafkaEvpsSignalDto {
     @Builder.Default
     private List<EvpsSignalInfo> signalList = new ArrayList<>();
 
-    @Getter
-    @Builder
-    @NoArgsConstructor
-    @AllArgsConstructor
-    public static class EvpsSignalInfo {
-        /**
-         * 교차로 순서(1,...,N)
-         */
-        private Integer seqNo;
-        /**
-         * 교차로 ID
-         */
-        private Long nodeId;
-        /**
-         * 목적지 남은거리(m)
-         */
-        private Integer remDist;
-        /**
-         * 교차로운영상태(0:통신이상, 1:정상, 2:점멸, 3:소등, 4:수동진행, 5:현시유지)
-         */
-        private Integer state;
-        /**
-         * 현재 운영중인 맵 번호(0:일반제, 1~5:시차제, 6:전용맵)
-         */
-        private Integer planClass;
-        /**
-         * A링 현시번호(1-8)
-         */
-        private Integer aRingPhase;
-        /**
-         * B링 현시번호(1-8)
-         */
-        private Integer bRingPhase;
-        /**
-         * 유지현시번호(1-8)
-         */
-        private Integer holdPhase;
-    }
 }

+ 4 - 0
evps-common/src/main/java/com/evps/common/protocol/EvpsCommPacket.java

@@ -167,4 +167,8 @@ public class EvpsCommPacket implements Serializable {
         decode();
     }
 
+    public String getOpCodeDesc() {
+        return String.format("%02X", this.opCode);
+    }
+
 }

+ 1 - 1
evps-common/src/main/java/com/evps/common/utils/EvpsUtils.java

@@ -17,7 +17,7 @@ public class EvpsUtils {
 
 	public static String getClctDt() {
 		Date today = new Date();
-		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
 		return sdf.format(today);
 	}
 

Some files were not shown because too many files changed in this diff