Forráskód Böngészése

detail traffic api add

shjung 3 éve
szülő
commit
423ee3d662

+ 33 - 1
src/main/java/com/its/api/its/controller/common/CommonController.java

@@ -2,13 +2,18 @@ package com.its.api.its.controller.common;
 
 import com.its.api.its.model.dto.code.TbClctSystStupDto;
 import com.its.api.its.model.dto.common.CongestTrafficDto;
+import com.its.api.its.model.dto.common.DetlTrafIfscDto;
+import com.its.api.its.model.dto.common.DetlTrafLinkDto;
+import com.its.api.its.model.dto.common.DetlTrafRoadDto;
 import com.its.api.its.service.code.TbClctSystStupService;
 import com.its.api.its.service.common.CommonService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import lombok.RequiredArgsConstructor;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -37,7 +42,34 @@ public class CommonController {
         return this.commonService.findAllCongestTraffic();
     }
 
-//    @ApiOperation(value = "현재기상정보조회", response = WeatherInfoDto.class, responseContainer = "ArrayList")
+    @ApiOperation(value = "링크 교통정보상테", response = DetlTrafLinkDto.class)
+    @GetMapping(value = "/detail-traffic/link/{id}", produces = {"application/json; charset=utf8"})
+    public DetlTrafLinkDto findAllDetailTrafficLink(
+            @ApiParam(name = "id", value = "링크 ID", example = "2030057800", required = true)
+            @PathVariable final Long id
+    ) {
+        return this.commonService.findAllDetailTrafficLink(id);
+    }
+
+    @ApiOperation(value = "링크 교통정보상테", response = DetlTrafIfscDto.class)
+    @GetMapping(value = "/detail-traffic/ifsc/{id}", produces = {"application/json; charset=utf8"})
+    public DetlTrafIfscDto findAllDetailTrafficIfsc(
+            @ApiParam(name = "id", value = "정보제공구간 ID", example = "2005132700", required = true)
+            @PathVariable final Long id
+    ) {
+        return this.commonService.findAllDetailTrafficIfsc(id);
+    }
+
+    @ApiOperation(value = "링크 교통정보상테", response = DetlTrafRoadDto.class)
+    @GetMapping(value = "/detail-traffic/road/{id}", produces = {"application/json; charset=utf8"})
+    public DetlTrafRoadDto findAllDetailTrafficRoad(
+            @ApiParam(name = "id", value = "도로 ID", example = "2287001900", required = true)
+            @PathVariable final Long id
+    ) {
+        return this.commonService.findAllDetailTrafficRoad(id);
+    }
+
+    //    @ApiOperation(value = "현재기상정보조회", response = WeatherInfoDto.class, responseContainer = "ArrayList")
 //    @GetMapping(value = "/weather-info", produces = {"application/json; charset=utf8"})
 //    public List<WeatherInfoDto> findAllWeatherInfo() {
 //        return this.commonService.findAllWeatherInfo();

+ 1 - 2
src/main/java/com/its/api/its/model/dto/common/CongestTrafficDto.java

@@ -19,7 +19,7 @@ public class CongestTrafficDto implements Serializable {
 
     @ApiModelProperty("정보제공구간ID")  // Y VARCHAR(4)
     @JsonProperty("ifsc_id")
-    private String fcltType;
+    private String ifscId;
 
     @ApiModelProperty("속도")  // Y VARCHAR(30)
     @JsonProperty("sped")
@@ -49,5 +49,4 @@ public class CongestTrafficDto implements Serializable {
     @JsonProperty("atrd_nm")
     private String atrdNm;
 
-
 }

+ 110 - 0
src/main/java/com/its/api/its/model/dto/common/DetlTrafIfscDto.java

@@ -0,0 +1,110 @@
+package com.its.api.its.model.dto.common;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Builder;
+import lombok.Data;
+import lombok.ToString;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ *  DTO Class
+ */
+@Data
+@Builder
+@ApiModel("DetlTrafIfscDto(정보제공구간 소통정보 상세)")
+public class DetlTrafIfscDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("정보제공구간 ID")
+    @JsonProperty("ifsc_id")
+    private Long ifscId;
+
+    @ApiModelProperty("레벨")
+    @JsonProperty("levl")
+    private Integer levl;
+
+    @ApiModelProperty("구간 길이")
+    @JsonProperty("sect_lngt")
+    private Integer sectLngt;
+
+    @ApiModelProperty("시작 노드 ID")
+    @JsonProperty("f_node_id")
+    private Long   fNodeId;
+    @ApiModelProperty("시작 노드 명")
+    @JsonProperty("f_node_nm")
+    private String fNodeNm;
+
+    @ApiModelProperty("종료 노드 ID")
+    @JsonProperty("t_node_id")
+    private Long   tNodeId;
+    @ApiModelProperty("종료 노드 명")
+    @JsonProperty("t_node_nm")
+    private String tNodeNm;
+
+    @ApiModelProperty("도로명")  // Y VARCHAR(50)
+    @JsonProperty("road_name")
+    private String roadName;
+
+    @ApiModelProperty("현재소통정보")  // Y VARCHAR(50)
+    @JsonProperty("traf")
+    private DetlTrafIfscInfo traf;
+
+    @ApiModelProperty("소통정보이력(1시간이내)")  // Y VARCHAR(50)
+    @JsonProperty("traf_hs")
+    private List<DetlTrafIfscInfo> trafHs;
+
+    @ApiModel("DetlTrafIfscInfo(정보제공구간 소통정보 상세 정보)")
+    @Data
+    @ToString
+    @Builder
+    public static class DetlTrafIfscInfo {
+        @ApiModelProperty("가공 일시")  // Y VARCHAR(14)
+        @JsonProperty("prcn_dt")
+        private String prcnDt;
+
+        @ApiModelProperty("소통 등급 코드")  // Y VARCHAR(7)
+        @JsonProperty("cmtr_grad_cd")
+        private String cmtrGradCd;
+
+        @ApiModelProperty("속도")  // Y NUMBER(3)
+        @JsonProperty("sped")
+        private Integer sped;
+
+        @ApiModelProperty("통행 시간")  // Y NUMBER(6)
+        @JsonProperty("trvl_hh")
+        private Integer trvlHh;
+
+        @ApiModelProperty("패턴 속도")
+        @JsonProperty("ptrn_sped")
+        private Integer ptrnSped;
+
+        @ApiModelProperty("데이터 개수")
+        @JsonProperty("data_num")
+        private Integer dataNum;
+
+        @ApiModelProperty("소통 등급 코드 설명")
+        @JsonProperty("cmtr_grad_desc")
+        private String cmtrGradDesc;
+
+        @ApiModelProperty("순서")
+        @JsonProperty("rank")
+        private Integer rank;
+//
+//        @Builder
+//        public DetlTrafIfscInfo(String prcnDt, String cmtrGradCd, Integer sped, Integer trvlHh, Integer ptrnSped, Integer dataNum, String cmtrGradDesc, Integer rank) {
+//            this.prcnDt = prcnDt;
+//            this.cmtrGradCd = cmtrGradCd;
+//            this.sped = sped;
+//            this.trvlHh = trvlHh;
+//            this.ptrnSped = ptrnSped;
+//            this.dataNum = dataNum;
+//            this.cmtrGradDesc = cmtrGradDesc;
+//            this.rank = rank;
+//        }
+    }
+
+}

+ 138 - 0
src/main/java/com/its/api/its/model/dto/common/DetlTrafLinkDto.java

@@ -0,0 +1,138 @@
+package com.its.api.its.model.dto.common;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ *  DTO Class
+ */
+@Data
+@Builder
+@ApiModel("DetlTrafLinkDto(링크 소통정보 상세)")
+public class DetlTrafLinkDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("링크 ID")
+    @JsonProperty("link_id")
+    private Long linkId;
+
+    @ApiModelProperty("레벨")
+    @JsonProperty("levl")
+    private Integer levl;
+
+    @ApiModelProperty("구간 길이")
+    @JsonProperty("sect_lngt")
+    private Integer sectLngt;
+
+    @ApiModelProperty("시작 노드 ID")
+    @JsonProperty("f_node_id")
+    private Long   fNodeId;
+    @ApiModelProperty("시작 노드 명")
+    @JsonProperty("f_node_nm")
+    private String fNodeNm;
+
+    @ApiModelProperty("종료 노드 ID")
+    @JsonProperty("t_node_id")
+    private Long   tNodeId;
+    @ApiModelProperty("종료 노드 명")
+    @JsonProperty("t_node_nm")
+    private String tNodeNm;
+
+    @ApiModelProperty("도로명")  // Y VARCHAR(50)
+    @JsonProperty("road_name")
+    private String roadName;
+
+    @ApiModelProperty("현재소통정보")  // Y VARCHAR(50)
+    @JsonProperty("traf")
+    private DetlTrafLinkInfo traf;
+
+    @ApiModelProperty("소통정보이력(1시간이내)")  // Y VARCHAR(50)
+    @JsonProperty("traf_hs")
+    private List<DetlTrafLinkInfo> trafHs;
+
+    @ApiModel("DetlTrafLinkInfo(링크 소통정보 상세 정보)")
+    @Data
+    @ToString
+    @Builder
+    public static class DetlTrafLinkInfo {
+        @ApiModelProperty("가공 일시")  // Y VARCHAR(14)
+        @JsonProperty("prcn_dt")
+        private String prcnDt;
+
+        @ApiModelProperty("소통 등급 코드")  // Y VARCHAR(7)
+        @JsonProperty("cmtr_grad_cd")
+        private String cmtrGradCd;
+
+        @ApiModelProperty("속도")  // Y NUMBER(3)
+        @JsonProperty("sped")
+        private Integer sped;
+
+        @ApiModelProperty("통행 시간")  // Y NUMBER(6)
+        @JsonProperty("trvl_hh")
+        private Integer trvlHh;
+
+        @ApiModelProperty("결측 여부")  // Y CHAR(1)
+        @JsonProperty("miss_yn")
+        private String missYn;
+
+        @ApiModelProperty("가공 속도")  // Y NUMBER(3)
+        @JsonProperty("prcn_sped")
+        private Integer prcnSped;
+
+        @ApiModelProperty("평활화 속도")  // Y NUMBER(3)
+        @JsonProperty("smth_sped")
+        private Integer smthSped;
+
+        @ApiModelProperty("보정 속도")  // Y NUMBER(3)
+        @JsonProperty("adjs_sped")
+        private Integer adjsSped;
+
+        @ApiModelProperty("패턴 속도")
+        @JsonProperty("ptrn_sped")
+        private Integer ptrnSped;
+
+        @ApiModelProperty("데이터 개수")
+        @JsonProperty("data_num")
+        private Integer dataNum;
+
+        @ApiModelProperty("소통 등급 코드 설명")
+        @JsonProperty("cmtr_grad_desc")
+        private String cmtrGradDesc;
+
+        @ApiModelProperty("가공 소스 설명")
+        @JsonProperty("prcn_sorc_desc")
+        private String prcnSorcDesc;
+
+        @ApiModelProperty("보정 소스 설명")
+        @JsonProperty("adjs_sorc_desc")
+        private String adjsSorcDesc;
+
+        @ApiModelProperty("순서")
+        @JsonProperty("rank")
+        private Integer rank;
+
+//        @Builder
+//        public DetlTrafLinkInfo(String prcnDt, String cmtrGradCd, Integer sped, Integer trvlHh, String missYn, Integer prcnSped, Integer smthSped, Integer adjsSped, Integer ptrnSped, Integer dataNum, String cmtrGradDesc, String prcnSorcDesc, String adjsSorcDesc, Integer rank) {
+//            this.prcnDt = prcnDt;
+//            this.cmtrGradCd = cmtrGradCd;
+//            this.sped = sped;
+//            this.trvlHh = trvlHh;
+//            this.missYn = missYn;
+//            this.prcnSped = prcnSped;
+//            this.smthSped = smthSped;
+//            this.adjsSped = adjsSped;
+//            this.ptrnSped = ptrnSped;
+//            this.dataNum = dataNum;
+//            this.cmtrGradDesc = cmtrGradDesc;
+//            this.prcnSorcDesc = prcnSorcDesc;
+//            this.adjsSorcDesc = adjsSorcDesc;
+//            this.rank = rank;
+//        }
+    }
+
+}

+ 110 - 0
src/main/java/com/its/api/its/model/dto/common/DetlTrafRoadDto.java

@@ -0,0 +1,110 @@
+package com.its.api.its.model.dto.common;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Builder;
+import lombok.Data;
+import lombok.ToString;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ *  DTO Class
+ */
+@Data
+@Builder
+@ApiModel("DetlTrafRoadDto(도로 소통정보 상세)")
+public class DetlTrafRoadDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("도로 ID")
+    @JsonProperty("road_id")
+    private Long roadId;
+
+    @ApiModelProperty("레벨")
+    @JsonProperty("levl")
+    private Integer levl;
+
+    @ApiModelProperty("구간 길이")
+    @JsonProperty("sect_lngt")
+    private Integer sectLngt;
+
+    @ApiModelProperty("시작 노드 ID")
+    @JsonProperty("f_node_id")
+    private Long   fNodeId;
+    @ApiModelProperty("시작 노드 명")
+    @JsonProperty("f_node_nm")
+    private String fNodeNm;
+
+    @ApiModelProperty("종료 노드 ID")
+    @JsonProperty("t_node_id")
+    private Long   tNodeId;
+    @ApiModelProperty("종료 노드 명")
+    @JsonProperty("t_node_nm")
+    private String tNodeNm;
+
+    @ApiModelProperty("도로명")  // Y VARCHAR(50)
+    @JsonProperty("road_name")
+    private String roadName;
+
+    @ApiModelProperty("현재소통정보")  // Y VARCHAR(50)
+    @JsonProperty("traf")
+    private DetlTrafRoadInfo traf;
+
+    @ApiModelProperty("소통정보이력(1시간이내)")  // Y VARCHAR(50)
+    @JsonProperty("traf_hs")
+    private List<DetlTrafRoadInfo> trafHs;
+
+    @ApiModel("DetlTrafRoadInfo(도로 소통정보 상세 정보)")
+    @Data
+    @ToString
+    @Builder
+    public static class DetlTrafRoadInfo {
+        @ApiModelProperty("가공 일시")  // Y VARCHAR(14)
+        @JsonProperty("prcn_dt")
+        private String prcnDt;
+
+        @ApiModelProperty("소통 등급 코드")  // Y VARCHAR(7)
+        @JsonProperty("cmtr_grad_cd")
+        private String cmtrGradCd;
+
+        @ApiModelProperty("속도")  // Y NUMBER(3)
+        @JsonProperty("sped")
+        private Integer sped;
+
+        @ApiModelProperty("통행 시간")  // Y NUMBER(6)
+        @JsonProperty("trvl_hh")
+        private Integer trvlHh;
+
+        @ApiModelProperty("패턴 속도")
+        @JsonProperty("ptrn_sped")
+        private Integer ptrnSped;
+
+        @ApiModelProperty("데이터 개수")
+        @JsonProperty("data_num")
+        private Integer dataNum;
+
+        @ApiModelProperty("소통 등급 코드 설명")
+        @JsonProperty("cmtr_grad_desc")
+        private String cmtrGradDesc;
+
+        @ApiModelProperty("순서")
+        @JsonProperty("rank")
+        private Integer rank;
+//
+//        @Builder
+//        public DetlTrafRoadInfo(String prcnDt, String cmtrGradCd, Integer sped, Integer trvlHh, Integer ptrnSped, Integer dataNum, String cmtrGradDesc, Integer rank) {
+//            this.prcnDt = prcnDt;
+//            this.cmtrGradCd = cmtrGradCd;
+//            this.sped = sped;
+//            this.trvlHh = trvlHh;
+//            this.ptrnSped = ptrnSped;
+//            this.dataNum = dataNum;
+//            this.cmtrGradDesc = cmtrGradDesc;
+//            this.rank = rank;
+//        }
+    }
+
+}

+ 43 - 0
src/main/java/com/its/api/its/model/dto/vms/TbVmsDsplPrstDto.java

@@ -44,6 +44,30 @@ public class TbVmsDsplPrstDto implements Serializable {
     @JsonProperty("vms_hght")
     private Integer vmsHght;
 
+    @ApiModelProperty("가로갯수")
+    @JsonProperty("rows")
+    private Integer rows;
+
+    @ApiModelProperty("세로갯수")
+    @JsonProperty("cols")
+    private Integer cols;
+
+    @ApiModelProperty("모듈 가로갯수")
+    @JsonProperty("modl_rows")
+    private Integer modlRows;
+
+    @ApiModelProperty("모듈 세로갯수")
+    @JsonProperty("modl_cols")
+    private Integer modlCols;
+
+    @ApiModelProperty("전원 가로갯수")
+    @JsonProperty("powr_rows")
+    private Integer powrRows;
+
+    @ApiModelProperty("전원 세로갯수")
+    @JsonProperty("powr_cols")
+    private Integer powrCols;
+
     @ApiModelProperty("운영모드")
     @JsonProperty("oper_mode")
     private String operMode;
@@ -97,6 +121,25 @@ public class TbVmsDsplPrstDto implements Serializable {
     @JsonProperty("brgh_val")
     private Integer brghVal;
 
+    @ApiModelProperty("VMS 용도 유형 코드")  // Y VARCHAR(7)
+    @JsonProperty("vms_usag_type_cd")
+    private String vmsUsagTypeCd;
+
+    @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 용도 유형 코드 설명")
+    @JsonProperty("vms_usag_type_desc")
+    private String vmsUsagTypeDesc;
+
+    @ApiModelProperty("VMS 유형 코드 설명")
+    @JsonProperty("vms_type_desc")
+    private String vmsTypeDesc;
 
     // 표출메시지 목록
     @ApiModelProperty("VMS 표출메시지 목록")

+ 32 - 0
src/main/java/com/its/api/its/model/dto/vms/TbVmsSttsDto.java

@@ -74,6 +74,38 @@ public class TbVmsSttsDto implements Serializable {
     @JsonProperty("vms_nm")
     private String vmsNm;
 
+    @ApiModelProperty("VMS 너비")  // Y NUMBER(4)
+    @JsonProperty("vms_wdth")
+    private Integer vmsWdth;
+
+    @ApiModelProperty("VMS 높이")  // Y NUMBER(4)
+    @JsonProperty("vms_hght")
+    private Integer vmsHght;
+
+    @ApiModelProperty("가로갯수")
+    @JsonProperty("rows")
+    private Integer rows;
+
+    @ApiModelProperty("세로갯수")
+    @JsonProperty("cols")
+    private Integer cols;
+
+    @ApiModelProperty("모듈 가로갯수")
+    @JsonProperty("modl_rows")
+    private Integer modlRows;
+
+    @ApiModelProperty("모듈 세로갯수")
+    @JsonProperty("modl_cols")
+    private Integer modlCols;
+
+    @ApiModelProperty("전원 가로갯수")
+    @JsonProperty("powr_rows")
+    private Integer powrRows;
+
+    @ApiModelProperty("전원 세로갯수")
+    @JsonProperty("powr_cols")
+    private Integer powrCols;
+
     @ApiModelProperty("통신 상태 코드 설명")
     @JsonProperty("cmnc_stts_desc")
     private String cmncSttsDesc;

+ 8 - 0
src/main/java/com/its/api/its/model/entity/vms/TbVmsCtlr.java

@@ -327,6 +327,14 @@ public class TbVmsCtlr implements Serializable {
         }
         if (this.type != null) {
             dto.setVmsTypeDesc(this.type.getVmsTypeNm());
+            dto.setVmsWdth(this.type.getVmsWdth());
+            dto.setVmsHght(this.type.getVmsHght());
+            dto.setRows(this.type.getRowNum());
+            dto.setCols(this.type.getColNum());
+            dto.setModlRows(this.type.getModlRowNum());
+            dto.setModlCols(this.type.getModlColNum());
+            dto.setPowrRows(this.type.getPowrRowNum());
+            dto.setPowrCols(this.type.getPowrColNum());
         }
 
         if (this.state != null) {

+ 13 - 0
src/main/java/com/its/api/its/model/entity/vms/TbVmsDsplPrst.java

@@ -138,10 +138,23 @@ public class TbVmsDsplPrst implements Serializable {
 
             dto.setVmsCtlrId(this.vms.getVmsCtlrId());
             dto.setVmsNm(this.vms.getVmsNm());
+            dto.setVmsUsagTypeCd(this.vms.getVmsUsagTypeCd());
+            dto.setVmsModlTypeCd(this.vms.getVmsModlTypeCd());
+            dto.setVmsTypeCd(this.vms.getVmsTypeCd());
 
+            if (this.vms.getUsagType() != null) {
+                dto.setVmsUsagTypeDesc(this.vms.getUsagType().getVmsUsagTypeNm());
+            }
             if (this.vms.getType() != null) {
+                dto.setVmsTypeDesc(this.vms.getType().getVmsTypeNm());
                 dto.setVmsWdth(this.vms.getType().getVmsWdth());
                 dto.setVmsHght(this.vms.getType().getVmsHght());
+                dto.setRows(this.vms.getType().getRowNum());
+                dto.setCols(this.vms.getType().getColNum());
+                dto.setModlRows(this.vms.getType().getModlRowNum());
+                dto.setModlCols(this.vms.getType().getModlColNum());
+                dto.setPowrRows(this.vms.getType().getPowrRowNum());
+                dto.setPowrCols(this.vms.getType().getPowrColNum());
             }
         }
         return dto;

+ 13 - 1
src/main/java/com/its/api/its/repository/common/CommonMapper.java

@@ -1,13 +1,25 @@
 package com.its.api.its.repository.common;
 
 import com.its.api.its.model.dto.common.CongestTrafficDto;
-import com.its.api.its.model.dto.common.WeatherInfoDto;
+import com.its.api.its.model.dto.common.DetlTrafIfscDto;
+import com.its.api.its.model.dto.common.DetlTrafLinkDto;
+import com.its.api.its.model.dto.common.DetlTrafRoadDto;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.List;
+import java.util.Map;
 
 @Mapper
 public interface CommonMapper {
     List<CongestTrafficDto> findAllCongestTraffic();
     //List<WeatherInfoDto> findAllWeatherInfo();
+
+    DetlTrafLinkDto.DetlTrafLinkInfo findAllDetlTrafLink(Map<String, Long> param);
+    DetlTrafIfscDto.DetlTrafIfscInfo findAllDetlTrafIfsc(Map<String, Long> param);
+    DetlTrafRoadDto.DetlTrafRoadInfo findAllDetlTrafRoad(Map<String, Long> param);
+
+    List<DetlTrafLinkDto.DetlTrafLinkInfo> findAllDetlTrafLinkHs(Map<String, Long> param);
+    List<DetlTrafIfscDto.DetlTrafIfscInfo> findAllDetlTrafIfscHs(Map<String, Long> param);
+    List<DetlTrafRoadDto.DetlTrafRoadInfo> findAllDetlTrafRoadHs(Map<String, Long> param);
+
 }

+ 120 - 0
src/main/java/com/its/api/its/service/common/CommonService.java

@@ -1,12 +1,24 @@
 package com.its.api.its.service.common;
 
 import com.its.api.its.model.dto.common.CongestTrafficDto;
+import com.its.api.its.model.dto.common.DetlTrafIfscDto;
+import com.its.api.its.model.dto.common.DetlTrafLinkDto;
+import com.its.api.its.model.dto.common.DetlTrafRoadDto;
+import com.its.api.its.model.dto.ifsc.TbIfscDto;
+import com.its.api.its.model.dto.link.TbLinkDto;
+import com.its.api.its.model.dto.road.TbRoadDto;
 import com.its.api.its.repository.common.CommonMapper;
+import com.its.api.its.service.ifsc.TbIfscService;
+import com.its.api.its.service.link.TbLinkService;
+import com.its.api.its.service.road.TbRoadService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 @Slf4j
 @RequiredArgsConstructor
@@ -14,6 +26,9 @@ import java.util.List;
 public class CommonService {
 
     private final CommonMapper repo;
+    private final TbLinkService linkService;
+    private final TbIfscService ifscService;
+    private final TbRoadService roadService;
 
     /**
      * 지정체구간 소통정보 조회
@@ -24,6 +39,111 @@ public class CommonService {
         return result;
     }
 
+    /**
+     * 링크 소통정보 상세 조회
+     * @param linkId
+     * @return
+     */
+    public DetlTrafLinkDto findAllDetailTrafficLink(Long linkId) {
+        TbLinkDto dto = this.linkService.findById(linkId);
+        DetlTrafLinkDto result = DetlTrafLinkDto.builder()
+                .linkId(linkId)
+                .levl(1)
+                .sectLngt(dto.getLinkLeng())
+                .fNodeId(dto.getFNodeId())
+                .fNodeNm(dto.getFromNodeInfo())
+                .tNodeId(dto.getTNodeId())
+                .tNodeNm(dto.getToNodeInfo())
+                .roadName(dto.getRoadName())
+                //.traf(new DetlTrafLinkDto.DetlTrafLinkInfo())
+                .trafHs(new ArrayList<>())
+                .build();
+
+        Map<String, Long> param = new HashMap<>();
+        param.put("ID", linkId);
+        DetlTrafLinkDto.DetlTrafLinkInfo traf = this.repo.findAllDetlTrafLink(param);
+        if (traf != null) {
+            result.setTraf(traf);
+        } else {
+            result.setTraf(DetlTrafLinkDto.DetlTrafLinkInfo.builder().build());
+        }
+
+        List<DetlTrafLinkDto.DetlTrafLinkInfo> trafHs = this.repo.findAllDetlTrafLinkHs(param);
+        result.setTrafHs(trafHs);
+
+        return result;
+    }
+
+    /**
+     * 정보제공구간 소통정보 상세 조회
+     * @param ifscId
+     * @return
+     */
+    public DetlTrafIfscDto findAllDetailTrafficIfsc(Long ifscId) {
+        TbIfscDto dto = this.ifscService.findById(ifscId);
+        DetlTrafIfscDto result = DetlTrafIfscDto.builder()
+                .ifscId(ifscId)
+                .levl(2)
+                .sectLngt(dto.getSectLngt())
+                .fNodeId(dto.getFNodeId())
+                .fNodeNm(dto.getFromNodeInfo())
+                .tNodeId(dto.getTNodeId())
+                .tNodeNm(dto.getToNodeInfo())
+                .roadName(dto.getIfscNm())
+                //.traf(new DetlTrafIfscDto.DetlTrafIfscInfo())
+                .trafHs(new ArrayList<>())
+                .build();
+
+        Map<String, Long> param = new HashMap<>();
+        param.put("ID", ifscId);
+        DetlTrafIfscDto.DetlTrafIfscInfo traf = this.repo.findAllDetlTrafIfsc(param);
+        if (traf != null) {
+            result.setTraf(traf);
+        } else {
+            result.setTraf(DetlTrafIfscDto.DetlTrafIfscInfo.builder().build());
+        }
+
+        List<DetlTrafIfscDto.DetlTrafIfscInfo> trafHs = this.repo.findAllDetlTrafIfscHs(param);
+        result.setTrafHs(trafHs);
+
+        return result;
+    }
+
+    /**
+     * 도로 소통정보 상세 조회
+     * @param roadId
+     * @return
+     */
+    public DetlTrafRoadDto findAllDetailTrafficRoad(Long roadId) {
+        TbRoadDto dto = this.roadService.findById(roadId);
+        DetlTrafRoadDto result = DetlTrafRoadDto.builder()
+                .roadId(roadId)
+                .levl(2)
+                .sectLngt(dto.getSectLngt())
+                .fNodeId(dto.getFNodeId())
+                .fNodeNm(dto.getFromNodeInfo())
+                .tNodeId(dto.getTNodeId())
+                .tNodeNm(dto.getToNodeInfo())
+                .roadName(dto.getRoadName())
+                //.traf(new DetlTrafRoadDto.DetlTrafRoadInfo())
+                .trafHs(new ArrayList<>())
+                .build();
+
+        Map<String, Long> param = new HashMap<>();
+        param.put("ID", roadId);
+        DetlTrafRoadDto.DetlTrafRoadInfo traf = this.repo.findAllDetlTrafRoad(param);
+        if (traf != null) {
+            result.setTraf(traf);
+        } else {
+            result.setTraf(DetlTrafRoadDto.DetlTrafRoadInfo.builder().build());
+        }
+
+        List<DetlTrafRoadDto.DetlTrafRoadInfo> trafHs = this.repo.findAllDetlTrafRoadHs(param);
+        result.setTrafHs(trafHs);
+
+        return result;
+    }
+
     /**
      * 기상정보 조회
      * @return

+ 17 - 22
src/main/resources/logback-spring.xml

@@ -2,15 +2,13 @@
 <configuration scan="true" scanPeriod="60 seconds">
     <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"/>
 
-<!--    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />-->
-<!--    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />-->
-<!--    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />-->
+    <property resource="logback.properties"/>
 
-    <property name="PROJECT_NAME"    value="its-op-server"/>
-    <property name="ROOT_LOG_LEVEL"  value="INFO"/>
-    <property name="LOG_CHARSET"     value="UTF-8" />
-    <property name="LOG_PATH"        value="${user.dir}/logs/"/>
-    <property name="LOG_BACKUP_PATH" value="${user.dir}/logs/backup/"/>
+    <property name="PROJECT_NAME"    value="${log.name}"/>
+    <property name="ROOT_LOG_LEVEL"  value="${log.level.root}"/>
+    <property name="LOG_CHARSET"     value="${log.charset}" />
+    <property name="LOG_PATH"        value="${log.path}"/>
+    <property name="LOG_BACKUP_PATH" value="${log.backup.path}"/>
 
     <property name="LOG_FILE_NAME"             value="${PROJECT_NAME}.log"/>
     <property name="LOG_FILE_NAME_ERROR"       value="${PROJECT_NAME}.err.log"/>
@@ -21,20 +19,17 @@
     <property name="LOG_FILE_NAME_SCHEDULE"    value="${PROJECT_NAME}-schedule.log"/>
     <property name="LOG_FILE_NAME_STATISTICS"  value="${PROJECT_NAME}-statistics.log"/>
 
-    <property name="MAX_FILESIZE" value="10MB"/>
-    <property name="MAX_HISTORY"  value="30"/>
-    <property name="LOG_PATTERN_FILE"        value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %msg%n"/>
-    <!--
-    <property name="LOG_PATTERN_ERROR"       value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %msg%n"/>
-    <property name="LOG_PATTERN_ERROR"       value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%30t] [%5level] %42logger{35}.%-20M ${PID:-} %n%msg%n"/>
-    -->
-    <property name="LOG_PATTERN_ERROR"       value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%30t] [%5level] %42logger{35}.%-20M ${PID:-} %n%msg%n"/>
-    <property name="LOG_PATTERN_SESSION"     value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %msg%n"/>
-    <property name="LOG_PATTERN_CENTER_COMM" value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %msg%n"/>
-    <property name="LOG_PATTERN_SQL"         value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %msg%n"/>
-    <property name="LOG_PATTERN_SCHEDULE"    value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %msg%n"/>
-    <property name="LOG_PATTERN_STATISTICS"  value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %msg%n"/>
-    <property name="LOG_PATTERN_CONSOLE"     value="[%d{HH:mm:ss.SSS}] %highlight([%5level]) %highlight(${PID:-}): %cyan(%msg) %n"/>
+    <property name="MAX_FILESIZE" value="${log.max.file-size}"/>
+    <property name="MAX_HISTORY"  value="${log.max.history}"/>
+
+    <property name="LOG_PATTERN_CONSOLE"     value="${log.pattern.console}"/>
+    <property name="LOG_PATTERN_FILE"        value="${log.pattern.file}"/>
+    <property name="LOG_PATTERN_ERROR"       value="${log.pattern.error}"/>
+    <property name="LOG_PATTERN_SESSION"     value="${log.pattern.session}"/>
+    <property name="LOG_PATTERN_CENTER_COMM" value="${log.pattern.center-comm}"/>
+    <property name="LOG_PATTERN_SQL"         value="${log.pattern.sql}"/>
+    <property name="LOG_PATTERN_SCHEDULE"    value="${log.pattern.schedule}"/>
+    <property name="LOG_PATTERN_STATISTICS"  value="${log.pattern.statistics}"/>
 
     <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
         <withJansi>true</withJansi>

+ 20 - 0
src/main/resources/logback.properties

@@ -0,0 +1,20 @@
+log.name = its-op-server
+log.charset = UTF-8
+log.level.root = INFO
+#log.path = c:/YONGIN/logs/
+#log.backup.path = c:/YONGIN/logs/backup/
+log.path = ${user.dir}/logs/
+log.backup.path = ${user.dir}/logs/backup/
+
+log.max.file-size = 10MB
+log.max.history = 30
+
+log.pattern.console     = [%d{yyyy-MM-dd HH:mm:ss.SSS}] %highlight([%5level]) %highlight(${PID:-}): %cyan(%msg) %n
+log.pattern.file        = [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %msg%n
+log.pattern.error       = [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%30t] [%5level] %42logger{35}.%-20M ${PID:-} %n%msg%n
+log.pattern.schedule    = [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %msg%n
+log.pattern.session     = [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %msg%n
+log.pattern.statistics  = [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %msg%n
+log.pattern.center-comm = [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %msg%n
+log.pattern.sql         = [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] %msg%n
+

+ 193 - 2
src/main/resources/mybatis/mapper/its/common/CommonMapper.xml

@@ -4,6 +4,7 @@
 <mapper namespace="com.its.api.its.repository.common.CommonMapper">
 
     <select id="findAllCongestTraffic" resultType="com.its.api.its.model.dto.common.CongestTrafficDto">
+<![CDATA[
         SELECT * FROM
             (SELECT
                  AA.IFSC_ID,
@@ -12,7 +13,7 @@
                  AA.STRT_NM,
                  AA.END_NM,
                  AA.CMMN_CD_KOR_NM,
-                 ROUND(AA.SECT_LNGT / 1000,2) SECT_LNGT,
+                 ROUND(AA.SECT_LNGT, 2) AS SECT_LNGT,
                  BB.ATRD_NM
              FROM
                  (
@@ -50,9 +51,199 @@
                  ON AA.IFSC_ID = BB.IFSC_ID
             )
         WHERE ATRD_NM IS NOT NULL
+        ]]>
     </select>
 
-<!--    <select id="findAllWeatherInfo" resultType="com.its.api.its.model.dto.common.WeatherInfoDto">-->
+    <select id="findAllDetlTrafLink" parameterType="java.util.HashMap" resultType="com.its.api.its.model.dto.common.DetlTrafLinkDto$DetlTrafLinkInfo">
+        <![CDATA[
+        SELECT *
+        FROM (SELECT A.PRCN_DT,
+                     A.CMTR_GRAD_CD,
+                     A.SPED,
+                     A.TRVL_HH,
+                     A.MISS_YN,
+                     A.PRCN_SPED,
+                     A.SMTH_SPED,
+                     A.ADJS_SPED,
+                     A.PTRN_SPED,
+                     A.DATA_NUM,
+                     DECODE(C.CMMN_CD, NULL, A.CMTR_GRAD_CD, C.CMMN_CD_KOR_NM) AS CMTR_GRAD_DESC,
+                     DECODE(B.CMMN_CD, NULL, A.PRCN_SORC, B.CMMN_CD_KOR_NM)    AS PRCN_SORC_DESC,
+                     DECODE(D.CMMN_CD, NULL, A.ADJS_SORC, D.CMMN_CD_KOR_NM)    AS ADJS_SORC_DESC,
+                     0                                                         AS RANK
+              FROM TB_LINK_TRAF A,
+                   (SELECT *
+                    FROM TB_CMMN_CD
+                    WHERE CMMN_CLSF_CD = 'CST'
+                       OR CMMN_CLSF_CD = 'MCS') B,
+                   (SELECT *
+                    FROM TB_CMMN_CD
+                    WHERE CMMN_CLSF_CD = 'CST'
+                       OR CMMN_CLSF_CD = 'MCS') D,
+                   (SELECT *
+                    FROM TB_CMMN_CD
+                    WHERE CMMN_CLSF_CD = 'LTC') C
+              WHERE LINK_ID = #{ID}
+                AND PRCN_DT >= TO_CHAR(SYSDATE - 5 / 1440, 'YYYYMMDDHH24MISS')
+                AND A.PRCN_SORC = B.CMMN_CD(+)
+                AND A.ADJS_SORC = D.CMMN_CD(+)
+                AND A.CMTR_GRAD_CD = C.CMMN_CD(+))
+        ]]>
+    </select>
+
+    <select id="findAllDetlTrafIfsc" parameterType="java.util.HashMap" resultType="com.its.api.its.model.dto.common.DetlTrafIfscDto$DetlTrafIfscInfo">
+        <![CDATA[
+        SELECT *
+        FROM (SELECT A.PRCN_DT,
+                     A.CMTR_GRAD_CD,
+                     A.SPED,
+                     A.TRVL_HH,
+                     A.PTRN_SPED,
+                     A.DATA_NUM,
+                     C.CMMN_CD_KOR_NM AS CMTR_GRAD_DESC,
+                     0                AS RANK
+              FROM TB_IFSC_TRAF A,
+                   (SELECT *
+                    FROM TB_CMMN_CD
+                    WHERE CMMN_CLSF_CD = 'LTC') C
+              WHERE IFSC_ID = #{ID}
+                AND PRCN_DT >= TO_CHAR(SYSDATE - 5 / 1440, 'YYYYMMDDHH24MISS')
+                AND A.CMTR_GRAD_CD = C.CMMN_CD(+))
+        ]]>
+    </select>
+
+    <select id="findAllDetlTrafRoad" parameterType="java.util.HashMap" resultType="com.its.api.its.model.dto.common.DetlTrafRoadDto$DetlTrafRoadInfo">
+        <![CDATA[
+        SELECT *
+        FROM (SELECT A.PRCN_DT,
+                     A.CMTR_GRAD_CD,
+                     A.SPED,
+                     A.TRVL_HH,
+                     A.PTRN_SPED,
+                     A.DATA_NUM,
+                     C.CMMN_CD_KOR_NM AS CMTR_GRAD_DESC,
+                     0                AS RANK
+              FROM TB_ROAD_TRAF A,
+                   (SELECT *
+                    FROM TB_CMMN_CD
+                    WHERE CMMN_CLSF_CD = 'LTC') C
+              WHERE ROAD_ID = #{ID}
+                AND PRCN_DT > TO_CHAR(SYSDATE - 5 / 1440, 'YYYYMMDDHH24MISS')
+                AND A.CMTR_GRAD_CD = C.CMMN_CD(+))
+        ]]>
+    </select>
+
+    <select id="findAllDetlTrafLinkHs" parameterType="java.util.HashMap" resultType="com.its.api.its.model.dto.common.DetlTrafLinkDto$DetlTrafLinkInfo">
+        <![CDATA[
+        SELECT *
+        FROM (SELECT A.PRCN_DT,
+                     A.CMTR_GRAD_CD,
+                     A.SPED,
+                     A.TRVL_HH,
+                     A.MISS_YN,
+                     A.PRCN_SPED,
+                     A.SMTH_SPED,
+                     A.ADJS_SPED,
+                     A.PTRN_SPED,
+                     A.DATA_NUM,
+                     DECODE(C.CMMN_CD, NULL, A.CMTR_GRAD_CD, C.CMMN_CD_KOR_NM) AS CMTR_GRAD_DESC,
+                     DECODE(B.CMMN_CD, NULL, A.PRCN_SORC, B.CMMN_CD_KOR_NM)    AS PRCN_SORC_DESC,
+                     DECODE(D.CMMN_CD, NULL, A.ADJS_SORC, D.CMMN_CD_KOR_NM)    AS ADJS_SORC_DESC,
+                     A.RANK
+              FROM (SELECT RANK() OVER ( PARTITION BY LINK_ID ORDER BY LINK_ID, PRCN_DT DESC) AS RANK,
+                           PRCN_DT,
+                           MISS_YN,
+                           PRCN_SORC,
+                           ADJS_SORC,
+                           SPED,
+                           TRVL_HH,
+                           CMTR_GRAD_CD,
+                           PRCN_SPED,
+                           SMTH_SPED,
+                           ADJS_SPED,
+                           PTRN_SPED,
+                           DATA_NUM
+                    FROM TB_LINK_TRAF_HS
+                    WHERE LINK_ID = #{ID}
+                      AND PRCN_DT > TO_CHAR(SYSDATE - 1 / 24, 'YYYYMMDDHH24MISS')) A,
+                   (SELECT *
+                    FROM TB_CMMN_CD
+                    WHERE CMMN_CLSF_CD = 'CST'
+                       OR CMMN_CLSF_CD = 'MCS') B,
+                   (SELECT *
+                    FROM TB_CMMN_CD
+                    WHERE CMMN_CLSF_CD = 'CST'
+                       OR CMMN_CLSF_CD = 'MCS') D,
+                   (SELECT *
+                    FROM TB_CMMN_CD
+                    WHERE CMMN_CLSF_CD = 'LTC') C
+              WHERE RANK <= 12
+                AND A.PRCN_SORC = B.CMMN_CD(+)
+                AND A.ADJS_SORC = D.CMMN_CD(+)
+                AND A.CMTR_GRAD_CD = C.CMMN_CD(+)
+              ORDER BY RANK)
+        ]]>
+    </select>
+    <select id="findAllDetlTrafIfscHs" parameterType="java.util.HashMap" resultType="com.its.api.its.model.dto.common.DetlTrafIfscDto$DetlTrafIfscInfo">
+        <![CDATA[
+        SELECT *
+        FROM (SELECT A.PRCN_DT,
+                     A.CMTR_GRAD_CD,
+                     A.SPED,
+                     A.TRVL_HH,
+                     A.PTRN_SPED,
+                     A.DATA_NUM,
+                     C.CMMN_CD_KOR_NM AS CMTR_GRAD_DESC,
+                     A.RANK
+              FROM (SELECT RANK() OVER ( PARTITION BY IFSC_ID ORDER BY IFSC_ID, PRCN_DT DESC) AS RANK,
+                           PRCN_DT,
+                           SPED,
+                           TRVL_HH,
+                           CMTR_GRAD_CD,
+                           PTRN_SPED,
+                           DATA_NUM
+                    FROM TB_IFSC_TRAF_HS
+                    WHERE IFSC_ID = #{ID}
+                      AND PRCN_DT > TO_CHAR(SYSDATE - 1 / 24, 'YYYYMMDDHH24MISS')) A,
+                   (SELECT *
+                    FROM TB_CMMN_CD
+                    WHERE CMMN_CLSF_CD = 'LTC') C
+              WHERE RANK <= 12
+                AND A.CMTR_GRAD_CD = C.CMMN_CD(+)
+              ORDER BY RANK)
+        ]]>
+    </select>
+    <select id="findAllDetlTrafRoadHs" parameterType="java.util.HashMap" resultType="com.its.api.its.model.dto.common.DetlTrafRoadDto$DetlTrafRoadInfo">
+        <![CDATA[
+        SELECT *
+        FROM (SELECT A.PRCN_DT,
+                     A.CMTR_GRAD_CD,
+                     A.SPED,
+                     A.TRVL_HH,
+                     A.PTRN_SPED,
+                     A.DATA_NUM,
+                     C.CMMN_CD_KOR_NM AS CMTR_GRAD_DESC,
+                     A.RANK
+              FROM (SELECT RANK() OVER ( PARTITION BY ROAD_ID ORDER BY ROAD_ID, PRCN_DT DESC) RANK,
+                           PRCN_DT,
+                           SPED,
+                           TRVL_HH,
+                           CMTR_GRAD_CD,
+                           PTRN_SPED,
+                           DATA_NUM
+                    FROM TB_ROAD_TRAF_HS
+                    WHERE ROAD_ID = #{ID}
+                      AND PRCN_DT > TO_CHAR(SYSDATE - 1 / 24, 'YYYYMMDDHH24MISS')) A,
+                   (SELECT *
+                    FROM TB_CMMN_CD
+                    WHERE CMMN_CLSF_CD = 'LTC') C
+              WHERE RANK <= 12
+                AND A.CMTR_GRAD_CD = C.CMMN_CD(+)
+              ORDER BY RANK)
+        ]]>
+    </select>
+
+    <!--    <select id="findAllWeatherInfo" resultType="com.its.api.its.model.dto.common.WeatherInfoDto">-->
 <!--        SELECT * FROM-->
 <!--            (SELECT-->
 <!--                 ANNOUNCEDATE,-->