shjung 2 anni fa
parent
commit
f5b4927537
33 ha cambiato i file con 589 aggiunte e 165 eliminazioni
  1. 5 0
      conf/debug.properties
  2. 0 1
      conf/vms-comm-server.pid
  3. 7 3
      src/main/java/com/its/vms/VmsCommServerApplication.java
  4. 1 1
      src/main/java/com/its/vms/api/service/VmsControlService.java
  5. 141 0
      src/main/java/com/its/vms/config/DebugConfig.java
  6. 20 0
      src/main/java/com/its/vms/config/ServerConfig.java
  7. 13 0
      src/main/java/com/its/vms/dao/mapper/VmsDisplayOnOffMapper.java
  8. 0 1
      src/main/java/com/its/vms/dao/mapper/VmsManageMapper.java
  9. 25 0
      src/main/java/com/its/vms/domain/VmsDebug.java
  10. 11 1
      src/main/java/com/its/vms/domain/VmsModule.java
  11. 6 6
      src/main/java/com/its/vms/domain/enums/eVmsReqBoardPower.java
  12. 27 9
      src/main/java/com/its/vms/dto/TbVmsCtlrDto.java
  13. 7 1
      src/main/java/com/its/vms/scheduler/SchedulerTask.java
  14. 7 9
      src/main/java/com/its/vms/service/AppRepositoryService.java
  15. 2 2
      src/main/java/com/its/vms/service/VmsCtlrService.java
  16. 87 0
      src/main/java/com/its/vms/service/VmsDisplayOnOffService.java
  17. 1 1
      src/main/java/com/its/vms/service/VmsIfscService.java
  18. 16 65
      src/main/java/com/its/vms/service/VmsManageService.java
  19. 9 5
      src/main/java/com/its/vms/service/VmsSymbService.java
  20. 57 13
      src/main/java/com/its/vms/ui/MainUI.form
  21. 60 13
      src/main/java/com/its/vms/ui/MainUI.java
  22. 7 3
      src/main/java/com/its/vms/ui/SubUI.form
  23. 19 6
      src/main/java/com/its/vms/ui/SubUI.java
  24. 3 3
      src/main/java/com/its/vms/webapp/controller/WebAppController.java
  25. 1 1
      src/main/java/com/its/vms/xnettcp/center/handler/CenterTcpServerInboundHandler.java
  26. 10 6
      src/main/java/com/its/vms/xnettcp/vms/VmsTcpCommServerInitializer.java
  27. 3 1
      src/main/java/com/its/vms/xnettcp/vms/process/response/impl/VmsResDisplayModuleStatus.java
  28. 8 1
      src/main/java/com/its/vms/xnettcp/vms/process/response/impl/VmsResParameter.java
  29. 3 1
      src/main/java/com/its/vms/xnettcp/vms/process/response/impl/VmsResPowerModuleStatus.java
  30. 3 1
      src/main/java/com/its/vms/xnettcp/vms/process/response/impl/VmsResStatus.java
  31. 15 2
      src/main/java/com/its/vms/xnettcp/vms/protocol/impl/VmsReqStatusControl.java
  32. 15 0
      src/main/resources/mybatis/mapper/VmsDisplayOnOffMapper.xml
  33. 0 9
      src/main/resources/mybatis/mapper/VmsManageMapper.xml

+ 5 - 0
conf/debug.properties

@@ -0,0 +1,5 @@
+#system debug config setting
+#Fri Aug 11 12:57:57 KST 2023
+packet-info=x
+packet-dump=x
+system-debug=true

+ 0 - 1
conf/vms-comm-server.pid

@@ -1 +0,0 @@
-109464

+ 7 - 3
src/main/java/com/its/vms/VmsCommServerApplication.java

@@ -4,6 +4,7 @@ import com.its.app.AppUtils;
 import com.its.app.utils.OS;
 import com.its.app.utils.SysUtils;
 import com.its.vms.config.ApplicationConfig;
+import com.its.vms.config.DebugConfig;
 import com.its.vms.entity.TbUnitSyst;
 import com.its.vms.process.DbmsDataProcess;
 import com.its.vms.service.*;
@@ -50,7 +51,7 @@ public class VmsCommServerApplication implements CommandLineRunner, ApplicationL
     private static String applicationName = "vms-comm-server";
 
     public static void main(String[] args) {
-        System.setProperty("file.encoding","UTF-8");
+        System.setProperty("file.encoding", "UTF-8");
         try {
             Field charset = Charset.class.getDeclaredField("defaultCharset");
             charset.setAccessible(true);
@@ -154,6 +155,9 @@ public class VmsCommServerApplication implements CommandLineRunner, ApplicationL
         ctlrService.loadDb();
         ctlrService.updateCtlrStts(true, null);
 
+        DebugConfig debugConfig = (DebugConfig)AppUtils.getBean(DebugConfig.class);
+        debugConfig.loadDebugInfo();
+
         VmsFontService vmsFontService = (VmsFontService)AppUtils.getBean(VmsFontService.class);
         vmsFontService.loadDb();
 
@@ -186,8 +190,8 @@ public class VmsCommServerApplication implements CommandLineRunner, ApplicationL
         VmsTcpCommServerService vmsTcpCommServerService = (VmsTcpCommServerService)AppUtils.getBean(VmsTcpCommServerService.class);
         vmsTcpCommServerService.run();
 
-        CenterTcpServerService centerService = (CenterTcpServerService)AppUtils.getBean(CenterTcpServerService.class);
-        centerService.run();
+//        CenterTcpServerService centerService = (CenterTcpServerService)AppUtils.getBean(CenterTcpServerService.class);
+//        centerService.run();
 
         // schedule enable
         applicationConfig.setStartSchedule(true);

+ 1 - 1
src/main/java/com/its/vms/api/service/VmsControlService.java

@@ -44,7 +44,7 @@ public class VmsControlService {
      * @return
      */
     public TbVmsCtlrDto findVms(Long vmsCtlrNmbr) {
-        return this.repoService.getCtrlMap(vmsCtlrNmbr);
+        return this.repoService.getCtlrMap(vmsCtlrNmbr);
     }
 
     /**

+ 141 - 0
src/main/java/com/its/vms/config/DebugConfig.java

@@ -0,0 +1,141 @@
+package com.its.vms.config;
+
+import com.its.app.AppUtils;
+import com.its.app.utils.StringUtils;
+import com.its.vms.dto.TbVmsCtlrDto;
+import com.its.vms.service.AppRepositoryService;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import java.io.*;
+import java.util.List;
+import java.util.Properties;
+
+@Slf4j
+@Getter
+@Setter
+@ToString
+@Component
+public class DebugConfig {
+
+    private boolean isDebug = false;
+
+    @PostConstruct
+    private void init() {
+    }
+
+    public void loadDebugInfo() {
+        try
+        {
+            AppRepositoryService repoService = (AppRepositoryService) AppUtils.getBean(AppRepositoryService.class);
+            if (repoService == null) {
+                return;
+            }
+
+            repoService.getCtlrMap().forEach((ctlrNmbr, vmsObj) -> {
+                vmsObj.getDebug().init();
+            });
+
+            String workingDir = System.getProperty("user.dir");
+            FileInputStream in = null;
+            try {
+                in = new FileInputStream(workingDir + "/conf/debug.properties");
+            }
+            catch(Exception e) {
+                log.error("{}.loadDebugInfo: Exception: {}", this.getClass().getSimpleName(), e.toString());
+                return;
+            }
+
+            Properties props = new Properties();
+            props.load(in);
+            in.close();
+
+            String isDebug  = props.getProperty("system-debug",  "false").trim();
+            this.isDebug = "true".equalsIgnoreCase(isDebug);
+
+            String packetDump  = props.getProperty("packet-dump",  "x").trim();
+            if (!packetDump.equals("x")) {
+                List<String> packetDumps = StringUtils.split(packetDump, ",");
+                packetDumps.forEach(id -> {
+                    Long vmsCtlrNmbr = Long.parseLong(id);
+                    TbVmsCtlrDto vmsObj = repoService.getCtlrMap(vmsCtlrNmbr);
+                    if (vmsObj != null) {
+                        vmsObj.getDebug().setDump(true);
+                    }
+                });
+            }
+            String packetInfo  = props.getProperty("packet-info",  "x").trim();
+            if (!packetInfo.equals("x")) {
+                List<String> packetInfos = StringUtils.split(packetInfo, ",");
+                packetInfos.forEach(id -> {
+                    Long vmsCtlrNmbr = Long.parseLong(id);
+                    TbVmsCtlrDto vmsObj = repoService.getCtlrMap(vmsCtlrNmbr);
+                    if (vmsObj != null) {
+                        vmsObj.getDebug().setDebug(true);
+                    }
+                });
+            }
+        }
+        catch(Exception e) {
+            log.error("{}.loadDebugInfo: Exception: {}", this.getClass().getSimpleName(), e.toString());
+        }
+    }
+
+    public void saveDebugInfo() {
+        try
+        {
+            final String[] packetDump = {""};
+            final String[] packetInfo = {""};
+
+            AppRepositoryService repoService = (AppRepositoryService) AppUtils.getBean(AppRepositoryService.class);
+            repoService.getCtlrMap().forEach((ctlrNmbr, vmsObj) -> {
+                if (vmsObj.getDebug().isDump()) {
+                    if (!packetDump[0].equals("")) {
+                        packetDump[0] += ("," + vmsObj.getVmsCtlrNmbr());
+                    }
+                    else {
+                        packetDump[0] = String.valueOf(vmsObj.getVmsCtlrNmbr());
+                    }
+                }
+                if (vmsObj.getDebug().isDebug()) {
+                    if (!packetInfo[0].equals("")) {
+                        packetInfo[0] += ("," + vmsObj.getVmsCtlrNmbr());
+                    }
+                    else {
+                        packetInfo[0] = String.valueOf(vmsObj.getVmsCtlrNmbr());
+                    }
+                }
+            });
+
+            if (packetDump[0].equals("")) {
+                packetDump[0] = "x";
+            }
+            if (packetInfo[0].equals("")) {
+                packetInfo[0] = "x";
+            }
+
+            Properties props = new Properties();
+
+            props.setProperty("packet-dump", packetDump[0]);
+            props.setProperty("packet-info", packetInfo[0]);
+            props.setProperty("system-debug", this.isDebug ? "true" : "false");
+
+            String workingDir = System.getProperty("user.dir");
+            File file = new File(workingDir + "/conf/debug.properties");
+            try {
+                FileWriter writer = new FileWriter(file);
+                props.store(writer,"system debug setting configuration...");
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        catch(Exception e) {
+            log.error("{}.saveDebugInfo: Exception: {}", this.getClass().getSimpleName(), e.toString());
+        }
+    }
+
+}

+ 20 - 0
src/main/java/com/its/vms/config/ServerConfig.java

@@ -0,0 +1,20 @@
+package com.its.vms.config;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+@Slf4j
+@Getter
+@Setter
+@ToString
+@Configuration
+@ConfigurationProperties(prefix = "server")
+public class ServerConfig {
+
+    protected int port;
+
+}

+ 13 - 0
src/main/java/com/its/vms/dao/mapper/VmsDisplayOnOffMapper.java

@@ -0,0 +1,13 @@
+package com.its.vms.dao.mapper;
+
+import com.its.vms.entity.TbVmsOnOffTime;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface VmsDisplayOnOffMapper {
+
+    List<TbVmsOnOffTime> selectVmsOnOffTime();
+
+}

+ 0 - 1
src/main/java/com/its/vms/dao/mapper/VmsManageMapper.java

@@ -12,7 +12,6 @@ public interface VmsManageMapper {
 
     int initVmsDsplPrst(HashMap<String, Object> obj);
 
-    List<TbVmsOnOffTime> selectVmsOnOffTime();
     List<TbVmsIncd> selectVmsIncd();
     List<TbVmsSchedule> selectVmsDsplSchedule();
     List<TbVmsOperMode> selectVmsOperMode();

+ 25 - 0
src/main/java/com/its/vms/domain/VmsDebug.java

@@ -0,0 +1,25 @@
+package com.its.vms.domain;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *  DTO Class
+ */
+@Data
+public class VmsDebug implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private boolean isDump;
+    private boolean isDebug;
+
+    public VmsDebug() {
+        init();
+    }
+
+    public void init() {
+        this.isDump = false;
+        this.isDebug = false;
+    }
+}

+ 11 - 1
src/main/java/com/its/vms/domain/VmsModule.java

@@ -1,5 +1,6 @@
 package com.its.vms.domain;
 
+import com.its.vms.domain.enums.eVmsReqBoardPower;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -12,9 +13,18 @@ public class VmsModule implements Serializable {
     private static final long serialVersionUID = 1L;
 
     private boolean isOnOff;
-    private byte    onOff;
+    private int reqOnOff;
+    private int curOnOff;
     private String  powerOnTime;    /* ON TIME */
     private String  powerOffTime;   /* OFF TIME */
     private int     retry;
 
+    public VmsModule() {
+        this.isOnOff = true;
+        this.reqOnOff = eVmsReqBoardPower.vms_req_board_power_on.getValue();   // 0x00 : 꺼짐, 0x01 : 켜짐,
+        this.curOnOff = eVmsReqBoardPower.vms_req_board_power_off.getValue();  // 0x00 : 꺼짐, 0x01 : 켜짐,
+        this.powerOnTime = "";
+        this.powerOffTime = "";
+        this.retry = 1;
+    }
 }

+ 6 - 6
src/main/java/com/its/vms/domain/enums/eVmsReqBoardPower.java

@@ -5,17 +5,17 @@ import java.util.Map;
 
 public enum eVmsReqBoardPower {
 
-    vms_req_board_power_off ((byte)0, "0.off"),
-    vms_req_board_power_on  ((byte)1, "1.on");
+    vms_req_board_power_off (0x00, "0.off"),
+    vms_req_board_power_on  (0x01, "1.on");
 
-    private final byte value;
+    private final int value;
     private final String string;
 
     private static final Map<Integer, eVmsReqBoardPower> map;
     static {
         map = new HashMap<>();
         for (eVmsReqBoardPower e : values()) {
-            map.put((int) e.value, e);
+            map.put(e.value, e);
         }
     }
 
@@ -27,12 +27,12 @@ public enum eVmsReqBoardPower {
         return map.get(intValue);
     }
 
-    eVmsReqBoardPower(byte value, String string) {
+    eVmsReqBoardPower(int value, String string) {
         this.value  = value;
         this.string = string;
     }
 
-    public byte getValue() {
+    public int getValue() {
         return this.value;
     }
 

+ 27 - 9
src/main/java/com/its/vms/dto/TbVmsCtlrDto.java

@@ -3,6 +3,7 @@ package com.its.vms.dto;
 import com.its.app.AppUtils;
 import com.its.app.utils.SysUtils;
 import com.its.vms.config.ApplicationConfig;
+import com.its.vms.config.DebugConfig;
 import com.its.vms.domain.*;
 import com.its.vms.domain.enums.eVmsFormType;
 import com.its.vms.domain.task.VmsCommandTimeoutTask;
@@ -157,9 +158,13 @@ public class TbVmsCtlrDto implements Serializable {
     private String disConnectTm;
     private long lastRecvTime;
 
+    private VmsDebug debug;
+
     private TcpServerSendDataProcess dataProcess;   // 제어기로 데이터를 전송할 전송 전송 큐를 처리할 스레드
 
     public void init() {
+        this.debug = new VmsDebug();
+
         this.stts = new TbVmsCtlrStts(this.vmsCtlrNmbr);
         this.seq  = new VmsFrameSequence();
 
@@ -462,6 +467,7 @@ public class TbVmsCtlrDto implements Serializable {
      */
     public boolean downloadForm() {
         VmsFormService formService = (VmsFormService) AppUtils.getBean(VmsFormService.class);
+        DebugConfig debug = (DebugConfig) AppUtils.getBean(DebugConfig.class);
         this.txtOpCode = (byte)0x00;
         this.downloadData.init();
 
@@ -529,9 +535,11 @@ public class TbVmsCtlrDto implements Serializable {
             forms++;
         }
 
-        for (int ii = 0; ii < forms; ii++) {
-            log.info("downloadForm: VMS {}, Form schedule({}), VMS_FORM_ID: {}, FormIdx: {}, FormId: {}, BitmapId: {}, IsDownload: {}",
-                    this.vmsCtlrNmbr, ii, units[ii].getVmsFormId(), units[ii].getFormIdx(), units[ii].getFormNo(), units[ii].getBitmapId(), units[ii].isDownload());
+        if (debug.isDebug()) {
+            for (int ii = 0; ii < forms; ii++) {
+                log.info("downloadForm: VMS {}, Form schedule({}), VMS_FORM_ID: {}, FormIdx: {}, FormId: {}, BitmapId: {}, IsDownload: {}",
+                        this.vmsCtlrNmbr, ii, units[ii].getVmsFormId(), units[ii].getFormIdx(), units[ii].getFormNo(), units[ii].getBitmapId(), units[ii].isDownload());
+            }
         }
 
         this.downloadData.setMaxSchedule(forms);
@@ -600,7 +608,7 @@ public class TbVmsCtlrDto implements Serializable {
      */
     public boolean downloadAutoFixForm() {
         // Download Form  (패킷하나에 하나의 폼 정보를 다운로드한다.)
-        ApplicationConfig config = (ApplicationConfig)AppUtils.getBean(ApplicationConfig.class);
+        DebugConfig debug = (DebugConfig) AppUtils.getBean(DebugConfig.class);
         int formCnt = this.downloadData.getMaxSchedule();
         if (formCnt <= 0) {
             log.info("downloadAutoFixForm: VMS {}, Download Schedule Form Count Zero. {} EA.", this.vmsCtlrNmbr, formCnt);
@@ -639,8 +647,10 @@ public class TbVmsCtlrDto implements Serializable {
 
         this.downloadData.setDownloadCnt(downloadCnt+1);
 
-        log.info("downloadAutoFixForm: VMS {}, Schedule Form {} EA, Download Count {} EA, VmsFormId {}, FormId {}, BitmapId {}.",
-                this.vmsCtlrNmbr, formCnt, downloadCnt+1, pForm.getVmsFormId(), formId, bitmapId);
+        if (debug.isDebug()) {
+            log.info("downloadAutoFixForm: VMS {}, Schedule Form {} EA, Download Count {} EA, VmsFormId {}, FormId {}, BitmapId {}.",
+                    this.vmsCtlrNmbr, formCnt, downloadCnt + 1, pForm.getVmsFormId(), formId, bitmapId);
+        }
 
 //        VmsFormDataDto formData = new VmsFormDataDto(formId, downloadFormCnt);
 //        int ii = downloadCnt;
@@ -691,6 +701,7 @@ public class TbVmsCtlrDto implements Serializable {
      * @return
      */
     public boolean downloadFile() {
+        DebugConfig debug = (DebugConfig) AppUtils.getBean(DebugConfig.class);
         int formCnt = this.downloadData.getMaxSchedule();
         if (formCnt <= 0) {
             log.info("downloadFile: VMS {}, Download Schedule Form Count Zero. {} EA.", this.vmsCtlrNmbr, formCnt);
@@ -729,8 +740,10 @@ public class TbVmsCtlrDto implements Serializable {
                 continue;
             }
 
-            log.info("downloadFile: VMS {}, Idx {}, VmsFormId {}, FormId {}, BitmapId {}, formIdx {}, DownloadFormID: {}",
-                    this.vmsCtlrNmbr, ii, pForm.getVmsFormId(), formId, bitmapId, formIdx, this.downloadFormId);
+            if (debug.isDebug()) {
+                log.info("downloadFile: VMS {}, Idx {}, VmsFormId {}, FormId {}, BitmapId {}, formIdx {}, DownloadFormID: {}",
+                        this.vmsCtlrNmbr, ii, pForm.getVmsFormId(), formId, bitmapId, formIdx, this.downloadFormId);
+            }
 
             String fileName = String.format("BID%04d.BMP", bitmapId);
             eVmsFileSaveLocation saveLoc = eVmsFileSaveLocation.LOC_DOWNLOAD_PROG_IMAGE;
@@ -749,6 +762,7 @@ public class TbVmsCtlrDto implements Serializable {
      */
     public boolean downloadFormSchedule() {
         // 도로공사 표준에 최대 10개의 스케쥴을 사용하도록 되어 있음.
+        DebugConfig debug = (DebugConfig) AppUtils.getBean(DebugConfig.class);
         int maxSchedule = VmsConstants.VMS_MIN_DOWNLOAD_FORMS;
         int formCnt = this.downloadData.getMaxSchedule();
         if (formCnt <= 0) {
@@ -777,7 +791,9 @@ public class TbVmsCtlrDto implements Serializable {
             for (int ii = 0; ii < formCnt && ii < maxSchedule; ii++) {
                 formId[ii] = (short) this.downloadData.getUnits()[ii].getFormNo();
                 dispSec[ii] = (byte)(this.downloadData.getUnits()[ii].getDisplaySec() & 0xFF);
-                log.info("downloadFormSchedule: VMS {}, Schedule {} EA, Idx {}, FormId {}, DisplayTm {}.", this.vmsCtlrNmbr, formCnt, ii+1, formId[ii], dispSec[ii]);
+                if (debug.isDebug()) {
+                    log.info("downloadFormSchedule: VMS {}, Schedule {} EA, Idx {}, FormId {}, DisplayTm {}.", this.vmsCtlrNmbr, formCnt, ii + 1, formId[ii], dispSec[ii]);
+                }
             }
         }
 
@@ -816,6 +832,8 @@ public class TbVmsCtlrDto implements Serializable {
             String fileName = String.format("BID%04d.BMP", this.dnldSymbLibNmbr);
             eVmsFileSaveLocation saveLoc = eVmsFileSaveLocation.LOC_DOWNLOAD_PROG_IMAGE;
 
+            log.info("downloadSymbLib: VMS {}, fileName {} .", this.vmsCtlrNmbr, fileName);
+
             VmsReqDataDownload dataDownload = new VmsReqDataDownload(this, saveLoc, fileName, dnldSymb.getImageData());
             sendData(dataDownload, 1);
             return true;

+ 7 - 1
src/main/java/com/its/vms/scheduler/SchedulerTask.java

@@ -1,7 +1,9 @@
 package com.its.vms.scheduler;
 
+import com.its.app.AppUtils;
 import com.its.app.utils.Elapsed;
 import com.its.vms.config.ApplicationConfig;
+import com.its.vms.config.DebugConfig;
 import com.its.vms.service.*;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -21,12 +23,15 @@ public class SchedulerTask {
     private final UnitSystService unitSystService;
     private final VmsCtlrService vmsCtlrService;
     private final VmsManageService vmsManageService;
+    private final VmsDisplayOnOffService displayOnOffService;
     private final VmsSymbService symbService;
     private final AppRepositoryService repoService;
 
     @PreDestroy
     public void onShutDown() {
          this.unitSystService.updateUnitSystStts(false);
+        DebugConfig debug = (DebugConfig) AppUtils.getBean(DebugConfig.class);
+        debug.saveDebugInfo();
     }
 
     @Scheduled(cron = "5 * * * * *")  // 1분주기 작업 실행
@@ -54,6 +59,7 @@ public class SchedulerTask {
         log.info("scheduleVmsStatusRequest: ..end. {} ms. {}", elapsed.milliSeconds(), Thread.currentThread().getName());
     }
 
+    //@Scheduled(cron = "${application.atmp.crontab:40 0/30 * * * *}")
     @Scheduled(cron = "15 * * * * *")  // 1분주기 작업 실행
     public void scheduleVmsOnOffControl() {
         if (!this.config.isStartSchedule()) {
@@ -61,7 +67,7 @@ public class SchedulerTask {
         }
         Elapsed elapsed = new Elapsed();
         log.info("scheduleVmsOnOffControl: start. {}", Thread.currentThread().getName());
-        this.vmsManageService.loadVmsOnOffTime();
+        this.displayOnOffService.loadVmsOnOffTime();
         log.info("scheduleVmsOnOffControl: ..end. {} ms. {}", elapsed.milliSeconds(), Thread.currentThread().getName());
     }
 

+ 7 - 9
src/main/java/com/its/vms/service/AppRepositoryService.java

@@ -54,25 +54,23 @@ public class AppRepositoryService {
         return this.channelMap;
     }
 
-    public TbVmsCtlrDto putCtrlMap(TbVmsCtlrDto obj) {
+    public TbVmsCtlrDto putCtlrMap(TbVmsCtlrDto obj) {
         return this.ctlrMap.put(obj.getVmsCtlrNmbr(), obj);
     }
+    public TbVmsCtlrDto getCtlrMap(Long vmsCtlrNmbr) {
+        return this.ctlrMap.get(vmsCtlrNmbr);
+    }
 
     public TbVmsCtlrDto putIpAddrMap(TbVmsCtlrDto obj) {
         return this.ipAddrMap.put(obj.getCtlrIp(), obj);
     }
-
-    public TbVmsCtlrDto putChannelMap(TbVmsCtlrDto obj) {
-        return this.channelMap.put(obj.getChannel(), obj);
-    }
-    public TbVmsCtlrDto getCtrlMap(Long vmsCtlrNmbr) {
-        return this.ctlrMap.get(vmsCtlrNmbr);
-    }
-
     public TbVmsCtlrDto getIpAddrMap(String ipAddr) {
         return this.ipAddrMap.get(ipAddr);
     }
 
+    public TbVmsCtlrDto putChannelMap(TbVmsCtlrDto obj) {
+        return this.channelMap.put(obj.getChannel(), obj);
+    }
     public TbVmsCtlrDto getChannelMap(Channel channel) {
         return this.channelMap.get(channel);
     }

+ 2 - 2
src/main/java/com/its/vms/service/VmsCtlrService.java

@@ -61,7 +61,7 @@ public class VmsCtlrService {
 
                 vmsObj.setGroupNo(0L);
 
-                this.repoService.putCtrlMap(vmsObj);
+                this.repoService.putCtlrMap(vmsObj);
                 this.repoService.putIpAddrMap(vmsObj);
                 vmsObj.getStts().initUnknown();
 
@@ -92,7 +92,7 @@ public class VmsCtlrService {
             List<TbVmsCtlrStts> infoList  = this.mapper.selectCtlrStts();
             log.info("VmsCtlrService.loadCtlrSttsInfo: {} EA", infoList.size());
             infoList.forEach(dto -> {
-                TbVmsCtlrDto obj = this.repoService.getCtrlMap(dto.getVmsCtlrNmbr());
+                TbVmsCtlrDto obj = this.repoService.getCtlrMap(dto.getVmsCtlrNmbr());
                 if (obj == null) {
                     log.error("VmsCtlrService.loadCtlrSttsInfo: Not Found VMS {}.", dto.getVmsCtlrNmbr());
                     return;

+ 87 - 0
src/main/java/com/its/vms/service/VmsDisplayOnOffService.java

@@ -0,0 +1,87 @@
+package com.its.vms.service;
+
+import com.its.app.utils.Elapsed;
+import com.its.app.utils.ItsUtils;
+import com.its.vms.dao.mapper.VmsDisplayOnOffMapper;
+import com.its.vms.domain.enums.eVmsReqBoardPower;
+import com.its.vms.dto.TbVmsCtlrDto;
+import com.its.vms.entity.TbVmsOnOffTime;
+import com.its.vms.xnettcp.vms.process.TcpServerSendData;
+import com.its.vms.xnettcp.vms.protocol.enums.eVmsOpCode;
+import com.its.vms.xnettcp.vms.protocol.impl.VmsReqStatusControl;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Objects;
+
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class VmsDisplayOnOffService {
+
+    private final VmsDisplayOnOffMapper mapper;
+    private final AppRepositoryService repoService;
+
+    /**
+     * 전광판 On/Off 시각 정보 읽어서 전광판 제어
+     */
+    public void loadVmsOnOffTime() {
+        Elapsed elapsed = new Elapsed();
+        log.info("VmsManageService.loadVmsOnOffTime: START.");
+        int nCurrTime = ItsUtils.parseIntDef(ItsUtils.getSysHourMin(), 0);
+        String sysDay = ItsUtils.getSysDay();
+
+        List<TbVmsOnOffTime> result = this.mapper.selectVmsOnOffTime();
+        result.forEach(obj -> {
+            TbVmsCtlrDto vmsObj = this.repoService.getCtlrMap(obj.getVmsCtlrNmbr());
+            if (vmsObj == null) {
+                log.error("VmsManageService.loadVmsOnOffTime: VMS Not Found {}.", obj.getVmsCtlrNmbr());
+                return;
+            }
+
+            String onTime = obj.getPanlOnTime();
+            String offTime = obj.getPanlOffTime();
+            if ("9999".equals(onTime) || onTime == null || onTime.length() != 4) {
+                onTime = "0000";
+            }
+            if ("9999".equals(offTime) || offTime == null || offTime.length() != 4) {
+                offTime = "0000";
+            }
+
+            int oldOnOff = vmsObj.getModule().getReqOnOff();
+            int controlOnOff = eVmsReqBoardPower.vms_req_board_power_on.getValue();
+            vmsObj.getModule().setPowerOnTime(sysDay + onTime);
+            vmsObj.getModule().setPowerOffTime(sysDay + offTime);
+
+            int nOnTime = ItsUtils.parseIntDef(onTime, 0);
+            int nOffTime = ItsUtils.parseIntDef(offTime, 0);
+            if (nOnTime != nOffTime) {
+                // 점등 시각과 소등시각이 다른 경우
+                if (nOnTime > nOffTime) {
+                    // 0100(off), 0500(on)
+                    if (nCurrTime >= nOffTime && nCurrTime < nOnTime) {
+                        controlOnOff = eVmsReqBoardPower.vms_req_board_power_off.getValue();
+                    }
+                }
+                else {
+                    // 2300(off), 0500(on)
+                    if (nCurrTime >= nOffTime || nCurrTime < nOnTime) {
+                        controlOnOff = eVmsReqBoardPower.vms_req_board_power_off.getValue();
+                    }
+                }
+            }
+            vmsObj.getModule().setOnOff(!Objects.equals(controlOnOff, oldOnOff));
+            vmsObj.getModule().setReqOnOff(controlOnOff);
+            if (vmsObj.getModule().isOnOff() && (vmsObj.getModule().getReqOnOff() != vmsObj.getModule().getCurOnOff())) {
+                // 전광판 전원 On/Off 상태는 파라미터정보 패킷에 올라온다.
+                VmsReqStatusControl signboardControl = new VmsReqStatusControl(vmsObj);
+                signboardControl.controlSignboardPower(controlOnOff);
+                vmsObj.addRequestData(new TcpServerSendData(eVmsOpCode.OP_VMS_STATUS_CONTROL, signboardControl));
+            }
+        });
+        log.info("VmsManageService.loadVmsOnOffTime: ..END. {} ms.", elapsed.milliSeconds());
+    }
+
+}

+ 1 - 1
src/main/java/com/its/vms/service/VmsIfscService.java

@@ -46,7 +46,7 @@ public class VmsIfscService {
             List<TbVmsRltnIfsc> infoList  = this.mapper.selectVmsRltnIfsc();
             log.info("VmsIfscService.loadVmsRltnIfsc: {} EA", infoList.size());
             infoList.forEach(data -> {
-                TbVmsCtlrDto vmsObj = this.repoService.getCtrlMap(data.getVmsCtlrNmbr());
+                TbVmsCtlrDto vmsObj = this.repoService.getCtlrMap(data.getVmsCtlrNmbr());
                 if (vmsObj != null) {
                     TbVmsRltnIfscDto rltnIfsc = vmsObj.getRltnIfscMap().get(data.getVmsIfscId());
                     if (rltnIfsc == null) {

+ 16 - 65
src/main/java/com/its/vms/service/VmsManageService.java

@@ -4,14 +4,20 @@ import com.its.app.utils.Elapsed;
 import com.its.app.utils.FloodFill;
 import com.its.app.utils.ItsUtils;
 import com.its.vms.config.ApplicationConfig;
+import com.its.vms.config.DebugConfig;
 import com.its.vms.dao.mapper.VmsManageMapper;
 import com.its.vms.domain.VmsConstants;
 import com.its.vms.domain.VmsForm;
 import com.its.vms.domain.VmsFormObject;
 import com.its.vms.domain.VmsSchedule;
-import com.its.vms.domain.enums.*;
+import com.its.vms.domain.enums.eTrafficGrade;
+import com.its.vms.domain.enums.eVmsColor;
+import com.its.vms.domain.enums.eVmsFormType;
+import com.its.vms.domain.enums.eVmsScheduleType;
 import com.its.vms.dto.*;
-import com.its.vms.entity.*;
+import com.its.vms.entity.TbVmsIncd;
+import com.its.vms.entity.TbVmsOperMode;
+import com.its.vms.entity.TbVmsSchedule;
 import com.its.vms.process.DbmsData;
 import com.its.vms.process.DbmsDataProcess;
 import com.its.vms.process.DbmsDataType;
@@ -20,7 +26,6 @@ import com.its.vms.xnettcp.vms.process.TcpServerSendData;
 import com.its.vms.xnettcp.vms.protocol.VmsProtocolConst;
 import com.its.vms.xnettcp.vms.protocol.enums.eVmsFormObjectKind;
 import com.its.vms.xnettcp.vms.protocol.enums.eVmsOpCode;
-import com.its.vms.xnettcp.vms.protocol.impl.VmsReqStatusControl;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -38,6 +43,7 @@ import java.util.*;
 @RequiredArgsConstructor
 public class VmsManageService {
 
+    private final DebugConfig debug;
     private final ApplicationConfig config;
     private final VmsManageMapper mapper;
     private final AppRepositoryService repoService;
@@ -58,63 +64,6 @@ public class VmsManageService {
         this.mapper.initVmsDsplPrst(param);
     }
 
-    /**
-     * 전광판 On/Off 시각 정보 읽어서 전광판 제어
-     */
-    public void loadVmsOnOffTime() {
-        Elapsed elapsed = new Elapsed();
-        log.info("VmsManageService.loadVmsOnOffTime: START.");
-        int nCurrTime = ItsUtils.parseIntDef(ItsUtils.getSysHourMin(), 0);
-        String sysDay = ItsUtils.getSysDay();
-
-        List<TbVmsOnOffTime> result = this.mapper.selectVmsOnOffTime();
-        result.forEach(obj -> {
-            TbVmsCtlrDto vmsObj = this.repoService.getCtrlMap(obj.getVmsCtlrNmbr());
-            if (vmsObj == null) {
-                log.error("VmsManageService.loadVmsOnOffTime: VMS Not Found {}.", obj.getVmsCtlrNmbr());
-                return;
-            }
-
-            String onTime = obj.getPanlOnTime();
-            String offTime = obj.getPanlOffTime();
-            if ("9999".equals(onTime) || onTime == null || onTime.length() != 4) {
-                onTime = "0000";
-            }
-            if ("9999".equals(offTime) || offTime == null || offTime.length() != 4) {
-                offTime = "0000";
-            }
-
-            byte oldOnOff = vmsObj.getModule().getOnOff();
-            byte controlOnOff = eVmsReqBoardPower.vms_req_board_power_on.getValue();
-            vmsObj.getModule().setPowerOnTime(sysDay + onTime);
-            vmsObj.getModule().setPowerOffTime(sysDay + offTime);
-
-            int nOnTime = ItsUtils.parseIntDef(onTime, 0);
-            int nOffTime = ItsUtils.parseIntDef(offTime, 0);
-            if (nOnTime != nOffTime) {
-                // 점등 시각과 소등시각이 다른 경우
-                if (nOnTime > nOffTime) {
-                    // 0100(off), 0500(on)
-                    if (nCurrTime >= nOffTime && nCurrTime < nOnTime) {
-                        controlOnOff = eVmsReqBoardPower.vms_req_board_power_off.getValue();
-                    }
-                }
-                else {
-                    // 2300(off), 0500(on)
-                    if (nCurrTime >= nOffTime || nCurrTime < nOnTime) {
-                        controlOnOff = eVmsReqBoardPower.vms_req_board_power_off.getValue();
-                    }
-                }
-            }
-            if (!Objects.equals(controlOnOff, oldOnOff)) {
-                VmsReqStatusControl signboardControl = new VmsReqStatusControl(vmsObj);
-                signboardControl.controlSignboardPower(controlOnOff);
-                vmsObj.addRequestData(new TcpServerSendData(eVmsOpCode.OP_VMS_STATUS_CONTROL, signboardControl));
-            }
-        });
-        log.info("VmsManageService.loadVmsOnOffTime: ..END. {} ms.", elapsed.milliSeconds());
-    }
-
     /**
      * VMS 기초 정보 로딩
      */
@@ -134,7 +83,7 @@ public class VmsManageService {
         Elapsed elapsed = new Elapsed();
         List<TbVmsIncd> result = this.mapper.selectVmsIncd();
         result.forEach(data -> {
-            TbVmsCtlrDto vmsObj = this.repoService.getCtrlMap(data.getVmsCtlrNmbr());
+            TbVmsCtlrDto vmsObj = this.repoService.getCtlrMap(data.getVmsCtlrNmbr());
             if (vmsObj == null) {
                 log.error("VmsManageService.loadEventOccrInfo: Not Found VMS {}, Incident {}.", data.getVmsCtlrNmbr(), data.getIncdOcrrId());
                 return;
@@ -426,7 +375,7 @@ public class VmsManageService {
         Elapsed elapsed = new Elapsed();
         List<TbVmsSchedule> result = this.mapper.selectVmsDsplSchedule();
         result.forEach(data -> {
-            TbVmsCtlrDto vmsObj = this.repoService.getCtrlMap(data.getVmsCtlrNmbr());
+            TbVmsCtlrDto vmsObj = this.repoService.getCtlrMap(data.getVmsCtlrNmbr());
             if (vmsObj == null) {
                 log.error("VmsManageService.loadVmsDsplSchedule: Not Found VMS {}, Schedule Phase {}.", data.getVmsCtlrNmbr(), data.getPhase());
                 return;
@@ -680,7 +629,7 @@ public class VmsManageService {
         Elapsed elapsed = new Elapsed();
         List<TbVmsOperMode> result = this.mapper.selectVmsOperMode();
         result.forEach(data-> {
-            TbVmsCtlrDto vmsObj = this.repoService.getCtrlMap(data.getVmsCtlrNmbr());
+            TbVmsCtlrDto vmsObj = this.repoService.getCtlrMap(data.getVmsCtlrNmbr());
             if (vmsObj == null) {
                 log.error("VmsManageService.loadVmsOperationMode: Not Found VMS {}.", data.getVmsCtlrNmbr());
                 return;
@@ -1501,8 +1450,10 @@ public class VmsManageService {
             }
             pForm.setSuccess(true);
 
-            log.info("VmsManagerService.makeVmsDatabaseFormData: VMS {}, FORM {}, DnldFormNo {}, Objects {}. ScheduleType {}, FileType {}, File/FtpName {}/{}.",
-                    vmsObj.getVmsCtlrNmbr(), pForm.getVmsFormId(), pForm.getDnldFormNo(), pForm.count(), eVmsScheduleType.getValue(pForm.getVmsSchFormType()), pForm.getFileType(), pForm.getLocalFileName(), pForm.getFtpFileName());
+            if (this.debug.isDebug()) {
+                log.info("VmsManagerService.makeVmsDatabaseFormData: VMS {}, FORM {}, DnldFormNo {}, Objects {}. ScheduleType {}, FileType {}, File/FtpName {}/{}.",
+                        vmsObj.getVmsCtlrNmbr(), pForm.getVmsFormId(), pForm.getDnldFormNo(), pForm.count(), eVmsScheduleType.getValue(pForm.getVmsSchFormType()), pForm.getFileType(), pForm.getLocalFileName(), pForm.getFtpFileName());
+            }
         }
     }
 

+ 9 - 5
src/main/java/com/its/vms/service/VmsSymbService.java

@@ -4,6 +4,7 @@ import com.its.app.utils.Elapsed;
 import com.its.app.utils.FloodFill;
 import com.its.app.utils.ItsUtils;
 import com.its.vms.config.ApplicationConfig;
+import com.its.vms.config.DebugConfig;
 import com.its.vms.dao.mapper.VmsSymbMapper;
 import com.its.vms.dto.*;
 import com.its.vms.entity.TbVmsSymbIfsc;
@@ -32,6 +33,7 @@ import java.util.concurrent.ConcurrentHashMap;
 @RequiredArgsConstructor
 public class VmsSymbService {
 
+    private final DebugConfig debug;
     private final ApplicationConfig config;
     private final AppRepositoryService repoService;
     private final VmsSymbMapper mapper;
@@ -157,9 +159,11 @@ public class VmsSymbService {
             log.error("VmsSymbService.loadVmsSymbLib: {}.", e.toString());
         }
 
-        this.dataMap.forEach((key, symb) -> {
-            log.info("VmsSymbService.loadVmsSymbLib: Symb {}, OrgSymb {}, Size {}.", symb.getMemSymbLibNmbr(), symb.getSymbLibNmbr(), symb.getImageData().length);
-        });
+        if (this.debug.isDebug()) {
+            this.dataMap.forEach((key, symb) -> {
+                log.info("VmsSymbService.loadVmsSymbLib: Symb {}, OrgSymb {}, Size {}.", symb.getMemSymbLibNmbr(), symb.getSymbLibNmbr(), symb.getImageData().length);
+            });
+        }
 
         log.info("VmsSymbService.loadVmsSymbLib: SymbLib {} EA.", this.dataMap.size());
         log.info("VmsSymbService.loadVmsSymbLib: {} ms.", elapsed.milliSeconds());
@@ -234,7 +238,7 @@ public class VmsSymbService {
         log.info("VmsSymbService.loadVmsSymbLibDnld: START.");
         List<TbVmsSymbLibDnld> result = this.mapper.selectVmsSymbLibDnld();
         result.forEach(obj -> {
-            TbVmsCtlrDto vmsObj = this.repoService.getCtrlMap(obj.getVmsCtlrNmbr());
+            TbVmsCtlrDto vmsObj = this.repoService.getCtlrMap(obj.getVmsCtlrNmbr());
             if (vmsObj == null) {
                 log.error("VmsSymbService.loadVmsSymbLibDnld: VMS Not Found {}.", obj.getVmsCtlrNmbr());
                 return;
@@ -259,7 +263,7 @@ public class VmsSymbService {
         log.info("VmsSymbService.loadVmsScheduleSymbol: START.");
         List<VmsScheduleSymb> result = this.mapper.selectVmsScheSymbLib();
         result.forEach(obj -> {
-            TbVmsCtlrDto vmsObj = this.repoService.getCtrlMap(obj.getVmsCtlrNmbr());
+            TbVmsCtlrDto vmsObj = this.repoService.getCtlrMap(obj.getVmsCtlrNmbr());
             if (vmsObj == null) {
                 log.error("VmsSymbService.loadVmsScheduleSymbol: VMS Not Found {}.", obj.getVmsCtlrNmbr());
                 return;

+ 57 - 13
src/main/java/com/its/vms/ui/MainUI.form

@@ -195,7 +195,7 @@
         <properties/>
         <border type="none"/>
         <children>
-          <grid id="dbb05" binding="pnlLogTitle" layout-manager="GridLayoutManager" row-count="1" column-count="6" same-size-horizontally="false" same-size-vertically="false" hgap="1" vgap="1">
+          <grid id="dbb05" binding="pnlLogTitle" layout-manager="GridLayoutManager" row-count="1" column-count="7" same-size-horizontally="false" same-size-vertically="false" hgap="1" vgap="1">
             <margin top="0" left="0" bottom="0" right="2"/>
             <constraints>
               <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
@@ -216,12 +216,12 @@
               </component>
               <hspacer id="656fd">
                 <constraints>
-                  <grid row="0" column="1" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
+                  <grid row="0" column="2" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
                 </constraints>
               </hspacer>
               <component id="df2a0" class="javax.swing.JButton" binding="btnLogDirOpen">
                 <constraints>
-                  <grid row="0" column="5" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
+                  <grid row="0" column="6" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
                 </constraints>
                 <properties>
                   <font name="Malgun Gothic" size="12" style="0"/>
@@ -231,7 +231,7 @@
               </component>
               <component id="69a98" class="javax.swing.JButton" binding="btnLogPause">
                 <constraints>
-                  <grid row="0" column="3" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
+                  <grid row="0" column="4" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
                 </constraints>
                 <properties>
                   <font name="Malgun Gothic" size="12" style="0"/>
@@ -241,7 +241,7 @@
               </component>
               <component id="1e9e7" class="javax.swing.JCheckBox" binding="chkLogPause">
                 <constraints>
-                  <grid row="0" column="2" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+                  <grid row="0" column="3" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
                 </constraints>
                 <properties>
                   <font name="Malgun Gothic" size="12" style="0"/>
@@ -252,13 +252,22 @@
               </component>
               <component id="ba97c" class="javax.swing.JButton" binding="btnLogCopy">
                 <constraints>
-                  <grid row="0" column="4" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
+                  <grid row="0" column="5" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
                 </constraints>
                 <properties>
                   <font name="Malgun Gothic" size="12" style="0"/>
                   <text value="복사"/>
                 </properties>
               </component>
+              <component id="a06a0" class="javax.swing.JCheckBox" binding="chkSysDebug">
+                <constraints>
+                  <grid row="0" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+                </constraints>
+                <properties>
+                  <font name="Malgun Gothic" size="12" style="0"/>
+                  <text value="System Debug Info "/>
+                </properties>
+              </component>
             </children>
           </grid>
           <scrollpane id="a6866">
@@ -286,7 +295,7 @@
           </scrollpane>
         </children>
       </grid>
-      <grid id="e0774" binding="pnlStatusBar" layout-manager="GridLayoutManager" row-count="1" column-count="7" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
+      <grid id="e0774" binding="pnlStatusBar" layout-manager="GridLayoutManager" row-count="1" column-count="10" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
         <margin top="0" left="4" bottom="4" right="4"/>
         <constraints>
           <grid row="2" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
@@ -296,12 +305,12 @@
         <children>
           <hspacer id="653ec">
             <constraints>
-              <grid row="0" column="1" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
+              <grid row="0" column="4" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
             </constraints>
           </hspacer>
           <component id="20f9" class="javax.swing.JLabel" binding="lblSystime">
             <constraints>
-              <grid row="0" column="6" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
+              <grid row="0" column="9" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
             </constraints>
             <properties>
               <font name="Malgun Gothic" size="12" style="1"/>
@@ -321,7 +330,7 @@
           </component>
           <component id="94189" class="javax.swing.JLabel" binding="lblCpuRate">
             <constraints>
-              <grid row="0" column="5" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false">
+              <grid row="0" column="8" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false">
                 <minimum-size width="40" height="-1"/>
                 <preferred-size width="40" height="-1"/>
                 <maximum-size width="40" height="-1"/>
@@ -336,7 +345,7 @@
           </component>
           <component id="19dbe" class="javax.swing.JLabel" binding="lblMemoryUsage">
             <constraints>
-              <grid row="0" column="3" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false">
+              <grid row="0" column="6" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false">
                 <minimum-size width="40" height="-1"/>
                 <preferred-size width="40" height="-1"/>
                 <maximum-size width="40" height="-1"/>
@@ -351,7 +360,7 @@
           </component>
           <component id="f6d5e" class="javax.swing.JLabel">
             <constraints>
-              <grid row="0" column="4" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
+              <grid row="0" column="7" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
             </constraints>
             <properties>
               <font name="Malgun Gothic" size="12" style="0"/>
@@ -362,7 +371,7 @@
           </component>
           <component id="d8ff5" class="javax.swing.JLabel">
             <constraints>
-              <grid row="0" column="2" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
+              <grid row="0" column="5" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
             </constraints>
             <properties>
               <font name="Malgun Gothic" size="12" style="0"/>
@@ -371,6 +380,41 @@
               <text value="  메모리 사용율(%):"/>
             </properties>
           </component>
+          <component id="ea9bb" class="javax.swing.JLabel">
+            <constraints>
+              <grid row="0" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+            </constraints>
+            <properties>
+              <font name="Malgun Gothic" size="12" style="0"/>
+              <text value="Port Controller/API:"/>
+            </properties>
+          </component>
+          <component id="ee0dd" class="javax.swing.JTextField" binding="txtPort">
+            <constraints>
+              <grid row="0" column="2" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false">
+                <preferred-size width="60" height="-1"/>
+              </grid>
+            </constraints>
+            <properties>
+              <editable value="false"/>
+              <font name="Malgun Gothic" size="12" style="0"/>
+              <horizontalAlignment value="0"/>
+              <text value="-"/>
+            </properties>
+          </component>
+          <component id="c30f0" class="javax.swing.JTextField" binding="txtApiPort">
+            <constraints>
+              <grid row="0" column="3" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false">
+                <preferred-size width="60" height="-1"/>
+              </grid>
+            </constraints>
+            <properties>
+              <editable value="false"/>
+              <font name="Malgun Gothic" size="12" style="0"/>
+              <horizontalAlignment value="0"/>
+              <text value="-"/>
+            </properties>
+          </component>
         </children>
       </grid>
     </children>

+ 60 - 13
src/main/java/com/its/vms/ui/MainUI.java

@@ -5,6 +5,9 @@ import com.intellij.uiDesigner.core.GridLayoutManager;
 import com.intellij.uiDesigner.core.Spacer;
 import com.its.app.AppUtils;
 import com.its.app.utils.SysUtils;
+import com.its.vms.config.CommunicationConfig;
+import com.its.vms.config.DebugConfig;
+import com.its.vms.config.ServerConfig;
 import com.its.vms.domain.NET;
 import com.its.vms.dto.TbVmsCtlrDto;
 import com.its.vms.service.AppRepositoryService;
@@ -73,6 +76,9 @@ public class MainUI {
     private JTextField txtId;
     private JLabel lblVmsInfo;
     private JButton btnControl;
+    private JTextField txtPort;
+    private JTextField txtApiPort;
+    private JCheckBox chkSysDebug;
     private boolean isUpdatable;
 
     public static MainUI getInstance() {
@@ -211,6 +217,21 @@ public class MainUI {
                 super.mouseClicked(me);
             }
         });
+
+        chkSysDebug.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                DebugConfig debug = (DebugConfig) AppUtils.getBean(DebugConfig.class);
+                debug.setDebug(chkSysDebug.isSelected());
+            }
+        });
+
+        CommunicationConfig config = (CommunicationConfig) AppUtils.getBean(CommunicationConfig.class);
+        txtPort.setText(String.valueOf(config.getListenPort()));
+        ServerConfig serverConfig = (ServerConfig) AppUtils.getBean(ServerConfig.class);
+        txtApiPort.setText(String.valueOf(serverConfig.getPort()));
+        DebugConfig debug = (DebugConfig) AppUtils.getBean(DebugConfig.class);
+        chkSysDebug.setSelected(debug.isDebug());
     }
 
     /**
@@ -262,6 +283,8 @@ public class MainUI {
             case 4:
                 result = true;
                 if (!this.subUIController.isVisible()) {
+                    DebugConfig debugConfig = (DebugConfig) AppUtils.getBean(DebugConfig.class);
+                    debugConfig.loadDebugInfo();
                     this.subUIController.setVisible(true);
                 }
                 this.subUIController.setState(JFrame.NORMAL);
@@ -564,7 +587,7 @@ public class MainUI {
         pnlLog.setLayout(new GridLayoutManager(2, 1, new Insets(0, 4, 0, 4), -1, -1));
         rootPanel.add(pnlLog, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, new Dimension(-1, 250), new Dimension(-1, 250), new Dimension(-1, 250), 0, false));
         pnlLogTitle = new JPanel();
-        pnlLogTitle.setLayout(new GridLayoutManager(1, 6, new Insets(0, 0, 0, 2), 1, 1));
+        pnlLogTitle.setLayout(new GridLayoutManager(1, 7, new Insets(0, 0, 0, 2), 1, 1));
         pnlLog.add(pnlLogTitle, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
         final JLabel label4 = new JLabel();
         Font label4Font = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, label4.getFont());
@@ -574,31 +597,36 @@ public class MainUI {
         label4.setText("시스템 로그");
         pnlLogTitle.add(label4, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
         final Spacer spacer3 = new Spacer();
-        pnlLogTitle.add(spacer3, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false));
+        pnlLogTitle.add(spacer3, new GridConstraints(0, 2, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false));
         btnLogDirOpen = new JButton();
         Font btnLogDirOpenFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, btnLogDirOpen.getFont());
         if (btnLogDirOpenFont != null) btnLogDirOpen.setFont(btnLogDirOpenFont);
         btnLogDirOpen.setHorizontalTextPosition(0);
         btnLogDirOpen.setText("로그 폴더");
-        pnlLogTitle.add(btnLogDirOpen, new GridConstraints(0, 5, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+        pnlLogTitle.add(btnLogDirOpen, new GridConstraints(0, 6, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
         btnLogPause = new JButton();
         Font btnLogPauseFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, btnLogPause.getFont());
         if (btnLogPauseFont != null) btnLogPause.setFont(btnLogPauseFont);
         btnLogPause.setHorizontalTextPosition(0);
         btnLogPause.setText("지우기");
-        pnlLogTitle.add(btnLogPause, new GridConstraints(0, 3, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+        pnlLogTitle.add(btnLogPause, new GridConstraints(0, 4, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
         chkLogPause = new JCheckBox();
         Font chkLogPauseFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, chkLogPause.getFont());
         if (chkLogPauseFont != null) chkLogPause.setFont(chkLogPauseFont);
         chkLogPause.setHorizontalAlignment(0);
         chkLogPause.setHorizontalTextPosition(11);
         chkLogPause.setText("멈춤");
-        pnlLogTitle.add(chkLogPause, new GridConstraints(0, 2, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+        pnlLogTitle.add(chkLogPause, new GridConstraints(0, 3, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
         btnLogCopy = new JButton();
         Font btnLogCopyFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, btnLogCopy.getFont());
         if (btnLogCopyFont != null) btnLogCopy.setFont(btnLogCopyFont);
         btnLogCopy.setText("복사");
-        pnlLogTitle.add(btnLogCopy, new GridConstraints(0, 4, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+        pnlLogTitle.add(btnLogCopy, new GridConstraints(0, 5, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+        chkSysDebug = new JCheckBox();
+        Font chkSysDebugFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, chkSysDebug.getFont());
+        if (chkSysDebugFont != null) chkSysDebug.setFont(chkSysDebugFont);
+        chkSysDebug.setText("System Debug Info ");
+        pnlLogTitle.add(chkSysDebug, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
         final JScrollPane scrollPane2 = new JScrollPane();
         Font scrollPane2Font = this.$$$getFont$$$("D2Coding", Font.PLAIN, 12, scrollPane2.getFont());
         if (scrollPane2Font != null) scrollPane2.setFont(scrollPane2Font);
@@ -614,17 +642,17 @@ public class MainUI {
         taLog.setText("[10:50:08.561] [ INFO] ************************************************************************************\n[10:50:08.561] [ INFO] **                   Center Communication Server Information                      **\n[10:50:08.561] [ INFO] **     bindAddress: 0.0.0.0\n[10:50:08.561] [ INFO] **      listenPort: 9901\n[10:50:08.561] [ INFO] **         backlog: 1024\n[10:50:08.561] [ INFO] **   acceptThreads: 16\n[10:50:08.561] [ INFO] **   workerThreads: 16\n[10:50:08.561] [ INFO] ************************************************************************************\n");
         scrollPane2.setViewportView(taLog);
         pnlStatusBar = new JPanel();
-        pnlStatusBar.setLayout(new GridLayoutManager(1, 7, new Insets(0, 4, 4, 4), -1, -1));
+        pnlStatusBar.setLayout(new GridLayoutManager(1, 10, new Insets(0, 4, 4, 4), -1, -1));
         rootPanel.add(pnlStatusBar, new GridConstraints(2, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
         final Spacer spacer4 = new Spacer();
-        pnlStatusBar.add(spacer4, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false));
+        pnlStatusBar.add(spacer4, new GridConstraints(0, 4, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false));
         lblSystime = new JLabel();
         Font lblSystimeFont = this.$$$getFont$$$("Malgun Gothic", Font.BOLD, 12, lblSystime.getFont());
         if (lblSystimeFont != null) lblSystime.setFont(lblSystimeFont);
         lblSystime.setHorizontalAlignment(0);
         lblSystime.setHorizontalTextPosition(0);
         lblSystime.setText(" 2022-08-04 13:24:33 ");
-        pnlStatusBar.add(lblSystime, new GridConstraints(0, 6, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+        pnlStatusBar.add(lblSystime, new GridConstraints(0, 9, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
         final JLabel label5 = new JLabel();
         label5.setIcon(new ImageIcon(getClass().getResource("/static/image/on.png")));
         label5.setText(" ");
@@ -635,28 +663,47 @@ public class MainUI {
         lblCpuRate.setHorizontalAlignment(2);
         lblCpuRate.setHorizontalTextPosition(0);
         lblCpuRate.setText("    ");
-        pnlStatusBar.add(lblCpuRate, new GridConstraints(0, 5, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, new Dimension(40, -1), new Dimension(40, -1), new Dimension(40, -1), 0, false));
+        pnlStatusBar.add(lblCpuRate, new GridConstraints(0, 8, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, new Dimension(40, -1), new Dimension(40, -1), new Dimension(40, -1), 0, false));
         lblMemoryUsage = new JLabel();
         Font lblMemoryUsageFont = this.$$$getFont$$$("Malgun Gothic", Font.BOLD, 12, lblMemoryUsage.getFont());
         if (lblMemoryUsageFont != null) lblMemoryUsage.setFont(lblMemoryUsageFont);
         lblMemoryUsage.setHorizontalAlignment(2);
         lblMemoryUsage.setHorizontalTextPosition(0);
         lblMemoryUsage.setText("    ");
-        pnlStatusBar.add(lblMemoryUsage, new GridConstraints(0, 3, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, new Dimension(40, -1), new Dimension(40, -1), new Dimension(40, -1), 0, false));
+        pnlStatusBar.add(lblMemoryUsage, new GridConstraints(0, 6, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, new Dimension(40, -1), new Dimension(40, -1), new Dimension(40, -1), 0, false));
         final JLabel label6 = new JLabel();
         Font label6Font = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, label6.getFont());
         if (label6Font != null) label6.setFont(label6Font);
         label6.setHorizontalAlignment(0);
         label6.setHorizontalTextPosition(0);
         label6.setText("  CPU 사용율(%):");
-        pnlStatusBar.add(label6, new GridConstraints(0, 4, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+        pnlStatusBar.add(label6, new GridConstraints(0, 7, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
         final JLabel label7 = new JLabel();
         Font label7Font = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, label7.getFont());
         if (label7Font != null) label7.setFont(label7Font);
         label7.setHorizontalAlignment(0);
         label7.setHorizontalTextPosition(0);
         label7.setText("  메모리 사용율(%):");
-        pnlStatusBar.add(label7, new GridConstraints(0, 2, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+        pnlStatusBar.add(label7, new GridConstraints(0, 5, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+        final JLabel label8 = new JLabel();
+        Font label8Font = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, label8.getFont());
+        if (label8Font != null) label8.setFont(label8Font);
+        label8.setText("Port Controller/API:");
+        pnlStatusBar.add(label8, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+        txtPort = new JTextField();
+        txtPort.setEditable(false);
+        Font txtPortFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, txtPort.getFont());
+        if (txtPortFont != null) txtPort.setFont(txtPortFont);
+        txtPort.setHorizontalAlignment(0);
+        txtPort.setText("-");
+        pnlStatusBar.add(txtPort, new GridConstraints(0, 2, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(60, -1), null, 0, false));
+        txtApiPort = new JTextField();
+        txtApiPort.setEditable(false);
+        Font txtApiPortFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, txtApiPort.getFont());
+        if (txtApiPortFont != null) txtApiPort.setFont(txtApiPortFont);
+        txtApiPort.setHorizontalAlignment(0);
+        txtApiPort.setText("-");
+        pnlStatusBar.add(txtApiPort, new GridConstraints(0, 3, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(60, -1), null, 0, false));
     }
 
     /**

+ 7 - 3
src/main/java/com/its/vms/ui/SubUI.form

@@ -419,11 +419,15 @@
                   <text value="지우기"/>
                 </properties>
               </component>
-              <hspacer id="b4fd9">
+              <component id="c4e24" class="javax.swing.JCheckBox" binding="chkDebug">
                 <constraints>
-                  <grid row="0" column="1" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
+                  <grid row="0" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
                 </constraints>
-              </hspacer>
+                <properties>
+                  <font name="Malgun Gothic" size="12" style="0"/>
+                  <text value="Debug Info "/>
+                </properties>
+              </component>
             </children>
           </grid>
           <scrollpane id="149c1">

+ 19 - 6
src/main/java/com/its/vms/ui/SubUI.java

@@ -2,8 +2,8 @@ package com.its.vms.ui;
 
 import com.intellij.uiDesigner.core.GridConstraints;
 import com.intellij.uiDesigner.core.GridLayoutManager;
-import com.intellij.uiDesigner.core.Spacer;
 import com.its.vms.domain.NET;
+import com.its.vms.domain.enums.eVmsReqBoardPower;
 import com.its.vms.dto.TbVmsCtlrDto;
 import com.its.vms.entity.TbVmsCtlrStts;
 import com.its.vms.xnettcp.vms.process.TcpServerSendData;
@@ -59,6 +59,7 @@ public abstract class SubUI {
     private JSpinner spControl;
     private JButton btnSymbDnld;
     private JButton btnReserved;
+    private JCheckBox chkDebug;
 
     protected abstract void actionButtonClicked();
 
@@ -80,7 +81,7 @@ public abstract class SubUI {
         SpinnerModel value = new SpinnerNumberModel(0, 0, 100, 1);
         spControl.setModel(value);
 
-        btnReserved.setVisible(true);
+        btnReserved.setVisible(false);
         btnReserved.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
@@ -158,6 +159,14 @@ public abstract class SubUI {
             }
         });
 
+        chkDebug.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                if (selObj != null) {
+                    selObj.getDebug().setDebug(chkDebug.isSelected());
+                }
+            }
+        });
     }
 
     public void statusControl(int controlType) {
@@ -219,10 +228,10 @@ public abstract class SubUI {
                 statusControl.controlSystemTime();
                 break;
             case 5:
-                statusControl.controlSignboardPower((byte) 0x00);
+                statusControl.controlSignboardPower(eVmsReqBoardPower.vms_req_board_power_off.getValue());
                 break;
             case 6:
-                statusControl.controlSignboardPower((byte) 0x01);
+                statusControl.controlSignboardPower(eVmsReqBoardPower.vms_req_board_power_on.getValue());
                 break;
             case 7:
                 statusControl.controlFan((byte) (cboControl.getSelectedIndex() & 0xff), (byte) ((Integer) spControl.getValue() & 0xFF));
@@ -256,6 +265,7 @@ public abstract class SubUI {
         txtHeater.setText("");
         txtTemp.setText("");
         if (selObj != null) {
+            chkDebug.setSelected(selObj.getDebug().isDebug());
             txtNmbr.setText(String.valueOf(selObj.getVmsCtlrNmbr()));
             txtCtlrId.setText(selObj.getCtlrId());
             txtName.setText(selObj.getName());
@@ -527,8 +537,11 @@ public abstract class SubUI {
         btnLogClear.setHorizontalTextPosition(0);
         btnLogClear.setText("지우기");
         panel4.add(btnLogClear, new GridConstraints(0, 2, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
-        final Spacer spacer1 = new Spacer();
-        panel4.add(spacer1, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false));
+        chkDebug = new JCheckBox();
+        Font chkDebugFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, chkDebug.getFont());
+        if (chkDebugFont != null) chkDebug.setFont(chkDebugFont);
+        chkDebug.setText("Debug Info ");
+        panel4.add(chkDebug, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
         final JScrollPane scrollPane1 = new JScrollPane();
         panel3.add(scrollPane1, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false));
         taLog = new JTextArea();

+ 3 - 3
src/main/java/com/its/vms/webapp/controller/WebAppController.java

@@ -67,7 +67,7 @@ public class WebAppController {
     @ResponseBody
     public String disconnectController(@RequestParam("id") Long id) {
         String result = "제어기와의 통신 연결을 종료 하였습니다.";
-        TbVmsCtlrDto ctlr = this.repoService.getCtrlMap(id);
+        TbVmsCtlrDto ctlr = this.repoService.getCtlrMap(id);
         if (ctlr != null && ctlr.getNetState() > NET.CLOSED && ctlr.getChannel() != null) {
             VmsServerIdleStateHandler.disconnectChannel(ctlr, ctlr.getChannel());
         }
@@ -94,7 +94,7 @@ public class WebAppController {
     @ResponseBody
     public String resetConnCount(@RequestParam("id") Long id) {
         String result = "통신 접속횟수를 초기화 하였습니다.";
-        TbVmsCtlrDto ctlr = this.repoService.getCtrlMap(id);
+        TbVmsCtlrDto ctlr = this.repoService.getCtlrMap(id);
         if (ctlr != null) {
             ctlr.resetConnectCount();
         }
@@ -116,7 +116,7 @@ public class WebAppController {
     @ResponseBody
     public String resetController(@RequestParam("id") Long id) {
         String result = "제어기를 리셋 하였습니다.";
-        TbVmsCtlrDto ctlr = this.repoService.getCtrlMap(id);
+        TbVmsCtlrDto ctlr = this.repoService.getCtlrMap(id);
         if (ctlr != null && ctlr.getNetState() > NET.CLOSED && ctlr.getChannel() != null) {
             VmsServerIdleStateHandler.disconnectChannel(ctlr, ctlr.getChannel());
         }

+ 1 - 1
src/main/java/com/its/vms/xnettcp/center/handler/CenterTcpServerInboundHandler.java

@@ -55,7 +55,7 @@ public class CenterTcpServerInboundHandler extends ChannelInboundHandlerAdapter
 //            ctrlHs.setRspsType("0");
 
             //TbVmsCtlr obj = AppRepository.getInstance().getCtlrMap().get(String.valueOf(ctlrNmbr));
-            TbVmsCtlrDto obj = this.repoService.getCtrlMap(ctlrNmbr);
+            TbVmsCtlrDto obj = this.repoService.getCtlrMap(ctlrNmbr);
             if (obj == null) {
                 log.error("CenterTcpServerInboundHandler: Center Request Unknown RSE: [{}]", ctlrNmbr);
 //                ctrlHs.setRspsType("9");  // 알수없는제어기

+ 10 - 6
src/main/java/com/its/vms/xnettcp/vms/VmsTcpCommServerInitializer.java

@@ -15,6 +15,8 @@ import io.netty.channel.Channel;
 import io.netty.channel.ChannelInitializer;
 import io.netty.channel.ChannelPipeline;
 import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
+import io.netty.handler.logging.LogLevel;
+import io.netty.handler.logging.LoggingHandler;
 import io.netty.handler.timeout.IdleStateHandler;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -35,8 +37,8 @@ public class VmsTcpCommServerInitializer extends ChannelInitializer<Channel> {
     @Override
     protected void initChannel(Channel channel) throws Exception {
         String ipAddress  = NettyUtils.getRemoteIpAddress(channel);
-        TbVmsCtlrDto obj = this.repoService.getIpAddrMap(ipAddress);
-        if (obj == null) {
+        TbVmsCtlrDto vmsObj = this.repoService.getIpAddrMap(ipAddress);
+        if (vmsObj == null) {
             log.error("VmsTcpCommServerInitializer.----initChannel: {}, Unknown ip address. will be closed.", ipAddress);
             channel.disconnect();
             channel.close();
@@ -49,10 +51,12 @@ public class VmsTcpCommServerInitializer extends ChannelInitializer<Channel> {
                     TimeUnit.SECONDS);
 
             ChannelPipeline pipeline = channel.pipeline();
-            //pipeline.addLast(new LoggingHandler(LogLevel.INFO));
+            if (vmsObj.getDebug().isDump()) {
+                pipeline.addLast(new LoggingHandler(LogLevel.INFO));
+            }
             pipeline.addLast("vmsTcpIdleStateHandler", tcpIdleStateHandler);
-            pipeline.addLast("vmsServerIdleStateHandler", new VmsServerIdleStateHandler(obj, this.dbmsDataProcess, this.config));   // packet idle state handler, event handler
-            if (obj.getProtocolVer() == eVmsProtocolVersion.PROTOCOL_ANDONG.getValue()) {
+            pipeline.addLast("vmsServerIdleStateHandler", new VmsServerIdleStateHandler(vmsObj, this.dbmsDataProcess, this.config));   // packet idle state handler, event handler
+            if (vmsObj.getProtocolVer() == eVmsProtocolVersion.PROTOCOL_ANDONG.getValue()) {
                 // CONTROLLER KIND(0 1), ADDRESS(2 3, 4 5), FRAME SEQUENCE NO(6 7), OP CODE(8), DATA LENGTH(9 10 11 12), DATA(13 ...)
                 int lengthFieldOffset = 9;
                 int lengthFieldLength = 4;
@@ -62,7 +66,7 @@ public class VmsTcpCommServerInitializer extends ChannelInitializer<Channel> {
                 //pipeline.addLast("vmsServerPacketDecoder", this.tcpServerByteBufMessageDecoder);
             }
             else {
-                pipeline.addLast("vmsServerDecoder", new VmsTcpServerDleStuffingDecoder(this.config, this.repoService, obj));  // Decoding handler
+                pipeline.addLast("vmsServerDecoder", new VmsTcpServerDleStuffingDecoder(this.config, this.repoService, vmsObj));  // Decoding handler
             }
             pipeline.addLast("vmsServerPacketInboundHandler", this.vmsServerPacketInboundHandler); // packet distribute handler add
             pipeline.addLast("vmsServerEncoder", this.vmsTcpServerEncoder);  // Encoding handler

+ 3 - 1
src/main/java/com/its/vms/xnettcp/vms/process/response/impl/VmsResDisplayModuleStatus.java

@@ -67,7 +67,9 @@ public class VmsResDisplayModuleStatus implements VmsResponse {
         }
         this.stts = data.toString();
 
-        log.info("{}", toString());
+        if (this.vmsObj.getDebug().isDebug()) {
+            log.info("{}", toString());
+        }
 
         this.vmsObj.getStts().updateModuleStts(this.stts);
 

+ 8 - 1
src/main/java/com/its/vms/xnettcp/vms/process/response/impl/VmsResParameter.java

@@ -77,11 +77,18 @@ public class VmsResParameter implements VmsResponse {
         this.min = byteBuffer.get() & 0xFF;
         this.sec = byteBuffer.get() & 0xFF;
 
-        log.info("{}", toString());
+        if (this.vmsObj.getDebug().isDebug()) {
+            log.info("{}", toString());
+        }
 
         this.vmsObj.updateParameter(powerCtrlMode, fanRunMode, fanRunTemp, heaterRunMode, heaterRunTemp,
                                     brightMode, brightCurr, brightWeek, brightNght, blinkTime, scnTurnTime, modlErrRate);
 
+        /**
+         * powerCtrlMode : 전광판 전원 On/Off 상태 정보임.
+         */
+        this.vmsObj.getModule().setCurOnOff(this.powerCtrlMode);
+
         nextCommand();
         return true;
     }

+ 3 - 1
src/main/java/com/its/vms/xnettcp/vms/process/response/impl/VmsResPowerModuleStatus.java

@@ -61,7 +61,9 @@ public class VmsResPowerModuleStatus implements VmsResponse {
         }
         this.stts = data.toString();
 
-        log.info("{}", toString());
+        if (this.vmsObj.getDebug().isDebug()) {
+            log.info("{}", toString());
+        }
 
         this.vmsObj.getStts().updatePowerModuleStts(this.stts);
 

+ 3 - 1
src/main/java/com/its/vms/xnettcp/vms/process/response/impl/VmsResStatus.java

@@ -95,7 +95,9 @@ public class VmsResStatus implements VmsResponse {
             this.moduleStts = this.power;         // 모듈 상태, 0x00: 정상, 0x01: 불량, 0x02: Unknown
         }
 
-        log.info("{}", toString());
+        if (this.vmsObj.getDebug().isDebug()) {
+            log.info("{}", toString());
+        }
 
         if (this.vmsObj.getStts().updateStatus(door, power, fan, heater, formNo, reboot, cboxTemp,
                 brightMode, brightCurr, brightWeek, brightNght, dpTemp, dpHum,

+ 15 - 2
src/main/java/com/its/vms/xnettcp/vms/protocol/impl/VmsReqStatusControl.java

@@ -22,8 +22,10 @@ public class VmsReqStatusControl extends VmsReqFramePacket {
 
     private final VmsFramePacket framePacket;
 
+    TbVmsCtlrDto vmsObj;
     private byte[] body;
     public VmsReqStatusControl(TbVmsCtlrDto vmsObj) {
+        this.vmsObj = vmsObj;
         this.opCode = eVmsOpCode.OP_VMS_STATUS_CONTROL;
         this.packetNmbr = (short)this.opCode.getValue();
         byte opCode = (byte)this.opCode.getValue();
@@ -39,23 +41,26 @@ public class VmsReqStatusControl extends VmsReqFramePacket {
         }
     }
 
-    public void controlSignboardPower(byte onOff) {
+    public void controlSignboardPower(int onOff) {
         this.body = new byte[2];
         this.body[0] = (byte) eVmsStatusControl.CONTROL_SIGNBOARD_POWER.getByteValue();
-        this.body[1] = onOff;
+        this.body[1] = (byte)(onOff & 0xFF);
         this.framePacket.setBody(this.body);
+        log.info("VmsReqStatusControl.controlSignboardPower: VMS {}, {}", this.vmsObj.getVmsCtlrNmbr(), String.format("0x%02X", this.body[1]));
     }
     public void controlReset() {
         this.body = new byte[2];
         this.body[0] = (byte) eVmsStatusControl.CONTROL_RESET.getByteValue();
         this.body[1] = 0x00;
         this.framePacket.setBody(this.body);
+        log.info("VmsReqStatusControl.controlReset: VMS {}", this.vmsObj.getVmsCtlrNmbr());
     }
     public void controlRetryCount(byte count) {
         this.body = new byte[2];
         this.body[0] = (byte) eVmsStatusControl.CONTROL_RETRY_COUNT.getByteValue();
         this.body[1] = (byte)(count & 0xFF);
         this.framePacket.setBody(this.body);
+        log.info("VmsReqStatusControl.controlRetryCount: VMS {}, {}", this.vmsObj.getVmsCtlrNmbr(), String.format("0x%02X", this.body[1]));
     }
     public void controlSystemTime() {
         String sysTime = SysUtils.getSysTime();
@@ -72,12 +77,14 @@ public class VmsReqStatusControl extends VmsReqFramePacket {
         buffer.get(this.body, 0, this.body.length);
 
         this.framePacket.setBody(this.body);
+        log.info("VmsReqStatusControl.controlSystemTime: VMS {}, {}", this.vmsObj.getVmsCtlrNmbr(), sysTime);
     }
     public void controlBlinkCycle(byte count) {
         this.body = new byte[2];
         this.body[0] = (byte) eVmsStatusControl.CONTROL_BLINK_CYCLE.getByteValue();
         this.body[1] = (byte)(count & 0xFF);
         this.framePacket.setBody(this.body);
+        log.info("VmsReqStatusControl.controlBlinkCycle: VMS {}, {}", this.vmsObj.getVmsCtlrNmbr(), String.format("0x%02X", this.body[1]));
     }
     public void controlBright(byte type, byte value) {
         this.body = new byte[3];
@@ -85,6 +92,7 @@ public class VmsReqStatusControl extends VmsReqFramePacket {
         this.body[1] = (byte)(type & 0xFF);
         this.body[2] = (byte)(value & 0xFF);
         this.framePacket.setBody(this.body);
+        log.info("VmsReqStatusControl.controlBright: VMS {}, {}, {}", this.vmsObj.getVmsCtlrNmbr(), String.format("0x%02X", this.body[1]), String.format("0x%02X", this.body[2]));
     }
     public void controlFan(byte type, byte temp) {
         this.body = new byte[3];
@@ -92,6 +100,7 @@ public class VmsReqStatusControl extends VmsReqFramePacket {
         this.body[1] = (byte)(type & 0xFF);
         this.body[2] = (byte)(temp & 0xFF);
         this.framePacket.setBody(this.body);
+        log.info("VmsReqStatusControl.controlFan: VMS {}, {}, {}", this.vmsObj.getVmsCtlrNmbr(), String.format("0x%02X", this.body[1]), String.format("0x%02X", this.body[2]));
     }
     public void controlHeater(byte type, byte temp) {
         this.body = new byte[3];
@@ -99,6 +108,7 @@ public class VmsReqStatusControl extends VmsReqFramePacket {
         this.body[1] = (byte)(type & 0xFF);
         this.body[2] = (byte)(temp & 0xFF);
         this.framePacket.setBody(this.body);
+        log.info("VmsReqStatusControl.controlHeater: VMS {}, {}, {}", this.vmsObj.getVmsCtlrNmbr(), String.format("0x%02X", this.body[1]), String.format("0x%02X", this.body[2]));
     }
     public void controlScreenColor(byte color) {
         // 0x01:Red, 0x02:Green, 0x03:Amber
@@ -106,18 +116,21 @@ public class VmsReqStatusControl extends VmsReqFramePacket {
         this.body[0] = (byte) eVmsStatusControl.CONTROL_SCREEN_COLOR.getByteValue();
         this.body[1] = (byte)(color & 0xFF);
         this.framePacket.setBody(this.body);
+        log.info("VmsReqStatusControl.controlScreenColor: VMS {}, {}", this.vmsObj.getVmsCtlrNmbr(), String.format("0x%02X", this.body[1]));
     }
     public void controlModuleErrorRatio(byte percent) {
         this.body = new byte[2];
         this.body[0] = (byte) eVmsStatusControl.CONTROL_MODULE_ERROR_RATIO.getByteValue();
         this.body[1] = (byte)(percent & 0xFF);
         this.framePacket.setBody(this.body);
+        log.info("VmsReqStatusControl.controlModuleErrorRatio: VMS {}, {}", this.vmsObj.getVmsCtlrNmbr(), String.format("0x%02X", this.body[1]));
     }
     public void controlDefaultScenarioRunTime(byte seconds) {
         this.body = new byte[2];
         this.body[0] = (byte) eVmsStatusControl.CONTROL_DEFAULT_SCENARIO_RUN_TIME.getByteValue();
         this.body[1] = (byte)(seconds & 0xFF);
         this.framePacket.setBody(this.body);
+        log.info("VmsReqStatusControl.controlDefaultScenarioRunTime: VMS {}, {}", this.vmsObj.getVmsCtlrNmbr(), String.format("0x%02X", this.body[1]));
     }
 
     @Override

+ 15 - 0
src/main/resources/mybatis/mapper/VmsDisplayOnOffMapper.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.its.vms.dao.mapper.VmsDisplayOnOffMapper">
+
+    <select id="selectVmsOnOffTime" resultType="com.its.vms.entity.TbVmsOnOffTime" fetchSize="100">
+    <![CDATA[
+        select t1.vms_ctlr_nmbr AS vmsCtlrNmbr,
+               t1.panl_on_time  AS panlOnTime,
+               t1.panl_off_time AS panlOffTime
+        from tb_vms_ctlr t1
+        ]]>
+    </select>
+
+</mapper>

+ 0 - 9
src/main/resources/mybatis/mapper/VmsManageMapper.xml

@@ -16,15 +16,6 @@
         ]]>
     </insert>
 
-    <select id="selectVmsOnOffTime" resultType="com.its.vms.entity.TbVmsOnOffTime" fetchSize="100">
-    <![CDATA[
-        select t1.vms_ctlr_nmbr AS vmsCtlrNmbr,
-               t1.panl_on_time  AS panlOnTime,
-               t1.panl_off_time AS panlOffTime
-        from tb_vms_ctlr t1
-        ]]>
-    </select>
-
     <select id="selectVmsOperMode" resultType="com.its.vms.entity.TbVmsOperMode" fetchSize="100">
     <![CDATA[
         select vms_ctlr_nmbr             AS vmsCtlrNmbr,