Browse Source

traffic statistics update

shjung 3 years ago
parent
commit
ceb574f440
38 changed files with 1029 additions and 898 deletions
  1. 1 1
      src/main/java/com/its/api/op/controller/parking/ParkingLotController.java
  2. 243 111
      src/main/java/com/its/api/op/controller/statistics/TrafficStatisticsController.java
  3. 1 4
      src/main/java/com/its/api/op/controller/vds/VdsDtctTfvlStatController.java
  4. 53 46
      src/main/java/com/its/api/op/controller/vds/VdsDtctTrafStatController.java
  5. 4 0
      src/main/java/com/its/api/op/model/dto/vds/TbVdsDtct15mStatDto.java
  6. 4 0
      src/main/java/com/its/api/op/model/dto/vds/TbVdsDtctDdStatDto.java
  7. 4 0
      src/main/java/com/its/api/op/model/dto/vds/TbVdsDtctHhStatDto.java
  8. 3 0
      src/main/java/com/its/api/op/model/dto/vds/TbVdsDtctMnStatDto.java
  9. 0 46
      src/main/java/com/its/api/op/model/dto/vds/VdsDtctStatDto.java
  10. 0 15
      src/main/java/com/its/api/op/model/entity/vds/IVdsDtctStat.java
  11. 4 0
      src/main/java/com/its/api/op/model/entity/vds/TbVdsDtct15mStat.java
  12. 4 0
      src/main/java/com/its/api/op/model/entity/vds/TbVdsDtctDdStat.java
  13. 4 0
      src/main/java/com/its/api/op/model/entity/vds/TbVdsDtctHhStat.java
  14. 4 0
      src/main/java/com/its/api/op/model/entity/vds/TbVdsDtctMnStat.java
  15. 0 81
      src/main/java/com/its/api/op/model/entity/vds/VdsDtctStat15M.java
  16. 0 81
      src/main/java/com/its/api/op/model/entity/vds/VdsDtctStatDD.java
  17. 0 81
      src/main/java/com/its/api/op/model/entity/vds/VdsDtctStatHH.java
  18. 0 19
      src/main/java/com/its/api/op/model/entity/vds/VdsDtctStatKey.java
  19. 0 81
      src/main/java/com/its/api/op/model/entity/vds/VdsDtctStatMN.java
  20. 7 8
      src/main/java/com/its/api/op/repository/statistics/TrafficHourStatisticsMapper.java
  21. 16 17
      src/main/java/com/its/api/op/repository/statistics/TrafficTermStatisticsMapper.java
  22. 6 0
      src/main/java/com/its/api/op/repository/vds/TbVdsDtct15mStatRepository.java
  23. 6 0
      src/main/java/com/its/api/op/repository/vds/TbVdsDtctDdStatRepository.java
  24. 6 0
      src/main/java/com/its/api/op/repository/vds/TbVdsDtctHhStatRepository.java
  25. 6 0
      src/main/java/com/its/api/op/repository/vds/TbVdsDtctMnStatRepository.java
  26. 0 14
      src/main/java/com/its/api/op/repository/vds/VdsDtctStat15MRepository.java
  27. 0 14
      src/main/java/com/its/api/op/repository/vds/VdsDtctStatDDRepository.java
  28. 0 14
      src/main/java/com/its/api/op/repository/vds/VdsDtctStatHHRepository.java
  29. 0 14
      src/main/java/com/its/api/op/repository/vds/VdsDtctStatMNRepository.java
  30. 50 13
      src/main/java/com/its/api/op/service/statistics/TrafficHourStatisticsService.java
  31. 52 12
      src/main/java/com/its/api/op/service/statistics/TrafficSpecStatisticsService.java
  32. 92 31
      src/main/java/com/its/api/op/service/statistics/TrafficTermStatisticsService.java
  33. 0 67
      src/main/java/com/its/api/op/service/vds/VdsDtctStatService.java
  34. 2 0
      src/main/java/com/its/api/op/service/vds/VdsDtctTfvlStatService.java
  35. 78 0
      src/main/java/com/its/api/op/service/vds/VdsDtctTrafStatService.java
  36. 24 24
      src/main/resources/mybatis/mapper/statistics/TrafficHourStatisticsMapper.xml
  37. 45 45
      src/main/resources/mybatis/mapper/statistics/TrafficTermStatisticsMapper.xml
  38. 310 59
      src/main/resources/mybatis/mapper/vds/VdsDtctTfvlStatMapper.xml

+ 1 - 1
src/main/java/com/its/api/op/controller/parking/ParkingLotController.java

@@ -11,7 +11,7 @@ import org.springframework.web.bind.annotation.*;
 import javax.validation.Valid;
 import java.util.List;
 
-@Api(tags = "19.주차장-1.주차장관리-01.정보관리")
+@Api(tags = "19.주차장-1.주차장관리-0.정보관리")
 @Validated
 @RestController
 @RequiredArgsConstructor

+ 243 - 111
src/main/java/com/its/api/op/controller/statistics/TrafficStatisticsController.java

@@ -1,14 +1,13 @@
 package com.its.api.op.controller.statistics;
 
-import com.its.api.op.model.dto.statistics.TrafficHourParam;
-import com.its.api.op.model.dto.statistics.TrafficSpecParam;
 import com.its.api.op.model.dto.statistics.TrafficStatDto;
-import com.its.api.op.model.dto.statistics.TrafficTermParam;
 import com.its.api.op.service.statistics.TrafficHourStatisticsService;
 import com.its.api.op.service.statistics.TrafficSpecStatisticsService;
 import com.its.api.op.service.statistics.TrafficTermStatisticsService;
+import com.its.api.utils.ItsUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -33,249 +32,357 @@ public class TrafficStatisticsController {
     @ApiOperation(value = "기간검색-링크 15분(TB_LINK_15M_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/term/link-15m", produces = {"application/json; charset=utf8"})
     public List<TrafficStatDto> findAllLink15MTerm(
+            @ApiParam(name = "LINK_ID", value = "링크 ID", example = "2280168600", required = true)
             @RequestParam String LINK_ID,
+            @ApiParam(name = "FROM_DT", value = "조회시작시각(YYYYMMDDHH24)", example = "2021120100", required = true)
             @RequestParam String FROM_DT,
+            @ApiParam(name = "TO_DT", value = "조회종료시각(YYYYMMDDHH24)", example = "2021120102", required = true)
             @RequestParam String TO_DT) {
 
-        TrafficTermParam cond = new TrafficTermParam(LINK_ID, FROM_DT, TO_DT);
-        return this.serviceTerm.findAllLink15M(cond);
+        String fromDt = FROM_DT + "0000";
+        String toDt = TO_DT + "5959";
+        return this.serviceTerm.findAllLink15M(fromDt, toDt, LINK_ID);
     }
 
     @ApiOperation(value = "기간검색-링크 시간(TB_LINK_HH_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/term/link-hh", produces = {"application/json; charset=utf8"})
     public List<TrafficStatDto> findAllLinkHHTerm(
+            @ApiParam(name = "LINK_ID", value = "링크 ID", example = "2280168600", required = true)
             @RequestParam String LINK_ID,
+            @ApiParam(name = "FROM_DT", value = "조회시작시각(YYYYMMDDHH24)", example = "2021120100", required = true)
             @RequestParam String FROM_DT,
+            @ApiParam(name = "TO_DT", value = "조회종료시각(YYYYMMDDHH24)", example = "2021120102", required = true)
             @RequestParam String TO_DT) {
 
-        TrafficTermParam cond = new TrafficTermParam(LINK_ID, FROM_DT, TO_DT);
-        return this.serviceTerm.findAllLinkHH(cond);
+        String fromDt = FROM_DT + "0000";
+        String toDt = TO_DT + "5959";
+        return this.serviceTerm.findAllLinkHH(fromDt, toDt, LINK_ID);
     }
 
     @ApiOperation(value = "기간검색-링크 일(TB_LINK_DD_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/term/link-dd", produces = {"application/json; charset=utf8"})
     public List<TrafficStatDto> findAllLinkDDTerm(
+            @ApiParam(name = "LINK_ID", value = "링크 ID", example = "2280168600", required = true)
             @RequestParam String LINK_ID,
+            @ApiParam(name = "FROM_DT", value = "조회시작일(YYYYMMDD)", example = "20211201", required = true)
             @RequestParam String FROM_DT,
+            @ApiParam(name = "TO_DT", value = "조회종료일(YYYYMMDD)", example = "20211201", required = true)
             @RequestParam String TO_DT) {
 
-        TrafficTermParam cond = new TrafficTermParam(LINK_ID, FROM_DT, TO_DT);
-        return this.serviceTerm.findAllLinkDD(cond);
+        String fromDt = FROM_DT + "000000";
+        String toDt = TO_DT + "235959";
+        return this.serviceTerm.findAllLinkDD(fromDt, toDt, LINK_ID);
     }
 
     @ApiOperation(value = "기간검색-링크 월(TB_LINK_MN_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/term/link-mn", produces = {"application/json; charset=utf8"})
     public List<TrafficStatDto> findAllLinkMNTerm(
+            @ApiParam(name = "LINK_ID", value = "링크 ID", example = "2280168600", required = true)
             @RequestParam String LINK_ID,
+            @ApiParam(name = "FROM_DT", value = "조회시작월(YYYYMM)", example = "202112", required = true)
             @RequestParam String FROM_DT,
+            @ApiParam(name = "TO_DT", value = "조회종료월(YYYYMM)", example = "202112", required = true)
             @RequestParam String TO_DT) {
 
-        TrafficTermParam cond = new TrafficTermParam(LINK_ID, FROM_DT, TO_DT);
-        return this.serviceTerm.findAllLinkMN(cond);
+        String fromDt = FROM_DT + "01000000";
+        String toDt = ItsUtils.getLastDayOfMonth(TO_DT) + "235959";
+        return this.serviceTerm.findAllLinkMN(fromDt, toDt, LINK_ID);
     }
 
     @ApiOperation(value = "기간검색-링크 년(TB_LINK_YY_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/term/link-yy", produces = {"application/json; charset=utf8"})
     public List<TrafficStatDto> findAllLinkYYTerm(
+            @ApiParam(name = "LINK_ID", value = "링크 ID", example = "2280168600", required = true)
             @RequestParam String LINK_ID,
+            @ApiParam(name = "FROM_DT", value = "조회시작연도(YYYY)", example = "2021", required = true)
             @RequestParam String FROM_DT,
+            @ApiParam(name = "TO_DT", value = "조회종료연도(YYYY)", example = "2021", required = true)
             @RequestParam String TO_DT) {
 
-        TrafficTermParam cond = new TrafficTermParam(LINK_ID, FROM_DT, TO_DT);
-        return this.serviceTerm.findAllLinkYY(cond);
+        String fromDt = FROM_DT + "0101000000";
+        String toDt = TO_DT + "1231235959";
+        return this.serviceTerm.findAllLinkYY(fromDt, toDt, LINK_ID);
     }
 
-    //////////// 서비스 링크 기간검색
-    @ApiOperation(value = "기간검색-서비스링크 15분(TB_IFSC_15M_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
+    //////////// 정보제공 링크 기간검색
+    @ApiOperation(value = "기간검색-정보제공구간 15분(TB_IFSC_15M_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/term/ifsc-15m", produces = {"application/json; charset=utf8"})
     public List<TrafficStatDto> findAllIfsc15MTerm(
+            @ApiParam(name = "IFSC_ID", value = "정보제공구간 ID", example = "2200000259", required = true)
             @RequestParam String IFSC_ID,
+            @ApiParam(name = "FROM_DT", value = "조회시작시각(YYYYMMDDHH24)", example = "2021120100", required = true)
             @RequestParam String FROM_DT,
+            @ApiParam(name = "TO_DT", value = "조회종료시각(YYYYMMDDHH24)", example = "2021120102", required = true)
             @RequestParam String TO_DT) {
 
-        TrafficTermParam cond = new TrafficTermParam(IFSC_ID, FROM_DT, TO_DT);
-        return this.serviceTerm.findAllIfsc15M(cond);
+        String fromDt = FROM_DT + "0000";
+        String toDt = TO_DT + "5959";
+        return this.serviceTerm.findAllIfsc15M(fromDt, toDt, IFSC_ID);
     }
 
-    @ApiOperation(value = "기간검색-서비스링크 시간(TB_IFSC_HH_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
+    @ApiOperation(value = "기간검색-정보제공구간 시간(TB_IFSC_HH_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/term/ifsc-hh", produces = {"application/json; charset=utf8"})
     public List<TrafficStatDto> findAllIfscHHTerm(
+            @ApiParam(name = "IFSC_ID", value = "정보제공구간 ID", example = "2200000259", required = true)
             @RequestParam String IFSC_ID,
+            @ApiParam(name = "FROM_DT", value = "조회시작시각(YYYYMMDDHH24)", example = "2021120100", required = true)
             @RequestParam String FROM_DT,
+            @ApiParam(name = "TO_DT", value = "조회종료시각(YYYYMMDDHH24)", example = "2021120102", required = true)
             @RequestParam String TO_DT) {
 
-        TrafficTermParam cond = new TrafficTermParam(IFSC_ID, FROM_DT, TO_DT);
-        return this.serviceTerm.findAllIfscHH(cond);
+        String fromDt = FROM_DT + "0000";
+        String toDt = TO_DT + "5959";
+        return this.serviceTerm.findAllIfscHH(fromDt, toDt, IFSC_ID);
     }
 
-    @ApiOperation(value = "기간검색-서비스링크 일(TB_IFSC_DD_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
+    @ApiOperation(value = "기간검색-정보제공구간 일(TB_IFSC_DD_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/term/ifsc-dd", produces = {"application/json; charset=utf8"})
     public List<TrafficStatDto> findAllIfscDDTerm(
+            @ApiParam(name = "IFSC_ID", value = "정보제공구간 ID", example = "2200000259", required = true)
             @RequestParam String IFSC_ID,
+            @ApiParam(name = "FROM_DT", value = "조회시작일(YYYYMMDD)", example = "20211201", required = true)
             @RequestParam String FROM_DT,
+            @ApiParam(name = "TO_DT", value = "조회종료일(YYYYMMDD)", example = "20211201", required = true)
             @RequestParam String TO_DT) {
 
-        TrafficTermParam cond = new TrafficTermParam(IFSC_ID, FROM_DT, TO_DT);
-        return this.serviceTerm.findAllIfscDD(cond);
+        String fromDt = FROM_DT + "000000";
+        String toDt = TO_DT + "235959";
+        return this.serviceTerm.findAllIfscDD(fromDt, toDt, IFSC_ID);
     }
 
-    @ApiOperation(value = "기간검색-서비스링크 월(TB_IFSC_MN_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
+    @ApiOperation(value = "기간검색-정보제공구간 월(TB_IFSC_MN_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/term/ifsc-mn", produces = {"application/json; charset=utf8"})
     public List<TrafficStatDto> findAllIfscMNTerm(
+            @ApiParam(name = "IFSC_ID", value = "정보제공구간 ID", example = "2200000259", required = true)
             @RequestParam String IFSC_ID,
+            @ApiParam(name = "FROM_DT", value = "조회시작월(YYYYMM)", example = "202112", required = true)
             @RequestParam String FROM_DT,
+            @ApiParam(name = "TO_DT", value = "조회종료월(YYYYMM)", example = "202112", required = true)
             @RequestParam String TO_DT) {
 
-        TrafficTermParam cond = new TrafficTermParam(IFSC_ID, FROM_DT, TO_DT);
-        return this.serviceTerm.findAllIfscMN(cond);
+        String fromDt = FROM_DT + "01000000";
+        String toDt = ItsUtils.getLastDayOfMonth(TO_DT) + "235959";
+        return this.serviceTerm.findAllIfscMN(fromDt, toDt, IFSC_ID);
     }
 
-    @ApiOperation(value = "기간검색-서비스링크 년(TB_IFSC_YY_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
+    @ApiOperation(value = "기간검색-정보제공구간 년(TB_IFSC_YY_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/term/ifsc-yy", produces = {"application/json; charset=utf8"})
     public List<TrafficStatDto> findAllIfscYYTerm(
+            @ApiParam(name = "IFSC_ID", value = "정보제공구간 ID", example = "2200000259", required = true)
             @RequestParam String IFSC_ID,
+            @ApiParam(name = "FROM_DT", value = "조회시작연도(YYYY)", example = "2021", required = true)
             @RequestParam String FROM_DT,
+            @ApiParam(name = "TO_DT", value = "조회종료연도(YYYY)", example = "2021", required = true)
             @RequestParam String TO_DT) {
 
-        TrafficTermParam cond = new TrafficTermParam(IFSC_ID, FROM_DT, TO_DT);
-        return this.serviceTerm.findAllIfscYY(cond);
+        String fromDt = FROM_DT + "0101000000";
+        String toDt = TO_DT + "1231235959";
+        return this.serviceTerm.findAllIfscYY(fromDt, toDt, IFSC_ID);
     }
 
     //////////// 도로 기간검색
     @ApiOperation(value = "기간검색-도로 15분(TB_ROAD_15M_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/term/road-15m", produces = {"application/json; charset=utf8"})
     public List<TrafficStatDto> findAllRoad15MTerm(
+            @ApiParam(name = "ROAD_ID", value = "도로 ID", example = "3200000023", required = true)
             @RequestParam String ROAD_ID,
+            @ApiParam(name = "FROM_DT", value = "조회시작시각(YYYYMMDDHH24)", example = "2021120100", required = true)
             @RequestParam String FROM_DT,
+            @ApiParam(name = "TO_DT", value = "조회종료시각(YYYYMMDDHH24)", example = "2021120102", required = true)
             @RequestParam String TO_DT) {
 
-        TrafficTermParam cond = new TrafficTermParam(ROAD_ID, FROM_DT, TO_DT);
-        return this.serviceTerm.findAllRoad15M(cond);
+        String fromDt = FROM_DT + "0000";
+        String toDt = TO_DT + "5959";
+        return this.serviceTerm.findAllRoad15M(fromDt, toDt, ROAD_ID);
     }
 
     @ApiOperation(value = "기간검색-도로 시간(TB_ROAD_HH_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/term/road-hh", produces = {"application/json; charset=utf8"})
     public List<TrafficStatDto> findAllRoadHHTerm(
+            @ApiParam(name = "ROAD_ID", value = "도로 ID", example = "3200000023", required = true)
             @RequestParam String ROAD_ID,
+            @ApiParam(name = "FROM_DT", value = "조회시작시각(YYYYMMDDHH24)", example = "2021120100", required = true)
             @RequestParam String FROM_DT,
+            @ApiParam(name = "TO_DT", value = "조회종료시각(YYYYMMDDHH24)", example = "2021120102", required = true)
             @RequestParam String TO_DT) {
 
-        TrafficTermParam cond = new TrafficTermParam(ROAD_ID, FROM_DT, TO_DT);
-        return this.serviceTerm.findAllRoadHH(cond);
+        String fromDt = FROM_DT + "0000";
+        String toDt = TO_DT + "5959";
+        return this.serviceTerm.findAllRoadHH(fromDt, toDt, ROAD_ID);
     }
 
     @ApiOperation(value = "기간검색-도로 일(TB_ROAD_DD_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/term/road-dd", produces = {"application/json; charset=utf8"})
     public List<TrafficStatDto> findAllRoadDDTerm(
+            @ApiParam(name = "ROAD_ID", value = "도로 ID", example = "3200000023", required = true)
             @RequestParam String ROAD_ID,
+            @ApiParam(name = "FROM_DT", value = "조회시작일(YYYYMMDD)", example = "20211201", required = true)
             @RequestParam String FROM_DT,
+            @ApiParam(name = "TO_DT", value = "조회종료일(YYYYMMDD)", example = "20211201", required = true)
             @RequestParam String TO_DT) {
 
-        TrafficTermParam cond = new TrafficTermParam(ROAD_ID, FROM_DT, TO_DT);
-        return this.serviceTerm.findAllRoadDD(cond);
+        String fromDt = FROM_DT + "000000";
+        String toDt = TO_DT + "235959";
+        return this.serviceTerm.findAllRoadDD(fromDt, toDt, ROAD_ID);
     }
 
     @ApiOperation(value = "기간검색-도로 월(TB_ROAD_MN_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/term/road-mn", produces = {"application/json; charset=utf8"})
     public List<TrafficStatDto> findAllRoadMNTerm(
+            @ApiParam(name = "ROAD_ID", value = "도로 ID", example = "3200000023", required = true)
             @RequestParam String ROAD_ID,
+            @ApiParam(name = "FROM_DT", value = "조회시작월(YYYYMM)", example = "202112", required = true)
             @RequestParam String FROM_DT,
+            @ApiParam(name = "TO_DT", value = "조회종료월(YYYYMM)", example = "202112", required = true)
             @RequestParam String TO_DT) {
 
-        TrafficTermParam cond = new TrafficTermParam(ROAD_ID, FROM_DT, TO_DT);
-        return this.serviceTerm.findAllRoadMN(cond);
+        String fromDt = FROM_DT + "01000000";
+        String toDt = ItsUtils.getLastDayOfMonth(TO_DT) + "235959";
+        return this.serviceTerm.findAllRoadMN(fromDt, toDt, ROAD_ID);
     }
 
     @ApiOperation(value = "기간검색-도로 년(TB_ROAD_YY_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/term/road-yy", produces = {"application/json; charset=utf8"})
     public List<TrafficStatDto> findAllRoadYYTerm(
+            @ApiParam(name = "ROAD_ID", value = "도로 ID", example = "3200000023", required = true)
             @RequestParam String ROAD_ID,
+            @ApiParam(name = "FROM_DT", value = "조회시작연도(YYYY)", example = "2021", required = true)
             @RequestParam String FROM_DT,
+            @ApiParam(name = "TO_DT", value = "조회종료연도(YYYY)", example = "2021", required = true)
             @RequestParam String TO_DT) {
 
-        TrafficTermParam cond = new TrafficTermParam(ROAD_ID, FROM_DT, TO_DT);
-        return this.serviceTerm.findAllRoadYY(cond);
+        String fromDt = FROM_DT + "0101000000";
+        String toDt = TO_DT + "1231235959";
+        return this.serviceTerm.findAllRoadYY(fromDt, toDt, ROAD_ID);
     }
 
     //////////// 링크 시간대검색
     @ApiOperation(value = "시간대검색-링크 15분(TB_LINK_15M_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/hour/link-15m", produces = {"application/json; charset=utf8"})
     public List<TrafficStatDto> findAllLink15MHour(
+            @ApiParam(name = "LINK_ID", value = "링크 ID", example = "2280168600", required = true)
             @RequestParam String LINK_ID,
+            @ApiParam(name = "FROM_DT", value = "조회시작일(YYYYMMDD)", example = "20211201", required = true)
             @RequestParam String FROM_DT,
+            @ApiParam(name = "TO_DT", value = "조회종료일(YYYYMMDD)", example = "20211201", required = true)
             @RequestParam String TO_DT,
-            @RequestParam String FROM_HM,
-            @RequestParam String TO_HM) {
-
-        TrafficHourParam cond = new TrafficHourParam(LINK_ID, FROM_DT, TO_DT, FROM_HM, TO_HM);
-        return this.serviceHour.findAllLink15M(cond);
+            @ApiParam(name = "FROM_HH", value = "시작시간대(HH24)", example = "00", required = true)
+            @RequestParam String FROM_HH,
+            @ApiParam(name = "TO_HH", value = "종료시간대(HH24)", example = "23", required = true)
+            @RequestParam String TO_HH) {
+
+        String fromDt = FROM_DT + "000000";
+        String toDt = TO_DT + "235959";
+        String fromHh = FROM_HH + "0000";
+        String toHh = TO_HH + "5959";
+        return this.serviceHour.findAllLink15M(fromDt, toDt, fromHh, toHh, LINK_ID);
     }
 
     @ApiOperation(value = "시간대검색-링크 시간(TB_LINK_HH_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/hour/link-hh", produces = {"application/json; charset=utf8"})
     public List<TrafficStatDto> findAllLinkHHHour(
+            @ApiParam(name = "LINK_ID", value = "링크 ID", example = "2280168600", required = true)
             @RequestParam String LINK_ID,
+            @ApiParam(name = "FROM_DT", value = "조회시작일(YYYYMMDD)", example = "20211201", required = true)
             @RequestParam String FROM_DT,
+            @ApiParam(name = "TO_DT", value = "조회종료일(YYYYMMDD)", example = "20211201", required = true)
             @RequestParam String TO_DT,
-            @RequestParam String FROM_HM,
-            @RequestParam String TO_HM) {
-
-        TrafficHourParam cond = new TrafficHourParam(LINK_ID, FROM_DT, TO_DT, FROM_HM, TO_HM);
-        return this.serviceHour.findAllLinkHH(cond);
+            @ApiParam(name = "FROM_HH", value = "시작시간대(HH24)", example = "00", required = true)
+            @RequestParam String FROM_HH,
+            @ApiParam(name = "TO_HH", value = "종료시간대(HH24)", example = "23", required = true)
+            @RequestParam String TO_HH) {
+
+        String fromDt = FROM_DT + "000000";
+        String toDt = TO_DT + "235959";
+        String fromHh = FROM_HH + "0000";
+        String toHh = TO_HH + "5959";
+        return this.serviceHour.findAllLinkHH(fromDt, toDt, fromHh, toHh, LINK_ID);
     }
 
-    //////////// 서비스 링크 시간대검색
-    @ApiOperation(value = "시간대검색-서비스링크 15분(TB_IFSC_15M_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
+    //////////// 정보제공 링크 시간대검색
+    @ApiOperation(value = "시간대검색-정보제공구간 15분(TB_IFSC_15M_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/hour/ifsc-15m", produces = {"application/json; charset=utf8"})
     public List<TrafficStatDto> findAllIfsc15MHour(
+            @ApiParam(name = "IFSC_ID", value = "정보제공구간 ID", example = "2200000259", required = true)
             @RequestParam String IFSC_ID,
+            @ApiParam(name = "FROM_DT", value = "조회시작일(YYYYMMDD)", example = "20211201", required = true)
             @RequestParam String FROM_DT,
+            @ApiParam(name = "TO_DT", value = "조회종료일(YYYYMMDD)", example = "20211201", required = true)
             @RequestParam String TO_DT,
-            @RequestParam String FROM_HM,
-            @RequestParam String TO_HM) {
-
-        TrafficHourParam cond = new TrafficHourParam(IFSC_ID, FROM_DT, TO_DT, FROM_HM, TO_HM);
-        return this.serviceHour.findAllIfsc15M(cond);
+            @ApiParam(name = "FROM_HH", value = "시작시간대(HH24)", example = "00", required = true)
+            @RequestParam String FROM_HH,
+            @ApiParam(name = "TO_HH", value = "종료시간대(HH24)", example = "23", required = true)
+            @RequestParam String TO_HH) {
+
+        String fromDt = FROM_DT + "000000";
+        String toDt = TO_DT + "235959";
+        String fromHh = FROM_HH + "0000";
+        String toHh = TO_HH + "5959";
+        return this.serviceHour.findAllIfsc15M(fromDt, toDt, fromHh, toHh, IFSC_ID);
     }
 
-    @ApiOperation(value = "시간대검색-서비스링크 시간(TB_IFSC_HH_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
+    @ApiOperation(value = "시간대검색-정보제공구간 시간(TB_IFSC_HH_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/hour/ifsc-hh", produces = {"application/json; charset=utf8"})
     public List<TrafficStatDto> findAllIfscHHHour(
+            @ApiParam(name = "IFSC_ID", value = "정보제공구간 ID", example = "2200000259", required = true)
             @RequestParam String IFSC_ID,
+            @ApiParam(name = "FROM_DT", value = "조회시작일(YYYYMMDD)", example = "20211201", required = true)
             @RequestParam String FROM_DT,
+            @ApiParam(name = "TO_DT", value = "조회종료일(YYYYMMDD)", example = "20211201", required = true)
             @RequestParam String TO_DT,
-            @RequestParam String FROM_HM,
-            @RequestParam String TO_HM) {
-
-        TrafficHourParam cond = new TrafficHourParam(IFSC_ID, FROM_DT, TO_DT, FROM_HM, TO_HM);
-        return this.serviceHour.findAllIfscHH(cond);
+            @ApiParam(name = "FROM_HH", value = "시작시간대(HH24)", example = "00", required = true)
+            @RequestParam String FROM_HH,
+            @ApiParam(name = "TO_HH", value = "종료시간대(HH24)", example = "23", required = true)
+            @RequestParam String TO_HH) {
+
+        String fromDt = FROM_DT + "000000";
+        String toDt = TO_DT + "235959";
+        String fromHh = FROM_HH + "0000";
+        String toHh = TO_HH + "5959";
+        return this.serviceHour.findAllIfscHH(fromDt, toDt, fromHh, toHh, IFSC_ID);
     }
 
     //////////// 도로 시간대검색
     @ApiOperation(value = "시간대검색-도로 15분(TB_ROAD_15M_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/hour/road-15m", produces = {"application/json; charset=utf8"})
     public List<TrafficStatDto> findAllRoad15MHour(
+            @ApiParam(name = "ROAD_ID", value = "도로 ID", example = "3200000023", required = true)
             @RequestParam String ROAD_ID,
+            @ApiParam(name = "FROM_DT", value = "조회시작일(YYYYMMDD)", example = "20211201", required = true)
             @RequestParam String FROM_DT,
+            @ApiParam(name = "TO_DT", value = "조회종료일(YYYYMMDD)", example = "20211201", required = true)
             @RequestParam String TO_DT,
-            @RequestParam String FROM_HM,
-            @RequestParam String TO_HM) {
-
-        TrafficHourParam cond = new TrafficHourParam(ROAD_ID, FROM_DT, TO_DT, FROM_HM, TO_HM);
-        return this.serviceHour.findAllRoad15M(cond);
+            @ApiParam(name = "FROM_HH", value = "시작시간대(HH24)", example = "00", required = true)
+            @RequestParam String FROM_HH,
+            @ApiParam(name = "TO_HH", value = "종료시간대(HH24)", example = "23", required = true)
+            @RequestParam String TO_HH) {
+
+        String fromDt = FROM_DT + "000000";
+        String toDt = TO_DT + "235959";
+        String fromHh = FROM_HH + "0000";
+        String toHh = TO_HH + "5959";
+        return this.serviceHour.findAllRoad15M(fromDt, toDt, fromHh, toHh, ROAD_ID);
     }
 
     @ApiOperation(value = "시간대검색-도로 시간(TB_ROAD_HH_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/hour/road-hh", produces = {"application/json; charset=utf8"})
     public List<TrafficStatDto> findAllRoadHHHour(
+            @ApiParam(name = "ROAD_ID", value = "도로 ID", example = "3200000023", required = true)
             @RequestParam String ROAD_ID,
+            @ApiParam(name = "FROM_DT", value = "조회시작일(YYYYMMDD)", example = "20211201", required = true)
             @RequestParam String FROM_DT,
+            @ApiParam(name = "TO_DT", value = "조회종료일(YYYYMMDD)", example = "20211201", required = true)
             @RequestParam String TO_DT,
-            @RequestParam String FROM_HM,
-            @RequestParam String TO_HM) {
-
-        TrafficHourParam cond = new TrafficHourParam(ROAD_ID, FROM_DT, TO_DT, FROM_HM, TO_HM);
-        return this.serviceHour.findAllRoadHH(cond);
+            @ApiParam(name = "FROM_HH", value = "시작시간대(HH24)", example = "00", required = true)
+            @RequestParam String FROM_HH,
+            @ApiParam(name = "TO_HH", value = "종료시간대(HH24)", example = "23", required = true)
+            @RequestParam String TO_HH) {
+
+        String fromDt = FROM_DT + "000000";
+        String toDt = TO_DT + "235959";
+        String fromHh = FROM_HH + "0000";
+        String toHh = TO_HH + "5959";
+        return this.serviceHour.findAllRoadHH(fromDt, toDt, fromHh, toHh, ROAD_ID);
     }
 
     //////////// 링크 지정시각검색
@@ -283,75 +390,100 @@ public class TrafficStatisticsController {
     @ApiOperation(value = "지정시각검색-링크 15분(TB_LINK_15M_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/spec/link-15m", produces = {"application/json; charset=utf8"})
     public List<TrafficStatDto> findAllLink15MSpec(
+            @ApiParam(name = "LINK_ID", value = "링크 ID", example = "2280168600", required = true)
             @RequestParam String LINK_ID,
-            @RequestParam String FROM_HM,
-            @RequestParam String TO_HM,
-            @RequestParam List<String> statDays) {
-
-        TrafficSpecParam cond = new TrafficSpecParam(LINK_ID, FROM_HM, TO_HM, statDays);
-        return this.serviceSpec.findAllLink15M(cond);
+            @ApiParam(name = "FROM_HH", value = "시작시간대(HH24)", example = "00", required = true)
+            @RequestParam String FROM_HH,
+            @ApiParam(name = "TO_HH", value = "종료시간대(HH24)", example = "23", required = true)
+            @RequestParam String TO_HH,
+            @ApiParam(name = "day", value = "지정일 목록", example = "[20210107,20210107]", required = true)
+            @RequestParam List<String> day) {
+
+        String fromHh = FROM_HH + "0000";
+        String toHh = TO_HH + "5959";
+        return this.serviceSpec.findAllLink15M(fromHh, toHh, day, LINK_ID);
     }
 
     @ApiOperation(value = "지정시각검색-링크 시간(TB_LINK_HH_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/spec/link-hh", produces = {"application/json; charset=utf8"})
     public List<TrafficStatDto> findAllLinkHHSpec(
+            @ApiParam(name = "LINK_ID", value = "링크 ID", example = "2280168600", required = true)
             @RequestParam String LINK_ID,
-            @RequestParam String FROM_HM,
-            @RequestParam String TO_HM,
-            @RequestParam List<String> statDays) {
-
-        TrafficSpecParam cond = new TrafficSpecParam(LINK_ID, FROM_HM, TO_HM, statDays);
-        return this.serviceSpec.findAllLinkHH(cond);
+            @ApiParam(name = "FROM_HH", value = "시작시간대(HH24)", example = "00", required = true)
+            @RequestParam String FROM_HH,
+            @ApiParam(name = "TO_HH", value = "종료시간대(HH24)", example = "23", required = true)
+            @RequestParam String TO_HH,
+            @RequestParam List<String> day) {
+
+        String fromHh = FROM_HH + "0000";
+        String toHh = TO_HH + "5959";
+        return this.serviceSpec.findAllLinkHH(fromHh, toHh, day, LINK_ID);
     }
 
-    //////////// 서비스 링크 지정시각검색
-    @ApiOperation(value = "지정시각검색-서비스링크 15분(TB_IFSC_15M_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
+    //////////// 정보제공 링크 지정시각검색
+    @ApiOperation(value = "지정시각검색-정보제공구간 15분(TB_IFSC_15M_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/spec/ifsc-15m", produces = {"application/json; charset=utf8"})
     public List<TrafficStatDto> findAllIfsc15MSpec(
+            @ApiParam(name = "IFSC_ID", value = "정보제공구간 ID", example = "2200000259", required = true)
             @RequestParam String IFSC_ID,
-            @RequestParam String FROM_HM,
-            @RequestParam String TO_HM,
-            @RequestParam List<String> statDays) {
-
-        TrafficSpecParam cond = new TrafficSpecParam(IFSC_ID, FROM_HM, TO_HM, statDays);
-        return this.serviceSpec.findAllIfsc15M(cond);
+            @ApiParam(name = "FROM_HH", value = "시작시간대(HH24)", example = "00", required = true)
+            @RequestParam String FROM_HH,
+            @ApiParam(name = "TO_HH", value = "종료시간대(HH24)", example = "23", required = true)
+            @RequestParam String TO_HH,
+            @RequestParam List<String> day) {
+
+        String fromHh = FROM_HH + "0000";
+        String toHh = TO_HH + "5959";
+        return this.serviceSpec.findAllIfsc15M(fromHh, toHh, day, IFSC_ID);
     }
 
-    @ApiOperation(value = "지정시각검색-서비스링크 시간(TB_IFSC_HH_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
+    @ApiOperation(value = "지정시각검색-정보제공구간 시간(TB_IFSC_HH_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/spec/ifsc-hh", produces = {"application/json; charset=utf8"})
     public List<TrafficStatDto> findAllIfscHHSpec(
+            @ApiParam(name = "IFSC_ID", value = "정보제공구간 ID", example = "2200000259", required = true)
             @RequestParam String IFSC_ID,
-            @RequestParam String FROM_HM,
-            @RequestParam String TO_HM,
-            @RequestParam List<String> statDays) {
-
-        TrafficSpecParam cond = new TrafficSpecParam(IFSC_ID, FROM_HM, TO_HM, statDays);
-        return this.serviceSpec.findAllIfscHH(cond);
+            @ApiParam(name = "FROM_HH", value = "시작시간대(HH24)", example = "00", required = true)
+            @RequestParam String FROM_HH,
+            @ApiParam(name = "TO_HH", value = "종료시간대(HH24)", example = "23", required = true)
+            @RequestParam String TO_HH,
+            @RequestParam List<String> day) {
+
+        String fromHh = FROM_HH + "0000";
+        String toHh = TO_HH + "5959";
+        return this.serviceSpec.findAllIfscHH(fromHh, toHh, day, IFSC_ID);
     }
 
     //////////// 도로 지정시각검색
     @ApiOperation(value = "지정시각검색-도로 15분(TB_ROAD_15M_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/spec/road-15m", produces = {"application/json; charset=utf8"})
     public List<TrafficStatDto> findAllRoad15MSpec(
+            @ApiParam(name = "ROAD_ID", value = "도로 ID", example = "3200000023", required = true)
             @RequestParam String ROAD_ID,
-            @RequestParam String FROM_HM,
-            @RequestParam String TO_HM,
-            @RequestParam List<String> statDays) {
-
-        TrafficSpecParam cond = new TrafficSpecParam(ROAD_ID, FROM_HM, TO_HM, statDays);
-        return this.serviceSpec.findAllRoad15M(cond);
+            @ApiParam(name = "FROM_HH", value = "시작시간대(HH24)", example = "00", required = true)
+            @RequestParam String FROM_HH,
+            @ApiParam(name = "TO_HH", value = "종료시간대(HH24)", example = "23", required = true)
+            @RequestParam String TO_HH,
+            @RequestParam List<String> day) {
+
+        String fromHh = FROM_HH + "0000";
+        String toHh = TO_HH + "5959";
+        return this.serviceSpec.findAllRoad15M(fromHh, toHh, day, ROAD_ID);
     }
 
     @ApiOperation(value = "지정시각검색-도로 시간(TB_ROAD_HH_STAT)", response = TrafficStatDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/spec/road-hh", produces = {"application/json; charset=utf8"})
     public List<TrafficStatDto> findAllRoadHHSpec(
+            @ApiParam(name = "ROAD_ID", value = "도로 ID", example = "3200000023", required = true)
             @RequestParam String ROAD_ID,
-            @RequestParam String FROM_HM,
-            @RequestParam String TO_HM,
-            @RequestParam List<String> statDays) {
-
-        TrafficSpecParam cond = new TrafficSpecParam(ROAD_ID, FROM_HM, TO_HM, statDays);
-        return this.serviceSpec.findAllRoadHH(cond);
+            @ApiParam(name = "FROM_HH", value = "시작시간대(HH24)", example = "00", required = true)
+            @RequestParam String FROM_HH,
+            @ApiParam(name = "TO_HH", value = "종료시간대(HH24)", example = "23", required = true)
+            @RequestParam String TO_HH,
+            @RequestParam List<String> day) {
+
+        String fromHh = FROM_HH + "0000";
+        String toHh = TO_HH + "5959";
+        return this.serviceSpec.findAllRoadHH(fromHh, toHh, day, ROAD_ID);
     }
 
 }

+ 1 - 4
src/main/java/com/its/api/op/controller/vds/VdsDtctTfvlStatController.java

@@ -35,7 +35,6 @@ public class VdsDtctTfvlStatController {
 
         String FROM_DT = STAT_DAY + "000000";
         String TO_DT = STAT_DAY + "235959";
-
         return this.service.findAllHourStatByDateRange(FROM_DT, TO_DT);
     }
 
@@ -52,20 +51,18 @@ public class VdsDtctTfvlStatController {
 
         String fromDt = STAT_MONTH + "01000000";
         String toDt = ItsUtils.getLastDayOfMonth(STAT_MONTH) + "235959";
-
         return this.service.findAllDayStatByDateRange(fromDt, toDt, FROM_HM, TO_HM);
     }
 
     @ApiOperation(value = "월별 통계조회(TB_VDS_DTCT_MN_STAT)", response = VdsDtctTfvlMonthDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/mn", produces = {"application/json; charset=utf8"})
     public List<VdsDtctTfvlMonthDto> findAllMonthStatByDateRange(
-            @ApiParam(name = "STAT_YEAR", value = "통계월(YYYYMM)", example = "202112", required = true)
+            @ApiParam(name = "STAT_YEAR", value = "통계년(YYYY)", example = "2021", required = true)
             @RequestParam String STAT_YEAR
     ) {
 
         String fromDt = STAT_YEAR + "01000000";
         String toDt = STAT_YEAR + "12000000";
-
         return this.service.findAllMonthStatByDateRange(fromDt, toDt);
     }
 

+ 53 - 46
src/main/java/com/its/api/op/controller/vds/VdsDtctTrafStatController.java

@@ -1,23 +1,21 @@
 package com.its.api.op.controller.vds;
 
-import com.its.api.op.model.entity.vds.VdsDtctStatDD;
-import com.its.api.op.model.entity.vds.VdsDtctStatMN;
-import com.its.api.op.service.vds.VdsDtctStatService;
-import com.its.api.op.model.dto.vds.VdsDtctStatDto;
-import com.its.api.op.model.entity.vds.VdsDtctStat15M;
-import com.its.api.op.model.entity.vds.VdsDtctStatHH;
+import com.its.api.op.model.dto.vds.TbVdsDtct15mStatDto;
+import com.its.api.op.model.dto.vds.TbVdsDtctDdStatDto;
+import com.its.api.op.model.dto.vds.TbVdsDtctHhStatDto;
+import com.its.api.op.model.dto.vds.TbVdsDtctMnStatDto;
+import com.its.api.op.service.vds.VdsDtctTrafStatService;
+import com.its.api.utils.ItsUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.ArrayList;
 import java.util.List;
 
 @Slf4j
@@ -27,57 +25,66 @@ import java.util.List;
 @Api(tags = "13.VDS-3.VDS 통계조회-1.검지기 소통정보 통계")
 public class VdsDtctTrafStatController {
 
-    private final VdsDtctStatService service;
+    private final VdsDtctTrafStatService service;
 
-    @ApiOperation(value = "15분 통계조회(TB_VDS_DTCT_15M_STAT)", response = VdsDtctStatDto.VdsDtctStatInfo.class)
+    @ApiOperation(value = "15분 통계조회(TB_VDS_DTCT_15M_STAT)", response = TbVdsDtct15mStatDto.class)
     @GetMapping(value = "/15m", produces = {"application/json; charset=utf8"})
-    public ResponseEntity<List<VdsDtctStatDto.VdsDtctStatInfo>> findAll15M(
-            @RequestParam String FROM_DT, @RequestParam String TO_DT, @RequestParam List<String> id
+    public List<TbVdsDtct15mStatDto> findAll15M(
+            @ApiParam(name = "FROM_DT", value = "조회시작시각(YYYYMMDDHH24)", example = "2021120100", required = true)
+            @RequestParam String FROM_DT,
+            @ApiParam(name = "TO_DT", value = "조회종료시각(YYYYMMDDHH24)", example = "2021120102", required = true)
+            @RequestParam String TO_DT,
+            @ApiParam(name = "id", value = "검지기 ID 목록", example = "[00010001,00010002]", required = true)
+            @RequestParam List<String> id
     ) {
-        List<VdsDtctStatDto.VdsDtctStatInfo> result = new ArrayList<>();
-        List<VdsDtctStat15M> data = this.service.findAll15M(FROM_DT, TO_DT, id);
-        for (VdsDtctStat15M obj : data) {
-            result.add(new VdsDtctStatDto.VdsDtctStatInfo(obj));
-        }
-        return new ResponseEntity<>(result, HttpStatus.OK);
+        String fromDt = FROM_DT + "0000";
+        String toDt = TO_DT + "5959";
+        return this.service.findAll15M(fromDt, toDt, id);
     }
 
-    @ApiOperation(value = "시간 통계조회(TB_VDS_DTCT_HH_STAT)", response = VdsDtctStatDto.VdsDtctStatInfo.class)
+    @ApiOperation(value = "시간 통계조회(TB_VDS_DTCT_HH_STAT)", response = TbVdsDtctHhStatDto.class)
     @GetMapping(value = "/hh", produces = {"application/json; charset=utf8"})
-    public ResponseEntity<List<VdsDtctStatDto.VdsDtctStatInfo>> findAllHH(
-            @RequestParam String FROM_DT, @RequestParam String TO_DT, @RequestParam List<String> id
+    public List<TbVdsDtctHhStatDto> findAllHH(
+            @ApiParam(name = "FROM_DT", value = "조회시작시각(YYYYMMDDHH24)", example = "2021120100", required = true)
+            @RequestParam String FROM_DT,
+            @ApiParam(name = "TO_DT", value = "조회종료시각(YYYYMMDDHH24)", example = "2021120102", required = true)
+            @RequestParam String TO_DT,
+            @ApiParam(name = "id", value = "검지기 ID 목록", example = "[00010001,00010002]", required = true)
+            @RequestParam List<String> id
     ) {
-        List<VdsDtctStatDto.VdsDtctStatInfo> result = new ArrayList<>();
-        List<VdsDtctStatHH> data = this.service.findAllHH(FROM_DT, TO_DT, id);
-        for (VdsDtctStatHH obj : data) {
-            result.add(new VdsDtctStatDto.VdsDtctStatInfo(obj));
-        }
-        return new ResponseEntity<>(result, HttpStatus.OK);
+        String fromDt = FROM_DT + "0000";
+        String toDt = TO_DT + "5959";
+        return this.service.findAllHH(fromDt, toDt, id);
     }
 
-    @ApiOperation(value = "일 통계조회(TB_VDS_DTCT_DD_STAT)", response = VdsDtctStatDto.VdsDtctStatInfo.class)
+    @ApiOperation(value = "일 통계조회(TB_VDS_DTCT_DD_STAT)", response = TbVdsDtctDdStatDto.class)
     @GetMapping(value = "/dd", produces = {"application/json; charset=utf8"})
-    public ResponseEntity<List<VdsDtctStatDto.VdsDtctStatInfo>> findAllDD(
-            @RequestParam String FROM_DT, @RequestParam String TO_DT, @RequestParam List<String> id
+    public List<TbVdsDtctDdStatDto> findAllDD(
+            @ApiParam(name = "FROM_DT", value = "조회시작일(YYYYMMDD)", example = "20211201", required = true)
+            @RequestParam String FROM_DT,
+            @ApiParam(name = "TO_DT", value = "조회종료일(YYYYMMDD)", example = "20211201", required = true)
+            @RequestParam String TO_DT,
+            @ApiParam(name = "id", value = "검지기 ID 목록", example = "[00010001,00010002]", required = true)
+            @RequestParam List<String> id
     ) {
-        List<VdsDtctStatDto.VdsDtctStatInfo> result = new ArrayList<>();
-        List<VdsDtctStatDD> data = this.service.findAllDD(FROM_DT, TO_DT, id);
-        for (VdsDtctStatDD obj : data) {
-            result.add(new VdsDtctStatDto.VdsDtctStatInfo(obj));
-        }
-        return new ResponseEntity<>(result, HttpStatus.OK);
+        String fromDt = FROM_DT + "000000";
+        String toDt = TO_DT + "235959";
+        return this.service.findAllDD(fromDt, toDt, id);
     }
 
-    @ApiOperation(value = "월 통계조회(TB_VDS_DTCT_MN_STAT)", response = VdsDtctStatDto.VdsDtctStatInfo.class)
+    @ApiOperation(value = "월 통계조회(TB_VDS_DTCT_MN_STAT)", response = TbVdsDtctMnStatDto.class)
     @GetMapping(value = "/mn", produces = {"application/json; charset=utf8"})
-    public ResponseEntity<List<VdsDtctStatDto.VdsDtctStatInfo>> findAllMN(
-            @RequestParam String FROM_DT, @RequestParam String TO_DT, @RequestParam List<String> id
+    public List<TbVdsDtctMnStatDto> findAllMN(
+            @ApiParam(name = "FROM_DT", value = "조회시작월(YYYYMM)", example = "202112", required = true)
+            @RequestParam String FROM_DT,
+            @ApiParam(name = "TO_DT", value = "조회종료월(YYYYMM)", example = "202112", required = true)
+            @RequestParam String TO_DT,
+            @ApiParam(name = "id", value = "검지기 ID 목록", example = "[00010001,00010002]", required = true)
+            @RequestParam List<String> id
     ) {
-        List<VdsDtctStatDto.VdsDtctStatInfo> result = new ArrayList<>();
-        List<VdsDtctStatMN> data = this.service.findAllMN(FROM_DT, TO_DT, id);
-        for (VdsDtctStatMN obj : data) {
-            result.add(new VdsDtctStatDto.VdsDtctStatInfo(obj));
-        }
-        return new ResponseEntity<>(result, HttpStatus.OK);
+        //String fromDt = FROM_DT + "01000000";
+        String fromDt = FROM_DT + "00000000";
+        String toDt = ItsUtils.getLastDayOfMonth(TO_DT) + "235959";
+        return this.service.findAllMN(FROM_DT, TO_DT, id);
     }
 }

+ 4 - 0
src/main/java/com/its/api/op/model/dto/vds/TbVdsDtct15mStatDto.java

@@ -50,4 +50,8 @@ public class TbVdsDtct15mStatDto implements Serializable {
     private Double avrgLngt;
 
     // Code Description Field
+    @ApiModelProperty("VDS 검지기명")
+    @JsonProperty("vds_dtct_nm")
+    private String vdsDtctNm;
+
 }

+ 4 - 0
src/main/java/com/its/api/op/model/dto/vds/TbVdsDtctDdStatDto.java

@@ -50,4 +50,8 @@ public class TbVdsDtctDdStatDto implements Serializable {
     private Double avrgLngt;
 
     // Code Description Field
+    @ApiModelProperty("VDS 검지기명")
+    @JsonProperty("vds_dtct_nm")
+    private String vdsDtctNm;
+
 }

+ 4 - 0
src/main/java/com/its/api/op/model/dto/vds/TbVdsDtctHhStatDto.java

@@ -50,4 +50,8 @@ public class TbVdsDtctHhStatDto implements Serializable {
     private Double avrgLngt;
 
     // Code Description Field
+    @ApiModelProperty("VDS 검지기명")
+    @JsonProperty("vds_dtct_nm")
+    private String vdsDtctNm;
+
 }

+ 3 - 0
src/main/java/com/its/api/op/model/dto/vds/TbVdsDtctMnStatDto.java

@@ -50,5 +50,8 @@ public class TbVdsDtctMnStatDto implements Serializable {
     private Double avrgLngt;
 
     // Code Description Field
+    @ApiModelProperty("VDS 검지기명")
+    @JsonProperty("vds_dtct_nm")
+    private String vdsDtctNm;
 
 }

+ 0 - 46
src/main/java/com/its/api/op/model/dto/vds/VdsDtctStatDto.java

@@ -1,46 +0,0 @@
-package com.its.api.op.model.dto.vds;
-
-import com.its.api.op.model.entity.vds.IVdsDtctStat;
-import lombok.Getter;
-
-import java.io.Serializable;
-
-public class VdsDtctStatDto implements Serializable {
-
-    @Getter
-    public static class VdsDtctStatInfo {
-
-        private final String  DTCT_NMBR;          //	N	VARCHAR2(8)	    N			검지기 번호
-        private final String  STAT_DT;            //	N	VARCHAR2(14)	N			통계 일시
-        private final String  SYST_KIND_DVSN;     //	N	VARCHAR2(1)	    N			시스템 종류 구분
-
-        private final Integer TFVL;               //	N	NUMBER(6)	    Y	0		교통량
-        private final Double  AVRG_OCPY_RATE;     //	N	NUMBER(6,2)	    Y			평균 점유 율
-        private final Integer AVRG_SPED;          //	N	NUMBER(3)	    Y	0		속도
-        private final String  AVRG_HDWY;          //	N	VARCHAR2(6)	    Y			차두시간
-        private final Double  AVRG_LNGT;          //	N	NUMBER(5,1)	    Y			평균 길이
-
-        private final String  VDS_DTCT_NM;        //	N	VARCHAR2(40)	Y			VDS 검지기명
-
-        public VdsDtctStatInfo(IVdsDtctStat entity) {
-
-            this.DTCT_NMBR      = entity.getId();
-            this.STAT_DT        = entity.getStatDt();
-            this.SYST_KIND_DVSN = entity.getSystKindDvsn();
-            this.TFVL           = entity.getTfvl();
-            this.AVRG_OCPY_RATE = entity.getAvrgOcpyRate();
-            this.AVRG_SPED      = entity.getAvrgSped();
-            this.AVRG_HDWY      = entity.getAvrgHdw();
-            this.AVRG_LNGT      = entity.getAvrgLngt();
-
-            if (entity.getVdsDtct() != null) {
-                this.VDS_DTCT_NM = entity.getVdsDtct().getVdsDtctNm();
-            }
-            else {
-                this.VDS_DTCT_NM = "?";
-            }
-
-        }
-    }
-
-}

+ 0 - 15
src/main/java/com/its/api/op/model/entity/vds/IVdsDtctStat.java

@@ -1,15 +0,0 @@
-package com.its.api.op.model.entity.vds;
-
-public interface IVdsDtctStat {
-
-    String getId();
-    String getStatDt();
-    String getSystKindDvsn();
-    Integer getTfvl();
-    Integer getAvrgSped();
-    Double getAvrgOcpyRate();
-    String getAvrgHdw();
-    Double getAvrgLngt();
-    TbVdsDtct getVdsDtct();
-
-}

+ 4 - 0
src/main/java/com/its/api/op/model/entity/vds/TbVdsDtct15mStat.java

@@ -76,6 +76,10 @@ public class TbVdsDtct15mStat implements Serializable {
                 .avrgLngt(this.avrgLngt)
                 .build();
 
+        if (this.dtct != null) {
+            dto.setVdsDtctNm(this.dtct.getVdsDtctNm());
+        }
+
         return dto;
     }
 

+ 4 - 0
src/main/java/com/its/api/op/model/entity/vds/TbVdsDtctDdStat.java

@@ -76,6 +76,10 @@ public class TbVdsDtctDdStat implements Serializable {
                 .avrgLngt(this.avrgLngt)
                 .build();
 
+        if (this.dtct != null) {
+            dto.setVdsDtctNm(this.dtct.getVdsDtctNm());
+        }
+
         return dto;
     }
 

+ 4 - 0
src/main/java/com/its/api/op/model/entity/vds/TbVdsDtctHhStat.java

@@ -76,6 +76,10 @@ public class TbVdsDtctHhStat implements Serializable {
                 .avrgLngt(this.avrgLngt)
                 .build();
 
+        if (this.dtct != null) {
+            dto.setVdsDtctNm(this.dtct.getVdsDtctNm());
+        }
+
         return dto;
     }
 

+ 4 - 0
src/main/java/com/its/api/op/model/entity/vds/TbVdsDtctMnStat.java

@@ -76,6 +76,10 @@ public class TbVdsDtctMnStat implements Serializable {
                 .avrgLngt(this.avrgLngt)
                 .build();
 
+        if (this.dtct != null) {
+            dto.setVdsDtctNm(this.dtct.getVdsDtctNm());
+        }
+
         return dto;
     }
 

+ 0 - 81
src/main/java/com/its/api/op/model/entity/vds/VdsDtctStat15M.java

@@ -1,81 +0,0 @@
-package com.its.api.op.model.entity.vds;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import org.hibernate.annotations.DynamicInsert;
-import org.hibernate.annotations.DynamicUpdate;
-import org.hibernate.annotations.NotFound;
-import org.hibernate.annotations.NotFoundAction;
-
-import javax.persistence.*;
-
-@DynamicInsert
-@DynamicUpdate
-@Getter
-@NoArgsConstructor
-@Builder
-@AllArgsConstructor
-@Entity
-@Table(name = "TB_VDS_DTCT_15M_STAT")
-@IdClass(VdsDtctStatKey.class)
-public class VdsDtctStat15M implements IVdsDtctStat {
-
-    @Id
-    @Column(nullable = false, length = 8)
-    private String  DTCT_NMBR;           //	N	VARCHAR2(8)	    N			검지기 번호
-    private String  STAT_DT;             //	N	VARCHAR2(14)	N			통계 일시
-    private String  SYST_KIND_DVSN;      //	N	VARCHAR2(1)	    N			시스템 종류 구분
-
-    private Integer TFVL;               //	N	NUMBER(6)	    Y	0		교통량
-    private Integer AVRG_SPED;          //	N	NUMBER(3)	    Y	0		평균 속도
-    @Column(columnDefinition = "NUMBER", length = 6, precision = 2)
-    private Double  AVRG_OCPY_RATE;     //	N	NUMBER(6,2)	    Y			평균 점유 율
-    private String  AVRG_HDWY;          //	N	VARCHAR2(6)	    Y			평균 차두시간
-    @Column(columnDefinition = "NUMBER", length = 5, precision = 1)
-    private Double  AVRG_LNGT;          //	N	NUMBER(5,1)	    Y			평균 길이
-
-    @OneToOne
-    @JoinColumn(insertable=false, updatable=false, name="DTCT_NMBR", referencedColumnName = "DTCT_NMBR")
-    @NotFound(action = NotFoundAction.IGNORE)
-    private TbVdsDtct dtct = new TbVdsDtct();
-
-    @Override
-    public String getId() {
-        return DTCT_NMBR;
-    }
-    @Override
-    public String getStatDt() {
-        return STAT_DT;
-    }
-    @Override
-    public String getSystKindDvsn() {
-        return SYST_KIND_DVSN;
-    }
-    @Override
-    public Integer getTfvl() {
-        return TFVL;
-    }
-    @Override
-    public Integer getAvrgSped() {
-        return AVRG_SPED;
-    }
-    @Override
-    public Double getAvrgOcpyRate() {
-        return AVRG_OCPY_RATE;
-    }
-    @Override
-    public String getAvrgHdw() {
-        return AVRG_HDWY;
-    }
-    @Override
-    public Double getAvrgLngt() {
-        return AVRG_LNGT;
-    }
-    @Override
-    public TbVdsDtct getVdsDtct() {
-        return dtct;
-    }
-
-}

+ 0 - 81
src/main/java/com/its/api/op/model/entity/vds/VdsDtctStatDD.java

@@ -1,81 +0,0 @@
-package com.its.api.op.model.entity.vds;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import org.hibernate.annotations.DynamicInsert;
-import org.hibernate.annotations.DynamicUpdate;
-import org.hibernate.annotations.NotFound;
-import org.hibernate.annotations.NotFoundAction;
-
-import javax.persistence.*;
-
-@DynamicInsert
-@DynamicUpdate
-@Getter
-@NoArgsConstructor
-@Builder
-@AllArgsConstructor
-@Entity
-@Table(name = "TB_VDS_DTCT_DD_STAT")
-@IdClass(VdsDtctStatKey.class)
-public class VdsDtctStatDD implements IVdsDtctStat {
-
-    @Id
-    @Column(nullable = false, length = 8)
-    private String DTCT_NMBR;           //	N	VARCHAR2(8)	    N			검지기 번호
-    private String STAT_DT;             //	N	VARCHAR2(14)	N			통계 일시
-    private String SYST_KIND_DVSN;      //	N	VARCHAR2(1)	    N			시스템 종류 구분
-
-    private Integer TFVL;               //	N	NUMBER(6)	    Y	0		교통량
-    private Integer AVRG_SPED;          //	N	NUMBER(3)	    Y	0		평균 속도
-    @Column(columnDefinition = "NUMBER", length = 6, precision = 2)
-    private Double  AVRG_OCPY_RATE;     //	N	NUMBER(6,2)	    Y			평균 점유 율
-    private String  AVRG_HDWY;          //	N	VARCHAR2(6)	    Y			평균 차두시간
-    @Column(columnDefinition = "NUMBER", length = 5, precision = 1)
-    private Double  AVRG_LNGT;          //	N	NUMBER(5,1)	    Y			평균 길이
-
-    @OneToOne
-    @JoinColumn(insertable=false, updatable=false, name="DTCT_NMBR", referencedColumnName = "DTCT_NMBR")
-    @NotFound(action = NotFoundAction.IGNORE)
-    private TbVdsDtct dtct = new TbVdsDtct();
-
-    @Override
-    public String getId() {
-        return DTCT_NMBR;
-    }
-    @Override
-    public String getStatDt() {
-        return STAT_DT;
-    }
-    @Override
-    public String getSystKindDvsn() {
-        return SYST_KIND_DVSN;
-    }
-    @Override
-    public Integer getTfvl() {
-        return TFVL;
-    }
-    @Override
-    public Integer getAvrgSped() {
-        return AVRG_SPED;
-    }
-    @Override
-    public Double getAvrgOcpyRate() {
-        return AVRG_OCPY_RATE;
-    }
-    @Override
-    public String getAvrgHdw() {
-        return AVRG_HDWY;
-    }
-    @Override
-    public Double getAvrgLngt() {
-        return AVRG_LNGT;
-    }
-    @Override
-    public TbVdsDtct getVdsDtct() {
-        return dtct;
-    }
-
-}

+ 0 - 81
src/main/java/com/its/api/op/model/entity/vds/VdsDtctStatHH.java

@@ -1,81 +0,0 @@
-package com.its.api.op.model.entity.vds;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import org.hibernate.annotations.DynamicInsert;
-import org.hibernate.annotations.DynamicUpdate;
-import org.hibernate.annotations.NotFound;
-import org.hibernate.annotations.NotFoundAction;
-
-import javax.persistence.*;
-
-@DynamicInsert
-@DynamicUpdate
-@Getter
-@NoArgsConstructor
-@Builder
-@AllArgsConstructor
-@Entity
-@Table(name = "TB_VDS_DTCT_HH_STAT")
-@IdClass(VdsDtctStatKey.class)
-public class VdsDtctStatHH implements IVdsDtctStat {
-
-    @Id
-    @Column(nullable = false, length = 8)
-    private String DTCT_NMBR;           //	N	VARCHAR2(8)	    N			검지기 번호
-    private String STAT_DT;             //	N	VARCHAR2(14)	N			통계 일시
-    private String SYST_KIND_DVSN;      //	N	VARCHAR2(1)	    N			시스템 종류 구분
-
-    private Integer TFVL;               //	N	NUMBER(6)	    Y	0		교통량
-    private Integer AVRG_SPED;          //	N	NUMBER(3)	    Y	0		평균 속도
-    @Column(columnDefinition = "NUMBER", length = 6, precision = 2)
-    private Double  AVRG_OCPY_RATE;     //	N	NUMBER(6,2)	    Y			평균 점유 율
-    private String  AVRG_HDWY;          //	N	VARCHAR2(6)	    Y			평균 차두시간
-    @Column(columnDefinition = "NUMBER", length = 5, precision = 1)
-    private Double  AVRG_LNGT;          //	N	NUMBER(5,1)	    Y			평균 길이
-
-    @OneToOne
-    @JoinColumn(insertable=false, updatable=false, name="DTCT_NMBR", referencedColumnName = "DTCT_NMBR")
-    @NotFound(action = NotFoundAction.IGNORE)
-    private TbVdsDtct dtct = new TbVdsDtct();
-
-    @Override
-    public String getId() {
-        return DTCT_NMBR;
-    }
-    @Override
-    public String getStatDt() {
-        return STAT_DT;
-    }
-    @Override
-    public String getSystKindDvsn() {
-        return SYST_KIND_DVSN;
-    }
-    @Override
-    public Integer getTfvl() {
-        return TFVL;
-    }
-    @Override
-    public Integer getAvrgSped() {
-        return AVRG_SPED;
-    }
-    @Override
-    public Double getAvrgOcpyRate() {
-        return AVRG_OCPY_RATE;
-    }
-    @Override
-    public String getAvrgHdw() {
-        return AVRG_HDWY;
-    }
-    @Override
-    public Double getAvrgLngt() {
-        return AVRG_LNGT;
-    }
-    @Override
-    public TbVdsDtct getVdsDtct() {
-        return dtct;
-    }
-
-}

+ 0 - 19
src/main/java/com/its/api/op/model/entity/vds/VdsDtctStatKey.java

@@ -1,19 +0,0 @@
-package com.its.api.op.model.entity.vds;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.io.Serializable;
-
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-//@Embeddable
-public class VdsDtctStatKey implements Serializable {
-
-    private String DTCT_NMBR;           //	N	VARCHAR2(8)	    N			검지기 번호
-    private String STAT_DT;             //	N	VARCHAR2(1)	    N			통계 일시
-    private String SYST_KIND_DVSN;      //	N	VARCHAR2(1)	    N			시스템 종류 구분
-
-}

+ 0 - 81
src/main/java/com/its/api/op/model/entity/vds/VdsDtctStatMN.java

@@ -1,81 +0,0 @@
-package com.its.api.op.model.entity.vds;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import org.hibernate.annotations.DynamicInsert;
-import org.hibernate.annotations.DynamicUpdate;
-import org.hibernate.annotations.NotFound;
-import org.hibernate.annotations.NotFoundAction;
-
-import javax.persistence.*;
-
-@DynamicInsert
-@DynamicUpdate
-@Getter
-@NoArgsConstructor
-@Builder
-@AllArgsConstructor
-@Entity
-@Table(name = "TB_VDS_DTCT_DD_STAT")
-@IdClass(VdsDtctStatKey.class)
-public class VdsDtctStatMN implements IVdsDtctStat {
-
-    @Id
-    @Column(nullable = false, length = 8)
-    private String DTCT_NMBR;           //	N	VARCHAR2(8)	    N			검지기 번호
-    private String STAT_DT;             //	N	VARCHAR2(14)	N			통계 일시
-    private String SYST_KIND_DVSN;      //	N	VARCHAR2(1)	    N			시스템 종류 구분
-
-    private Integer TFVL;               //	N	NUMBER(6)	    Y	0		교통량
-    private Integer AVRG_SPED;          //	N	NUMBER(3)	    Y	0		평균 속도
-    @Column(columnDefinition = "NUMBER", length = 6, precision = 2)
-    private Double  AVRG_OCPY_RATE;     //	N	NUMBER(6,2)	    Y			평균 점유 율
-    private String  AVRG_HDWY;          //	N	VARCHAR2(6)	    Y			평균 차두시간
-    @Column(columnDefinition = "NUMBER", length = 5, precision = 1)
-    private Double  AVRG_LNGT;          //	N	NUMBER(5,1)	    Y			평균 길이
-
-    @OneToOne
-    @JoinColumn(insertable=false, updatable=false, name="DTCT_NMBR", referencedColumnName = "DTCT_NMBR")
-    @NotFound(action = NotFoundAction.IGNORE)
-    private TbVdsDtct dtct = new TbVdsDtct();
-
-    @Override
-    public String getId() {
-        return DTCT_NMBR;
-    }
-    @Override
-    public String getStatDt() {
-        return STAT_DT;
-    }
-    @Override
-    public String getSystKindDvsn() {
-        return SYST_KIND_DVSN;
-    }
-    @Override
-    public Integer getTfvl() {
-        return TFVL;
-    }
-    @Override
-    public Integer getAvrgSped() {
-        return AVRG_SPED;
-    }
-    @Override
-    public Double getAvrgOcpyRate() {
-        return AVRG_OCPY_RATE;
-    }
-    @Override
-    public String getAvrgHdw() {
-        return AVRG_HDWY;
-    }
-    @Override
-    public Double getAvrgLngt() {
-        return AVRG_LNGT;
-    }
-    @Override
-    public TbVdsDtct getVdsDtct() {
-        return dtct;
-    }
-
-}

+ 7 - 8
src/main/java/com/its/api/op/repository/statistics/TrafficHourStatisticsMapper.java

@@ -1,22 +1,21 @@
 package com.its.api.op.repository.statistics;
 
-import com.its.api.op.model.dto.statistics.TrafficHourParam;
 import com.its.api.op.model.dto.statistics.TrafficStatDto;
 import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 @Mapper
 public interface TrafficHourStatisticsMapper {
 
     // 시간대 검색 - 15분, 시간(링크, 서비스링크, 도로)
-    List<TrafficStatDto> findAllLink15M(@Param("cond") TrafficHourParam cond);
-    List<TrafficStatDto> findAllLinkHH(@Param("cond") TrafficHourParam cond);
+    List<TrafficStatDto> findAllLink15M(Map<String, String> param);
+    List<TrafficStatDto> findAllLinkHH(Map<String, String> param);
 
-    List<TrafficStatDto> findAllIfsc15M(@Param("cond") TrafficHourParam cond);
-    List<TrafficStatDto> findAllIfscHH(@Param("cond") TrafficHourParam cond);
+    List<TrafficStatDto> findAllIfsc15M(Map<String, String> param);
+    List<TrafficStatDto> findAllIfscHH(Map<String, String> param);
 
-    List<TrafficStatDto> findAllRoad15M(@Param("cond") TrafficHourParam cond);
-    List<TrafficStatDto> findAllRoadHH(@Param("cond") TrafficHourParam cond);
+    List<TrafficStatDto> findAllRoad15M(Map<String, String> param);
+    List<TrafficStatDto> findAllRoadHH(Map<String, String> param);
 }

+ 16 - 17
src/main/java/com/its/api/op/repository/statistics/TrafficTermStatisticsMapper.java

@@ -1,31 +1,30 @@
 package com.its.api.op.repository.statistics;
 
-import com.its.api.op.model.dto.statistics.TrafficTermParam;
 import com.its.api.op.model.dto.statistics.TrafficStatDto;
 import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 @Mapper
 public interface TrafficTermStatisticsMapper {
 
     // 기간 검색 - 15분, 시간, 일, 월, 년(링크, 서비스링크, 도로)
-    List<TrafficStatDto> findAllLink15M(@Param("cond") TrafficTermParam cond);
-    List<TrafficStatDto> findAllLinkHH(@Param("cond") TrafficTermParam cond);
-    List<TrafficStatDto> findAllLinkDD(@Param("cond") TrafficTermParam cond);
-    List<TrafficStatDto> findAllLinkMN(@Param("cond") TrafficTermParam cond);
-    List<TrafficStatDto> findAllLinkYY(@Param("cond") TrafficTermParam cond);
+    List<TrafficStatDto> findAllLink15M(Map<String, String> param);
+    List<TrafficStatDto> findAllLinkHH(Map<String, String> param);
+    List<TrafficStatDto> findAllLinkDD(Map<String, String> param);
+    List<TrafficStatDto> findAllLinkMN(Map<String, String> param);
+    List<TrafficStatDto> findAllLinkYY(Map<String, String> param);
 
-    List<TrafficStatDto> findAllIfsc15M(@Param("cond") TrafficTermParam cond);
-    List<TrafficStatDto> findAllIfscHH(@Param("cond") TrafficTermParam cond);
-    List<TrafficStatDto> findAllIfscDD(@Param("cond") TrafficTermParam cond);
-    List<TrafficStatDto> findAllIfscMN(@Param("cond") TrafficTermParam cond);
-    List<TrafficStatDto> findAllIfscYY(@Param("cond") TrafficTermParam cond);
+    List<TrafficStatDto> findAllIfsc15M(Map<String, String> param);
+    List<TrafficStatDto> findAllIfscHH(Map<String, String> param);
+    List<TrafficStatDto> findAllIfscDD(Map<String, String> param);
+    List<TrafficStatDto> findAllIfscMN(Map<String, String> param);
+    List<TrafficStatDto> findAllIfscYY(Map<String, String> param);
 
-    List<TrafficStatDto> findAllRoad15M(@Param("cond") TrafficTermParam cond);
-    List<TrafficStatDto> findAllRoadHH(@Param("cond") TrafficTermParam cond);
-    List<TrafficStatDto> findAllRoadDD(@Param("cond") TrafficTermParam cond);
-    List<TrafficStatDto> findAllRoadMN(@Param("cond") TrafficTermParam cond);
-    List<TrafficStatDto> findAllRoadYY(@Param("cond") TrafficTermParam cond);
+    List<TrafficStatDto> findAllRoad15M(Map<String, String> param);
+    List<TrafficStatDto> findAllRoadHH(Map<String, String> param);
+    List<TrafficStatDto> findAllRoadDD(Map<String, String> param);
+    List<TrafficStatDto> findAllRoadMN(Map<String, String> param);
+    List<TrafficStatDto> findAllRoadYY(Map<String, String> param);
 }

+ 6 - 0
src/main/java/com/its/api/op/repository/vds/TbVdsDtct15mStatRepository.java

@@ -4,9 +4,15 @@ import com.its.api.op.model.entity.vds.TbVdsDtct15mStat;
 import com.its.api.op.model.entity.vds.TbVdsDtct15mStatKey;
 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 TbVdsDtct15mStatRepository extends JpaRepository<TbVdsDtct15mStat, TbVdsDtct15mStatKey>, JpaSpecificationExecutor<TbVdsDtct15mStat> {
 
+    @Query("select p from TbVdsDtct15mStat p inner join fetch p.dtct where p.statDt between :fromDt and :toDt and p.dtctNmbr in :ids")
+    List<TbVdsDtct15mStat> findAllByDateRange(String fromDt, String toDt, List<String> ids);
+
 }

+ 6 - 0
src/main/java/com/its/api/op/repository/vds/TbVdsDtctDdStatRepository.java

@@ -4,9 +4,15 @@ import com.its.api.op.model.entity.vds.TbVdsDtctDdStat;
 import com.its.api.op.model.entity.vds.TbVdsDtctDdStatKey;
 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 TbVdsDtctDdStatRepository extends JpaRepository<TbVdsDtctDdStat, TbVdsDtctDdStatKey>, JpaSpecificationExecutor<TbVdsDtctDdStat> {
 
+    @Query("select p from TbVdsDtctDdStat p inner join fetch p.dtct where p.statDt between :fromDt and :toDt and p.dtctNmbr in :ids")
+    List<TbVdsDtctDdStat> findAllByDateRange(String fromDt, String toDt, List<String> ids);
+
 }

+ 6 - 0
src/main/java/com/its/api/op/repository/vds/TbVdsDtctHhStatRepository.java

@@ -4,9 +4,15 @@ import com.its.api.op.model.entity.vds.TbVdsDtctHhStat;
 import com.its.api.op.model.entity.vds.TbVdsDtctHhStatKey;
 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 TbVdsDtctHhStatRepository extends JpaRepository<TbVdsDtctHhStat, TbVdsDtctHhStatKey>, JpaSpecificationExecutor<TbVdsDtctHhStat> {
 
+    @Query("select p from TbVdsDtctHhStat p inner join fetch p.dtct where p.statDt between :fromDt and :toDt and p.dtctNmbr in :ids")
+    List<TbVdsDtctHhStat> findAllByDateRange(String fromDt, String toDt, List<String> ids);
+
 }

+ 6 - 0
src/main/java/com/its/api/op/repository/vds/TbVdsDtctMnStatRepository.java

@@ -4,9 +4,15 @@ import com.its.api.op.model.entity.vds.TbVdsDtctMnStat;
 import com.its.api.op.model.entity.vds.TbVdsDtctMnStatKey;
 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 TbVdsDtctMnStatRepository extends JpaRepository<TbVdsDtctMnStat, TbVdsDtctMnStatKey>, JpaSpecificationExecutor<TbVdsDtctMnStat> {
 
+    @Query("select p from TbVdsDtctMnStat p inner join fetch p.dtct where p.statDt between :fromDt and :toDt and p.dtctNmbr in :ids")
+    List<TbVdsDtctMnStat> findAllByDateRange(String fromDt, String toDt, List<String> ids);
+
 }

+ 0 - 14
src/main/java/com/its/api/op/repository/vds/VdsDtctStat15MRepository.java

@@ -1,14 +0,0 @@
-package com.its.api.op.repository.vds;
-
-import com.its.api.op.model.entity.vds.VdsDtctStat15M;
-import com.its.api.op.model.entity.vds.VdsDtctStatKey;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-
-import java.util.List;
-
-public interface VdsDtctStat15MRepository extends JpaRepository<VdsDtctStat15M, VdsDtctStatKey> {
-
-    @Query("select p from VdsDtctStat15M p inner join fetch p.dtct where p.STAT_DT between :from_dt and :to_dt and p.DTCT_NMBR in :idList")
-    List<VdsDtctStat15M> findAllByDateRange(String from_dt, String to_dt, List<String> idList);
-}

+ 0 - 14
src/main/java/com/its/api/op/repository/vds/VdsDtctStatDDRepository.java

@@ -1,14 +0,0 @@
-package com.its.api.op.repository.vds;
-
-import com.its.api.op.model.entity.vds.VdsDtctStatDD;
-import com.its.api.op.model.entity.vds.VdsDtctStatKey;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-
-import java.util.List;
-
-public interface VdsDtctStatDDRepository extends JpaRepository<VdsDtctStatDD, VdsDtctStatKey> {
-
-    @Query("select p from VdsDtctStatDD p inner join fetch p.dtct where p.STAT_DT between :from_dt and :to_dt and p.DTCT_NMBR in :idList")
-    List<VdsDtctStatDD> findAllByDateRange(String from_dt, String to_dt, List<String> idList);
-}

+ 0 - 14
src/main/java/com/its/api/op/repository/vds/VdsDtctStatHHRepository.java

@@ -1,14 +0,0 @@
-package com.its.api.op.repository.vds;
-
-import com.its.api.op.model.entity.vds.VdsDtctStatHH;
-import com.its.api.op.model.entity.vds.VdsDtctStatKey;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-
-import java.util.List;
-
-public interface VdsDtctStatHHRepository extends JpaRepository<VdsDtctStatHH, VdsDtctStatKey> {
-
-    @Query("select p from VdsDtctStatHH p inner join fetch p.dtct where p.STAT_DT between :from_dt and :to_dt and p.DTCT_NMBR in :idList")
-    List<VdsDtctStatHH> findAllByDateRange(String from_dt, String to_dt, List<String> idList);
-}

+ 0 - 14
src/main/java/com/its/api/op/repository/vds/VdsDtctStatMNRepository.java

@@ -1,14 +0,0 @@
-package com.its.api.op.repository.vds;
-
-import com.its.api.op.model.entity.vds.VdsDtctStatMN;
-import com.its.api.op.model.entity.vds.VdsDtctStatKey;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-
-import java.util.List;
-
-public interface VdsDtctStatMNRepository extends JpaRepository<VdsDtctStatMN, VdsDtctStatKey> {
-
-    @Query("select p from VdsDtctStatMN p inner join fetch p.dtct where p.STAT_DT between :from_dt and :to_dt and p.DTCT_NMBR in :idList")
-    List<VdsDtctStatMN> findAllByDateRange(String from_dt, String to_dt, List<String> idList);
-}

+ 50 - 13
src/main/java/com/its/api/op/service/statistics/TrafficHourStatisticsService.java

@@ -1,13 +1,14 @@
 package com.its.api.op.service.statistics;
 
-import com.its.api.op.model.dto.statistics.TrafficHourParam;
 import com.its.api.op.model.dto.statistics.TrafficStatDto;
 import com.its.api.op.repository.statistics.TrafficHourStatisticsMapper;
 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
@@ -16,25 +17,61 @@ public class TrafficHourStatisticsService {
 
     private final TrafficHourStatisticsMapper mapper;
 
-    public List<TrafficStatDto> findAllLink15M(TrafficHourParam cond) {
-        return this.mapper.findAllLink15M(cond);
+    public List<TrafficStatDto> findAllLink15M(String fromDt, String toDt, String fromHh, String toHh, String LINK_ID) {
+        Map<String, String> param = new HashMap<>();
+        param.put("FROM_DT", fromDt);
+        param.put("TO_DT", toDt);
+        param.put("FROM_HH", fromHh);
+        param.put("TO_HH", toHh);
+        param.put("LINK_ID", LINK_ID);
+        return this.mapper.findAllLink15M(param);
     }
-    public List<TrafficStatDto> findAllLinkHH(TrafficHourParam cond) {
-        return this.mapper.findAllLinkHH(cond);
+    public List<TrafficStatDto> findAllLinkHH(String fromDt, String toDt, String fromHh, String toHh, String LINK_ID) {
+        Map<String, String> param = new HashMap<>();
+        param.put("FROM_DT", fromDt);
+        param.put("TO_DT", toDt);
+        param.put("FROM_HH", fromHh);
+        param.put("TO_HH", toHh);
+        param.put("LINK_ID", LINK_ID);
+        return this.mapper.findAllLinkHH(param);
     }
 
-    public List<TrafficStatDto> findAllIfsc15M(TrafficHourParam cond) {
-        return this.mapper.findAllIfsc15M(cond);
+    public List<TrafficStatDto> findAllIfsc15M(String fromDt, String toDt, String fromHh, String toHh, String IFSC_ID) {
+        Map<String, String> param = new HashMap<>();
+        param.put("FROM_DT", fromDt);
+        param.put("TO_DT", toDt);
+        param.put("FROM_HH", fromHh);
+        param.put("TO_HH", toHh);
+        param.put("IFSC_ID", IFSC_ID);
+        return this.mapper.findAllIfsc15M(param);
     }
-    public List<TrafficStatDto> findAllIfscHH(TrafficHourParam cond) {
-        return this.mapper.findAllIfscHH(cond);
+    public List<TrafficStatDto> findAllIfscHH(String fromDt, String toDt, String fromHh, String toHh, String IFSC_ID) {
+        Map<String, String> param = new HashMap<>();
+        param.put("FROM_DT", fromDt);
+        param.put("TO_DT", toDt);
+        param.put("FROM_HH", fromHh);
+        param.put("TO_HH", toHh);
+        param.put("IFSC_ID", IFSC_ID);
+        return this.mapper.findAllIfscHH(param);
     }
 
-    public List<TrafficStatDto> findAllRoad15M(TrafficHourParam cond) {
-        return this.mapper.findAllRoad15M(cond);
+    public List<TrafficStatDto> findAllRoad15M(String fromDt, String toDt, String fromHh, String toHh, String ROAD_ID) {
+        Map<String, String> param = new HashMap<>();
+        param.put("FROM_DT", fromDt);
+        param.put("TO_DT", toDt);
+        param.put("FROM_HH", fromHh);
+        param.put("TO_HH", toHh);
+        param.put("ROAD_ID", ROAD_ID);
+        return this.mapper.findAllRoad15M(param);
     }
-    public List<TrafficStatDto> findAllRoadHH(TrafficHourParam cond) {
-        return this.mapper.findAllRoadHH(cond);
+    public List<TrafficStatDto> findAllRoadHH(String fromDt, String toDt, String fromHh, String toHh, String ROAD_ID) {
+        Map<String, String> param = new HashMap<>();
+        param.put("FROM_DT", fromDt);
+        param.put("TO_DT", toDt);
+        param.put("FROM_HH", fromHh);
+        param.put("TO_HH", toHh);
+        param.put("ROAD_ID", ROAD_ID);
+        return this.mapper.findAllRoadHH(param);
     }
 
 }

+ 52 - 12
src/main/java/com/its/api/op/service/statistics/TrafficSpecStatisticsService.java

@@ -16,25 +16,65 @@ public class TrafficSpecStatisticsService {
 
     private final TrafficSpecStatisticsMapper mapper;
 
-    public List<TrafficStatDto> findAllLink15M(TrafficSpecParam cond) {
-        return this.mapper.findAllLink15M(cond);
+    public List<TrafficStatDto> findAllLink15M(String fromHh, String toHh, List<String> days, String LINK_ID) {
+/*
+        Map<String, String> param = new HashMap<>();
+        param.put("FROM_HH", fromHh);
+        param.put("TO_HH", toHh);
+        param.put("DAYS", days);
+        param.put("LINK_ID", LINK_ID);
+*/
+        TrafficSpecParam param = new TrafficSpecParam(LINK_ID, fromHh, toHh, days);
+        return this.mapper.findAllLink15M(param);
     }
-    public List<TrafficStatDto> findAllLinkHH(TrafficSpecParam cond) {
-        return this.mapper.findAllLinkHH(cond);
+    public List<TrafficStatDto> findAllLinkHH(String fromHh, String toHh, List<String> days, String LINK_ID) {
+/*
+        Map<String, String> param = new HashMap<>();
+        param.put("FROM_HH", fromHh);
+        param.put("TO_HH", toHh);
+        param.put("DAYS", days);
+        param.put("LINK_ID", LINK_ID);*/
+        TrafficSpecParam param = new TrafficSpecParam(LINK_ID, fromHh, toHh, days);
+        return this.mapper.findAllLinkHH(param);
     }
 
-    public List<TrafficStatDto> findAllIfsc15M(TrafficSpecParam cond) {
-        return this.mapper.findAllIfsc15M(cond);
+    public List<TrafficStatDto> findAllIfsc15M(String fromHh, String toHh, List<String> days, String IFSC_ID) {
+/*
+        Map<String, String> param = new HashMap<>();
+        param.put("FROM_HH", fromHh);
+        param.put("TO_HH", toHh);
+        param.put("DAYS", days);
+        param.put("IFSC_ID", IFSC_ID);*/
+        TrafficSpecParam param = new TrafficSpecParam(IFSC_ID, fromHh, toHh, days);
+        return this.mapper.findAllIfsc15M(param);
     }
-    public List<TrafficStatDto> findAllIfscHH(TrafficSpecParam cond) {
-        return this.mapper.findAllIfscHH(cond);
+    public List<TrafficStatDto> findAllIfscHH(String fromHh, String toHh, List<String> days, String IFSC_ID) {
+        /*Map<String, String> param = new HashMap<>();
+        param.put("FROM_HH", fromHh);
+        param.put("TO_HH", toHh);
+        param.put("DAYS", days);
+        param.put("IFSC_ID", IFSC_ID);*/
+        TrafficSpecParam param = new TrafficSpecParam(IFSC_ID, fromHh, toHh, days);
+        return this.mapper.findAllIfscHH(param);
     }
 
-    public List<TrafficStatDto> findAllRoad15M(TrafficSpecParam cond) {
-        return this.mapper.findAllRoad15M(cond);
+    public List<TrafficStatDto> findAllRoad15M(String fromHh, String toHh, List<String> days, String ROAD_ID) {
+        /*Map<String, String> param = new HashMap<>();
+        param.put("FROM_HH", fromHh);
+        param.put("TO_HH", toHh);
+        param.put("DAYS", days);
+        param.put("ROAD_ID", ROAD_ID);*/
+        TrafficSpecParam param = new TrafficSpecParam(ROAD_ID, fromHh, toHh, days);
+        return this.mapper.findAllRoad15M(param);
     }
-    public List<TrafficStatDto> findAllRoadHH(TrafficSpecParam cond) {
-        return this.mapper.findAllRoadHH(cond);
+    public List<TrafficStatDto> findAllRoadHH(String fromHh, String toHh, List<String> days, String ROAD_ID) {
+        /*Map<String, String> param = new HashMap<>();
+        param.put("FROM_HH", fromHh);
+        param.put("TO_HH", toHh);
+        param.put("DAYS", days);
+        param.put("ROAD_ID", ROAD_ID);*/
+        TrafficSpecParam param = new TrafficSpecParam(ROAD_ID, fromHh, toHh, days);
+        return this.mapper.findAllRoadHH(param);
     }
 
 }

+ 92 - 31
src/main/java/com/its/api/op/service/statistics/TrafficTermStatisticsService.java

@@ -1,13 +1,14 @@
 package com.its.api.op.service.statistics;
 
 import com.its.api.op.model.dto.statistics.TrafficStatDto;
-import com.its.api.op.model.dto.statistics.TrafficTermParam;
 import com.its.api.op.repository.statistics.TrafficTermStatisticsMapper;
 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
@@ -16,52 +17,112 @@ public class TrafficTermStatisticsService {
 
     private final TrafficTermStatisticsMapper mapper;
 
-    public List<TrafficStatDto> findAllLink15M(TrafficTermParam cond) {
-        return this.mapper.findAllLink15M(cond);
+    public List<TrafficStatDto> findAllLink15M(String fromDt, String toDt, String LINK_ID) {
+        Map<String, String> param = new HashMap<>();
+        param.put("FROM_DT", fromDt);
+        param.put("TO_DT", toDt);
+        param.put("LINK_ID", LINK_ID);
+        return this.mapper.findAllLink15M(param);
     }
-    public List<TrafficStatDto> findAllLinkHH(TrafficTermParam cond) {
-        return this.mapper.findAllLinkHH(cond);
+    public List<TrafficStatDto> findAllLinkHH(String fromDt, String toDt, String LINK_ID) {
+        Map<String, String> param = new HashMap<>();
+        param.put("FROM_DT", fromDt);
+        param.put("TO_DT", toDt);
+        param.put("LINK_ID", LINK_ID);
+        return this.mapper.findAllLinkHH(param);
     }
-    public List<TrafficStatDto> findAllLinkDD(TrafficTermParam cond) {
-        return this.mapper.findAllLinkDD(cond);
+    public List<TrafficStatDto> findAllLinkDD(String fromDt, String toDt, String LINK_ID) {
+        Map<String, String> param = new HashMap<>();
+        param.put("FROM_DT", fromDt);
+        param.put("TO_DT", toDt);
+        param.put("LINK_ID", LINK_ID);
+        return this.mapper.findAllLinkDD(param);
     }
-    public List<TrafficStatDto> findAllLinkMN(TrafficTermParam cond) {
-        return this.mapper.findAllLinkMN(cond);
+    public List<TrafficStatDto> findAllLinkMN(String fromDt, String toDt, String LINK_ID) {
+        Map<String, String> param = new HashMap<>();
+        param.put("FROM_DT", fromDt);
+        param.put("TO_DT", toDt);
+        param.put("LINK_ID", LINK_ID);
+        return this.mapper.findAllLinkMN(param);
     }
-    public List<TrafficStatDto> findAllLinkYY(TrafficTermParam cond) {
-        return this.mapper.findAllLinkYY(cond);
+    public List<TrafficStatDto> findAllLinkYY(String fromDt, String toDt, String LINK_ID) {
+        Map<String, String> param = new HashMap<>();
+        param.put("FROM_DT", fromDt);
+        param.put("TO_DT", toDt);
+        param.put("LINK_ID", LINK_ID);
+        return this.mapper.findAllLinkYY(param);
     }
 
-    public List<TrafficStatDto> findAllIfsc15M(TrafficTermParam cond) {
-        return this.mapper.findAllIfsc15M(cond);
+    public List<TrafficStatDto> findAllIfsc15M(String fromDt, String toDt, String IFSC_ID) {
+        Map<String, String> param = new HashMap<>();
+        param.put("FROM_DT", fromDt);
+        param.put("TO_DT", toDt);
+        param.put("IFSC_ID", IFSC_ID);
+        return this.mapper.findAllIfsc15M(param);
     }
-    public List<TrafficStatDto> findAllIfscHH(TrafficTermParam cond) {
-        return this.mapper.findAllIfscHH(cond);
+    public List<TrafficStatDto> findAllIfscHH(String fromDt, String toDt, String IFSC_ID) {
+        Map<String, String> param = new HashMap<>();
+        param.put("FROM_DT", fromDt);
+        param.put("TO_DT", toDt);
+        param.put("IFSC_ID", IFSC_ID);
+        return this.mapper.findAllIfscHH(param);
     }
-    public List<TrafficStatDto> findAllIfscDD(TrafficTermParam cond) {
-        return this.mapper.findAllIfscDD(cond);
+    public List<TrafficStatDto> findAllIfscDD(String fromDt, String toDt, String IFSC_ID) {
+        Map<String, String> param = new HashMap<>();
+        param.put("FROM_DT", fromDt);
+        param.put("TO_DT", toDt);
+        param.put("IFSC_ID", IFSC_ID);
+        return this.mapper.findAllIfscDD(param);
     }
-    public List<TrafficStatDto> findAllIfscMN(TrafficTermParam cond) {
-        return this.mapper.findAllIfscMN(cond);
+    public List<TrafficStatDto> findAllIfscMN(String fromDt, String toDt, String IFSC_ID) {
+        Map<String, String> param = new HashMap<>();
+        param.put("FROM_DT", fromDt);
+        param.put("TO_DT", toDt);
+        param.put("IFSC_ID", IFSC_ID);
+        return this.mapper.findAllIfscMN(param);
     }
-    public List<TrafficStatDto> findAllIfscYY(TrafficTermParam cond) {
-        return this.mapper.findAllIfscYY(cond);
+    public List<TrafficStatDto> findAllIfscYY(String fromDt, String toDt, String IFSC_ID) {
+        Map<String, String> param = new HashMap<>();
+        param.put("FROM_DT", fromDt);
+        param.put("TO_DT", toDt);
+        param.put("IFSC_ID", IFSC_ID);
+        return this.mapper.findAllIfscYY(param);
     }
 
-    public List<TrafficStatDto> findAllRoad15M(TrafficTermParam cond) {
-        return this.mapper.findAllRoad15M(cond);
+    public List<TrafficStatDto> findAllRoad15M(String fromDt, String toDt, String ROAD_ID) {
+        Map<String, String> param = new HashMap<>();
+        param.put("FROM_DT", fromDt);
+        param.put("TO_DT", toDt);
+        param.put("ROAD_ID", ROAD_ID);
+        return this.mapper.findAllRoad15M(param);
     }
-    public List<TrafficStatDto> findAllRoadHH(TrafficTermParam cond) {
-        return this.mapper.findAllRoadHH(cond);
+    public List<TrafficStatDto> findAllRoadHH(String fromDt, String toDt, String ROAD_ID) {
+        Map<String, String> param = new HashMap<>();
+        param.put("FROM_DT", fromDt);
+        param.put("TO_DT", toDt);
+        param.put("ROAD_ID", ROAD_ID);
+        return this.mapper.findAllRoadHH(param);
     }
-    public List<TrafficStatDto> findAllRoadDD(TrafficTermParam cond) {
-        return this.mapper.findAllRoadDD(cond);
+    public List<TrafficStatDto> findAllRoadDD(String fromDt, String toDt, String ROAD_ID) {
+        Map<String, String> param = new HashMap<>();
+        param.put("FROM_DT", fromDt);
+        param.put("TO_DT", toDt);
+        param.put("ROAD_ID", ROAD_ID);
+        return this.mapper.findAllRoadDD(param);
     }
-    public List<TrafficStatDto> findAllRoadMN(TrafficTermParam cond) {
-        return this.mapper.findAllRoadMN(cond);
+    public List<TrafficStatDto> findAllRoadMN(String fromDt, String toDt, String ROAD_ID) {
+        Map<String, String> param = new HashMap<>();
+        param.put("FROM_DT", fromDt);
+        param.put("TO_DT", toDt);
+        param.put("ROAD_ID", ROAD_ID);
+        return this.mapper.findAllRoadMN(param);
     }
-    public List<TrafficStatDto> findAllRoadYY(TrafficTermParam cond) {
-        return this.mapper.findAllRoadYY(cond);
+    public List<TrafficStatDto> findAllRoadYY(String fromDt, String toDt, String ROAD_ID) {
+        Map<String, String> param = new HashMap<>();
+        param.put("FROM_DT", fromDt);
+        param.put("TO_DT", toDt);
+        param.put("ROAD_ID", ROAD_ID);
+        return this.mapper.findAllRoadYY(param);
     }
 
 }

+ 0 - 67
src/main/java/com/its/api/op/service/vds/VdsDtctStatService.java

@@ -1,67 +0,0 @@
-package com.its.api.op.service.vds;
-
-import com.its.api.op.model.entity.vds.VdsDtctStatDD;
-import com.its.api.op.model.entity.vds.VdsDtctStatMN;
-import com.its.api.op.repository.vds.VdsDtctStat15MRepository;
-import com.its.api.op.model.entity.vds.VdsDtctStat15M;
-import com.its.api.op.model.entity.vds.VdsDtctStatHH;
-import com.its.api.op.repository.vds.VdsDtctStatDDRepository;
-import com.its.api.op.repository.vds.VdsDtctStatHHRepository;
-import com.its.api.op.repository.vds.VdsDtctStatMNRepository;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@Slf4j
-@RequiredArgsConstructor
-@Service
-public class VdsDtctStatService {
-
-    private final VdsDtctStat15MRepository stat15MRepo;
-    private final VdsDtctStatHHRepository  statHHRepo;
-    private final VdsDtctStatDDRepository  statDDRepo;
-    private final VdsDtctStatMNRepository  statMNRepo;
-
-    public List<VdsDtctStat15M> findAll15M(String FROM_DT, String TO_DT, List<String> idList) {
-        try {
-            return this.stat15MRepo.findAllByDateRange(FROM_DT, TO_DT, idList);
-        }
-        catch (Exception e) {
-            log.error("{}.findAll15M: Exception: {}", getClass().getSimpleName(), e.getMessage());
-        }
-        return new ArrayList<>();
-    }
-
-    public List<VdsDtctStatHH> findAllHH(String FROM_DT, String TO_DT, List<String> idList) {
-        try {
-            return this.statHHRepo.findAllByDateRange(FROM_DT, TO_DT, idList);
-        }
-        catch (Exception e) {
-            log.error("{}.findAllHH: Exception: {}", getClass().getSimpleName(), e.getMessage());
-        }
-        return new ArrayList<>();
-    }
-
-    public List<VdsDtctStatDD> findAllDD(String FROM_DT, String TO_DT, List<String> idList) {
-        try {
-            return this.statDDRepo.findAllByDateRange(FROM_DT, TO_DT, idList);
-        }
-        catch (Exception e) {
-            log.error("{}.findAllDD: Exception: {}", getClass().getSimpleName(), e.getMessage());
-        }
-        return new ArrayList<>();
-    }
-
-    public List<VdsDtctStatMN> findAllMN(String FROM_DT, String TO_DT, List<String> idList) {
-        try {
-            return this.statMNRepo.findAllByDateRange(FROM_DT, TO_DT, idList);
-        }
-        catch (Exception e) {
-            log.error("{}.findAllMN: Exception: {}", getClass().getSimpleName(), e.getMessage());
-        }
-        return new ArrayList<>();
-    }
-}

+ 2 - 0
src/main/java/com/its/api/op/service/vds/VdsDtctTfvlStatService.java

@@ -30,6 +30,8 @@ public class VdsDtctTfvlStatService {
         Map<String, String> param = new HashMap<>();
         param.put("FROM_DT", fromDt);
         param.put("TO_DT", toDt);
+        param.put("FROM_HM", fromHm);
+        param.put("TO_HM", toHm);
         return this.mapper.findAllDayStatByDateRange(param);
     }
 

+ 78 - 0
src/main/java/com/its/api/op/service/vds/VdsDtctTrafStatService.java

@@ -0,0 +1,78 @@
+package com.its.api.op.service.vds;
+
+import com.its.api.op.model.dto.vds.TbVdsDtct15mStatDto;
+import com.its.api.op.model.dto.vds.TbVdsDtctDdStatDto;
+import com.its.api.op.model.dto.vds.TbVdsDtctHhStatDto;
+import com.its.api.op.model.dto.vds.TbVdsDtctMnStatDto;
+import com.its.api.op.model.entity.vds.TbVdsDtct15mStat;
+import com.its.api.op.model.entity.vds.TbVdsDtctDdStat;
+import com.its.api.op.model.entity.vds.TbVdsDtctHhStat;
+import com.its.api.op.model.entity.vds.TbVdsDtctMnStat;
+import com.its.api.op.repository.vds.TbVdsDtct15mStatRepository;
+import com.its.api.op.repository.vds.TbVdsDtctDdStatRepository;
+import com.its.api.op.repository.vds.TbVdsDtctHhStatRepository;
+import com.its.api.op.repository.vds.TbVdsDtctMnStatRepository;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class VdsDtctTrafStatService {
+
+    private final TbVdsDtct15mStatRepository stat15MRepo;
+    private final TbVdsDtctHhStatRepository statHHRepo;
+    private final TbVdsDtctDdStatRepository statDDRepo;
+    private final TbVdsDtctMnStatRepository statMNRepo;
+
+    public List<TbVdsDtct15mStatDto> findAll15M(String FROM_DT, String TO_DT, List<String> idList) {
+
+        List<TbVdsDtct15mStatDto> result = new ArrayList<>();
+        List<TbVdsDtct15mStat> data = this.stat15MRepo.findAllByDateRange(FROM_DT, TO_DT, idList);
+        if (data != null) {
+            data.forEach(obj -> {
+                result.add(obj.toDto());
+            });
+        }
+        return result;
+    }
+
+    public List<TbVdsDtctHhStatDto> findAllHH(String FROM_DT, String TO_DT, List<String> idList) {
+        List<TbVdsDtctHhStatDto> result = new ArrayList<>();
+        List<TbVdsDtctHhStat> data = this.statHHRepo.findAllByDateRange(FROM_DT, TO_DT, idList);
+        if (data != null) {
+            data.forEach(obj -> {
+                result.add(obj.toDto());
+            });
+        }
+        return result;
+    }
+
+    public List<TbVdsDtctDdStatDto> findAllDD(String FROM_DT, String TO_DT, List<String> idList) {
+
+        List<TbVdsDtctDdStatDto> result = new ArrayList<>();
+        List<TbVdsDtctDdStat> data = this.statDDRepo.findAllByDateRange(FROM_DT, TO_DT, idList);
+        if (data != null) {
+            data.forEach(obj -> {
+                result.add(obj.toDto());
+            });
+        }
+        return result;
+    }
+
+    public List<TbVdsDtctMnStatDto> findAllMN(String FROM_DT, String TO_DT, List<String> idList) {
+
+        List<TbVdsDtctMnStatDto> result = new ArrayList<>();
+        List<TbVdsDtctMnStat> data = this.statMNRepo.findAllByDateRange(FROM_DT, TO_DT, idList);
+        if (data != null) {
+            data.forEach(obj -> {
+                result.add(obj.toDto());
+            });
+        }
+        return result;
+    }
+}

+ 24 - 24
src/main/resources/mybatis/mapper/statistics/TrafficHourStatisticsMapper.xml

@@ -3,7 +3,7 @@
 
 <mapper namespace="com.its.api.op.repository.statistics.TrafficHourStatisticsMapper">
 
-    <select id="findAllLink15M" parameterType="com.its.api.op.model.dto.statistics.TrafficHourParam" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
+    <select id="findAllLink15M" parameterType="java.util.HashMap" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
         SELECT A.LINK_ID AS ID, A.STAT_DT, TO_CHAR(A.STAT_DT_FMT, 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT,
                NVL(TRIM(C.NODE_NAME), '값없음') AS F_NAME, NVL(TRIM(D.NODE_NAME), '값없음') AS T_NAME,
                B.LINK_LENG AS SECT_LNGT,
@@ -13,9 +13,9 @@
                      TO_DATE(SUBSTR(STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT,
                      TFVL, SPED, OCPY_RATE, TRVL_HH
               FROM TB_LINK_15M_STAT A
-              WHERE LINK_ID = #{cond.ID}
-                AND STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
-                AND SUBSTR(STAT_DT, 9, 6) BETWEEN #{cond.FROM_HM} AND #{cond.TO_HM}
+              WHERE LINK_ID = #{LINK_ID}
+                AND STAT_DT BETWEEN #{FROM_DT} AND #{TO_DT}
+                AND SUBSTR(STAT_DT, 9, 6) BETWEEN #{FROM_HH} AND #{TO_HH}
              ) A,
              TB_LINK B, TB_NODE C, TB_NODE D
         WHERE B.DEL_YN = 'N'
@@ -25,7 +25,7 @@
         ORDER BY A.STAT_DT
     </select>
 
-    <select id="findAllLinkHH" parameterType="com.its.api.op.model.dto.statistics.TrafficHourParam" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
+    <select id="findAllLinkHH" parameterType="java.util.HashMap" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
         SELECT A.LINK_ID AS ID, A.STAT_DT, TO_CHAR(A.STAT_DT_FMT, 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT,
                NVL(TRIM(C.NODE_NAME), '값없음') AS F_NAME, NVL(TRIM(D.NODE_NAME), '값없음') AS T_NAME,
                B.LINK_LENG AS SECT_LNGT,
@@ -35,9 +35,9 @@
                      TO_DATE(SUBSTR(STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT,
                      TFVL, SPED, OCPY_RATE, TRVL_HH
               FROM TB_LINK_HH_STAT A
-              WHERE LINK_ID = #{cond.ID}
-                AND STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
-                AND SUBSTR(STAT_DT, 9, 6) BETWEEN #{cond.FROM_HM} AND #{cond.TO_HM}
+              WHERE LINK_ID = #{LINK_ID}
+                AND STAT_DT BETWEEN #{FROM_DT} AND #{TO_DT}
+                AND SUBSTR(STAT_DT, 9, 6) BETWEEN #{FROM_HH} AND #{TO_HH}
              ) A,
              TB_LINK B, TB_NODE C, TB_NODE D
         WHERE B.DEL_YN = 'N'
@@ -47,7 +47,7 @@
         ORDER BY A.STAT_DT
     </select>
 
-    <select id="findAllIfsc15M" parameterType="com.its.api.op.model.dto.statistics.TrafficHourParam" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
+    <select id="findAllIfsc15M" parameterType="java.util.HashMap" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
         SELECT A.IFSC_ID AS ID, A.STAT_DT, TO_CHAR(A.STAT_DT_FMT, 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT,
                NVL(TRIM(C.NODE_NAME), '값없음') AS F_NAME, NVL(TRIM(D.NODE_NAME), '값없음') AS T_NAME,
                B.SECT_LNGT AS SECT_LNGT,
@@ -57,9 +57,9 @@
                      TO_DATE(SUBSTR(STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT,
                      TFVL, SPED, OCPY_RATE, TRVL_HH
               FROM TB_IFSC_15M_STAT A
-              WHERE IFSC_ID = #{cond.ID}
-                AND STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
-                AND SUBSTR(STAT_DT, 9, 6) BETWEEN #{cond.FROM_HM} AND #{cond.TO_HM}
+              WHERE IFSC_ID = #{IFSC_ID}
+                AND STAT_DT BETWEEN #{FROM_DT} AND #{TO_DT}
+                AND SUBSTR(STAT_DT, 9, 6) BETWEEN #{FROM_HH} AND #{TO_HH}
              ) A,
              TB_IFSC B, TB_NODE C, TB_NODE D
         WHERE B.DEL_YN = 'N'
@@ -69,7 +69,7 @@
         ORDER BY A.STAT_DT
     </select>
 
-    <select id="findAllIfscHH" parameterType="com.its.api.op.model.dto.statistics.TrafficHourParam" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
+    <select id="findAllIfscHH" parameterType="java.util.HashMap" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
         SELECT A.IFSC_ID AS ID, A.STAT_DT, TO_CHAR(A.STAT_DT_FMT, 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT,
                NVL(TRIM(C.NODE_NAME), '값없음') AS F_NAME, NVL(TRIM(D.NODE_NAME), '값없음') AS T_NAME,
                B.SECT_LNGT AS SECT_LNGT,
@@ -79,9 +79,9 @@
                      TO_DATE(SUBSTR(STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT,
                      TFVL, SPED, OCPY_RATE, TRVL_HH
               FROM TB_IFSC_HH_STAT A
-              WHERE IFSC_ID = #{cond.ID}
-                AND STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
-                AND SUBSTR(STAT_DT, 9, 6) BETWEEN #{cond.FROM_HM} AND #{cond.TO_HM}
+              WHERE IFSC_ID = #{IFSC_ID}
+                AND STAT_DT BETWEEN #{FROM_DT} AND #{TO_DT}
+                AND SUBSTR(STAT_DT, 9, 6) BETWEEN #{FROM_HH} AND #{TO_HH}
              ) A,
              TB_IFSC B, TB_NODE C, TB_NODE D
         WHERE B.DEL_YN = 'N'
@@ -91,7 +91,7 @@
         ORDER BY A.STAT_DT
     </select>
 
-    <select id="findAllRoad15M" parameterType="com.its.api.op.model.dto.statistics.TrafficHourParam" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
+    <select id="findAllRoad15M" parameterType="java.util.HashMap" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
         SELECT A.ROAD_ID AS ID, A.STAT_DT, TO_CHAR(A.STAT_DT_FMT, 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT,
                NVL(TRIM(C.NODE_NAME), '값없음') AS F_NAME, NVL(TRIM(D.NODE_NAME), '값없음') AS T_NAME,
                B.SECT_LNGT AS SECT_LNGT,
@@ -101,9 +101,9 @@
                      TO_DATE(SUBSTR(STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT,
                      TFVL, SPED, OCPY_RATE, TRVL_HH
               FROM TB_ROAD_15M_STAT A
-              WHERE ROAD_ID = #{cond.ID}
-                AND STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
-                AND SUBSTR(STAT_DT, 9, 6) BETWEEN #{cond.FROM_HM} AND #{cond.TO_HM}
+              WHERE ROAD_ID = #{ROAD_ID}
+                AND STAT_DT BETWEEN #{FROM_DT} AND #{TO_DT}
+                AND SUBSTR(STAT_DT, 9, 6) BETWEEN #{FROM_HH} AND #{TO_HH}
              ) A,
              TB_ROAD B, TB_NODE C, TB_NODE D
         WHERE B.DEL_YN = 'N'
@@ -113,7 +113,7 @@
         ORDER BY A.STAT_DT
     </select>
 
-    <select id="findAllRoadHH" parameterType="com.its.api.op.model.dto.statistics.TrafficHourParam" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
+    <select id="findAllRoadHH" parameterType="java.util.HashMap" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
         SELECT A.ROAD_ID AS ID, A.STAT_DT, TO_CHAR(A.STAT_DT_FMT, 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT,
                NVL(TRIM(C.NODE_NAME), '값없음') AS F_NAME, NVL(TRIM(D.NODE_NAME), '값없음') AS T_NAME,
                B.SECT_LNGT AS SECT_LNGT,
@@ -123,9 +123,9 @@
                      TO_DATE(SUBSTR(STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT,
                      TFVL, SPED, OCPY_RATE, TRVL_HH
               FROM TB_ROAD_HH_STAT A
-              WHERE ROAD_ID = #{cond.ID}
-                AND STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
-                AND SUBSTR(STAT_DT, 9, 6) BETWEEN #{cond.FROM_HM} AND #{cond.TO_HM}
+              WHERE ROAD_ID = #{ROAD_ID}
+                AND STAT_DT BETWEEN #{FROM_DT} AND #{TO_DT}
+                AND SUBSTR(STAT_DT, 9, 6) BETWEEN #{FROM_HH} AND #{TO_HH}
              ) A,
              TB_ROAD B, TB_NODE C, TB_NODE D
         WHERE B.DEL_YN = 'N'

+ 45 - 45
src/main/resources/mybatis/mapper/statistics/TrafficTermStatisticsMapper.xml

@@ -3,7 +3,7 @@
 
 <mapper namespace="com.its.api.op.repository.statistics.TrafficTermStatisticsMapper">
 
-    <select id="findAllLink15M" parameterType="com.its.api.op.model.dto.statistics.TrafficTermParam" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
+    <select id="findAllLink15M" parameterType="java.util.HashMap" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
         SELECT A.LINK_ID AS ID, A.STAT_DT, TO_CHAR(A.STAT_DT_FMT, 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT,
                NVL(TRIM(C.NODE_NAME), '값없음') AS F_NAME, NVL(TRIM(D.NODE_NAME), '값없음') AS T_NAME,
                B.LINK_LENG AS SECT_LNGT,
@@ -13,8 +13,8 @@
                      TO_DATE(SUBSTR(STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT,
                      TFVL, SPED, OCPY_RATE, TRVL_HH
               FROM TB_LINK_15M_STAT A
-              WHERE LINK_ID = #{cond.ID}
-                AND STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
+              WHERE LINK_ID = #{LINK_ID}
+                AND STAT_DT BETWEEN #{FROM_DT} AND #{TO_DT}
              ) A,
              TB_LINK B, TB_NODE C, TB_NODE D
         WHERE B.DEL_YN = 'N'
@@ -24,7 +24,7 @@
         ORDER BY A.STAT_DT
     </select>
 
-    <select id="findAllLinkHH" parameterType="com.its.api.op.model.dto.statistics.TrafficTermParam" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
+    <select id="findAllLinkHH" parameterType="java.util.HashMap" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
         SELECT A.LINK_ID AS ID, A.STAT_DT, TO_CHAR(A.STAT_DT_FMT, 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT,
                NVL(TRIM(C.NODE_NAME), '값없음') AS F_NAME, NVL(TRIM(D.NODE_NAME), '값없음') AS T_NAME,
                B.LINK_LENG AS SECT_LNGT,
@@ -34,8 +34,8 @@
                      TO_DATE(SUBSTR(STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT,
                      TFVL, SPED, OCPY_RATE, TRVL_HH
               FROM TB_LINK_HH_STAT A
-              WHERE LINK_ID = #{cond.ID}
-                AND STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
+              WHERE LINK_ID = #{LINK_ID}
+                AND STAT_DT BETWEEN #{FROM_DT} AND #{TO_DT}
              ) A,
              TB_LINK B, TB_NODE C, TB_NODE D
         WHERE B.DEL_YN = 'N'
@@ -45,7 +45,7 @@
         ORDER BY A.STAT_DT
     </select>
 
-    <select id="findAllLinkDD" parameterType="com.its.api.op.model.dto.statistics.TrafficTermParam" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
+    <select id="findAllLinkDD" parameterType="java.util.HashMap" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
         SELECT A.LINK_ID AS ID, A.STAT_DT, TO_CHAR(A.STAT_DT_FMT, 'YYYY-MM-DD HH24') AS STAT_DT_FMT,
                NVL(TRIM(C.NODE_NAME), '값없음') AS F_NAME, NVL(TRIM(D.NODE_NAME), '값없음') AS T_NAME,
                B.LINK_LENG AS SECT_LNGT,
@@ -55,8 +55,8 @@
                      TO_DATE(SUBSTR(STAT_DT, 1, 10), 'YYYY-MM-DD HH24') AS STAT_DT_FMT,
                      TFVL, SPED, OCPY_RATE, TRVL_HH
               FROM TB_LINK_DD_STAT A
-              WHERE LINK_ID = #{cond.ID}
-                AND STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
+              WHERE LINK_ID = #{LINK_ID}
+                AND STAT_DT BETWEEN #{FROM_DT} AND #{TO_DT}
              ) A,
              TB_LINK B, TB_NODE C, TB_NODE D
         WHERE B.DEL_YN = 'N'
@@ -66,7 +66,7 @@
         ORDER BY A.STAT_DT
     </select>
 
-    <select id="findAllLinkMN" parameterType="com.its.api.op.model.dto.statistics.TrafficTermParam" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
+    <select id="findAllLinkMN" parameterType="java.util.HashMap" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
         SELECT A.LINK_ID AS ID, A.STAT_DT, TO_CHAR(A.STAT_DT_FMT, 'YYYY-MM-DD') AS STAT_DT_FMT,
                NVL(TRIM(C.NODE_NAME), '값없음') AS F_NAME, NVL(TRIM(D.NODE_NAME), '값없음') AS T_NAME,
                B.LINK_LENG AS SECT_LNGT,
@@ -76,8 +76,8 @@
                      TO_DATE(SUBSTR(STAT_DT, 1, 8), 'YYYY-MM-DD') AS STAT_DT_FMT,
                      TFVL, SPED, OCPY_RATE, TRVL_HH
               FROM TB_LINK_MN_STAT A
-              WHERE LINK_ID = #{cond.ID}
-                AND STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
+              WHERE LINK_ID = #{LINK_ID}
+                AND STAT_DT BETWEEN #{FROM_DT} AND #{TO_DT}
              ) A,
              TB_LINK B, TB_NODE C, TB_NODE D
         WHERE B.DEL_YN = 'N'
@@ -87,7 +87,7 @@
         ORDER BY A.STAT_DT
     </select>
 
-    <select id="findAllLinkYY" parameterType="com.its.api.op.model.dto.statistics.TrafficTermParam" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
+    <select id="findAllLinkYY" parameterType="java.util.HashMap" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
         SELECT A.LINK_ID AS ID, A.STAT_DT, TO_CHAR(A.STAT_DT_FMT, 'YYYY-MM') AS STAT_DT_FMT,
                NVL(TRIM(C.NODE_NAME), '값없음') AS F_NAME, NVL(TRIM(D.NODE_NAME), '값없음') AS T_NAME,
                B.LINK_LENG AS SECT_LNGT,
@@ -97,8 +97,8 @@
                      TO_DATE(SUBSTR(STAT_DT, 1, 6), 'YYYY-MM') AS STAT_DT_FMT,
                      TFVL, SPED, OCPY_RATE, TRVL_HH
               FROM TB_LINK_YY_STAT A
-              WHERE LINK_ID = #{cond.ID}
-                AND STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
+              WHERE LINK_ID = #{LINK_ID}
+                AND STAT_DT BETWEEN #{FROM_DT} AND #{TO_DT}
              ) A,
              TB_LINK B, TB_NODE C, TB_NODE D
         WHERE B.DEL_YN = 'N'
@@ -108,7 +108,7 @@
         ORDER BY A.STAT_DT
     </select>
 
-    <select id="findAllIfsc15M" parameterType="com.its.api.op.model.dto.statistics.TrafficTermParam" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
+    <select id="findAllIfsc15M" parameterType="java.util.HashMap" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
         SELECT A.IFSC_ID AS ID, A.STAT_DT, TO_CHAR(A.STAT_DT_FMT, 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT,
                NVL(TRIM(C.NODE_NAME), '값없음') AS F_NAME, NVL(TRIM(D.NODE_NAME), '값없음') AS T_NAME,
                B.SECT_LNGT AS SECT_LNGT,
@@ -118,8 +118,8 @@
                      TO_DATE(SUBSTR(STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT,
                      TFVL, SPED, OCPY_RATE, TRVL_HH
               FROM TB_IFSC_15M_STAT A
-              WHERE IFSC_ID = #{cond.ID}
-                AND STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
+              WHERE IFSC_ID = #{IFSC_ID}
+                AND STAT_DT BETWEEN #{FROM_DT} AND #{TO_DT}
              ) A,
              TB_IFSC B, TB_NODE C, TB_NODE D
         WHERE B.DEL_YN = 'N'
@@ -129,7 +129,7 @@
         ORDER BY A.STAT_DT
     </select>
 
-    <select id="findAllIfscHH" parameterType="com.its.api.op.model.dto.statistics.TrafficTermParam" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
+    <select id="findAllIfscHH" parameterType="java.util.HashMap" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
         SELECT A.IFSC_ID AS ID, A.STAT_DT, TO_CHAR(A.STAT_DT_FMT, 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT,
                NVL(TRIM(C.NODE_NAME), '값없음') AS F_NAME, NVL(TRIM(D.NODE_NAME), '값없음') AS T_NAME,
                B.SECT_LNGT AS SECT_LNGT,
@@ -139,8 +139,8 @@
                      TO_DATE(SUBSTR(STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT,
                      TFVL, SPED, OCPY_RATE, TRVL_HH
               FROM TB_IFSC_HH_STAT A
-              WHERE IFSC_ID = #{cond.ID}
-                AND STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
+              WHERE IFSC_ID = #{IFSC_ID}
+                AND STAT_DT BETWEEN #{FROM_DT} AND #{TO_DT}
              ) A,
              TB_IFSC B, TB_NODE C, TB_NODE D
         WHERE B.DEL_YN = 'N'
@@ -150,7 +150,7 @@
         ORDER BY A.STAT_DT
     </select>
 
-    <select id="findAllIfscDD" parameterType="com.its.api.op.model.dto.statistics.TrafficTermParam" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
+    <select id="findAllIfscDD" parameterType="java.util.HashMap" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
         SELECT A.IFSC_ID AS ID, A.STAT_DT, TO_CHAR(A.STAT_DT_FMT, 'YYYY-MM-DD HH24') AS STAT_DT_FMT,
                NVL(TRIM(C.NODE_NAME), '값없음') AS F_NAME, NVL(TRIM(D.NODE_NAME), '값없음') AS T_NAME,
                B.SECT_LNGT AS SECT_LNGT,
@@ -160,8 +160,8 @@
                      TO_DATE(SUBSTR(STAT_DT, 1, 10), 'YYYY-MM-DD HH24') AS STAT_DT_FMT,
                      TFVL, SPED, OCPY_RATE, TRVL_HH
               FROM TB_IFSC_DD_STAT A
-              WHERE IFSC_ID = #{cond.ID}
-                AND STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
+              WHERE IFSC_ID = #{IFSC_ID}
+                AND STAT_DT BETWEEN #{FROM_DT} AND #{TO_DT}
              ) A,
              TB_IFSC B, TB_NODE C, TB_NODE D
         WHERE B.DEL_YN = 'N'
@@ -171,7 +171,7 @@
         ORDER BY A.STAT_DT
     </select>
 
-    <select id="findAllIfscMN" parameterType="com.its.api.op.model.dto.statistics.TrafficTermParam" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
+    <select id="findAllIfscMN" parameterType="java.util.HashMap" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
         SELECT A.IFSC_ID AS ID, A.STAT_DT, TO_CHAR(A.STAT_DT_FMT, 'YYYY-MM-DD') AS STAT_DT_FMT,
                NVL(TRIM(C.NODE_NAME), '값없음') AS F_NAME, NVL(TRIM(D.NODE_NAME), '값없음') AS T_NAME,
                B.SECT_LNGT AS SECT_LNGT,
@@ -181,8 +181,8 @@
                      TO_DATE(SUBSTR(STAT_DT, 1, 8), 'YYYY-MM-DD') AS STAT_DT_FMT,
                      TFVL, SPED, OCPY_RATE, TRVL_HH
               FROM TB_IFSC_MN_STAT A
-              WHERE IFSC_ID = #{cond.ID}
-                AND STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
+              WHERE IFSC_ID = #{IFSC_ID}
+                AND STAT_DT BETWEEN #{FROM_DT} AND #{TO_DT}
              ) A,
              TB_IFSC B, TB_NODE C, TB_NODE D
         WHERE B.DEL_YN = 'N'
@@ -192,7 +192,7 @@
         ORDER BY A.STAT_DT
     </select>
 
-    <select id="findAllIfscYY" parameterType="com.its.api.op.model.dto.statistics.TrafficTermParam" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
+    <select id="findAllIfscYY" parameterType="java.util.HashMap" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
         SELECT A.IFSC_ID AS ID, A.STAT_DT, TO_CHAR(A.STAT_DT_FMT, 'YYYY-MM') AS STAT_DT_FMT,
                NVL(TRIM(C.NODE_NAME), '값없음') AS F_NAME, NVL(TRIM(D.NODE_NAME), '값없음') AS T_NAME,
                B.SECT_LNGT AS SECT_LNGT,
@@ -202,8 +202,8 @@
                      TO_DATE(SUBSTR(STAT_DT, 1, 6), 'YYYY-MM') AS STAT_DT_FMT,
                      TFVL, SPED, OCPY_RATE, TRVL_HH
               FROM TB_IFSC_YY_STAT A
-              WHERE IFSC_ID = #{cond.ID}
-                AND STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
+              WHERE IFSC_ID = #{IFSC_ID}
+                AND STAT_DT BETWEEN #{FROM_DT} AND #{TO_DT}
              ) A,
              TB_IFSC B, TB_NODE C, TB_NODE D
         WHERE B.DEL_YN = 'N'
@@ -213,7 +213,7 @@
         ORDER BY A.STAT_DT
     </select>
 
-    <select id="findAllRoad15M" parameterType="com.its.api.op.model.dto.statistics.TrafficTermParam" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
+    <select id="findAllRoad15M" parameterType="java.util.HashMap" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
         SELECT A.ROAD_ID AS ID, A.STAT_DT, TO_CHAR(A.STAT_DT_FMT, 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT,
                NVL(TRIM(C.NODE_NAME), '값없음') AS F_NAME, NVL(TRIM(D.NODE_NAME), '값없음') AS T_NAME,
                B.SECT_LNGT AS SECT_LNGT,
@@ -223,8 +223,8 @@
                      TO_DATE(SUBSTR(STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT,
                      TFVL, SPED, OCPY_RATE, TRVL_HH
               FROM TB_ROAD_15M_STAT A
-              WHERE ROAD_ID = #{cond.ID}
-                AND STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
+              WHERE ROAD_ID = #{ROAD_ID}
+                AND STAT_DT BETWEEN #{FROM_DT} AND #{TO_DT}
              ) A,
              TB_ROAD B, TB_NODE C, TB_NODE D
         WHERE B.DEL_YN = 'N'
@@ -234,7 +234,7 @@
         ORDER BY A.STAT_DT
     </select>
 
-    <select id="findAllRoadHH" parameterType="com.its.api.op.model.dto.statistics.TrafficTermParam" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
+    <select id="findAllRoadHH" parameterType="java.util.HashMap" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
         SELECT A.ROAD_ID AS ID, A.STAT_DT, TO_CHAR(A.STAT_DT_FMT, 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT,
                NVL(TRIM(C.NODE_NAME), '값없음') AS F_NAME, NVL(TRIM(D.NODE_NAME), '값없음') AS T_NAME,
                B.SECT_LNGT AS SECT_LNGT,
@@ -244,8 +244,8 @@
                      TO_DATE(SUBSTR(STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT,
                      TFVL, SPED, OCPY_RATE, TRVL_HH
               FROM TB_ROAD_HH_STAT A
-              WHERE ROAD_ID = #{cond.ID}
-                AND STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
+              WHERE ROAD_ID = #{ROAD_ID}
+                AND STAT_DT BETWEEN #{FROM_DT} AND #{TO_DT}
              ) A,
              TB_ROAD B, TB_NODE C, TB_NODE D
         WHERE B.DEL_YN = 'N'
@@ -255,7 +255,7 @@
         ORDER BY A.STAT_DT
     </select>
 
-    <select id="findAllRoadDD" parameterType="com.its.api.op.model.dto.statistics.TrafficTermParam" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
+    <select id="findAllRoadDD" parameterType="java.util.HashMap" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
         SELECT A.ROAD_ID AS ID, A.STAT_DT, TO_CHAR(A.STAT_DT_FMT, 'YYYY-MM-DD HH24') AS STAT_DT_FMT,
                NVL(TRIM(C.NODE_NAME), '값없음') AS F_NAME, NVL(TRIM(D.NODE_NAME), '값없음') AS T_NAME,
                B.SECT_LNGT AS SECT_LNGT,
@@ -265,8 +265,8 @@
                      TO_DATE(SUBSTR(STAT_DT, 1, 10), 'YYYY-MM-DD HH24') AS STAT_DT_FMT,
                      TFVL, SPED, OCPY_RATE, TRVL_HH
               FROM TB_ROAD_DD_STAT A
-              WHERE ROAD_ID = #{cond.ID}
-                AND STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
+              WHERE ROAD_ID = #{ROAD_ID}
+                AND STAT_DT BETWEEN #{FROM_DT} AND #{TO_DT}
              ) A,
              TB_ROAD B, TB_NODE C, TB_NODE D
         WHERE B.DEL_YN = 'N'
@@ -276,7 +276,7 @@
         ORDER BY A.STAT_DT
     </select>
 
-    <select id="findAllRoadMN" parameterType="com.its.api.op.model.dto.statistics.TrafficTermParam" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
+    <select id="findAllRoadMN" parameterType="java.util.HashMap" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
         SELECT A.ROAD_ID AS ID, A.STAT_DT, TO_CHAR(A.STAT_DT_FMT, 'YYYY-MM-DD') AS STAT_DT_FMT,
                NVL(TRIM(C.NODE_NAME), '값없음') AS F_NAME, NVL(TRIM(D.NODE_NAME), '값없음') AS T_NAME,
                B.SECT_LNGT AS SECT_LNGT,
@@ -286,8 +286,8 @@
                      TO_DATE(SUBSTR(STAT_DT, 1, 8), 'YYYY-MM-DD') AS STAT_DT_FMT,
                      TFVL, SPED, OCPY_RATE, TRVL_HH
               FROM TB_ROAD_MN_STAT A
-              WHERE ROAD_ID = #{cond.ID}
-                AND STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
+              WHERE ROAD_ID = #{ROAD_ID}
+                AND STAT_DT BETWEEN #{FROM_DT} AND #{TO_DT}
              ) A,
              TB_ROAD B, TB_NODE C, TB_NODE D
         WHERE B.DEL_YN = 'N'
@@ -297,7 +297,7 @@
         ORDER BY A.STAT_DT
     </select>
 
-    <select id="findAllRoadYY" parameterType="com.its.api.op.model.dto.statistics.TrafficTermParam" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
+    <select id="findAllRoadYY" parameterType="java.util.HashMap" resultType="com.its.api.op.model.dto.statistics.TrafficStatDto">
         SELECT A.ROAD_ID AS ID, A.STAT_DT, TO_CHAR(A.STAT_DT_FMT, 'YYYY-MM') AS STAT_DT_FMT,
                NVL(TRIM(C.NODE_NAME), '값없음') AS F_NAME, NVL(TRIM(D.NODE_NAME), '값없음') AS T_NAME,
                B.SECT_LNGT AS SECT_LNGT,
@@ -307,8 +307,8 @@
                      TO_DATE(SUBSTR(STAT_DT, 1, 6), 'YYYY-MM') AS STAT_DT_FMT,
                      TFVL, SPED, OCPY_RATE, TRVL_HH
               FROM TB_ROAD_YY_STAT A
-              WHERE ROAD_ID = #{cond.ID}
-                AND STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
+              WHERE ROAD_ID = #{ROAD_ID}
+                AND STAT_DT BETWEEN #{FROM_DT} AND #{TO_DT}
              ) A,
              TB_ROAD B, TB_NODE C, TB_NODE D
         WHERE B.DEL_YN = 'N'

+ 310 - 59
src/main/resources/mybatis/mapper/vds/VdsDtctTfvlStatMapper.xml

@@ -5,78 +5,329 @@
 
     <select id="findAllHourStatByDateRange" parameterType="java.util.HashMap" resultType="com.its.api.op.model.dto.vds.VdsDtctTfvlHourDto">
        <![CDATA[
-        SELECT FACSEQ AS FCLT_SEQ, FACTYPE AS FCLT_TYPE, NVL(CMS0CNT, 0) AS CMS0_CNT, NVL(CMS1CNT, 0) AS CMS1_CNT
-        FROM (SELECT 1 as FACSEQ, 'CCTV' AS FACTYPE, SUM(CMS0CNT)AS CMS0CNT, SUM(CMS1CNT) AS CMS1CNT
-                FROM (SELECT DECODE(CMNC_STTS_CD, 'CMS0', 1, 0) AS CMS0CNT,
-                             DECODE(CMNC_STTS_CD, 'CMS0', 0, 1) AS CMS1CNT
-                        FROM TB_CCTV_STTS_HS
-                       WHERE CRTN_DT BETWEEN #{FROM_DT} AND #{TO_DT}
+        SELECT LY.VDS_CTLR_NMBR, LY.VDS_CTLR_ID, LY.LCTN, LY.DTCT_NMBR, LY.ISTL_LANE, LY.VDS_DTCT_NM,
+               LY.DTCT_TYPE, LY.DTCT_TYPE_NM, LX.TRFTYPE, LY.VDS_CTLR_NMBR || '.' || LY.LCTN AS NM,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(TOTTFVL, 0, 0, TOTTFVL)) AS TOTTFVL,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(AVGTFVL, 0, 0, AVGTFVL)) AS AVGTFVL,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L00, NULL, 0, L00)) AS C00,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L01, NULL, 0, L01)) AS C01,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L02, NULL, 0, L02)) AS C02,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L03, NULL, 0, L03)) AS C03,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L04, NULL, 0, L04)) AS C04,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L05, NULL, 0, L05)) AS C05,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L06, NULL, 0, L06)) AS C06,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L07, NULL, 0, L07)) AS C07,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L08, NULL, 0, L08)) AS C08,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L09, NULL, 0, L09)) AS C09,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L10, NULL, 0, L10)) AS C10,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L11, NULL, 0, L11)) AS C11,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L12, NULL, 0, L12)) AS C12,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L13, NULL, 0, L13)) AS C13,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L14, NULL, 0, L14)) AS C14,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L15, NULL, 0, L15)) AS C15,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L16, NULL, 0, L16)) AS C16,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L17, NULL, 0, L17)) AS C17,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L18, NULL, 0, L18)) AS C18,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L19, NULL, 0, L19)) AS C19,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L20, NULL, 0, L20)) AS C20,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L21, NULL, 0, L21)) AS C21,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L22, NULL, 0, L22)) AS C22,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L23, NULL, 0, L23)) AS C23
+        FROM (
+                 SELECT GROUPING(DTCT_NMBR) AS GROUPING_DTCT_NMBR,
+                        GROUPING(ISTL_LANE) AS GROUPING_ISTL_LANE,
+                        GROUPING(TRFTYPE)   AS GROUPING_TRFTYPE,
+                        CASE WHEN GROUPING(DTCT_NMBR ) = 1 THEN '검지기' ELSE DTCT_NMBR END AS GROUP_DTCT_NMBR,
+                        CASE WHEN GROUPING(ISTL_LANE)  = 1 THEN '차로'   ELSE ISTL_LANE END AS GROUP_ISTL_LANE,
+                        CASE WHEN GROUPING(TRFTYPE)    = 1 THEN '소계'   ELSE TRFTYPE   END AS GROUP_TRFTYPE,
+                        DTCT_NMBR, ISTL_LANE, TRFTYPE,
+                        SUM(TFVL)           TOTTFVL,
+                        ROUND(AVG(TFVL), 0) AVGTFVL,
+                        SUM(DECODE(STATHOUR, '00', TFVL)) AS L00,
+                        SUM(DECODE(STATHOUR, '01', TFVL)) AS L01,
+                        SUM(DECODE(STATHOUR, '02', TFVL)) AS L02,
+                        SUM(DECODE(STATHOUR, '03', TFVL)) AS L03,
+                        SUM(DECODE(STATHOUR, '04', TFVL)) AS L04,
+                        SUM(DECODE(STATHOUR, '05', TFVL)) AS L05,
+                        SUM(DECODE(STATHOUR, '06', TFVL)) AS L06,
+                        SUM(DECODE(STATHOUR, '07', TFVL)) AS L07,
+                        SUM(DECODE(STATHOUR, '08', TFVL)) AS L08,
+                        SUM(DECODE(STATHOUR, '09', TFVL)) AS L09,
+                        SUM(DECODE(STATHOUR, '10', TFVL)) AS L10,
+                        SUM(DECODE(STATHOUR, '11', TFVL)) AS L11,
+                        SUM(DECODE(STATHOUR, '12', TFVL)) AS L12,
+                        SUM(DECODE(STATHOUR, '13', TFVL)) AS L13,
+                        SUM(DECODE(STATHOUR, '14', TFVL)) AS L14,
+                        SUM(DECODE(STATHOUR, '15', TFVL)) AS L15,
+                        SUM(DECODE(STATHOUR, '16', TFVL)) AS L16,
+                        SUM(DECODE(STATHOUR, '17', TFVL)) AS L17,
+                        SUM(DECODE(STATHOUR, '18', TFVL)) AS L18,
+                        SUM(DECODE(STATHOUR, '19', TFVL)) AS L19,
+                        SUM(DECODE(STATHOUR, '20', TFVL)) AS L20,
+                        SUM(DECODE(STATHOUR, '21', TFVL)) AS L21,
+                        SUM(DECODE(STATHOUR, '22', TFVL)) AS L22,
+                        SUM(DECODE(STATHOUR, '23', TFVL)) AS L23
+                 FROM (
+                          SELECT TO_CHAR(Y.DTCT_NMBR) AS DTCT_NMBR, Y.VDS_DTCT_NM,
+                                 TO_CHAR(Y.ISTL_LANE) AS ISTL_LANE, X.TRFTYPE, X.STATHOUR, X.TFVL
+                          FROM (SELECT /*+ INDEX(A PK_VDS_DTCT_HH_STAT) */
+                                    'DTCT' AS TRFTYPE,
+                                    A.DTCT_NMBR AS DTCT_NMBR, SUBSTR(A.STAT_DT, 9, 2) AS STATHOUR,
+                                    A.TFVL AS TFVL
+                                FROM TB_VDS_DTCT_HH_STAT A
+                                WHERE 1=1
+                                  AND A.STAT_DT BETWEEN #{FROM_DT} AND #{TO_DT}
+                               ) X,
+                               TB_VDS_DTCT_MSTR Y
+                          WHERE 1=1
+                            AND Y.DEL_YN = 'N'
+                            AND Y.DTCT_NMBR = X.DTCT_NMBR
                       )
-              UNION
-              SELECT 2 as FACSEQ, 'VMS' AS FACTYPE, SUM(CMS0CNT)AS CMS0CNT, SUM(CMS1CNT) AS CMS1CNT
-              FROM (SELECT DECODE(CONN_STTS_CD, 'CMS0', 1, 0) AS CMS0CNT,
-                           DECODE(CONN_STTS_CD, 'CMS0', 0, 1) AS CMS1CNT
-                    FROM TB_VMS_STTS_HS
-                    WHERE RGST_DT BETWEEN #{FROM_DT} AND #{TO_DT}
-                   )
-              UNION
-              SELECT 3 as FACSEQ, 'VDS' AS FACTYPE, SUM(CMS0CNT) AS CMS0CNT, SUM(CMS1CNT) AS CMS1CNT
-              FROM (SELECT DECODE(CMNC_STTS_CD, 'CMS0', 1, 0) AS CMS0CNT,
-                           DECODE(CMNC_STTS_CD, 'CMS0', 0, 1) AS CMS1CNT
-                    FROM TB_VDS_CTLR_STTS_RAW
-                    WHERE OCRR_DT BETWEEN #{FROM_DT} AND #{TO_DT}
-                   )
-             )
-        ORDER BY FACSEQ
+                 GROUP BY ROLLUP (DTCT_NMBR, ISTL_LANE, TRFTYPE)
+                 HAVING GROUPING(TRFTYPE) = 0
+             ) LX,
+             (
+                 SELECT A.CTLR_MNGM_NMBR AS VDS_CTLR_NMBR, A.VDS_CTLR_ID, A.LCTN AS LCTN, B.DTCT_NMBR,
+                        B.ISTL_LANE, B.VDS_DTCT_NM, B.DTCT_TYPE_CD AS DTCT_TYPE,
+                        (SELECT CMMN_CD_KOR_NM
+                         FROM TB_CMMN_CD
+                         WHERE CMMN_CLSF_CD = 'ACD'
+                           AND CMMN_CD      = B.DTCT_TYPE_CD) AS DTCT_TYPE_NM
+                 FROM TB_VDS_CTLR A,
+                      TB_VDS_DTCT_MSTR B
+                 WHERE 1=1
+                   AND A.DEL_YN = 'N'
+                   AND B.DEL_YN = 'N'
+                   AND A.CTLR_MNGM_NMBR = B.CTLR_MNGM_NMBR
+             ) LY
+        WHERE LY.DTCT_NMBR  = LX.DTCT_NMBR
+        ORDER BY LY.VDS_CTLR_NMBR, LY.DTCT_NMBR, LY.ISTL_LANE
         ]]>
     </select>
 
     <select id="findAllDayStatByDateRange" parameterType="java.util.HashMap" resultType="com.its.api.op.model.dto.vds.VdsDtctTfvlDayDto">
        <![CDATA[
-        SELECT FACSEQ AS FCLT_SEQ, FCLT_TYPE, FCLT_ID, FCLT_NM, RGST_DT
+        SELECT LY.VDS_CTLR_NMBR, LY.VDS_CTLR_ID, LY.LCTN, LY.DTCT_NMBR, LY.ISTL_LANE, LY.VDS_DTCT_NM,
+               LY.DTCT_TYPE, LY.DTCT_TYPE_NM, LX.TRFTYPE,  LY.VDS_CTLR_NMBR || '.' || LY.LCTN AS NM,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(TOTTFVL, 0, 0, TOTTFVL)) AS TOTTFVL,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(AVGTFVL, 0, 0, AVGTFVL)) AS AVGTFVLX,
+               DECODE(NVL(L01,0)+NVL(L02,0)+NVL(L03,0)+NVL(L04,0)+NVL(L05,0)+NVL(L06,0)+NVL(L07,0)+
+                      NVL(L08,0)+NVL(L09,0)+NVL(L10,0)+NVL(L11,0)+NVL(L12,0)+NVL(L13,0)+NVL(L14,0)+
+                      NVL(L15,0)+NVL(L16,0)+NVL(L17,0)+NVL(L18,0)+NVL(L19,0)+NVL(L20,0)+NVL(L21,0)+
+                      NVL(L22,0)+NVL(L23,0)+NVL(L24,0)+NVL(L25,0)+NVL(L26,0)+NVL(L27,0)+NVL(L28,0)+
+                      NVL(L29,0)+NVL(L30,0)+NVL(L31,0), 0, 0,
+                      ROUND(
+                                  (NVL(L01,0)+NVL(L02,0)+NVL(L03,0)+NVL(L04,0)+NVL(L05,0)+NVL(L06,0)+NVL(L07,0)+
+                                   NVL(L08,0)+NVL(L09,0)+NVL(L10,0)+NVL(L11,0)+NVL(L12,0)+NVL(L13,0)+NVL(L14,0)+
+                                   NVL(L15,0)+NVL(L16,0)+NVL(L17,0)+NVL(L18,0)+NVL(L19,0)+NVL(L20,0)+NVL(L21,0)+
+                                   NVL(L22,0)+NVL(L23,0)+NVL(L24,0)+NVL(L25,0)+NVL(L26,0)+NVL(L27,0)+NVL(L28,0)+
+                                   NVL(L29,0)+NVL(L30,0)+NVL(L31,0)) /
+                                  (DECODE(L01,NULL,0,1)+DECODE(L02,NULL,0,1)+DECODE(L03,NULL,0,1)+
+                                   DECODE(L04,NULL,0,1)+DECODE(L05,NULL,0,1)+DECODE(L06,NULL,0,1)+
+                                   DECODE(L07,NULL,0,1)+DECODE(L08,NULL,0,1)+DECODE(L09,NULL,0,1)+
+                                   DECODE(L10,NULL,0,1)+DECODE(L11,NULL,0,1)+DECODE(L12,NULL,0,1)+
+                                   DECODE(L13,NULL,0,1)+DECODE(L14,NULL,0,1)+DECODE(L15,NULL,0,1)+
+                                   DECODE(L16,NULL,0,1)+DECODE(L17,NULL,0,1)+DECODE(L18,NULL,0,1)+
+                                   DECODE(L19,NULL,0,1)+DECODE(L20,NULL,0,1)+DECODE(L21,NULL,0,1)+
+                                   DECODE(L22,NULL,0,1)+DECODE(L23,NULL,0,1)+DECODE(L24,NULL,0,1)+
+                                   DECODE(L25,NULL,0,1)+DECODE(L26,NULL,0,1)+DECODE(L27,NULL,0,1)+
+                                   DECODE(L28,NULL,0,1)+DECODE(L29,NULL,0,1)+DECODE(L30,NULL,0,1)+
+                                   DECODE(L31,NULL,0,1)), 0)) AS AVGTFVL,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L01, NULL, 0, L01)) AS C01,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L02, NULL, 0, L02)) AS C02,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L03, NULL, 0, L03)) AS C03,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L04, NULL, 0, L04)) AS C04,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L05, NULL, 0, L05)) AS C05,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L06, NULL, 0, L06)) AS C06,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L07, NULL, 0, L07)) AS C07,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L08, NULL, 0, L08)) AS C08,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L09, NULL, 0, L09)) AS C09,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L10, NULL, 0, L10)) AS C10,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L11, NULL, 0, L11)) AS C11,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L12, NULL, 0, L12)) AS C12,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L13, NULL, 0, L13)) AS C13,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L14, NULL, 0, L14)) AS C14,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L15, NULL, 0, L15)) AS C15,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L16, NULL, 0, L16)) AS C16,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L17, NULL, 0, L17)) AS C17,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L18, NULL, 0, L18)) AS C18,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L19, NULL, 0, L19)) AS C19,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L20, NULL, 0, L20)) AS C20,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L21, NULL, 0, L21)) AS C21,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L22, NULL, 0, L22)) AS C22,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L23, NULL, 0, L23)) AS C23,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L24, NULL, 0, L24)) AS C24,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L25, NULL, 0, L25)) AS C25,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L26, NULL, 0, L26)) AS C26,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L27, NULL, 0, L27)) AS C27,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L28, NULL, 0, L28)) AS C28,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L29, NULL, 0, L29)) AS C29,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L30, NULL, 0, L30)) AS C30,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L31, NULL, 0, L31)) AS C31
         FROM (
-                 SELECT 1 as FACSEQ, 'CCTV' FCLT_TYPE, A.CCTV_CTLR_ID AS FCLT_ID, A.ISTL_LCTN_NM AS FCLT_NM,
-                        CRTN_DT AS RGST_DT
-                 FROM TB_CCTV_CTLR A,
-                      (SELECT CCTV_MNGM_NMBR, CRTN_DT
-                       FROM TB_CCTV_STTS_HS
-                       WHERE CRTN_DT BETWEEN #{FROM_DT} AND #{TO_DT}
-                         AND CMNC_STTS_CD = 'CMS1') B
-                 WHERE A.CCTV_MNGM_NMBR = B.CCTV_MNGM_NMBR
-                 UNION
-                 SELECT 2 as FACSEQ, 'VMS' FCLT_TYPE, A.VMS_CTLR_ID AS FCLT_ID, A.VMS_NM AS FCLT_NM,
-                        RGST_DT AS RGST_DT
-                 FROM TB_VMS_CTLR A,
-                      (SELECT VMS_CTLR_NMBR, RGST_DT
-                       FROM TB_VMS_STTS_HS
-                       WHERE RGST_DT BETWEEN #{FROM_DT} AND #{TO_DT}
-                         AND CONN_STTS_CD = 'CMS1') B
-                 WHERE A.VMS_CTLR_NMBR = B.VMS_CTLR_NMBR
-                 UNION
-                 SELECT 3 as FACSEQ, 'VDS' FCLT_TYPE, A.CTLR_MNGM_NMBR AS FCLT_ID, A.LCTN AS FCLT_NM,
-                        OCRR_DT AS RGST_DT
+                 SELECT GROUPING(DTCT_NMBR) AS GROUPING_DTCT_NMBR,
+                        GROUPING(ISTL_LANE) AS GROUPING_ISTL_LANE,
+                        GROUPING(TRFTYPE)   AS GROUPING_TRFTYPE,
+                        CASE WHEN GROUPING(DTCT_NMBR ) = 1 THEN '검지기' ELSE DTCT_NMBR END AS GROUP_DTCT_NMBR,
+                        CASE WHEN GROUPING(ISTL_LANE)  = 1 THEN '차로'   ELSE ISTL_LANE END AS GROUP_ISTL_LANE,
+                        CASE WHEN GROUPING(TRFTYPE)    = 1 THEN '소계'   ELSE TRFTYPE   END AS GROUP_TRFTYPE,
+                        DTCT_NMBR, ISTL_LANE, TRFTYPE,
+                        SUM(TFVL)           TOTTFVL,
+                        ROUND(AVG(TFVL), 0) AVGTFVL,
+                        SUM(DECODE(STATDAY, '01', TFVL)) AS L01,
+                        SUM(DECODE(STATDAY, '02', TFVL)) AS L02,
+                        SUM(DECODE(STATDAY, '03', TFVL)) AS L03,
+                        SUM(DECODE(STATDAY, '04', TFVL)) AS L04,
+                        SUM(DECODE(STATDAY, '05', TFVL)) AS L05,
+                        SUM(DECODE(STATDAY, '06', TFVL)) AS L06,
+                        SUM(DECODE(STATDAY, '07', TFVL)) AS L07,
+                        SUM(DECODE(STATDAY, '08', TFVL)) AS L08,
+                        SUM(DECODE(STATDAY, '09', TFVL)) AS L09,
+                        SUM(DECODE(STATDAY, '10', TFVL)) AS L10,
+                        SUM(DECODE(STATDAY, '11', TFVL)) AS L11,
+                        SUM(DECODE(STATDAY, '12', TFVL)) AS L12,
+                        SUM(DECODE(STATDAY, '13', TFVL)) AS L13,
+                        SUM(DECODE(STATDAY, '14', TFVL)) AS L14,
+                        SUM(DECODE(STATDAY, '15', TFVL)) AS L15,
+                        SUM(DECODE(STATDAY, '16', TFVL)) AS L16,
+                        SUM(DECODE(STATDAY, '17', TFVL)) AS L17,
+                        SUM(DECODE(STATDAY, '18', TFVL)) AS L18,
+                        SUM(DECODE(STATDAY, '19', TFVL)) AS L19,
+                        SUM(DECODE(STATDAY, '20', TFVL)) AS L20,
+                        SUM(DECODE(STATDAY, '21', TFVL)) AS L21,
+                        SUM(DECODE(STATDAY, '22', TFVL)) AS L22,
+                        SUM(DECODE(STATDAY, '23', TFVL)) AS L23,
+                        SUM(DECODE(STATDAY, '24', TFVL)) AS L24,
+                        SUM(DECODE(STATDAY, '25', TFVL)) AS L25,
+                        SUM(DECODE(STATDAY, '26', TFVL)) AS L26,
+                        SUM(DECODE(STATDAY, '27', TFVL)) AS L27,
+                        SUM(DECODE(STATDAY, '28', TFVL)) AS L28,
+                        SUM(DECODE(STATDAY, '29', TFVL)) AS L29,
+                        SUM(DECODE(STATDAY, '30', TFVL)) AS L30,
+                        SUM(DECODE(STATDAY, '31', TFVL)) AS L31
+                 FROM (
+                          SELECT TO_CHAR(Y.DTCT_NMBR) AS DTCT_NMBR, Y.VDS_DTCT_NM,
+                                 TO_CHAR(Y.ISTL_LANE) AS ISTL_LANE,  X.TRFTYPE, X.STATDAY, X.TFVL
+                          FROM (SELECT /*+ INDEX(A PK_VDS_DTCT_HH_STAT) */
+                                    'DTCT' AS TRFTYPE,
+                                    A.DTCT_NMBR AS VDS_DTCT_NMBR, SUBSTR(A.STAT_DT, 7, 2) AS STATDAY,
+                                    A.TFVL AS TFVL
+                                FROM TB_VDS_DTCT_HH_STAT A
+                                WHERE 1=1
+                                  AND A.STAT_DT               BETWEEN #{FROM_DT} AND ${TO_DT}
+                                  AND SUBSTR(A.STAT_DT, 9, 4) BETWEEN #{FROM_HM} AND ${TO_HM}
+                               ) X,
+                               TB_VDS_DTCT_MSTR Y
+                          WHERE 1=1
+                            AND Y.DEL_YN = 'N'
+                            AND Y.DTCT_NMBR = X.VDS_DTCT_NMBR
+                      )
+                 GROUP BY ROLLUP (DTCT_NMBR, ISTL_LANE, TRFTYPE)
+                 HAVING GROUPING(TRFTYPE) = 0
+             ) LX,
+             (
+                 SELECT A.CTLR_MNGM_NMBR AS VDS_CTLR_NMBR, A.VDS_CTLR_ID, A.LCTN AS LCTN, B.DTCT_NMBR,
+                        B.ISTL_LANE, B.VDS_DTCT_NM, B.DTCT_TYPE_CD AS DTCT_TYPE,
+                        (SELECT CMMN_CD_KOR_NM
+                         FROM TB_CMMN_CD
+                         WHERE CMMN_CLSF_CD = 'ACD'
+                           AND CMMN_CD      = B.DTCT_TYPE_CD) AS DTCT_TYPE_NM
                  FROM TB_VDS_CTLR A,
-                      (SELECT CTLR_MNGM_NMBR, OCRR_DT
-                       FROM TB_VDS_CTLR_STTS_RAW
-                       WHERE OCRR_DT BETWEEN #{FROM_DT} AND #{TO_DT}
-                         AND CMNC_STTS_CD = 'CMS1') B
-                 WHERE A.CTLR_MNGM_NMBR = B.CTLR_MNGM_NMBR
-             )
-        ORDER BY FACSEQ, FCLT_ID, RGST_DT
+                      TB_VDS_DTCT_MSTR B
+                 WHERE 1=1
+                   AND A.DEL_YN = 'N'
+                   AND B.DEL_YN = 'N'
+                   AND A.CTLR_MNGM_NMBR = B.CTLR_MNGM_NMBR
+             ) LY
+        WHERE LY.DTCT_NMBR  = LX.DTCT_NMBR
+        ORDER BY LY.VDS_CTLR_NMBR, LY.DTCT_NMBR, LY.ISTL_LANE
         ]]>
     </select>
 
     <select id="findAllMonthStatByDateRange" parameterType="java.util.HashMap" resultType="com.its.api.op.model.dto.vds.VdsDtctTfvlMonthDto">
        <![CDATA[
-        SELECT INCD_STRT_DT, B.CMMN_CD_KOR_NM, LINK_ID, INCD_TITL
-        FROM TB_INCD_OCRR A,
-             (SELECT CMMN_CD, CMMN_CD_KOR_NM
-              FROM TB_CMMN_CD
-              WHERE CMMN_CLSF_CD = 'IDTU'
-             ) B
-        WHERE INCD_STRT_DT BETWEEN #{FROM_DT} AND #{TO_DT}
-          AND INCD_PRGR_STEP_CD   = 'ISS2'
-          AND A.INCD_TYPE_CLSF_CD = B.CMMN_CD
+        SELECT LY.VDS_CTLR_NMBR, LY.VDS_CTLR_ID, LY.LCTN, LY.DTCT_NMBR, LY.ISTL_LANE, LY.VDS_DTCT_NM,
+               LY.DTCT_TYPE, LY.DTCT_TYPE_NM, LX.TRFTYPE,  LY.VDS_CTLR_NMBR || '.' || LY.LCTN AS NM,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(TOTTFVL, 0, 0, TOTTFVL)) AS TOTTFVL,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(AVGTFVL, 0, 0, AVGTFVL)) AS AVGTFVLX,
+               DECODE(NVL(L01,0)+NVL(L02,0)+NVL(L03,0)+NVL(L04,0)+NVL(L05,0)+NVL(L06,0)+NVL(L07,0)+
+                      NVL(L08,0)+NVL(L09,0)+NVL(L10,0)+NVL(L11,0)+NVL(L12,0), 0, 0,
+                      ROUND(
+                                  (NVL(L01,0)+NVL(L02,0)+NVL(L03,0)+NVL(L04,0)+NVL(L05,0)+NVL(L06,0)+NVL(L07,0)+
+                                   NVL(L08,0)+NVL(L09,0)+NVL(L10,0)+NVL(L11,0)+NVL(L12,0)) /
+                                  (DECODE(L01,NULL,0,1)+DECODE(L02,NULL,0,1)+DECODE(L03,NULL,0,1)+
+                                   DECODE(L04,NULL,0,1)+DECODE(L05,NULL,0,1)+DECODE(L06,NULL,0,1)+
+                                   DECODE(L07,NULL,0,1)+DECODE(L08,NULL,0,1)+DECODE(L09,NULL,0,1)+
+                                   DECODE(L10,NULL,0,1)+DECODE(L11,NULL,0,1)+DECODE(L12,NULL,0,1)), 0)) AS AVGTFVL,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L01, NULL, 0, L01)) AS C01,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L02, NULL, 0, L02)) AS C02,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L03, NULL, 0, L03)) AS C03,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L04, NULL, 0, L04)) AS C04,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L05, NULL, 0, L05)) AS C05,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L06, NULL, 0, L06)) AS C06,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L07, NULL, 0, L07)) AS C07,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L08, NULL, 0, L08)) AS C08,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L09, NULL, 0, L09)) AS C09,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L10, NULL, 0, L10)) AS C10,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L11, NULL, 0, L11)) AS C11,
+               DECODE(LX.DTCT_NMBR, NULL, 0, DECODE(L12, NULL, 0, L12)) AS C12
+        FROM (
+                 SELECT GROUPING(DTCT_NMBR) AS GROUPING_DTCT_NMBR,
+                        GROUPING(ISTL_LANE) AS GROUPING_ISTL_LANE,
+                        GROUPING(TRFTYPE)   AS GROUPING_TRFTYPE,
+                        CASE WHEN GROUPING(DTCT_NMBR ) = 1 THEN '검지기' ELSE DTCT_NMBR END AS GROUP_DTCT_NMBR,
+                        CASE WHEN GROUPING(ISTL_LANE)  = 1 THEN '차로'   ELSE ISTL_LANE END AS GROUP_ISTL_LANE,
+                        CASE WHEN GROUPING(TRFTYPE)    = 1 THEN '소계'   ELSE TRFTYPE   END AS GROUP_TRFTYPE,
+                        DTCT_NMBR, ISTL_LANE, TRFTYPE,
+                        SUM(TFVL)           TOTTFVL,
+                        ROUND(AVG(TFVL), 0) AVGTFVL,
+                        SUM(DECODE(STATDAY, '01', TFVL)) AS L01,
+                        SUM(DECODE(STATDAY, '02', TFVL)) AS L02,
+                        SUM(DECODE(STATDAY, '03', TFVL)) AS L03,
+                        SUM(DECODE(STATDAY, '04', TFVL)) AS L04,
+                        SUM(DECODE(STATDAY, '05', TFVL)) AS L05,
+                        SUM(DECODE(STATDAY, '06', TFVL)) AS L06,
+                        SUM(DECODE(STATDAY, '07', TFVL)) AS L07,
+                        SUM(DECODE(STATDAY, '08', TFVL)) AS L08,
+                        SUM(DECODE(STATDAY, '09', TFVL)) AS L09,
+                        SUM(DECODE(STATDAY, '10', TFVL)) AS L10,
+                        SUM(DECODE(STATDAY, '11', TFVL)) AS L11,
+                        SUM(DECODE(STATDAY, '12', TFVL)) AS L12
+                 FROM (
+                          SELECT TO_CHAR(Y.DTCT_NMBR) AS DTCT_NMBR, Y.VDS_DTCT_NM,
+                                 TO_CHAR(Y.ISTL_LANE) AS ISTL_LANE,  X.TRFTYPE, X.STATDAY, X.TFVL
+                          FROM (SELECT /*+ INDEX(A PK_VDS_DTCT_MN_STAT) */
+                                    'DTCT' AS TRFTYPE,
+                                    A.DTCT_NMBR AS VDS_DTCT_NMBR, SUBSTR(A.STAT_DT, 5, 2) AS STATDAY,
+                                    A.TFVL AS TFVL
+                                FROM TB_VDS_DTCT_MN_STAT A
+                                WHERE 1=1
+                                  AND A.STAT_DT BETWEEN #{FROM_DT} AND #{TO_DT}
+                               ) X,
+                               TB_VDS_DTCT_MSTR Y
+                          WHERE 1=1
+                            AND Y.DEL_YN = 'N'
+                            AND Y.DTCT_NMBR = X.VDS_DTCT_NMBR
+                      )
+                 GROUP BY ROLLUP (DTCT_NMBR, ISTL_LANE, TRFTYPE)
+                 HAVING GROUPING(TRFTYPE) = 0
+             ) LX,
+             (
+                 SELECT A.CTLR_MNGM_NMBR AS VDS_CTLR_NMBR, A.VDS_CTLR_ID, A.LCTN AS LCTN, B.DTCT_NMBR,
+                        B.ISTL_LANE, B.VDS_DTCT_NM, B.DTCT_TYPE_CD AS DTCT_TYPE,
+                        (SELECT CMMN_CD_KOR_NM
+                         FROM TB_CMMN_CD
+                         WHERE CMMN_CLSF_CD = 'ACD'
+                           AND CMMN_CD      = B.DTCT_TYPE_CD) AS DTCT_TYPE_NM
+                 FROM TB_VDS_CTLR A,
+                      TB_VDS_DTCT_MSTR B
+                 WHERE 1=1
+                   AND A.DEL_YN = 'N'
+                   AND B.DEL_YN = 'N'
+                   AND A.CTLR_MNGM_NMBR = B.CTLR_MNGM_NMBR
+             ) LY
+        WHERE LY.DTCT_NMBR  = LX.DTCT_NMBR
+        ORDER BY LY.VDS_CTLR_NMBR, LY.DTCT_NMBR, LY.ISTL_LANE
         ]]>
     </select>