package com.its.api.its.model.dto.vms;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.its.api.its.model.dto.code.TbCmmnCdDto;
import com.its.api.its.model.entity.vms.TbVmsCtlr;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;

import javax.validation.constraints.Pattern;
import javax.validation.constraints.PositiveOrZero;
import javax.validation.constraints.Size;
import java.io.Serializable;

/**
 * VMS 제어기 DTO Class
 */
@Data
@Builder
@ApiModel("TbVmsCtlrDto(VMS 제어기)")
public class TbVmsCtlrDto implements Serializable {
    private static final long serialVersionUID = 1L;

    @ApiModelProperty("VMS 제어기 번호")  // N NUMBER(10)
    @JsonProperty("vms_ctlr_nmbr")
    private Long vmsCtlrNmbr;

    @ApiModelProperty("VMS ID")  // Y VARCHAR(4)
    @JsonProperty("vms_id")
    private String vmsId;

    @ApiModelProperty("VMS 제어기 ID")  // Y VARCHAR(30)
    @JsonProperty("vms_ctlr_id")
    private String vmsCtlrId;

    @ApiModelProperty("VMS 명")  // Y VARCHAR(40)
    @JsonProperty("vms_nm")
    private String vmsNm;

    @ApiModelProperty("VMS 제어기 아이피")  // Y VARCHAR(20)
    @JsonProperty("vms_ctlr_ip")
    private String vmsCtlrIp;

    @ApiModelProperty("VMS 용도 유형 코드")  // Y VARCHAR(7)
    @JsonProperty("vms_usag_type_cd")
    private String vmsUsagTypeCd;

    @ApiModelProperty("VMS 형식 유형 코드")  // Y VARCHAR(7)
    @JsonProperty("vms_frm_type_cd")
    private String vmsFrmTypeCd;

    @ApiModelProperty("VMS 유형 코드")  // Y VARCHAR(7)
    @JsonProperty("vms_type_cd")
    private String vmsTypeCd;

    @ApiModelProperty("VMS 모듈 유형 코드")  // Y VARCHAR(7)
    @JsonProperty("vms_modl_type_cd")
    private String vmsModlTypeCd;

    @ApiModelProperty("VMS 통신 포트")  // Y VARCHAR(5)
    @JsonProperty("vms_cmnc_port")
    private String vmsCmncPort;

    @ApiModelProperty("운영 모드")  // Y VARCHAR(7)
    @JsonProperty("oper_mode")
    private String operMode;

    @ApiModelProperty("VMS 통신 오류 기본 값")  // Y NUMBER(3)
    @JsonProperty("vms_cmnc_err_bass_val")
    private Integer vmsCmncErrBassVal;

    @ApiModelProperty("VMS 야간 휘도 단계")  // Y NUMBER(2)
    @JsonProperty("vms_nght_brgh_step")
    private Integer vmsNghtBrghStep;

    @ApiModelProperty("VMS 주간 휘도 단계")  // Y NUMBER(2)
    @JsonProperty("vms_week_brgh_step")
    private Integer vmsWeekBrghStep;

    @ApiModelProperty("VMS 표출면 변경 주기")  // Y NUMBER(3)
    @JsonProperty("vms_phse_chng_cycl")
    private Integer vmsPhseChngCycl;

    @ApiModelProperty("VMS 모듈 오류 율")  // Y NUMBER(3)
    @JsonProperty("vms_modl_err_rate")
    private Integer vmsModlErrRate;

    @ApiModelProperty("통신장애 SLOT 번호")  // Y NUMBER(4)
    @JsonProperty("cmncfail_slot_nmbr")
    private Integer cmncfailSlotNmbr;

    @ApiModelProperty("전원 장애 SLOT 번호")  // Y NUMBER(4)
    @JsonProperty("pwer_fail_slot_nmbr")
    private Integer pwerFailSlotNmbr;

    @ApiModelProperty("삭제 여부")  // Y CHAR(1)
    @JsonProperty("del_yn")
    private String delYn;

    @ApiModelProperty("소통정보 연계 여부")  // Y CHAR(1)
    @JsonProperty("cmtrinfr_cnct_yn")
    private String cmtrinfrCnctYn;

    @ApiModelProperty("기상정보 연계 여부")  // Y CHAR(1)
    @JsonProperty("wthrinfr_cnct_yn")
    private String wthrinfrCnctYn;

    @ApiModelProperty("환경정보 연계 여부")  // Y CHAR(1)
    @JsonProperty("envrinfr_cnct_yn")
    private String envrinfrCnctYn;

    @ApiModelProperty("VMS 최대 표출면 개수")  // Y NUMBER(2)
    @JsonProperty("vms_max_phse_num")
    private Integer vmsMaxPhseNum;

    @ApiModelProperty("최초 등록자 번호")  // Y VARCHAR(20)
    @JsonProperty("frst_regr_nmbr")
    private String frstRegrNmbr;

    @ApiModelProperty("최초 등록 일시")  // Y VARCHAR(14)
    @JsonProperty("frst_rgst_dt")
    private String frstRgstDt;

    @ApiModelProperty("최종 수정자 번호")  // Y VARCHAR(20)
    @JsonProperty("last_crpr_nmbr")
    private String lastCrprNmbr;

    @ApiModelProperty("최종 수정 일시")  // Y VARCHAR(14)
    @JsonProperty("last_crct_dt")
    private String lastCrctDt;

    @ApiModelProperty("전광판 ON TIME")  // Y VARCHAR(4)
    @JsonProperty("panl_on_time")
    private String panlOnTime;

    @ApiModelProperty("전광판 OFF TIME")  // Y VARCHAR(4)
    @JsonProperty("panl_off_time")
    private String panlOffTime;

    @ApiModelProperty("전광판 전원 모드")  // Y VARCHAR(7)
    @JsonProperty("panl_pwer_mode")
    private String panlPwerMode;

    @ApiModelProperty("휘도 모드")  // Y VARCHAR(7)
    @JsonProperty("brgh_mode")
    private String brghMode;

    @ApiModelProperty("웹 카메라 아이피")  // Y VARCHAR(20)
    @JsonProperty("web_cmra_ip")
    private String webCmraIp;

    @ApiModelProperty("X 좌표")  // Y NUMBER(11,8)
    @JsonProperty("x_crdn")
    private Double xCrdn;

    @ApiModelProperty("Y 좌표")  // Y NUMBER(10,8)
    @JsonProperty("y_crdn")
    private Double yCrdn;

    @ApiModelProperty("설치 위치 명")  // Y VARCHAR(40)
    @JsonProperty("istl_lctn_nm")
    private String istlLctnNm;

    @ApiModelProperty("교통 전략 사용 여부")  // Y CHAR(1)
    @JsonProperty("trfc_strg_use_yn")
    private String trfcStrgUseYn;

    @ApiModelProperty("VMS 위치 정보제공구간 ID")  // Y NUMBER(10)
    @JsonProperty("vms_loc_ifsc_id")
    private Long vmsLocIfscId;

    @ApiModelProperty("팬 동작 온도")  // Y NUMBER(6,3)
    @JsonProperty("fan_mtns_tmpr")
    private Integer fanMtnsTmpr;

    @ApiModelProperty("히터 동작 온도")  // Y NUMBER(6,3)
    @JsonProperty("hetr_mtns_tmpr")
    private Integer hetrMtnsTmpr;

    @ApiModelProperty("웹 카메라 포트")  // Y VARCHAR(5)
    @JsonProperty("web_cmra_port")
    private String webCmraPort;

    @ApiModelProperty("웹 카메라 ID")  // Y VARCHAR(30)
    @JsonProperty("web_cmra_id")
    private String webCmraId;

    @ApiModelProperty("웹 카메라 암호")  // Y VARCHAR(64)
    @JsonProperty("web_cmra_pwd")
    private String webCmraPwd;

    @ApiModelProperty("스트리밍 세션 명")  // Y VARCHAR(200)
    @JsonProperty("strm_sesn_nm")
    private String strmSesnNm;

    // Code Description Field
    @ApiModelProperty("VMS 용도 유형 코드 설명")
    @JsonProperty("vms_usag_type_desc")    // VMS_USAG_TYPE_CD
    private String vmsUsagTypeDesc;

    //@ApiModelProperty("VMS 형식 유형 코드 설명")
    //@JsonProperty("vms_frm_type_desc")    // VMS_FRM_TYPE_CD
    //private String vmsFrmTypeDesc;

    @ApiModelProperty("VMS 유형 코드 설명")
    @JsonProperty("vms_type_desc")    // VMS_TYPE_CD
    private String vmsTypeDesc;

    //@ApiModelProperty("VMS 모듈 유형 코드 설명")
    //@JsonProperty("vms_modl_type_desc")    // VMS_MODL_TYPE_CD
    //private String vmsModlTypeDesc;

    //@ApiModelProperty("삭제 여부 설명")
    //@JsonProperty("del_desc")    // DEL_YN
    //private String delDesc;

    //@ApiModelProperty("소통정보 연계 여부 설명")
    //@JsonProperty("cmtrinfr_cnct_desc")    // CMTRINFR_CNCT_YN
    //private String cmtrinfrCnctDesc;

    //@ApiModelProperty("기상정보 연계 여부 설명")
    //@JsonProperty("wthrinfr_cnct_desc")    // WTHRINFR_CNCT_YN
    //private String wthrinfrCnctDesc;

    //@ApiModelProperty("환경정보 연계 여부 설명")
    //@JsonProperty("envrinfr_cnct_desc")    // ENVRINFR_CNCT_YN
    //private String envrinfrCnctDesc;

    //@ApiModelProperty("교통 전략 사용 여부 설명")
    //@JsonProperty("trfc_strg_use_desc")    // TRFC_STRG_USE_YN
    //private String trfcStrgUseDesc;

    @ApiModel("TbVmsCtlrUpdReq(VMS 제어기 정보변경)")
    @Getter
    @Setter
    @ToString
    @NoArgsConstructor(access = AccessLevel.PROTECTED)
    public static class TbVmsCtlrUpdReq {

        @ApiModelProperty("VMS 제어기 번호, Nullable = N, NUMBER(10)")  // N NUMBER(10)
        @JsonProperty("vms_ctlr_nmbr")
        @PositiveOrZero
        private Long vmsCtlrNmbr;

        @ApiModelProperty("VMS ID, Nullable = Y, VARCHAR(4)")  // Y VARCHAR(4)
        @JsonProperty("vms_id")
        @Size(min=1, max=4)
        private String vmsId;

        @ApiModelProperty("VMS 제어기 ID, Nullable = Y, VARCHAR(30)")  // Y VARCHAR(30)
        @JsonProperty("vms_ctlr_id")
        @Size(min=1, max=30)
        private String vmsCtlrId;

        @ApiModelProperty("VMS 명, Nullable = Y, VARCHAR(40)")  // Y VARCHAR(40)
        @JsonProperty("vms_nm")
        @Size(min=1, max=40)
        private String vmsNm;

        @ApiModelProperty("VMS 제어기 아이피, Nullable = Y, VARCHAR(20)")  // Y VARCHAR(20)
        @JsonProperty("vms_ctlr_ip")
        @Size(min=1, max=20)
        private String vmsCtlrIp;

        @ApiModelProperty("VMS 용도 유형 코드, Nullable = Y, VARCHAR(7)")  // Y VARCHAR(7)
        @JsonProperty("vms_usag_type_cd")
        @Size(min=1, max=7)
        private String vmsUsagTypeCd;

        @ApiModelProperty("VMS 형식 유형 코드, Nullable = Y, VARCHAR(7)")  // Y VARCHAR(7)
        @JsonProperty("vms_frm_type_cd")
        @Size(min=1, max=7)
        private String vmsFrmTypeCd;

        @ApiModelProperty("VMS 유형 코드, Nullable = Y, VARCHAR(7)")  // Y VARCHAR(7)
        @JsonProperty("vms_type_cd")
        @Size(min=1, max=7)
        private String vmsTypeCd;

        @ApiModelProperty("VMS 모듈 유형 코드, Nullable = Y, VARCHAR(7)")  // Y VARCHAR(7)
        @JsonProperty("vms_modl_type_cd")
        @Size(min=1, max=7)
        private String vmsModlTypeCd;

        @ApiModelProperty("VMS 통신 포트, Nullable = Y, VARCHAR(5)")  // Y VARCHAR(5)
        @JsonProperty("vms_cmnc_port")
        @Size(min=1, max=5)
        private String vmsCmncPort;

        @ApiModelProperty("운영 모드, Nullable = Y, VARCHAR(7)")  // Y VARCHAR(7)
        @JsonProperty("oper_mode")
        @Size(min=1, max=7)
        private String operMode;

        @ApiModelProperty("VMS 통신 오류 기본 값, Nullable = Y, NUMBER(3)")  // Y NUMBER(3)
        @JsonProperty("vms_cmnc_err_bass_val")
        @PositiveOrZero
        private Integer vmsCmncErrBassVal;

        @ApiModelProperty("VMS 야간 휘도 단계, Nullable = Y, NUMBER(2)")  // Y NUMBER(2)
        @JsonProperty("vms_nght_brgh_step")
        @PositiveOrZero
        private Integer vmsNghtBrghStep;

        @ApiModelProperty("VMS 주간 휘도 단계, Nullable = Y, NUMBER(2)")  // Y NUMBER(2)
        @JsonProperty("vms_week_brgh_step")
        @PositiveOrZero
        private Integer vmsWeekBrghStep;

        @ApiModelProperty("VMS 표출면 변경 주기, Nullable = Y, NUMBER(3)")  // Y NUMBER(3)
        @JsonProperty("vms_phse_chng_cycl")
        @PositiveOrZero
        private Integer vmsPhseChngCycl;

        @ApiModelProperty("VMS 모듈 오류 율, Nullable = Y, NUMBER(3)")  // Y NUMBER(3)
        @JsonProperty("vms_modl_err_rate")
        @PositiveOrZero
        private Integer vmsModlErrRate;

        @ApiModelProperty("통신장애 SLOT 번호, Nullable = Y, NUMBER(4)")  // Y NUMBER(4)
        @JsonProperty("cmncfail_slot_nmbr")
        @PositiveOrZero
        private Integer cmncfailSlotNmbr;

        @ApiModelProperty("전원 장애 SLOT 번호, Nullable = Y, NUMBER(4)")  // Y NUMBER(4)
        @JsonProperty("pwer_fail_slot_nmbr")
        @PositiveOrZero
        private Integer pwerFailSlotNmbr;

        @ApiModelProperty("삭제 여부, Nullable = Y, CHAR(1)")  // Y CHAR(1)
        @JsonProperty("del_yn")
        @Size(min=1, max=1)
        @Pattern(regexp = "[YN]")
        private String delYn;

        @ApiModelProperty("소통정보 연계 여부, Nullable = Y, CHAR(1)")  // Y CHAR(1)
        @JsonProperty("cmtrinfr_cnct_yn")
        @Size(min=1, max=1)
        @Pattern(regexp = "[YN]")
        private String cmtrinfrCnctYn;

        @ApiModelProperty("기상정보 연계 여부, Nullable = Y, CHAR(1)")  // Y CHAR(1)
        @JsonProperty("wthrinfr_cnct_yn")
        @Size(min=1, max=1)
        @Pattern(regexp = "[YN]")
        private String wthrinfrCnctYn;

        @ApiModelProperty("환경정보 연계 여부, Nullable = Y, CHAR(1)")  // Y CHAR(1)
        @JsonProperty("envrinfr_cnct_yn")
        @Size(min=1, max=1)
        @Pattern(regexp = "[YN]")
        private String envrinfrCnctYn;

        @ApiModelProperty("VMS 최대 표출면 개수, Nullable = Y, NUMBER(2)")  // Y NUMBER(2)
        @JsonProperty("vms_max_phse_num")
        @PositiveOrZero
        private Integer vmsMaxPhseNum;

        @ApiModelProperty("최초 등록자 번호, Nullable = Y, VARCHAR(20)")  // Y VARCHAR(20)
        @JsonProperty("frst_regr_nmbr")
        @Size(min=1, max=20)
        private String frstRegrNmbr;

        @ApiModelProperty("최초 등록 일시, Nullable = Y, VARCHAR(14)")  // Y VARCHAR(14)
        @JsonProperty("frst_rgst_dt")
        @Size(min=1, max=14)
        private String frstRgstDt;

        @ApiModelProperty("최종 수정자 번호, Nullable = Y, VARCHAR(20)")  // Y VARCHAR(20)
        @JsonProperty("last_crpr_nmbr")
        @Size(min=1, max=20)
        private String lastCrprNmbr;

        @ApiModelProperty("최종 수정 일시, Nullable = Y, VARCHAR(14)")  // Y VARCHAR(14)
        @JsonProperty("last_crct_dt")
        @Size(min=1, max=14)
        private String lastCrctDt;

        @ApiModelProperty("전광판 ON TIME, Nullable = Y, VARCHAR(4)")  // Y VARCHAR(4)
        @JsonProperty("panl_on_time")
        @Size(min=1, max=4)
        private String panlOnTime;

        @ApiModelProperty("전광판 OFF TIME, Nullable = Y, VARCHAR(4)")  // Y VARCHAR(4)
        @JsonProperty("panl_off_time")
        @Size(min=1, max=4)
        private String panlOffTime;

        @ApiModelProperty("전광판 전원 모드, Nullable = Y, VARCHAR(7)")  // Y VARCHAR(7)
        @JsonProperty("panl_pwer_mode")
        @Size(min=1, max=7)
        private String panlPwerMode;

        @ApiModelProperty("휘도 모드, Nullable = Y, VARCHAR(7)")  // Y VARCHAR(7)
        @JsonProperty("brgh_mode")
        @Size(min=1, max=7)
        private String brghMode;

        @ApiModelProperty("웹 카메라 아이피, Nullable = Y, VARCHAR(20)")  // Y VARCHAR(20)
        @JsonProperty("web_cmra_ip")
        @Size(min=1, max=20)
        private String webCmraIp;

        @ApiModelProperty("X 좌표, , NUMBER(11,8)")  // Y NUMBER(11,8)
        @JsonProperty("x_crdn")
        private Double xCrdn;

        @ApiModelProperty("Y 좌표, , NUMBER(10,8)")  // Y NUMBER(10,8)
        @JsonProperty("y_crdn")
        private Double yCrdn;

        @ApiModelProperty("설치 위치 명, Nullable = Y, VARCHAR(40)")  // Y VARCHAR(40)
        @JsonProperty("istl_lctn_nm")
        @Size(min=1, max=40)
        private String istlLctnNm;

        @ApiModelProperty("교통 전략 사용 여부, Nullable = Y, CHAR(1)")  // Y CHAR(1)
        @JsonProperty("trfc_strg_use_yn")
        @Size(min=1, max=1)
        @Pattern(regexp = "[YN]")
        private String trfcStrgUseYn;

        @ApiModelProperty("VMS 위치 정보제공구간 ID, Nullable = Y, NUMBER(10)")  // Y NUMBER(10)
        @JsonProperty("vms_loc_ifsc_id")
        @PositiveOrZero
        private Long vmsLocIfscId;

        @ApiModelProperty("팬 동작 온도, , NUMBER(6,3)")  // Y NUMBER(6,3)
        @JsonProperty("fan_mtns_tmpr")
        private Integer fanMtnsTmpr;

        @ApiModelProperty("히터 동작 온도, , NUMBER(6,3)")  // Y NUMBER(6,3)
        @JsonProperty("hetr_mtns_tmpr")
        private Integer hetrMtnsTmpr;

        @ApiModelProperty("웹 카메라 포트, Nullable = Y, VARCHAR(5)")  // Y VARCHAR(5)
        @JsonProperty("web_cmra_port")
        @Size(min=1, max=5)
        private String webCmraPort;

        @ApiModelProperty("웹 카메라 ID, Nullable = Y, VARCHAR(30)")  // Y VARCHAR(30)
        @JsonProperty("web_cmra_id")
        @Size(min=1, max=30)
        private String webCmraId;

        @ApiModelProperty("웹 카메라 암호, Nullable = Y, VARCHAR(64)")  // Y VARCHAR(64)
        @JsonProperty("web_cmra_pwd")
        @Size(min=1, max=64)
        private String webCmraPwd;

        @ApiModelProperty("스트리밍 세션 명, Nullable = Y, VARCHAR(200)")  // Y VARCHAR(200)
        @JsonProperty("strm_sesn_nm")
        @Size(min=1, max=200)
        private String strmSesnNm;

        @Builder
        public TbVmsCtlrUpdReq(Long vms_ctlr_nmbr, String vms_id, String vms_ctlr_id, String vms_nm, String vms_ctlr_ip, String vms_usag_type_cd, String vms_frm_type_cd, String vms_type_cd, String vms_modl_type_cd, String vms_cmnc_port, String oper_mode, Integer vms_cmnc_err_bass_val, Integer vms_nght_brgh_step, Integer vms_week_brgh_step, Integer vms_phse_chng_cycl, Integer vms_modl_err_rate, Integer cmncfail_slot_nmbr, Integer pwer_fail_slot_nmbr, String del_yn, String cmtrinfr_cnct_yn, String wthrinfr_cnct_yn, String envrinfr_cnct_yn, Integer vms_max_phse_num, String frst_regr_nmbr, String frst_rgst_dt, String last_crpr_nmbr, String last_crct_dt, String panl_on_time, String panl_off_time, String panl_pwer_mode, String brgh_mode, String web_cmra_ip, Double x_crdn, Double y_crdn, String istl_lctn_nm, String trfc_strg_use_yn, Long vms_loc_ifsc_id, Integer fan_mtns_tmpr, Integer hetr_mtns_tmpr, String web_cmra_port, String web_cmra_id, String web_cmra_pwd, String strm_sesn_nm) {
            this.vmsCtlrNmbr = vms_ctlr_nmbr;
            this.vmsId = vms_id;
            this.vmsCtlrId = vms_ctlr_id;
            this.vmsNm = vms_nm;
            this.vmsCtlrIp = vms_ctlr_ip;
            this.vmsUsagTypeCd = vms_usag_type_cd;
            this.vmsFrmTypeCd = vms_frm_type_cd;
            this.vmsTypeCd = vms_type_cd;
            this.vmsModlTypeCd = vms_modl_type_cd;
            this.vmsCmncPort = vms_cmnc_port;
            this.operMode = oper_mode;
            this.vmsCmncErrBassVal = vms_cmnc_err_bass_val;
            this.vmsNghtBrghStep = vms_nght_brgh_step;
            this.vmsWeekBrghStep = vms_week_brgh_step;
            this.vmsPhseChngCycl = vms_phse_chng_cycl;
            this.vmsModlErrRate = vms_modl_err_rate;
            this.cmncfailSlotNmbr = cmncfail_slot_nmbr;
            this.pwerFailSlotNmbr = pwer_fail_slot_nmbr;
            this.delYn = del_yn;
            this.cmtrinfrCnctYn = cmtrinfr_cnct_yn;
            this.wthrinfrCnctYn = wthrinfr_cnct_yn;
            this.envrinfrCnctYn = envrinfr_cnct_yn;
            this.vmsMaxPhseNum = vms_max_phse_num;
            this.frstRegrNmbr = frst_regr_nmbr;
            this.frstRgstDt = frst_rgst_dt;
            this.lastCrprNmbr = last_crpr_nmbr;
            this.lastCrctDt = last_crct_dt;
            this.panlOnTime = panl_on_time;
            this.panlOffTime = panl_off_time;
            this.panlPwerMode = panl_pwer_mode;
            this.brghMode = brgh_mode;
            this.webCmraIp = web_cmra_ip;
            this.xCrdn = x_crdn;
            this.yCrdn = y_crdn;
            this.istlLctnNm = istl_lctn_nm;
            this.trfcStrgUseYn = trfc_strg_use_yn;
            this.vmsLocIfscId = vms_loc_ifsc_id;
            this.fanMtnsTmpr = fan_mtns_tmpr;
            this.hetrMtnsTmpr = hetr_mtns_tmpr;
            this.webCmraPort = web_cmra_port;
            this.webCmraId = web_cmra_id;
            this.webCmraPwd = web_cmra_pwd;
            this.strmSesnNm = strm_sesn_nm;
        }

        public TbVmsCtlr toEntity() {
            return TbVmsCtlr.builder()
                    .vmsCtlrNmbr(this.vmsCtlrNmbr)
                    .vmsId(this.vmsId)
                    .vmsCtlrId(this.vmsCtlrId)
                    .vmsNm(this.vmsNm)
                    .vmsCtlrIp(this.vmsCtlrIp)
                    .vmsUsagTypeCd(this.vmsUsagTypeCd)
                    .vmsFrmTypeCd(this.vmsFrmTypeCd)
                    .vmsTypeCd(this.vmsTypeCd)
                    .vmsModlTypeCd(this.vmsModlTypeCd)
                    .vmsCmncPort(this.vmsCmncPort)
                    .operMode(this.operMode)
                    .vmsCmncErrBassVal(this.vmsCmncErrBassVal)
                    .vmsNghtBrghStep(this.vmsNghtBrghStep)
                    .vmsWeekBrghStep(this.vmsWeekBrghStep)
                    .vmsPhseChngCycl(this.vmsPhseChngCycl)
                    .vmsModlErrRate(this.vmsModlErrRate)
                    .cmncfailSlotNmbr(this.cmncfailSlotNmbr)
                    .pwerFailSlotNmbr(this.pwerFailSlotNmbr)
                    .delYn(this.delYn)
                    .cmtrinfrCnctYn(this.cmtrinfrCnctYn)
                    .wthrinfrCnctYn(this.wthrinfrCnctYn)
                    .envrinfrCnctYn(this.envrinfrCnctYn)
                    .vmsMaxPhseNum(this.vmsMaxPhseNum)
                    .frstRegrNmbr(this.frstRegrNmbr)
                    .frstRgstDt(this.frstRgstDt)
                    .lastCrprNmbr(this.lastCrprNmbr)
                    .lastCrctDt(this.lastCrctDt)
                    .panlOnTime(this.panlOnTime)
                    .panlOffTime(this.panlOffTime)
                    .panlPwerMode(this.panlPwerMode)
                    .brghMode(this.brghMode)
                    .webCmraIp(this.webCmraIp)
                    .xCrdn(this.xCrdn)
                    .yCrdn(this.yCrdn)
                    .istlLctnNm(this.istlLctnNm)
                    .trfcStrgUseYn(this.trfcStrgUseYn)
                    .vmsLocIfscId(this.vmsLocIfscId)
                    .fanMtnsTmpr(this.fanMtnsTmpr)
                    .hetrMtnsTmpr(this.hetrMtnsTmpr)
                    .webCmraPort(this.webCmraPort)
                    .webCmraId(this.webCmraId)
                    .webCmraPwd(this.webCmraPwd)
                    .strmSesnNm(this.strmSesnNm)
                    .build();
        }

    }

    @ApiModel("TbVmsUsageType(VMS 제어기 용도 유형)")
    @Getter
    @Setter
    @ToString
    @NoArgsConstructor(access = AccessLevel.PROTECTED)
    public static class TbVmsUsageType {

        @ApiModelProperty("VMS 용도 유형 코드, Nullable = N, VARCHAR(7)")  // Y VARCHAR(7)
        @JsonProperty("")
        private String vmsUsagTypeCd;

        @ApiModelProperty("VMS 용도 유형 코드 명")
        @JsonProperty("vms_usag_type_nm")
        private String vmsUsagTypeNm;

        @ApiModelProperty("VMS 용도 유형 설명")
        @JsonProperty("vms_usag_type_desc")
        private String vmsUsagTypeDesc;

        @Builder
        public TbVmsUsageType(TbCmmnCdDto cmmnCdDto) {
            this.vmsUsagTypeCd = cmmnCdDto.getCmmnCd();
            this.vmsUsagTypeNm = cmmnCdDto.getCmmnCdKorNm();
            this.vmsUsagTypeDesc = "[" + this.vmsUsagTypeCd + "] " + this.vmsUsagTypeNm;
        }

    }

    @ApiModel("TbVmsType(VMS 제어기 유형)")
    @Getter
    @Setter
    @ToString
    @NoArgsConstructor(access = AccessLevel.PROTECTED)
    public static class TbVmsType {

        @ApiModelProperty("VMS 유형 코드")  // N VARCHAR(5)
        @JsonProperty("vms_type_cd")
        private String vmsTypeCd;

        @ApiModelProperty("VMS 유형 명")  // Y VARCHAR(40)
        @JsonProperty("vms_type_nm")
        private String vmsTypeNm;

        @ApiModelProperty("VMS 너비")  // Y NUMBER(4)
        @JsonProperty("vms_wdth")
        private Integer vmsWdth;

        @ApiModelProperty("VMS 높이")  // Y NUMBER(4)
        @JsonProperty("vms_hght")
        private Integer vmsHght;

        @ApiModelProperty("행 개수")  // Y NUMBER(3)
        @JsonProperty("row_num")
        private Integer rowNum;

        @ApiModelProperty("열 개수")  // Y NUMBER(3)
        @JsonProperty("col_num")
        private Integer colNum;

        // Code Description Field
        @ApiModelProperty("VMS 유형 코드 설명")
        @JsonProperty("vms_type_desc")    // VMS_TYPE_CD
        private String vmsTypeDesc;

        public TbVmsType(TbCmmnCdDto cmmnCdDto) {
            this.vmsTypeCd = cmmnCdDto.getCmmnCd();
            this.vmsTypeNm = cmmnCdDto.getCmmnCdKorNm();
            this.vmsWdth = Integer.parseInt(cmmnCdDto.getAtrb1());
            this.vmsHght = Integer.parseInt(cmmnCdDto.getAtrb2());
            this.rowNum = 0;
            this.colNum = 0;
            this.vmsTypeDesc = "[" + this.vmsTypeCd + "] " + this.vmsTypeNm;
        }
    }

}
