| 
					
				 | 
			
			
				@@ -0,0 +1,657 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+package com.its.vms.dto; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.its.app.AppUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.its.vms.config.ApplicationConfig; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.its.vms.domain.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.its.vms.domain.enums.eVmsFormType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.its.vms.domain.task.VmsCommandTimeoutTask; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.its.vms.entity.TbVmsCtlrStts; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.its.vms.entity.TbVmsCtrlHs; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.its.vms.entity.VmsCtlrParam; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.its.vms.process.DbmsData; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.its.vms.process.DbmsDataProcess; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.its.vms.process.DbmsDataType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.its.vms.service.VmsFormService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.its.vms.xnettcp.vms.protocol.VmsReqFramePacket; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.its.vms.xnettcp.vms.protocol.dto.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.its.vms.xnettcp.vms.protocol.enums.eVmsFileSaveLocation; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.its.vms.xnettcp.vms.protocol.enums.eVmsFormObjectKind; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.its.vms.xnettcp.vms.protocol.enums.eVmsImageType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.its.vms.xnettcp.vms.protocol.impl.VmsReqBlank; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.its.vms.xnettcp.vms.protocol.impl.VmsReqDataDownload; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.its.vms.xnettcp.vms.protocol.impl.VmsReqDownloadForm; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.its.vms.xnettcp.vms.protocol.impl.VmsReqDownloadFormSchedule; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import io.netty.channel.Channel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import io.netty.channel.ChannelFuture; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import lombok.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import lombok.extern.slf4j.Slf4j; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.io.Serializable; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.net.InetSocketAddress; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.nio.ByteBuffer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.Map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.Timer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.concurrent.ConcurrentHashMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@Slf4j 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@Getter 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@Setter 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@ToString 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@Builder 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@NoArgsConstructor//(access = AccessLevel.PROTECTED) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@AllArgsConstructor 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+public class TbVmsCtlrDtoBack implements Serializable { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private static final long serialVersionUID = 1L; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private int  index; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Long vmsCtlrNmbr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Long groupNo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Integer ctlrLocalNo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String ctlrId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String ctlrIp; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String ctlrPort; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String usagTypeCd; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String frmTypeCd; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String typeCd; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String modlTypeCd; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String operMode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Integer cmncfailSlotNmbr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Integer pwerFailSlotNmbr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String cmtrinfrCnctYn; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String wthrinfrCnctYn; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String envrinfrCnctYn; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Integer maxPhaseNum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String istlLctnNm; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String istlLctnAddr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String trfcStrgUseYn; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Long locIfscId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Integer defPhseChngCycl;    // 기본메시지주기 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String panlOnTime;          // 전광판 ON TIME 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String panlOffTime;         // 전광판 OFF TIME 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Integer panlPwerMode;        // 전광판 전원 모드(0x00:꺼짐,0x01:켜짐,0x02:자동,0x09:알수없음) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Integer fanMode;            // FAN 동작모드(0x00:꺼짐,0x01:켜짐,0x02:자동,0x09:알수없음) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Integer fanRunTmpr;          // 팬 동작 온도 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Integer hetrMode;           // 히터 동작모드(0x00:꺼짐,0x01:켜짐,0x02:자동,0x09:알수없음) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Integer hetrRunTmpr;         // 히터 동작 온도 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Integer brghMode;           // 휘도 모드(0x00:주간,0x01:야간,0x02:자동,0x09:수동) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Integer brghCurrStep;       // 휘도 현재 단계(0~100) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Integer brghWeekStep;       // 휘도 주간 단계(0~100) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Integer brghNghtStep;       // 휘도 야간 단계(0~100) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Integer modlErrRate;        // VMS 모듈 오류 율 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Integer cmncFailRate;       // VMS 통신 오류 기본 값 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Integer protocolVer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String delYn; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private int vmsWidth; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private int vmsHeight; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private int modlRowNum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private int modlColNum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private int powrRowNum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private int powrColNum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String localFormDir; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String ftpFormDir; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private boolean ftpDownload; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private boolean symbolDownload; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private int maxCngstForm;        // 정체폼 생성 최대 갯수 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private int cngstForms; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private boolean existCngsForm; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private boolean provide; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private boolean evehIngForm; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private boolean evehEndForm; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private VmsFormManager formManager; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * VMS 메시지 생성 메모리 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private VmsEvehicle evechile; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private VmsSchedule schedule;   // 스케쥴 정보 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private VmsEvent incident;      // 돌발정보 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private VmsEvent event;         // 공사행사정보 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private VmsModule module; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private VmsLuminance luminance; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private VmsControlMode controlMode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private byte txtOpCode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private TbVmsCtlrStts     stts; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private int 			  netState; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private boolean           isDupCon; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private boolean           isDupLogin; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String 		      dstIpAddr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Channel           channel = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Channel           dupChannel = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private InetSocketAddress cliReq; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private long              syncTime; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private VmsFrameSequence  seq; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Integer downloadFormId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private VmsDownloadFile downloadFile;           // 제어기로 다운로드할 파일정보(TB_VMS_DOWNLOAD) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private VmsDownloadData downloadData;           // 제어기로 다운로드할 파일 데이터 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private ConcurrentHashMap<Integer, VmsDownloadForm> downloadFormMap = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private ConcurrentHashMap<Integer, TbVmsSymbLibDnldDto> dnldSymbMap = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private ConcurrentHashMap<Integer, VmsScheduleSymbDto> reqDnldSymbMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Integer dnldSymbLibNmbr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private ConcurrentHashMap<Long, TbVmsRltnIfscDto> rltnIfscMap = null;   // VMS 에 설정된 VMS 정보제공구간 목록 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private ConcurrentHashMap<Short, Timer> registeredCommandTimer = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private ConcurrentHashMap<Short, VmsCommandTimeoutTask> registeredCommand = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private ConcurrentHashMap<Long, TbVmsCtrlHs> userCommands = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private int connectCount; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String connectTm; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private String disConnectTm; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private long lastRecvTime; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * Channel Send Data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param packet 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param retryCnt 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public synchronized boolean sendData(VmsReqFramePacket packet, int retryCnt) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        boolean result = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ByteBuffer sendBuffer = packet.getByteBuffer(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String packetDesc = packet.getOpCodeDesc(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        log.info("~REQUEST-{}. VMS {}, {} Bytes.", packetDesc, this.vmsCtlrNmbr, sendBuffer.capacity()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (this.channel != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ChannelFuture f = this.channel.writeAndFlush(sendBuffer); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            f.awaitUninterruptibly(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (f.isDone() || f.isSuccess()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                result = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.error("~REQUEST-{}. VMS {}, sendData Failed. {} Bytes.", packetDesc, this.vmsCtlrNmbr, sendBuffer.array().length); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.error("~REQUEST-{}. VMS {}, sendData Failed. Not Connected. {} Bytes.", packetDesc, this.vmsCtlrNmbr, sendBuffer.array().length); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //VmsCommandTimeoutTask cmdTimeoutTask = new VmsCommandTimeoutTask(this, packet, retryCnt); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //addRegisteredCommandsTimer(cmdTimeoutTask); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 제어기에 메시지를 표출하기 위한 작업. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 1. 제어기에 표출할 폼 정보를 다운로드 한다. - downloadForm 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 2. 파일 다운로드(이미지, 심볼) - downloadFile 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 3. 폼 스케쥴 다운로드 - downloadFormSchedule 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 4. Blank - downloadBlank 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public boolean downloadForm() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        VmsFormService formService = (VmsFormService) AppUtils.getBean(VmsFormService.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.txtOpCode = (byte)0x00; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.downloadData.init(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int forms = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int formCnt = this.formManager.count(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (formCnt == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.info("downloadForm: VMS {}, Form Data Not Found.", this.vmsCtlrNmbr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (formCnt > this.maxPhaseNum) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.error("downloadForm: VMS {}, Form Count Over: {}/{} EA.", this.vmsCtlrNmbr, formCnt, this.maxPhaseNum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            formCnt = this.maxPhaseNum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        VmsDownloadData.VmsDownloadDataInfo[] units = this.downloadData.getUnits(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (int ii = 0; ii < formCnt; ii++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            VmsForm pForm = this.formManager.getItem(ii); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!pForm.isSuccess()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.error("downloadForm: VMS {}, SEQ {}, SUCCESS {}", this.vmsCtlrNmbr, ii, pForm.isSuccess()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Integer vmsFormId = pForm.getVmsFormId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            TbVmsFormDto vmsForm = formService.find(vmsFormId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (vmsForm == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.error("downloadForm: VMS {}, SEQ {}, FORM ID {} Not Found.", this.vmsCtlrNmbr, ii, vmsFormId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            units[forms].setVmsFormId(vmsFormId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            units[forms].setDownload(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            units[forms].setFormIdx(ii); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //units[forms].setBitmapId(forms + 1000); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            units[forms].setBitmapId(pForm.getDnldFormNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            units[forms].setFormNo(9000 + forms); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            units[forms].setDisplaySec(pForm.getDsplHh()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            units[forms].setDisplayType(pForm.getVmsFormDsplMthdCd()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            units[forms].setBkClr(pForm.getVmsFormColrCd()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (vmsForm.getVmsFormTypeCd() == eVmsFormType.eFormTp_hongbo.getValue()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 다운로드 할 폼이 홍보폼이면 여러번 다운로드 하지 않도록 메모리에서 관리하자. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                VmsDownloadForm downloadForm = this.downloadFormMap.get(vmsFormId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (downloadForm != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // 이전에 다운로드한 폼 정보가 존재하면 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (!vmsForm.getUpdtDt().equals(downloadForm.getUpdtDt())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        // 업데이트시각이 다르기때문에 신규폼으로 판단한다. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        downloadForm.setAlreadyDownload(false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        downloadForm.setUpdtDt(vmsForm.getUpdtDt()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        units[forms].setDownload(true); // 현재 스케쥴폼으로 다운로드 플래그 설정 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (downloadForm.isAlreadyDownload()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        // 이미 이전에 다운로드를 했기때문에 이번에는 제어기로 다운로드를 하지 않는다. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        units[forms].setDownload(false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // 이전에 다운로드 한 정보가 없기때문에 메모리에 저장해 놓는다. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    downloadForm = new VmsDownloadForm(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    downloadForm.setVmsFormId(vmsFormId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    downloadForm.setAlreadyDownload(false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    downloadForm.setUpdtDt(vmsForm.getUpdtDt()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    this.downloadFormMap.put(vmsFormId, downloadForm); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            forms++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (int ii = 0; ii < forms; ii++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.info("downloadForm: VMS {}, Form schedule({}), VMS_FORM_ID: {}, FormIdx: {}, FormId: {}, BitmapId: {}, IsDownload: {}", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    this.vmsCtlrNmbr, ii, units[ii].getVmsFormId(), units[ii].getFormIdx(), units[ii].getFormNo(), units[ii].getBitmapId(), units[ii].isDownload()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.downloadData.setMaxSchedule(forms); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.downloadData.setDownloadCnt(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.downloadData.setDefault("B".equals(this.operMode)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (this.downloadData.isDefault()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 기본모드인 경우 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 폼 ID "FID0000" 에 여러개의 폼을 다운로드 해야함. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //e_vms_download_form          = 0x9A,//    Download Form                           송신    Form download                               센터 → VMS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //e_vms_file_download          = 0x82,//    데이터 다운로드                         송신    INI, CFG , Bitmap , Data파일송신            센터 → VMS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //e_vms_download_schedule_form = 0x96,//    Display Schedule Form                   송신    계획된 Form 표출 요구                       센터 → VMS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //e_vms_blank                  = 0x9E,//    Blank                                   송신    schedule 표출                               센터 → VMS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            downloadDefaultForm(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 스케쥴 모드인 경우(A:자동, F:고정) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //e_vms_download_form          = 0x9A,//    Download Form                           송신    Form download                               센터 → VMS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //e_vms_file_download          = 0x82,//    데이터 다운로드                         송신    INI, CFG , Bitmap , Data파일송신            센터 → VMS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //e_vms_download_schedule_form = 0x96,//    Display Schedule Form                   송신    계획된 Form 표출 요구                       센터 → VMS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //e_vms_blank                  = 0x9E,//    Blank                                   송신    schedule 표출                               센터 → VMS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            downloadAutoFixForm(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 기본 스케쥴의 폼 정보는 하나의 폼 패킷에 다운로드 해야 여러 폼을 표출할 수 있다. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 제어기에서 FID0000 인 폼이 기본 표출폼 이기 때문이다. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public boolean downloadDefaultForm() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // Download Form  (기본폼은 하나의 폼에 여러폼을 다운로드한다.) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int formCnt = this.downloadData.getMaxSchedule(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (formCnt <= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.info("downloadDefaultForm: VMS {}, Download Schedule Form Count Zero. {} EA.", this.vmsCtlrNmbr, formCnt); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        log.info("downloadDefaultForm: VMS {}, Form {} EA.", this.vmsCtlrNmbr, formCnt); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        VmsFormDataDto formData = new VmsFormDataDto(0, formCnt); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        VmsDownloadData.VmsDownloadDataInfo[] units = this.downloadData.getUnits(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (int ii = 0; ii < formCnt; ii++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            VmsForm pForm = this.formManager.getItem(units[ii].getFormIdx()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<VmsFormObject> objects = pForm.getObjects(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            VmsFormDto formDto = formData.addForm(units[ii].getVmsFormId(), units[ii].getDisplaySec(), units[ii].getDisplayType(), units[ii].getBkClr(), objects.size()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (int jj = 0; jj < objects.size(); jj++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                VmsFormObject formObj = objects.get(jj); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                int objSize = formObj.getObjectSize(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                int blinking = formObj.getBlinking(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                int posX = formObj.getPosX(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                int posY = formObj.getPosY(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                int bkClr = formObj.getBkColor(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                VmsFormObj formObjDto; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (objects.get(jj).getObjectKind() == eVmsFormObjectKind.OBJECT_TEXT) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    int clrR = formObj.getFontClr().getRed(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    int clrG = formObj.getFontClr().getGreen(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    int clrB = formObj.getFontClr().getBlue(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    formObjDto = new VmsFormObjText(objSize, blinking, posX, posY, bkClr, clrR, clrG, clrB, formObj.getFontSize(), formObj.getFontNameCd(), formObj.getFontBold(), formObj.getTextData()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                else if (objects.get(jj).getObjectKind() == eVmsFormObjectKind.OBJECT_BITMAP_ID) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    formObjDto = new VmsFormObjBitmapId(objSize, blinking, posX, posY, bkClr, formObj.getDsplWidth(), formObj.getDsplHeight(), eVmsImageType.VMS_IMAGE_TYPE_BMP.getValue(), units[ii].getBitmapId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //formObjDto = new VmsFormObjBitmapId(objSize, blinking, posX, posY, bkClr, object.getDsplWidth(), object.getDsplHeight(), eVmsImageType.VMS_IMAGE_TYPE_BMP.getValue(), units[ii].getBitmapId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    formObjDto = new VmsFormObjBitmap(objSize, blinking, posX, posY, bkClr, formObj.getDsplWidth(), formObj.getDsplHeight(), eVmsImageType.VMS_IMAGE_TYPE_BMP.getValue(), formObj.getImageData()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                formObjDto.calSize(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                formDto.addObject(formObjDto); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            formDto.calObjCount(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        formData.calFormCount(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        VmsReqDownloadForm downloadForm = new VmsReqDownloadForm(null/*this*/, formData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return sendData(downloadForm, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 자동 및 고정 스케쥴인 경우 폼정보 하나를 하나의 패킷으로 전송한다. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public boolean downloadAutoFixForm() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 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); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int downloadCnt = this.downloadData.getDownloadCnt(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        log.info("downloadAutoFixForm: VMS {}, Schedule Form {} EA, Download Count {} EA.", this.vmsCtlrNmbr, formCnt, downloadCnt); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (downloadCnt >= formCnt) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 폼정보를 모두 다운로드 했기때문에 폼파일을 다운로드 해야 한다. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.downloadData.setDownloadCnt(0); // 폼이미지파일을 다운로드해야 하기때문에 다운로드 인덱스를 다시 0으로 리셋 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return downloadFile(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 폼아이디는 제어기가 최초에 접속했을때 한번만 내려보내기 때문에 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 폼아이디를 여기서 설정해 주어야 한다. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        VmsDownloadData.VmsDownloadDataInfo[] units = this.downloadData.getUnits(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int formId   = units[downloadCnt].getFormNo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int downloadFormCnt = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int displaySec = 1;//units[downloadCnt].getDisplaySec(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int displayType = units[downloadCnt].getDisplayType(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int bitmapId = units[downloadCnt].getBitmapId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int formIdx  = units[downloadCnt].getFormIdx(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        VmsForm pForm = this.formManager.getItem(formIdx); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int objSize = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int blinking = pForm.getVmsFormDsplMthdCd(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int posX = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int posY = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int bkClr = units[downloadCnt].getBkClr(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        VmsFormDataDto formData = new VmsFormDataDto(formId, downloadFormCnt); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        VmsFormDto formDto = formData.addForm(formId, displaySec, displayType, bkClr, objSize); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        VmsFormObj formObjDto= new VmsFormObjBitmapId(objSize, blinking, posX, posY, bkClr, this.vmsWidth, this.vmsHeight, eVmsImageType.VMS_IMAGE_TYPE_BMP.getValue(), bitmapId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        formObjDto.calSize(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        formDto.addObject(formObjDto); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        formData.calFormCount(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.downloadData.setDownloadCnt(downloadCnt+1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        log.info("downloadAutoFixForm: VMS {}, Schedule Form {} EA, Download Count {} EA, VmsFormId {}, FormId {}, BitmapId {}.", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.vmsCtlrNmbr, formCnt, downloadCnt+1, pForm.getVmsFormId(), formId, bitmapId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        VmsFormDataDto formData = new VmsFormDataDto(formId, downloadFormCnt); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        int ii = downloadCnt; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        VmsForm pForm = this.formManager.getItem(units[ii].getFormIdx()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        List<VmsFormObject> objects = pForm.getObjects(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        VmsFormDto formDto = formData.addForm(units[ii].getVmsFormId(), units[ii].getDisplaySec(), units[ii].getDisplayType(), units[ii].getBkClr(), objects.size()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        for (int jj = 0; jj < objects.size(); jj++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            VmsFormObject formObj = objects.get(jj); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            int objSize = formObj.getObjectSize(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            int blinking = formObj.getBlinking(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            int posX = formObj.getPosX(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            int posY = formObj.getPosY(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            int bkClr = formObj.getBkColor(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            String fileName = String.format("C:\\DRIVE_E\\ANDONG_VMS_FTP\\FORM\\%d_%d_%d-%d-%d-%d-%d.bmp", this.vmsCtlrNmbr, ii, jj, posX, posY, formObj.getDsplWidth(), formObj.getDsplHeight()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            VmsFormObj formObjDto; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            if (objects.get(jj).getObjectKind() == eVmsFormObjectKind.OBJECT_TEXT) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                int clrR = formObj.getFontClr().getRed(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                int clrG = formObj.getFontClr().getGreen(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                int clrB = formObj.getFontClr().getBlue(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                int fontNameCd = formObj.getFontNameCd(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                formObjDto = new VmsFormObjText(objSize, blinking, posX, posY, bkClr, clrR, clrG, clrB, formObj.getFontSize(), fontNameCd, formObj.getFontBold(), formObj.getTextData()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            else if (objects.get(jj).getObjectKind() == eVmsFormObjectKind.OBJECT_BITMAP_ID) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                //formObjDto = new VmsFormObjBitmapId(objSize, blinking, posX, posY, bkClr, object.getDsplWidth(), object.getDsplHeight(), eVmsImageType.VMS_IMAGE_TYPE_BMP.getValue(), units[ii].getBitmapId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                ItsUtils.saveByteArrayToFile(fileName, formObj.getImageData()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                formObjDto = new VmsFormObjBitmap(objSize, blinking, posX, posY, bkClr, formObj.getDsplWidth(), formObj.getDsplHeight(), eVmsImageType.VMS_IMAGE_TYPE_BMP.getValue(), formObj.getImageData()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                //formObjDto = new VmsFormObjBitmapId(objSize, blinking, posX, posY, bkClr, object.getDsplWidth(), object.getDsplHeight(), eVmsImageType.VMS_IMAGE_TYPE_BMP.getValue(), units[ii].getBitmapId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                ItsUtils.saveByteArrayToFile(fileName, formObj.getImageData()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                formObjDto = new VmsFormObjBitmap(objSize, blinking, posX, posY, bkClr, formObj.getDsplWidth(), formObj.getDsplHeight(), eVmsImageType.VMS_IMAGE_TYPE_BMP.getValue(), formObj.getImageData()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            formObjDto.calSize(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            formDto.addObject(formObjDto); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        formDto.calObjCount(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        formData.calFormCount(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        VmsReqDownloadForm downloadForm = new VmsReqDownloadForm(null/*this*/, formData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return sendData(downloadForm, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 폼 이미지 및 기타 폼에 표출할 심볼 이미지가 다운로드 완료가 된후에 스케쥴 정보를 표출하도록 한다. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public boolean downloadFile() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int formCnt = this.downloadData.getMaxSchedule(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (formCnt <= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.info("downloadFile: VMS {}, Download Schedule Form Count Zero. {} EA.", this.vmsCtlrNmbr, formCnt); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int downloadCnt = this.downloadData.getDownloadCnt(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        log.info("downloadFile: VMS {}, Schedule Form {} EA, Download Count {} EA.", this.vmsCtlrNmbr, formCnt, downloadCnt); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (downloadCnt >= formCnt) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 폼파일이(폼이미지파일) 모두 다운로드 되었으므로 스케쥴 정보를 다운로드 한다. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return downloadFormSchedule();  // Display Schedule Form 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.downloadFormId = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ApplicationConfig config = (ApplicationConfig)AppUtils.getBean(ApplicationConfig.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        VmsDownloadData.VmsDownloadDataInfo[] units = this.downloadData.getUnits(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (int ii = downloadCnt; ii < formCnt; ii++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.downloadData.setDownloadCnt(downloadCnt+1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            int vmsFormId = units[ii].getVmsFormId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            int formId    = units[ii].getFormNo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            int bitmapId  = units[ii].getBitmapId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            int formIdx   = units[ii].getFormIdx(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            VmsForm pForm = this.formManager.getItem(formIdx); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (pForm.getVmsFormTypeCd() == eVmsFormType.eFormTp_hongbo.getValue()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 홈보폼인 경우 다운로드 폼 ID를 저장해 놓는다. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.downloadFormId = vmsFormId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (config.isCheckNewForm() && !units[ii].isDownload()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 이미 다운로드 했기 때문에 다시 다운로드 하지 않는다. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.info("downloadFile: VMS {}, IDX {}, VmsFormId {}, FormId {}, BitmapId {}, formIdx {}, DownloadFormID: {}, already download...", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        this.vmsCtlrNmbr, ii, vmsFormId, formId, bitmapId, formIdx, this.downloadFormId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                this.downloadFormId = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.info("downloadFile: VMS {}, Idx {}, VmsFormId {}, FormId {}, BitmapId {}, formIdx {}, DownloadFormID: {}", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    this.vmsCtlrNmbr, ii, pForm.getVmsFormId(), formId, bitmapId, formIdx, this.downloadFormId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String fileName = String.format("BID%04d.BMP", bitmapId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            eVmsFileSaveLocation saveLoc = eVmsFileSaveLocation.LOC_DOWNLOAD_PROG_IMAGE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            VmsReqDataDownload dataDownload = new VmsReqDataDownload(null/*this*/, saveLoc, fileName, pForm.getImageData()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return sendData(dataDownload, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 폼이미지 정보가 모두 다운로드 되었으므로 스케쥴 정보를 다운로드 한다. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return downloadFormSchedule();  // Display Schedule Form 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 제어기에 표출할 폼의 스케쥴 정보를 다운로드 한다. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public boolean downloadFormSchedule() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 도로공사 표준에 최대 10개의 스케쥴을 사용하도록 되어 있음. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int maxSchedule = VmsConstants.VMS_MIN_DOWNLOAD_FORMS; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int formCnt = this.downloadData.getMaxSchedule(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (formCnt <= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.info("downloadScheduleForm: VMS {}, Download Schedule Form Count Zero. {} EA.", this.vmsCtlrNmbr, formCnt); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        short[] formId = new short[maxSchedule]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        byte[] dispSec = new byte[maxSchedule]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (int ii = 0; ii < maxSchedule; ii++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            formId[ii] = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dispSec[ii] = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        log.info("downloadFormSchedule: VMS {}, Schedule {} EA, Default Schedule {}.", this.vmsCtlrNmbr, formCnt, this.downloadData.isDefault()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (this.downloadData.isDefault()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            formId[0] = (short)VmsConstants.DEFAULT_FORM_ID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dispSec[0] = 4; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.info("downloadFormSchedule: VMS {}, Schedule {} EA, Default Schedule {}.", this.vmsCtlrNmbr, formCnt, this.downloadData.isDefault()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (int ii = 0; ii < formCnt && ii < maxSchedule; ii++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                formId[ii] = (short) this.downloadData.getUnits()[ii].getFormNo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                dispSec[ii] = (byte)(this.downloadData.getUnits()[ii].getDisplaySec() & 0xFF); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.info("downloadFormSchedule: VMS {}, Schedule {} EA, Idx {}, FormId {}, DisplayTm {}.", this.vmsCtlrNmbr, formCnt, ii+1, formId[ii], dispSec[ii]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        VmsReqDownloadFormSchedule downloadFormSchedule = new VmsReqDownloadFormSchedule(null/*this*/, formId, dispSec); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return sendData(downloadFormSchedule, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 스케쥴을 표출하도록 Blank 명령을 전송한다. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public boolean downloadBlank() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        log.info("downloadBlank: VMS {}.", this.vmsCtlrNmbr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        VmsReqBlank reqBlank = new VmsReqBlank(null);//this); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return sendData(reqBlank, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 제어기로 심벌라이브러리를 다운로드한다. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public boolean downloadSymbLib() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.dnldSymbLibNmbr = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (this.reqDnldSymbMap.size() == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        VmsScheduleSymbDto dnldSymb = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (Map.Entry<Integer, VmsScheduleSymbDto> e : this.reqDnldSymbMap.entrySet()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dnldSymb = e.getValue(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (dnldSymb != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.dnldSymbLibNmbr = dnldSymb.getDnldSymbLibNmbr(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String fileName = String.format("BID%04d.BMP", this.dnldSymbLibNmbr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            eVmsFileSaveLocation saveLoc = eVmsFileSaveLocation.LOC_DOWNLOAD_PROG_IMAGE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            VmsReqDataDownload dataDownload = new VmsReqDataDownload(null/*this*/, saveLoc, fileName, dnldSymb.getImageData()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sendData(dataDownload, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private int   powerCtrlMode;  // 전원제어 모드                1 Byte  0x00 : 꺼짐, 0x01 : 켜짐, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private int   fanRunMode;     // Fan 동작모드                 1 Byte  0x00 : 꺼짐, 0x01 : 켜짐, 0x02 : 자동, 0x09: Unknown 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private int   fanRunTemp;     // Fan 의 동작개시온도          1 Byte  온도( 0x00 ~0x03f ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private int   heaterRunMode;  // Heater 의 동작모드           1 Byte  0x00 : 꺼짐, 0x01 : 켜짐, 0x02 : 자동, 0x09: Unknown 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private int   heaterRunTemp;  // Heater 의 동작개시온도       1 Byte  온도(0x00 ~ 0x3f ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private int   brightMode; // 화면의 밝기 - 휘도 모드, 0x00:주간, 0x01:야간, 0x02:Auto, 0x03:수동 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private int   brightCurr; // 화면의 밝기 - 현재 휘도값, 0~100 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private int   brightWeek; // 화면의 밝기 - 주간 휘도값, 0~100 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private int   brightNght; // 화면의 밝기 - 야간 휘도값, 0~100 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private int   blinkTime;      // 깜빡이는 시간주기            1 Byte  문자 비트맵의 깜빡이는 시간주기 0x00 ~ 0x1e( 0.1 ~3.0 ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private short scnTurnTime;    // 디폴트 시나리오로 전환시간   2 Byte  디폴트 시나리오로 전환될 때까지 기다리는 시간, 단위 : 초 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private int   modlErrRate;    // 장애 모듈비율(%)             1 Byte  에러난 픽셀의 백분율 (0~100: 초기값:10%) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void updateParameter(int powerCtrlMode, int fanRunMode, int fanRunTemp, int heaterRunMode, int heaterRunTemp, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                int brightMode, int brightCurr, int brightWeek, int brightNght, int blinkTime, short scnTurnTime, int modlErrRate) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        boolean isDifferent = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (powerCtrlMode != this.panlPwerMode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            isDifferent = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.panlPwerMode = powerCtrlMode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (fanRunMode != this.fanMode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            isDifferent = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.fanMode = fanRunMode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (fanRunTemp != this.fanRunTmpr) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            isDifferent = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.fanRunTmpr = fanRunTemp; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (heaterRunMode != this.hetrMode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            isDifferent = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.hetrMode = heaterRunMode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (heaterRunTemp != this.hetrRunTmpr) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            isDifferent = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.hetrRunTmpr = heaterRunTemp; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (brightMode != this.brghMode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            isDifferent = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.brghMode = brightMode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (brightCurr != this.brghCurrStep) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            isDifferent = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.brghCurrStep = brightCurr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (brightWeek != this.brghWeekStep) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            isDifferent = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.brghWeekStep = brightWeek; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (brightNght != this.brghNghtStep) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            isDifferent = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.brghNghtStep = brightNght; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (scnTurnTime != this.defPhseChngCycl) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            isDifferent = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.defPhseChngCycl = (int)scnTurnTime; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (modlErrRate != this.modlErrRate) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            isDifferent = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            this.modlErrRate = modlErrRate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (isDifferent) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            DbmsDataProcess dbmsDataProcess = (DbmsDataProcess) AppUtils.getBean(DbmsDataProcess.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dbmsDataProcess.add(new DbmsData(DbmsDataType.DBMS_DATA_CTLR_PARAMETER, false, toParamEntity())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public VmsCtlrParam toParamEntity() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return VmsCtlrParam.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .vmsCtlrNmbr(this.vmsCtlrNmbr) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .panlPwerMode(this.panlPwerMode) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .fanMode(this.fanMode) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .fanRunTmpr(this.fanRunTmpr) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .hetrMode(this.hetrMode) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .hetrRunTmpr(this.hetrRunTmpr) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .brghMode(this.brghMode) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .brghCurrStep(this.brghCurrStep) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .brghWeekStep(this.brghWeekStep) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .brghNghtStep(this.brghNghtStep) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .modlErrRate(this.modlErrRate) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .cmncFailRate(this.cmncFailRate) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .build(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 |