shjung 2 yıl önce
ebeveyn
işleme
8bc967a4fc
69 değiştirilmiş dosya ile 1562 ekleme ve 546 silme
  1. 19 0
      src/main/java/com/its/app/utils/ItsUtils.java
  2. 2 2
      src/main/java/com/its/vms/dao/mapper/VmsAtmpMapper.java
  3. 4 2
      src/main/java/com/its/vms/dao/mapper/VmsCtlrMapper.java
  4. 4 4
      src/main/java/com/its/vms/dao/mapper/VmsFontMapper.java
  5. 4 4
      src/main/java/com/its/vms/dao/mapper/VmsFormMapper.java
  6. 4 4
      src/main/java/com/its/vms/dao/mapper/VmsIfscMapper.java
  7. 4 0
      src/main/java/com/its/vms/dao/mapper/VmsManageMapper.java
  8. 4 4
      src/main/java/com/its/vms/dao/mapper/VmsSymbMapper.java
  9. 126 1
      src/main/java/com/its/vms/dto/TbVmsAtmpDto.java
  10. 15 1
      src/main/java/com/its/vms/dto/TbVmsCtlrSttsDto.java
  11. 12 9
      src/main/java/com/its/vms/dto/TbVmsFormDto.java
  12. 2 1
      src/main/java/com/its/vms/dto/TbVmsFormObjectDto.java
  13. 6 17
      src/main/java/com/its/vms/dto/TbVmsIfscTrafDto.java
  14. 20 0
      src/main/java/com/its/vms/dto/TbVmsOnOffTimeDto.java
  15. 9 15
      src/main/java/com/its/vms/dto/TbVmsRltnIfscDto.java
  16. 2 1
      src/main/java/com/its/vms/dto/TbVmsSymbIfscDto.java
  17. 82 26
      src/main/java/com/its/vms/dto/TbVmsSymbLibDto.java
  18. 8 0
      src/main/java/com/its/vms/dto/VmsConstants.java
  19. 27 0
      src/main/java/com/its/vms/dto/VmsControlMode.java
  20. 36 0
      src/main/java/com/its/vms/dto/VmsDownload.java
  21. 55 0
      src/main/java/com/its/vms/dto/VmsEvent.java
  22. 18 0
      src/main/java/com/its/vms/dto/VmsLuminance.java
  23. 20 0
      src/main/java/com/its/vms/dto/VmsModule.java
  24. 52 0
      src/main/java/com/its/vms/dto/VmsSchedule.java
  25. 29 134
      src/main/java/com/its/vms/entity/TbVmsAtmp.java
  26. 76 5
      src/main/java/com/its/vms/entity/TbVmsCtlr.java
  27. 9 1
      src/main/java/com/its/vms/entity/TbVmsFontColr.java
  28. 9 1
      src/main/java/com/its/vms/entity/TbVmsFontName.java
  29. 27 11
      src/main/java/com/its/vms/entity/TbVmsForm.java
  30. 29 1
      src/main/java/com/its/vms/entity/TbVmsFormObject.java
  31. 0 40
      src/main/java/com/its/vms/entity/TbVmsIfsc.java
  32. 32 2
      src/main/java/com/its/vms/entity/TbVmsIfscTraf.java
  33. 28 5
      src/main/java/com/its/vms/entity/TbVmsRltnIfsc.java
  34. 12 2
      src/main/java/com/its/vms/entity/TbVmsSymbIfsc.java
  35. 8 41
      src/main/java/com/its/vms/entity/TbVmsSymbLib.java
  36. 41 0
      src/main/java/com/its/vms/entity/eVmsDownload.java
  37. 42 0
      src/main/java/com/its/vms/entity/eVmsDownloadStep.java
  38. 41 0
      src/main/java/com/its/vms/entity/eVmsReqBoardPower.java
  39. 42 0
      src/main/java/com/its/vms/entity/eVmsReqControl.java
  40. 41 0
      src/main/java/com/its/vms/entity/eVmsSendResult.java
  41. 9 9
      src/main/java/com/its/vms/global/AppRepository.java
  42. 13 20
      src/main/java/com/its/vms/process/DbmsDataProcess.java
  43. 70 0
      src/main/java/com/its/vms/service/AppRepositoryService.java
  44. 15 16
      src/main/java/com/its/vms/service/VmsAtmpService.java
  45. 29 37
      src/main/java/com/its/vms/service/VmsCtlrService.java
  46. 10 10
      src/main/java/com/its/vms/service/VmsFontService.java
  47. 12 13
      src/main/java/com/its/vms/service/VmsFormService.java
  48. 20 16
      src/main/java/com/its/vms/service/VmsIfscService.java
  49. 87 2
      src/main/java/com/its/vms/service/VmsManageService.java
  50. 17 17
      src/main/java/com/its/vms/service/VmsSymbService.java
  51. 18 8
      src/main/java/com/its/vms/ui/MainUI.java
  52. 22 13
      src/main/java/com/its/vms/webapp/controller/WebAppController.java
  53. 7 2
      src/main/java/com/its/vms/xnettcp/center/handler/CenterTcpServerInboundHandler.java
  54. 5 3
      src/main/java/com/its/vms/xnettcp/vms/VmsTcpCommServerInitializer.java
  55. 4 1
      src/main/java/com/its/vms/xnettcp/vms/VmsTcpCommServerService.java
  56. 4 2
      src/main/java/com/its/vms/xnettcp/vms/codec/VmsTcpServerDecoder.java
  57. 4 2
      src/main/java/com/its/vms/xnettcp/vms/codec/VmsTcpServerEncoder.java
  58. 5 2
      src/main/java/com/its/vms/xnettcp/vms/handler/VmsServerIdleStateHandler.java
  59. 12 12
      src/main/java/com/its/vms/xnettcp/vms/process/TcpServerDataProcess.java
  60. 26 0
      src/main/java/com/its/vms/xnettcp/vms/process/TcpServerSendData.java
  61. 98 0
      src/main/java/com/its/vms/xnettcp/vms/process/TcpServerSendDataProcess.java
  62. 19 0
      src/main/java/com/its/vms/xnettcp/vms/protocol/dto/VmsReqControlDto.java
  63. 1 1
      src/main/resources/mybatis/mapper/VmsAtmpMapper.xml
  64. 35 18
      src/main/resources/mybatis/mapper/VmsCtlrMapper.xml
  65. 2 2
      src/main/resources/mybatis/mapper/VmsFontMapper.xml
  66. 2 2
      src/main/resources/mybatis/mapper/VmsFormMapper.xml
  67. 3 2
      src/main/resources/mybatis/mapper/VmsIfscMapper.xml
  68. 9 0
      src/main/resources/mybatis/mapper/VmsManageMapper.xml
  69. 3 2
      src/main/resources/mybatis/mapper/VmsSymbMapper.xml

+ 19 - 0
src/main/java/com/its/app/utils/ItsUtils.java

@@ -226,6 +226,12 @@ public final class ItsUtils
 		Date dtNow = new Date();
 		return sdfDate.format(dtNow);
 	}
+	public static String getSysHourMin()
+	{
+		SimpleDateFormat sdfDate = new SimpleDateFormat("HHmm");
+		Date dtNow = new Date();
+		return sdfDate.format(dtNow);
+	}
 	/**
 	 * 월 마지막날 가져오기 * @param yyyyMM
 	 * @return : yyyyMMdd
@@ -389,4 +395,17 @@ public final class ItsUtils
 		}
 		return ipAddress;
 	}
+
+
+	public static int parseIntDef(String value, int defValue) {
+		if (value == null || value.length() == 0)
+			return defValue;
+
+		String strValue = value.trim();
+		for (int i = 0; i < strValue.length(); i++) {
+			if (!Character.isDigit(strValue.charAt(i)))
+				return defValue;
+		}
+		return Integer.parseInt(strValue);
+	}
 }

+ 2 - 2
src/main/java/com/its/vms/dao/mapper/VmsAtmpMapper.java

@@ -1,6 +1,6 @@
 package com.its.vms.dao.mapper;
 
-import com.its.vms.dto.TbVmsAtmpDto;
+import com.its.vms.entity.TbVmsAtmp;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.List;
@@ -8,5 +8,5 @@ import java.util.List;
 @Mapper
 public interface VmsAtmpMapper {
 
-    List<TbVmsAtmpDto> selectVmsAtmpInfo();
+    List<TbVmsAtmp> selectVmsAtmpInfo();
 }

+ 4 - 2
src/main/java/com/its/vms/dao/mapper/VmsCtlrMapper.java

@@ -13,10 +13,12 @@ public interface VmsCtlrMapper {
 
     List<TbVmsCtlrDto> selectAll();
     List<TbVmsCtlrSttsDto> selectCtlrStts();
+
     int updateCtlrStts(@Param("obj") TbVmsCtlrSttsDto obj);
     int insertCtlrSttsHs(@Param("obj") TbVmsCtlrSttsDto obj);
-    //int insertRseCtlrCnncHs(@Param("obj") TbRseCtlrCnncHs obj);     // 접속이력
 
-    int insertVmsCtrlHs(@Param("obj") TbVmsCtrlHsDto obj);             // 제어이력
+    int insertVmsCtrlHs(@Param("obj") TbVmsCtrlHsDto obj);
     int updateVmsCtrlHs(@Param("obj") TbVmsCtrlHsDto obj);
+
+    int updateVmsCtlrParam(@Param("obj") TbVmsCtlrDto obj);
 }

+ 4 - 4
src/main/java/com/its/vms/dao/mapper/VmsFontMapper.java

@@ -1,7 +1,7 @@
 package com.its.vms.dao.mapper;
 
-import com.its.vms.dto.TbVmsFontColrDto;
-import com.its.vms.dto.TbVmsFontNameDto;
+import com.its.vms.entity.TbVmsFontColr;
+import com.its.vms.entity.TbVmsFontName;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.List;
@@ -9,6 +9,6 @@ import java.util.List;
 @Mapper
 public interface VmsFontMapper {
 
-    List<TbVmsFontNameDto> selectFontName();
-    List<TbVmsFontColrDto> selectFontColr();
+    List<TbVmsFontName> selectFontName();
+    List<TbVmsFontColr> selectFontColr();
 }

+ 4 - 4
src/main/java/com/its/vms/dao/mapper/VmsFormMapper.java

@@ -1,7 +1,7 @@
 package com.its.vms.dao.mapper;
 
-import com.its.vms.dto.TbVmsFormDto;
-import com.its.vms.dto.TbVmsFormObjectDto;
+import com.its.vms.entity.TbVmsForm;
+import com.its.vms.entity.TbVmsFormObject;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.List;
@@ -9,6 +9,6 @@ import java.util.List;
 @Mapper
 public interface VmsFormMapper {
 
-    List<TbVmsFormDto> selectVmsFormInfo();
-    List<TbVmsFormObjectDto> selectVmsFormObjectInfo();
+    List<TbVmsForm> selectVmsFormInfo();
+    List<TbVmsFormObject> selectVmsFormObjectInfo();
 }

+ 4 - 4
src/main/java/com/its/vms/dao/mapper/VmsIfscMapper.java

@@ -1,7 +1,7 @@
 package com.its.vms.dao.mapper;
 
-import com.its.vms.dto.TbVmsRltnIfscDto;
-import com.its.vms.dto.TbVmsIfscTrafDto;
+import com.its.vms.entity.TbVmsIfscTraf;
+import com.its.vms.entity.TbVmsRltnIfsc;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.List;
@@ -9,6 +9,6 @@ import java.util.List;
 @Mapper
 public interface VmsIfscMapper {
 
-    List<TbVmsRltnIfscDto> selectVmsRltnIfsc();
-    List<TbVmsIfscTrafDto> selectVmsIfscTrafInfo();
+    List<TbVmsRltnIfsc> selectVmsRltnIfsc();
+    List<TbVmsIfscTraf> selectVmsIfscTrafInfo();
 }

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

@@ -1,11 +1,15 @@
 package com.its.vms.dao.mapper;
 
+import com.its.vms.dto.TbVmsOnOffTimeDto;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.HashMap;
+import java.util.List;
 
 @Mapper
 public interface VmsManageMapper {
 
     int initVmsDsplPrst(HashMap<String, Object> obj);
+
+    List<TbVmsOnOffTimeDto> selectVmsOnOffTime();
 }

+ 4 - 4
src/main/java/com/its/vms/dao/mapper/VmsSymbMapper.java

@@ -1,7 +1,7 @@
 package com.its.vms.dao.mapper;
 
-import com.its.vms.dto.TbVmsSymbIfscDto;
-import com.its.vms.dto.TbVmsSymbLibDto;
+import com.its.vms.entity.TbVmsSymbIfsc;
+import com.its.vms.entity.TbVmsSymbLib;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.List;
@@ -9,6 +9,6 @@ import java.util.List;
 @Mapper
 public interface VmsSymbMapper {
 
-    List<TbVmsSymbLibDto> selectVmsSymbLib();
-    List<TbVmsSymbIfscDto> selectVmsSymbCellInfo();
+    List<TbVmsSymbLib> selectVmsSymbLib();
+    List<TbVmsSymbIfsc> selectVmsSymbCellInfo();
 }

+ 126 - 1
src/main/java/com/its/vms/dto/TbVmsAtmpDto.java

@@ -1,5 +1,6 @@
 package com.its.vms.dto;
 
+import com.its.app.utils.ItsUtils;
 import com.its.vms.entity.TbVmsAtmp;
 import lombok.Builder;
 import lombok.Data;
@@ -41,6 +42,8 @@ public class TbVmsAtmpDto implements Serializable {
     private String pm251hhGrad;
     private String updtDt;
 
+    private boolean isSuccess;
+
     public TbVmsAtmp toEntity() {
         return TbVmsAtmp.builder()
                 .atmpSttnNmbr(this.atmpSttnNmbr)
@@ -68,8 +71,130 @@ public class TbVmsAtmpDto implements Serializable {
                 .pm101hhGrad(this.pm101hhGrad)
                 .pm251hhGrad(this.pm251hhGrad)
                 .updtDt(this.updtDt)
-                .isSuccess(true)
                 .build();
     }
 
+    public void correct(TbVmsAtmpDto obj) {
+        obj.setMsrmDt(this.msrmDt);
+        obj.setMsrmSystNm(this.msrmSystNm);
+        obj.setCoVal(this.coVal);
+        obj.setSo2Val(this.so2Val);
+        obj.setNo2Val(this.no2Val);
+        obj.setO3Val(this.o3Val);
+        obj.setPm10Val(this.pm10Val);
+        obj.setPm1024hhVal(this.pm1024hhVal);
+        obj.setPm25Val(this.pm25Val);
+        obj.setPm2524hhVal(this.pm2524hhVal);
+        obj.setIntgAtmpVal(this.intgAtmpVal);
+        obj.setIntgAtmpGrad(this.intgAtmpGrad);
+        obj.setSo2Grad(this.so2Grad);
+        obj.setCoGrad(this.coGrad);
+        obj.setO3Grad(this.o3Grad);
+        obj.setNo2Grad(this.no2Grad);
+        obj.setPm1024hhGrad(this.pm1024hhGrad);
+        obj.setPm2524hhGrad(this.pm2524hhGrad);
+        obj.setPm101hhGrad(this.pm101hhGrad);
+        obj.setPm251hhGrad(this.pm251hhGrad);
+        obj.setUpdtDt(this.updtDt);
+        obj.setSuccess(this.isSuccess);
+    }
+
+    public String getPM10_VAL(boolean AUnit) {
+        // 미세먼지
+        if (this.isSuccess) {
+            if (AUnit)
+                return this.pm10Val + " ㎍/㎥";
+            else
+                return this.pm10Val;
+        }
+        return (AUnit) ? "- ㎍/㎥" : "-";
+    }
+
+    public String getPM25_VAL(boolean AUnit) {
+        //초미세먼지
+        if (this.isSuccess) {
+            if (AUnit)
+                return this.pm25Val + " ㎍/㎥";
+            else
+                return this.pm25Val;
+        }
+        return (AUnit) ? "- ㎍/㎥" : "-";
+    }
+
+    public String getATMP_VAL() {
+        //통합대기환경수치
+        if (this.isSuccess) {
+            return this.intgAtmpVal;
+        }
+        return "-";
+    }
+
+    public String GetO3_VAL(boolean AUnit) {
+        //오존농도
+        if (this.isSuccess) {
+            if (AUnit)
+                return this.o3Val + " ppm";
+            else
+                return this.o3Val;
+        }
+        return (AUnit) ? "- ppm" : "-";
+    }
+
+    public String getGradeDesc(int AGrad) {
+        if (!this.isSuccess) return "-";
+
+        switch(AGrad) {
+            case 1: return "좋음";
+            case 2: return "보통";
+            case 3: return "나쁨";
+            case 4: return "매우나쁨";
+        }
+        return "-";
+    }
+
+    public String getPM10_GRAD() {
+        return getGradeDesc(ItsUtils.parseIntDef(this.pm101hhGrad, 0));
+    }
+
+    public String getPM25_GRAD() {
+        return getGradeDesc(ItsUtils.parseIntDef(this.pm251hhGrad, 0));
+    }
+
+    public String getATMP_GRAD() {
+        return getGradeDesc(ItsUtils.parseIntDef(this.intgAtmpGrad, 0));
+    }
+
+    public String getO3_GRAD() {
+        return getGradeDesc(ItsUtils.parseIntDef(this.o3Grad, 0));
+    }
+
+    public int getGradeColor(int AGrad) {
+        if (!this.isSuccess) return 3;//Color.GREEN.getRGB();
+
+        switch(AGrad)
+        {
+            case 1: return 2;//밝은녹색(Lime)
+            case 2: return 5;//하늘색(Aqua)
+            case 3: return 4;//주황색(Orange)
+            case 4: return 1;//적색(Red)
+        }
+        return 3;
+    }
+
+    public int getPM10_CLR() {
+        return getGradeColor(ItsUtils.parseIntDef(this.pm101hhGrad, 0));
+    }
+
+    public int getPM25_CLR() {
+        return getGradeColor(ItsUtils.parseIntDef(this.pm251hhGrad, 0));
+    }
+
+    public int getATMP_CLR() {
+        return getGradeColor(ItsUtils.parseIntDef(this.intgAtmpGrad, 0));
+    }
+
+    public int getO3_CLR() {
+        return getGradeColor(ItsUtils.parseIntDef(this.o3Grad, 0));
+    }
+
 }

+ 15 - 1
src/main/java/com/its/vms/dto/TbVmsCtlrSttsDto.java

@@ -1,7 +1,6 @@
 package com.its.vms.dto;
 
 import com.its.app.utils.SysUtils;
-import io.swagger.annotations.ApiModel;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -83,4 +82,19 @@ public class TbVmsCtlrSttsDto implements Serializable {
 
     public void setStts(int frontDoor, int backDoor, int fan, int hetr, int rtu, int tmpr, int hmdt) {
     }
+
+    public void updateStts(TbVmsCtlrSttsDto dto) {
+        this.updtDt = dto.getUpdtDt();
+        this.cmncSttsCd = dto.getCmncSttsCd();
+        this.pwerSttsCd = dto.getPwerSttsCd();
+        this.modlSttsCd = dto.getModlSttsCd();
+        this.cboxDoorSttsCd = dto.getCboxDoorSttsCd();
+        this.fanSttsCd = dto.getFanSttsCd();
+        this.hetrSttsCd = dto.getHetrSttsCd();
+        this.cboxTmpr = dto.getCboxTmpr();
+        this.brghVal = dto.getBrghVal();
+        this.commSttsCd = dto.getCommSttsCd();
+        this.modlStts = dto.getModlStts();
+        this.pwerStts = dto.getPwerStts();
+    }
 }

+ 12 - 9
src/main/java/com/its/vms/dto/TbVmsFormDto.java

@@ -5,7 +5,7 @@ import lombok.Builder;
 import lombok.Data;
 
 import java.io.Serializable;
-import java.util.ArrayList;
+import java.util.List;
 
 /**
  *  DTO Class
@@ -29,6 +29,17 @@ public class TbVmsFormDto implements Serializable {
     private String updtDt;
     private String validYn;
 
+    private String localFileName;
+    private String ftpFileName;
+    private Integer trfBackImgId;
+
+    private boolean isTrfIfsc;     //도형식 하단 정보제공구간소통정보
+    private boolean isTrfAxis;     //도형식 하단 축소통정보
+    private boolean isTrfFixed;    //도형식 하단에 소통정보가 없을 경우 기본문자 표출여부, 20200515 추가함
+    private boolean isIsNewForm;   //신규이거나 변경된 경우 true
+
+    private List<TbVmsFormObjectDto> objs;
+
     public TbVmsForm toEntity() {
         return TbVmsForm.builder()
                 .vmsFormId(this.vmsFormId)
@@ -44,14 +55,6 @@ public class TbVmsFormDto implements Serializable {
                 .cctvMngmNmbr(this.cctvMngmNmbr)
                 .updtDt(this.updtDt)
                 .validYn(this.validYn)
-                .localFileName("")
-                .ftpFileName("")
-                .trfBackImgId(0)
-                .isTrfIfsc(false)     //도형식 하단 정보제공구간소통정보
-                .isTrfAxis(false)     //도형식 하단 축소통정보
-                .isTrfFixed(false)    //도형식 하단에 소통정보가 없을 경우 기본문자 표출여부, 20200515 추가함
-                .isIsNewForm(false)   //신규이거나 변경된 경우 true
-                .objs(new ArrayList<>())
                 .build();
     }
 

+ 2 - 1
src/main/java/com/its/vms/dto/TbVmsFormObjectDto.java

@@ -37,6 +37,8 @@ public class TbVmsFormObjectDto implements Serializable {
     private Integer symbLibNmbr;
     private Long vmsIfscId;
 
+    private TbVmsSymbLibDto vmsSymbLib;
+
     public TbVmsFormObject toEntity() {
         return TbVmsFormObject.builder()
                 .vmsFormObjectId(this.vmsFormObjectId)
@@ -61,7 +63,6 @@ public class TbVmsFormObjectDto implements Serializable {
                 .vmsDsplSize(this.vmsDsplSize)
                 .symbLibNmbr(this.symbLibNmbr)
                 .vmsIfscId(this.vmsIfscId)
-                .vmsSymbLib(null)
                 .build();
     }
 

+ 6 - 17
src/main/java/com/its/vms/dto/TbVmsIfscTrafDto.java

@@ -1,10 +1,9 @@
 package com.its.vms.dto;
 
 import com.its.vms.entity.TbVmsIfscTraf;
-import io.swagger.annotations.ApiModel;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
-import lombok.Getter;
+import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
@@ -12,7 +11,7 @@ import java.io.Serializable;
 /**
  *  Entity Class
  */
-@Getter
+@Data
 @Builder
 @NoArgsConstructor//(access = AccessLevel.PROTECTED)
 @AllArgsConstructor
@@ -30,11 +29,15 @@ public class TbVmsIfscTrafDto implements Serializable {
     private Integer cngstSpd;
     private String useYn;
 
+    // 교통정보
     private String prcnDt;
     private String cmtrGradCd;
     private Integer sped;
     private Integer trvlHh;
 
+    private Integer cngstCnt;
+    private String cngstDt;
+
     public TbVmsIfscTraf toEntity() {
         return TbVmsIfscTraf.builder()
                 .vmsIfscId(this.vmsIfscId)
@@ -49,21 +52,7 @@ public class TbVmsIfscTrafDto implements Serializable {
                 .cmtrGradCd(this.cmtrGradCd)
                 .sped(this.sped)
                 .trvlHh(this.trvlHh)
-                .cngstCnt(0)
-                .cngstDt("")
                 .build();
     }
 
-    public void trafCopy(TbVmsIfscTraf traf) {
-        traf.setDsplStrtNodeNm(this.dsplStrtNodeNm);
-        traf.setDsplEndNodeNm(this.dsplEndNodeNm);
-        traf.setDetrId(this.detrId);
-        traf.setRoadNm(this.roadNm);
-        traf.setSpotNm(this.spotNm);
-        traf.setAxisYn(this.axisYn);
-        traf.setPrcnDt(this.prcnDt);
-        traf.setCmtrGradCd(this.cmtrGradCd);
-        traf.setSped(this.sped);
-        traf.setTrvlHh(this.trvlHh);
-    }
 }

+ 20 - 0
src/main/java/com/its/vms/dto/TbVmsOnOffTimeDto.java

@@ -0,0 +1,20 @@
+package com.its.vms.dto;
+
+import lombok.Builder;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *  DTO Class
+ */
+@Data
+@Builder
+public class TbVmsOnOffTimeDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private Long vmsCtlrNmbr;
+    private String panlOnTime;
+    private String panlOffTime;
+
+}

+ 9 - 15
src/main/java/com/its/vms/dto/TbVmsRltnIfscDto.java

@@ -1,10 +1,9 @@
 package com.its.vms.dto;
 
 import com.its.vms.entity.TbVmsRltnIfsc;
-import io.swagger.annotations.ApiModel;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
-import lombok.Getter;
+import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
@@ -12,7 +11,7 @@ import java.io.Serializable;
 /**
  *  Entity Class
  */
-@Getter
+@Data
 @Builder
 @NoArgsConstructor//(access = AccessLevel.PROTECTED)
 @AllArgsConstructor
@@ -24,8 +23,12 @@ public class TbVmsRltnIfscDto implements Serializable {
     private Integer dsplPrrt;
     private String axisYn;
     private Integer cngstSped;
+    private boolean cngstCnfmYn;
     private Integer cngstCnfmSped;
-    private String cngstCnfmYn;
+
+    private boolean isUsed;
+    private int cngstCnt;
+    private String cngstDt;
 
     public TbVmsRltnIfsc toEntity() {
         return TbVmsRltnIfsc.builder()
@@ -34,19 +37,10 @@ public class TbVmsRltnIfscDto implements Serializable {
                 .dsplPrrt(this.dsplPrrt)
                 .axisYn(this.axisYn)
                 .cngstSped(this.cngstSped)
-                .cngstCnfmYn("Y".equals(this.cngstCnfmYn))
                 .cngstCnfmSped(this.cngstCnfmSped)
-                .isUsed(true)
-                .cngstCnt(0)
-                .cngstDt("")
+                .cngstCnfmYn(this.cngstCnfmYn ? "Y" : "N")
                 .build();
     }
 
-    public void rltnIfscCopy(TbVmsRltnIfsc rltnIfsc) {
-        rltnIfsc.setDsplPrrt(this.dsplPrrt);
-        rltnIfsc.setAxisYn(this.axisYn);
-        rltnIfsc.setCngstSped(this.cngstSped);
-        rltnIfsc.setCngstCnfmYn("Y".equals(this.cngstCnfmYn));
-        rltnIfsc.setCngstCnfmSped(this.cngstCnfmSped);
-    }
+
 }

+ 2 - 1
src/main/java/com/its/vms/dto/TbVmsSymbIfscDto.java

@@ -21,6 +21,8 @@ public class TbVmsSymbIfscDto implements Serializable {
     private Long vmsIfscId;
     private String updtDt;
 
+    private boolean isDup;
+
     public TbVmsSymbIfsc toEntity() {
         return TbVmsSymbIfsc.builder()
                 .symbLibNmbr(this.symbLibNmbr)
@@ -29,7 +31,6 @@ public class TbVmsSymbIfscDto implements Serializable {
                 .posY(this.posY)
                 .vmsIfscId(this.vmsIfscId == null ? 0 : this.vmsIfscId)
                 .updtDt(this.updtDt)
-                .isDup(false)
                 .build();
     }
 

+ 82 - 26
src/main/java/com/its/vms/dto/TbVmsSymbLibDto.java

@@ -4,20 +4,28 @@ import com.its.vms.entity.TbVmsSymbLib;
 import com.its.vms.entity.eVmsImageType;
 import lombok.Builder;
 import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
 
+import javax.imageio.ImageIO;
+import java.awt.*;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 
 /**
  *  DTO Class
  */
+@Slf4j
 @Data
 @Builder
 public class TbVmsSymbLibDto implements Serializable {
     private static final long serialVersionUID = 1L;
 
-    private Integer symbLibNmbr;
+    private String symbLibNmbr;
+    private Integer orgSymbLibNmbr;
     private String rgstDt;
     private byte[] redData;
     private byte[] greenData;
@@ -35,12 +43,18 @@ public class TbVmsSymbLibDto implements Serializable {
     private Integer posX;
     private Integer posY;
 
+    private eVmsImageType imagType;
+    private String localFileName;
+    private String ftpFileName;
+
+    private List<String> gradSymbLibNmbrList = new ArrayList<>();
+    private HashMap<Integer, TbVmsSymbIfscDto> cellMap = new HashMap<>();
+
+
     public TbVmsSymbLib toEntity() {
         // 소통정보이미지 때문에 이미지번호에 "0" 을 추가하여 이미지번호로 사용함
-
-        TbVmsSymbLib obj = TbVmsSymbLib.builder()
-                .symbLibNmbr(this.symbLibNmbr+"0")
-                .orgSymbLibNmbr(this.symbLibNmbr)
+        return TbVmsSymbLib.builder()
+                .symbLibNmbr(Integer.parseInt(this.symbLibNmbr))
                 .rgstDt(this.rgstDt)
                 .redData(this.redData)
                 .greenData(this.greenData)
@@ -57,40 +71,82 @@ public class TbVmsSymbLibDto implements Serializable {
                 .updtDt(this.updtDt)
                 .posX(this.posX)
                 .posY(this.posY)
-                .gradSymbLibNmbrList(new ArrayList<>())
-                .cellMap(new HashMap<>())
                 .build();
-
-        TbVmsSymbLibDto.setSymbInfo(obj);
-
-        return obj;
     }
 
-    public static void setSymbInfo(TbVmsSymbLib obj) {
-        obj.setImagType(eVmsImageType.vms_image_type_bmp);
+    public void setSymbInfo() {
+        setImagType(eVmsImageType.vms_image_type_bmp);
 
         String symbFileName = "";
-        if ("SBT3".equals(obj.getSymbType())) {
-            symbFileName = obj.getSymbFileNm();
-            obj.setImagType(eVmsImageType.vms_image_type_video);
+        if ("SBT3".equals(getSymbType())) {
+            symbFileName = getSymbFileNm();
+            setImagType(eVmsImageType.vms_image_type_video);
         }
         else {
-            switch(obj.getImagType()) {
-                case vms_image_type_bmp: symbFileName = obj.getSymbLibNmbr()+".bmp"; break;
-                case vms_image_type_gif: symbFileName = obj.getSymbLibNmbr()+".gif"; break;
-                case vms_image_type_jpg: symbFileName = obj.getSymbLibNmbr()+".jpg"; break;
-                case vms_image_type_png: symbFileName = obj.getSymbLibNmbr()+".png"; break;
+            switch(getImagType()) {
+                case vms_image_type_bmp: symbFileName = getSymbLibNmbr()+".bmp"; break;
+                case vms_image_type_gif: symbFileName = getSymbLibNmbr()+".gif"; break;
+                case vms_image_type_jpg: symbFileName = getSymbLibNmbr()+".jpg"; break;
+                case vms_image_type_png: symbFileName = getSymbLibNmbr()+".png"; break;
                 default:
-                    if (obj.getSymbFileNm() == null || obj.getSymbFileNm().trim().length() == 0) {
-                        symbFileName = obj.getSymbLibNmbr()+".avi";
+                    if (getSymbFileNm() == null || getSymbFileNm().trim().length() == 0) {
+                        symbFileName = getSymbLibNmbr()+".avi";
                     }
                     else {
-                        symbFileName = obj.getSymbFileNm().trim();
+                        symbFileName = getSymbFileNm().trim();
                     }
                     break;
             }
         }
-        obj.setSymbFileNm(symbFileName);
-        obj.setLocalFileName(symbFileName);
+        setSymbFileNm(symbFileName);
+        setLocalFileName(symbFileName);
+    }
+
+    public Image getImage() {
+        if (this.imagData == null || this.imagData.length == 0) {
+            log.error("getImage: Image Data null: {}", this.orgSymbLibNmbr);
+            return null;
+        }
+
+        try (
+                ByteArrayInputStream bis = new ByteArrayInputStream(this.imagData);
+        ) {
+            return ImageIO.read(bis);
+        } catch (IOException e) {
+            log.error("getImage: IOException: {}", this.orgSymbLibNmbr);
+        }
+        return null;
+    }
+
+    public TbVmsSymbLibDto clone(String symbLibNmbr) {
+        TbVmsSymbLibDto obj = TbVmsSymbLibDto.builder()
+                .symbLibNmbr(symbLibNmbr)
+                .orgSymbLibNmbr(this.orgSymbLibNmbr)
+                .rgstDt(this.rgstDt)
+                .redData(this.redData)
+                .greenData(this.greenData)
+                .symbExpl(this.symbExpl)
+                .imagData(this.imagData)
+                .vmsTypeCd(this.vmsTypeCd)
+                .symbImagType(this.symbImagType)
+                .symbFileNm(this.symbFileNm)
+                .symbType(this.symbType)
+                .aviData(this.aviData)
+                .imagSize(this.imagSize)
+                .playTm(this.playTm)
+                .delYn(this.delYn)
+                .updtDt(this.updtDt)
+                .posX(this.posX)
+                .posY(this.posY)
+                .imagType(this.imagType)
+                .localFileName(this.localFileName)
+                .ftpFileName(this.ftpFileName)
+                .gradSymbLibNmbrList( new ArrayList<>())
+                .cellMap(new HashMap<>())
+                .build();
+
+        obj.setSymbInfo();
+
+        return obj;
     }
 }

+ 8 - 0
src/main/java/com/its/vms/dto/VmsConstants.java

@@ -0,0 +1,8 @@
+package com.its.vms.dto;
+
+public class VmsConstants {
+
+    public static int VMS_MAX_RETRY_COUNT = 3;
+    public static int VMS_MAX_DOWNLOAD = 8;     // 최대 VMS 다운로드
+
+}

+ 27 - 0
src/main/java/com/its/vms/dto/VmsControlMode.java

@@ -0,0 +1,27 @@
+package com.its.vms.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *  DTO Class
+ */
+@Data
+public class VmsControlMode implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private byte   control;                /* VMS 제어모드 */
+    private String manSceId;               /* 수동시나리오ID */
+    private String emeSceId;               /* 긴급시나리오ID */
+    private String curSceId;               /* 현재시나리오ID */
+
+    private boolean isEnable;                 /* 활성화 여부 */
+    private int     maxDisplayForm;         /* 최대 표출폼 갯수 */
+    private String  svcDate;                /* 제공시각 */
+    int             saveFlag;               /* 제공정보 저장 여부 */
+    //TDateTime   pTimer;                 /* timer for provide */
+    private boolean isResult;
+    private boolean isSchedule;               /* 스케줄에 의한 다운로드 인 경우 */
+
+}

+ 36 - 0
src/main/java/com/its/vms/dto/VmsDownload.java

@@ -0,0 +1,36 @@
+package com.its.vms.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *  DTO Class
+ */
+@Data
+public class VmsDownload implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    public VmsDownload() {
+        this.units = new ArrayList<>();
+    }
+
+    private boolean isEnable;             	/* 활성화 여부 */
+    private int     saveFlag;               /* 다운로드정보 저장 여부 */
+    //TDateTime   dTimer;                 /* timer for download */
+    private int     count;                  /* 정보 갯수 */
+
+    List<VmsDownloadInfo> units;
+
+    @Data
+    public class VmsDownloadInfo {
+        private String regDate;           	/* 등록일시 */
+        private String fileType;          	/* 다운로드 파일유형 */
+        private String fileId;            	/* 다운로드 파일 ID */
+        private String sendStartDate;     	/* 전송시작시각 */
+        private String sendEndDate;       	/* 전송완료시각 */
+        private int    sendStep;            /* 전송진행단계 */
+    }
+}

+ 55 - 0
src/main/java/com/its/vms/dto/VmsEvent.java

@@ -0,0 +1,55 @@
+package com.its.vms.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *  DTO Class
+ */
+@Data
+public class VmsEvent implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    public VmsEvent() {
+        this.units = new ArrayList<>();
+    }
+
+    List<VmsEventDetl> units;
+
+    public int getCount() {
+        return this.units.size();
+    }
+
+    @Data
+    public class VmsEventDetl {
+        private String LINK_ID;
+        private String IFSC_ID;
+        private String VMS_IFSC_ID;
+        private String VMS_IFSC_NM;
+        private String DSPL_STRT_NODE_NM;
+        private String DSPL_END_NODE_NM;
+        private String DETR_ID;
+        private String DSPL_PRRT;
+        private String INCD_OCRR_ID;
+        private String STRT_LCTN_NM;
+        private String END_LCTN_NM;
+        private String OCRR_LCTN_NM;
+        private String VMS_INCD_TYPE_NM;
+        private String VMS_INCD_TYPE_CD;
+        private String VMS_INCD_DETL_NM;
+        private String VMS_INCD_DETL_TYPE_CD;
+        private String CMTR_GRAD_NM;
+        private String CMTR_GRAD_CD;
+        private String INCD_CLSR_LANE;
+        private String INCD_STRT_DT;
+        private String INCD_END_PRAR_DT;
+        private String ROAD_NM;
+        private String SPOT_NM;
+        private String VMS_INCD_RSTR_TYPE_CD;
+        private String VMS_INCD_RSTR_TYPE_NM;
+        private String INCD_TITL;
+    }
+}

+ 18 - 0
src/main/java/com/its/vms/dto/VmsLuminance.java

@@ -0,0 +1,18 @@
+package com.its.vms.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *  DTO Class
+ */
+@Data
+public class VmsLuminance implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String scheduleTime;
+    private int    value;
+    private int    retry;
+
+}

+ 20 - 0
src/main/java/com/its/vms/dto/VmsModule.java

@@ -0,0 +1,20 @@
+package com.its.vms.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *  DTO Class
+ */
+@Data
+public class VmsModule implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private boolean isOnOff;
+    private byte    onOff;
+    private String  powerOnTime;    /* ON TIME */
+    private String  powerOffTime;   /* OFF TIME */
+    private int     retry;
+
+}

+ 52 - 0
src/main/java/com/its/vms/dto/VmsSchedule.java

@@ -0,0 +1,52 @@
+package com.its.vms.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *  DTO Class
+ */
+@Data
+public class VmsSchedule implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    public VmsSchedule() {
+        this.units = new ArrayList<>();
+    }
+
+    List<VmsScheduleDetl> units;
+
+    public int getCount() {
+        return this.units.size();
+    }
+
+    @Data
+    public class VmsScheduleDetl {
+        private String VMS_SCH_TYPE;        //VARCHAR2(5)	N			VMS 스케줄 유형(A:자동,F:고정,B:기본)
+        private int    VMS_SCH_FORM_TYPE;   //NUMBER(3)	    N			VMS 폼 스케쥴 유형(0:교통,1:돌발,2:공사행사,3:홍보,4:우회,5:정체,6:안전,7:동영상,8:스트리밍영상)
+        private int    PHASE;               //NUMBER(2)	    N			PHASE
+        private String VMS_FORM_ID;         //NUMBER(5)	    Y			VMS FORM ID
+        private int    DSPL_HH;             //NUMBER(3)	    Y	0		표출 시간
+        private String DSPL_STRT_HH;        //VARCHAR2(14)	N			표출시작시간
+        private String DSPL_END_HH;         //VARCHAR2(14)	N			표출종료시간
+        private String FRST_VMS_IFSC_ID;    //NUMBER(10)	Y			1단 VMS 정보제공구간 ID
+        private String SECD_VMS_IFSC_ID;    //NUMBER(10)	Y			2단 VMS 정보제공구간 ID
+        private String THIR_VMS_IFSC_ID;    //NUMBER(10)	Y			3단 VMS 정보제공구간 ID
+        private String FOUR_VMS_IFSC_ID;    //NUMBER(10)	Y			4단 VMS 정보제공구간 ID
+        private String FRST_IMG_IFSC_ID;    //NUMBER(10)	Y			1단 이미지 정보제공구간 ID
+        private String SECD_IMG_IFSC_ID;    //NUMBER(10)	Y			2단 이미지 정보제공구간 ID
+        private String THIR_IMG_IFSC_ID;    //NUMBER(10)	Y			3단 이미지 정보제공구간 ID
+        private String FOUR_IMG_IFSC_ID;    //NUMBER(10)	Y			4단 이미지 정보제공구간 ID
+        private String SYMB_LIB_NMBR;       //NUMBER(4)	    Y	0		동영상인 경우 동영상 파일 심벌 아이디
+        private String STRM_ADDR;           //VARCHAR2(60)	Y			스트리밍인경우 스트리밍 주소
+
+        private String VMS_IFSC_ID;         //도형식 배경 하단 소통정보 제공구간 ID
+
+        private boolean DSPL_CNGS_YN;
+
+        private VmsEvent.VmsEventDetl event;
+    }
+}

+ 29 - 134
src/main/java/com/its/vms/entity/TbVmsAtmp.java

@@ -1,5 +1,6 @@
 package com.its.vms.entity;
 
+import com.its.vms.dto.TbVmsAtmpDto;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -44,140 +45,34 @@ public class TbVmsAtmp implements Serializable {
     private String pm251hhGrad;
     private String updtDt;
 
-    private boolean isSuccess;
-
-    public void correct(TbVmsAtmp obj) {
-        obj.setMsrmDt(this.msrmDt);
-        obj.setMsrmSystNm(this.msrmSystNm);
-        obj.setCoVal(this.coVal);
-        obj.setSo2Val(this.so2Val);
-        obj.setNo2Val(this.no2Val);
-        obj.setO3Val(this.o3Val);
-        obj.setPm10Val(this.pm10Val);
-        obj.setPm1024hhVal(this.pm1024hhVal);
-        obj.setPm25Val(this.pm25Val);
-        obj.setPm2524hhVal(this.pm2524hhVal);
-        obj.setIntgAtmpVal(this.intgAtmpVal);
-        obj.setIntgAtmpGrad(this.intgAtmpGrad);
-        obj.setSo2Grad(this.so2Grad);
-        obj.setCoGrad(this.coGrad);
-        obj.setO3Grad(this.o3Grad);
-        obj.setNo2Grad(this.no2Grad);
-        obj.setPm1024hhGrad(this.pm1024hhGrad);
-        obj.setPm2524hhGrad(this.pm2524hhGrad);
-        obj.setPm101hhGrad(this.pm101hhGrad);
-        obj.setPm251hhGrad(this.pm251hhGrad);
-        obj.setUpdtDt(this.updtDt);
-        obj.setSuccess(this.isSuccess);
-    }
-
-    public String getPM10_VAL(boolean AUnit) {
-        // 미세먼지
-        if (this.isSuccess) {
-            if (AUnit)
-                return this.pm10Val + " ㎍/㎥";
-            else
-                return this.pm10Val;
-        }
-        return (AUnit) ? "- ㎍/㎥" : "-";
-    }
-    
-    public String getPM25_VAL(boolean AUnit) {
-        //초미세먼지
-        if (this.isSuccess) {
-            if (AUnit)
-                return this.pm25Val + " ㎍/㎥";
-            else
-                return this.pm25Val;
-        }
-        return (AUnit) ? "- ㎍/㎥" : "-";
-    }
-    
-    public String getATMP_VAL() {
-        //통합대기환경수치
-        if (this.isSuccess) {
-            return this.intgAtmpVal;
-        }
-        return "-";
-    }
-    
-    public String GetO3_VAL(boolean AUnit) {
-        //오존농도
-        if (this.isSuccess) {
-            if (AUnit)
-                return this.o3Val + " ppm";
-            else
-                return this.o3Val;
-        }
-        return (AUnit) ? "- ppm" : "-";
-    }
-    
-    public String getGradeDesc(int AGrad) {
-        if (!this.isSuccess) return "-";
-
-        switch(AGrad) {
-            case 1: return "좋음";
-            case 2: return "보통";
-            case 3: return "나쁨";
-            case 4: return "매우나쁨";
-        }
-        return "-";
-    }
-    
-    public String getPM10_GRAD() {
-        return getGradeDesc(parseDefInt(this.pm101hhGrad, 0));
-    }
-    
-    public String getPM25_GRAD() {
-        return getGradeDesc(parseDefInt(this.pm251hhGrad, 0));
-    }
-    
-    public String getATMP_GRAD() {
-        return getGradeDesc(parseDefInt(this.intgAtmpGrad, 0));
-    }
-    
-    public String getO3_GRAD() {
-        return getGradeDesc(parseDefInt(this.o3Grad, 0));
-    }
-    
-    public int getGradeColor(int AGrad) {
-        if (!this.isSuccess) return 3;//Color.GREEN.getRGB();
-
-        switch(AGrad)
-        {
-            case 1: return 2;//밝은녹색(Lime)
-            case 2: return 5;//하늘색(Aqua)
-            case 3: return 4;//주황색(Orange)
-            case 4: return 1;//적색(Red)
-        }
-        return 3;
-    }
-    
-    public int getPM10_CLR() {
-        return getGradeColor(parseDefInt(this.pm101hhGrad, 0));
-    }
-    
-    public int getPM25_CLR() {
-        return getGradeColor(parseDefInt(this.pm251hhGrad, 0));
-    }
-    
-    public int getATMP_CLR() {
-        return getGradeColor(parseDefInt(this.intgAtmpGrad, 0));
-    }
-    
-    public int getO3_CLR() {
-        return getGradeColor(parseDefInt(this.o3Grad, 0));
+    public TbVmsAtmpDto toDto() {
+        return TbVmsAtmpDto.builder()
+                .atmpSttnNmbr(this.atmpSttnNmbr)
+                .atmpSttnNm(this.atmpSttnNm)
+                .vmsDispNm(this.vmsDispNm)
+                .delYn(this.delYn)
+                .msrmDt(this.msrmDt)
+                .msrmSystNm(this.msrmSystNm)
+                .coVal(this.coVal)
+                .so2Val(this.so2Val)
+                .no2Val(this.no2Val)
+                .o3Val(this.o3Val)
+                .pm10Val(this.pm10Val)
+                .pm1024hhVal(this.pm1024hhVal)
+                .pm25Val(this.pm25Val)
+                .pm2524hhVal(this.pm2524hhVal)
+                .intgAtmpVal(this.intgAtmpVal)
+                .intgAtmpGrad(this.intgAtmpGrad)
+                .so2Grad(this.so2Grad)
+                .coGrad(this.coGrad)
+                .o3Grad(this.o3Grad)
+                .no2Grad(this.no2Grad)
+                .pm1024hhGrad(this.pm1024hhGrad)
+                .pm2524hhGrad(this.pm2524hhGrad)
+                .pm101hhGrad(this.pm101hhGrad)
+                .pm251hhGrad(this.pm251hhGrad)
+                .updtDt(this.updtDt)
+                .build();
     }
 
-    private int parseDefInt(String value, int defValue) {
-        if (value == null || value.length() == 0)
-            return defValue;
-
-        String strValue = value.trim();
-        for (int i = 0; i < strValue.length(); i++) {
-            if (!Character.isDigit(strValue.charAt(i)))
-                return defValue;
-        }
-        return Integer.parseInt(strValue);
-    }
 }

+ 76 - 5
src/main/java/com/its/vms/entity/TbVmsCtlr.java

@@ -1,10 +1,10 @@
 package com.its.vms.entity;
 
 import com.its.app.utils.SysUtils;
-import com.its.vms.dto.NET;
-import com.its.vms.dto.TbVmsCtlrSttsDto;
-import com.its.vms.dto.TbVmsCtrlHsDto;
+import com.its.vms.dto.*;
 import com.its.vms.xnettcp.vms.handler.VmsServerIdleStateHandler;
+import com.its.vms.xnettcp.vms.process.TcpServerSendData;
+import com.its.vms.xnettcp.vms.process.TcpServerSendDataProcess;
 import com.its.vms.xnettcp.vms.protocol.VmsFrameSequence;
 import com.its.vms.xnettcp.vms.protocol.enums.eControlCommand;
 import com.its.vms.xnettcp.vms.protocol.enums.eControlDeviceId;
@@ -85,19 +85,30 @@ public class TbVmsCtlr implements Serializable {
     private boolean isFtpDownload;
     private boolean isSymbolDownload;
 
+    /**
+     * VMS 메시지 생성 메모리
+     */
+    private VmsSchedule schedule;   // 스케쥴 정보
+    private VmsEvent incident;      // 돌발정보
+    private VmsEvent event;         // 공사행사정보
+
+    private VmsModule module;
+    private VmsLuminance luminance;
+    private VmsControlMode controlMode;
+    private VmsDownload download;
 
     private TbVmsCtlrSttsDto stts;
     private int 			  netState;
     private boolean           isDupCon;
     private boolean           isDupLogin;
     private String 		      dstIpAddr;
-    private Channel channel;
+    private Channel           channel;
     private Channel           dupChannel;
     private InetSocketAddress cliReq;
     private long              syncTime;
     private VmsFrameSequence seq;
 
-    private ConcurrentHashMap<Long, TbVmsRltnIfsc> rltnIfscMap = null;
+    private ConcurrentHashMap<Long, TbVmsRltnIfscDto> rltnIfscMap = null;
 
     //private ConcurrentHashMap<Long, C2CAuthenticatedMessage> registeredCommands = null;
     private ConcurrentHashMap<Long, Timer> registeredCommandsTimer = null;
@@ -108,6 +119,8 @@ public class TbVmsCtlr implements Serializable {
     private String disConnectTm;
     private long lastRecvTime;
 
+    private TcpServerSendDataProcess dataProcess;
+
     public void init() {
         this.stts = new TbVmsCtlrSttsDto(this.ctlrNmbr);
         this.seq  = new VmsFrameSequence();
@@ -115,6 +128,15 @@ public class TbVmsCtlr implements Serializable {
         this.userCommands = new ConcurrentHashMap<>();
         this.rltnIfscMap = new ConcurrentHashMap<>();
 
+        this.schedule = new VmsSchedule();   // 스케쥴 정보
+        this.incident = new VmsEvent();      // 돌발정보
+        this.event = new VmsEvent();         // 공사행사정보
+
+        this.module = new VmsModule();
+        this.luminance = new VmsLuminance();
+        this.controlMode = new VmsControlMode();
+        this.download = new VmsDownload();
+
         this.connectCount = 0;
         this.connectTm = "-";
         this.disConnectTm = "-";
@@ -124,6 +146,13 @@ public class TbVmsCtlr implements Serializable {
         this.isSymbolDownload = false;
 
         initNet();
+
+        this.dataProcess = new TcpServerSendDataProcess(this);
+        this.dataProcess.run();
+    }
+
+    public void addRequestData(TcpServerSendData data) {
+        this.dataProcess.add(data);
     }
 
     public synchronized void connected(ChannelHandlerContext ctx) {
@@ -354,4 +383,46 @@ public class TbVmsCtlr implements Serializable {
         return true;
         //return FredResponse.sendFrED(this, getChannel());
     }
+
+    public TbVmsCtlrDto toDto() {
+        return TbVmsCtlrDto.builder()
+                .vmsCtlrNmbr(this.ctlrNmbr)
+                .vmsCtlrLocalNo(this.ctlrLocalNo)
+                .vmsCtlrId(this.ctlrId)
+                .vmsNm(this.name)
+                .vmsCtlrIp(this.ctlrIp)
+                .vmsUsagTypeCd(this.usagTypeCd)
+                .vmsFrmTypeCd(this.frmTypeCd)
+                .vmsTypeCd(this.typeCd)
+                .vmsModlTypeCd(this.modlTypeCd)
+                .vmsCtlrPort(this.ctlrPort)
+                .operMode(this.operMode)
+                .cmncFailRate(this.cmncFailRate)
+                .brghNghtStep(this.brghNghtStep)
+                .brghWeekStep(this.brghWeekStep)
+                .defPhseChngCycl(this.defPhseChngCycl)
+                .modlErrRate(this.modlErrRate)
+                .cmncfailSlotNmbr(this.cmncfailSlotNmbr)
+                .pwerFailSlotNmbr(this.pwerFailSlotNmbr)
+                .delYn(this.delYn)
+                .cmtrinfrCnctYn(this.cmtrinfrCnctYn)
+                .wthrinfrCnctYn(this.wthrinfrCnctYn)
+                .envrinfrCnctYn(this.envrinfrCnctYn)
+                .vmsMaxPhseNum(this.maxPhseNum)
+                .panlOnTime(this.panlOnTime)
+                .panlOffTime(this.panlOffTime)
+                .panlPwerMode(this.panlPwerMode)
+                .brghMode(this.brghMode)
+                .istlLctnNm(this.istlLctnNm)
+                .trfcStrgUseYn(this.trfcStrgUseYn)
+                .vmsLocIfscId(this.locIfscId)
+                .fanRunTmpr(this.fanRunTmpr)
+                .hetrRunTmpr(this.hetrRunTmpr)
+                .fanMode(this.fanMode)
+                .hetrMode(this.hetrMode)
+                .brghCurrStep(this.brghCurrStep)
+                .istlLctnAddr(this.istlLctnAddr)
+                .protocolVer(this.protocolVer)
+                .build();
+    }
 }

+ 9 - 1
src/main/java/com/its/vms/entity/TbVmsFontColr.java

@@ -1,6 +1,6 @@
 package com.its.vms.entity;
 
-import io.swagger.annotations.ApiModel;
+import com.its.vms.dto.TbVmsFontColrDto;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Getter;
@@ -23,4 +23,12 @@ public class TbVmsFontColr implements Serializable {
     private Long vmsFontColrVal;
     private String useYn;
 
+    public TbVmsFontColrDto toDto() {
+        return TbVmsFontColrDto.builder()
+                .vmsFontColrCd(this.vmsFontColrCd)
+                .vmsFontColrNm(this.vmsFontColrNm)
+                .vmsFontColrVal(this.vmsFontColrVal)
+                .useYn(this.useYn)
+                .build();
+    }
 }

+ 9 - 1
src/main/java/com/its/vms/entity/TbVmsFontName.java

@@ -1,6 +1,6 @@
 package com.its.vms.entity;
 
-import io.swagger.annotations.ApiModel;
+import com.its.vms.dto.TbVmsFontNameDto;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Getter;
@@ -22,4 +22,12 @@ public class TbVmsFontName implements Serializable {
     private String vmsFontNameNm;
     private String useYn;
 
+    public TbVmsFontNameDto toDto() {
+        return TbVmsFontNameDto.builder()
+                .vmsFontNameCd(this.vmsFontNameCd)
+                .vmsFontNameNm(this.vmsFontNameNm)
+                .useYn(this.useYn)
+                .build();
+    }
+
 }

+ 27 - 11
src/main/java/com/its/vms/entity/TbVmsForm.java

@@ -1,12 +1,13 @@
 package com.its.vms.entity;
 
+import com.its.vms.dto.TbVmsFormDto;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
-import java.util.List;
+import java.util.ArrayList;
 
 /**
  *  Entity Class
@@ -32,14 +33,29 @@ public class TbVmsForm implements Serializable {
     private String updtDt;
     private String validYn;
 
-    private String localFileName;
-    private String ftpFileName;
-    private Integer trfBackImgId;
-
-    private boolean isTrfIfsc;     //도형식 하단 정보제공구간소통정보
-    private boolean isTrfAxis;     //도형식 하단 축소통정보
-    private boolean isTrfFixed;    //도형식 하단에 소통정보가 없을 경우 기본문자 표출여부, 20200515 추가함
-    private boolean isIsNewForm;   //신규이거나 변경된 경우 true
-
-    private List<TbVmsFormObject> objs;
+    public TbVmsFormDto toDto() {
+        return TbVmsFormDto.builder()
+                .vmsFormId(this.vmsFormId)
+                .vmsTypeCd(this.vmsTypeCd)
+                .vmsFormTypeCd(this.vmsFormTypeCd)
+                .vmsFormColrCd(this.vmsFormColrCd)
+                .vmsFormNm(this.vmsFormNm)
+                .vmsFormExpl(this.vmsFormExpl)
+                .vmsFormDsplDrctCd(this.vmsFormDsplDrctCd)
+                .symbLibNmbr(this.symbLibNmbr)
+                .vmsFormImag(this.vmsFormImag)
+                .vmsFormDsplMthdCd(this.vmsFormDsplMthdCd)
+                .cctvMngmNmbr(this.cctvMngmNmbr)
+                .updtDt(this.updtDt)
+                .validYn(this.validYn)
+                .localFileName("")
+                .ftpFileName("")
+                .trfBackImgId(0)
+                .isTrfIfsc(false)     //도형식 하단 정보제공구간소통정보
+                .isTrfAxis(false)     //도형식 하단 축소통정보
+                .isTrfFixed(false)    //도형식 하단에 소통정보가 없을 경우 기본문자 표출여부, 20200515 추가함
+                .isIsNewForm(false)   //신규이거나 변경된 경우 true
+                .objs(new ArrayList<>())
+                .build();
+    }
 }

+ 29 - 1
src/main/java/com/its/vms/entity/TbVmsFormObject.java

@@ -1,5 +1,6 @@
 package com.its.vms.entity;
 
+import com.its.vms.dto.TbVmsFormObjectDto;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -40,5 +41,32 @@ public class TbVmsFormObject implements Serializable {
     private Integer symbLibNmbr;
     private Long vmsIfscId;
 
-    private TbVmsSymbLib vmsSymbLib;
+    public TbVmsFormObjectDto toDto() {
+        return TbVmsFormObjectDto.builder()
+                .vmsFormObjectId(this.vmsFormObjectId)
+                .vmsFormId(this.vmsFormId)
+                .vmsFormDsplRow(this.vmsFormDsplRow)
+                .vmsFormDsplClmn(this.vmsFormDsplClmn)
+                .vmsFormObjectTypeCd(this.vmsFormObjectTypeCd)
+                .vmsFontNameCd(this.vmsFontNameCd)
+                .vmsFontColrCd(this.vmsFontColrCd)
+                .vmsDsplTxt(this.vmsDsplTxt)
+                .vmsDsplFigr(this.vmsDsplFigr)
+                .vmsDsplXcrdn(this.vmsDsplXcrdn)
+                .vmsDsplYcrdn(this.vmsDsplYcrdn)
+                .trfcFillCd(this.trfcFillCd)
+                .vmsFontBold(this.vmsFontBold)
+                .vmsFontSize(this.vmsFontSize)
+                .vmsFontAlign(this.vmsFontAlign)
+                .vmsDsplWidth(this.vmsDsplWidth)
+                .vmsDsplHeight(this.vmsDsplHeight)
+                .vmsDsplBlinking(this.vmsDsplBlinking)
+                .vmsDsplBkColor(this.vmsDsplBkColor)
+                .vmsDsplSize(this.vmsDsplSize)
+                .symbLibNmbr(this.symbLibNmbr)
+                .vmsIfscId(this.vmsIfscId)
+                .vmsSymbLib(null)
+                .build();
+    }
+
 }

+ 0 - 40
src/main/java/com/its/vms/entity/TbVmsIfsc.java

@@ -1,40 +0,0 @@
-package com.its.vms.entity;
-
-import io.swagger.annotations.ApiModel;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-
-import java.io.Serializable;
-
-/**
- *  Entity Class
- */
-@Getter
-@Builder
-@NoArgsConstructor//(access = AccessLevel.PROTECTED)
-@AllArgsConstructor
-public class TbVmsIfsc implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    private Long vmsIfscId;
-    private String vmsIfscNm;
-    private String dsplStrtNodeNm;
-    private String dsplEndNodeNm;
-    private Long detrId;
-
-    private String roadNm;
-    private String spotNm;
-    private String axisYn;
-
-    private String useYn;
-    private Integer cngsSpd;
-
-    // 교통정보
-    private String prcnDt;
-    private String cmtrGradCd;
-    private Integer sped;
-    private Integer trvlHh;
-
-}

+ 32 - 2
src/main/java/com/its/vms/entity/TbVmsIfscTraf.java

@@ -1,5 +1,6 @@
 package com.its.vms.entity;
 
+import com.its.vms.dto.TbVmsIfscTrafDto;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -31,6 +32,35 @@ public class TbVmsIfscTraf implements Serializable {
     private Integer sped;
     private Integer trvlHh;
 
-    private Integer cngstCnt;
-    private String cngstDt;
+    public TbVmsIfscTrafDto toDto() {
+        return TbVmsIfscTrafDto.builder()
+                .vmsIfscId(this.vmsIfscId)
+                .vmsIfscNm(this.vmsIfscNm)
+                .dsplStrtNodeNm(this.dsplStrtNodeNm)
+                .dsplEndNodeNm(this.dsplEndNodeNm)
+                .detrId(this.detrId)
+                .roadNm(this.roadNm)
+                .spotNm(this.spotNm)
+                .axisYn(this.axisYn)
+                .prcnDt(this.prcnDt)
+                .cmtrGradCd(this.cmtrGradCd)
+                .sped(this.sped)
+                .trvlHh(this.trvlHh)
+                .cngstCnt(0)
+                .cngstDt("")
+                .build();
+    }
+
+    public void trafCopy(TbVmsIfscTrafDto traf) {
+        traf.setDsplStrtNodeNm(this.dsplStrtNodeNm);
+        traf.setDsplEndNodeNm(this.dsplEndNodeNm);
+        traf.setDetrId(this.detrId);
+        traf.setRoadNm(this.roadNm);
+        traf.setSpotNm(this.spotNm);
+        traf.setAxisYn(this.axisYn);
+        traf.setPrcnDt(this.prcnDt);
+        traf.setCmtrGradCd(this.cmtrGradCd);
+        traf.setSped(this.sped);
+        traf.setTrvlHh(this.trvlHh);
+    }
 }

+ 28 - 5
src/main/java/com/its/vms/entity/TbVmsRltnIfsc.java

@@ -1,6 +1,10 @@
 package com.its.vms.entity;
 
-import lombok.*;
+import com.its.vms.dto.TbVmsRltnIfscDto;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
 
@@ -19,10 +23,29 @@ public class TbVmsRltnIfsc implements Serializable {
     private Integer dsplPrrt;
     private String axisYn;
     private Integer cngstSped;
-    private boolean cngstCnfmYn;
     private Integer cngstCnfmSped;
+    private String cngstCnfmYn;
 
-    private boolean isUsed;
-    private int cngstCnt;
-    private String cngstDt;
+    public TbVmsRltnIfscDto toDto() {
+        return TbVmsRltnIfscDto.builder()
+                .vmsCtlrNmbr(this.vmsCtlrNmbr)
+                .vmsIfscId(this.vmsIfscId)
+                .dsplPrrt(this.dsplPrrt)
+                .axisYn(this.axisYn)
+                .cngstSped(this.cngstSped)
+                .cngstCnfmYn("Y".equals(this.cngstCnfmYn))
+                .cngstCnfmSped(this.cngstCnfmSped)
+                .isUsed(true)
+                .cngstCnt(0)
+                .cngstDt("")
+                .build();
+    }
+
+    public void rltnIfscCopy(TbVmsRltnIfscDto rltnIfsc) {
+        rltnIfsc.setDsplPrrt(this.dsplPrrt);
+        rltnIfsc.setAxisYn(this.axisYn);
+        rltnIfsc.setCngstSped(this.cngstSped);
+        rltnIfsc.setCngstCnfmYn("Y".equals(this.cngstCnfmYn));
+        rltnIfsc.setCngstCnfmSped(this.cngstCnfmSped);
+    }
 }

+ 12 - 2
src/main/java/com/its/vms/entity/TbVmsSymbIfsc.java

@@ -1,6 +1,6 @@
 package com.its.vms.entity;
 
-import io.swagger.annotations.ApiModel;
+import com.its.vms.dto.TbVmsSymbIfscDto;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -25,6 +25,16 @@ public class TbVmsSymbIfsc implements Serializable {
     private Long vmsIfscId;
     private String updtDt;
 
-    private boolean isDup;
+    public TbVmsSymbIfscDto toDto() {
+        return TbVmsSymbIfscDto.builder()
+                .symbLibNmbr(this.symbLibNmbr)
+                .cellId(this.cellId)
+                .posX(this.posX)
+                .posY(this.posY)
+                .vmsIfscId(this.vmsIfscId == null ? 0 : this.vmsIfscId)
+                .updtDt(this.updtDt)
+                .isDup(false)
+                .build();
+    }
 
 }

+ 8 - 41
src/main/java/com/its/vms/entity/TbVmsSymbLib.java

@@ -5,21 +5,14 @@ import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
 
-import javax.imageio.ImageIO;
-import java.awt.*;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.List;
 
 /**
  *  Entity Class
  */
-@Slf4j
 @Data
 @Builder
 @NoArgsConstructor//(access = AccessLevel.PROTECTED)
@@ -27,8 +20,7 @@ import java.util.List;
 public class TbVmsSymbLib implements Serializable {
     private static final long serialVersionUID = 1L;
 
-    private String symbLibNmbr;
-    private Integer orgSymbLibNmbr;
+    private Integer symbLibNmbr;
     private String rgstDt;
     private byte[] redData;
     private byte[] greenData;
@@ -46,33 +38,11 @@ public class TbVmsSymbLib implements Serializable {
     private Integer posX;
     private Integer posY;
 
-    private eVmsImageType imagType;
-    private String localFileName;
-    private String ftpFileName;
-
-    private List<String> gradSymbLibNmbrList = new ArrayList<>();
-    private HashMap<Integer, TbVmsSymbIfsc> cellMap = new HashMap<>();
-
-    public Image getImage() {
-        if (this.imagData == null || this.imagData.length == 0) {
-            log.error("getImage: Image Data null: {}", this.orgSymbLibNmbr);
-            return null;
-        }
-
-        try (
-                ByteArrayInputStream bis = new ByteArrayInputStream(this.imagData);
-        ) {
-            return ImageIO.read(bis);
-        } catch (IOException e) {
-            log.error("getImage: IOException: {}", this.orgSymbLibNmbr);
-        }
-        return null;
-    }
-
-    public TbVmsSymbLib clone(String symbLibNmbr) {
-        TbVmsSymbLib obj = TbVmsSymbLib.builder()
-                .symbLibNmbr(symbLibNmbr)
-                .orgSymbLibNmbr(this.orgSymbLibNmbr)
+    public TbVmsSymbLibDto toDto() {
+        // 소통정보이미지 때문에 이미지번호에 "0" 을 추가하여 이미지번호로 사용함
+        TbVmsSymbLibDto obj = TbVmsSymbLibDto.builder()
+                .symbLibNmbr(this.symbLibNmbr+"0")
+                .orgSymbLibNmbr(this.symbLibNmbr)
                 .rgstDt(this.rgstDt)
                 .redData(this.redData)
                 .greenData(this.greenData)
@@ -89,14 +59,11 @@ public class TbVmsSymbLib implements Serializable {
                 .updtDt(this.updtDt)
                 .posX(this.posX)
                 .posY(this.posY)
-                .imagType(this.imagType)
-                .localFileName(this.localFileName)
-                .ftpFileName(this.ftpFileName)
-                .gradSymbLibNmbrList( new ArrayList<>())
+                .gradSymbLibNmbrList(new ArrayList<>())
                 .cellMap(new HashMap<>())
                 .build();
 
-        TbVmsSymbLibDto.setSymbInfo(obj);
+        obj.setSymbInfo();
 
         return obj;
     }

+ 41 - 0
src/main/java/com/its/vms/entity/eVmsDownload.java

@@ -0,0 +1,41 @@
+package com.its.vms.entity;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public enum eVmsDownload {
+
+    vms_download_disable(0, "disable"),
+    vms_download_enable (1, "enable");
+
+    private final int value;
+    private final String string;
+
+    private static final Map<Integer, eVmsDownload> map;
+    static {
+        map = new HashMap<>();
+        for (eVmsDownload e : values()) {
+            map.put(Integer.valueOf(e.value), e);
+        }
+    }
+
+    public static eVmsDownload getByValue(int value) {
+        return map.get(value);
+    }
+    public static eVmsDownload getByValue(byte value) {
+        int intValue = (value & 0x0F);
+        return map.get(intValue);
+    }
+
+    eVmsDownload(int value, String string) {
+        this.value  = value;
+        this.string = string;
+    }
+
+    public int getValue() {
+        return this.value;
+    }
+    public String toString() {
+        return this.string;
+    }
+}

+ 42 - 0
src/main/java/com/its/vms/entity/eVmsDownloadStep.java

@@ -0,0 +1,42 @@
+package com.its.vms.entity;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public enum eVmsDownloadStep {
+
+    send_wait(0, "0:대기"),
+    send_progress(1, "1:전송중"),
+    send_complete (2, "2:전송완료");
+
+    private final int value;
+    private final String string;
+
+    private static final Map<Integer, eVmsDownloadStep> map;
+    static {
+        map = new HashMap<>();
+        for (eVmsDownloadStep e : values()) {
+            map.put(Integer.valueOf(e.value), e);
+        }
+    }
+
+    public static eVmsDownloadStep getByValue(int value) {
+        return map.get(value);
+    }
+    public static eVmsDownloadStep getByValue(byte value) {
+        int intValue = (value & 0x0F);
+        return map.get(intValue);
+    }
+
+    eVmsDownloadStep(int value, String string) {
+        this.value  = value;
+        this.string = string;
+    }
+
+    public int getValue() {
+        return this.value;
+    }
+    public String toString() {
+        return this.string;
+    }
+}

+ 41 - 0
src/main/java/com/its/vms/entity/eVmsReqBoardPower.java

@@ -0,0 +1,41 @@
+package com.its.vms.entity;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public enum eVmsReqBoardPower {
+
+    vms_req_board_power_off((byte)0, "off"),
+    vms_req_board_power_on ((byte)1, "on");
+
+    private final byte value;
+    private final String string;
+
+    private static final Map<Integer, eVmsReqBoardPower> map;
+    static {
+        map = new HashMap<>();
+        for (eVmsReqBoardPower e : values()) {
+            map.put(Integer.valueOf(e.value), e);
+        }
+    }
+
+    public static eVmsReqBoardPower getByValue(int value) {
+        return map.get(value);
+    }
+    public static eVmsReqBoardPower getByValue(byte value) {
+        int intValue = (value & 0x0F);
+        return map.get(intValue);
+    }
+
+    eVmsReqBoardPower(byte value, String string) {
+        this.value  = value;
+        this.string = string;
+    }
+
+    public byte getValue() {
+        return this.value;
+    }
+    public String toString() {
+        return this.string;
+    }
+}

+ 42 - 0
src/main/java/com/its/vms/entity/eVmsReqControl.java

@@ -0,0 +1,42 @@
+package com.its.vms.entity;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public enum eVmsReqControl {
+
+    vms_req_control_signboard((byte)0x01, "signboard control"),
+    vms_req_control_initialize((byte)0x02, "initialize(reset)"),
+    vms_req_control_luminance((byte)0x06, "luminance control");
+
+    private final byte value;
+    private final String string;
+
+    private static final Map<Integer, eVmsReqControl> map;
+    static {
+        map = new HashMap<>();
+        for (eVmsReqControl e : values()) {
+            map.put(Integer.valueOf(e.value), e);
+        }
+    }
+
+    public static eVmsReqControl getByValue(int value) {
+        return map.get(value);
+    }
+    public static eVmsReqControl getByValue(byte value) {
+        int intValue = (value & 0x0F);
+        return map.get(intValue);
+    }
+
+    eVmsReqControl(byte value, String string) {
+        this.value  = value;
+        this.string = string;
+    }
+
+    public byte getValue() {
+        return this.value;
+    }
+    public String toString() {
+        return this.string;
+    }
+}

+ 41 - 0
src/main/java/com/its/vms/entity/eVmsSendResult.java

@@ -0,0 +1,41 @@
+package com.its.vms.entity;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public enum eVmsSendResult {
+
+    send_result_fail(0, "0:실패"),
+    send_result_succ(1, "1:성공");
+
+    private final int value;
+    private final String string;
+
+    private static final Map<Integer, eVmsSendResult> map;
+    static {
+        map = new HashMap<>();
+        for (eVmsSendResult e : values()) {
+            map.put(Integer.valueOf(e.value), e);
+        }
+    }
+
+    public static eVmsSendResult getByValue(int value) {
+        return map.get(value);
+    }
+    public static eVmsSendResult getByValue(byte value) {
+        int intValue = (value & 0x0F);
+        return map.get(intValue);
+    }
+
+    eVmsSendResult(int value, String string) {
+        this.value  = value;
+        this.string = string;
+    }
+
+    public int getValue() {
+        return this.value;
+    }
+    public String toString() {
+        return this.string;
+    }
+}

+ 9 - 9
src/main/java/com/its/vms/global/AppRepository.java

@@ -18,15 +18,15 @@ public class AppRepository {
     public ConcurrentHashMap<String, TbVmsCtlr> ctlrIpMap = null;
     public ConcurrentHashMap<Channel, TbVmsCtlr> ctlrChannelMap = null;
 
-    public static AppRepository getInstance() {
-        if (_instance == null) {
-            synchronized (AppRepository.class) {
-                if (_instance == null)
-                    _instance = new AppRepository();
-            }
-        }
-        return _instance;
-    }
+//    public static AppRepository getInstance() {
+//        if (_instance == null) {
+//            synchronized (AppRepository.class) {
+//                if (_instance == null)
+//                    _instance = new AppRepository();
+//            }
+//        }
+//        return _instance;
+//    }
 
     public AppRepository() {
         this.ctlrMap = new ConcurrentHashMap<>();

+ 13 - 20
src/main/java/com/its/vms/process/DbmsDataProcess.java

@@ -12,7 +12,6 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
-import javax.annotation.PostConstruct;
 import java.util.List;
 import java.util.concurrent.Executors;
 import java.util.concurrent.LinkedBlockingQueue;
@@ -23,7 +22,7 @@ import java.util.concurrent.ThreadPoolExecutor;
 @Service
 public class DbmsDataProcess {
 
-    private final LinkedBlockingQueue<DbmsData> DBMS_DATA_QUEUE = new LinkedBlockingQueue<>(1000);
+    private final LinkedBlockingQueue<DbmsData> dbmsDataBlockingQueue = new LinkedBlockingQueue<>(1000);
     private final ThreadPoolExecutor taskExecutor = (ThreadPoolExecutor) Executors.newFixedThreadPool(1);
 
     private final DbmsDataAsyncTask asyncTask;
@@ -32,34 +31,28 @@ public class DbmsDataProcess {
     private final UnitSystMapper unitSystMapper;
     private final VmsCtlrMapper vmsCtlrMapper;
 
-    int MAX_CORE = Runtime.getRuntime().availableProcessors();
-
-    @PostConstruct
-    void init() {
-    }
+    private int maxCore = Runtime.getRuntime().availableProcessors();
 
     public void run() {
         log.info("DbmsDataProcess.run: Start.");
-        if (this.MAX_CORE < 8) {
-            this.MAX_CORE = 8;
+        if (this.maxCore < 8) {
+            this.maxCore = 8;
         }
         ThreadPoolInitializer poolInitializer = (ThreadPoolInitializer) AppUtils.getBean(ThreadPoolInitializer.class);
-        int executePool = Math.max(this.MAX_CORE, poolInitializer.getWork());
+        int executePool = Math.max(this.maxCore, poolInitializer.getWork());
         for (int ii = 0; ii < executePool; ii++) {
             log.info("DbmsDataProcess.Task: {}", ii);
             this.taskExecutor.execute(() -> {
-                while (true) {
+                boolean isRunning = true;
+                while (isRunning) {
                     try {
-                        DbmsData data = DBMS_DATA_QUEUE.take();
-                        if (data != null) {
-                            asyncTask.run(this, data);
-                        }
-                        else {
-                            log.error("DbmsDataProcess.Task: Received data null");
-                        }
+                        DbmsData data = dbmsDataBlockingQueue.take();
+                        asyncTask.run(this, data);
                     }
                     catch (Exception e) {
                         log.error("DbmsDataProcess.Task: Exception: {}", e.getMessage(), e);
+                        Thread.currentThread().interrupt();
+                        isRunning = false;
                     }
                 }
             });
@@ -120,9 +113,9 @@ public class DbmsDataProcess {
             //offer => full -> return
             //add   => full -> wait
             //큐가 차더라도 바로 리턴함.
-            offer = DBMS_DATA_QUEUE.offer(data);
+            offer = dbmsDataBlockingQueue.offer(data);
             if (!offer) {
-                log.error("DbmsDataProcess.add: Queue Full Error, Size: {} EA", DBMS_DATA_QUEUE.size());
+                log.error("DbmsDataProcess.add: Queue Full Error, Size: {} EA", dbmsDataBlockingQueue.size());
             }
         } catch (Exception e) {
             log.error("DbmsDataProcess.add: Exception: {}", e.getMessage(), e);

+ 70 - 0
src/main/java/com/its/vms/service/AppRepositoryService.java

@@ -0,0 +1,70 @@
+package com.its.vms.service;
+
+import com.its.vms.entity.TbVmsCtlr;
+import io.netty.channel.Channel;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class AppRepositoryService {
+
+    private final ConcurrentHashMap<Long, TbVmsCtlr> ctlrMap = new ConcurrentHashMap<>();;
+    private final ConcurrentHashMap<String, TbVmsCtlr> ipAddrMap = new ConcurrentHashMap<>();;
+    private final ConcurrentHashMap<Channel, TbVmsCtlr> channelMap = new ConcurrentHashMap<>();;
+
+    public void initCtlrInfo() {
+        try {
+            for (Map.Entry<Long, TbVmsCtlr> e : this.ctlrMap.entrySet()) {
+                TbVmsCtlr obj = e.getValue();
+                obj.setDelYn("Y");
+            }
+        }
+        catch (Exception e) {
+            log.error("AppRepositoryService.initCtlrInfo: Exception: {}", e.toString());
+        }
+    }
+    public Set<Map.Entry<Long, TbVmsCtlr>> getEntrySetCtrl() {
+        return this.ctlrMap.entrySet();
+    }
+    public ConcurrentMap<Long, TbVmsCtlr> getCtlrMap() {
+        return this.ctlrMap;
+    }
+    public ConcurrentMap<String, TbVmsCtlr> getIpAddrMap() {
+        return this.ipAddrMap;
+    }
+    public ConcurrentMap<Channel, TbVmsCtlr> getChannelMap() {
+        return this.channelMap;
+    }
+
+    public TbVmsCtlr putCtrlMap(TbVmsCtlr obj) {
+        return this.ctlrMap.put(obj.getCtlrNmbr(), obj);
+    }
+
+    public TbVmsCtlr putIpAddrMap(TbVmsCtlr obj) {
+        return this.ipAddrMap.put(obj.getCtlrIp(), obj);
+    }
+
+    public TbVmsCtlr putChannelMap(TbVmsCtlr obj) {
+        return this.channelMap.put(obj.getChannel(), obj);
+    }
+    public TbVmsCtlr getCtrlMap(Long vmsCtlrNmbr) {
+        return this.ctlrMap.get(vmsCtlrNmbr);
+    }
+
+    public TbVmsCtlr getIpAddrMap(String ipAddr) {
+        return this.ipAddrMap.get(ipAddr);
+    }
+
+    public TbVmsCtlr getChannelMap(Channel channel) {
+        return this.channelMap.get(channel);
+    }
+
+}

+ 15 - 16
src/main/java/com/its/vms/service/VmsAtmpService.java

@@ -21,9 +21,9 @@ public class VmsAtmpService {
     private final ApplicationConfig config;
     private final VmsAtmpMapper vmsAtmpMapper;
 
-    private final ConcurrentHashMap<Long, TbVmsAtmp> atmpMap = new ConcurrentHashMap<>();
+    private final ConcurrentHashMap<Long, TbVmsAtmpDto> atmpMap = new ConcurrentHashMap<>();
 
-    public TbVmsAtmp find(Long atmpSttnNmbr) {
+    public TbVmsAtmpDto find(Long atmpSttnNmbr) {
         return this.atmpMap.get(atmpSttnNmbr);
     }
 
@@ -35,24 +35,23 @@ public class VmsAtmpService {
         AtomicInteger nFailed = new AtomicInteger();
         AtomicInteger nSuccess = new AtomicInteger();
         try {
-            List<TbVmsAtmpDto> infoList  = this.vmsAtmpMapper.selectVmsAtmpInfo();
+            List<TbVmsAtmp> infoList  = this.vmsAtmpMapper.selectVmsAtmpInfo();
             log.info("VmsAtmpService.loadVmsAtmpInfo: {} EA", infoList.size());
-            infoList.forEach(dto -> {
-                TbVmsAtmp obj = dto.toEntity();
-                this.atmpMap.put(obj.getAtmpSttnNmbr(), obj);
-                if (obj.getMsrmDt() == null) {
-                    obj.setSuccess(false);
+            infoList.forEach(data -> {
+                TbVmsAtmpDto dto = data.toDto();
+                this.atmpMap.put(dto.getAtmpSttnNmbr(), dto);
+                if (dto.getMsrmDt() == null) {
+                    dto.setSuccess(false);
                     nFailed.getAndIncrement();
                     return;
                 }
-                if ("0".equals(obj.getPm101hhGrad()) &&
-                    "0".equals(obj.getPm251hhGrad()) &&
-                    "0".equals(obj.getIntgAtmpGrad())) {
-                    obj.setSuccess(false);
+                if ("0".equals(dto.getPm101hhGrad()) &&
+                    "0".equals(dto.getPm251hhGrad()) &&
+                    "0".equals(dto.getIntgAtmpGrad())) {
+                    dto.setSuccess(false);
                     nFailed.getAndIncrement();
                     return;
                 }
-                log.error("{}", obj);
                 nSuccess.getAndIncrement();
             });
         }
@@ -70,8 +69,8 @@ public class VmsAtmpService {
         /**
          * 측정 데이터가 없는 경우 정상적인 측정 데이터를 가지고 보정한다.
          */
-        TbVmsAtmp vmsAtmp = null;
-        for (Map.Entry<Long, TbVmsAtmp > obj : this.atmpMap.entrySet()) {
+        TbVmsAtmpDto vmsAtmp = null;
+        for (Map.Entry<Long, TbVmsAtmpDto > obj : this.atmpMap.entrySet()) {
             if (obj.getValue().isSuccess()) {
                 vmsAtmp = obj.getValue();
                 break;
@@ -80,7 +79,7 @@ public class VmsAtmpService {
         if (vmsAtmp == null) {
             return;
         }
-        for (Map.Entry<Long, TbVmsAtmp > obj : this.atmpMap.entrySet()) {
+        for (Map.Entry<Long, TbVmsAtmpDto > obj : this.atmpMap.entrySet()) {
             if (!obj.getValue().isSuccess()) {
                 vmsAtmp.correct(obj.getValue());
             }

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

@@ -8,7 +8,6 @@ import com.its.vms.dto.NET;
 import com.its.vms.dto.TbVmsCtlrDto;
 import com.its.vms.dto.TbVmsCtlrSttsDto;
 import com.its.vms.entity.TbVmsCtlr;
-import com.its.vms.global.AppRepository;
 import com.its.vms.process.DbmsData;
 import com.its.vms.process.DbmsDataProcess;
 import com.its.vms.process.DbmsDataType;
@@ -28,6 +27,7 @@ import java.util.*;
 public class VmsCtlrService {
 
     private final ApplicationConfig config;
+    private final AppRepositoryService repoService;
     private final VmsCtlrMapper vmsCtlrMapper;
     private int historyMin;
 
@@ -40,22 +40,12 @@ public class VmsCtlrService {
 
     public void loadDb() {
         loadCtlrInfo();
-    }
-
-    public void initCtlrInfo() {
-        try {
-            for (Map.Entry<Long, TbVmsCtlr> e : AppRepository.getInstance().getCtlrMap().entrySet()) {
-                TbVmsCtlr obj = e.getValue();
-                obj.setDelYn("Y");
-            }
-        }
-        catch (Exception e) {
-            log.error("VmsCtlrService.initCtlrInfo: Exception: {}", e.toString());
-        }
+        loadCtlrSttsInfo();
     }
 
     public void loadCtlrInfo() {
-        initCtlrInfo();
+        this.repoService.initCtlrInfo();
+
         try {
             List<TbVmsCtlrDto> infoList  = this.vmsCtlrMapper.selectAll();
             log.info("VmsCtlrService.loadCtlrInfo: {} EA", infoList.size());
@@ -67,8 +57,8 @@ public class VmsCtlrService {
                     continue;
                 }
 
-                AppRepository.getInstance().getCtlrMap().put(obj.getCtlrNmbr(), obj);
-                AppRepository.getInstance().getCtlrIpMap().put(obj.getCtlrIp(), obj);
+                this.repoService.putCtrlMap(obj);
+                this.repoService.putIpAddrMap(obj);
                 obj.getStts().initUnknown();
 
                 obj.setLocalFormDir(this.config.getFtpFormDir() + File.separator + obj.getCtlrNmbr());
@@ -82,8 +72,26 @@ public class VmsCtlrService {
             log.error("VmsCtlrService.loadCtlrInfo: {}", e.toString());
         }
 
-        for (Map.Entry<Long, TbVmsCtlr> obj : AppRepository.getInstance().getCtlrMap().entrySet()) {
-            log.info("VmsCtlrService.VmsCtlr: {}", obj.toString());
+        this.repoService.getCtlrMap().forEach((key, obj) -> {
+            log.info("VmsCtlrService.loadCtlrInfo:: {}", obj.toString());
+        });
+    }
+
+    public void loadCtlrSttsInfo() {
+        try {
+            List<TbVmsCtlrSttsDto> infoList  = this.vmsCtlrMapper.selectCtlrStts();
+            log.info("VmsCtlrService.loadCtlrSttsInfo: {} EA", infoList.size());
+            infoList.forEach(dto -> {
+                TbVmsCtlr obj = this.repoService.getCtrlMap(dto.getVmsCtlrNmbr());
+                if (obj == null) {
+                    log.error("VmsCtlrService.loadCtlrSttsInfo: Not Found VMS {}.", dto.getVmsCtlrNmbr());
+                    return;
+                }
+                obj.getStts().updateStts(dto);
+            });
+        }
+        catch (Exception e) {
+            log.error("VmsCtlrService.loadCtlrSttsInfo: {}", e.toString());
         }
     }
 
@@ -101,14 +109,14 @@ public class VmsCtlrService {
         String UPDT_DT = SysUtils.getSysTime();
         int normal = 0;
         int error  = 0;
-        for (Map.Entry<Long, TbVmsCtlr> e : AppRepository.getInstance().getCtlrMap().entrySet()) {
+
+        for (Map.Entry<Long, TbVmsCtlr> e : this.repoService.getCtlrMap().entrySet()) {
             TbVmsCtlr obj = e.getValue();
-            if (AObj != null && AObj.getCtlrNmbr() != obj.getCtlrNmbr()) {
+            if (AObj != null && !Objects.equals(AObj.getCtlrNmbr(), obj.getCtlrNmbr())) {
                 continue;
             }
 
             obj.getStts().setUpdtDt(UPDT_DT);
-
             if (isRun && obj.getNetState() >= NET.LOGINED && obj.getChannel() != null) {
                 //제어기 통신정상
                 normal++;
@@ -141,20 +149,4 @@ public class VmsCtlrService {
         log.info("VmsCtlrService.updateCtlrStts: total {}, normal {}, error {}", normal + error, normal, error);
     }
 
-    public void monitoringSession() {
-        long currMilliSeconds = System.currentTimeMillis();
-        for (Map.Entry<Long, TbVmsCtlr> e : AppRepository.getInstance().getCtlrMap().entrySet()) {
-            TbVmsCtlr obj = e.getValue();
-//            if (obj.getNetState() >= NET.LOGIN_REQ && obj.getChannel() != null) {
-//                // 주차정보시스템 통신정상
-//                long recvTimout = currMilliSeconds - obj.getLastRecvTime();
-//                if (recvTimout > 15*1000) {
-//                    log.error("VmsCtlrService.monitoringSession: Idle timeout: {}, ipAddr={}, Idle={} sec.", obj.getID(), obj.getRSE_ID(), (int)(recvTimout/1000L));
-//                    obj.setLastRecvTime();
-//                    obj.sendFrED();
-//                }
-//
-//            }
-        }
-    }
 }

+ 10 - 10
src/main/java/com/its/vms/service/VmsFontService.java

@@ -19,13 +19,13 @@ public class VmsFontService {
 
     private final VmsFontMapper vmsFontMapper;
 
-    private final ConcurrentHashMap<Integer, TbVmsFontName> nameMap = new ConcurrentHashMap<>();
-    private final ConcurrentHashMap<Integer, TbVmsFontColr> colrMap = new ConcurrentHashMap<>();
+    private final ConcurrentHashMap<Integer, TbVmsFontNameDto> nameMap = new ConcurrentHashMap<>();
+    private final ConcurrentHashMap<Integer, TbVmsFontColrDto> colrMap = new ConcurrentHashMap<>();
 
-    public TbVmsFontName findFontName(Integer vmsFontNameCd) {
+    public TbVmsFontNameDto findFontName(Integer vmsFontNameCd) {
         return this.nameMap.get(vmsFontNameCd);
     }
-    public TbVmsFontColr findFontColor(Integer vmsFontColrCd) {
+    public TbVmsFontColrDto findFontColor(Integer vmsFontColrCd) {
         return this.colrMap.get(vmsFontColrCd);
     }
 
@@ -36,10 +36,10 @@ public class VmsFontService {
 
     public void loadFontNameInfo() {
         try {
-            List<TbVmsFontNameDto> infoList  = this.vmsFontMapper.selectFontName();
+            List<TbVmsFontName> infoList  = this.vmsFontMapper.selectFontName();
             log.info("VmsFontService.loadFontNameInfo: {} EA", infoList.size());
-            for (TbVmsFontNameDto dto : infoList) {
-                TbVmsFontName obj = dto.toEntity();
+            for (TbVmsFontName data : infoList) {
+                TbVmsFontNameDto obj = data.toDto();
                 this.nameMap.put(obj.getVmsFontNameCd(), obj);
             }
         }
@@ -50,10 +50,10 @@ public class VmsFontService {
 
     public void loadFontColorInfo() {
         try {
-            List<TbVmsFontColrDto> infoList  = this.vmsFontMapper.selectFontColr();
+            List<TbVmsFontColr> infoList  = this.vmsFontMapper.selectFontColr();
             log.info("VmsFontService.loadFontColorInfo: {} EA", infoList.size());
-            for (TbVmsFontColrDto dto : infoList) {
-                TbVmsFontColr obj = dto.toEntity();
+            for (TbVmsFontColr dto : infoList) {
+                TbVmsFontColrDto obj = dto.toDto();
                 this.colrMap.put(obj.getVmsFontColrCd(), obj);
             }
         }

+ 12 - 13
src/main/java/com/its/vms/service/VmsFormService.java

@@ -5,9 +5,9 @@ import com.its.vms.config.ApplicationConfig;
 import com.its.vms.dao.mapper.VmsFormMapper;
 import com.its.vms.dto.TbVmsFormDto;
 import com.its.vms.dto.TbVmsFormObjectDto;
+import com.its.vms.dto.TbVmsSymbLibDto;
 import com.its.vms.entity.TbVmsForm;
 import com.its.vms.entity.TbVmsFormObject;
-import com.its.vms.entity.TbVmsSymbLib;
 import com.its.vms.entity.eVmsFormType;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -28,9 +28,9 @@ public class VmsFormService {
     private final VmsFormMapper vmsFormMapper;
     private final VmsSymbService vmsSymbService;
 
-    private final ConcurrentHashMap<Integer, TbVmsForm> formMap = new ConcurrentHashMap<>();
+    private final ConcurrentHashMap<Integer, TbVmsFormDto> formMap = new ConcurrentHashMap<>();
 
-    public TbVmsForm find(Integer vmsFormId) {
+    public TbVmsFormDto find(Integer vmsFormId) {
         return this.formMap.get(vmsFormId);
     }
 
@@ -41,12 +41,12 @@ public class VmsFormService {
 
     public void loadVmsFormInfo() {
         try {
-            List<TbVmsFormDto> infoList  = this.vmsFormMapper.selectVmsFormInfo();
+            List<TbVmsForm> infoList  = this.vmsFormMapper.selectVmsFormInfo();
             log.info("VmsFormService.loadVmsFormInfo: {} EA", infoList.size());
-            infoList.forEach(dto -> {
-                TbVmsForm obj = dto.toEntity();
+            infoList.forEach(data -> {
+                TbVmsFormDto obj = data.toDto();
                 String updtDt = "";
-                TbVmsForm oldObj = this.formMap.get(obj.getVmsFormId());
+                TbVmsFormDto oldObj = this.formMap.get(obj.getVmsFormId());
                 if (oldObj != null) {
                     updtDt = oldObj.getUpdtDt();
                 }
@@ -56,7 +56,6 @@ public class VmsFormService {
                 if (obj.getVmsFormTypeCd() == eVmsFormType.eFormTp_hongbo.getValue() && !Objects.equals(obj.getUpdtDt(), updtDt)) {
                     obj.setIsNewForm(true);
                 }
-                log.info("VmsFormService.loadVmsFormInfo: {}, {}, {}", obj.getVmsFormTypeCd(), eVmsFormType.eFormTp_hongbo.getValue(), obj.getVmsFormImag() != null);
 
                 if (obj.getVmsFormTypeCd() == eVmsFormType.eFormTp_hongbo.getValue() && obj.getVmsFormImag() != null) {
                     obj.setLocalFileName(this.config.getFtpStaticDir() + obj.getVmsFormId() + ".bmp");
@@ -82,11 +81,11 @@ public class VmsFormService {
 
     public void loadVmsFormObjectInfo() {
         try {
-            List<TbVmsFormObjectDto> infoList  = this.vmsFormMapper.selectVmsFormObjectInfo();
+            List<TbVmsFormObject> infoList  = this.vmsFormMapper.selectVmsFormObjectInfo();
             log.info("VmsFormService.loadVmsFormObjectInfo: {} EA", infoList.size());
-            infoList.forEach(dto -> {
-                TbVmsFormObject obj = dto.toEntity();
-                TbVmsForm formObj = this.formMap.get(obj.getVmsFormId());
+            infoList.forEach(data -> {
+                TbVmsFormObjectDto obj = data.toDto();
+                TbVmsFormDto formObj = this.formMap.get(obj.getVmsFormId());
                 if (formObj == null) {
                     log.error("VmsFormService.loadVmsFormObjectInfo: Not Found VMS Form {}", obj.getVmsFormId());
                     return;
@@ -146,7 +145,7 @@ public class VmsFormService {
                     objType == 200 || //동영상이미지
                     objType == 300 )  //스트리밍영상이미지
                 {
-                    TbVmsSymbLib vmsSymbLib = this.vmsSymbService.find(obj.getSymbLibNmbr()+"0");
+                    TbVmsSymbLibDto vmsSymbLib = this.vmsSymbService.find(obj.getSymbLibNmbr()+"0");
                     if (vmsSymbLib == null) {
                         log.error("VmsFormService.loadVmsFormObjectInfo: VMF Form Object Symbol Library not Found {}, {}", obj.getVmsFormId(), obj.getSymbLibNmbr());
                     }

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

@@ -6,7 +6,6 @@ import com.its.vms.dto.TbVmsRltnIfscDto;
 import com.its.vms.entity.TbVmsCtlr;
 import com.its.vms.entity.TbVmsIfscTraf;
 import com.its.vms.entity.TbVmsRltnIfsc;
-import com.its.vms.global.AppRepository;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -22,8 +21,13 @@ public class VmsIfscService {
 
     private final VmsIfscMapper vmsIfscMapper;
     private final VmsManageService vmsManageService;
+    private final AppRepositoryService repoService;
 
-    public ConcurrentHashMap<Long, TbVmsIfscTraf> trafMap = new ConcurrentHashMap<>();
+    private final ConcurrentHashMap<Long, TbVmsIfscTrafDto> trafMap = new ConcurrentHashMap<>();
+
+    public TbVmsIfscTrafDto find(Long vmsIfscId) {
+        return this.trafMap.get(vmsIfscId);
+    }
 
     public void loadVmsIfscInfo() {
         loadVmsRltnIfsc();
@@ -31,32 +35,32 @@ public class VmsIfscService {
     }
 
     public void loadVmsRltnIfsc() {
-        AppRepository.getInstance().getCtlrMap().forEach((nmbr, obj) -> {
+        this.repoService.getCtlrMap().forEach((nmbr, obj) -> {
             obj.getRltnIfscMap().forEach((ifscId, ifsc) -> {
                 ifsc.setUsed(false);
             });
         });
 
         try {
-            List<TbVmsRltnIfscDto> infoList  = this.vmsIfscMapper.selectVmsRltnIfsc();
+            List<TbVmsRltnIfsc> infoList  = this.vmsIfscMapper.selectVmsRltnIfsc();
             log.info("VmsIfscService.loadVmsRltnIfsc: {} EA", infoList.size());
-            infoList.forEach(dto -> {
-                TbVmsCtlr vmsObj = AppRepository.getInstance().getCtlrMap().get(dto.getVmsCtlrNmbr());
+            infoList.forEach(data -> {
+                TbVmsCtlr vmsObj = this.repoService.getCtrlMap(data.getVmsCtlrNmbr());
                 if (vmsObj != null) {
-                    TbVmsRltnIfsc rltnIfsc = vmsObj.getRltnIfscMap().get(dto.getVmsIfscId());
+                    TbVmsRltnIfscDto rltnIfsc = vmsObj.getRltnIfscMap().get(data.getVmsIfscId());
                     if (rltnIfsc == null) {
-                        rltnIfsc = dto.toEntity();
-                        vmsObj.getRltnIfscMap().put(dto.getVmsIfscId(), rltnIfsc);
+                        rltnIfsc = data.toDto();
+                        vmsObj.getRltnIfscMap().put(data.getVmsIfscId(), rltnIfsc);
                     }
                     rltnIfsc.setUsed(true);
-                    if (this.vmsManageService.isStaticCycle()) {
-                        boolean cngstCnfmYn = "Y".equals(dto.getCngstCnfmYn());
-                        Integer cngstCnfmSped = dto.getCngstCnfmSped();
+                    if (this.vmsManageService.getStaticCycle()) {
+                        boolean cngstCnfmYn = "Y".equals(data.getCngstCnfmYn());
+                        Integer cngstCnfmSped = data.getCngstCnfmSped();
                         if (rltnIfsc.isCngstCnfmYn() != cngstCnfmYn || !Objects.equals(rltnIfsc.getCngstCnfmSped(), cngstCnfmSped)) {
                             rltnIfsc.setCngstCnt(0);
                         }
                     }
-                    dto.rltnIfscCopy(rltnIfsc);
+                    data.rltnIfscCopy(rltnIfsc);
                 }
             });
         }
@@ -73,10 +77,10 @@ public class VmsIfscService {
         });
 
         try {
-            List<TbVmsIfscTrafDto> infoList  = this.vmsIfscMapper.selectVmsIfscTrafInfo();
+            List<TbVmsIfscTraf> infoList  = this.vmsIfscMapper.selectVmsIfscTrafInfo();
             log.info("VmsIfscService.loadVmsIfscTrafInfo: {} EA", infoList.size());
-            infoList.forEach(dto -> {
-                this.trafMap.put(dto.getVmsIfscId(), dto.toEntity());
+            infoList.forEach(data -> {
+                this.trafMap.put(data.getVmsIfscId(), data.toDto());
             });
         }
         catch (Exception e) {

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

@@ -1,27 +1,112 @@
 package com.its.vms.service;
 
+import com.its.app.utils.ItsUtils;
 import com.its.vms.config.ApplicationConfig;
 import com.its.vms.dao.mapper.VmsManageMapper;
-import lombok.Data;
+import com.its.vms.dto.TbVmsOnOffTimeDto;
+import com.its.vms.entity.TbVmsCtlr;
+import com.its.vms.entity.eVmsReqBoardPower;
+import com.its.vms.entity.eVmsReqControl;
+import com.its.vms.xnettcp.vms.process.TcpServerDataProcess;
+import com.its.vms.xnettcp.vms.process.TcpServerSendData;
+import com.its.vms.xnettcp.vms.protocol.dto.VmsReqControlDto;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
 import java.util.HashMap;
+import java.util.List;
+import java.util.Objects;
 
 @Slf4j
-@Data
 @Service
 @RequiredArgsConstructor
 public class VmsManageService {
 
     private final ApplicationConfig config;
     private final VmsManageMapper mapper;
+    private final AppRepositoryService repoService;
+    private final TcpServerDataProcess serverDataProcess;
+
     private boolean isStaticCycle = false;
 
+    public boolean getStaticCycle() {
+        return this.isStaticCycle;
+    }
+    public void setStaticCycle(boolean isStaticCycle) {
+        this.isStaticCycle = isStaticCycle;
+    }
+
     public void initVmsDsplPrst() {
         HashMap<String, Object> param = new HashMap<>();
         param.put("maxPhase",  this.config.getMaxPhase()+1);
         this.mapper.initVmsDsplPrst(param);
     }
+
+    public void loadVmsOnOffTime() {
+
+        int nCurrTime = ItsUtils.parseIntDef(ItsUtils.getSysHourMin(), 0);
+        String sysDay = ItsUtils.getSysDay();
+
+        List<TbVmsOnOffTimeDto> result = this.mapper.selectVmsOnOffTime();
+        result.forEach(obj -> {
+            TbVmsCtlr vmsCtlr = this.repoService.getCtrlMap(obj.getVmsCtlrNmbr());
+            if (vmsCtlr == 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 = vmsCtlr.getModule().getOnOff();
+            byte controlOnOff = eVmsReqBoardPower.vms_req_board_power_on.getValue();
+            vmsCtlr.getModule().setPowerOnTime(sysDay + onTime);
+            vmsCtlr.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)) {
+                byte[] command = new byte[1];
+                command[0] = controlOnOff;
+                VmsReqControlDto control = new VmsReqControlDto(eVmsReqControl.vms_req_control_signboard, command);
+                TcpServerSendData reqData = new TcpServerSendData(TcpServerSendData.DATA_REQ_CONTROL, control);
+                vmsCtlr.addRequestData(reqData);
+                // TODO: 통신상태가 정상인 제어기에 전송 명령을 전송단다.
+//                if (pObj->FSession && pObj->FSession->State == eSS_Connected) {
+//                    pObj->MODULE.IsOnOff = true;
+//                    pObj->MODULE.OnOff = OnOff;
+//
+//                    IPC_JOB_MESSAGE *pMsg = g_jobBuff.GetBuff();
+//                    pMsg->Type    = eVmsStatusControl;
+//                    pMsg->ObjPtr  = (DWORD)pObj->FSession;
+//                    pMsg->Buff[0] = 0x01;
+//                    pMsg->Buff[1] = OnOff;
+//                    pMsg->Len     = 2;
+//                    g_jobQ.PushBlocking((DWORD)pMsg);
+//                }
+            }
+        });
+    }
 }

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

@@ -30,9 +30,9 @@ public class VmsSymbService {
     private final ApplicationConfig config;
     private final VmsSymbMapper vmsSymbMapper;
 
-    public ConcurrentHashMap<String, TbVmsSymbLib> symbMap = new ConcurrentHashMap<>();
+    private final ConcurrentHashMap<String, TbVmsSymbLibDto> symbMap = new ConcurrentHashMap<>();
 
-    public TbVmsSymbLib find(String symbLibNmbr) {
+    public TbVmsSymbLibDto find(String symbLibNmbr) {
         return this.symbMap.get(symbLibNmbr);
     }
 
@@ -43,14 +43,14 @@ public class VmsSymbService {
 
     public void loadVmsSymbLib() {
         try {
-            List<TbVmsSymbLibDto> infoList  = this.vmsSymbMapper.selectVmsSymbLib();
+            List<TbVmsSymbLib> infoList  = this.vmsSymbMapper.selectVmsSymbLib();
             log.info("VmsSymbService.loadVmsSymbLib: {} EA", infoList.size());
-            infoList.forEach(dto -> {
+            infoList.forEach(data -> {
                 // 심벌 유형(SBT0:일반심벌이미지,SBT1:소통정보배경,SBT2:소통정보이미지,SBT3:동영상,SBT4:대기환경등급)
                 // 소통정보이미지 때문에 이미지번호에 "0" 을 추가하여 이미지번호로 사용함
                 String updtDt = "";
-                TbVmsSymbLib obj = dto.toEntity();
-                TbVmsSymbLib oldObj = this.symbMap.get(obj.getSymbLibNmbr());
+                TbVmsSymbLibDto obj = data.toDto();
+                TbVmsSymbLibDto oldObj = this.symbMap.get(obj.getSymbLibNmbr());
                 if (oldObj != null) {
                     updtDt = oldObj.getUpdtDt();
                 }
@@ -58,7 +58,7 @@ public class VmsSymbService {
 
                 if ("SBT4".equals(obj.getSymbType())) {
                     // 대기환경등급
-                    String symbExpl = dto.getSymbExpl();
+                    String symbExpl = data.getSymbExpl();
                     if (symbExpl != null) {
                         String[] symbNmbrArr = symbExpl.split("\\^");
                         for (String symbNmbr : symbNmbrArr) {
@@ -73,7 +73,7 @@ public class VmsSymbService {
                 // 심벌 유형(SBT0:일반심벌이미지,SBT1:소통정보배경,SBT2:소통정보이미지,SBT3:동영상)
                 if ("SBT3".equals(obj.getSymbType())) {
                     //위에서 이미지저장하기 위해 파일명을 변경하기 때문에 여기서 동영상 파일명을 다시 읽어온다
-                    obj.setSymbFileNm(dto.getSymbFileNm()); //동영상인 경우 동영상 파일명
+                    obj.setSymbFileNm(data.getSymbFileNm()); //동영상인 경우 동영상 파일명
                     obj.setLocalFileName(this.config.getFtpVideoDir() + obj.getSymbFileNm());
                     obj.setFtpFileName(ApplicationConfig.FTP_VIDEO + File.separator + obj.getSymbFileNm()); // Ftp 다운로드 명을 설정
                 }
@@ -83,8 +83,8 @@ public class VmsSymbService {
                     //소통정보 등급에 따른 이미지를 새롭게 추가한다.
                     for (int nTrf = 1; nTrf <= 3; nTrf++) {
                         String trfUpdtDt = "";
-                        String trafSymbLibNmbr = dto.getSymbLibNmbr() + String.valueOf(nTrf);
-                        TbVmsSymbLib trfObj = this.symbMap.get(trafSymbLibNmbr);
+                        String trafSymbLibNmbr = data.getSymbLibNmbr() + String.valueOf(nTrf);
+                        TbVmsSymbLibDto trfObj = this.symbMap.get(trafSymbLibNmbr);
                         if (trfObj != null) {
                             trfUpdtDt = trfObj.getUpdtDt();
                         }
@@ -140,17 +140,17 @@ public class VmsSymbService {
 
     public void loadVmsSymbCellInfo() {
         try {
-            List<TbVmsSymbIfscDto> infoList  = this.vmsSymbMapper.selectVmsSymbCellInfo();
+            List<TbVmsSymbIfsc> infoList  = this.vmsSymbMapper.selectVmsSymbCellInfo();
             log.info("VmsSymbService.loadVmsSymbCellInfo: {} EA", infoList.size());
-            infoList.forEach(dto -> {
-                Integer symbLibNmbr = dto.getSymbLibNmbr();
-                TbVmsSymbLib obj = this.symbMap.get(symbLibNmbr + "0");
+            infoList.forEach(data -> {
+                Integer symbLibNmbr = data.getSymbLibNmbr();
+                TbVmsSymbLibDto obj = this.symbMap.get(symbLibNmbr + "0");
                 if (obj == null) {
                     log.error("VmsSymbService.loadVmsSymbCellInfo: Not Found Cell Info {}.", symbLibNmbr);
                     return;
                 }
-                TbVmsSymbIfsc cell = dto.toEntity();
-                for (Map.Entry<Integer, TbVmsSymbIfsc> cellObj : obj.getCellMap().entrySet()) {
+                TbVmsSymbIfscDto cell = data.toDto();
+                for (Map.Entry<Integer, TbVmsSymbIfscDto> cellObj : obj.getCellMap().entrySet()) {
                     if (cellObj.getValue().getVmsIfscId().equals(cell.getVmsIfscId())) {
                         cell.setDup(true);
                         break;
@@ -164,7 +164,7 @@ public class VmsSymbService {
         }
     }
 
-    public void saveByteArrayToFile(TbVmsSymbLib obj, String updtDt) {
+    public void saveByteArrayToFile(TbVmsSymbLibDto obj, String updtDt) {
         File imagFile = new File(obj.getLocalFileName());
         if (!imagFile.exists() || !obj.getUpdtDt().equals(updtDt)) {
             if (imagFile.exists()) {

+ 18 - 8
src/main/java/com/its/vms/ui/MainUI.java

@@ -3,10 +3,11 @@ 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.app.AppUtils;
 import com.its.app.utils.SysUtils;
-import com.its.vms.entity.TbVmsCtlr;
-import com.its.vms.global.AppRepository;
 import com.its.vms.dto.NET;
+import com.its.vms.entity.TbVmsCtlr;
+import com.its.vms.service.AppRepositoryService;
 import com.sun.management.OperatingSystemMXBean;
 import lombok.Getter;
 import lombok.extern.slf4j.Slf4j;
@@ -192,10 +193,14 @@ public class MainUI {
             public void mouseClicked(MouseEvent me) {
                 // double click
                 if (me.getClickCount() == 2) {
-                    for (Map.Entry<Long, TbVmsCtlr> e : AppRepository.getInstance().getCtlrMap().entrySet()) {
-                        TbVmsCtlr obj = e.getValue();
+                    AppRepositoryService repoService = (AppRepositoryService) AppUtils.getBean(AppRepositoryService.class);
+                    repoService.getCtlrMap().forEach((key, obj) -> {
                         obj.resetConnectCount();
-                    }
+                    });
+//                    for (Map.Entry<Long, TbVmsCtlr> e : AppRepository.getInstance().getCtlrMap().entrySet()) {
+//                        TbVmsCtlr obj = e.getValue();
+//                        obj.resetConnectCount();
+//                    }
                 }
                 super.mouseClicked(me);
             }
@@ -330,7 +335,9 @@ public class MainUI {
     public void updateCommSttsTotal() {
         int ctlrTotal = 0;
         int ctlrError = 0;
-        for (Map.Entry<Long, TbVmsCtlr> e : AppRepository.getInstance().getCtlrMap().entrySet()) {
+        //for (Map.Entry<Long, TbVmsCtlr> e : AppRepository.getInstance().getCtlrMap().entrySet()) {
+        AppRepositoryService repoService = (AppRepositoryService) AppUtils.getBean(AppRepositoryService.class);
+        for (Map.Entry<Long, TbVmsCtlr> e : repoService.getCtlrMap().entrySet()) {
             TbVmsCtlr obj = e.getValue();
             if (StringUtils.equals("N", obj.getDelYn())) {
                 ctlrTotal++;
@@ -351,9 +358,12 @@ public class MainUI {
     }
 
     public void loadControllerInfo() {
-        log.info("MainUI.loadControllerInfo: start. {} EA.", AppRepository.getInstance().getCtlrMap().size());
+        AppRepositoryService repoService = (AppRepositoryService) AppUtils.getBean(AppRepositoryService.class);
+        //log.info("MainUI.loadControllerInfo: start. {} EA.", AppRepository.getInstance().getCtlrMap().size());
+        log.info("MainUI.loadControllerInfo: start. {} EA.", repoService.getCtlrMap().size());
         SortedMap<Long, TbVmsCtlr> ctlrMap = new TreeMap<>();
-        for (Map.Entry<Long, TbVmsCtlr> e : AppRepository.getInstance().getCtlrMap().entrySet()) {
+        //for (Map.Entry<Long, TbVmsCtlr> e : AppRepository.getInstance().getCtlrMap().entrySet()) {
+        for (Map.Entry<Long, TbVmsCtlr> e : repoService.getCtlrMap().entrySet()) {
             TbVmsCtlr obj = e.getValue();
             if (StringUtils.equals("N", obj.getDelYn())) {
                 ctlrMap.put(obj.getCtlrNmbr(), obj);

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

@@ -1,9 +1,9 @@
 package com.its.vms.webapp.controller;
 
 import com.its.vms.config.ApplicationConfig;
-import com.its.vms.entity.TbVmsCtlr;
-import com.its.vms.global.AppRepository;
 import com.its.vms.dto.NET;
+import com.its.vms.entity.TbVmsCtlr;
+import com.its.vms.service.AppRepositoryService;
 import com.its.vms.webapp.service.FileService;
 import com.its.vms.xnettcp.vms.handler.VmsServerIdleStateHandler;
 import lombok.RequiredArgsConstructor;
@@ -30,13 +30,15 @@ public class WebAppController {
 
     private final ResourceLoader resourceLoader;
     private final ApplicationConfig applicationConfig;
+    private final AppRepositoryService repoService;
     private final FileService fileService;
 
     @RequestMapping(value = {"/controller"})
     public String controller(Model model, HttpServletRequest request) {
         String result = "controller";
         SortedMap<Long, TbVmsCtlr> ctlrMap = new TreeMap<>();
-        for (Map.Entry<Long, TbVmsCtlr> e : AppRepository.getInstance().getCtlrMap().entrySet()) {
+        //for (Map.Entry<Long, TbVmsCtlr> e : AppRepository.getInstance().getCtlrMap().entrySet()) {
+        for (Map.Entry<Long, TbVmsCtlr> e : this.repoService.getCtlrMap().entrySet()) {
             TbVmsCtlr obj = e.getValue();
             if (obj.getNetState() == NET.CLOSED) {
 //                if (obj.getChannel() != null || obj.getLogin() != null) {
@@ -56,7 +58,8 @@ public class WebAppController {
     @ResponseBody
     public ConcurrentHashMap<Long, TbVmsCtlr> getControllerInfo() {
         ConcurrentHashMap<Long, TbVmsCtlr> ctlrMap = new ConcurrentHashMap<>();
-        for (Map.Entry<Long, TbVmsCtlr> e : AppRepository.getInstance().getCtlrMap().entrySet()) {
+        //for (Map.Entry<Long, TbVmsCtlr> e : AppRepository.getInstance().getCtlrMap().entrySet()) {
+        for (Map.Entry<Long, TbVmsCtlr> e : this.repoService.getCtlrMap().entrySet()) {
             TbVmsCtlr obj = e.getValue();
             ctlrMap.put(obj.getCtlrNmbr(), obj);
         }
@@ -65,9 +68,10 @@ public class WebAppController {
 
     @RequestMapping(value = ("/disconnectController"))
     @ResponseBody
-    public String disconnectController(@RequestParam("id") String id) {
+    public String disconnectController(@RequestParam("id") Long id) {
         String result = "제어기와의 통신 연결을 종료 하였습니다.";
-        TbVmsCtlr ctlr = AppRepository.getInstance().getCtlrMap().get(id);
+        //TbVmsCtlr ctlr = AppRepository.getInstance().getCtlrMap().get(id);
+        TbVmsCtlr ctlr = this.repoService.getCtrlMap(id);
         if (ctlr != null && ctlr.getNetState() > NET.CLOSED && ctlr.getChannel() != null) {
             if (ctlr.getNetState() == NET.LOGIN_REQ) {
                 VmsServerIdleStateHandler.disconnectChannel(ctlr, ctlr.getChannel());
@@ -91,7 +95,8 @@ public class WebAppController {
     @ResponseBody
     public String allDisconnectController() {
         String result = "통신 연결 중인 제어기와의 통신 연결을 종료 하였습니다.";
-        for (Map.Entry<Long, TbVmsCtlr> e : AppRepository.getInstance().getCtlrMap().entrySet()) {
+        //for (Map.Entry<Long, TbVmsCtlr> e : AppRepository.getInstance().getCtlrMap().entrySet()) {
+        for (Map.Entry<Long, TbVmsCtlr> e : this.repoService.getCtlrMap().entrySet()) {
             TbVmsCtlr ctlr = e.getValue();
             //if (ctlr != null && ctlr.getNetState() > NET.CLOSED && ctlr.getChannel() != null) {
             if (ctlr != null && ctlr.getChannel() != null) {
@@ -113,9 +118,10 @@ public class WebAppController {
 
     @RequestMapping(value = ("/resetConnCount"))
     @ResponseBody
-    public String resetConnCount(@RequestParam("id") String id) {
+    public String resetConnCount(@RequestParam("id") Long id) {
         String result = "통신 접속횟수를 초기화 하였습니다.";
-        TbVmsCtlr ctlr = AppRepository.getInstance().getCtlrMap().get(id);
+        //TbVmsCtlr ctlr = AppRepository.getInstance().getCtlrMap().get(id);
+        TbVmsCtlr ctlr = this.repoService.getCtrlMap(id);
         if (ctlr != null) {
             ctlr.resetConnectCount();
         }
@@ -126,7 +132,8 @@ public class WebAppController {
     @ResponseBody
     public String allResetConnCount() {
         String result = "모든 제어기의 통신 접속횟수를 초기화 하였습니다.";
-        for (Map.Entry<Long, TbVmsCtlr> e : AppRepository.getInstance().getCtlrMap().entrySet()) {
+        //for (Map.Entry<Long, TbVmsCtlr> e : AppRepository.getInstance().getCtlrMap().entrySet()) {
+        for (Map.Entry<Long, TbVmsCtlr> e : this.repoService.getCtlrMap().entrySet()) {
             TbVmsCtlr ctlr = e.getValue();
             ctlr.resetConnectCount();
         }
@@ -135,9 +142,10 @@ public class WebAppController {
 
     @RequestMapping(value = ("/resetController"))
     @ResponseBody
-    public String resetController(@RequestParam("id") String id) {
+    public String resetController(@RequestParam("id") Long id) {
         String result = "제어기를 리셋 하였습니다.";
-        TbVmsCtlr ctlr = AppRepository.getInstance().getCtlrMap().get(id);
+        //TbVmsCtlr ctlr = AppRepository.getInstance().getCtlrMap().get(id);
+        TbVmsCtlr ctlr = this.repoService.getCtrlMap(id);
         if (ctlr != null && ctlr.getNetState() > NET.CLOSED && ctlr.getChannel() != null) {
 //            TcpServerIdleStateHandler.disconnectChannel(ctlr.getChannel());
 //            try {
@@ -156,7 +164,8 @@ public class WebAppController {
     @ResponseBody
     public String allResetController(@RequestParam("id") String id) {
         String result = "통신 연결 중인 제어기를 리셋 하였습니다.";
-        for (Map.Entry<Long, TbVmsCtlr> e : AppRepository.getInstance().getCtlrMap().entrySet()) {
+        //for (Map.Entry<Long, TbVmsCtlr> e : AppRepository.getInstance().getCtlrMap().entrySet()) {
+        for (Map.Entry<Long, TbVmsCtlr> e : this.repoService.getCtlrMap().entrySet()) {
             TbVmsCtlr ctlr = e.getValue();
             if (ctlr != null && ctlr.getNetState() > NET.CLOSED && ctlr.getChannel() != null) {
                 if (ctlr.getNetState() == NET.LOGIN_REQ) {

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

@@ -5,7 +5,7 @@ import com.its.app.utils.NettyUtils;
 import com.its.vms.dao.mapper.VmsCtlrMapper;
 import com.its.vms.dto.TbVmsCtrlHsDto;
 import com.its.vms.entity.TbVmsCtlr;
-import com.its.vms.global.AppRepository;
+import com.its.vms.service.AppRepositoryService;
 import com.its.vms.xnettcp.center.protocol.CenterProtocol;
 import com.its.vms.xnettcp.center.protocol.CenterReqFramePacket;
 import com.its.vms.xnettcp.center.protocol.CenterResProtocol;
@@ -13,6 +13,7 @@ import io.netty.channel.ChannelFuture;
 import io.netty.channel.ChannelHandler;
 import io.netty.channel.ChannelHandlerContext;
 import io.netty.channel.ChannelInboundHandlerAdapter;
+import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 
@@ -20,9 +21,12 @@ import java.nio.ByteBuffer;
 
 @Slf4j
 @Component
+@RequiredArgsConstructor
 @ChannelHandler.Sharable
 public class CenterTcpServerInboundHandler extends ChannelInboundHandlerAdapter {
 
+    private final AppRepositoryService repoService;
+
     public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
 
         VmsCtlrMapper mapper = (VmsCtlrMapper) AppUtils.getBean(VmsCtlrMapper.class);
@@ -51,7 +55,8 @@ public class CenterTcpServerInboundHandler extends ChannelInboundHandlerAdapter
 //            ctrlHs.setCntlType(String.valueOf(cntlType));
 //            ctrlHs.setRspsType("0");
 
-            TbVmsCtlr obj = AppRepository.getInstance().getCtlrMap().get(String.valueOf(ctlrNmbr));
+            //TbVmsCtlr obj = AppRepository.getInstance().getCtlrMap().get(String.valueOf(ctlrNmbr));
+            TbVmsCtlr obj = this.repoService.getCtrlMap(ctlrNmbr);
             if (obj == null) {
                 log.error("CenterTcpServerInboundHandler: Center Request Unknown RSE: [{}]", ctlrNmbr);
 //                ctrlHs.setRspsType("9");  // 알수없는제어기

+ 5 - 3
src/main/java/com/its/vms/xnettcp/vms/VmsTcpCommServerInitializer.java

@@ -3,8 +3,8 @@ package com.its.vms.xnettcp.vms;
 import com.its.app.utils.NettyUtils;
 import com.its.vms.config.CommunicationConfig;
 import com.its.vms.entity.TbVmsCtlr;
-import com.its.vms.global.AppRepository;
 import com.its.vms.process.DbmsDataProcess;
+import com.its.vms.service.AppRepositoryService;
 import com.its.vms.xnettcp.vms.codec.VmsTcpServerDecoder;
 import com.its.vms.xnettcp.vms.codec.VmsTcpServerEncoder;
 import com.its.vms.xnettcp.vms.handler.VmsServerIdleStateHandler;
@@ -26,11 +26,13 @@ public class VmsTcpCommServerInitializer extends ChannelInitializer<Channel> {
     private final DbmsDataProcess dbmsDataProcess;
     private final VmsServerPacketInboundHandler vmsServerPacketInboundHandler;
     private final VmsTcpServerEncoder vmsTcpServerEncoder;
+    private final AppRepositoryService repoService;
 
     @Override
     protected void initChannel(Channel channel) throws Exception {
         String ipAddress  = NettyUtils.getRemoteIpAddress(channel);
-        TbVmsCtlr obj = AppRepository.getInstance().getCtlrIpMap().get(ipAddress);
+        //TbVmsCtlr obj = AppRepository.getInstance().getCtlrIpMap().get(ipAddress);
+        TbVmsCtlr obj = this.repoService.getIpAddrMap(ipAddress);
         if (obj == null) {
             log.error("VmsTcpCommServerInitializer.----initChannel: {}, Unknown ip address. will be closed.", ipAddress);
             channel.disconnect();
@@ -47,7 +49,7 @@ public class VmsTcpCommServerInitializer extends ChannelInitializer<Channel> {
             //pipeline.addLast(new LoggingHandler(LogLevel.INFO));
             pipeline.addLast("vmsTcpIdleStateHandler", tcpIdleStateHandler);
             pipeline.addLast("vmsServerIdleStateHandler", new VmsServerIdleStateHandler(obj, this.dbmsDataProcess));   // packet idle state handler, event handler
-            pipeline.addLast("vmsServerDecoder", new VmsTcpServerDecoder(this.config));  // Decoding handler
+            pipeline.addLast("vmsServerDecoder", new VmsTcpServerDecoder(this.config, this.repoService));  // Decoding handler
             pipeline.addLast("vmsServerPacketInboundHandler", this.vmsServerPacketInboundHandler); // packet distribute handler add
             pipeline.addLast("vmsServerEncoder", this.vmsTcpServerEncoder);  // Encoding handler
         }

+ 4 - 1
src/main/java/com/its/vms/xnettcp/vms/VmsTcpCommServerService.java

@@ -4,6 +4,7 @@ import com.its.app.utils.NettyUtils;
 import com.its.app.utils.OS;
 import com.its.vms.config.CommunicationConfig;
 import com.its.vms.process.DbmsDataProcess;
+import com.its.vms.service.AppRepositoryService;
 import com.its.vms.xnettcp.vms.codec.VmsTcpServerEncoder;
 import com.its.vms.xnettcp.vms.handler.VmsServerPacketInboundHandler;
 import io.netty.bootstrap.ServerBootstrap;
@@ -24,6 +25,7 @@ public class VmsTcpCommServerService {
     private final VmsTcpServerEncoder vmsTcpServerEncoder;
     private final VmsServerPacketInboundHandler vmsServerPacketInboundHandler;
     private final DbmsDataProcess dbmsDataProcess;
+    private final AppRepositoryService repoService;
 
     private EventLoopGroup acceptGroups = null;
     private EventLoopGroup workerGroups = null;
@@ -104,7 +106,8 @@ public class VmsTcpCommServerService {
                 this.config,
                 this.dbmsDataProcess,
                 this.vmsServerPacketInboundHandler,
-                this.vmsTcpServerEncoder
+                this.vmsTcpServerEncoder,
+                this.repoService
         );
         serverBootstrap.childHandler(vmsTcpCommServerInitializer);
 

+ 4 - 2
src/main/java/com/its/vms/xnettcp/vms/codec/VmsTcpServerDecoder.java

@@ -4,7 +4,7 @@ import com.its.app.utils.NettyUtils;
 import com.its.app.utils.SysUtils;
 import com.its.vms.config.CommunicationConfig;
 import com.its.vms.entity.TbVmsCtlr;
-import com.its.vms.global.AppRepository;
+import com.its.vms.service.AppRepositoryService;
 import com.its.vms.xnettcp.vms.handler.VmsServerIdleStateHandler;
 import io.netty.buffer.ByteBuf;
 import io.netty.channel.Channel;
@@ -21,6 +21,7 @@ import java.util.List;
 public class VmsTcpServerDecoder extends ByteToMessageDecoder {
 
     private final CommunicationConfig communicationConfig;
+    private final AppRepositoryService repoService;
 
     private static final int DSRC_ASN1_PACKET_MIN_SIZE = 5;
     private static final int DSRC_ASN1_PACKET_MAX_SIZE = 3000;
@@ -31,7 +32,8 @@ public class VmsTcpServerDecoder extends ByteToMessageDecoder {
         //String tcpAddress = NettyUtils.getTcpAddress(ctx.channel());
         String ipAddress = NettyUtils.getRemoteIpAddress(ctx.channel());
         Channel channel = ctx.channel();
-        TbVmsCtlr obj = AppRepository.getInstance().getCtlrIpMap().get(ipAddress);
+        //TbVmsCtlr obj = AppRepository.getInstance().getCtlrIpMap().get(ipAddress);
+        TbVmsCtlr obj = this.repoService.getIpAddrMap(ipAddress);
         if (obj == null) {
             log.error("TcpServerDecoder.decode: Unknown Controller IP: {}. will be close.", ipAddress);
             VmsServerIdleStateHandler.disconnectChannel(null, channel);

+ 4 - 2
src/main/java/com/its/vms/xnettcp/vms/codec/VmsTcpServerEncoder.java

@@ -3,7 +3,7 @@ package com.its.vms.xnettcp.vms.codec;
 import com.its.app.utils.NettyUtils;
 import com.its.vms.config.CommunicationConfig;
 import com.its.vms.entity.TbVmsCtlr;
-import com.its.vms.global.AppRepository;
+import com.its.vms.service.AppRepositoryService;
 import com.its.vms.xnettcp.vms.handler.VmsServerIdleStateHandler;
 import io.netty.buffer.ByteBuf;
 import io.netty.channel.Channel;
@@ -22,13 +22,15 @@ import org.springframework.stereotype.Component;
 public class VmsTcpServerEncoder extends MessageToByteEncoder<Object> {
 
     private final CommunicationConfig communicationConfig;
+    private final AppRepositoryService repoService;
 
      @Override
     protected void encode(ChannelHandlerContext ctx, Object msg, ByteBuf byteBuf) throws Exception {
 
         String ipAddress = NettyUtils.getRemoteIpAddress(ctx.channel());
         Channel channel = ctx.channel();
-         TbVmsCtlr obj = AppRepository.getInstance().getCtlrIpMap().get(ipAddress);
+        //TbVmsCtlr obj = AppRepository.getInstance().getCtlrIpMap().get(ipAddress);
+        TbVmsCtlr obj = this.repoService.getIpAddrMap(ipAddress);
         if (obj == null) {
             log.error("VmsTcpServerEncoder.encode: Unknown Controller IP: {}. will be close.", ipAddress);
             VmsServerIdleStateHandler.disconnectChannel(null, channel);

+ 5 - 2
src/main/java/com/its/vms/xnettcp/vms/handler/VmsServerIdleStateHandler.java

@@ -1,12 +1,13 @@
 package com.its.vms.xnettcp.vms.handler;
 
+import com.its.app.AppUtils;
 import com.its.app.utils.NettyUtils;
 import com.its.vms.dto.TbVmsCtlrSttsDto;
 import com.its.vms.entity.TbVmsCtlr;
-import com.its.vms.global.AppRepository;
 import com.its.vms.process.DbmsData;
 import com.its.vms.process.DbmsDataProcess;
 import com.its.vms.process.DbmsDataType;
+import com.its.vms.service.AppRepositoryService;
 import io.netty.channel.Channel;
 import io.netty.channel.ChannelDuplexHandler;
 import io.netty.channel.ChannelFuture;
@@ -122,7 +123,9 @@ public class VmsServerIdleStateHandler extends ChannelDuplexHandler {
         // 로그인 하지 않은 또는 비정상 접속 네트워크 세션 종료(로그인 처리를 수행하지 않은 세션에 대한 종료)
         String ipAddress = NettyUtils.getRemoteIpAddress(channel);
         if (AObj == null) {
-            AObj = AppRepository.getInstance().getCtlrIpMap().get(ipAddress);
+            //AObj = AppRepository.getInstance().getCtlrIpMap().get(ipAddress);
+            AppRepositoryService repoService = (AppRepositoryService) AppUtils.getBean(AppRepositoryService.class);
+            AObj = repoService.getIpAddrMap(ipAddress);
         }
         if (AObj != null) {
             MDC.put("id", AObj.getLogKey());

+ 12 - 12
src/main/java/com/its/vms/xnettcp/vms/process/TcpServerDataProcess.java

@@ -1,10 +1,9 @@
 package com.its.vms.xnettcp.vms.process;
 
-import com.its.app.AppUtils;
 import com.its.app.utils.NettyUtils;
 import com.its.vms.config.CommunicationConfig;
 import com.its.vms.entity.TbVmsCtlr;
-import com.its.vms.global.AppRepository;
+import com.its.vms.service.AppRepositoryService;
 import com.its.vms.xnettcp.vms.handler.VmsServerIdleStateHandler;
 import com.its.vms.xnettcp.vms.process.response.VmsResponse;
 import io.netty.channel.Channel;
@@ -25,6 +24,8 @@ import java.util.concurrent.ThreadPoolExecutor;
 public class TcpServerDataProcess {
 
     private final CommunicationConfig communicationConfig;
+    private final AppRepositoryService repoService;
+    private final TcpServerDataTask serverDataTask;
 
     public static LinkedBlockingQueue<TcpServerData> SERVER_DATA_QUEUE = new LinkedBlockingQueue<>(1000);
     private ThreadPoolExecutor taskExecutor = (ThreadPoolExecutor)Executors.newFixedThreadPool(1);
@@ -43,19 +44,17 @@ public class TcpServerDataProcess {
         for (int ii = 0; ii < executePool; ii++) {
             log.info("TcpServerDataProcess.Task: {}", ii);
             this.taskExecutor.execute(() -> {
-                while (true) {
+                boolean isRunning = true;
+                while (isRunning) {
                     try {
                         TcpServerData serverData = TcpServerDataProcess.SERVER_DATA_QUEUE.take();
-                        if (serverData != null) {
-                            TcpServerDataTask handler = (TcpServerDataTask) AppUtils.getBean(TcpServerDataTask.class);
-                            handler.run(this, serverData);
-                        }
-                        else {
-                            log.error("TcpServerDataProcess.Task: Received data null");
-                        }
+                        //TcpServerDataTask handler = (TcpServerDataTask) AppUtils.getBean(TcpServerDataTask.class);
+                        this.serverDataTask.run(this, serverData);
                     }
                     catch (Exception e) {
-                        log.error("TcpServerDataProcess.Task: Exception: {}", e.getMessage(), e);
+                        log.error("TcpServerDataProcess.Task: Exception: {}", e.getMessage());
+                        Thread.currentThread().interrupt();
+                        isRunning = false;
                     }
                 }
             });
@@ -69,7 +68,8 @@ public class TcpServerDataProcess {
             ChannelHandlerContext ctx = data.getCtx();
             Channel channel = ctx.channel();
             String ipAddress = NettyUtils.getRemoteIpAddress(channel);
-            TbVmsCtlr obj = AppRepository.getInstance().getCtlrIpMap().get(ipAddress);;
+            //TbVmsCtlr obj = AppRepository.getInstance().getCtlrIpMap().get(ipAddress);;
+            TbVmsCtlr obj = this.repoService.getIpAddrMap(ipAddress);;
 //            C2CAuthenticatedMessage c2c = (C2CAuthenticatedMessage)data.getData();
 //            PDUs pdus = c2c.getPdu();
 //

+ 26 - 0
src/main/java/com/its/vms/xnettcp/vms/process/TcpServerSendData.java

@@ -0,0 +1,26 @@
+package com.its.vms.xnettcp.vms.process;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class TcpServerSendData {
+    public static final int DATA_RES_DEVICE_ID = 0;
+    public static final int DATA_REQ_CONTROL = 1;
+
+    private long requestTime;
+    private int command;
+    private Object data;
+
+    public TcpServerSendData(int command, Object data) {
+        this.requestTime = System.currentTimeMillis();
+        this.command = command;
+        this.data = data;
+    }
+
+    public long elapsed() {
+        return System.currentTimeMillis() - this.requestTime;
+    }
+
+}

+ 98 - 0
src/main/java/com/its/vms/xnettcp/vms/process/TcpServerSendDataProcess.java

@@ -0,0 +1,98 @@
+package com.its.vms.xnettcp.vms.process;
+
+import com.its.vms.dto.NET;
+import com.its.vms.entity.TbVmsCtlr;
+import com.its.vms.xnettcp.vms.protocol.dto.VmsReqControlDto;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.slf4j.MDC;
+
+import java.util.concurrent.Executors;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+
+@Slf4j
+@RequiredArgsConstructor
+public class TcpServerSendDataProcess {
+
+    private final TbVmsCtlr vmsCtlr;
+
+    private final LinkedBlockingQueue<TcpServerSendData> reqCommandBlockingQueue = new LinkedBlockingQueue<>(100);
+    private final ThreadPoolExecutor taskExecutor = (ThreadPoolExecutor)Executors.newFixedThreadPool(1);
+
+    public void run() {
+        log.info("TcpServerReqDataProcess[{}].run: Start.", this.vmsCtlr.getCtlrNmbr());
+        this.taskExecutor.execute(() -> {
+            boolean isRunning = true;
+            while (isRunning) {
+                try {
+                    TcpServerSendData reqData = this.reqCommandBlockingQueue.take();
+                    process(reqData);
+                }
+                catch (InterruptedException e) {
+                    log.error("TcpServerReqDataProcess.Task: Exception: {}", e.getMessage(), e);
+                    Thread.currentThread().interrupt();
+                    isRunning = false;
+                }
+            }
+        });
+    }
+
+    public void process(TcpServerSendData data) {
+
+        MDC.put("id", this.vmsCtlr.getLogKey());
+
+        boolean isConnected = (this.vmsCtlr.getNetState() > NET.CLOSED && this.vmsCtlr.getChannel() != null);
+        boolean isRequested = false;
+        log.info("TcpServerReqDataProcess[{}].process: command({}), connected({}), Elapsed: {} ms.", this.vmsCtlr.getCtlrNmbr(), data.getCommand(), isConnected, data.elapsed());
+
+        if (isConnected) {
+            try {
+                switch (data.getCommand()) {
+                    case TcpServerSendData.DATA_RES_DEVICE_ID:
+                        // 디바이스 인증요청에 대한 응답
+                        // 디바이스 정보가 일치 하지 않으면 네트워크 연결을 종료한다.
+                        break;
+                    case TcpServerSendData.DATA_REQ_CONTROL:
+                        VmsReqControlDto control = (VmsReqControlDto) data.getData();
+                        byte[] command = control.getCommand();
+                        // TODO: 전송성공하면
+
+                        if (isRequested) {
+                            this.vmsCtlr.getModule().setOnOff(true);
+                            //this.vmsCtlr.getModule().setOnOff(command[0]);
+                        } else {
+                            int retry = this.vmsCtlr.getModule().getRetry();
+                            retry++;
+                            this.vmsCtlr.getModule().setRetry(retry);
+                            this.vmsCtlr.getModule().setOnOff(false);
+                        }
+                        break;
+                    default:
+                        break;
+                }
+            } catch (Exception e) {
+                log.error("TcpServerReqDataProcess[{}].process: Exception: {}", this.vmsCtlr.getCtlrNmbr(), e.toString());
+            }
+        }
+
+        log.info("TcpServerReqDataProcess[{}].process: command({}), connected({}), Requested({}).", this.vmsCtlr.getCtlrNmbr(), data.getCommand(), isConnected, isRequested);
+
+        MDC.remove(this.vmsCtlr.getLogKey());
+        MDC.clear();
+    }
+
+    public void add(TcpServerSendData data) {
+        try {
+            //offer => full -> return
+            //add   => full -> wait
+            //큐가 차더라도 바로 리턴함.
+            if (!this.reqCommandBlockingQueue.offer(data)) {
+                log.error("TcpServerReqDataProcess[{}].add: QueueFull: {}", this.vmsCtlr.getCtlrNmbr(), this.reqCommandBlockingQueue.size());
+            }
+        } catch (Exception e) {
+            log.error("TcpServerReqDataProcess[{}].add: QueueError: {}", this.vmsCtlr.getCtlrNmbr(), e.getMessage());
+        }
+    }
+
+}

+ 19 - 0
src/main/java/com/its/vms/xnettcp/vms/protocol/dto/VmsReqControlDto.java

@@ -0,0 +1,19 @@
+package com.its.vms.xnettcp.vms.protocol.dto;
+
+import com.its.vms.entity.eVmsReqControl;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class VmsReqControlDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private eVmsReqControl control;
+    private byte[] command;
+
+    public VmsReqControlDto(eVmsReqControl control, byte[] command) {
+        this.control = control;
+        this.command = command;
+    }
+}

+ 1 - 1
src/main/resources/mybatis/mapper/VmsAtmpMapper.xml

@@ -3,7 +3,7 @@
 
 <mapper namespace="com.its.vms.dao.mapper.VmsAtmpMapper">
 
-    <select id="selectVmsAtmpInfo" resultType="com.its.vms.dto.TbVmsAtmpDto">
+    <select id="selectVmsAtmpInfo" resultType="com.its.vms.entity.TbVmsAtmp">
     <![CDATA[
         select t1.atmp_sttn_nmbr AS atmpSttnNmbr,
                t1.atmp_sttn_nm   AS atmpSttnNm,

+ 35 - 18
src/main/resources/mybatis/mapper/VmsCtlrMapper.xml

@@ -58,22 +58,22 @@
 
     <select id="selectCtlrStts" resultType="com.its.vms.dto.TbVmsCtlrSttsDto">
     <![CDATA[
-        SELECT A.RSE_CTLR_NMBR AS RSE_CTLR_NMBR,
-               A.UPDT_DT,
-               A.CMNC_STTS_CD,
-               A.CNTL_DEVC_STTS,
-               A.ATN_1_STTS,
-               A.ATN_2_STTS,
-               A.ATN_3_STTS,
-               A.ATN_4_STTS,
-               A.ATN_1_MTNS,
-               A.ATN_2_MTNS,
-               A.ATN_3_MTNS,
-               A.ATN_4_MTNS
-        FROM TB_RSE_CTLR_STTS A,
-             TB_RSE_CTLR      B
-        WHERE B.DEL_YN = 'N'
-          AND A.RSE_CTLR_NMBR = B.RSE_CTLR_NMBR
+        select t1.vms_ctlr_nmbr     AS vmsCtlrNmbr,
+               t1.updt_dt           AS updtDt,
+               t1.cmnc_stts_cd      AS cmncSttsCd,
+               t1.pwer_stts_cd      AS pwerSttsCd,
+               t1.modl_stts_cd      AS modlSttsCd,
+               t1.cbox_door_stts_cd AS cboxDoorSttsCd,
+               t1.fan_stts_cd       AS fanSttsCd,
+               t1.hetr_stts_cd      AS hetrSttsCd,
+               t1.cbox_tmpr         AS cboxTmpr,
+               t1.brgh_val          AS brghVal,
+               t1.comm_stts_cd      AS commSttsCd,
+               t1.modl_stts         AS modlStts,
+               t1.pwer_stts         AS pwerStts
+        from tb_vms_ctlr_stts t1
+        inner join tb_vms_ctlr t2
+        on t1.vms_ctlr_nmbr = t2.vms_ctlr_nmbr
         ]]>
     </select>
 
@@ -275,7 +275,7 @@
         ]]>
     </insert>
 
-    <insert id="insertRseCtrlHs" parameterType="com.its.vms.dto.TbVmsCtrlHsDto">
+    <insert id="insertVmsCtrlHs" parameterType="com.its.vms.dto.TbVmsCtrlHsDto">
     <![CDATA[
         insert into tb_vms_ctrl_hs (
             ctrl_dt,
@@ -295,7 +295,7 @@
         ]]>
     </insert>
 
-    <insert id="updateRseCtrlHs" parameterType="com.its.vms.dto.TbVmsCtrlHsDto">
+    <insert id="updateVmsCtrlHs" parameterType="com.its.vms.dto.TbVmsCtrlHsDto">
     <![CDATA[
         update tb_vms_ctrl_hs
             set ctrl_result = #{obj.ctrlResult}
@@ -305,4 +305,21 @@
         ]]>
     </insert>
 
+    <update id="updateVmsCtlrParam" parameterType="com.its.vms.dto.TbVmsCtlrDto">
+    <![CDATA[
+        update tb_vms_ctlr
+        set
+            panl_pwer_mode      = #{panlPwerMode},
+            fan_mode            = #{fanMode},
+            fan_run_tmpr        = #{fanRunTmpr},
+            hetr_mode           = #{hetrMode},
+            hetr_run_tmpr       = #{hetrRunTmpr},
+            brgh_mode           = #{brghMode},
+            brgh_curr_step      = #{brghCurrStep},
+            brgh_week_step      = #{brghWeekStep},
+            brgh_nght_step      = #{brghNghtStep}
+        where vms_ctlr_nmbr = #{vmsCtlrNmbr}
+        ]]>
+    </update>
+
 </mapper>

+ 2 - 2
src/main/resources/mybatis/mapper/VmsFontMapper.xml

@@ -3,7 +3,7 @@
 
 <mapper namespace="com.its.vms.dao.mapper.VmsFontMapper">
 
-    <select id="selectFontName" resultType="com.its.vms.dto.TbVmsFontNameDto">
+    <select id="selectFontName" resultType="com.its.vms.entity.TbVmsFontName">
     <![CDATA[
         select t1.vms_font_name_cd AS VMS_FONT_NAME_CD,
                t1.vms_font_name_nm AS VMS_FONT_NAME_NM,
@@ -11,7 +11,7 @@
         from tb_vms_font_name t1
         ]]>
     </select>
-    <select id="selectFontColr" resultType="com.its.vms.dto.TbVmsFontColrDto">
+    <select id="selectFontColr" resultType="com.its.vms.entity.TbVmsFontColr">
     <![CDATA[
         select t1.vms_font_colr_cd  AS vmsFontColrCd,
                t1.vms_font_colr_nm  AS vmsFontColrNm,

+ 2 - 2
src/main/resources/mybatis/mapper/VmsFormMapper.xml

@@ -3,7 +3,7 @@
 
 <mapper namespace="com.its.vms.dao.mapper.VmsFormMapper">
 
-    <select id="selectVmsFormInfo" resultType="com.its.vms.dto.TbVmsFormDto">
+    <select id="selectVmsFormInfo" resultType="com.its.vms.entity.TbVmsForm">
     <![CDATA[
         select t1.vms_form_id                   AS vmsFormId,
                t1.vms_type_cd                   AS vmsTypeCd,
@@ -22,7 +22,7 @@
         ]]>
     </select>
 
-    <select id="selectVmsFormObjectInfo" resultType="com.its.vms.dto.TbVmsFormObjectDto">
+    <select id="selectVmsFormObjectInfo" resultType="com.its.vms.entity.TbVmsFormObject">
     <![CDATA[
         select t1.vms_form_id             AS vmsFormId,
                t1.vms_form_object_id      AS vmsFormObjectId,

+ 3 - 2
src/main/resources/mybatis/mapper/VmsIfscMapper.xml

@@ -3,7 +3,7 @@
 
 <mapper namespace="com.its.vms.dao.mapper.VmsIfscMapper">
 
-    <select id="selectVmsRltnIfsc" resultType="com.its.vms.dto.TbVmsRltnIfscDto">
+    <select id="selectVmsRltnIfsc" resultType="com.its.vms.entity.TbVmsRltnIfsc">
     <![CDATA[
         select a.vms_ctlr_nmbr  AS vmsCtlrNmbr,
                b.vms_ifsc_id    AS vmsIfscId,
@@ -22,7 +22,8 @@
         order by a.vms_ctlr_nmbr, b.dspl_prrt
         ]]>
     </select>
-    <select id="selectVmsIfscTrafInfo" resultType="com.its.vms.dto.TbVmsIfscTrafDto">
+
+    <select id="selectVmsIfscTrafInfo" resultType="com.its.vms.entity.TbVmsIfscTraf">
     <![CDATA[
         select a.vms_ifsc_id            AS vmsIfscId,
                a.vms_ifsc_nm            AS vmsIfscNm,

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

@@ -16,4 +16,13 @@
         ]]>
     </insert>
 
+    <select id="selectVmsOnOffTime" resultType="com.its.vms.dto.TbVmsOnOffTimeDto">
+    <![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>

+ 3 - 2
src/main/resources/mybatis/mapper/VmsSymbMapper.xml

@@ -3,7 +3,7 @@
 
 <mapper namespace="com.its.vms.dao.mapper.VmsSymbMapper">
 
-    <select id="selectVmsSymbLib" resultType="com.its.vms.dto.TbVmsSymbLibDto">
+    <select id="selectVmsSymbLib" resultType="com.its.vms.entity.TbVmsSymbLib">
     <![CDATA[
         select t1.symb_lib_nmbr  AS symbLibNmbr,
                t1.rgst_dt        AS rgstDt,
@@ -28,7 +28,8 @@
         and t2.cell_id = 1
         ]]>
     </select>
-    <select id="selectVmsSymbCellInfo" resultType="com.its.vms.dto.TbVmsSymbIfscDto">
+
+    <select id="selectVmsSymbCellInfo" resultType="com.its.vms.entity.TbVmsSymbIfsc">
     <![CDATA[
         select t1.symb_lib_nmbr       AS symbLibNmbr,
                t1.cell_id             AS cellId,