瀏覽代碼

mybatis to jpa

shjung 3 年之前
父節點
當前提交
4e5968af29
共有 31 個文件被更改,包括 1116 次插入457 次删除
  1. 9 9
      src/main/java/com/its/api/op/controller/analysis/TbClctSystSttsHsClctController.java
  2. 9 9
      src/main/java/com/its/api/op/controller/analysis/TbClctSystSttsHsPrcnController.java
  3. 10 10
      src/main/java/com/its/api/op/controller/analysis/TbReptCngsSectAnalController.java
  4. 0 38
      src/main/java/com/its/api/op/model/dto/analysis/ClctResultDto.java
  5. 0 50
      src/main/java/com/its/api/op/model/dto/analysis/PrcnResultDto.java
  6. 0 80
      src/main/java/com/its/api/op/model/dto/analysis/ReptCngsDto.java
  7. 66 0
      src/main/java/com/its/api/op/model/dto/analysis/TbClctSystSttsHsClctDto.java
  8. 17 0
      src/main/java/com/its/api/op/model/dto/analysis/TbClctSystSttsHsClctInf.java
  9. 76 0
      src/main/java/com/its/api/op/model/dto/analysis/TbClctSystSttsHsPrcnDto.java
  10. 21 0
      src/main/java/com/its/api/op/model/dto/analysis/TbClctSystSttsHsPrcnInf.java
  11. 22 0
      src/main/java/com/its/api/op/model/dto/ifsc/TbReptCngsSectDto.java
  12. 102 0
      src/main/java/com/its/api/op/model/dto/link/TbClctSystSttsHsDto.java
  13. 219 0
      src/main/java/com/its/api/op/model/dto/link/TbTrfcPrcnStatDto.java
  14. 70 0
      src/main/java/com/its/api/op/model/entity/link/TbClctSystSttsHs.java
  15. 25 0
      src/main/java/com/its/api/op/model/entity/link/TbClctSystSttsHsKey.java
  16. 137 0
      src/main/java/com/its/api/op/model/entity/link/TbTrfcPrcnStat.java
  17. 0 14
      src/main/java/com/its/api/op/repository/analysis/ClctResultMapper.java
  18. 0 14
      src/main/java/com/its/api/op/repository/analysis/PrcnResultMapper.java
  19. 0 13
      src/main/java/com/its/api/op/repository/analysis/ReptCngsMapper.java
  20. 9 1
      src/main/java/com/its/api/op/repository/ifsc/TbReptCngsSectRepository.java
  21. 108 0
      src/main/java/com/its/api/op/repository/link/TbClctSystSttsHsRepository.java
  22. 11 0
      src/main/java/com/its/api/op/repository/link/TbTrfcPrcnStatRepository.java
  23. 0 27
      src/main/java/com/its/api/op/service/analysis/ClctResultService.java
  24. 0 27
      src/main/java/com/its/api/op/service/analysis/PrcnResultService.java
  25. 0 51
      src/main/java/com/its/api/op/service/analysis/ReptCngsService.java
  26. 51 0
      src/main/java/com/its/api/op/service/ifsc/TbReptCngsSectService.java
  27. 108 0
      src/main/java/com/its/api/op/service/link/TbClctSystSttsHsService.java
  28. 46 0
      src/main/java/com/its/api/op/service/link/TbTrfcPrcnStatService.java
  29. 0 37
      src/main/resources/mybatis/mapper/analysis/ClctResultMapper.xml
  30. 0 45
      src/main/resources/mybatis/mapper/analysis/PrcnResultMapper.xml
  31. 0 32
      src/main/resources/mybatis/mapper/analysis/ReptCngsMapper.xml

+ 9 - 9
src/main/java/com/its/api/op/controller/analysis/ClctResultController.java → src/main/java/com/its/api/op/controller/analysis/TbClctSystSttsHsClctController.java

@@ -1,7 +1,7 @@
 package com.its.api.op.controller.analysis;
 
-import com.its.api.op.model.dto.analysis.ClctResultDto;
-import com.its.api.op.service.analysis.ClctResultService;
+import com.its.api.op.model.dto.analysis.TbClctSystSttsHsClctDto;
+import com.its.api.op.service.link.TbClctSystSttsHsService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -19,19 +19,19 @@ import java.util.List;
 @RestController
 @RequestMapping("/api/analysis/clct-result")
 @Api(tags = "04.분석-1.교통정보수집결과분석")
-public class ClctResultController {
+public class TbClctSystSttsHsClctController {
 
-    private final ClctResultService service;
+    private final TbClctSystSttsHsService service;
 
-    @ApiOperation(value = "교통정보수집결과분석(TB_CLCT_SYST_STTS_HS)", response = ClctResultDto.class, responseContainer = "ArrayList")
+    @ApiOperation(value = "교통정보수집결과분석(TB_CLCT_SYST_STTS_HS)", response = TbClctSystSttsHsClctDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "", produces = {"application/json; charset=utf8"})
-    public List<ClctResultDto> findAllByDateRange(
-            @ApiParam(name = "FROM_DT", value = "조회시작시각(YYYYMMDDHH24MI00)", example = "20220112000000", required = true)
+    public List<TbClctSystSttsHsClctDto> findAllClctSystByDateRange(
+            @ApiParam(name = "FROM_DT", value = "조회시작시각(YYYYMMDDHH24MI00)", example = "20220122000000", required = true)
             @RequestParam String FROM_DT,
-            @ApiParam(name = "TO_DT", value = "조회종료시각(YYYYMMDDHH24MI59)", example = "20220112235959", required = true)
+            @ApiParam(name = "TO_DT", value = "조회종료시각(YYYYMMDDHH24MI59)", example = "20220122235959", required = true)
             @RequestParam String TO_DT) {
 
-        return this.service.findAllByDateRange(FROM_DT, TO_DT);
+        return this.service.findAllClctSystByDateRange(FROM_DT, TO_DT);
     }
 
 }

+ 9 - 9
src/main/java/com/its/api/op/controller/analysis/PrcnResultController.java → src/main/java/com/its/api/op/controller/analysis/TbClctSystSttsHsPrcnController.java

@@ -1,7 +1,7 @@
 package com.its.api.op.controller.analysis;
 
-import com.its.api.op.model.dto.analysis.PrcnResultDto;
-import com.its.api.op.service.analysis.PrcnResultService;
+import com.its.api.op.model.dto.analysis.TbClctSystSttsHsPrcnDto;
+import com.its.api.op.service.link.TbClctSystSttsHsService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -19,19 +19,19 @@ import java.util.List;
 @RestController
 @RequestMapping("/api/analysis/prcn-result")
 @Api(tags = "04.분석-2.교통정보가공결과분석")
-public class PrcnResultController {
+public class TbClctSystSttsHsPrcnController {
 
-    private final PrcnResultService service;
+    private final TbClctSystSttsHsService service;
 
-    @ApiOperation(value = "교통정보가공결과분석(TB_CLCT_SYST_STTS_HS, TB_TRFC_PRCN_STAT)", response = PrcnResultDto.class, responseContainer = "ArrayList")
+    @ApiOperation(value = "교통정보가공결과분석(TB_CLCT_SYST_STTS_HS, TB_TRFC_PRCN_STAT)", response = TbClctSystSttsHsPrcnDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "", produces = {"application/json; charset=utf8"})
-    public List<PrcnResultDto> findAllByDateRange(
-            @ApiParam(name = "FROM_DT", value = "조회시작시각(YYYYMMDDHH24MI00)", example = "20220112000000", required = true)
+    public List<TbClctSystSttsHsPrcnDto> findAllByDateRange(
+            @ApiParam(name = "FROM_DT", value = "조회시작시각(YYYYMMDDHH24MI00)", example = "20220121000000", required = true)
             @RequestParam String FROM_DT,
-            @ApiParam(name = "TO_DT", value = "조회종료시각(YYYYMMDDHH24MI59)", example = "20220112235959", required = true)
+            @ApiParam(name = "TO_DT", value = "조회종료시각(YYYYMMDDHH24MI59)", example = "20220121235959", required = true)
             @RequestParam String TO_DT) {
 
-        return this.service.findAllByDateRange(FROM_DT, TO_DT);
+        return this.service.findAllPrcsSystByDateRange(FROM_DT, TO_DT);
     }
 
 }

+ 10 - 10
src/main/java/com/its/api/op/controller/analysis/ReptCngsController.java → src/main/java/com/its/api/op/controller/analysis/TbReptCngsSectAnalController.java

@@ -1,7 +1,7 @@
 package com.its.api.op.controller.analysis;
 
-import com.its.api.op.model.dto.analysis.ReptCngsDto;
-import com.its.api.op.service.analysis.ReptCngsService;
+import com.its.api.op.model.dto.ifsc.TbReptCngsSectDto;
+import com.its.api.op.service.ifsc.TbReptCngsSectService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -19,25 +19,25 @@ import java.util.List;
 @RestController
 @RequestMapping("/api/analysis/rept-cngs")
 @Api(tags = "04.분석-6.반복정체구간분석")
-public class ReptCngsController {
+public class TbReptCngsSectAnalController {
 
-    private final ReptCngsService service;
+    private final TbReptCngsSectService service;
 
-    @ApiOperation(value = "반복정체 요일구분 목록 조회(TB_CMMN_CD)", response = ReptCngsDto.ReptCngsDayType.class, responseContainer = "ArrayList")
+    @ApiOperation(value = "반복정체 요일구분 목록 조회(TB_CMMN_CD)", response = TbReptCngsSectDto.ReptCngsDayType.class, responseContainer = "ArrayList")
     @GetMapping(value = "/day-type", produces = {"application/json; charset=utf8"})
-    public List<ReptCngsDto.ReptCngsDayType> findAllDayType() {
+    public List<TbReptCngsSectDto.ReptCngsDayType> findAllDayType() {
         return this.service.findAllDayType();
     }
 
-    @ApiOperation(value = "반복정체구간분석(TB_REPT_CNGS_SECT, TB_IFSC)", response = ReptCngsDto.class, responseContainer = "ArrayList")
+    @ApiOperation(value = "반복정체구간분석(TB_REPT_CNGS_SECT, TB_IFSC)", response = TbReptCngsSectDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "", produces = {"application/json; charset=utf8"})
-    public List<ReptCngsDto> findAllByDateRange(
+    public List<TbReptCngsSectDto> findAllAnalByDayTypeCdAndStatYm(
             @ApiParam(name = "DAY_TYPE_CD", value = "요일유형(ALL(전체), DTW1(월), DTW2(화), DTW3(수), DTW4(목), DTW5(금), DTW6(토), DTW7(일))", example = "ALL", required = true)
             @RequestParam String DAY_TYPE_CD,
-            @ApiParam(name = "BASE_MN", value = "기준월(YYYYMM)", example = "202112", required = true)
+            @ApiParam(name = "BASE_MN", value = "기준월(YYYYMM)", example = "202202", required = true)
             @RequestParam String BASE_MN) {
 
-        return this.service.findAllByDateRange(DAY_TYPE_CD, BASE_MN);
+        return this.service.findAllAnalByDayTypeCdAndStatYm(DAY_TYPE_CD, BASE_MN);
     }
 
 }

+ 0 - 38
src/main/java/com/its/api/op/model/dto/analysis/ClctResultDto.java

@@ -1,38 +0,0 @@
-package com.its.api.op.model.dto.analysis;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.*;
-
-@Data
-@Builder
-@AllArgsConstructor
-@NoArgsConstructor
-@ApiModel("ClctResultDto(교통정보수집결과 분석 정보)")
-public class ClctResultDto {
-
-    @ApiModelProperty("가공시각")
-    @JsonProperty("prcn_dt")
-    private String PRCN_DT;
-    @ApiModelProperty("총수집개수")
-    @JsonProperty("clct_tot")
-    private int    CLCT_TOT;        // 총수집개수
-
-    @ApiModelProperty("운영자개입")
-    @JsonProperty("oper01")
-    private int    OPER01;          // 운영자개입
-    @ApiModelProperty("영상 VDS")
-    @JsonProperty("vds01")
-    private int    VDS01;           // 영상 VDS
-    @ApiModelProperty("민간정보")
-    @JsonProperty("moct01")
-    private int    MOCT01;          // 민간정보
-    @ApiModelProperty("중앙센터-UTIS")
-    @JsonProperty("utis01")
-    private int    UTIS01;          // 중앙센터-UTIS
-    @ApiModelProperty("중앙센터-ITS")
-    @JsonProperty("utis02")
-    private int    UTIS02;          // 중앙센터-ITS
-
-}

+ 0 - 50
src/main/java/com/its/api/op/model/dto/analysis/PrcnResultDto.java

@@ -1,50 +0,0 @@
-package com.its.api.op.model.dto.analysis;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@Data
-@Builder
-@AllArgsConstructor
-@NoArgsConstructor
-@ApiModel("PrcnResultDto(교통정보가공결과 분석 정보)")
-public class PrcnResultDto {
-
-    @ApiModelProperty("가공시각")
-    @JsonProperty("prcn_dt")
-    private String PRCN_DT;
-    @ApiModelProperty("총가공개수")
-    @JsonProperty("prcn_tot")
-    private int    PRCN_TOT;        // 총가공개수
-
-    @ApiModelProperty("운영자개입")
-    @JsonProperty("oper01")
-    private int    OPER01;          // 운영자개입
-    @ApiModelProperty("영상 VDS")
-    @JsonProperty("vds01")
-    private int    VDS01;           // 영상 VDS
-    @ApiModelProperty("민간정보")
-    @JsonProperty("moct01")
-    private int    MOCT01;          // 민간정보
-    @ApiModelProperty("중앙센터-UTIS")
-    @JsonProperty("utis01")
-    private int    UTIS01;          // 중앙센터-UTIS
-    @ApiModelProperty("중앙센터-ITS")
-    @JsonProperty("utis02")
-    private int    UTIS02;          // 중앙센터-ITS
-
-    @ApiModelProperty("결측개수")
-    @JsonProperty("miss_num")
-    private int    MISS_NUM;        // 결측개수
-    @ApiModelProperty("보정개수")
-    @JsonProperty("adjs_num")
-    private int    ADJS_NUM;        // 보정개수
-    @ApiModelProperty("평활화개수")
-    @JsonProperty("smth_num")
-    private int    SMTH_NUM;        // 평활화개수
-}

+ 0 - 80
src/main/java/com/its/api/op/model/dto/analysis/ReptCngsDto.java

@@ -1,80 +0,0 @@
-package com.its.api.op.model.dto.analysis;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.its.api.op.model.dto.code.TbCmmnCdDto;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.*;
-
-@Data
-@Builder
-@AllArgsConstructor
-@NoArgsConstructor
-@ApiModel("ReptCngsDto(반복정체구간 분석 정보)")
-public class ReptCngsDto {
-
-    @ApiModelProperty("요일")
-    @JsonProperty("day_type_nm")
-    private String DAY_TYPE_NM;
-    @ApiModelProperty("기준월")
-    @JsonProperty("stat_ym")
-    private String STAT_YM;
-    @ApiModelProperty("정보제공구간 ID")
-    @JsonProperty("ifsc_id")
-    private String IFSC_ID;
-    @ApiModelProperty("정보제공구간명")
-    @JsonProperty("ifsc_nm")
-    private String IFSC_NM;
-    @ApiModelProperty("시점명")
-    @JsonProperty("strt_nm")
-    private String STRT_NM;
-    @ApiModelProperty("종점명")
-    @JsonProperty("end_nm")
-    private String END_NM;
-    @ApiModelProperty("구간길이")
-    @JsonProperty("sect_lngt")
-    private int    SECT_LNGT;
-    @ApiModelProperty("시작시각")
-    @JsonProperty("cnfs_strt_hm")
-    private String CNFS_STRT_HM;
-    @ApiModelProperty("종료시각")
-    @JsonProperty("cnfs_end_hm")
-    private String CNFS_END_HM;
-    @ApiModelProperty("평균속도")
-    @JsonProperty("avrg_sped")
-    private String AVRG_SPED;
-    @ApiModelProperty("통행시간(초)")
-    @JsonProperty("avrg_trvl_hh")
-    private String AVRG_TRVL_HH;
-    @ApiModelProperty("확정여부")
-    @JsonProperty("dcsn_yn")
-    private String DCSN_YN;
-    @ApiModelProperty("생성시각")
-    @JsonProperty("crtn_ymd")
-    private String CRTN_YMD;
-    @ApiModelProperty("판정구분")
-    @JsonProperty("rept_cngs_sect_orgn_nm")
-    private String REPT_CNGS_SECT_ORGN_NM;
-
-    @Getter
-    public static class ReptCngsDayType {
-
-        @ApiModelProperty("요일 유형 코드")  // Y VARCHAR(7)
-        @JsonProperty("day_type_cd")
-        private String dayTypeCd;
-
-        @ApiModelProperty("요일 유형 명")
-        @JsonProperty("day_type_nm")
-        private String dayTypeNm;
-
-        @ApiModelProperty("요일 유형 설명")
-        @JsonProperty("day_type_desc")
-        private String dayTypeDesc;
-
-        public ReptCngsDayType(TbCmmnCdDto entity) {
-            this.dayTypeCd   = entity.getCmmnCd();
-            this.dayTypeNm   = entity.getCmmnCdKorNm();
-            this.dayTypeDesc = "[" + this.dayTypeCd + "]" + this.dayTypeNm;
-        }
-    }
-}

+ 66 - 0
src/main/java/com/its/api/op/model/dto/analysis/TbClctSystSttsHsClctDto.java

@@ -0,0 +1,66 @@
+package com.its.api.op.model.dto.analysis;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 링크 소통상황 수집 이력 DTO Class
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("TbClctSystSttsHsClctDto(교통정보수집결과분석)")
+public class TbClctSystSttsHsClctDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("가공 일시")  // N VARCHAR(14)
+    @JsonProperty("prcn_dt")
+    private String prcnDt;
+
+    @ApiModelProperty("총수집개수")
+    @JsonProperty("clct_tot")
+    private int    clctTot;        // 총수집개수
+
+    @ApiModelProperty("운영자개입 속도")  // Y NUMBER(3)
+    @JsonProperty("OPER01")
+    private Integer oper01;
+
+    @ApiModelProperty("중앙센터-UTIS 속도")  // Y NUMBER(3)
+    @JsonProperty("UTIS01")
+    private Integer utis01;
+
+    @ApiModelProperty("중앙센터-ITS 속도")  // Y NUMBER(3)
+    @JsonProperty("UTIS02")
+    private Integer utis02;
+
+    @ApiModelProperty("영상VDS 속도")  // Y NUMBER(3)
+    @JsonProperty("VDS01")
+    private Integer vds01;
+
+    @ApiModelProperty("민간정보 속도")  // Y NUMBER(3)
+    @JsonProperty("MOCT01")
+    private Integer moct01;
+
+    public void makeClctTot() {
+        this.clctTot = this.oper01 + this.utis01 + this.utis02 + this.vds01 + this.moct01;
+    }
+
+    public TbClctSystSttsHsClctDto(String prcnDt, BigDecimal OPER01, BigDecimal UTIS01, BigDecimal UTIS02, BigDecimal VDS01, BigDecimal MOCT01) {
+        this.prcnDt = prcnDt;
+        this.oper01 = OPER01.intValue();
+        this.utis01 = UTIS01.intValue();
+        this.utis02 = UTIS02.intValue();
+        this.vds01 = VDS01.intValue();
+        this.moct01 = MOCT01.intValue();
+        this.clctTot = 0;
+    }
+}

+ 17 - 0
src/main/java/com/its/api/op/model/dto/analysis/TbClctSystSttsHsClctInf.java

@@ -0,0 +1,17 @@
+package com.its.api.op.model.dto.analysis;
+
+import java.math.BigDecimal;
+
+/**
+ * 교통정보수집결과분석 Interface Class
+ */
+public interface TbClctSystSttsHsClctInf {
+
+    String getPrcnDt();
+    BigDecimal getOper01();
+    BigDecimal getUtis01();
+    BigDecimal getUtis02();
+    BigDecimal getVds01();
+    BigDecimal getMoct01();
+
+}

+ 76 - 0
src/main/java/com/its/api/op/model/dto/analysis/TbClctSystSttsHsPrcnDto.java

@@ -0,0 +1,76 @@
+package com.its.api.op.model.dto.analysis;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 링크 소통상황 수집 이력 DTO Class
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("TbClctSystSttsHsPrcnDto(교통정보가공결과분석)")
+public class TbClctSystSttsHsPrcnDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("가공 일시")  // N VARCHAR(14)
+    @JsonProperty("prcn_dt")
+    private String prcnDt;
+
+    @ApiModelProperty("총수집개수")
+    @JsonProperty("clct_tot")
+    private int    clctTot;        // 총수집개수
+
+    @ApiModelProperty("운영자개입 속도")  // Y NUMBER(3)
+    @JsonProperty("OPER01")
+    private Integer oper01;
+
+    @ApiModelProperty("중앙센터-UTIS 속도")  // Y NUMBER(3)
+    @JsonProperty("UTIS01")
+    private Integer utis01;
+
+    @ApiModelProperty("중앙센터-ITS 속도")  // Y NUMBER(3)
+    @JsonProperty("UTIS02")
+    private Integer utis02;
+
+    @ApiModelProperty("영상VDS 속도")  // Y NUMBER(3)
+    @JsonProperty("VDS01")
+    private Integer vds01;
+
+    @ApiModelProperty("민간정보 속도")  // Y NUMBER(3)
+    @JsonProperty("MOCT01")
+    private Integer moct01;
+
+    @ApiModelProperty("결측개수")
+    @JsonProperty("miss_num")
+    private int    missNum;        // 결측개수
+    @ApiModelProperty("보정개수")
+    @JsonProperty("adjs_num")
+    private int    adjsNum;        // 보정개수
+    @ApiModelProperty("평활화개수")
+    @JsonProperty("smth_num")
+    private int    smthNum;        // 평활화개수
+
+    public void makeClctTot() {
+        this.clctTot = this.oper01 + this.utis01 + this.utis02 + this.vds01 + this.moct01 + this.missNum;
+    }
+
+    public TbClctSystSttsHsPrcnDto(BigDecimal linkId, String prcnDt, BigDecimal OPER01, BigDecimal UTIS01, BigDecimal UTIS02, BigDecimal VDS01, BigDecimal MOCT01) {
+        this.prcnDt = prcnDt;
+        this.oper01 = OPER01.intValue();
+        this.utis01 = UTIS01.intValue();
+        this.utis02 = UTIS02.intValue();
+        this.vds01 = VDS01.intValue();
+        this.moct01 = MOCT01.intValue();
+        this.clctTot = 0;
+    }
+}

+ 21 - 0
src/main/java/com/its/api/op/model/dto/analysis/TbClctSystSttsHsPrcnInf.java

@@ -0,0 +1,21 @@
+package com.its.api.op.model.dto.analysis;
+
+import java.math.BigDecimal;
+
+/**
+ * 교통정보수집결과분석 Interface Class
+ */
+public interface TbClctSystSttsHsPrcnInf {
+
+    String getPrcnDt();
+    BigDecimal getOper01();
+    BigDecimal getUtis01();
+    BigDecimal getUtis02();
+    BigDecimal getVds01();
+    BigDecimal getMoct01();
+
+    BigDecimal getMissNum();
+    BigDecimal getAdjsNum();
+    BigDecimal getSmthNum();
+
+}

+ 22 - 0
src/main/java/com/its/api/op/model/dto/ifsc/TbReptCngsSectDto.java

@@ -2,6 +2,7 @@ package com.its.api.op.model.dto.ifsc;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.its.api.op.model.dto.code.TbCmmnCdDto;
 import com.its.api.op.model.entity.ifsc.TbReptCngsSect;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -176,4 +177,25 @@ public class TbReptCngsSectDto implements Serializable {
 
     }
 
+    @Getter
+    public static class ReptCngsDayType {
+
+        @ApiModelProperty("요일 유형 코드")  // Y VARCHAR(7)
+        @JsonProperty("day_type_cd")
+        private String dayTypeCd;
+
+        @ApiModelProperty("요일 유형 명")
+        @JsonProperty("day_type_nm")
+        private String dayTypeNm;
+
+        @ApiModelProperty("요일 유형 설명")
+        @JsonProperty("day_type_desc")
+        private String dayTypeDesc;
+
+        public ReptCngsDayType(TbCmmnCdDto entity) {
+            this.dayTypeCd   = entity.getCmmnCd();
+            this.dayTypeNm   = entity.getCmmnCdKorNm();
+            this.dayTypeDesc = "[" + this.dayTypeCd + "]" + this.dayTypeNm;
+        }
+    }
 }

+ 102 - 0
src/main/java/com/its/api/op/model/dto/link/TbClctSystSttsHsDto.java

@@ -0,0 +1,102 @@
+package com.its.api.op.model.dto.link;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.its.api.op.model.entity.link.TbClctSystSttsHs;
+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("TbClctSystSttsHsDto(수집 시스템 상태 이력)")
+public class TbClctSystSttsHsDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("수집 시스템 코드")  // N VARCHAR(7)
+    @JsonProperty("clct_syst_cd")
+    private String clctSystCd;
+
+    @ApiModelProperty("가공 일시")  // N VARCHAR(14)
+    @JsonProperty("prcn_dt")
+    private String prcnDt;
+
+    @ApiModelProperty("수집 개수")  // Y NUMBER(7)
+    @JsonProperty("clct_num")
+    private Integer clctNum;
+
+    @ApiModelProperty("필터링 개수")  // Y NUMBER(7)
+    @JsonProperty("fltr_num")
+    private Integer fltrNum;
+
+    @ApiModelProperty("퓨전 개수")  // Y NUMBER(7)
+    @JsonProperty("fusn_num")
+    private Integer fusnNum;
+
+    // Code Description Field
+    @ApiModelProperty("수집 시스템 코드 설명")
+    @JsonProperty("clct_syst_desc")    // CLCT_SYST_CD
+    private String clctSystDesc;
+
+    @ApiModel("TbClctSystSttsHsUpdReq(수집 시스템 상태 이력 정보변경)")
+    @Getter
+    @Setter
+    @ToString
+    @NoArgsConstructor(access = AccessLevel.PROTECTED)
+    public static class TbClctSystSttsHsUpdReq {
+
+        @ApiModelProperty("수집 시스템 코드, Nullable = N, VARCHAR(7)")  // N VARCHAR(7)
+        @JsonProperty("clct_syst_cd")
+        @Size(min=1, max=7)
+        private String clctSystCd;
+
+        @ApiModelProperty("가공 일시, Nullable = N, VARCHAR(14)")  // N VARCHAR(14)
+        @JsonProperty("prcn_dt")
+        @Size(min=1, max=14)
+        private String prcnDt;
+
+        @ApiModelProperty("수집 개수, Nullable = Y, NUMBER(7)")  // Y NUMBER(7)
+        @JsonProperty("clct_num")
+        @Positive
+        private Integer clctNum;
+
+        @ApiModelProperty("필터링 개수, Nullable = Y, NUMBER(7)")  // Y NUMBER(7)
+        @JsonProperty("fltr_num")
+        @Positive
+        private Integer fltrNum;
+
+        @ApiModelProperty("퓨전 개수, Nullable = Y, NUMBER(7)")  // Y NUMBER(7)
+        @JsonProperty("fusn_num")
+        @Positive
+        private Integer fusnNum;
+
+        @Builder
+        public TbClctSystSttsHsUpdReq(String clct_syst_cd, String prcn_dt, Integer clct_num, Integer fltr_num, Integer fusn_num) {
+            this.clctSystCd = clct_syst_cd;
+            this.prcnDt = prcn_dt;
+            this.clctNum = clct_num;
+            this.fltrNum = fltr_num;
+            this.fusnNum = fusn_num;
+        }
+
+        public TbClctSystSttsHs toEntity() {
+            TbClctSystSttsHs entity = TbClctSystSttsHs.builder()
+                    .clctSystCd(this.clctSystCd)
+                    .prcnDt(this.prcnDt)
+                    .clctNum(this.clctNum)
+                    .fltrNum(this.fltrNum)
+                    .fusnNum(this.fusnNum)
+                    .build();
+
+            return entity;
+        }
+
+    }
+
+}

+ 219 - 0
src/main/java/com/its/api/op/model/dto/link/TbTrfcPrcnStatDto.java

@@ -0,0 +1,219 @@
+package com.its.api.op.model.dto.link;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.its.api.op.model.entity.link.TbTrfcPrcnStat;
+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("TbTrfcPrcnStatDto(교통 가공 통계)")
+public class TbTrfcPrcnStatDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("가공 일시")  // N VARCHAR(14)
+    @JsonProperty("prcn_dt")
+    private String prcnDt;
+
+    @ApiModelProperty("결측 개수")  // Y NUMBER(7)
+    @JsonProperty("miss_num")
+    private Integer missNum;
+
+    @ApiModelProperty("보정 개수")  // Y NUMBER(7)
+    @JsonProperty("adjs_num")
+    private Integer adjsNum;
+
+    @ApiModelProperty("평활화 개수")  // Y NUMBER(7)
+    @JsonProperty("smth_num")
+    private Integer smthNum;
+
+    @ApiModelProperty("링크 원활 개수")  // Y NUMBER(7)
+    @JsonProperty("link_ligt_num")
+    private Integer linkLigtNum;
+
+    @ApiModelProperty("링크 지체 개수")  // Y NUMBER(7)
+    @JsonProperty("link_dely_num")
+    private Integer linkDelyNum;
+
+    @ApiModelProperty("링크 정체 개수")  // Y NUMBER(7)
+    @JsonProperty("link_cngs_num")
+    private Integer linkCngsNum;
+
+    @ApiModelProperty("정보제공구간 원활 개수")  // Y NUMBER(7)
+    @JsonProperty("ifsc_ligt_num")
+    private Integer ifscLigtNum;
+
+    @ApiModelProperty("정보제공구간 지체 개수")  // Y NUMBER(7)
+    @JsonProperty("ifsc_dely_num")
+    private Integer ifscDelyNum;
+
+    @ApiModelProperty("정보제공구간 정체 개수")  // Y NUMBER(7)
+    @JsonProperty("ifsc_cngs_num")
+    private Integer ifscCngsNum;
+
+    @ApiModelProperty("도로 원활 개수")  // Y NUMBER(7)
+    @JsonProperty("road_ligt_num")
+    private Integer roadLigtNum;
+
+    @ApiModelProperty("도로 지체 개수")  // Y NUMBER(7)
+    @JsonProperty("road_dely_num")
+    private Integer roadDelyNum;
+
+    @ApiModelProperty("도로 정체 개수")  // Y NUMBER(7)
+    @JsonProperty("road_cngs_num")
+    private Integer roadCngsNum;
+
+    @ApiModelProperty("VMS 정보제공구간 원활 개수")  // Y NUMBER(7)
+    @JsonProperty("vms_ifsc_ligt_num")
+    private Integer vmsIfscLigtNum;
+
+    @ApiModelProperty("VMS 정보제공구간 지체 개수")  // Y NUMBER(7)
+    @JsonProperty("vms_ifsc_dely_num")
+    private Integer vmsIfscDelyNum;
+
+    @ApiModelProperty("VMS 정보제공구간 정체 개수")  // Y NUMBER(7)
+    @JsonProperty("vms_ifsc_cngs_num")
+    private Integer vmsIfscCngsNum;
+
+    // Code Description Field
+    @ApiModel("TbTrfcPrcnStatUpdReq(교통 가공 통계 정보변경)")
+    @Getter
+    @Setter
+    @ToString
+    @NoArgsConstructor(access = AccessLevel.PROTECTED)
+    public static class TbTrfcPrcnStatUpdReq {
+
+        @ApiModelProperty("가공 일시, Nullable = N, VARCHAR(14)")  // N VARCHAR(14)
+        @JsonProperty("prcn_dt")
+        @Size(min=1, max=14)
+        private String prcnDt;
+
+        @ApiModelProperty("결측 개수, Nullable = Y, NUMBER(7)")  // Y NUMBER(7)
+        @JsonProperty("miss_num")
+        @Positive
+        private Integer missNum;
+
+        @ApiModelProperty("보정 개수, Nullable = Y, NUMBER(7)")  // Y NUMBER(7)
+        @JsonProperty("adjs_num")
+        @Positive
+        private Integer adjsNum;
+
+        @ApiModelProperty("평활화 개수, Nullable = Y, NUMBER(7)")  // Y NUMBER(7)
+        @JsonProperty("smth_num")
+        @Positive
+        private Integer smthNum;
+
+        @ApiModelProperty("링크 원활 개수, Nullable = Y, NUMBER(7)")  // Y NUMBER(7)
+        @JsonProperty("link_ligt_num")
+        @Positive
+        private Integer linkLigtNum;
+
+        @ApiModelProperty("링크 지체 개수, Nullable = Y, NUMBER(7)")  // Y NUMBER(7)
+        @JsonProperty("link_dely_num")
+        @Positive
+        private Integer linkDelyNum;
+
+        @ApiModelProperty("링크 정체 개수, Nullable = Y, NUMBER(7)")  // Y NUMBER(7)
+        @JsonProperty("link_cngs_num")
+        @Positive
+        private Integer linkCngsNum;
+
+        @ApiModelProperty("정보제공구간 원활 개수, Nullable = Y, NUMBER(7)")  // Y NUMBER(7)
+        @JsonProperty("ifsc_ligt_num")
+        @Positive
+        private Integer ifscLigtNum;
+
+        @ApiModelProperty("정보제공구간 지체 개수, Nullable = Y, NUMBER(7)")  // Y NUMBER(7)
+        @JsonProperty("ifsc_dely_num")
+        @Positive
+        private Integer ifscDelyNum;
+
+        @ApiModelProperty("정보제공구간 정체 개수, Nullable = Y, NUMBER(7)")  // Y NUMBER(7)
+        @JsonProperty("ifsc_cngs_num")
+        @Positive
+        private Integer ifscCngsNum;
+
+        @ApiModelProperty("도로 원활 개수, Nullable = Y, NUMBER(7)")  // Y NUMBER(7)
+        @JsonProperty("road_ligt_num")
+        @Positive
+        private Integer roadLigtNum;
+
+        @ApiModelProperty("도로 지체 개수, Nullable = Y, NUMBER(7)")  // Y NUMBER(7)
+        @JsonProperty("road_dely_num")
+        @Positive
+        private Integer roadDelyNum;
+
+        @ApiModelProperty("도로 정체 개수, Nullable = Y, NUMBER(7)")  // Y NUMBER(7)
+        @JsonProperty("road_cngs_num")
+        @Positive
+        private Integer roadCngsNum;
+
+        @ApiModelProperty("VMS 정보제공구간 원활 개수, Nullable = Y, NUMBER(7)")  // Y NUMBER(7)
+        @JsonProperty("vms_ifsc_ligt_num")
+        @Positive
+        private Integer vmsIfscLigtNum;
+
+        @ApiModelProperty("VMS 정보제공구간 지체 개수, Nullable = Y, NUMBER(7)")  // Y NUMBER(7)
+        @JsonProperty("vms_ifsc_dely_num")
+        @Positive
+        private Integer vmsIfscDelyNum;
+
+        @ApiModelProperty("VMS 정보제공구간 정체 개수, Nullable = Y, NUMBER(7)")  // Y NUMBER(7)
+        @JsonProperty("vms_ifsc_cngs_num")
+        @Positive
+        private Integer vmsIfscCngsNum;
+
+        @Builder
+        public TbTrfcPrcnStatUpdReq(String prcn_dt, Integer miss_num, Integer adjs_num, Integer smth_num, Integer link_ligt_num, Integer link_dely_num, Integer link_cngs_num, Integer ifsc_ligt_num, Integer ifsc_dely_num, Integer ifsc_cngs_num, Integer road_ligt_num, Integer road_dely_num, Integer road_cngs_num, Integer vms_ifsc_ligt_num, Integer vms_ifsc_dely_num, Integer vms_ifsc_cngs_num) {
+            this.prcnDt = prcn_dt;
+            this.missNum = miss_num;
+            this.adjsNum = adjs_num;
+            this.smthNum = smth_num;
+            this.linkLigtNum = link_ligt_num;
+            this.linkDelyNum = link_dely_num;
+            this.linkCngsNum = link_cngs_num;
+            this.ifscLigtNum = ifsc_ligt_num;
+            this.ifscDelyNum = ifsc_dely_num;
+            this.ifscCngsNum = ifsc_cngs_num;
+            this.roadLigtNum = road_ligt_num;
+            this.roadDelyNum = road_dely_num;
+            this.roadCngsNum = road_cngs_num;
+            this.vmsIfscLigtNum = vms_ifsc_ligt_num;
+            this.vmsIfscDelyNum = vms_ifsc_dely_num;
+            this.vmsIfscCngsNum = vms_ifsc_cngs_num;
+        }
+
+        public TbTrfcPrcnStat toEntity() {
+            TbTrfcPrcnStat entity = TbTrfcPrcnStat.builder()
+                    .prcnDt(this.prcnDt)
+                    .missNum(this.missNum)
+                    .adjsNum(this.adjsNum)
+                    .smthNum(this.smthNum)
+                    .linkLigtNum(this.linkLigtNum)
+                    .linkDelyNum(this.linkDelyNum)
+                    .linkCngsNum(this.linkCngsNum)
+                    .ifscLigtNum(this.ifscLigtNum)
+                    .ifscDelyNum(this.ifscDelyNum)
+                    .ifscCngsNum(this.ifscCngsNum)
+                    .roadLigtNum(this.roadLigtNum)
+                    .roadDelyNum(this.roadDelyNum)
+                    .roadCngsNum(this.roadCngsNum)
+                    .vmsIfscLigtNum(this.vmsIfscLigtNum)
+                    .vmsIfscDelyNum(this.vmsIfscDelyNum)
+                    .vmsIfscCngsNum(this.vmsIfscCngsNum)
+                    .build();
+
+            return entity;
+        }
+
+    }
+
+}

+ 70 - 0
src/main/java/com/its/api/op/model/entity/link/TbClctSystSttsHs.java

@@ -0,0 +1,70 @@
+package com.its.api.op.model.entity.link;
+
+import com.its.api.op.model.dto.link.TbClctSystSttsHsDto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+/**
+ * 수집 시스템 상태 이력 Entity Class
+ */
+@Getter
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@Builder
+@AllArgsConstructor
+@ApiModel("수집 시스템 상태 이력")
+@Entity
+@Table(name = "TB_CLCT_SYST_STTS_HS")
+@IdClass(TbClctSystSttsHsKey.class)
+public class TbClctSystSttsHs implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("수집 시스템 코드")  // N VARCHAR(7)
+    @Id
+    @Column(name = "CLCT_SYST_CD", nullable = false, length = 7)
+    private String clctSystCd;
+
+    @ApiModelProperty("가공 일시")  // N VARCHAR(14)
+    @Id
+    @Column(name = "PRCN_DT", nullable = false, length = 14)
+    private String prcnDt;
+
+    @ApiModelProperty("수집 개수")  // Y NUMBER(7)
+    @Column(name = "CLCT_NUM", columnDefinition = "NUMBER", length = 7)
+    private Integer clctNum;
+
+    @ApiModelProperty("필터링 개수")  // Y NUMBER(7)
+    @Column(name = "FLTR_NUM", columnDefinition = "NUMBER", length = 7)
+    private Integer fltrNum;
+
+    @ApiModelProperty("퓨전 개수")  // Y NUMBER(7)
+    @Column(name = "FUSN_NUM", columnDefinition = "NUMBER", length = 7)
+    private Integer fusnNum;
+
+    public TbClctSystSttsHsDto toDto() {
+        TbClctSystSttsHsDto dto = TbClctSystSttsHsDto.builder()
+                .clctSystCd(this.clctSystCd)
+                .prcnDt(this.prcnDt)
+                .clctNum(this.clctNum)
+                .fltrNum(this.fltrNum)
+                .fusnNum(this.fusnNum)
+                .build();
+
+        return dto;
+    }
+
+    public TbClctSystSttsHs(String clctSystCd, String prcnDt) {
+        this.clctSystCd = clctSystCd;
+        this.prcnDt = prcnDt;
+    }
+
+    public void updateInfo(TbClctSystSttsHsDto.TbClctSystSttsHsUpdReq req) {
+        this.clctNum = req.getClctNum();
+        this.fltrNum = req.getFltrNum();
+        this.fusnNum = req.getFusnNum();
+    }
+
+}

+ 25 - 0
src/main/java/com/its/api/op/model/entity/link/TbClctSystSttsHsKey.java

@@ -0,0 +1,25 @@
+package com.its.api.op.model.entity.link;
+
+import lombok.Data;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import lombok.AllArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * 수집 시스템 상태 이력 Key Class
+ */
+@Data
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@AllArgsConstructor
+public class TbClctSystSttsHsKey implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    // CLCT_SYST_CD, 수집 시스템 코드  // N VARCHAR(7)
+    private String clctSystCd;
+
+    // PRCN_DT, 가공 일시  // N VARCHAR(14)
+    private String prcnDt;
+
+}

+ 137 - 0
src/main/java/com/its/api/op/model/entity/link/TbTrfcPrcnStat.java

@@ -0,0 +1,137 @@
+package com.its.api.op.model.entity.link;
+
+import com.its.api.op.model.dto.link.TbTrfcPrcnStatDto;
+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;
+
+/**
+ * 교통 가공 통계 Entity Class
+ */
+@Getter
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@Builder
+@AllArgsConstructor
+@ApiModel("교통 가공 통계")
+@Entity
+@Table(name = "TB_TRFC_PRCN_STAT")
+public class TbTrfcPrcnStat implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("가공 일시")  // N VARCHAR(14)
+    @Id
+    @Column(name = "PRCN_DT", nullable = false, length = 14)
+    private String prcnDt;
+
+    @ApiModelProperty("결측 개수")  // Y NUMBER(7)
+    @Column(name = "MISS_NUM", columnDefinition = "NUMBER", length = 7)
+    private Integer missNum;
+
+    @ApiModelProperty("보정 개수")  // Y NUMBER(7)
+    @Column(name = "ADJS_NUM", columnDefinition = "NUMBER", length = 7)
+    private Integer adjsNum;
+
+    @ApiModelProperty("평활화 개수")  // Y NUMBER(7)
+    @Column(name = "SMTH_NUM", columnDefinition = "NUMBER", length = 7)
+    private Integer smthNum;
+
+    @ApiModelProperty("링크 원활 개수")  // Y NUMBER(7)
+    @Column(name = "LINK_LIGT_NUM", columnDefinition = "NUMBER", length = 7)
+    private Integer linkLigtNum;
+
+    @ApiModelProperty("링크 지체 개수")  // Y NUMBER(7)
+    @Column(name = "LINK_DELY_NUM", columnDefinition = "NUMBER", length = 7)
+    private Integer linkDelyNum;
+
+    @ApiModelProperty("링크 정체 개수")  // Y NUMBER(7)
+    @Column(name = "LINK_CNGS_NUM", columnDefinition = "NUMBER", length = 7)
+    private Integer linkCngsNum;
+
+    @ApiModelProperty("정보제공구간 원활 개수")  // Y NUMBER(7)
+    @Column(name = "IFSC_LIGT_NUM", columnDefinition = "NUMBER", length = 7)
+    private Integer ifscLigtNum;
+
+    @ApiModelProperty("정보제공구간 지체 개수")  // Y NUMBER(7)
+    @Column(name = "IFSC_DELY_NUM", columnDefinition = "NUMBER", length = 7)
+    private Integer ifscDelyNum;
+
+    @ApiModelProperty("정보제공구간 정체 개수")  // Y NUMBER(7)
+    @Column(name = "IFSC_CNGS_NUM", columnDefinition = "NUMBER", length = 7)
+    private Integer ifscCngsNum;
+
+    @ApiModelProperty("도로 원활 개수")  // Y NUMBER(7)
+    @Column(name = "ROAD_LIGT_NUM", columnDefinition = "NUMBER", length = 7)
+    private Integer roadLigtNum;
+
+    @ApiModelProperty("도로 지체 개수")  // Y NUMBER(7)
+    @Column(name = "ROAD_DELY_NUM", columnDefinition = "NUMBER", length = 7)
+    private Integer roadDelyNum;
+
+    @ApiModelProperty("도로 정체 개수")  // Y NUMBER(7)
+    @Column(name = "ROAD_CNGS_NUM", columnDefinition = "NUMBER", length = 7)
+    private Integer roadCngsNum;
+
+    @ApiModelProperty("VMS 정보제공구간 원활 개수")  // Y NUMBER(7)
+    @Column(name = "VMS_IFSC_LIGT_NUM", columnDefinition = "NUMBER", length = 7)
+    private Integer vmsIfscLigtNum;
+
+    @ApiModelProperty("VMS 정보제공구간 지체 개수")  // Y NUMBER(7)
+    @Column(name = "VMS_IFSC_DELY_NUM", columnDefinition = "NUMBER", length = 7)
+    private Integer vmsIfscDelyNum;
+
+    @ApiModelProperty("VMS 정보제공구간 정체 개수")  // Y NUMBER(7)
+    @Column(name = "VMS_IFSC_CNGS_NUM", columnDefinition = "NUMBER", length = 7)
+    private Integer vmsIfscCngsNum;
+
+    public TbTrfcPrcnStatDto toDto() {
+        TbTrfcPrcnStatDto dto = TbTrfcPrcnStatDto.builder()
+                .prcnDt(this.prcnDt)
+                .missNum(this.missNum)
+                .adjsNum(this.adjsNum)
+                .smthNum(this.smthNum)
+                .linkLigtNum(this.linkLigtNum)
+                .linkDelyNum(this.linkDelyNum)
+                .linkCngsNum(this.linkCngsNum)
+                .ifscLigtNum(this.ifscLigtNum)
+                .ifscDelyNum(this.ifscDelyNum)
+                .ifscCngsNum(this.ifscCngsNum)
+                .roadLigtNum(this.roadLigtNum)
+                .roadDelyNum(this.roadDelyNum)
+                .roadCngsNum(this.roadCngsNum)
+                .vmsIfscLigtNum(this.vmsIfscLigtNum)
+                .vmsIfscDelyNum(this.vmsIfscDelyNum)
+                .vmsIfscCngsNum(this.vmsIfscCngsNum)
+                .build();
+
+        return dto;
+    }
+
+    public TbTrfcPrcnStat(String prcnDt) {
+        this.prcnDt = prcnDt;
+    }
+
+    public void updateInfo(TbTrfcPrcnStatDto.TbTrfcPrcnStatUpdReq req) {
+        this.missNum = req.getMissNum();
+        this.adjsNum = req.getAdjsNum();
+        this.smthNum = req.getSmthNum();
+        this.linkLigtNum = req.getLinkLigtNum();
+        this.linkDelyNum = req.getLinkDelyNum();
+        this.linkCngsNum = req.getLinkCngsNum();
+        this.ifscLigtNum = req.getIfscLigtNum();
+        this.ifscDelyNum = req.getIfscDelyNum();
+        this.ifscCngsNum = req.getIfscCngsNum();
+        this.roadLigtNum = req.getRoadLigtNum();
+        this.roadDelyNum = req.getRoadDelyNum();
+        this.roadCngsNum = req.getRoadCngsNum();
+        this.vmsIfscLigtNum = req.getVmsIfscLigtNum();
+        this.vmsIfscDelyNum = req.getVmsIfscDelyNum();
+        this.vmsIfscCngsNum = req.getVmsIfscCngsNum();
+    }
+
+}

+ 0 - 14
src/main/java/com/its/api/op/repository/analysis/ClctResultMapper.java

@@ -1,14 +0,0 @@
-package com.its.api.op.repository.analysis;
-
-import com.its.api.op.model.dto.analysis.ClctResultDto;
-import org.apache.ibatis.annotations.Mapper;
-
-import java.util.List;
-import java.util.Map;
-
-@Mapper
-public interface ClctResultMapper {
-
-    List<ClctResultDto> findAllByDateRange(Map<String, String> param);
-
-}

+ 0 - 14
src/main/java/com/its/api/op/repository/analysis/PrcnResultMapper.java

@@ -1,14 +0,0 @@
-package com.its.api.op.repository.analysis;
-
-import com.its.api.op.model.dto.analysis.PrcnResultDto;
-import org.apache.ibatis.annotations.Mapper;
-
-import java.util.List;
-import java.util.Map;
-
-@Mapper
-public interface PrcnResultMapper {
-
-    List<PrcnResultDto> findAllByDateRange(Map<String, String> param);
-
-}

+ 0 - 13
src/main/java/com/its/api/op/repository/analysis/ReptCngsMapper.java

@@ -1,13 +0,0 @@
-package com.its.api.op.repository.analysis;
-
-import com.its.api.op.model.dto.analysis.ReptCngsDto;
-import org.apache.ibatis.annotations.Mapper;
-
-import java.util.List;
-import java.util.Map;
-
-@Mapper
-public interface ReptCngsMapper {
-
-    List<ReptCngsDto> findAllByDateRange(Map<String, String> param);
-}

+ 9 - 1
src/main/java/com/its/api/op/repository/ifsc/TbReptCngsSectRepository.java

@@ -13,10 +13,18 @@ import java.util.List;
 @Repository
 public interface TbReptCngsSectRepository extends JpaRepository<TbReptCngsSect, TbReptCngsSectKey>, JpaSpecificationExecutor<TbReptCngsSect> {
 
-    @Query( "select p from TbReptCngsSect p inner join fetch p.ifsc ifsc " +
+    @Query( "select p from TbReptCngsSect p inner join fetch p.ifsc ifsc inner join fetch ifsc.fromNode fn inner join fetch ifsc.toNode tn " +
             " where p.dcsnYn = :dcsnYn " +
             "   and p.cnfsStrtHm <= to_char(sysdate, 'HH24MI') " +
             "   and p.cnfsEndHm  >= to_char(sysdate, 'HH24MI') ")
     List<TbReptCngsSect> findAllCurrent(@Param("dcsnYn") String dcsnYn);
 
+    @Query("select p from TbReptCngsSect p inner join fetch p.ifsc ifsc inner join fetch ifsc.fromNode fn inner join fetch ifsc.toNode tn " +
+           "where p.statYm = :baseMn ")
+    List<TbReptCngsSect> findAllAnalByStatYm(String baseMn);
+
+    @Query( "select p from TbReptCngsSect p inner join fetch p.ifsc ifsc inner join fetch ifsc.fromNode fn inner join fetch ifsc.toNode tn " +
+            " where p.statYm = :baseMn " +
+            "   and p.dayTypeCd = :dayTypeCd")
+    List<TbReptCngsSect> findAllAnalByDayTypeCdAndStatYm(String dayTypeCd, String baseMn);
 }

+ 108 - 0
src/main/java/com/its/api/op/repository/link/TbClctSystSttsHsRepository.java

@@ -0,0 +1,108 @@
+package com.its.api.op.repository.link;
+
+import com.its.api.op.model.dto.analysis.TbClctSystSttsHsClctInf;
+import com.its.api.op.model.dto.analysis.TbClctSystSttsHsPrcnInf;
+import com.its.api.op.model.entity.link.TbClctSystSttsHs;
+import com.its.api.op.model.entity.link.TbClctSystSttsHsKey;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface TbClctSystSttsHsRepository extends JpaRepository<TbClctSystSttsHs, TbClctSystSttsHsKey>, JpaSpecificationExecutor<TbClctSystSttsHs> {
+
+    @Query( "SELECT p.prcnDt AS prcnDt, " +
+            "      nvl(sum(case when p.clctSystCd = 'OPER01' then p.clctNum end), 0) AS oper01, " +
+            "      nvl(sum(case when p.clctSystCd = 'UTIS01' then p.clctNum end), 0) AS utis01, " +
+            "      nvl(sum(case when p.clctSystCd = 'UTIS02' then p.clctNum end), 0) AS utis02, " +
+            "      nvl(sum(case when p.clctSystCd = 'VDS01'  then p.clctNum end), 0) AS vds01,  " +
+            "      nvl(sum(case when p.clctSystCd = 'MOCT01' then p.clctNum end), 0) AS moct01  " +
+            "  FROM TbClctSystSttsHs p " +
+            " WHERE p.prcnDt BETWEEN :fromDt AND :toDt " +
+            " GROUP BY p.prcnDt")
+    List<TbClctSystSttsHsClctInf> findAllClctSystByDateRange(String fromDt, String toDt);
+
+    @Query(value =
+            "SELECT a.prcnDt as prcnDt, " +
+            "       a.oper01 as oper01, " +
+            "       a.utis01 as utis01, " +
+            "       a.utis02 as utis02, " +
+            "       a.vds01  as vds01, " +
+            "       a.moct01 as moct01, " +
+            "       b.missNum as missNum, " +
+            "       b.adjsNum as adjsNum, " +
+            "       b.smthNum as smthNum " +
+            "  FROM " +
+            "(SELECT p.PRCN_DT AS prcnDt, " +
+            "      nvl(sum(case when p.CLCT_SYST_CD = 'OPER01' then p.FUSN_NUM end), 0) AS oper01, " +
+            "      nvl(sum(case when p.CLCT_SYST_CD = 'UTIS01' then p.FUSN_NUM end), 0) AS utis01, " +
+            "      nvl(sum(case when p.CLCT_SYST_CD = 'UTIS02' then p.FUSN_NUM end), 0) AS utis02, " +
+            "      nvl(sum(case when p.CLCT_SYST_CD = 'VDS01'  then p.FUSN_NUM end), 0) AS vds01,  " +
+            "      nvl(sum(case when p.CLCT_SYST_CD = 'MOCT01' then p.FUSN_NUM end), 0) AS moct01  " +
+            "  FROM TB_CLCT_SYST_STTS_HS p " +
+            " WHERE p.PRCN_DT BETWEEN :fromDt AND :toDt " +
+            " GROUP BY p.PRCN_DT ) a, " +
+            "(SELECT t.PRCN_DT as prcnDt, t.MISS_NUM as missNum, t.ADJS_NUM as adjsNum, t.SMTH_NUM as smthNum " +
+            "  FROM TB_TRFC_PRCN_STAT t " +
+            " WHERE t.PRCN_DT BETWEEN :fromDt AND :toDt ) b " +
+            " WHERE a.prcnDt = b.prcnDt ",
+            nativeQuery = true
+    )
+    List<TbClctSystSttsHsPrcnInf> findAllPrcnSystByDateRange(String fromDt, String toDt);
+
+/*
+    @Query( "SELECT a.prcnDt as prcnDt, " +
+            "       a.oper01 as oper01, " +
+            "       a.utis01 as utis01, " +
+            "       a.utis02 as utis02, " +
+            "       a.vds01  as vds01, " +
+            "       a.moct01 as moct01, " +
+            "       b.missNum as missNum, " +
+            "       b.adjsNum as adjsNum, " +
+            "       b.smthNum as smthNum " +
+            "  FROM " +
+            "(SELECT p.prcnDt AS prcnDt, " +
+            "      nvl(sum(case when p.clctSystCd = 'OPER01' then p.fusnNum end), 0) AS oper01, " +
+            "      nvl(sum(case when p.clctSystCd = 'UTIS01' then p.fusnNum end), 0) AS utis01, " +
+            "      nvl(sum(case when p.clctSystCd = 'UTIS02' then p.fusnNum end), 0) AS utis02, " +
+            "      nvl(sum(case when p.clctSystCd = 'VDS01'  then p.fusnNum end), 0) AS vds01,  " +
+            "      nvl(sum(case when p.clctSystCd = 'MOCT01' then p.fusnNum end), 0) AS moct01  " +
+            "  FROM TbClctSystSttsHs p " +
+            " WHERE p.prcnDt BETWEEN :fromDt AND :toDt " +
+            " GROUP BY p.prcnDt ) a, " +
+            "(SELECT t.prcnDt as prcnDt, t.missNum as missNum, t.adjsNum as adjsNum, t.smthNum as smthNum " +
+            "  FROM TbTrfcPrcnStat t " +
+            " WHERE t.prcnDt BETWEEN :fromDt AND :toDt ) b " +
+            " WHERE a.prcnDt = b.prcnDt "
+    )
+*/
+
+    /*@Query(value =
+            "SELECT a.prcnDt as prcnDt, " +
+                    "       a.oper01 as oper01, " +
+                    "       a.utis01 as utis01, " +
+                    "       a.utis02 as utis02, " +
+                    "       a.vds01  as vds01, " +
+                    "       a.moct01 as moct01, " +
+                    "       b.missNum as missNum, " +
+                    "       b.adjsNum as adjsNum, " +
+                    "       b.smthNum as smthNum " +
+                    "  FROM " +
+                    "(SELECT p.PRCN_DT AS prcnDt, " +
+                    "      nvl(sum(case when p.CLCT_SYST_CD = 'OPER01' then p.FUSN_NUM end), 0) AS oper01, " +
+                    "      nvl(sum(case when p.CLCT_SYST_CD = 'UTIS01' then p.FUSN_NUM end), 0) AS utis01, " +
+                    "      nvl(sum(case when p.CLCT_SYST_CD = 'UTIS02' then p.FUSN_NUM end), 0) AS utis02, " +
+                    "      nvl(sum(case when p.CLCT_SYST_CD = 'VDS01'  then p.FUSN_NUM end), 0) AS vds01,  " +
+                    "      nvl(sum(case when p.CLCT_SYST_CD = 'MOCT01' then p.FUSN_NUM end), 0) AS moct01  " +
+                    "  FROM TB_CLCT_SYST_STTS_HS p " +
+                    " WHERE p.PRCN_DT BETWEEN :fromDt AND :toDt " +
+                    " GROUP BY p.PRCN_DT ) a, " +
+                    "(SELECT t.PRCN_DT as prcnDt, t.MISS_NUM as missNum, t.ADJS_NUM as adjsNum, t.SMTH_NUM as smthNum " +
+                    "  FROM TB_TRFC_PRCN_STAT t " +
+                    " WHERE t.PRCN_DT BETWEEN :fromDt AND :toDt ) b " +
+                    " WHERE a.prcnDt = b.prcnDt ", nativeQuery = true
+*/
+}

+ 11 - 0
src/main/java/com/its/api/op/repository/link/TbTrfcPrcnStatRepository.java

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

+ 0 - 27
src/main/java/com/its/api/op/service/analysis/ClctResultService.java

@@ -1,27 +0,0 @@
-package com.its.api.op.service.analysis;
-
-import com.its.api.op.model.dto.analysis.ClctResultDto;
-import com.its.api.op.repository.analysis.ClctResultMapper;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-@Slf4j
-@RequiredArgsConstructor
-@Service
-public class ClctResultService {
-
-    private final ClctResultMapper mapper;
-
-    public List<ClctResultDto> findAllByDateRange(String fromDt, String toDt) {
-        Map<String, String> param = new HashMap<>();
-        param.put("FROM_DT", fromDt);
-        param.put("TO_DT", toDt);
-        return this.mapper.findAllByDateRange(param);
-    }
-
-}

+ 0 - 27
src/main/java/com/its/api/op/service/analysis/PrcnResultService.java

@@ -1,27 +0,0 @@
-package com.its.api.op.service.analysis;
-
-import com.its.api.op.model.dto.analysis.PrcnResultDto;
-import com.its.api.op.repository.analysis.PrcnResultMapper;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-@Slf4j
-@RequiredArgsConstructor
-@Service
-public class PrcnResultService {
-
-    private final PrcnResultMapper mapper;
-
-    public List<PrcnResultDto> findAllByDateRange(String fromDt, String toDt) {
-        Map<String, String> param = new HashMap<>();
-        param.put("FROM_DT", fromDt);
-        param.put("TO_DT", toDt);
-        return this.mapper.findAllByDateRange(param);
-    }
-
-}

+ 0 - 51
src/main/java/com/its/api/op/service/analysis/ReptCngsService.java

@@ -1,51 +0,0 @@
-package com.its.api.op.service.analysis;
-
-import com.its.api.op.global.CodeManager;
-import com.its.api.op.model.dto.analysis.ReptCngsDto;
-import com.its.api.op.model.dto.code.TbCmmnCdDto;
-import com.its.api.op.repository.analysis.ReptCngsMapper;
-import com.its.api.op.service.code.TbCmmnCdService;
-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.HashMap;
-import java.util.List;
-import java.util.Map;
-
-@Slf4j
-@RequiredArgsConstructor
-@Service
-public class ReptCngsService {
-
-    private final ReptCngsMapper mapper;
-    private final TbCmmnCdService cmmnCdService;
-
-    public List<ReptCngsDto> findAllByDateRange(String DAY_TYPE_CD, String BASE_MN) {
-        Map<String, String> param = new HashMap<>();
-        param.put("DAY_TYPE_CD", DAY_TYPE_CD);
-        param.put("BASE_MN", BASE_MN);
-        return this.mapper.findAllByDateRange(param);
-    }
-
-    // 반복정체 요일 유형 코드 목록 조회
-    @Transactional(readOnly = true)
-    public List<ReptCngsDto.ReptCngsDayType> findAllDayType() {
-        List<ReptCngsDto.ReptCngsDayType> result = new ArrayList<>();
-        TbCmmnCdDto allEntity = TbCmmnCdDto.builder().cmmnCd("ALL").cmmnCdKorNm("전체").build();
-        ReptCngsDto.ReptCngsDayType all = new ReptCngsDto.ReptCngsDayType(allEntity);
-        result.add(all);
-
-        List<TbCmmnCdDto> data = this.cmmnCdService.findAllByCmmnClsfCd(CodeManager.DAY_TYPE_CD);
-        if (data != null) {
-	        data.forEach(obj -> {
-	            if (obj.getUseYn().equals("Y")) {
-	                result.add(new ReptCngsDto.ReptCngsDayType(obj));
-	            }
-	        });
-	    }
-        return result;
-    }
-}

+ 51 - 0
src/main/java/com/its/api/op/service/ifsc/TbReptCngsSectService.java

@@ -1,10 +1,13 @@
 package com.its.api.op.service.ifsc;
 
+import com.its.api.op.global.CodeManager;
+import com.its.api.op.model.dto.code.TbCmmnCdDto;
 import com.its.api.op.model.dto.ifsc.TbReptCngsSectDto;
 import com.its.api.op.model.dto.ifsc.TbReptCngsSectKeyDto;
 import com.its.api.op.model.entity.ifsc.TbReptCngsSect;
 import com.its.api.op.model.entity.ifsc.TbReptCngsSectKey;
 import com.its.api.op.repository.ifsc.TbReptCngsSectRepository;
+import com.its.api.op.service.code.TbCmmnCdService;
 import com.its.api.utils.ItsUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -22,6 +25,7 @@ import java.util.Optional;
 public class TbReptCngsSectService {
 
     private final TbReptCngsSectRepository repo;
+    private final TbCmmnCdService cmmnCdService;
 
     // 데이터 1건 조회, 없으면 exception
     private TbReptCngsSect requireOne(TbReptCngsSectKey id) {
@@ -126,4 +130,51 @@ public class TbReptCngsSectService {
         }
         return ids;
     }
+
+
+    /**
+     * 반복정체구간 분석: 반복정체 요일 유형 코드 목록 조회
+     * @return
+     */
+    @Transactional(readOnly = true)
+    public List<TbReptCngsSectDto.ReptCngsDayType> findAllDayType() {
+        List<TbReptCngsSectDto.ReptCngsDayType> result = new ArrayList<>();
+        TbCmmnCdDto allEntity = TbCmmnCdDto.builder().cmmnCd("ALL").cmmnCdKorNm("전체").build();
+        TbReptCngsSectDto.ReptCngsDayType all = new TbReptCngsSectDto.ReptCngsDayType(allEntity);
+        result.add(all);
+
+        List<TbCmmnCdDto> data = this.cmmnCdService.findAllByCmmnClsfCd(CodeManager.DAY_TYPE_CD);
+        if (data != null) {
+            data.forEach(obj -> {
+                if (obj.getUseYn().equals("Y")) {
+                    result.add(new TbReptCngsSectDto.ReptCngsDayType(obj));
+                }
+            });
+        }
+        return result;
+    }
+
+    /**
+     * 반복정체구간 분석: 반복정체구간 이력 조회
+     * @param dayTypeCd
+     * @param baseMn
+     * @return
+     */
+    public List<TbReptCngsSectDto> findAllAnalByDayTypeCdAndStatYm(String dayTypeCd, String baseMn) {
+        List<TbReptCngsSectDto> result = new ArrayList<>();
+
+        List<TbReptCngsSect> data = null;
+        if ("ALL".equals(dayTypeCd)) {
+            data = this.repo.findAllAnalByStatYm(baseMn);
+        }
+        else {
+            data = this.repo.findAllAnalByDayTypeCdAndStatYm(dayTypeCd, baseMn);
+        }
+        if (data != null) {
+            data.forEach(obj -> {
+                result.add(obj.toDto());
+            });
+        }
+        return result;
+    }
 }

+ 108 - 0
src/main/java/com/its/api/op/service/link/TbClctSystSttsHsService.java

@@ -0,0 +1,108 @@
+package com.its.api.op.service.link;
+
+import com.its.api.op.model.dto.analysis.TbClctSystSttsHsClctDto;
+import com.its.api.op.model.dto.analysis.TbClctSystSttsHsClctInf;
+import com.its.api.op.model.dto.analysis.TbClctSystSttsHsPrcnDto;
+import com.its.api.op.model.dto.analysis.TbClctSystSttsHsPrcnInf;
+import com.its.api.op.model.dto.link.TbClctSystSttsHsDto;
+import com.its.api.op.model.entity.link.TbClctSystSttsHs;
+import com.its.api.op.model.entity.link.TbClctSystSttsHsKey;
+import com.its.api.op.repository.link.TbClctSystSttsHsRepository;
+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 TbClctSystSttsHsService {
+
+    private final TbClctSystSttsHsRepository repo;
+
+    // 데이터 1건 조회, 없으면 exception
+    private TbClctSystSttsHs requireOne(TbClctSystSttsHsKey id) {
+        return this.repo.findById(id)
+                .orElseThrow(() -> new NoSuchElementException("데이터가 존재하지 않습니다: " + id));
+    }
+
+    // 전체 데이터 조회
+    @Transactional(readOnly = true)
+    public List<TbClctSystSttsHsDto> findAll() {
+        List<TbClctSystSttsHsDto> result = new ArrayList<>();
+        List<TbClctSystSttsHs> data = this.repo.findAll();
+        for (TbClctSystSttsHs entity : data) {
+            result.add(entity.toDto());
+        }
+        return result;
+    }
+
+    // 데이터 1건 조회(기존 데이터가 반드시 존재해야 함)
+    @Transactional(readOnly = true)
+    public TbClctSystSttsHsDto findById(TbClctSystSttsHsKey id) {
+        TbClctSystSttsHs entity = requireOne(id);
+        return entity.toDto();
+    }
+
+    /**
+     * 04.분석-1.교통정보수집결과분석
+     * @param fromDt
+     * @param toDt
+     * @return
+     */
+    @Transactional(readOnly = true)
+    public List<TbClctSystSttsHsClctDto> findAllClctSystByDateRange(String fromDt, String toDt) {
+        List<TbClctSystSttsHsClctDto> result = new ArrayList<>();
+        List<TbClctSystSttsHsClctInf> data = this.repo.findAllClctSystByDateRange(fromDt, toDt);
+        if (data != null) {
+            data.forEach(obj -> {
+                TbClctSystSttsHsClctDto dto = TbClctSystSttsHsClctDto.builder()
+                        .prcnDt(obj.getPrcnDt())
+                        .oper01(obj.getOper01().intValue())
+                        .moct01(obj.getMoct01().intValue())
+                        .utis01(obj.getUtis01().intValue())
+                        .utis02(obj.getUtis02().intValue())
+                        .vds01(obj.getVds01().intValue())
+                        .build();
+                dto.makeClctTot();
+                result.add(dto);
+            });
+        }
+        return result;
+    }
+
+
+    /**
+     * 04.분석-2.교통정보가공결과분석
+     * @param fromDt
+     * @param toDt
+     * @return
+     */
+    @Transactional(readOnly = true)
+    public List<TbClctSystSttsHsPrcnDto> findAllPrcsSystByDateRange(String fromDt, String toDt) {
+        List<TbClctSystSttsHsPrcnDto> result = new ArrayList<>();
+        List<TbClctSystSttsHsPrcnInf> data = this.repo.findAllPrcnSystByDateRange(fromDt, toDt);
+        if (data != null) {
+            data.forEach(obj -> {
+                TbClctSystSttsHsPrcnDto dto = TbClctSystSttsHsPrcnDto.builder()
+                        .prcnDt(obj.getPrcnDt())
+                        .oper01(obj.getOper01().intValue())
+                        .moct01(obj.getMoct01().intValue())
+                        .utis01(obj.getUtis01().intValue())
+                        .utis02(obj.getUtis02().intValue())
+                        .vds01(obj.getVds01().intValue())
+                        .missNum(obj.getMissNum().intValue())
+                        .adjsNum(obj.getAdjsNum().intValue())
+                        .smthNum(obj.getSmthNum().intValue())
+                        .build();
+                dto.makeClctTot();
+                result.add(dto);
+            });
+        }
+        return result;
+    }
+}

+ 46 - 0
src/main/java/com/its/api/op/service/link/TbTrfcPrcnStatService.java

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

+ 0 - 37
src/main/resources/mybatis/mapper/analysis/ClctResultMapper.xml

@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-
-<mapper namespace="com.its.api.op.repository.analysis.ClctResultMapper">
-
-<!--
-    // 수집시스템 조회
-    SELECT CLCT_SYST_CD, CLCT_SYST_NM
-    FROM TB_CLCT_SYST_STUP
-    WHERE USE_YN = 'Y'
--->
-
-    <select id="findAllByDateRange" parameterType="java.util.HashMap" resultType="com.its.api.op.model.dto.analysis.ClctResultDto">
-        SELECT PRCN_DT
-               ,SUM(OPER01)+SUM(VDS01)+SUM(MOCT01)+SUM(UTIS01)+SUM(UTIS02) AS CLCT_TOT
-               ,SUM(OPER01) AS OPER01
-               ,SUM(VDS01)  AS VDS01
-               ,SUM(MOCT01) AS MOCT01
-               ,SUM(UTIS01) AS UTIS01
-               ,SUM(UTIS02) AS UTIS02
-        FROM (SELECT A.PRCN_DT
-                     ,DECODE(A.CLCT_SYST_CD, 'OPER01', A.CLCT_NUM, 0) AS OPER01
-                     ,DECODE(A.CLCT_SYST_CD, 'VDS01',  A.CLCT_NUM, 0) AS VDS01
-                     ,DECODE(A.CLCT_SYST_CD, 'MOCT01', A.CLCT_NUM, 0) AS MOCT01
-                     ,DECODE(A.CLCT_SYST_CD, 'UTIS01', A.CLCT_NUM, 0) AS UTIS01
-                     ,DECODE(A.CLCT_SYST_CD, 'UTIS02', A.CLCT_NUM, 0) AS UTIS02
-              FROM TB_CLCT_SYST_STTS_HS A
-              WHERE A.PRCN_DT BETWEEN #{FROM_DT} AND #{TO_DT}
-                AND A.CLCT_SYST_CD IN (SELECT CLCT_SYST_CD
-                                       FROM TB_CLCT_SYST_STUP
-                                       WHERE USE_YN = 'Y')
-             )
-        GROUP BY PRCN_DT
-        ORDER BY PRCN_DT
-    </select>
-
-</mapper>

+ 0 - 45
src/main/resources/mybatis/mapper/analysis/PrcnResultMapper.xml

@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-
-<mapper namespace="com.its.api.op.repository.analysis.PrcnResultMapper">
-
-<!--
-    // 수집시스템 조회
-    SELECT CLCT_SYST_CD, CLCT_SYST_NM
-    FROM TB_CLCT_SYST_STUP
-    WHERE USE_YN = 'Y'
--->
-
-    <select id="findAllByDateRange" parameterType="java.util.HashMap" resultType="com.its.api.op.model.dto.analysis.PrcnResultDto">
-        SELECT A.PRCN_DT
-               ,A.OPER01+A.VDS01+A.MOCT01+A.UTIS01+A.UTIS02+B.MISS_NUM AS PRCN_TOT
-               ,A.OPER01
-               ,A.VDS01
-               ,A.MOCT01
-               ,A.UTIS01
-               ,A.UTIS02
-               ,B.MISS_NUM
-               ,B.ADJS_NUM
-               ,B.SMTH_NUM
-        FROM (SELECT A.PRCN_DT
-                    ,MAX(DECODE(A.CLCT_SYST_CD, 'OPER01', A.FUSN_NUM, 0)) AS OPER01
-                    ,MAX(DECODE(A.CLCT_SYST_CD, 'VDS01',  A.FUSN_NUM, 0)) AS VDS01
-                    ,MAX(DECODE(A.CLCT_SYST_CD, 'MOCT01', A.FUSN_NUM, 0)) AS MOCT01
-                    ,MAX(DECODE(A.CLCT_SYST_CD, 'UTIS01', A.FUSN_NUM, 0)) AS UTIS01
-                    ,MAX(DECODE(A.CLCT_SYST_CD, 'UTIS02', A.FUSN_NUM, 0)) AS UTIS02
-              FROM TB_CLCT_SYST_STTS_HS A
-              WHERE A.PRCN_DT BETWEEN #{FROM_DT} AND #{TO_DT}
-                AND A.CLCT_SYST_CD IN (SELECT CLCT_SYST_CD
-                                       FROM TB_CLCT_SYST_STUP
-                                       WHERE USE_YN = 'Y')
-              GROUP BY A.PRCN_DT
-             ) A,
-             (SELECT PRCN_DT, MISS_NUM, ADJS_NUM, SMTH_NUM
-              FROM TB_TRFC_PRCN_STAT
-              WHERE PRCN_DT BETWEEN #{FROM_DT} AND #{TO_DT}
-             ) B
-        WHERE A.PRCN_DT = B.PRCN_DT
-        ORDER BY A.PRCN_DT
-    </select>
-
-</mapper>

+ 0 - 32
src/main/resources/mybatis/mapper/analysis/ReptCngsMapper.xml

@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-
-<mapper namespace="com.its.api.op.repository.analysis.ReptCngsMapper">
-
-    <select id="findAllByDateRange" parameterType="java.util.HashMap" resultType="com.its.api.op.model.dto.analysis.ReptCngsDto">
-        SELECT (SELECT '['||CMMN_CD||'] ' || CMMN_CD_KOR_NM
-                  FROM TB_CMMN_CD
-                 WHERE CMMN_CLSF_CD = 'DTW'
-                   AND CMMN_CD      = A.DAY_TYPE_CD
-               ) AS DAY_TYPE_NM,
-               A.STAT_YM, A.IFSC_ID,
-               B.IFSC_NM, B.STRT_NM, B.END_NM, B.SECT_LNGT,
-               A.CNFS_STRT_HM, A.CNFS_END_HM, A.AVRG_SPED, A.AVRG_TRVL_HH,
-               A.DCSN_YN, A.CRTN_YMD,
-               (SELECT CMMN_CD_KOR_NM
-                FROM TB_CMMN_CD
-                WHERE CMMN_CLSF_CD = 'RCS'
-                  AND CMMN_CD      = A.REPT_CNGS_SECT_ORGN_CD
-               ) AS REPT_CNGS_SECT_ORGN_NM
-        FROM TB_REPT_CNGS_SECT A,
-             TB_IFSC           B
-        WHERE B.DEL_YN      = 'N'
-          AND A.IFSC_ID     = B.IFSC_ID
-          AND A.STAT_YM     = #{BASE_MN}
-        <if test="DAY_TYPE_CD != 'ALL'">
-          AND A.DAY_TYPE_CD = #{DAY_TYPE_CD}
-        </if>
-        ORDER BY A.CNFS_STRT_HM
-    </select>
-
-</mapper>