shjung 3 years ago
parent
commit
d229892a67
28 changed files with 1448 additions and 78 deletions
  1. 7 0
      src/main/java/com/its/api/op/controller/history/TrafHistoryController.java
  2. 2 2
      src/main/java/com/its/api/op/controller/traffic/CurrentTrafficController.java
  3. 40 0
      src/main/java/com/its/api/op/controller/traffic/TbIfscTrafController.java
  4. 40 0
      src/main/java/com/its/api/op/controller/traffic/TbLinkTrafController.java
  5. 40 0
      src/main/java/com/its/api/op/controller/traffic/TbRoadTrafController.java
  6. 40 0
      src/main/java/com/its/api/op/controller/traffic/TbVmsCmtrInfrController.java
  7. 145 0
      src/main/java/com/its/api/op/model/dto/traffic/TbIfscTrafDto.java
  8. 217 0
      src/main/java/com/its/api/op/model/dto/traffic/TbLinkTrafDto.java
  9. 145 0
      src/main/java/com/its/api/op/model/dto/traffic/TbRoadTrafDto.java
  10. 102 0
      src/main/java/com/its/api/op/model/dto/traffic/TbVmsCmtrInfrDto.java
  11. 1 1
      src/main/java/com/its/api/op/model/entity/database/TbLink.java
  12. 1 1
      src/main/java/com/its/api/op/model/entity/database/TbRoad.java
  13. 100 0
      src/main/java/com/its/api/op/model/entity/traffic/TbIfscTraf.java
  14. 136 0
      src/main/java/com/its/api/op/model/entity/traffic/TbLinkTraf.java
  15. 100 0
      src/main/java/com/its/api/op/model/entity/traffic/TbRoadTraf.java
  16. 71 0
      src/main/java/com/its/api/op/model/entity/traffic/TbVmsCmtrInfr.java
  17. 0 16
      src/main/java/com/its/api/op/model/vo/history/TbLinkTrafClctHsParam.java
  18. 0 19
      src/main/java/com/its/api/op/model/vo/history/TbLinkTrafClctHsVo.java
  19. 0 23
      src/main/java/com/its/api/op/model/vo/history/TbRoadTrafHsVo.java
  20. 0 16
      src/main/java/com/its/api/op/model/vo/history/TrafHsParam.java
  21. 22 0
      src/main/java/com/its/api/op/repository/traffic/TbIfscTrafRepository.java
  22. 22 0
      src/main/java/com/its/api/op/repository/traffic/TbLinkTrafRepository.java
  23. 22 0
      src/main/java/com/its/api/op/repository/traffic/TbRoadTrafRepository.java
  24. 11 0
      src/main/java/com/its/api/op/repository/traffic/TbVmsCmtrInfrRepository.java
  25. 46 0
      src/main/java/com/its/api/op/service/traffic/TbIfscTrafService.java
  26. 46 0
      src/main/java/com/its/api/op/service/traffic/TbLinkTrafService.java
  27. 46 0
      src/main/java/com/its/api/op/service/traffic/TbRoadTrafService.java
  28. 46 0
      src/main/java/com/its/api/op/service/traffic/TbVmsCmtrInfrService.java

+ 7 - 0
src/main/java/com/its/api/op/controller/history/TrafHistoryController.java

@@ -2,6 +2,7 @@ package com.its.api.op.controller.history;
 
 import com.its.api.op.model.dto.database.TbIfscDto;
 import com.its.api.op.model.dto.database.TbLinkDto;
+import com.its.api.op.model.dto.database.TbRoadDto;
 import com.its.api.op.model.dto.history.TbIfscTrafHsDto;
 import com.its.api.op.model.dto.history.TbLinkTrafHsDto;
 import com.its.api.op.model.dto.history.TbRoadTrafHsDto;
@@ -49,6 +50,12 @@ public class TrafHistoryController {
         return ifscService.findLocalAll();
     }
 
+    @ApiOperation(value = "도로 전체조회-지역센터(TB_ROAD)", response = TbRoadDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/road/local", produces = {"application/json; charset=utf8"})
+    public List<TbRoadDto> findRoadLocalAll() {
+        return roadService.findLocalAll();
+    }
+
     @ApiOperation(value = "링크이력조회(TB_LINK_TRAF_HS)", response = TbLinkTrafHsDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/link", produces = {"application/json; charset=utf8"})
     public List<TbLinkTrafHsDto> findLinkTrafHsAllByDateRange(

+ 2 - 2
src/main/java/com/its/api/op/controller/traffic/CurrentTrafficController.java

@@ -26,8 +26,8 @@ import java.util.List;
 @Slf4j
 @RequiredArgsConstructor
 @RestController
-@RequestMapping("/api/traffic/current")
-@Api(tags = "00.교통상황관리-1.현재소통정보조회")
+@RequestMapping("/api-old/traffic/current")
+@Api(tags = "00.교통상황관리-1.현재소통정보조회-OLD")
 public class CurrentTrafficController {
 
     private final LinkTrafService linkService;

+ 40 - 0
src/main/java/com/its/api/op/controller/traffic/TbIfscTrafController.java

@@ -0,0 +1,40 @@
+package com.its.api.op.controller.traffic;
+
+import com.its.api.op.model.dto.traffic.TbIfscTrafDto;
+import com.its.api.op.service.traffic.TbIfscTrafService;
+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;
+
+import java.util.List;
+
+@Api(tags = "00.교통상황관리-1.현재소통정보조회-정보제공구간")
+@Validated
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/api/traffic/current/ifsc")
+public class TbIfscTrafController {
+
+    private final TbIfscTrafService service;
+
+    @ApiOperation(value = "정보제공구간 소통상황 전체조회(TB_IFSC_TRAF)", response = TbIfscTrafDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "", produces = {"application/json; charset=utf8"})
+    public List<TbIfscTrafDto> findAll() {
+        return service.findAll();
+    }
+
+    @ApiOperation(value = "정보제공구간 소통상황 개별조회(TB_IFSC_TRAF)", response = TbIfscTrafDto.class)
+    @GetMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public TbIfscTrafDto findById(
+            @ApiParam(name = "id", value = "정보제공구간 ID", example = "2200000248", required = true)
+            @PathVariable final Long id) {
+        return this.service.findById(id);
+    }
+
+}

+ 40 - 0
src/main/java/com/its/api/op/controller/traffic/TbLinkTrafController.java

@@ -0,0 +1,40 @@
+package com.its.api.op.controller.traffic;
+
+import com.its.api.op.model.dto.traffic.TbLinkTrafDto;
+import com.its.api.op.service.traffic.TbLinkTrafService;
+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;
+
+import java.util.List;
+
+@Api(tags = "00.교통상황관리-1.현재소통정보조회-링크")
+@Validated
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/api/traffic/current/link")
+public class TbLinkTrafController {
+
+    private final TbLinkTrafService service;
+
+    @ApiOperation(value = "링크 소통상황 전체조회(TB_LINK_TRAF)", response = TbLinkTrafDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "", produces = {"application/json; charset=utf8"})
+    public List<TbLinkTrafDto> findAll() {
+        return service.findAll();
+    }
+
+    @ApiOperation(value = "링크 소통상황 개별조회(TB_LINK_TRAF)", response = TbLinkTrafDto.class)
+    @GetMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public TbLinkTrafDto findById(
+            @ApiParam(name = "id", value = "링크 ID", example = "2280081600", required = true)
+            @PathVariable final Long id) {
+        return this.service.findById(id);
+    }
+
+}

+ 40 - 0
src/main/java/com/its/api/op/controller/traffic/TbRoadTrafController.java

@@ -0,0 +1,40 @@
+package com.its.api.op.controller.traffic;
+
+import com.its.api.op.model.dto.traffic.TbRoadTrafDto;
+import com.its.api.op.service.traffic.TbRoadTrafService;
+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;
+
+import java.util.List;
+
+@Api(tags = "00.교통상황관리-1.현재소통정보조회-도로")
+@Validated
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/api/traffic/current/road")
+public class TbRoadTrafController {
+
+    private final TbRoadTrafService service;
+
+    @ApiOperation(value = "도로 소통상황 전체조회(TB_ROAD_TRAF)", response = TbRoadTrafDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "", produces = {"application/json; charset=utf8"})
+    public List<TbRoadTrafDto> findAll() {
+        return service.findAll();
+    }
+
+    @ApiOperation(value = "도로 소통상황 개별조회(TB_ROAD_TRAF)", response = TbRoadTrafDto.class)
+    @GetMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public TbRoadTrafDto findById(
+            @ApiParam(name = "id", value = "도로 ID", example = "3200000011", required = true)
+            @PathVariable final Long id) {
+        return this.service.findById(id);
+    }
+
+}

+ 40 - 0
src/main/java/com/its/api/op/controller/traffic/TbVmsCmtrInfrController.java

@@ -0,0 +1,40 @@
+package com.its.api.op.controller.traffic;
+
+import com.its.api.op.model.dto.traffic.TbVmsCmtrInfrDto;
+import com.its.api.op.service.traffic.TbVmsCmtrInfrService;
+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;
+
+import java.util.List;
+
+@Api(tags = "00.교통상황관리-1.현재소통정보조회-VMS정보제공구간")
+@Validated
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/api/traffic/current/vms")
+public class TbVmsCmtrInfrController {
+
+    private final TbVmsCmtrInfrService service;
+
+    @ApiOperation(value = "VMS 소통정보 전체조회(TB_VMS_CMTRINFR)", response = TbVmsCmtrInfrDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "", produces = {"application/json; charset=utf8"})
+    public List<TbVmsCmtrInfrDto> findAll() {
+        return service.findAll();
+    }
+
+    @ApiOperation(value = "VMS 소통정보 개별조회(TB_VMS_CMTRINFR)", response = TbVmsCmtrInfrDto.class)
+    @GetMapping(value = "/{id}", produces = {"application/json; charset=utf8"})
+    public TbVmsCmtrInfrDto findById(
+            @ApiParam(name = "id", value = "VMS정보제공구간 ID", example = "1", required = true)
+            @PathVariable final Long id) {
+        return this.service.findById(id);
+    }
+
+}

+ 145 - 0
src/main/java/com/its/api/op/model/dto/traffic/TbIfscTrafDto.java

@@ -0,0 +1,145 @@
+package com.its.api.op.model.dto.traffic;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.its.api.op.model.entity.traffic.TbIfscTraf;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+
+import javax.validation.constraints.Positive;
+import javax.validation.constraints.Size;
+import java.io.Serializable;
+
+/**
+ * 정보제공구간 소통상황 DTO Class
+ */
+@Data
+@Builder
+@ApiModel("TbIfscTrafDto(정보제공구간 소통상황)")
+public class TbIfscTrafDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("정보제공구간 ID")  // N NUMBER(10)
+    @JsonProperty("ifsc_id")
+    private Long ifscId;
+
+    @ApiModelProperty("가공 일시")  // Y VARCHAR(14)
+    @JsonProperty("prcn_dt")
+    private String prcnDt;
+
+    @ApiModelProperty("교통량")  // Y NUMBER(6)
+    @JsonProperty("tfvl")
+    private Integer tfvl;
+
+    @ApiModelProperty("속도")  // Y NUMBER(3)
+    @JsonProperty("sped")
+    private Integer sped;
+
+    @ApiModelProperty("패턴 속도")  // Y NUMBER(3)
+    @JsonProperty("ptrn_sped")
+    private Integer ptrnSped;
+
+    @ApiModelProperty("점유 율")  // Y NUMBER(5,2)
+    @JsonProperty("ocpy_rate")
+    private Double ocpyRate;
+
+    @ApiModelProperty("통행 시간")  // Y NUMBER(6)
+    @JsonProperty("trvl_hh")
+    private Integer trvlHh;
+
+    @ApiModelProperty("소통 등급 코드")  // Y VARCHAR(7)
+    @JsonProperty("cmtr_grad_cd")
+    private String cmtrGradCd;
+
+    @ApiModelProperty("데이터 개수")  // Y NUMBER(3)
+    @JsonProperty("data_num")
+    private Integer dataNum;
+
+    // Code Description Field
+    @ApiModelProperty("소통 등급 코드 설명")
+    @JsonProperty("cmtr_grad_desc")    // CMTR_GRAD_CD
+    private String cmtrGradDesc;
+
+    @ApiModel("TbIfscTrafUpdReq(정보제공구간 소통상황 정보변경)")
+    @Getter
+    @Setter
+    @ToString
+    @NoArgsConstructor(access = AccessLevel.PROTECTED)
+    public static class TbIfscTrafUpdReq {
+
+        @ApiModelProperty("정보제공구간 ID, Nullable = N, NUMBER(10)")  // N NUMBER(10)
+        @JsonProperty("ifsc_id")
+        @Positive
+        private Long ifscId;
+
+        @ApiModelProperty("가공 일시, Nullable = Y, VARCHAR(14)")  // Y VARCHAR(14)
+        @JsonProperty("prcn_dt")
+        @Size(min=1, max=14)
+        private String prcnDt;
+
+        @ApiModelProperty("교통량, Nullable = Y, NUMBER(6)")  // Y NUMBER(6)
+        @JsonProperty("tfvl")
+        @Positive
+        private Integer tfvl;
+
+        @ApiModelProperty("속도, Nullable = Y, NUMBER(3)")  // Y NUMBER(3)
+        @JsonProperty("sped")
+        @Positive
+        private Integer sped;
+
+        @ApiModelProperty("패턴 속도, Nullable = Y, NUMBER(3)")  // Y NUMBER(3)
+        @JsonProperty("ptrn_sped")
+        @Positive
+        private Integer ptrnSped;
+
+        @ApiModelProperty("점유 율, , NUMBER(5,2)")  // Y NUMBER(5,2)
+        @JsonProperty("ocpy_rate")
+        private Double ocpyRate;
+
+        @ApiModelProperty("통행 시간, Nullable = Y, NUMBER(6)")  // Y NUMBER(6)
+        @JsonProperty("trvl_hh")
+        @Positive
+        private Integer trvlHh;
+
+        @ApiModelProperty("소통 등급 코드, Nullable = Y, VARCHAR(7)")  // Y VARCHAR(7)
+        @JsonProperty("cmtr_grad_cd")
+        @Size(min=1, max=7)
+        private String cmtrGradCd;
+
+        @ApiModelProperty("데이터 개수, Nullable = Y, NUMBER(3)")  // Y NUMBER(3)
+        @JsonProperty("data_num")
+        @Positive
+        private Integer dataNum;
+
+        @Builder
+        public TbIfscTrafUpdReq(Long ifsc_id, String prcn_dt, Integer tfvl, Integer sped, Integer ptrn_sped, Double ocpy_rate, Integer trvl_hh, String cmtr_grad_cd, Integer data_num) {
+            this.ifscId = ifsc_id;
+            this.prcnDt = prcn_dt;
+            this.tfvl = tfvl;
+            this.sped = sped;
+            this.ptrnSped = ptrn_sped;
+            this.ocpyRate = ocpy_rate;
+            this.trvlHh = trvl_hh;
+            this.cmtrGradCd = cmtr_grad_cd;
+            this.dataNum = data_num;
+        }
+
+        public TbIfscTraf toEntity() {
+            TbIfscTraf entity = TbIfscTraf.builder()
+                    .ifscId(this.ifscId)
+                    .prcnDt(this.prcnDt)
+                    .tfvl(this.tfvl)
+                    .sped(this.sped)
+                    .ptrnSped(this.ptrnSped)
+                    .ocpyRate(this.ocpyRate)
+                    .trvlHh(this.trvlHh)
+                    .cmtrGradCd(this.cmtrGradCd)
+                    .dataNum(this.dataNum)
+                    .build();
+
+            return entity;
+        }
+
+    }
+
+}

+ 217 - 0
src/main/java/com/its/api/op/model/dto/traffic/TbLinkTrafDto.java

@@ -0,0 +1,217 @@
+package com.its.api.op.model.dto.traffic;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.its.api.op.model.entity.traffic.TbLinkTraf;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+
+import javax.validation.constraints.Pattern;
+import javax.validation.constraints.Positive;
+import javax.validation.constraints.Size;
+import java.io.Serializable;
+
+/**
+ * 링크 소통상황 DTO Class
+ */
+@Data
+@Builder
+@ApiModel("TbLinkTrafDto(링크 소통상황)")
+public class TbLinkTrafDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("링크ID")  // N NUMBER(10)
+    @JsonProperty("link_id")
+    private Long linkId;
+
+    @ApiModelProperty("가공 일시")  // Y VARCHAR(14)
+    @JsonProperty("prcn_dt")
+    private String prcnDt;
+
+    @ApiModelProperty("교통량")  // Y NUMBER(6)
+    @JsonProperty("tfvl")
+    private Integer tfvl;
+
+    @ApiModelProperty("속도")  // Y NUMBER(3)
+    @JsonProperty("sped")
+    private Integer sped;
+
+    @ApiModelProperty("점유 율")  // Y NUMBER(5,2)
+    @JsonProperty("ocpy_rate")
+    private Double ocpyRate;
+
+    @ApiModelProperty("통행 시간")  // Y NUMBER(6)
+    @JsonProperty("trvl_hh")
+    private Integer trvlHh;
+
+    @ApiModelProperty("소통 등급 코드")  // Y VARCHAR(7)
+    @JsonProperty("cmtr_grad_cd")
+    private String cmtrGradCd;
+
+    @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("패턴 속도")  // Y NUMBER(3)
+    @JsonProperty("ptrn_sped")
+    private Integer ptrnSped;
+
+    @ApiModelProperty("가공 소스")  // Y VARCHAR(7)
+    @JsonProperty("prcn_sorc")
+    private String prcnSorc;
+
+    @ApiModelProperty("보정 소스")  // Y VARCHAR(7)
+    @JsonProperty("adjs_sorc")
+    private String adjsSorc;
+
+    @ApiModelProperty("데이터 개수")  // Y NUMBER(3)
+    @JsonProperty("data_num")
+    private Integer dataNum;
+
+    // Code Description Field
+    @ApiModelProperty("소통 등급 코드 설명")
+    @JsonProperty("cmtr_grad_desc")    // CMTR_GRAD_CD
+    private String cmtrGradDesc;
+
+    @ApiModelProperty("결측 여부 설명")
+    @JsonProperty("miss_desc")    // MISS_YN
+    private String missDesc;
+
+    @ApiModel("TbLinkTrafUpdReq(링크 소통상황 정보변경)")
+    @Getter
+    @Setter
+    @ToString
+    @NoArgsConstructor(access = AccessLevel.PROTECTED)
+    public static class TbLinkTrafUpdReq {
+
+        @ApiModelProperty("링크ID, Nullable = N, NUMBER(10)")  // N NUMBER(10)
+        @JsonProperty("link_id")
+        @Positive
+        private Long linkId;
+
+        @ApiModelProperty("가공 일시, Nullable = Y, VARCHAR(14)")  // Y VARCHAR(14)
+        @JsonProperty("prcn_dt")
+        @Size(min=1, max=14)
+        private String prcnDt;
+
+        @ApiModelProperty("교통량, Nullable = Y, NUMBER(6)")  // Y NUMBER(6)
+        @JsonProperty("tfvl")
+        @Positive
+        private Integer tfvl;
+
+        @ApiModelProperty("속도, Nullable = Y, NUMBER(3)")  // Y NUMBER(3)
+        @JsonProperty("sped")
+        @Positive
+        private Integer sped;
+
+        @ApiModelProperty("점유 율, , NUMBER(5,2)")  // Y NUMBER(5,2)
+        @JsonProperty("ocpy_rate")
+        private Double ocpyRate;
+
+        @ApiModelProperty("통행 시간, Nullable = Y, NUMBER(6)")  // Y NUMBER(6)
+        @JsonProperty("trvl_hh")
+        @Positive
+        private Integer trvlHh;
+
+        @ApiModelProperty("소통 등급 코드, Nullable = Y, VARCHAR(7)")  // Y VARCHAR(7)
+        @JsonProperty("cmtr_grad_cd")
+        @Size(min=1, max=7)
+        private String cmtrGradCd;
+
+        @ApiModelProperty("결측 여부, Nullable = Y, CHAR(1)")  // Y CHAR(1)
+        @JsonProperty("miss_yn")
+        @Size(min=1, max=1)
+        @Pattern(regexp = "[YN]")
+        private String missYn;
+
+        @ApiModelProperty("가공 속도, Nullable = Y, NUMBER(3)")  // Y NUMBER(3)
+        @JsonProperty("prcn_sped")
+        @Positive
+        private Integer prcnSped;
+
+        @ApiModelProperty("평활화 속도, Nullable = Y, NUMBER(3)")  // Y NUMBER(3)
+        @JsonProperty("smth_sped")
+        @Positive
+        private Integer smthSped;
+
+        @ApiModelProperty("보정 속도, Nullable = Y, NUMBER(3)")  // Y NUMBER(3)
+        @JsonProperty("adjs_sped")
+        @Positive
+        private Integer adjsSped;
+
+        @ApiModelProperty("패턴 속도, Nullable = Y, NUMBER(3)")  // Y NUMBER(3)
+        @JsonProperty("ptrn_sped")
+        @Positive
+        private Integer ptrnSped;
+
+        @ApiModelProperty("가공 소스, Nullable = Y, VARCHAR(7)")  // Y VARCHAR(7)
+        @JsonProperty("prcn_sorc")
+        @Size(min=1, max=7)
+        private String prcnSorc;
+
+        @ApiModelProperty("보정 소스, Nullable = Y, VARCHAR(7)")  // Y VARCHAR(7)
+        @JsonProperty("adjs_sorc")
+        @Size(min=1, max=7)
+        private String adjsSorc;
+
+        @ApiModelProperty("데이터 개수, Nullable = Y, NUMBER(3)")  // Y NUMBER(3)
+        @JsonProperty("data_num")
+        @Positive
+        private Integer dataNum;
+
+        @Builder
+        public TbLinkTrafUpdReq(Long link_id, String prcn_dt, Integer tfvl, Integer sped, Double ocpy_rate, Integer trvl_hh, String cmtr_grad_cd, String miss_yn, Integer prcn_sped, Integer smth_sped, Integer adjs_sped, Integer ptrn_sped, String prcn_sorc, String adjs_sorc, Integer data_num) {
+            this.linkId = link_id;
+            this.prcnDt = prcn_dt;
+            this.tfvl = tfvl;
+            this.sped = sped;
+            this.ocpyRate = ocpy_rate;
+            this.trvlHh = trvl_hh;
+            this.cmtrGradCd = cmtr_grad_cd;
+            this.missYn = miss_yn;
+            this.prcnSped = prcn_sped;
+            this.smthSped = smth_sped;
+            this.adjsSped = adjs_sped;
+            this.ptrnSped = ptrn_sped;
+            this.prcnSorc = prcn_sorc;
+            this.adjsSorc = adjs_sorc;
+            this.dataNum = data_num;
+        }
+
+        public TbLinkTraf toEntity() {
+            TbLinkTraf entity = TbLinkTraf.builder()
+                    .linkId(this.linkId)
+                    .prcnDt(this.prcnDt)
+                    .tfvl(this.tfvl)
+                    .sped(this.sped)
+                    .ocpyRate(this.ocpyRate)
+                    .trvlHh(this.trvlHh)
+                    .cmtrGradCd(this.cmtrGradCd)
+                    .missYn(this.missYn)
+                    .prcnSped(this.prcnSped)
+                    .smthSped(this.smthSped)
+                    .adjsSped(this.adjsSped)
+                    .ptrnSped(this.ptrnSped)
+                    .prcnSorc(this.prcnSorc)
+                    .adjsSorc(this.adjsSorc)
+                    .dataNum(this.dataNum)
+                    .build();
+
+            return entity;
+        }
+
+    }
+
+}

+ 145 - 0
src/main/java/com/its/api/op/model/dto/traffic/TbRoadTrafDto.java

@@ -0,0 +1,145 @@
+package com.its.api.op.model.dto.traffic;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.its.api.op.model.entity.traffic.TbRoadTraf;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+
+import javax.validation.constraints.Positive;
+import javax.validation.constraints.Size;
+import java.io.Serializable;
+
+/**
+ * 도로 소통상황 DTO Class
+ */
+@Data
+@Builder
+@ApiModel("TbRoadTrafDto(도로 소통상황)")
+public class TbRoadTrafDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("도로 ID")  // N NUMBER(10)
+    @JsonProperty("road_id")
+    private Long roadId;
+
+    @ApiModelProperty("가공 일시")  // Y VARCHAR(14)
+    @JsonProperty("prcn_dt")
+    private String prcnDt;
+
+    @ApiModelProperty("교통량")  // Y NUMBER(6)
+    @JsonProperty("tfvl")
+    private Integer tfvl;
+
+    @ApiModelProperty("속도")  // Y NUMBER(3)
+    @JsonProperty("sped")
+    private Integer sped;
+
+    @ApiModelProperty("패턴 속도")  // Y NUMBER(3)
+    @JsonProperty("ptrn_sped")
+    private Integer ptrnSped;
+
+    @ApiModelProperty("점유 율")  // Y NUMBER(5,2)
+    @JsonProperty("ocpy_rate")
+    private Double ocpyRate;
+
+    @ApiModelProperty("통행 시간")  // Y NUMBER(6)
+    @JsonProperty("trvl_hh")
+    private Integer trvlHh;
+
+    @ApiModelProperty("소통 등급 코드")  // Y VARCHAR(7)
+    @JsonProperty("cmtr_grad_cd")
+    private String cmtrGradCd;
+
+    @ApiModelProperty("데이터 개수")  // Y NUMBER(3)
+    @JsonProperty("data_num")
+    private Integer dataNum;
+
+    // Code Description Field
+    @ApiModelProperty("소통 등급 코드 설명")
+    @JsonProperty("cmtr_grad_desc")    // CMTR_GRAD_CD
+    private String cmtrGradDesc;
+
+    @ApiModel("TbRoadTrafUpdReq(도로 소통상황 정보변경)")
+    @Getter
+    @Setter
+    @ToString
+    @NoArgsConstructor(access = AccessLevel.PROTECTED)
+    public static class TbRoadTrafUpdReq {
+
+        @ApiModelProperty("도로 ID, Nullable = N, NUMBER(10)")  // N NUMBER(10)
+        @JsonProperty("road_id")
+        @Positive
+        private Long roadId;
+
+        @ApiModelProperty("가공 일시, Nullable = Y, VARCHAR(14)")  // Y VARCHAR(14)
+        @JsonProperty("prcn_dt")
+        @Size(min=1, max=14)
+        private String prcnDt;
+
+        @ApiModelProperty("교통량, Nullable = Y, NUMBER(6)")  // Y NUMBER(6)
+        @JsonProperty("tfvl")
+        @Positive
+        private Integer tfvl;
+
+        @ApiModelProperty("속도, Nullable = Y, NUMBER(3)")  // Y NUMBER(3)
+        @JsonProperty("sped")
+        @Positive
+        private Integer sped;
+
+        @ApiModelProperty("패턴 속도, Nullable = Y, NUMBER(3)")  // Y NUMBER(3)
+        @JsonProperty("ptrn_sped")
+        @Positive
+        private Integer ptrnSped;
+
+        @ApiModelProperty("점유 율, , NUMBER(5,2)")  // Y NUMBER(5,2)
+        @JsonProperty("ocpy_rate")
+        private Double ocpyRate;
+
+        @ApiModelProperty("통행 시간, Nullable = Y, NUMBER(6)")  // Y NUMBER(6)
+        @JsonProperty("trvl_hh")
+        @Positive
+        private Integer trvlHh;
+
+        @ApiModelProperty("소통 등급 코드, Nullable = Y, VARCHAR(7)")  // Y VARCHAR(7)
+        @JsonProperty("cmtr_grad_cd")
+        @Size(min=1, max=7)
+        private String cmtrGradCd;
+
+        @ApiModelProperty("데이터 개수, Nullable = Y, NUMBER(3)")  // Y NUMBER(3)
+        @JsonProperty("data_num")
+        @Positive
+        private Integer dataNum;
+
+        @Builder
+        public TbRoadTrafUpdReq(Long road_id, String prcn_dt, Integer tfvl, Integer sped, Integer ptrn_sped, Double ocpy_rate, Integer trvl_hh, String cmtr_grad_cd, Integer data_num) {
+            this.roadId = road_id;
+            this.prcnDt = prcn_dt;
+            this.tfvl = tfvl;
+            this.sped = sped;
+            this.ptrnSped = ptrn_sped;
+            this.ocpyRate = ocpy_rate;
+            this.trvlHh = trvl_hh;
+            this.cmtrGradCd = cmtr_grad_cd;
+            this.dataNum = data_num;
+        }
+
+        public TbRoadTraf toEntity() {
+            TbRoadTraf entity = TbRoadTraf.builder()
+                    .roadId(this.roadId)
+                    .prcnDt(this.prcnDt)
+                    .tfvl(this.tfvl)
+                    .sped(this.sped)
+                    .ptrnSped(this.ptrnSped)
+                    .ocpyRate(this.ocpyRate)
+                    .trvlHh(this.trvlHh)
+                    .cmtrGradCd(this.cmtrGradCd)
+                    .dataNum(this.dataNum)
+                    .build();
+
+            return entity;
+        }
+
+    }
+
+}

+ 102 - 0
src/main/java/com/its/api/op/model/dto/traffic/TbVmsCmtrInfrDto.java

@@ -0,0 +1,102 @@
+package com.its.api.op.model.dto.traffic;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.its.api.op.model.entity.traffic.TbVmsCmtrInfr;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+
+import javax.validation.constraints.Positive;
+import javax.validation.constraints.Size;
+import java.io.Serializable;
+
+/**
+ * VMS_소통정보 DTO Class
+ */
+@Data
+@Builder
+@ApiModel("TbVmsCmtrinfrDto(VMS_소통정보)")
+public class TbVmsCmtrInfrDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("VMS 정보제공구간 ID")  // N NUMBER(10)
+    @JsonProperty("vms_ifsc_id")
+    private Long vmsIfscId;
+
+    @ApiModelProperty("등록 일시")  // Y VARCHAR(14)
+    @JsonProperty("rgst_dt")
+    private String rgstDt;
+
+    @ApiModelProperty("속도")  // Y NUMBER(3)
+    @JsonProperty("sped")
+    private Integer sped;
+
+    @ApiModelProperty("소통 등급 코드")  // Y VARCHAR(7)
+    @JsonProperty("cmtr_grad_cd")
+    private String cmtrGradCd;
+
+    @ApiModelProperty("통행 시간")  // Y NUMBER(6)
+    @JsonProperty("trvl_hh")
+    private Integer trvlHh;
+
+    // Code Description Field
+    @ApiModelProperty("소통 등급 코드 설명")
+    @JsonProperty("cmtr_grad_desc")    // CMTR_GRAD_CD
+    private String cmtrGradDesc;
+
+    @ApiModel("TbVmsCmtrinfrUpdReq(VMS_소통정보 정보변경)")
+    @Getter
+    @Setter
+    @ToString
+    @NoArgsConstructor(access = AccessLevel.PROTECTED)
+    public static class TbVmsCmtrInfrUpdReq {
+
+        @ApiModelProperty("VMS 정보제공구간 ID, Nullable = N, NUMBER(10)")  // N NUMBER(10)
+        @JsonProperty("vms_ifsc_id")
+        @Positive
+        private Long vmsIfscId;
+
+        @ApiModelProperty("등록 일시, Nullable = Y, VARCHAR(14)")  // Y VARCHAR(14)
+        @JsonProperty("rgst_dt")
+        @Size(min=1, max=14)
+        private String rgstDt;
+
+        @ApiModelProperty("속도, Nullable = Y, NUMBER(3)")  // Y NUMBER(3)
+        @JsonProperty("sped")
+        @Positive
+        private Integer sped;
+
+        @ApiModelProperty("소통 등급 코드, Nullable = Y, VARCHAR(7)")  // Y VARCHAR(7)
+        @JsonProperty("cmtr_grad_cd")
+        @Size(min=1, max=7)
+        private String cmtrGradCd;
+
+        @ApiModelProperty("통행 시간, Nullable = Y, NUMBER(6)")  // Y NUMBER(6)
+        @JsonProperty("trvl_hh")
+        @Positive
+        private Integer trvlHh;
+
+        @Builder
+        public TbVmsCmtrInfrUpdReq(Long vms_ifsc_id, String rgst_dt, Integer sped, String cmtr_grad_cd, Integer trvl_hh) {
+            this.vmsIfscId = vms_ifsc_id;
+            this.rgstDt = rgst_dt;
+            this.sped = sped;
+            this.cmtrGradCd = cmtr_grad_cd;
+            this.trvlHh = trvl_hh;
+        }
+
+        public TbVmsCmtrInfr toEntity() {
+            TbVmsCmtrInfr entity = TbVmsCmtrInfr.builder()
+                    .vmsIfscId(this.vmsIfscId)
+                    .rgstDt(this.rgstDt)
+                    .sped(this.sped)
+                    .cmtrGradCd(this.cmtrGradCd)
+                    .trvlHh(this.trvlHh)
+                    .build();
+
+            return entity;
+        }
+
+    }
+
+}

+ 1 - 1
src/main/java/com/its/api/op/model/entity/database/TbLink.java

@@ -15,7 +15,7 @@ import java.io.Serializable;
  * 링크정보 Entity Class
  */
 @Getter
-@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@NoArgsConstructor
 @Builder
 @AllArgsConstructor
 @ApiModel("링크정보")

+ 1 - 1
src/main/java/com/its/api/op/model/entity/database/TbRoad.java

@@ -15,7 +15,7 @@ import java.io.Serializable;
  * 도로 Entity Class
  */
 @Getter
-@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@NoArgsConstructor
 @Builder
 @AllArgsConstructor
 @ApiModel("도로")

+ 100 - 0
src/main/java/com/its/api/op/model/entity/traffic/TbIfscTraf.java

@@ -0,0 +1,100 @@
+package com.its.api.op.model.entity.traffic;
+
+import com.its.api.op.model.dto.traffic.TbIfscTrafDto;
+import com.its.api.op.model.entity.database.TbIfsc;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+import org.hibernate.annotations.NotFound;
+import org.hibernate.annotations.NotFoundAction;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+/**
+ * 정보제공구간 소통상황 Entity Class
+ */
+@Getter
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@Builder
+@AllArgsConstructor
+@ApiModel("정보제공구간 소통상황")
+@Entity
+@Table(name = "TB_IFSC_TRAF")
+public class TbIfscTraf implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("정보제공구간 ID")  // N NUMBER(10)
+    @Id
+    @Column(name = "IFSC_ID", nullable = false, columnDefinition = "NUMBER", length = 10)
+    private Long ifscId;
+
+    @ApiModelProperty("가공 일시")  // Y VARCHAR(14)
+    @Column(name = "PRCN_DT", length = 14)
+    private String prcnDt;
+
+    @ApiModelProperty("교통량")  // Y NUMBER(6)
+    @Column(name = "TFVL", columnDefinition = "NUMBER", length = 6)
+    private Integer tfvl;
+
+    @ApiModelProperty("속도")  // Y NUMBER(3)
+    @Column(name = "SPED", columnDefinition = "NUMBER", length = 3)
+    private Integer sped;
+
+    @ApiModelProperty("패턴 속도")  // Y NUMBER(3)
+    @Column(name = "PTRN_SPED", columnDefinition = "NUMBER", length = 3)
+    private Integer ptrnSped;
+
+    @ApiModelProperty("점유 율")  // Y NUMBER(5,2)
+    @Column(name = "OCPY_RATE", columnDefinition = "NUMBER", length = 5, precision = 2)
+    private Double ocpyRate;
+
+    @ApiModelProperty("통행 시간")  // Y NUMBER(6)
+    @Column(name = "TRVL_HH", columnDefinition = "NUMBER", length = 6)
+    private Integer trvlHh;
+
+    @ApiModelProperty("소통 등급 코드")  // Y VARCHAR(7)
+    @Column(name = "CMTR_GRAD_CD", length = 7)
+    private String cmtrGradCd;
+
+    @ApiModelProperty("데이터 개수")  // Y NUMBER(3)
+    @Column(name = "DATA_NUM", columnDefinition = "NUMBER", length = 3)
+    private Integer dataNum;
+
+    @OneToOne
+    @JoinColumn(insertable=false, updatable=false, name="IFSC_ID", referencedColumnName = "IFSC_ID")
+    @NotFound(action = NotFoundAction.IGNORE)
+    private TbIfsc ifsc = new TbIfsc();
+
+    public TbIfscTrafDto toDto() {
+        TbIfscTrafDto dto = TbIfscTrafDto.builder()
+                .ifscId(this.ifscId)
+                .prcnDt(this.prcnDt)
+                .tfvl(this.tfvl)
+                .sped(this.sped)
+                .ptrnSped(this.ptrnSped)
+                .ocpyRate(this.ocpyRate)
+                .trvlHh(this.trvlHh)
+                .cmtrGradCd(this.cmtrGradCd)
+                .dataNum(this.dataNum)
+                .build();
+
+        return dto;
+    }
+
+    public TbIfscTraf(Long ifscId) {
+        this.ifscId = ifscId;
+    }
+
+    public void updateInfo(TbIfscTrafDto.TbIfscTrafUpdReq req) {
+        this.prcnDt = req.getPrcnDt();
+        this.tfvl = req.getTfvl();
+        this.sped = req.getSped();
+        this.ptrnSped = req.getPtrnSped();
+        this.ocpyRate = req.getOcpyRate();
+        this.trvlHh = req.getTrvlHh();
+        this.cmtrGradCd = req.getCmtrGradCd();
+        this.dataNum = req.getDataNum();
+    }
+
+}

+ 136 - 0
src/main/java/com/its/api/op/model/entity/traffic/TbLinkTraf.java

@@ -0,0 +1,136 @@
+package com.its.api.op.model.entity.traffic;
+
+import com.its.api.op.model.dto.traffic.TbLinkTrafDto;
+import com.its.api.op.model.entity.database.TbLink;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+import org.hibernate.annotations.NotFound;
+import org.hibernate.annotations.NotFoundAction;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+/**
+ * 링크 소통상황 Entity Class
+ */
+@Getter
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@Builder
+@AllArgsConstructor
+@ApiModel("링크 소통상황")
+@Entity
+@Table(name = "TB_LINK_TRAF")
+public class TbLinkTraf implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("링크ID")  // N NUMBER(10)
+    @Id
+    @Column(name = "LINK_ID", nullable = false, columnDefinition = "NUMBER", length = 10)
+    private Long linkId;
+
+    @ApiModelProperty("가공 일시")  // Y VARCHAR(14)
+    @Column(name = "PRCN_DT", length = 14)
+    private String prcnDt;
+
+    @ApiModelProperty("교통량")  // Y NUMBER(6)
+    @Column(name = "TFVL", columnDefinition = "NUMBER", length = 6)
+    private Integer tfvl;
+
+    @ApiModelProperty("속도")  // Y NUMBER(3)
+    @Column(name = "SPED", columnDefinition = "NUMBER", length = 3)
+    private Integer sped;
+
+    @ApiModelProperty("점유 율")  // Y NUMBER(5,2)
+    @Column(name = "OCPY_RATE", columnDefinition = "NUMBER", length = 5, precision = 2)
+    private Double ocpyRate;
+
+    @ApiModelProperty("통행 시간")  // Y NUMBER(6)
+    @Column(name = "TRVL_HH", columnDefinition = "NUMBER", length = 6)
+    private Integer trvlHh;
+
+    @ApiModelProperty("소통 등급 코드")  // Y VARCHAR(7)
+    @Column(name = "CMTR_GRAD_CD", length = 7)
+    private String cmtrGradCd;
+
+    @ApiModelProperty("결측 여부")  // Y CHAR(1)
+    @Column(name = "MISS_YN", columnDefinition = "CHAR", length = 1)
+    private String missYn;
+
+    @ApiModelProperty("가공 속도")  // Y NUMBER(3)
+    @Column(name = "PRCN_SPED", columnDefinition = "NUMBER", length = 3)
+    private Integer prcnSped;
+
+    @ApiModelProperty("평활화 속도")  // Y NUMBER(3)
+    @Column(name = "SMTH_SPED", columnDefinition = "NUMBER", length = 3)
+    private Integer smthSped;
+
+    @ApiModelProperty("보정 속도")  // Y NUMBER(3)
+    @Column(name = "ADJS_SPED", columnDefinition = "NUMBER", length = 3)
+    private Integer adjsSped;
+
+    @ApiModelProperty("패턴 속도")  // Y NUMBER(3)
+    @Column(name = "PTRN_SPED", columnDefinition = "NUMBER", length = 3)
+    private Integer ptrnSped;
+
+    @ApiModelProperty("가공 소스")  // Y VARCHAR(7)
+    @Column(name = "PRCN_SORC", length = 7)
+    private String prcnSorc;
+
+    @ApiModelProperty("보정 소스")  // Y VARCHAR(7)
+    @Column(name = "ADJS_SORC", length = 7)
+    private String adjsSorc;
+
+    @ApiModelProperty("데이터 개수")  // Y NUMBER(3)
+    @Column(name = "DATA_NUM", columnDefinition = "NUMBER", length = 3)
+    private Integer dataNum;
+
+    @OneToOne
+    @JoinColumn(insertable=false, updatable=false, name="LINK_ID", referencedColumnName = "LINK_ID")
+    @NotFound(action = NotFoundAction.IGNORE)
+    private TbLink link = new TbLink();
+
+    public TbLinkTrafDto toDto() {
+        TbLinkTrafDto dto = TbLinkTrafDto.builder()
+                .linkId(this.linkId)
+                .prcnDt(this.prcnDt)
+                .tfvl(this.tfvl)
+                .sped(this.sped)
+                .ocpyRate(this.ocpyRate)
+                .trvlHh(this.trvlHh)
+                .cmtrGradCd(this.cmtrGradCd)
+                .missYn(this.missYn)
+                .prcnSped(this.prcnSped)
+                .smthSped(this.smthSped)
+                .adjsSped(this.adjsSped)
+                .ptrnSped(this.ptrnSped)
+                .prcnSorc(this.prcnSorc)
+                .adjsSorc(this.adjsSorc)
+                .dataNum(this.dataNum)
+                .build();
+
+        return dto;
+    }
+
+    public TbLinkTraf(Long linkId) {
+        this.linkId = linkId;
+    }
+
+    public void updateInfo(TbLinkTrafDto.TbLinkTrafUpdReq req) {
+        this.prcnDt = req.getPrcnDt();
+        this.tfvl = req.getTfvl();
+        this.sped = req.getSped();
+        this.ocpyRate = req.getOcpyRate();
+        this.trvlHh = req.getTrvlHh();
+        this.cmtrGradCd = req.getCmtrGradCd();
+        this.missYn = req.getMissYn();
+        this.prcnSped = req.getPrcnSped();
+        this.smthSped = req.getSmthSped();
+        this.adjsSped = req.getAdjsSped();
+        this.ptrnSped = req.getPtrnSped();
+        this.prcnSorc = req.getPrcnSorc();
+        this.adjsSorc = req.getAdjsSorc();
+        this.dataNum = req.getDataNum();
+    }
+
+}

+ 100 - 0
src/main/java/com/its/api/op/model/entity/traffic/TbRoadTraf.java

@@ -0,0 +1,100 @@
+package com.its.api.op.model.entity.traffic;
+
+import com.its.api.op.model.dto.traffic.TbRoadTrafDto;
+import com.its.api.op.model.entity.database.TbRoad;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+import org.hibernate.annotations.NotFound;
+import org.hibernate.annotations.NotFoundAction;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+/**
+ * 도로 소통상황 Entity Class
+ */
+@Getter
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@Builder
+@AllArgsConstructor
+@ApiModel("도로 소통상황")
+@Entity
+@Table(name = "TB_ROAD_TRAF")
+public class TbRoadTraf implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("도로 ID")  // N NUMBER(10)
+    @Id
+    @Column(name = "ROAD_ID", nullable = false, columnDefinition = "NUMBER", length = 10)
+    private Long roadId;
+
+    @ApiModelProperty("가공 일시")  // Y VARCHAR(14)
+    @Column(name = "PRCN_DT", length = 14)
+    private String prcnDt;
+
+    @ApiModelProperty("교통량")  // Y NUMBER(6)
+    @Column(name = "TFVL", columnDefinition = "NUMBER", length = 6)
+    private Integer tfvl;
+
+    @ApiModelProperty("속도")  // Y NUMBER(3)
+    @Column(name = "SPED", columnDefinition = "NUMBER", length = 3)
+    private Integer sped;
+
+    @ApiModelProperty("패턴 속도")  // Y NUMBER(3)
+    @Column(name = "PTRN_SPED", columnDefinition = "NUMBER", length = 3)
+    private Integer ptrnSped;
+
+    @ApiModelProperty("점유 율")  // Y NUMBER(5,2)
+    @Column(name = "OCPY_RATE", columnDefinition = "NUMBER", length = 5, precision = 2)
+    private Double ocpyRate;
+
+    @ApiModelProperty("통행 시간")  // Y NUMBER(6)
+    @Column(name = "TRVL_HH", columnDefinition = "NUMBER", length = 6)
+    private Integer trvlHh;
+
+    @ApiModelProperty("소통 등급 코드")  // Y VARCHAR(7)
+    @Column(name = "CMTR_GRAD_CD", length = 7)
+    private String cmtrGradCd;
+
+    @ApiModelProperty("데이터 개수")  // Y NUMBER(3)
+    @Column(name = "DATA_NUM", columnDefinition = "NUMBER", length = 3)
+    private Integer dataNum;
+
+    @OneToOne
+    @JoinColumn(insertable=false, updatable=false, name="ROAD_ID", referencedColumnName = "ROAD_ID")
+    @NotFound(action = NotFoundAction.IGNORE)
+    private TbRoad road = new TbRoad();
+
+    public TbRoadTrafDto toDto() {
+        TbRoadTrafDto dto = TbRoadTrafDto.builder()
+                .roadId(this.roadId)
+                .prcnDt(this.prcnDt)
+                .tfvl(this.tfvl)
+                .sped(this.sped)
+                .ptrnSped(this.ptrnSped)
+                .ocpyRate(this.ocpyRate)
+                .trvlHh(this.trvlHh)
+                .cmtrGradCd(this.cmtrGradCd)
+                .dataNum(this.dataNum)
+                .build();
+
+        return dto;
+    }
+
+    public TbRoadTraf(Long roadId) {
+        this.roadId = roadId;
+    }
+
+    public void updateInfo(TbRoadTrafDto.TbRoadTrafUpdReq req) {
+        this.prcnDt = req.getPrcnDt();
+        this.tfvl = req.getTfvl();
+        this.sped = req.getSped();
+        this.ptrnSped = req.getPtrnSped();
+        this.ocpyRate = req.getOcpyRate();
+        this.trvlHh = req.getTrvlHh();
+        this.cmtrGradCd = req.getCmtrGradCd();
+        this.dataNum = req.getDataNum();
+    }
+
+}

+ 71 - 0
src/main/java/com/its/api/op/model/entity/traffic/TbVmsCmtrInfr.java

@@ -0,0 +1,71 @@
+package com.its.api.op.model.entity.traffic;
+
+import com.its.api.op.model.dto.traffic.TbVmsCmtrInfrDto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import java.io.Serializable;
+
+/**
+ * VMS_소통정보 Entity Class
+ */
+@Getter
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@Builder
+@AllArgsConstructor
+@ApiModel("VMS_소통정보")
+@Entity
+@Table(name = "TB_VMS_CMTRINFR")
+public class TbVmsCmtrInfr implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("VMS 정보제공구간 ID")  // N NUMBER(10)
+    @Id
+    @Column(name = "VMS_IFSC_ID", nullable = false, columnDefinition = "NUMBER", length = 10)
+    private Long vmsIfscId;
+
+    @ApiModelProperty("등록 일시")  // Y VARCHAR(14)
+    @Column(name = "RGST_DT", length = 14)
+    private String rgstDt;
+
+    @ApiModelProperty("속도")  // Y NUMBER(3)
+    @Column(name = "SPED", columnDefinition = "NUMBER", length = 3)
+    private Integer sped;
+
+    @ApiModelProperty("소통 등급 코드")  // Y VARCHAR(7)
+    @Column(name = "CMTR_GRAD_CD", length = 7)
+    private String cmtrGradCd;
+
+    @ApiModelProperty("통행 시간")  // Y NUMBER(6)
+    @Column(name = "TRVL_HH", columnDefinition = "NUMBER", length = 6)
+    private Integer trvlHh;
+
+    public TbVmsCmtrInfrDto toDto() {
+        TbVmsCmtrInfrDto dto = TbVmsCmtrInfrDto.builder()
+                .vmsIfscId(this.vmsIfscId)
+                .rgstDt(this.rgstDt)
+                .sped(this.sped)
+                .cmtrGradCd(this.cmtrGradCd)
+                .trvlHh(this.trvlHh)
+                .build();
+
+        return dto;
+    }
+
+    public TbVmsCmtrInfr(Long vmsIfscId) {
+        this.vmsIfscId = vmsIfscId;
+    }
+
+    public void updateInfo(TbVmsCmtrInfrDto.TbVmsCmtrInfrUpdReq req) {
+        this.rgstDt = req.getRgstDt();
+        this.sped = req.getSped();
+        this.cmtrGradCd = req.getCmtrGradCd();
+        this.trvlHh = req.getTrvlHh();
+    }
+
+}

+ 0 - 16
src/main/java/com/its/api/op/model/vo/history/TbLinkTrafClctHsParam.java

@@ -1,16 +0,0 @@
-package com.its.api.op.model.vo.history;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import lombok.Setter;
-import lombok.ToString;
-
-@Getter
-@Setter
-@ToString
-@AllArgsConstructor
-public class TbLinkTrafClctHsParam {
-    private String LINK_ID;
-    private String FROM_DT;
-    private String TO_DT;
-}

+ 0 - 19
src/main/java/com/its/api/op/model/vo/history/TbLinkTrafClctHsVo.java

@@ -1,19 +0,0 @@
-package com.its.api.op.model.vo.history;
-
-import lombok.Getter;
-import lombok.Setter;
-import lombok.ToString;
-
-@Getter
-@Setter
-@ToString
-//@JsonNaming(UpperCaseUnderscoreStrategy.class)
-public class TbLinkTrafClctHsVo {
-    private String LINK_ID;
-    private String PRCN_DT;
-    private int    OPER01;
-    private int    UTIS01;
-    private int    UTIS02;
-    private int    VDS01;
-    private int    MOCT01;
-}

+ 0 - 23
src/main/java/com/its/api/op/model/vo/history/TbRoadTrafHsVo.java

@@ -1,23 +0,0 @@
-package com.its.api.op.model.vo.history;
-
-import lombok.Getter;
-import lombok.Setter;
-import lombok.ToString;
-
-@Getter
-@Setter
-@ToString
-//@JsonNaming(UpperCaseUnderscoreStrategy.class)
-public class TbRoadTrafHsVo {
-    private String ROAD_ID;                 // 도로 ID
-    private String PRCN_DT;                 // 가공 일시
-    private int    TFVL;                    // 교통량
-    private int    SPED;                    // 속도
-    private int    PTRN_SPED;               // 패턴 속도
-    private double OCPY_RATE;               // 점유 율
-    private int    TRVL_HH;                 // 통행 시간
-    private String PRCN_DT2;                // 가공 일시 - (YYYY-MM-DD HH24:MI:SS)
-    private String CMTR_GRAD_CD;            // 소통 등급 코드
-    private String CMTR_GRAD_CD_DESC;       // 소통 등급 코드 설명
-    private int    DATA_NUM;                // 데이터 개수
-}

+ 0 - 16
src/main/java/com/its/api/op/model/vo/history/TrafHsParam.java

@@ -1,16 +0,0 @@
-package com.its.api.op.model.vo.history;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import lombok.Setter;
-import lombok.ToString;
-
-@Getter
-@Setter
-@ToString
-@AllArgsConstructor
-public class TrafHsParam {
-    private Long   ID;
-    private String FROM_DT;
-    private String TO_DT;
-}

+ 22 - 0
src/main/java/com/its/api/op/repository/traffic/TbIfscTrafRepository.java

@@ -0,0 +1,22 @@
+package com.its.api.op.repository.traffic;
+
+import com.its.api.op.model.entity.traffic.TbIfscTraf;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Optional;
+
+@Repository
+public interface TbIfscTrafRepository extends JpaRepository<TbIfscTraf, Long>, JpaSpecificationExecutor<TbIfscTraf> {
+
+    @Query("select p from TbIfscTraf p inner join fetch p.ifsc")
+    List<TbIfscTraf> findAll();
+
+    @Query("select p from TbIfscTraf p inner join fetch p.ifsc where p.ifsc = :ifscId")
+    Optional<TbIfscTraf> findById(@Param("ifscId") Long ifscId);
+
+}

+ 22 - 0
src/main/java/com/its/api/op/repository/traffic/TbLinkTrafRepository.java

@@ -0,0 +1,22 @@
+package com.its.api.op.repository.traffic;
+
+import com.its.api.op.model.entity.traffic.TbLinkTraf;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Optional;
+
+@Repository
+public interface TbLinkTrafRepository extends JpaRepository<TbLinkTraf, Long>, JpaSpecificationExecutor<TbLinkTraf> {
+
+    @Query("select p from TbLinkTraf p inner join fetch p.link m join fetch m.fromNode join fetch m.toNode")
+    List<TbLinkTraf> findAll();
+
+    @Query("select p from TbLinkTraf p inner join fetch p.link m join fetch m.fromNode join fetch m.toNode where p.linkId = :linkId")
+    Optional<TbLinkTraf> findById(@Param("linkId") Long linkId);
+
+}

+ 22 - 0
src/main/java/com/its/api/op/repository/traffic/TbRoadTrafRepository.java

@@ -0,0 +1,22 @@
+package com.its.api.op.repository.traffic;
+
+import com.its.api.op.model.entity.traffic.TbRoadTraf;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Optional;
+
+@Repository
+public interface TbRoadTrafRepository extends JpaRepository<TbRoadTraf, Long>, JpaSpecificationExecutor<TbRoadTraf> {
+
+    @Query(value = "select p from TbRoadTraf p inner join fetch p.road")
+    List<TbRoadTraf> findAll();
+
+    @Query(value = "select p from TbRoadTraf p inner join fetch p.road where p.roadId = :roadId")
+    Optional<TbRoadTraf> findById(@Param("roadId") Long roadId);
+
+}

+ 11 - 0
src/main/java/com/its/api/op/repository/traffic/TbVmsCmtrInfrRepository.java

@@ -0,0 +1,11 @@
+package com.its.api.op.repository.traffic;
+
+import com.its.api.op.model.entity.traffic.TbVmsCmtrInfr;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface TbVmsCmtrInfrRepository extends JpaRepository<TbVmsCmtrInfr, Long>, JpaSpecificationExecutor<TbVmsCmtrInfr> {
+
+}

+ 46 - 0
src/main/java/com/its/api/op/service/traffic/TbIfscTrafService.java

@@ -0,0 +1,46 @@
+package com.its.api.op.service.traffic;
+
+import com.its.api.op.model.dto.traffic.TbIfscTrafDto;
+import com.its.api.op.model.entity.traffic.TbIfscTraf;
+import com.its.api.op.repository.traffic.TbIfscTrafRepository;
+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;
+
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class TbIfscTrafService {
+
+    private final TbIfscTrafRepository repo;
+
+    // 데이터 1건 조회, 없으면 exception
+    private TbIfscTraf requireOne(Long id) {
+        return this.repo.findById(id)
+                .orElseThrow(() -> new NoSuchElementException("데이터가 존재하지 않습니다: " + id));
+    }
+
+    // 전체 데이터 조회
+    @Transactional(readOnly = true)
+    public List<TbIfscTrafDto> findAll() {
+        List<TbIfscTrafDto> result = new ArrayList<>();
+        List<TbIfscTraf> data = this.repo.findAll();
+        for (TbIfscTraf entity : data) {
+            result.add(entity.toDto());
+        }
+        return result;
+    }
+
+    // 데이터 1건 조회(기존 데이터가 반드시 존재해야 함)
+    @Transactional(readOnly = true)
+    public TbIfscTrafDto findById(Long id) {
+        TbIfscTraf entity = requireOne(id);
+        return entity.toDto();
+    }
+
+}

+ 46 - 0
src/main/java/com/its/api/op/service/traffic/TbLinkTrafService.java

@@ -0,0 +1,46 @@
+package com.its.api.op.service.traffic;
+
+import com.its.api.op.model.dto.traffic.TbLinkTrafDto;
+import com.its.api.op.model.entity.traffic.TbLinkTraf;
+import com.its.api.op.repository.traffic.TbLinkTrafRepository;
+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;
+
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class TbLinkTrafService {
+
+    private final TbLinkTrafRepository repo;
+
+    // 데이터 1건 조회, 없으면 exception
+    private TbLinkTraf requireOne(Long id) {
+        return this.repo.findById(id)
+                .orElseThrow(() -> new NoSuchElementException("데이터가 존재하지 않습니다: " + id));
+    }
+
+    // 전체 데이터 조회
+    @Transactional(readOnly = true)
+    public List<TbLinkTrafDto> findAll() {
+        List<TbLinkTrafDto> result = new ArrayList<>();
+        List<TbLinkTraf> data = this.repo.findAll();
+        for (TbLinkTraf entity : data) {
+            result.add(entity.toDto());
+        }
+        return result;
+    }
+
+    // 데이터 1건 조회(기존 데이터가 반드시 존재해야 함)
+    @Transactional(readOnly = true)
+    public TbLinkTrafDto findById(Long id) {
+        TbLinkTraf entity = requireOne(id);
+        return entity.toDto();
+    }
+
+}

+ 46 - 0
src/main/java/com/its/api/op/service/traffic/TbRoadTrafService.java

@@ -0,0 +1,46 @@
+package com.its.api.op.service.traffic;
+
+import com.its.api.op.model.dto.traffic.TbRoadTrafDto;
+import com.its.api.op.model.entity.traffic.TbRoadTraf;
+import com.its.api.op.repository.traffic.TbRoadTrafRepository;
+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;
+
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class TbRoadTrafService {
+
+    private final TbRoadTrafRepository repo;
+
+    // 데이터 1건 조회, 없으면 exception
+    private TbRoadTraf requireOne(Long id) {
+        return this.repo.findById(id)
+                .orElseThrow(() -> new NoSuchElementException("데이터가 존재하지 않습니다: " + id));
+    }
+
+    // 전체 데이터 조회
+    @Transactional(readOnly = true)
+    public List<TbRoadTrafDto> findAll() {
+        List<TbRoadTrafDto> result = new ArrayList<>();
+        List<TbRoadTraf> data = this.repo.findAll();
+        for (TbRoadTraf entity : data) {
+            result.add(entity.toDto());
+        }
+        return result;
+    }
+
+    // 데이터 1건 조회(기존 데이터가 반드시 존재해야 함)
+    @Transactional(readOnly = true)
+    public TbRoadTrafDto findById(Long id) {
+        TbRoadTraf entity = requireOne(id);
+        return entity.toDto();
+    }
+
+}

+ 46 - 0
src/main/java/com/its/api/op/service/traffic/TbVmsCmtrInfrService.java

@@ -0,0 +1,46 @@
+package com.its.api.op.service.traffic;
+
+import com.its.api.op.model.dto.traffic.TbVmsCmtrInfrDto;
+import com.its.api.op.model.entity.traffic.TbVmsCmtrInfr;
+import com.its.api.op.repository.traffic.TbVmsCmtrInfrRepository;
+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;
+
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class TbVmsCmtrInfrService {
+
+    private final TbVmsCmtrInfrRepository repo;
+
+    // 데이터 1건 조회, 없으면 exception
+    private TbVmsCmtrInfr requireOne(Long id) {
+        return this.repo.findById(id)
+                .orElseThrow(() -> new NoSuchElementException("데이터가 존재하지 않습니다: " + id));
+    }
+
+    // 전체 데이터 조회
+    @Transactional(readOnly = true)
+    public List<TbVmsCmtrInfrDto> findAll() {
+        List<TbVmsCmtrInfrDto> result = new ArrayList<>();
+        List<TbVmsCmtrInfr> data = this.repo.findAll();
+        for (TbVmsCmtrInfr entity : data) {
+            result.add(entity.toDto());
+        }
+        return result;
+    }
+
+    // 데이터 1건 조회(기존 데이터가 반드시 존재해야 함)
+    @Transactional(readOnly = true)
+    public TbVmsCmtrInfrDto findById(Long id) {
+        TbVmsCmtrInfr entity = requireOne(id);
+        return entity.toDto();
+    }
+
+}