shjung 2 年之前
父節點
當前提交
da723de607

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

@@ -1 +0,0 @@
-139560

+ 1 - 0
src/main/java/com/its/vms/config/ApplicationConfig.java

@@ -76,6 +76,7 @@ public class ApplicationConfig {
     private boolean imageSeqSave = false;
     private float fontSizeRatio = 1.35f;
     private boolean checkNewForm = true;
+    private boolean downloadBitmapForm = false;
 
     @PostConstruct
     private void init() {

+ 4 - 4
src/main/java/com/its/vms/domain/VmsForm.java

@@ -279,7 +279,7 @@ public class VmsForm implements Serializable {
             VmsFormObject pFormObj = getItem(jj);
 
 
-            if (StringUtils.isEmpty(pFormObj.getImageId())) pFormObj.setImageId("1"); //이력저장용
+            if (StringUtils.isEmpty(pFormObj.getMemSymbLibNmbr())) pFormObj.setMemSymbLibNmbr("1"); //이력저장용
             if (StringUtils.isEmpty(pFormObj.getTextData())) pFormObj.setTextData(" "); //이력저장용
 
             switch(pFormObj.getObjectType())
@@ -301,7 +301,7 @@ public class VmsForm implements Serializable {
                             pFormObj.getBkColor(),
                             pFormObj.getDsplWidth(),
                             pFormObj.getDsplHeight(),
-                            pFormObj.getImageId());
+                            pFormObj.getMemSymbLibNmbr());
 
                     sCont = String.format("%02X%02X%s", objType, sTmp.length(), sTmp);
                     msgData.append(sCont);
@@ -319,13 +319,13 @@ public class VmsForm implements Serializable {
                             pFormObj.getBkColor(),
                             pFormObj.getDsplWidth(),
                             pFormObj.getDsplHeight(),
-                            pFormObj.getImageId());
+                            pFormObj.getMemSymbLibNmbr());
 
                     sCont = String.format("%02X%02X%s", objType, sTmp.length(), sTmp);
                     msgData.append(sCont);
 
                     String sVertex = "";
-                    TbVmsSymbLibDto pSymbol = symbService.find(pFormObj.getImageId());
+                    TbVmsSymbLibDto pSymbol = symbService.find(pFormObj.getMemSymbLibNmbr());
                     if (pSymbol != null) {
                         int nCnt = 0;
                         StringBuilder msgTemp = new StringBuilder();

+ 45 - 45
src/main/java/com/its/vms/domain/VmsFormObject.java

@@ -5,6 +5,7 @@ import com.its.vms.dto.TbVmsFormObjectDto;
 import com.its.vms.service.VmsFontService;
 import com.its.vms.service.VmsFormService;
 import com.its.vms.xnettcp.vms.protocol.enums.eVmsFormObjectKind;
+import com.its.vms.xnettcp.vms.protocol.enums.eVmsImageType;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 
@@ -43,8 +44,7 @@ public class VmsFormObject implements Serializable {
     private int    fontBold;        // 폰트굵기
     private int    textAlign;       // 문자열정열방식
     private String textData;        // 문자열데이터
-    private String imageId;         // 이미지아이디
-    private String imageType;       // 이미지 타입
+    private String memSymbLibNmbr;  // 이미지아이디
 
     private Long   ifscId;
     private int    ifscTrafGradCd;
@@ -53,6 +53,9 @@ public class VmsFormObject implements Serializable {
     private byte[] imageData;
     private Color  fontClr;
 
+    private eVmsImageType bitmapType;
+    private int bitmapId;
+
     public VmsFormObject(Integer vmsFormId, Integer vmsFormObjectId) {
         this.objectKind = eVmsFormObjectKind.OBJECT_TEXT;
         this.vmsFormId = vmsFormId;
@@ -60,10 +63,14 @@ public class VmsFormObject implements Serializable {
         this.ifscId = 0L;
         this.imageData = null;
         this.fontClr = Color.BLACK;
+        this.bitmapId = 0;
     }
 
     public void setFormObjectInfo(String fontName, TbVmsFormObjectDto obj) {
         this.ifscTrafGradCd = 0;
+        this.ifscId = 0L;
+        this.trfcFillCd = obj.getTrfcFillCd();
+
         this.fontName   = fontName;
         this.objectType = obj.getVmsFormObjectTypeCd();     // NUMBER(3)	N			VMS FORM OBJECT 유형 코드
         this.fontNameCd = obj.getVmsFontNameCd();           // NUMBER(3)	N			VMS 글꼴 유형 코드
@@ -80,8 +87,21 @@ public class VmsFormObject implements Serializable {
         this.bkColor    = obj.getVmsDsplBkColor();          // NUMBER(1)	Y	0		VMS 표출 배경색상코드
         this.objectSize = obj.getVmsDsplSize();             // NUMBER(7)	Y	0		VMS 표출 크기(문자:문자길이,이미지:이미지전체크기)
         this.textData   = obj.getVmsDsplTxt();
-        this.imageId    = obj.getSymbLibNmbr() + "0";
-        this.imageType  = "0";
+        this.memSymbLibNmbr = obj.getSymbLibNmbr() + "0";
+
+        this.bitmapType = obj.getBitmapType();
+        this.bitmapId = obj.getBitmapId();
+
+        if (VmsFormService.isObjectBitmapId(this.objectType)) {
+            this.objectKind = eVmsFormObjectKind.OBJECT_BITMAP_ID;
+        }
+        else if (obj.getVmsFormObjectTypeCd() == 3) {
+            // 소통정보배경 이미지
+            this.objectKind = eVmsFormObjectKind.OBJECT_BITMAP;
+        }
+        else {
+            this.objectKind = eVmsFormObjectKind.OBJECT_TEXT;
+        }
     }
 
     /**
@@ -137,7 +157,7 @@ public class VmsFormObject implements Serializable {
      */
     private Image getImage() {
         if (this.imageData == null || this.imageData.length == 0) {
-            log.error("VmsFormObject.getImage: Image Data null: {}, {}, [{}]", this.vmsFormId, this.vmsFormObjectId, this.imageId);
+            log.error("VmsFormObject.getImage: Image Data null: {}, {}, [{}]", this.vmsFormId, this.vmsFormObjectId, this.memSymbLibNmbr);
             return null;
         }
 
@@ -158,46 +178,26 @@ public class VmsFormObject implements Serializable {
      * @param fontService
      */
     public void drawObject(Graphics2D g2d, VmsFormService formService, VmsFontService fontService, int vmsFormColrCd, float fontSizeRatio) {
-        switch(this.objectType) {
-            case   1: //심볼
-            case   2: //이미지
-            case   3: //소통정보배경이미지
-            case  17: //소통정보이미지1
-            case  27: //소통정보이미지2
-            case  37: //소통정보이미지3
-            case  47: //소통정보이미지4
-            case 167: //@우회소통정보이미지
-            case 200: //동영상이미지
-            case 300: //스트리밍영상이미지
-            case 406: //@통합대기등급 이미지
-            case 407: //@미세먼지등급 이미지
-            case 408: //@초미세먼지등급 이미지
-            case 413: //@오존등급이미지
-                Image imgBmp = getImage();
-                if (imgBmp != null) {
-                    //vmsForm.getG2d().setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-                    //vmsForm.getG2d().drawImage(imgBmp, this.posX, this.posY, imgBmp.getWidth(null), imgBmp.getHeight(null), null);
-                    g2d.drawImage(imgBmp, this.posX, this.posY, this.dsplWidth, this.dsplHeight, null);
-                }
-                break;
-            default://기타 문자열
-                Font txtFont = new Font(this.fontName, (this.fontBold == 1) ? Font.BOLD : Font.PLAIN, this.fontSize);
-                txtFont = txtFont.deriveFont(this.fontSize * fontSizeRatio);
-                FontMetrics fm = g2d.getFontMetrics(txtFont);
-                //vmsForm.getG2d().setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-                //vmsForm.getG2d().setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);
-                //vmsForm.getG2d().setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);
-                //g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
-                if (vmsFormColrCd != this.bkColor) {
-                    Rectangle2D rect = fm.getStringBounds(this.textData, g2d);
-                    g2d.setColor(formService.getFormColor(this.bkColor));
-                    g2d.fillRect(this.posX, this.posY, (int) rect.getWidth(), (int) rect.getHeight());
-                }
-                g2d.setColor(fontService.getFontColor(this.fontColor));
-                g2d.setFont(txtFont);
-                g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);
-                g2d.drawString(this.textData, this.posX, this.posY + fm.getAscent());
-                break;
+        if (VmsFormService.isObjectBitmap(this.objectType)) {
+            Image imgBmp = getImage();
+            if (imgBmp != null) {
+                g2d.drawImage(imgBmp, this.posX, this.posY, this.dsplWidth, this.dsplHeight, null);
+            }
+        }
+        else {
+            //기타 문자열
+            Font txtFont = new Font(this.fontName, (this.fontBold == 1) ? Font.BOLD : Font.PLAIN, this.fontSize);
+            txtFont = txtFont.deriveFont(this.fontSize * fontSizeRatio);
+            FontMetrics fm = g2d.getFontMetrics(txtFont);
+            if (vmsFormColrCd != this.bkColor) {
+                Rectangle2D rect = fm.getStringBounds(this.textData, g2d);
+                g2d.setColor(formService.getFormColor(this.bkColor));
+                g2d.fillRect(this.posX, this.posY, (int) rect.getWidth(), (int) rect.getHeight());
+            }
+            g2d.setColor(fontService.getFontColor(this.fontColor));
+            g2d.setFont(txtFont);
+            g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);
+            g2d.drawString(this.textData, this.posX, this.posY + fm.getAscent());
         }
         this.fontClr = fontService.getFontColor(this.fontColor);
     }

+ 2 - 22
src/main/java/com/its/vms/dto/TbVmsCtlrDto.java

@@ -385,22 +385,6 @@ public class TbVmsCtlrDto implements Serializable {
         return true;
     }
 
-//	public synchronized boolean putRegisteredCommands(C2CAuthenticatedMessage c2c) {
-//
-//		if (this.login == null || this.headerOptions == null) {
-//			return false;
-//		}
-//		PDUs pdUs = c2c.getPdu();
-//		if (pdUs.getSubscription() == null && pdUs.getPublication() == null) {
-//			// Subscription 또는 Publication 요청에 대해서만 타임아웃 체크
-//			return false;
-//		}
-//
-//		Long packetNmbr = c2c.getDatexDataPacketNumber().value.longValue();
-//		this.registeredCommands.put(packetNmbr, c2c);
-//		return addCommandTimer(packetNmbr);
-//	}
-
     public synchronized boolean removeRegisteredCommandsTimer(int packetNmbr) {
 
         Timer timer = this.registeredCommandsTimer.get(Integer.valueOf(packetNmbr));
@@ -426,11 +410,6 @@ public class TbVmsCtlrDto implements Serializable {
         return false;
     }
 
-//	public synchronized C2CAuthenticatedMessage getRegisteredCommands(int packetNmbr) {
-//		C2CAuthenticatedMessage c2c = this.registeredCommands.get(packetNmbr);
-//		return c2c;
-//	}
-
     public TbVmsCtlr toDto() {
         return TbVmsCtlr.builder()
                 .vmsCtlrNmbr(this.vmsCtlrNmbr)
@@ -637,7 +616,8 @@ public class TbVmsCtlrDto implements Serializable {
      * @return
      */
     public boolean downloadAutoFixForm() {
-        // Download Form  (기본폼은 하나의 폼에 하나의 폼만 다운로드한다.)
+        // Download Form  (패킷하나에 하나의 폼 정보를 다운로드한다.)
+        ApplicationConfig config = (ApplicationConfig)AppUtils.getBean(ApplicationConfig.class);
         int formCnt = this.downloadData.getMaxSchedule();
         if (formCnt <= 0) {
             log.info("downloadAutoFixForm: VMS {}, Download Schedule Form Count Zero. {} EA.", this.vmsCtlrNmbr, formCnt);

+ 3 - 28
src/main/java/com/its/vms/dto/TbVmsFormObjectDto.java

@@ -1,6 +1,6 @@
 package com.its.vms.dto;
 
-import com.its.vms.entity.TbVmsFormObject;
+import com.its.vms.xnettcp.vms.protocol.enums.eVmsImageType;
 import lombok.Builder;
 import lombok.Data;
 
@@ -36,33 +36,8 @@ public class TbVmsFormObjectDto implements Serializable {
     private Integer symbLibNmbr;
     private Long vmsIfscId;
 
-    private TbVmsSymbLibDto vmsSymbLib;
     private byte[] imagData;
-
-    public TbVmsFormObject toEntity() {
-        return TbVmsFormObject.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)
-                .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)
-                .build();
-    }
+    private eVmsImageType bitmapType;
+    private int bitmapId;
 
 }

+ 25 - 32
src/main/java/com/its/vms/dto/TbVmsSymbLibDto.java

@@ -1,6 +1,5 @@
 package com.its.vms.dto;
 
-import com.its.vms.entity.TbVmsSymbLib;
 import com.its.vms.service.VmsSymbService;
 import com.its.vms.xnettcp.vms.protocol.enums.eVmsImageType;
 import lombok.Builder;
@@ -25,8 +24,8 @@ import java.util.List;
 public class TbVmsSymbLibDto implements Serializable {
     private static final long serialVersionUID = 1L;
 
-    private String symbLibNmbr;
-    private Integer orgSymbLibNmbr;
+    private String memSymbLibNmbr;
+    private Integer symbLibNmbr;
     private Integer dnldSymbLibNmbr;
     private String rgstDt;
     private byte[] redData;
@@ -42,43 +41,37 @@ public class TbVmsSymbLibDto implements Serializable {
     private Long playTm;
     private String delYn;
     private String updtDt;
-    private Integer posX;
-    private Integer posY;
+
+    private Integer posX;   // 소통정보 이미지 인 경우 X
+    private Integer posY;   // 소통정보 이미지 인 경우 Y
 
     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" 을 추가하여 이미지번호로 사용함
-        return TbVmsSymbLib.builder()
-                .symbLibNmbr(Integer.parseInt(this.symbLibNmbr))
-                .rgstDt(this.rgstDt)
-                .redData(this.redData)
-                .greenData(this.greenData)
-                .symbExpl(this.symbExpl)
-                .imagData(this.imageData)
-                .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)
-                .build();
+    public eVmsImageType getBitmapType() {
+        if ("BMP".equalsIgnoreCase(this.symbImagType)) {
+            return eVmsImageType.VMS_IMAGE_TYPE_BMP;
+        }
+        if ("GIF".equalsIgnoreCase(this.symbImagType)) {
+            return eVmsImageType.VMS_IMAGE_TYPE_GIF;
+        }
+        if ("JPG".equalsIgnoreCase(this.symbImagType)) {
+            return eVmsImageType.VMS_IMAGE_TYPE_JPG;
+        }
+        if ("PNG".equalsIgnoreCase(this.symbImagType)) {
+            return eVmsImageType.VMS_IMAGE_TYPE_PNG;
+        }
+        return eVmsImageType.VMS_IMAGE_TYPE_VIDEO;
     }
 
     public void setSymbInfo() {
 
-        this.dnldSymbLibNmbr = VmsSymbService.getDnldSymbNmbr(this.symbLibNmbr);
+        this.dnldSymbLibNmbr = VmsSymbService.getDnldSymbNmbr(this.memSymbLibNmbr);
         this.imagType = eVmsImageType.VMS_IMAGE_TYPE_BMP;
 
         String symbFileName = "";
@@ -108,7 +101,7 @@ public class TbVmsSymbLibDto implements Serializable {
 
     public Image getImage() {
         if (this.imageData == null || this.imageData.length == 0) {
-            log.error("TbVmsSymbLibDto.getImage: Image Data null: {}, {}", this.orgSymbLibNmbr, this.symbLibNmbr);
+            log.error("TbVmsSymbLibDto.getImage: Image Data null: {}, {}", this.symbLibNmbr, this.memSymbLibNmbr);
             return null;
         }
 
@@ -117,15 +110,15 @@ public class TbVmsSymbLibDto implements Serializable {
         ) {
             return ImageIO.read(bis);
         } catch (IOException e) {
-            log.error("TbVmsSymbLibDto.getImage: IOException: {}, {}", this.orgSymbLibNmbr, e.getMessage());
+            log.error("TbVmsSymbLibDto.getImage: IOException: {}, {}", this.symbLibNmbr, e.getMessage());
         }
         return null;
     }
 
     public TbVmsSymbLibDto clone(String symbLibNmbr) {
         TbVmsSymbLibDto obj = TbVmsSymbLibDto.builder()
-                .symbLibNmbr(symbLibNmbr)
-                .orgSymbLibNmbr(this.orgSymbLibNmbr)
+                .memSymbLibNmbr(symbLibNmbr)
+                .symbLibNmbr(this.symbLibNmbr)
                 .rgstDt(this.rgstDt)
                 .redData(this.redData)
                 .greenData(this.greenData)

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

@@ -63,8 +63,9 @@ public class TbVmsFormObject implements Serializable {
                 .vmsDsplSize(this.vmsDsplSize)
                 .symbLibNmbr(this.symbLibNmbr)
                 .vmsIfscId(this.vmsIfscId)
-                .vmsSymbLib(null)
                 .imagData(null)
+                .bitmapType(null)
+                .bitmapId(0)
                 .build();
     }
 

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

@@ -41,8 +41,8 @@ public class TbVmsSymbLib implements Serializable {
     public TbVmsSymbLibDto toDto() {
         // 소통정보이미지 때문에 이미지번호에 "0" 을 추가하여 이미지번호로 사용함
         TbVmsSymbLibDto obj = TbVmsSymbLibDto.builder()
-                .symbLibNmbr(this.symbLibNmbr+"0")
-                .orgSymbLibNmbr(this.symbLibNmbr)
+                .memSymbLibNmbr(this.symbLibNmbr+"0")
+                .symbLibNmbr(this.symbLibNmbr)
                 .rgstDt(this.rgstDt)
                 .redData(this.redData)
                 .greenData(this.greenData)

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

@@ -139,7 +139,7 @@ public class DbmsDataProcess {
                 case DBMS_DATA_SYMB_DNLD:
                     TbVmsSymbLibDnld symbLibDnld = (TbVmsSymbLibDnld)data.getData();
                     if (symbLibDnld != null) {
-                        log.error("XXXXXXXXXXXXXXXXX: {}", symbLibDnld);
+                        log.info("DbmsJobProcess.process: Symbol Download {}.", symbLibDnld);
                         this.symbMapper.updateVmsSymbLibDnld(symbLibDnld);
                     }
                     break;

+ 53 - 23
src/main/java/com/its/vms/service/VmsFormService.java

@@ -116,10 +116,26 @@ public class VmsFormService {
                     return;
                 }
 
+                int objType = obj.getVmsFormObjectTypeCd();
+
+                if (isObjectBitmap(obj.getVmsFormObjectTypeCd())) {
+                    // 심벌라이브러리를 참조하는 객체인데 참조하는 심벌라이브러리가 없으면 객체를 추가하지 않는다.
+                    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());
+                        return;
+                    }
+                    if (objType == 3) {
+                        // 소통정보배경 이미지
+                        formObj.setTrfBackImgId(vmsSymbLib.getMemSymbLibNmbr());
+                    }
+                    obj.setBitmapType(vmsSymbLib.getImagType());
+                    obj.setBitmapId(vmsSymbLib.getDnldSymbLibNmbr());
+                }
+
                 // 폼정보에 오브젝트 객체를 추가
                 formObj.getObjects().add(obj);
 
-                int objType = obj.getVmsFormObjectTypeCd();
                 if (formObj.getVmsFormTypeCd() == eVmsFormType.eFormTp_figure.getValue()) {
                     // 도형식 소통정보 폼인데 구간 소통정보를 하단에 표출하는 경우
                     // 하나의 폼이 여러개의 소통정보를 표출되도록 하기 위함
@@ -154,28 +170,6 @@ public class VmsFormService {
                             break;
                     }
                 }
-
-                if (objType == 3) {
-                    // 소통정보배경 이미지
-                    formObj.setTrfBackImgId(obj.getSymbLibNmbr()+"0");
-                }
-
-                if (objType ==   1 || //심볼
-                    objType ==   2 || //이미지(파일에서 직접입력한것임)
-                    objType ==   3 || //소통정보배경이미지
-                    objType ==  17 || //소통정보이미지1
-                    objType ==  27 || //소통정보이미지2
-                    objType ==  37 || //소통정보이미지3
-                    objType ==  47 || //소통정보이미지4
-                    objType == 200 || //동영상이미지
-                    objType == 300 )  //스트리밍영상이미지
-                {
-                    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());
-                    }
-                    obj.setVmsSymbLib(vmsSymbLib);
-                }
             });
         }
         catch (Exception e) {
@@ -184,6 +178,42 @@ public class VmsFormService {
         log.info("VmsFormService.loadVmsFormObjectInfo: {} ms.", elapsed.milliSeconds());
     }
 
+    public static boolean isObjectBitmap(int objType) {
+// 200: //동영상
+// 300: //스티리밍영상
+//            case 200: //동영상
+//            case 300: //스티리밍영상
+        return (objType ==   1 || //심볼
+                objType ==   2 || //이미지(파일에서 직접입력한것임)
+                objType ==   3 || //소통정보배경이미지
+                objType ==  17 || //소통정보이미지1
+                objType ==  27 || //소통정보이미지2
+                objType ==  37 || //소통정보이미지3
+                objType ==  47 || //소통정보이미지4
+                objType == 200 || //동영상이미지
+                objType == 300 || //스트리밍영상이미지
+                objType == 406 || //통합대기등급 이미지
+                objType == 407 || //미세먼지등급 이미지
+                objType == 408 || //초미세먼지등급 이미지
+                objType == 413 || //오존등급이미지
+                objType == 167);  //우회소통정보이미지
+    }
+
+    public static boolean isObjectBitmapId(int objType) {
+        return (objType ==   1 || //심볼
+                objType ==   2 || //이미지(파일에서 직접입력한것임)
+                objType ==  17 || //소통정보이미지1
+                objType ==  27 || //소통정보이미지2
+                objType ==  37 || //소통정보이미지3
+                objType ==  47 || //소통정보이미지4
+                objType == 200 || //동영상이미지
+                objType == 300 || //스트리밍영상이미지
+                objType == 406 || //통합대기등급 이미지
+                objType == 407 || //미세먼지등급 이미지
+                objType == 408 || //초미세먼지등급 이미지
+                objType == 413 || //오존등급이미지
+                objType == 167);  //우회소통정보이미지
+    }
     public void loadVmsFormColorInfo() {
         Elapsed elapsed = new Elapsed();
         try {

+ 26 - 50
src/main/java/com/its/vms/service/VmsManageService.java

@@ -953,32 +953,6 @@ public class VmsManageService {
                     } // (vmsFormType == eVmsFormType.eFormTp_figure)
 
                     VmsFormObject formObj = form.addFormObject(obj.getVmsFormObjectId());
-                    formObj.setIfscId(0L);
-                    formObj.setTrfcFillCd(obj.getTrfcFillCd());
-                    switch(obj.getVmsFormObjectTypeCd()) {
-                        case  1: //심볼
-                        case  2: //이미지
-                        case  17: //1단,소통정보이미지1
-                        case  27: //2단,소통정보이미지2
-                        case  37: //3단,소통정보이미지3
-                        case  47: //4단,소통정보이미지4
-                        case 167: //@우회소통정보이미지
-                        case 200: //동영상이미지
-                        case 300: //스트리밍영상이미지
-                        case 406: //@통합대기등급 이미지
-                        case 407: //@미세먼지등급 이미지
-                        case 408: //@초미세먼지등급 이미지
-                        case 413: //@오존등급이미지
-                            formObj.setObjectKind(eVmsFormObjectKind.OBJECT_BITMAP_ID);
-                            break;
-                        case  3: //소통정보배경이미지
-                            formObj.setObjectKind(eVmsFormObjectKind.OBJECT_BITMAP);
-                            break;
-                        default:
-                            formObj.setObjectKind(eVmsFormObjectKind.OBJECT_TEXT);
-                            break;
-                    }
-
                     formObj.setFormObjectInfo(this.fontService.getFontName(obj.getVmsFontNameCd()), obj);
 
                     if (obj.getVmsFormObjectTypeCd() == 201 || obj.getVmsFormObjectTypeCd() == 301) {
@@ -988,7 +962,7 @@ public class VmsManageService {
 
                     if (obj.getVmsFormObjectTypeCd() == 200 || obj.getVmsFormObjectTypeCd() == 300) {
                         // 200:동영상이미지, 300:스트리밍영상이미지
-                        formObj.setImageId(schedule.getSymbLibNmbr()+"0");
+                        formObj.setMemSymbLibNmbr(schedule.getSymbLibNmbr()+"0");
                         if (obj.getVmsFormObjectTypeCd() == 200) {
                             if (formObj.getDsplWidth() == 0 || formObj.getDsplHeight() == 0) {
                                 formObj.setPosX(0);                     // NUMBER(5)	Y			VMS 표출 X좌표
@@ -996,10 +970,10 @@ public class VmsManageService {
                                 formObj.setDsplWidth(form.getWidth());  // NUMBER(5)	Y	0		VMS 표출 넓이
                                 formObj.setDsplHeight(form.getHeight());// NUMBER(5)	Y	0		VMS 표출 높이
                             }
-                            TbVmsSymbLibDto symb = this.symbService.find(formObj.getImageId());
+                            TbVmsSymbLibDto symb = this.symbService.find(formObj.getMemSymbLibNmbr());
                             if (symb == null) {
                                 log.error("VmsManageService.makeVmsProvideForm: VMS({}), FormId({}), Form Object Video Symbol Not Found {}.",
-                                        ctlrNmbr, schedule.getVmsFormId(), formObj.getImageId());
+                                        ctlrNmbr, schedule.getVmsFormId(), formObj.getMemSymbLibNmbr());
                             }
                             else {
                                 form.setDsplHh(Math.toIntExact(symb.getPlayTm()));
@@ -1010,14 +984,14 @@ public class VmsManageService {
                     if (formObj.getObjectKind() != eVmsFormObjectKind.OBJECT_TEXT) {
                         if (obj.getVmsFormObjectTypeCd() == 200 || obj.getVmsFormObjectTypeCd() == 300) {
                             // 200:동영상이미지, 300:스트리밍영상이미지
-                            TbVmsSymbLibDto symb = this.symbService.find(formObj.getImageId());
+                            TbVmsSymbLibDto symb = this.symbService.find(formObj.getMemSymbLibNmbr());
                             if (symb != null) {
                                 formObj.setImageData(symb.getImageData());
                             }
                             else {
                                 formObj.setImageData(formObj.getImageData());
                                 log.error("VmsManageService.makeVmsProvideForm: VMS({}), FormId({}), Symbol Not Found {} set form object image data.",
-                                        ctlrNmbr, schedule.getVmsFormId(), formObj.getImageId());
+                                        ctlrNmbr, schedule.getVmsFormId(), formObj.getMemSymbLibNmbr());
                             }
                         }
                         else if (obj.getVmsFormObjectTypeCd() == 406 || //@통합대기등급 이미지
@@ -1039,35 +1013,36 @@ public class VmsManageService {
                                 if (atmpGrad > 0) {
                                     atmpGrad--;
                                 }
-                                TbVmsSymbLibDto symb = this.symbService.find(formObj.getImageId());
+                                TbVmsSymbLibDto symb = this.symbService.find(formObj.getMemSymbLibNmbr());
                                 if (symb != null && symb.getGradSymbLibNmbrList().size() >= atmpGrad) {
                                     TbVmsSymbLibDto atmpSymb = this.symbService.find(symb.getGradSymbLibNmbrList().get(atmpGrad));
                                     if (atmpSymb != null) {
                                         formObj.setImageData(atmpSymb.getImageData());
-                                        formObj.setImageId(symb.getGradSymbLibNmbrList().get(atmpGrad));
+                                        formObj.setMemSymbLibNmbr(symb.getGradSymbLibNmbrList().get(atmpGrad));
+                                        formObj.setBitmapId(atmpSymb.getDnldSymbLibNmbr());
                                     }
                                     else {
                                         formObj.setImageData(symb.getImageData());
-                                        formObj.setImageId(formObj.getImageId());
+                                        formObj.setMemSymbLibNmbr(formObj.getMemSymbLibNmbr());
                                     }
                                 }
                                 else {
                                     formObj.setImageData(formObj.getImageData());
                                     log.error("VmsManageService.makeVmsProvideForm: VMS({}), FormId({}), Atmp Symbol Not Found {} set form object image data.",
-                                            ctlrNmbr, schedule.getVmsFormId(), formObj.getImageId());
+                                            ctlrNmbr, schedule.getVmsFormId(), formObj.getMemSymbLibNmbr());
                                 }
                             }
                         }
                         else if (obj.getVmsFormObjectTypeCd() == 1 || obj.getVmsFormObjectTypeCd() == 2) {
                             // 심볼, 이미지
-                            TbVmsSymbLibDto symb = this.symbService.find(formObj.getImageId());
+                            TbVmsSymbLibDto symb = this.symbService.find(formObj.getMemSymbLibNmbr());
                             if (symb != null) {
                                 formObj.setImageData(symb.getImageData());
                             }
                             else {
                                 formObj.setImageData(obj.getImagData());
                                 log.error("VmsManageService.makeVmsProvideForm: VMS({}), FormId({}), Atmp Symbol Not Found {} set form symbol object image data.",
-                                        ctlrNmbr, schedule.getVmsFormId(), formObj.getImageId());
+                                        ctlrNmbr, schedule.getVmsFormId(), formObj.getMemSymbLibNmbr());
                             }
                         }
                         else {
@@ -1084,28 +1059,28 @@ public class VmsManageService {
                             break;
                         case 1:     // 심볼
                         case 2:     // 파일이미지
-                            TbVmsSymbLibDto tSymb = this.symbService.find(formObj.getImageId());
+                            TbVmsSymbLibDto tSymb = this.symbService.find(formObj.getMemSymbLibNmbr());
                             if (tSymb == null) {
                                 log.error("VmsManageService.makeVmsProvideForm: VMS({}), FormId({}), Not Found Symbol, File Image Symbol {}.",
-                                        ctlrNmbr, schedule.getVmsFormId(), formObj.getImageId());
+                                        ctlrNmbr, schedule.getVmsFormId(), formObj.getMemSymbLibNmbr());
                             }
                             else {
                                 formObj.setImageData(tSymb.getImageData());
                             }
-                            formObj.setImageId(formObj.getImageId());
+                            //formObj.setMemSymbLibNmbr(formObj.getMemSymbLibNmbr());
                             break;
                         case 17:    // 1단,소통정보이미지1
                         case 27:    // 2단,소통정보이미지2
                         case 37:    // 3단,소통정보이미지3
                         case 47:    // 4단,소통정보이미지4
                         case 167:   // @우회소통정보이미지
-                            TbVmsSymbLibDto symb = this.symbService.find(formObj.getImageId());
+                            TbVmsSymbLibDto symb = this.symbService.find(formObj.getMemSymbLibNmbr());
                             if (symb == null) {
                                 log.error("VmsManageService.makeVmsProvideForm: VMS({}), FormId({}), Not Found Traffic 1,2,3,4,detour Symbol {}.",
-                                        ctlrNmbr, schedule.getVmsFormId(), formObj.getImageId());
+                                        ctlrNmbr, schedule.getVmsFormId(), formObj.getMemSymbLibNmbr());
                                 continue;
                             }
-                            formObj.setImageId(formObj.getImageId());
+                            formObj.setMemSymbLibNmbr(formObj.getMemSymbLibNmbr());
 
                             switch(formObj.getObjectType()) {
                                 case 167: // @우회소통정보이미지
@@ -1117,11 +1092,12 @@ public class VmsManageService {
                             TbVmsIfscTrafDto ifscTraf = this.ifscService.find(formObj.getIfscId());
                             if (ifscTraf != null) {
                                 formObj.setIfscTrafGradCd(ifscTraf.getCmtrGradCd());
-                                String trafImagId = symb.getOrgSymbLibNmbr() + String.valueOf(ifscTraf.getCmtrGradCd());
+                                String trafImagId = symb.getSymbLibNmbr() + String.valueOf(ifscTraf.getCmtrGradCd());
                                 TbVmsSymbLibDto trafSymb = this.symbService.find(trafImagId);
                                 if (trafSymb != null) {
-                                    formObj.setImageId(trafImagId);
+                                    formObj.setMemSymbLibNmbr(trafImagId);
                                     formObj.setImageData(trafSymb.getImageData());
+                                    formObj.setBitmapId(trafSymb.getDnldSymbLibNmbr());
                                 }
                                 else {
                                     formObj.setImageData(symb.getImageData());
@@ -1135,19 +1111,19 @@ public class VmsManageService {
                             }
                             break;
                         case 3:     // 소통정보 배경이미지
-                            TbVmsSymbLibDto bkSymb = this.symbService.find(formObj.getImageId());
+                            TbVmsSymbLibDto bkSymb = this.symbService.find(formObj.getMemSymbLibNmbr());
                             if (bkSymb == null) {
                                 log.error("VmsManageService.makeVmsProvideForm: VMS({}), FormId({}), Not Found Bk Traffic Symbol {}.",
-                                        ctlrNmbr, schedule.getVmsFormId(), formObj.getImageId());
+                                        ctlrNmbr, schedule.getVmsFormId(), formObj.getMemSymbLibNmbr());
                                 continue;
                             }
-                            formObj.setImageId(formObj.getImageId());
+                            formObj.setMemSymbLibNmbr(formObj.getMemSymbLibNmbr());
                             //formObj.setPosX(bkSymb.getPosX());
                             //formObj.setPosY(bkSymb.getPosY());
                             Image imgBmp = bkSymb.getImage();  // 원천이미지를 가지고 온다.
                             if (imgBmp == null) {
                                 log.error("VmsManageService.makeVmsProvideForm: VMS({}), FormId({}), Image Data Error {}.",
-                                        ctlrNmbr, schedule.getVmsFormId(), formObj.getImageId());
+                                        ctlrNmbr, schedule.getVmsFormId(), formObj.getMemSymbLibNmbr());
                                 continue;
                             }
                             BufferedImage formImage = new BufferedImage(imgBmp.getWidth(null), imgBmp.getHeight(null), BufferedImage.TYPE_INT_RGB);
@@ -1174,7 +1150,7 @@ public class VmsManageService {
                             try {
                                 ImageIO.write(formImage, "bmp", out);
                             } catch (IOException e) {
-                                log.error("VmsManageService.makeVmsProvideForm: Image Convert error: {}.", formObj.getImageId());
+                                log.error("VmsManageService.makeVmsProvideForm: Image Convert error: {}.", formObj.getMemSymbLibNmbr());
                             }
                             g2d.dispose();
                             formObj.setImageData(out.toByteArray());

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

@@ -59,17 +59,17 @@ public class VmsSymbService {
             infoList.forEach(data -> {
                 // SBT0:일반심벌이미지,SBT1:소통정보배경,SBT2:소통정보이미지,SBT3:동영상,SBT4:대기환경등급, SBT9:동영상/스트리밍영상주소기본이미지
                 // 소통정보이미지 때문에 이미지번호에 "0" 을 추가하여 이미지번호로 사용함
-                if ("SBT9".equals(data.getSymbType())) {
-                    return;
-                }
+//                if ("SBT9".equals(data.getSymbType())) {
+//                    return;
+//                }
 
                 String updtDt = "";
                 TbVmsSymbLibDto obj = data.toDto();
-                TbVmsSymbLibDto oldObj = this.dataMap.get(obj.getSymbLibNmbr());
+                TbVmsSymbLibDto oldObj = this.dataMap.get(obj.getMemSymbLibNmbr());
                 if (oldObj != null) {
                     updtDt = oldObj.getUpdtDt();
                 }
-                this.dataMap.put(obj.getSymbLibNmbr(), obj);
+                this.dataMap.put(obj.getMemSymbLibNmbr(), obj);
 
                 if ("SBT4".equals(obj.getSymbType())) {
                     // 대기환경등급
@@ -105,7 +105,7 @@ public class VmsSymbService {
                         }
                         trfObj = obj.clone(trafSymbLibNmbr);
 
-                        this.dataMap.put(trfObj.getSymbLibNmbr(), trfObj);
+                        this.dataMap.put(trfObj.getMemSymbLibNmbr(), trfObj);
 
                         Image imgBmp = obj.getImage();  // 원천이미지를 가지고 온다.
                         if (imgBmp == null) {
@@ -158,7 +158,7 @@ public class VmsSymbService {
         }
 
         this.dataMap.forEach((key, symb) -> {
-            log.info("VmsSymbService.loadVmsSymbLib: Symb {}, OrgSymb {}, Size {}.", symb.getSymbLibNmbr(), symb.getOrgSymbLibNmbr(), symb.getImageData().length);
+            log.info("VmsSymbService.loadVmsSymbLib: Symb {}, OrgSymb {}, Size {}.", symb.getMemSymbLibNmbr(), symb.getSymbLibNmbr(), symb.getImageData().length);
         });
 
         log.info("VmsSymbService.loadVmsSymbLib: SymbLib {} EA.", this.dataMap.size());
@@ -271,7 +271,7 @@ public class VmsSymbService {
                 return;
             }
 
-            if (checkDnldSymbol(vmsObj, symb.getSymbLibNmbr(), symb.getUpdtDt())) {
+            if (checkDnldSymbol(vmsObj, symb.getMemSymbLibNmbr(), symb.getUpdtDt())) {
                 addReqDnldBitmapIdSymbol(vmsObj, symb);
             }
 
@@ -292,13 +292,13 @@ public class VmsSymbService {
             else if ("SBT4".equals(symb.getSymbType())) {
                 // SBT0:일반심벌이미지,SBT1:소통정보배경,SBT2:소통정보이미지,SBT3:동영상,SBT4:대기환경등급, SBT9:동영상/스트리밍영상주소기본이미지
                 for (String symbNmbr : symb.getGradSymbLibNmbrList()) {
-                    if (symbNmbr.equals(symb.getSymbLibNmbr())) {
+                    if (symbNmbr.equals(symb.getMemSymbLibNmbr())) {
                         continue;
                     }
                     TbVmsSymbLibDto atmpSymb = this.dataMap.get(symbNmbr);
                     if (atmpSymb == null) {
                         log.error("VmsSymbService.loadVmsScheduleSymbol: VMS {} Schedule Atmp Symb Not Found {}, {}.",
-                                obj.getVmsCtlrNmbr(), symb.getSymbLibNmbr(), symbNmbr);
+                                obj.getVmsCtlrNmbr(), symb.getMemSymbLibNmbr(), symbNmbr);
                     }
                     else {
                         if (checkDnldSymbol(vmsObj, symbNmbr, atmpSymb.getUpdtDt())) {
@@ -344,11 +344,11 @@ public class VmsSymbService {
      * @param symb
      */
     private void addReqDnldBitmapIdSymbol(TbVmsCtlrDto vmsObj, TbVmsSymbLibDto symb) {
-        Integer dnldSymbLibNmbr = getDnldSymbNmbr(symb.getSymbLibNmbr());
+        Integer dnldSymbLibNmbr = getDnldSymbNmbr(symb.getMemSymbLibNmbr());
         VmsScheduleSymbDto dnldSymb = VmsScheduleSymbDto.builder()
                 .vmsCtlrNmbr(vmsObj.getVmsCtlrNmbr())
                 .dnldSymbLibNmbr(dnldSymbLibNmbr)
-                .symbLibNmbr(symb.getOrgSymbLibNmbr())
+                .symbLibNmbr(symb.getSymbLibNmbr())
                 .updtDt(symb.getUpdtDt())
                 .imageData(symb.getImageData())
                 .build();

+ 33 - 15
src/main/java/com/its/vms/ui/SubUI.form

@@ -87,21 +87,6 @@
                       <text value="열림/닫힘"/>
                     </properties>
                   </component>
-                  <component id="4b05a" class="javax.swing.JTextField" binding="txtState">
-                    <constraints>
-                      <grid row="0" column="8" row-span="1" col-span="2" vsize-policy="0" hsize-policy="0" anchor="8" fill="1" indent="0" use-parent-layout="false">
-                        <minimum-size width="100" height="-1"/>
-                        <preferred-size width="100" height="-1"/>
-                        <maximum-size width="100" height="-1"/>
-                      </grid>
-                    </constraints>
-                    <properties>
-                      <editable value="false"/>
-                      <font name="Malgun Gothic" size="12" style="0"/>
-                      <horizontalAlignment value="0"/>
-                      <text value="통신"/>
-                    </properties>
-                  </component>
                   <component id="9e468" class="javax.swing.JTextField" binding="txtCtlrId">
                     <constraints>
                       <grid row="0" column="5" row-span="1" col-span="2" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false">
@@ -356,6 +341,39 @@
                       </component>
                     </children>
                   </grid>
+                  <component id="896ae" class="javax.swing.JButton" binding="btnSymbDnld">
+                    <constraints>
+                      <grid row="0" column="10" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
+                    </constraints>
+                    <properties>
+                      <font name="Malgun Gothic" size="12" style="0"/>
+                      <text value="심벌라이브러리"/>
+                    </properties>
+                  </component>
+                  <component id="4b05a" class="javax.swing.JTextField" binding="txtState">
+                    <constraints>
+                      <grid row="0" column="8" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="1" indent="0" use-parent-layout="false">
+                        <minimum-size width="100" height="-1"/>
+                        <preferred-size width="100" height="-1"/>
+                        <maximum-size width="100" height="-1"/>
+                      </grid>
+                    </constraints>
+                    <properties>
+                      <editable value="false"/>
+                      <font name="Malgun Gothic" size="12" style="0"/>
+                      <horizontalAlignment value="0"/>
+                      <text value="통신"/>
+                    </properties>
+                  </component>
+                  <component id="8a0d2" class="javax.swing.JButton" binding="btnReserved">
+                    <constraints>
+                      <grid row="0" column="9" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
+                    </constraints>
+                    <properties>
+                      <font name="Malgun Gothic" size="12" style="0"/>
+                      <text value="Button"/>
+                    </properties>
+                  </component>
                 </children>
               </grid>
             </children>

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

@@ -57,6 +57,8 @@ public abstract class SubUI {
     private JButton btnTimeSync;
     private JComboBox cboControl;
     private JSpinner spControl;
+    private JButton btnSymbDnld;
+    private JButton btnReserved;
 
     protected abstract void actionButtonClicked();
 
@@ -75,6 +77,7 @@ public abstract class SubUI {
         taLog.setFont(d2font);
 
         txtPort.setVisible(false);
+        btnReserved.setVisible(false);
         SpinnerModel value = new SpinnerNumberModel(0, 0, 100, 1);
         spControl.setModel(value);
 
@@ -132,6 +135,22 @@ public abstract class SubUI {
                 statusControl(8);   // HEATER 제어
             }
         });
+        btnSymbDnld.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                if (selObj == null) {
+                    return;
+                }
+                String message = "심벌라이브러리 다운로드를 요청하시겠습니까?\n\r시스템에 영향을 줄 수 있습니다.";
+                String title = "심벌라이브러리 다운로드";
+                if (JOptionPane.showConfirmDialog(getRootPanel(), message, title, JOptionPane.YES_NO_OPTION) != 0) {
+                    return;
+                }
+                selObj.getDnldSymbMap().clear();
+                message = "심벌라이브러리 다운로드를 요청하였습니다.\n\r시스템 운영에 따라 심벌라이브러리를 다운로드 합니다.";
+                JOptionPane.showMessageDialog(getRootPanel(), message, title, JOptionPane.YES_OPTION);
+            }
+        });
     }
 
     public void statusControl(int controlType) {
@@ -322,13 +341,6 @@ public abstract class SubUI {
         txtDoor.setHorizontalAlignment(0);
         txtDoor.setText("열림/닫힘");
         panel1.add(txtDoor, new GridConstraints(3, 4, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, new Dimension(100, -1), new Dimension(100, -1), new Dimension(100, -1), 0, false));
-        txtState = new JTextField();
-        txtState.setEditable(false);
-        Font txtStateFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, txtState.getFont());
-        if (txtStateFont != null) txtState.setFont(txtStateFont);
-        txtState.setHorizontalAlignment(0);
-        txtState.setText("통신");
-        panel1.add(txtState, new GridConstraints(0, 8, 1, 2, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, new Dimension(100, -1), new Dimension(100, -1), new Dimension(100, -1), 0, false));
         txtCtlrId = new JTextField();
         txtCtlrId.setEditable(false);
         Font txtCtlrIdFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, txtCtlrId.getFont());
@@ -466,6 +478,23 @@ public abstract class SubUI {
         panel1.add(panel2, new GridConstraints(3, 10, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
         spControl = new JSpinner();
         panel2.add(spControl, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+        btnSymbDnld = new JButton();
+        Font btnSymbDnldFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, btnSymbDnld.getFont());
+        if (btnSymbDnldFont != null) btnSymbDnld.setFont(btnSymbDnldFont);
+        btnSymbDnld.setText("심벌라이브러리");
+        panel1.add(btnSymbDnld, new GridConstraints(0, 10, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+        txtState = new JTextField();
+        txtState.setEditable(false);
+        Font txtStateFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, txtState.getFont());
+        if (txtStateFont != null) txtState.setFont(txtStateFont);
+        txtState.setHorizontalAlignment(0);
+        txtState.setText("통신");
+        panel1.add(txtState, new GridConstraints(0, 8, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, new Dimension(100, -1), new Dimension(100, -1), new Dimension(100, -1), 0, false));
+        btnReserved = new JButton();
+        Font btnReservedFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, btnReserved.getFont());
+        if (btnReservedFont != null) btnReserved.setFont(btnReservedFont);
+        btnReserved.setText("Button");
+        panel1.add(btnReserved, new GridConstraints(0, 9, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
         final JPanel panel3 = new JPanel();
         panel3.setLayout(new GridLayoutManager(2, 1, new Insets(0, 4, 0, 4), -1, -1));
         rootPanel.add(panel3, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, new Dimension(-1, 200), null, null, 0, false));

+ 5 - 2
src/main/java/com/its/vms/xnettcp/vms/process/response/impl/VmsResDataDownload.java

@@ -91,11 +91,14 @@ public class VmsResDataDownload implements VmsResponse {
                         dbmsDataProcess.add(new DbmsData(DbmsDataType.DBMS_DATA_SYMB_DNLD, false, dnldDto.toEntity()));
                     }
                 }
+                /**
+                 * 다운로드할 심벌 라이브러리가 존재하면 다운로드한다.
+                 */
                 if (this.vmsObj.downloadSymbLib()) {
                     // 더이상 다운로드 할 심벌 라이브러리가 없는 경우....
                     if (this.vmsObj.getNetState() == NET.LOGIN_REQ) {
-                        // 최초 접속후, 상태정보->파워모듈상태->표출모듈상태->파라미터정보 조회 완료후
-                        // 네트워크 로그인 상태로 설정하고 스케쥴을 다운로드 하도록 한다.
+                        // 최초 접속후, 심벌 라이브러리를 다운로드 한 경우이기 때문에 네트워크 상태를 변경하고
+                        // 스케쥴을 다운로드 한다.
                         this.vmsObj.setNetState(NET.LOGINED);
                         this.vmsObj.downloadForm(false);
                     }

+ 1 - 0
src/main/resources/application.yml

@@ -24,6 +24,7 @@ application:
   image-seq-save: false
   font-size-ratio: 1.35
   check-new-form: true
+  download-bitmap-form: false
 
 communication:
   listen-port: 30200

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

@@ -12,7 +12,7 @@
                t1.symb_expl      AS symbExpl,
                t1.imag_data      AS imagData,
                t1.vms_type_cd    AS vmsTypeCd,
-               t1.symb_imag_type AS symbImagType,
+               nvl(t1.symb_imag_type, 'BMP') AS symbImagType,
                t1.symb_file_nm   AS symbFileNm,
                t1.symb_type      AS symbType,
                t1.avi_data       AS aviData,