|
|
@@ -1,657 +0,0 @@
|
|
|
-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();
|
|
|
- }
|
|
|
-
|
|
|
-}
|
|
|
-
|