Преглед на файлове

vms stts, dspl prst update

shjung преди 3 години
родител
ревизия
61351c5d5c

+ 209 - 70
src/main/java/com/its/api/its/model/dto/vms/TbVmsDsplPrstDto.java

@@ -1,14 +1,17 @@
 package com.its.api.its.model.dto.vms;
 
-import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.its.api.its.model.entity.vms.TbVmsCtlr;
+import com.its.api.its.model.entity.vms.TbVmsDsplPrst;
+import com.its.utils.ItsUtils;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import lombok.Builder;
-import lombok.Data;
+import lombok.*;
 
 import javax.validation.constraints.Size;
 import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * VMS 표출 현재 DTO Class
@@ -41,109 +44,245 @@ public class TbVmsDsplPrstDto implements Serializable {
     @JsonProperty("vms_hght")
     private Integer vmsHght;
 
-    @ApiModelProperty("PHASE")  // N NUMBER(2)
-    @JsonProperty("phase")
-    private Integer phase;
+    @ApiModelProperty("운영모드")
+    @JsonProperty("oper_mode")
+    private String operMode;
+
+    @ApiModelProperty("운영모드설명")
+    @JsonProperty("oper_mode_desc")
+    private String operModeDesc;
+
+    @ApiModelProperty("표출 일시")  // Y VARCHAR(14)
+    @JsonProperty("dspl_dt")
+    private String dsplDt;
+
+    @ApiModelProperty("서비스 여부(Y:성공,N:실패)")
+    @JsonProperty("svc_yn")
+    private String svcYn;
+
+    // 상태정보 설명
+    @ApiModelProperty("통신 상태 코드 설명")
+    @JsonProperty("cmnc_stts_desc")
+    private String cmncSttsDesc;
+
+    @ApiModelProperty("전원 상태 코드 설명")
+    @JsonProperty("pwer_stts_desc")
+    private String pwerSttsDesc;
+
+    @ApiModelProperty("모듈개별상태 설명")
+    @JsonProperty("modl_stts_desc")
+    private String modlSttsDesc;
+
+    @ApiModelProperty("함체문 열림 상태 코드 설명")
+    @JsonProperty("cbox_door_stts_desc")
+    private String cboxDoorSttsDesc;
+
+    @ApiModelProperty("팬 상태 코드 설명")
+    @JsonProperty("fan_stts_desc")    // FAN_STTS_CD
+    private String fanSttsDesc;
+
+    @ApiModelProperty("히터 상태 코드 설명")
+    @JsonProperty("hetr_stts_desc")    // HETR_STTS_CD
+    private String hetrSttsDesc;
+
+    @ApiModelProperty("상태정보 결측 여부")
+    @JsonProperty("miss_stts_yn")
+    private String missSttsYn;
+
+    // 표출메시지 목록
+    @ApiModelProperty("VMS 표출메시지 목록")
+    @JsonProperty("msgs")
+    private List<VmsMsgDsplInfo> msgs = new ArrayList<>();
+
+//
+//    @ApiModelProperty("통신 상태 코드(0:정상, 1:통신이상, 2:알수없음)")  // Y VARCHAR(7)
+//    @JsonProperty("cmnc_stts_cd")
+//    private String cmncSttsCd;
+//
+//    @ApiModelProperty("전원 상태 코드")  // Y VARCHAR(7)
+//    @JsonProperty("pwer_stts_cd")
+//    private String pwerSttsCd;
+//
+//    @ApiModelProperty("모듈 상태 코드")
+//    @JsonProperty("modl_stts_cd")
+//    private String modlSttsCd;
+//
+//    @ApiModelProperty("함체문 열림 상태 코드")  // Y VARCHAR(7)
+//    @JsonProperty("cbox_door_stts_cd")
+//    private String cboxDoorSttsCd;
+//
+//    @ApiModelProperty("팬 상태 코드")  // Y VARCHAR(7)
+//    @JsonProperty("fan_stts_cd")
+//    private String fanSttsCd;
+//
+//    @ApiModelProperty("히터 상태 코드")  // Y VARCHAR(7)
+//    @JsonProperty("hetr_stts_cd")
+//    private String hetrSttsCd;
+//
+//    @ApiModelProperty("함체 온도")  // Y NUMBER(3)
+//    @JsonProperty("cbox_tmpr")
+//    private Integer cboxTmpr;
+//
+//    @ApiModelProperty("휘도값")  // Y NUMBER(3)
+//    @JsonProperty("brgh_val")
+//    private Integer brghVal;
+
+//    @ApiModelProperty("PHASE")  // N NUMBER(2)
+//    @JsonProperty("phase")
+//    private Integer phase;
+//
+//    @ApiModelProperty("VMS FORM ID")  // Y NUMBER(5)
+//    @JsonProperty("vms_form_id")
+//    private Integer vmsFormId;
+//
+//    @ApiModelProperty("제어기다운로드 여부(Y:성공,N:실패)")  // Y CHAR(1)
+//    @JsonProperty("dnld_yn")
+//    private String dnldYn;
+//
+//    @ApiModelProperty("표출 시간")  // Y NUMBER(3)
+//    @JsonProperty("dspl_hh")
+//    private Integer dsplHh;
+//
+//    @ApiModelProperty("VMS 표출 메시지 이미지")  // Y BLOB
+//    @JsonProperty("vms_dspl_msg_imag")
+//    private byte[] vmsDsplMsgImag;
+//
+//    @ApiModelProperty("이미지 형식(bmp, png)")
+//    @JsonProperty("imag_fmt")
+//    private String imagFmt;
 
     //@ApiModelProperty("VMS 표출 메시지 데이터")  // Y VARCHAR(1200)
     //@JsonProperty("vms_dspl_msg_data")
-    @JsonIgnore
-    private String vmsDsplMsgData;
-
-    @ApiModelProperty("VMS 표출 메시지 이미지")  // Y BLOB
-    @JsonProperty("vms_dspl_msg_imag")
-    private byte[] vmsDsplMsgImag;
+    //@JsonIgnore
+    //private String vmsDsplMsgData;
 
     //@ApiModelProperty("VMS 표출 메시지 텍스트")  // Y VARCHAR(400)
     //@JsonProperty("vms_dspl_msg_txt")
-    @JsonIgnore
-    private String vmsDsplMsgTxt;
+    //@JsonIgnore
+    //private String vmsDsplMsgTxt;
 
     //@ApiModelProperty("교통 상황 유형 코드")  // Y VARCHAR(7)
     //@JsonProperty("trfc_situ_type_cd")
-    @JsonIgnore
-    private String trfcSituTypeCd;
+    //@JsonIgnore
+    //private String trfcSituTypeCd;
 
     //@ApiModelProperty("VMS 메시지 표출 방향 코드")  // N NUMBER(3)
     //@JsonProperty("vms_msg_dspl_drct_cd")
-    @JsonIgnore
-    private Integer vmsMsgDsplDrctCd;
-
-    @ApiModelProperty("표출 일시")  // Y VARCHAR(14)
-    @JsonProperty("dspl_dt")
-    private String dsplDt;
+    //@JsonIgnore
+    //private Integer vmsMsgDsplDrctCd;
 
     //@ApiModelProperty("심벌라이브러리 번호")  // Y NUMBER(4)
     //@JsonProperty("symblib_nmbr")
-    @JsonIgnore
-    private Integer symblibNmbr;
+    //@JsonIgnore
+    //private Integer symblibNmbr;
 
     //@ApiModelProperty("VMS 메시지 표출 방법 코드")  // Y NUMBER(3)
     //@JsonProperty("vms_msg_dspl_mthd_cd")
-    @JsonIgnore
-    private Integer vmsMsgDsplMthdCd;
-
-    @ApiModelProperty("표출 시간")  // Y NUMBER(3)
-    @JsonProperty("dspl_hh")
-    private Integer dsplHh;
-
-    @ApiModelProperty("VMS FORM ID")  // Y NUMBER(5)
-    @JsonProperty("vms_form_id")
-    private Integer vmsFormId;
+    //@JsonIgnore
+    //private Integer vmsMsgDsplMthdCd;
 
     //@ApiModelProperty("VMS 정보제공구간 ID")  // Y NUMBER(10)
     //@JsonProperty("vms_ifsc_id")
-    @JsonIgnore
-    private Long vmsIfscId;
+    //@JsonIgnore
+    //private Long vmsIfscId;
 
     //@ApiModelProperty("돌발상황 발생 ID")  // Y VARCHAR(12)
     //@JsonProperty("incd_ocrr_id")
-    @JsonIgnore
-    private String incdOcrrId;
+    //@JsonIgnore
+    //private String incdOcrrId;
 
     //@ApiModelProperty("우회도로 ID")  // Y NUMBER(10)
     //@JsonProperty("detr_id")
-    @JsonIgnore
-    private Long detrId;
-
-    @ApiModelProperty("제어기다운로드 여부(Y:성공,N:실패)")  // Y CHAR(1)
-    @JsonProperty("dnld_yn")
-    private String dnldYn;
+    //@JsonIgnore
+    //private Long detrId;
 
     // Code Description Field
     //@ApiModelProperty("교통 상황 유형 코드 설명")
     //@JsonProperty("trfc_situ_type_desc")    // TRFC_SITU_TYPE_CD
-    @JsonIgnore
-    private String trfcSituTypeDesc;
+    //@JsonIgnore
+    //private String trfcSituTypeDesc;
 
     //@ApiModelProperty("VMS 메시지 표출 방향 코드 설명")
     //@JsonProperty("vms_msg_dspl_drct_desc")    // VMS_MSG_DSPL_DRCT_CD
-    @JsonIgnore
-    private Integer vmsMsgDsplDrctDesc;
+    //@JsonIgnore
+    //private Integer vmsMsgDsplDrctDesc;
 
     //@ApiModelProperty("VMS 메시지 표출 방법 코드 설명")
     //@JsonProperty("vms_msg_dspl_mthd_desc")    // VMS_MSG_DSPL_MTHD_CD
-    @JsonIgnore
-    private Integer vmsMsgDsplMthdDesc;
-
-    @ApiModelProperty("제어기다운로드 여부(Y:성공,N:실패) 설명")
-    @JsonProperty("dnld_desc")    // DNLD_YN
-    private String dnldDesc;
-
-    @ApiModelProperty("이미지 형식(bmp, png)")
-    @JsonProperty("imag_fmt")
-    private String imagFmt;
-
-    @ApiModelProperty("서비스 여부(Y:성공,N:실패)")
-    @JsonProperty("svc_yn")
-    private String svcYn;
-
-    @ApiModelProperty("운영모드")
-    @JsonProperty("oper_mode")
-    private String operMode;
-
-    @ApiModelProperty("운영모드설명")
-    @JsonProperty("oper_mode_desc")
-    private String operModeDesc;
+    //@JsonIgnore
+    //private Integer vmsMsgDsplMthdDesc;
+
+    //@ApiModelProperty("제어기다운로드 여부(Y:성공,N:실패) 설명")
+    //@JsonProperty("dnld_desc")    // DNLD_YN
+    //@JsonIgnore
+    //private String dnldDesc;
+
+    public void addMsg(TbVmsDsplPrst msg) {
+        if (this.msgs == null) {
+            this.msgs = new ArrayList<>();
+        }
+        this.msgs.add(VmsMsgDsplInfo.builder()
+                .phase(msg.getPhase())
+                .vmsFormId(msg.getVmsFormId())
+                .dnldYn(msg.getDnldYn())
+                .dsplHh(msg.getDsplHh())
+                .vmsDsplMsgImag(ItsUtils.convertBmpToPng(msg.getVmsDsplMsgImag()))
+                .imagFmt("png")
+                .build());
+    }
+
+    public void setStts(TbVmsCtlr vms) {
+        if (vms != null) {
+            TbVmsSttsDto stts = vms.toSttsDto();
+
+            this.cmncSttsDesc = stts.getCmncSttsDesc();
+            this.pwerSttsDesc = stts.getPwerSttsDesc();
+            this.modlSttsDesc = stts.getModlSttsDesc();
+            this.cboxDoorSttsDesc = stts.getCboxDoorSttsDesc();
+            this.fanSttsDesc = stts.getFanSttsDesc();
+            this.hetrSttsDesc = stts.getHetrSttsDesc();
+            this.missSttsYn = stts.getMissSttsYn();
+//            this.cmncSttsCd = stts.getCmncSttsCd();
+//            this.pwerSttsCd = stts.getPwerSttsCd();
+//            this.modlSttsCd = stts.getModlSttsCd();
+//            this.cboxDoorSttsCd = stts.getCboxDoorSttsCd();
+//            this.fanSttsCd = stts.getFanSttsCd();
+//            this.hetrSttsCd = stts.getHetrSttsCd();
+//            this.cboxTmpr = stts.getCboxTmpr();
+//            this.brghVal = stts.getBrghVal();
+        }
+    }
+
+    @ApiModel("VmsMsgDsplInfo(VMS 표출메시지정보)")
+    @Getter
+    @Setter
+    @ToString
+    @Builder
+    //@NoArgsConstructor(access = AccessLevel.PROTECTED)
+    public static class VmsMsgDsplInfo {
+        @ApiModelProperty("PHASE")  // N NUMBER(2)
+        @JsonProperty("phase")
+        private Integer phase;
+
+        @ApiModelProperty("VMS FORM ID")  // Y NUMBER(5)
+        @JsonProperty("vms_form_id")
+        private Integer vmsFormId;
+
+        @ApiModelProperty("제어기다운로드 여부(Y:성공,N:실패)")  // Y CHAR(1)
+        @JsonProperty("dnld_yn")
+        private String dnldYn;
+
+        @ApiModelProperty("표출 시간")  // Y NUMBER(3)
+        @JsonProperty("dspl_hh")
+        private Integer dsplHh;
+
+        @ApiModelProperty("VMS 표출 메시지 이미지")  // Y BLOB
+        @JsonProperty("vms_dspl_msg_imag")
+        private byte[] vmsDsplMsgImag;
+
+        @ApiModelProperty("이미지 형식(bmp, png)")
+        @JsonProperty("imag_fmt")
+        private String imagFmt;
+    }
 
 }

+ 19 - 16
src/main/java/com/its/api/its/model/entity/vms/TbVmsDsplPrst.java

@@ -10,6 +10,7 @@ import org.hibernate.annotations.NotFoundAction;
 
 import javax.persistence.*;
 import java.io.Serializable;
+import java.util.ArrayList;
 
 /**
  * VMS 표출 현재 Entity Class
@@ -100,25 +101,27 @@ public class TbVmsDsplPrst implements Serializable {
     public TbVmsDsplPrstDto toDto() {
         TbVmsDsplPrstDto dto = TbVmsDsplPrstDto.builder()
                 .vmsCtlrNmbr(this.vmsCtlrNmbr)
-                .phase(this.phase)
-                .vmsDsplMsgData(this.vmsDsplMsgData)
-                .vmsDsplMsgImag(this.vmsDsplMsgImag)
-                .vmsDsplMsgTxt(this.vmsDsplMsgTxt)
-                .trfcSituTypeCd(this.trfcSituTypeCd)
-                .vmsMsgDsplDrctCd(this.vmsMsgDsplDrctCd)
+                //.phase(this.phase)
+                //.vmsDsplMsgData(this.vmsDsplMsgData)
+                //.vmsDsplMsgImag(this.vmsDsplMsgImag)
+                //.vmsDsplMsgTxt(this.vmsDsplMsgTxt)
+                //.trfcSituTypeCd(this.trfcSituTypeCd)
+                //.vmsMsgDsplDrctCd(this.vmsMsgDsplDrctCd)
                 .dsplDt(this.dsplDt)
-                .symblibNmbr(this.symblibNmbr)
-                .vmsMsgDsplMthdCd(this.vmsMsgDsplMthdCd)
-                .dsplHh(this.dsplHh)
-                .vmsFormId(this.vmsFormId)
-                .vmsIfscId(this.vmsIfscId)
-                .incdOcrrId(this.incdOcrrId)
-                .detrId(this.detrId)
-                .dnldYn(this.dnldYn)
+                //.symblibNmbr(this.symblibNmbr)
+                //.vmsMsgDsplMthdCd(this.vmsMsgDsplMthdCd)
+                //.dsplHh(this.dsplHh)
+                //.vmsFormId(this.vmsFormId)
+                //.vmsIfscId(this.vmsIfscId)
+                //.incdOcrrId(this.incdOcrrId)
+                //.detrId(this.detrId)
+                //.dnldYn(this.dnldYn)
                 .build();
 
-        dto.setVmsDsplMsgImag(ItsUtils.convertBmpToPng(dto.getVmsDsplMsgImag()));
-        dto.setImagFmt("png");
+        dto.setMsgs(new ArrayList<>());
+
+        //dto.setVmsDsplMsgImag(ItsUtils.convertBmpToPng(dto.getVmsDsplMsgImag()));
+        //dto.setImagFmt("png");
         dto.setSvcYn(ItsUtils.getServiceYn(dto.getDsplDt()));
 
         if (this.vms != null) {

+ 68 - 28
src/main/java/com/its/api/its/service/vms/TbVmsDsplPrstService.java

@@ -1,17 +1,17 @@
 package com.its.api.its.service.vms;
 
 import com.its.api.its.model.dto.vms.TbVmsDsplPrstDto;
+import com.its.api.its.model.entity.vms.TbVmsCtlr;
 import com.its.api.its.model.entity.vms.TbVmsDsplPrst;
 import com.its.api.its.model.entity.vms.TbVmsDsplPrstKey;
+import com.its.api.its.repository.vms.TbVmsCtlrRepository;
 import com.its.api.its.repository.vms.TbVmsDsplPrstRepository;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.NoSuchElementException;
+import java.util.*;
 
 @Slf4j
 @RequiredArgsConstructor
@@ -19,6 +19,7 @@ import java.util.NoSuchElementException;
 public class TbVmsDsplPrstService {
 
     private final TbVmsDsplPrstRepository repo;
+    private final TbVmsCtlrRepository ctlrRepo;
 
     // 데이터 1건 조회, 없으면 exception
     private TbVmsDsplPrst requireOne(TbVmsDsplPrstKey id) {
@@ -34,31 +35,77 @@ public class TbVmsDsplPrstService {
     public List<TbVmsDsplPrstDto> findAll() {
         List<TbVmsDsplPrstDto> result = new ArrayList<>();
         List<TbVmsDsplPrst> data = this.repo.findAll();
-        for (TbVmsDsplPrst entity : data) {
-            result.add(entity.toDto());
-        }
-        return result;
+        List<TbVmsCtlr> stts = this.ctlrRepo.findAllList();
+        return makeDsplPrstList(data, stts);
+//        for (TbVmsDsplPrst entity : data) {
+//            result.add(entity.toDto());
+//        }
+//        return result;
     }
 
-    // 데이터 1건 조회(기존 데이터가 반드시 존재해야 함)
+    /**
+     * 현재 표출 VMS 메시지 개별 조회
+     * @return
+     */
     @Transactional(readOnly = true)
-    public TbVmsDsplPrstDto findById(TbVmsDsplPrstKey id) {
-        TbVmsDsplPrst entity = requireOne(id);
-        return entity.toDto();
+    public List<TbVmsDsplPrstDto> findAllByIds(List<Long> ids) {
+        List<TbVmsDsplPrstDto> result = new ArrayList<>();
+        List<TbVmsDsplPrst> data = this.repo.findAllByIds(ids);
+        List<TbVmsCtlr> stts = this.ctlrRepo.findAllListByIds(ids);
+        return makeDsplPrstList(data, stts);
+//        for (TbVmsDsplPrst entity : data) {
+//            result.add(entity.toDto());
+//        }
+//        return result;
     }
 
     /**
-     * 현재 표출 VMS 메시지 개별 조회
+     * VMS 표출 메시지 DTO 목록 생성
+     * @param data
+     * @param vmsList
+     * @return
+     */
+    public List<TbVmsDsplPrstDto> makeDsplPrstList(List<TbVmsDsplPrst> data, List<TbVmsCtlr> vmsList) {
+        Map<Long, TbVmsDsplPrstDto> result = new HashMap<>();
+        data.forEach(obj -> {
+            TbVmsDsplPrstDto dto = result.get(obj.getVmsCtlrNmbr());
+            if (dto == null) {
+                dto = obj.toDto();
+                result.put(obj.getVmsCtlrNmbr(), dto);
+            }
+            dto.addMsg(obj);
+        });
+        vmsList.forEach(obj -> {
+            TbVmsDsplPrstDto dto = result.get(obj.getVmsCtlrNmbr());
+            if (dto != null) {
+                dto.setStts(obj);
+            }
+        });
+        return new ArrayList<>(result.values());
+    }
+
+    /**
+     * VMS 표출 메시지 DTO 생성
+     * @param data
+     * @param vms
      * @return
      */
+    public TbVmsDsplPrstDto makeDsplPrst(TbVmsDsplPrst data, TbVmsCtlr vms) {
+        TbVmsDsplPrstDto result = data.toDto();
+        result.addMsg(data);
+        result.setStts(vms);
+        return result;
+    }
+
+    // 데이터 1건 조회(기존 데이터가 반드시 존재해야 함)
     @Transactional(readOnly = true)
-    public List<TbVmsDsplPrstDto> findAllByIds(List<Long> id) {
-        List<TbVmsDsplPrstDto> result = new ArrayList<>();
-        List<TbVmsDsplPrst> data = this.repo.findAllByIds(id);
-        for (TbVmsDsplPrst entity : data) {
-            result.add(entity.toDto());
+    public TbVmsDsplPrstDto findById(TbVmsDsplPrstKey id) {
+        TbVmsDsplPrst data = requireOne(id);
+        Optional<TbVmsCtlr> stts = this.ctlrRepo.findById(id.getVmsCtlrNmbr());
+        if (stts.isPresent()) {
+            return makeDsplPrst(data, stts.get());
         }
-        return result;
+        return makeDsplPrst(data, null);
     }
 
     /**
@@ -67,17 +114,10 @@ public class TbVmsDsplPrstService {
      * @param phase
      * @return
      */
-    @Transactional(readOnly = true)
+    //@Transactional(readOnly = true)
     public TbVmsDsplPrstDto findAllByIdAndPhase(Long vmsCtlrNmbr, Integer phase) {
         TbVmsDsplPrstKey key = new TbVmsDsplPrstKey(vmsCtlrNmbr, phase);
-        TbVmsDsplPrst result = requireOne(key);
-        return result.toDto();
-/*
-        List<TbVmsDsplPrst> data = this.repo.findAllByIdAndPhase(vmsCtlrNmbr, phase);
-        if (!data.isEmpty()) {
-            return data.get(0).toDto();
-        }
-        return null;
-*/
+        //TbVmsDsplPrst data = requireOne(key);
+        return findById(key);
     }
 }

+ 1 - 1
src/main/resources/static/application/wall/main/main-func.js

@@ -707,7 +707,7 @@ function recvVmsDsplMsg(jsonData) {
     const imgHeight = jsonData[0].vms_hght;
     const divWidth = imgWidth + _vmsWidthReserved;
 
-    _vmsDsplMsgArr = jsonData;
+    _vmsDsplMsgArr = jsonData[0].msgs;
     let iwContent =
         '<div class="map_popup_vms" style="width:' +
         divWidth +