shjung 3 роки тому
батько
коміт
8289eb7537
42 змінених файлів з 2656 додано та 216 видалено
  1. 1 1
      src/main/java/com/its/op/controller/history/TbLinkTrafClctHsController.java
  2. 1 1
      src/main/java/com/its/op/controller/history/TbUnitSystSttsHsController.java
  3. 1 1
      src/main/java/com/its/op/controller/history/TbUserCnnsHsController.java
  4. 3 3
      src/main/java/com/its/op/controller/history/TrafHsController.java
  5. 21 6
      src/main/java/com/its/op/controller/statistics/AtrdController.java
  6. 413 6
      src/main/java/com/its/op/controller/statistics/AtrdTrafficController.java
  7. 21 9
      src/main/java/com/its/op/controller/statistics/FcltSttsController.java
  8. 50 7
      src/main/java/com/its/op/controller/statistics/IncidentController.java
  9. 34 34
      src/main/java/com/its/op/controller/statistics/TrafficController.java
  10. 16 9
      src/main/java/com/its/op/controller/statistics/UnitSystSttsController.java
  11. 12 0
      src/main/java/com/its/op/mapper/statistics/AtrdMapper.java
  12. 19 20
      src/main/java/com/its/op/mapper/statistics/AtrdTrafficMapper.java
  13. 10 0
      src/main/java/com/its/op/mapper/statistics/FcltSttsMapper.java
  14. 15 0
      src/main/java/com/its/op/mapper/statistics/IncidentMapper.java
  15. 7 0
      src/main/java/com/its/op/mapper/statistics/UnitSystSttsMapper.java
  16. 26 0
      src/main/java/com/its/op/service/statistics/impl/AtrdServiceImpl.java
  17. 681 0
      src/main/java/com/its/op/service/statistics/impl/AtrdTrafficServiceImpl.java
  18. 37 0
      src/main/java/com/its/op/service/statistics/impl/FcltSttsServiceImpl.java
  19. 67 0
      src/main/java/com/its/op/service/statistics/impl/IncidentServiceImpl.java
  20. 20 0
      src/main/java/com/its/op/service/statistics/impl/UnitSystSttsServiceImpl.java
  21. 1 1
      src/main/java/com/its/op/vo/history/TrafHsParam.java
  22. 17 0
      src/main/java/com/its/op/vo/statistics/AtrdDailyParam.java
  23. 15 0
      src/main/java/com/its/op/vo/statistics/AtrdHourlyParam.java
  24. 53 0
      src/main/java/com/its/op/vo/statistics/AtrdVo.java
  25. 16 0
      src/main/java/com/its/op/vo/statistics/FcltSttsParam.java
  26. 15 0
      src/main/java/com/its/op/vo/statistics/FcltSttsTypeVo.java
  27. 20 0
      src/main/java/com/its/op/vo/statistics/FcltSttsVo.java
  28. 15 0
      src/main/java/com/its/op/vo/statistics/IncidentParam.java
  29. 22 0
      src/main/java/com/its/op/vo/statistics/IncidentSectVo.java
  30. 20 0
      src/main/java/com/its/op/vo/statistics/IncidentTypeVo.java
  31. 25 0
      src/main/java/com/its/op/vo/statistics/QueryCondParam.java
  32. 3 2
      src/main/java/com/its/op/vo/statistics/TrafficHourParam.java
  33. 0 24
      src/main/java/com/its/op/vo/statistics/TrafficQryVo.java
  34. 3 2
      src/main/java/com/its/op/vo/statistics/TrafficSpecParam.java
  35. 3 10
      src/main/java/com/its/op/vo/statistics/TrafficTermParam.java
  36. 31 0
      src/main/java/com/its/op/vo/statistics/UnitSystSttsParam.java
  37. 20 0
      src/main/java/com/its/op/vo/statistics/UnitSystSttsVo.java
  38. 240 16
      src/main/resources/mybatis/mapper/statistics/Atrd.xml
  39. 451 16
      src/main/resources/mybatis/mapper/statistics/AtrdTraffic.xml
  40. 51 16
      src/main/resources/mybatis/mapper/statistics/FcltStts.xml
  41. 158 16
      src/main/resources/mybatis/mapper/statistics/Incident.xml
  42. 22 16
      src/main/resources/mybatis/mapper/statistics/UnitSystStts.xml

+ 1 - 1
src/main/java/com/its/op/controller/history/TbLinkTrafClctHsController.java

@@ -27,7 +27,7 @@ public class TbLinkTrafClctHsController extends AbstractHistoryController<TbLink
     }
 
     @ApiOperation(value = "이력조회(TB_LINK_TRAF_CLCT_HS, TB_CLCT_SYST_STUP)", response = TbLinkTrafClctHsVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/", produces = {"application/json; charset=utf8"})
+    @PostMapping(value = "/", produces = {"application/json; charset=utf8"})
     @Override
     public ResponseEntity<List<TbLinkTrafClctHsVo>> findAllByDateRange(@RequestBody TbLinkTrafClctHsParam cond, HttpServletRequest request) {
         List<TbLinkTrafClctHsVo> result = this.service.findAllByDateRange(cond);

+ 1 - 1
src/main/java/com/its/op/controller/history/TbUnitSystSttsHsController.java

@@ -27,7 +27,7 @@ public class TbUnitSystSttsHsController extends AbstractHistoryController<TbUnit
     }
 
     @ApiOperation(value = "이력조회(TB_UNIT_SYST_STTS_HS, TB_UNIT_SYST)", response = TbUnitSystSttsHsVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/", produces = {"application/json; charset=utf8"})
+    @PostMapping(value = "/", produces = {"application/json; charset=utf8"})
     @Override
     public ResponseEntity<List<TbUnitSystSttsHsVo>> findAllByDateRange(@RequestBody TbUnitSystSttsHsParam cond, HttpServletRequest request) {
         List<TbUnitSystSttsHsVo> result = this.service.findAllByDateRange(cond);

+ 1 - 1
src/main/java/com/its/op/controller/history/TbUserCnnsHsController.java

@@ -27,7 +27,7 @@ public class TbUserCnnsHsController extends AbstractHistoryController<TbUserCnns
     }
 
     @ApiOperation(value = "이력조회(TB_USERCNNC_HS)", response = TbUserCnnsHsVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/", produces = {"application/json; charset=utf8"})
+    @PostMapping(value = "/", produces = {"application/json; charset=utf8"})
     @Override
     public ResponseEntity<List<TbUserCnnsHsVo>> findAllByDateRange(@RequestBody TbUserCnnsHsParam cond, HttpServletRequest request) {
         List<TbUserCnnsHsVo> result = this.service.findAllByDateRange(cond);

+ 3 - 3
src/main/java/com/its/op/controller/history/TrafHsController.java

@@ -26,7 +26,7 @@ public class TrafHsController extends AbstractHistoryController<TrafHsParam, TbL
     }
 
     @ApiOperation(value = "링크이력조회(TB_LINK_TRAF_HS)", response = TbLinkTrafHsVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/link/", produces = {"application/json; charset=utf8"})
+    @PostMapping(value = "/link/", produces = {"application/json; charset=utf8"})
     @Override
     public ResponseEntity<List<TbLinkTrafHsVo>> findAllByDateRange(@RequestBody TrafHsParam cond, HttpServletRequest request) {
         List<TbLinkTrafHsVo> result = this.service.findAllLinkTrafHsByDateRange(cond);
@@ -42,14 +42,14 @@ public class TrafHsController extends AbstractHistoryController<TrafHsParam, TbL
     }*/
 
     @ApiOperation(value = "서비스링크이력조회(TB_IFSC_TRAF_HS)", response = TbIfscTrafHsVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/ifsc/", produces = {"application/json; charset=utf8"})
+    @PostMapping(value = "/ifsc/", produces = {"application/json; charset=utf8"})
     public ResponseEntity<List<TbIfscTrafHsVo>> findAllIfscTrafHsByDateRange(@RequestBody TrafHsParam cond, HttpServletRequest request) {
         List<TbIfscTrafHsVo> result = this.service.findAllIfscTrafHsByDateRange(cond);
         return new ResponseEntity<>(result, HttpStatus.OK);
     }
 
     @ApiOperation(value = "도로이력조회(TB_ROAD_TRAF_HS)", response = TbRoadTrafHsVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/road/", produces = {"application/json; charset=utf8"})
+    @PostMapping(value = "/road/", produces = {"application/json; charset=utf8"})
     public ResponseEntity<List<TbRoadTrafHsVo>> findAllRoadTrafHsByDateRange(@RequestBody TrafHsParam cond, HttpServletRequest request) {
         List<TbRoadTrafHsVo> result = this.service.findAllRoadTrafHsByDateRange(cond);
         return new ResponseEntity<>(result, HttpStatus.OK);

+ 21 - 6
src/main/java/com/its/op/controller/statistics/AtrdController.java

@@ -1,11 +1,22 @@
 package com.its.op.controller.statistics;
 
 import com.its.op.service.statistics.impl.AtrdServiceImpl;
+import com.its.op.vo.statistics.AtrdDailyParam;
+import com.its.op.vo.statistics.AtrdHourlyParam;
+import com.its.op.vo.statistics.AtrdVo;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
 @Slf4j
 @RestController
 @RequestMapping("/statistics/atrd")
@@ -18,14 +29,18 @@ public class AtrdController {
         this.service = service;
     }
 
-/*
-    @ApiOperation(value = "소통정보통계-기간검색()", response = TrafficVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/term/", produces = {"application/json; charset=utf8"})
-    public ResponseEntity<List<TrafficVo>> findAll(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
-        List<TrafficVo> result = this.service.findAllTerm();
+    @ApiOperation(value = "시간대별통계(TB_ROAD_HH_STAT)", response = AtrdVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/hourly/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdVo>> findAllHourly(@RequestBody AtrdHourlyParam cond, HttpServletRequest request) {
+        List<AtrdVo> result = this.service.findAllHourly(cond);
         return new ResponseEntity<>(result, HttpStatus.OK);
     }
-*/
 
+    @ApiOperation(value = "일별통계(TB_ROAD_15M_STAT)", response = AtrdVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/daily/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdVo>> findAllDaily(@RequestBody AtrdDailyParam cond, HttpServletRequest request) {
+        List<AtrdVo> result = this.service.findAllDaily(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
 
 }

+ 413 - 6
src/main/java/com/its/op/controller/statistics/AtrdTrafficController.java

@@ -1,11 +1,23 @@
 package com.its.op.controller.statistics;
 
 import com.its.op.service.statistics.impl.AtrdTrafficServiceImpl;
+import com.its.op.vo.statistics.TrafficHourParam;
+import com.its.op.vo.statistics.TrafficSpecParam;
+import com.its.op.vo.statistics.TrafficTermParam;
+import com.its.op.vo.statistics.AtrdTrafficVo;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
 @Slf4j
 @RestController
 @RequestMapping("/statistics/atrd-traffic")
@@ -18,14 +30,409 @@ public class AtrdTrafficController {
         this.service = service;
     }
 
-/*
-    @ApiOperation(value = "소통정보통계-기간검색()", response = TrafficVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/term/", produces = {"application/json; charset=utf8"})
-    public ResponseEntity<List<TrafficVo>> findAll(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
-        List<TrafficVo> result = this.service.findAllTerm();
+    //////////////////////////////////////////////////////////////
+    // LINK_ID, IFSC_ID, ROAD_ID 가 검색 기준
+    //////////////////////////////////////////////////////////////
+    //////////// 링크 기간검색
+    @ApiOperation(value = "기간검색-링크 15분()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/term/link-15m/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllLink15MTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllLink15MTerm(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "기간검색-링크 시간()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/term/link-hh/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllLinkHHTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllLinkHHTerm(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "기간검색-링크 일()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/term/link-dd/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllLinkDDTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllLinkDDTerm(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "기간검색-링크 월()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/term/link-mn/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllLinkMNTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllLinkMNTerm(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "기간검색-링크 년()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/term/link-yy/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllLinkYYTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllLinkYYTerm(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    //////////// 서비스 링크 기간검색
+    @ApiOperation(value = "기간검색-서비스링크 15분()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/term/ifsc-15m/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllIfsc15MTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllIfsc15MTerm(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "기간검색-서비스링크 시간()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/term/ifsc-hh/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllIfscHHTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllIfscHHTerm(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "기간검색-서비스링크 일()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/term/ifsc-dd/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllIfscDDTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllIfscDDTerm(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "기간검색-서비스링크 월()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/term/ifsc-mn/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllIfscMNTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllIfscMNTerm(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "기간검색-서비스링크 년()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/term/ifsc-yy/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllIfscYYTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllIfscYYTerm(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    //////////// 도로 기간검색
+    @ApiOperation(value = "기간검색-도로 15분()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/term/road-15m/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllRoad15MTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllRoad15MTerm(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "기간검색-도로 시간()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/term/road-hh/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllRoadHHTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllRoadHHTerm(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "기간검색-도로 일()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/term/road-dd/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllRoadDDTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllRoadDDTerm(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "기간검색-도로 월()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/term/road-mn/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllRoadMNTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllRoadMNTerm(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "기간검색-도로 년()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/term/road-yy/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllRoadYYTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllRoadYYTerm(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    //////////// 링크 시간대검색
+    @ApiOperation(value = "시간대검색-링크 15분()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/hour/link-15m/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllLink15MHour(@RequestBody TrafficHourParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllLink15MHour(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "시간대검색-링크 시간()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/hour/link-hh/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllLinkHHHour(@RequestBody TrafficHourParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllLinkHHHour(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    //////////// 서비스 링크 시간대검색
+    @ApiOperation(value = "시간대검색-서비스링크 15분()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/hour/ifsc-15m/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllIfsc15MHour(@RequestBody TrafficHourParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllIfsc15MHour(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "시간대검색-서비스링크 시간()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/hour/ifsc-hh/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllIfscHHHour(@RequestBody TrafficHourParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllIfscHHHour(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    //////////// 도로 시간대검색
+    @ApiOperation(value = "시간대검색-도로 15분()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/hour/road-15m/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllRoad15MHour(@RequestBody TrafficHourParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllRoad15MHour(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "시간대검색-도로 시간()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/hour/road-hh/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllRoadHHHour(@RequestBody TrafficHourParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllRoadHHHour(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    //////////// 링크 지정시각검색
+    //////////// TODO: 지정일은 반드시 조회조건에 포함시켜야 한다.
+    @ApiOperation(value = "지정시각검색-링크 15분()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/spec/link-15m/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllLink15MSpec(@RequestBody TrafficSpecParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllLink15MSpec(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "지정시각검색-링크 시간()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/spec/link-hh/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllLinkHHSpec(@RequestBody TrafficSpecParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllLinkHHSpec(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    //////////// 서비스 링크 지정시각검색
+    @ApiOperation(value = "지정시각검색-서비스링크 15분()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/spec/ifsc-15m/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllIfsc15MSpec(@RequestBody TrafficSpecParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllIfsc15MSpec(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "지정시각검색-서비스링크 시간()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/spec/ifsc-hh/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllIfscHHSpec(@RequestBody TrafficSpecParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllIfscHHSpec(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    //////////// 도로 지정시각검색
+    @ApiOperation(value = "지정시각검색-도로 15분()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/spec/road-15m/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllRoad15MSpec(@RequestBody TrafficSpecParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllRoad15MSpec(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "지정시각검색-도로 시간()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/spec/road-hh/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllRoadHHSpec(@RequestBody TrafficSpecParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllRoadHHSpec(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    //////////////////////////////////////////////////////////////
+    // ATRD_ID 가 검색 기준
+    //////////////////////////////////////////////////////////////
+    //////////// 링크 기간검색
+    @ApiOperation(value = "기간검색-링크 15분()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/term/link-15m/atrd/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllLink15MByAtrdIdTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllLink15MByAtrdIdTerm(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "기간검색-링크 시간()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/term/link-hh/atrd/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllLinkHHByAtrdIdTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllLinkHHByAtrdIdTerm(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "기간검색-링크 일()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/term/link-dd/atrd/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllLinkDDByAtrdIdTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllLinkDDByAtrdIdTerm(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "기간검색-링크 월()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/term/link-mn/atrd/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllLinkMNByAtrdIdTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllLinkMNByAtrdIdTerm(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "기간검색-링크 년()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/term/link-yy/atrd/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllLinkYYByAtrdIdTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllLinkYYByAtrdIdTerm(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    //////////// 서비스 링크 기간검색
+    @ApiOperation(value = "기간검색-서비스링크 15분()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/term/ifsc-15m/atrd/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllIfsc15MByAtrdIdTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllIfsc15MByAtrdIdTerm(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "기간검색-서비스링크 시간()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/term/ifsc-hh/atrd/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllIfscHHByAtrdIdTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllIfscHHByAtrdIdTerm(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "기간검색-서비스링크 일()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/term/ifsc-dd/atrd/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllIfscDDByAtrdIdTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllIfscDDByAtrdIdTerm(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "기간검색-서비스링크 월()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/term/ifsc-mn/atrd/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllIfscMNByAtrdIdTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllIfscMNByAtrdIdTerm(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "기간검색-서비스링크 년()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/term/ifsc-yy/atrd/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllIfscYYByAtrdIdTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllIfscYYByAtrdIdTerm(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    //////////// 도로 기간검색
+    @ApiOperation(value = "기간검색-도로 15분()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/term/road-15m/atrd/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllRoad15MByAtrdIdTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllRoad15MByAtrdIdTerm(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "기간검색-도로 시간()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/term/road-hh/atrd/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllRoadHHByAtrdIdTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllRoadHHByAtrdIdTerm(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "기간검색-도로 일()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/term/road-dd/atrd/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllRoadDDByAtrdIdTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllRoadDDByAtrdIdTerm(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "기간검색-도로 월()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/term/road-mn/atrd/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllRoadMNByAtrdIdTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllRoadMNByAtrdIdTerm(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "기간검색-도로 년()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/term/road-yy/atrd/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllRoadYYByAtrdIdTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllRoadYYByAtrdIdTerm(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    //////////// 링크 시간대검색
+    @ApiOperation(value = "시간대검색-링크 15분()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/hour/link-15m/atrd/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllLink15MByAtrdIdHour(@RequestBody TrafficHourParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllLink15MByAtrdIdHour(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "시간대검색-링크 시간()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/hour/link-hh/atrd/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllLinkHHByAtrdIdHour(@RequestBody TrafficHourParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllLinkHHByAtrdIdHour(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    //////////// 서비스 링크 시간대검색
+    @ApiOperation(value = "시간대검색-서비스링크 15분()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/hour/ifsc-15m/atrd/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllIfsc15MByAtrdIdHour(@RequestBody TrafficHourParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllIfsc15MByAtrdIdHour(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "시간대검색-서비스링크 시간()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/hour/ifsc-hh/atrd/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllIfscHHByAtrdIdHour(@RequestBody TrafficHourParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllIfscHHByAtrdIdHour(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    //////////// 도로 시간대검색
+    @ApiOperation(value = "시간대검색-도로 15분()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/hour/road-15m/atrd/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllRoad15MByAtrdIdHour(@RequestBody TrafficHourParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllRoad15MByAtrdIdHour(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "시간대검색-도로 시간()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/hour/road-hh/atrd/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllRoadHHByAtrdIdHour(@RequestBody TrafficHourParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllRoadHHByAtrdIdHour(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    //////////// 링크 지정시각검색
+    //////////// TODO: 지정일은 반드시 조회조건에 포함시켜야 한다.
+    @ApiOperation(value = "지정시각검색-링크 15분()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/spec/link-15m/atrd/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllLink15MByAtrdIdSpec(@RequestBody TrafficSpecParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllLink15MByAtrdIdSpec(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "지정시각검색-링크 시간()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/spec/link-hh/atrd/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllLinkHHByAtrdIdSpec(@RequestBody TrafficSpecParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllLinkHHByAtrdIdSpec(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    //////////// 서비스 링크 지정시각검색
+    @ApiOperation(value = "지정시각검색-서비스링크 15분()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/spec/ifsc-15m/atrd/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllIfsc15MByAtrdIdSpec(@RequestBody TrafficSpecParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllIfsc15MByAtrdIdSpec(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "지정시각검색-서비스링크 시간()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/spec/ifsc-hh/atrd/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllIfscHHByAtrdIdSpec(@RequestBody TrafficSpecParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllIfscHHByAtrdIdSpec(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    //////////// 도로 지정시각검색
+    @ApiOperation(value = "지정시각검색-도로 15분()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/spec/road-15m/atrd/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllRoad15MByAtrdIdSpec(@RequestBody TrafficSpecParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllRoad15MByAtrdIdSpec(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "지정시각검색-도로 시간()", response = AtrdTrafficVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/spec/road-hh/atrd/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<AtrdTrafficVo>> findAllRoadHHByAtrdIdSpec(@RequestBody TrafficSpecParam cond, HttpServletRequest request) {
+        List<AtrdTrafficVo> result = this.service.findAllRoadHHByAtrdIdSpec(cond);
         return new ResponseEntity<>(result, HttpStatus.OK);
     }
-*/
 
 
 }

+ 21 - 9
src/main/java/com/its/op/controller/statistics/FcltSttsController.java

@@ -1,14 +1,22 @@
 package com.its.op.controller.statistics;
 
 import com.its.op.service.statistics.impl.FcltSttsServiceImpl;
+import com.its.op.vo.statistics.FcltSttsParam;
+import com.its.op.vo.statistics.FcltSttsTypeVo;
+import com.its.op.vo.statistics.FcltSttsVo;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
 
 @Slf4j
 @RestController
-@RequestMapping("/statistics/atrd")
+@RequestMapping("/statistics/fclt-stts")
 @Api(tags = "03.통계-분석-5.시설물통신단절통계", description="시설물통신단절통계")
 public class FcltSttsController {
 
@@ -18,14 +26,18 @@ public class FcltSttsController {
         this.service = service;
     }
 
-/*
-    @ApiOperation(value = "소통정보통계-기간검색()", response = TrafficVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/term/", produces = {"application/json; charset=utf8"})
-    public ResponseEntity<List<TrafficVo>> findAll(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
-        List<TrafficVo> result = this.service.findAllTerm();
+    @ApiOperation(value = "시설물 구분목록", response = FcltSttsTypeVo.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/type/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<FcltSttsTypeVo>> findAll(HttpServletRequest request) {
+        List<FcltSttsTypeVo> result = this.service.findAllFcltSttsType();
         return new ResponseEntity<>(result, HttpStatus.OK);
     }
-*/
 
+    @ApiOperation(value = "시설물 통신단절통계조회", response = FcltSttsVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<FcltSttsVo>> findAllLink15MTerm(@RequestBody FcltSttsParam cond, HttpServletRequest request) {
+        List<FcltSttsVo> result = this.service.findAllFcltStts(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
 
 }

+ 50 - 7
src/main/java/com/its/op/controller/statistics/IncidentController.java

@@ -1,14 +1,25 @@
 package com.its.op.controller.statistics;
 
 import com.its.op.service.statistics.impl.IncidentServiceImpl;
+import com.its.op.vo.statistics.IncidentParam;
+import com.its.op.vo.statistics.IncidentSectVo;
+import com.its.op.vo.statistics.IncidentTypeVo;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
 @Slf4j
 @RestController
-@RequestMapping("/statistics/atrd")
+@RequestMapping("/statistics/incident")
 @Api(tags = "03.통계-분석-4.돌발상황통계", description="돌발상황통계")
 public class IncidentController {
 
@@ -18,14 +29,46 @@ public class IncidentController {
         this.service = service;
     }
 
-/*
-    @ApiOperation(value = "소통정보통계-기간검색()", response = TrafficVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/term/", produces = {"application/json; charset=utf8"})
-    public ResponseEntity<List<TrafficVo>> findAll(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
-        List<TrafficVo> result = this.service.findAllTerm();
+    @ApiOperation(value = "유형별통계-일간통계(TB_INCD_TYPE_DD_STAT)", response = IncidentTypeVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/type/dd/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<IncidentTypeVo>> findAllTypeDD(@RequestBody IncidentParam cond, HttpServletRequest request) {
+        List<IncidentTypeVo> result = this.service.findAllTypeDD(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "유형별통계-월간통계(TB_INCD_TYPE_MN_STAT)", response = IncidentTypeVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/type/mn/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<IncidentTypeVo>> findAllTypeMN(@RequestBody IncidentParam cond, HttpServletRequest request) {
+        List<IncidentTypeVo> result = this.service.findAllTypeMN(cond);
         return new ResponseEntity<>(result, HttpStatus.OK);
     }
-*/
 
+    @ApiOperation(value = "유형별통계-년간통계(TB_INCD_TYPE_MN_STAT)", response = IncidentTypeVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/type/yy/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<IncidentTypeVo>> findAllTypeYY(@RequestBody IncidentParam cond, HttpServletRequest request) {
+        List<IncidentTypeVo> result = this.service.findAllTypeYY(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "구간별통계-일간통계(TB_INCD_SECT_DD_STAT)", response = IncidentSectVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/sect/dd/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<IncidentSectVo>> findAllSectDD(@RequestBody IncidentParam cond, HttpServletRequest request) {
+        List<IncidentSectVo> result = this.service.findAllSectDD(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "구간별통계-월간통계(TB_INCD_SECT_MN_STAT)", response = IncidentSectVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/sect/mn/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<IncidentSectVo>> findAllSectMN(@RequestBody IncidentParam cond, HttpServletRequest request) {
+        List<IncidentSectVo> result = this.service.findAllSectMN(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    @ApiOperation(value = "구간별통계-년간통계(TB_INCD_SECT_MN_STAT)", response = IncidentSectVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/sect/yy/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<IncidentSectVo>> findAllSectYY(@RequestBody IncidentParam cond, HttpServletRequest request) {
+        List<IncidentSectVo> result = this.service.findAllSectYY(cond);
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
 
 }

+ 34 - 34
src/main/java/com/its/op/controller/statistics/TrafficController.java

@@ -35,35 +35,35 @@ public class TrafficController {
 
     //////////// 링크 기간검색
     @ApiOperation(value = "기간검색-링크 15분()", response = TrafficVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/term/link-15m/", produces = {"application/json; charset=utf8"})
+    @PostMapping(value = "/term/link-15m/", produces = {"application/json; charset=utf8"})
     public ResponseEntity<List<TrafficVo>> findAllLink15MTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
         List<TrafficVo> result = this.serviceTerm.findAllLink15M(cond);
         return new ResponseEntity<>(result, HttpStatus.OK);
     }
 
     @ApiOperation(value = "기간검색-링크 시간()", response = TrafficVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/term/link-hh/", produces = {"application/json; charset=utf8"})
+    @PostMapping(value = "/term/link-hh/", produces = {"application/json; charset=utf8"})
     public ResponseEntity<List<TrafficVo>> findAllLinkHHTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
         List<TrafficVo> result = this.serviceTerm.findAllLinkHH(cond);
         return new ResponseEntity<>(result, HttpStatus.OK);
     }
 
     @ApiOperation(value = "기간검색-링크 일()", response = TrafficVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/term/link-dd/", produces = {"application/json; charset=utf8"})
+    @PostMapping(value = "/term/link-dd/", produces = {"application/json; charset=utf8"})
     public ResponseEntity<List<TrafficVo>> findAllLinkDDTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
         List<TrafficVo> result = this.serviceTerm.findAllLinkDD(cond);
         return new ResponseEntity<>(result, HttpStatus.OK);
     }
 
     @ApiOperation(value = "기간검색-링크 월()", response = TrafficVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/term/link-mn/", produces = {"application/json; charset=utf8"})
+    @PostMapping(value = "/term/link-mn/", produces = {"application/json; charset=utf8"})
     public ResponseEntity<List<TrafficVo>> findAllLinkMNTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
         List<TrafficVo> result = this.serviceTerm.findAllLinkMN(cond);
         return new ResponseEntity<>(result, HttpStatus.OK);
     }
 
     @ApiOperation(value = "기간검색-링크 년()", response = TrafficVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/term/link-yy/", produces = {"application/json; charset=utf8"})
+    @PostMapping(value = "/term/link-yy/", produces = {"application/json; charset=utf8"})
     public ResponseEntity<List<TrafficVo>> findAllLinkYYTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
         List<TrafficVo> result = this.serviceTerm.findAllLinkYY(cond);
         return new ResponseEntity<>(result, HttpStatus.OK);
@@ -71,35 +71,35 @@ public class TrafficController {
 
     //////////// 서비스 링크 기간검색
     @ApiOperation(value = "기간검색-서비스링크 15분()", response = TrafficVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/term/ifsc-15m/", produces = {"application/json; charset=utf8"})
+    @PostMapping(value = "/term/ifsc-15m/", produces = {"application/json; charset=utf8"})
     public ResponseEntity<List<TrafficVo>> findAllIfsc15MTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
         List<TrafficVo> result = this.serviceTerm.findAllIfsc15M(cond);
         return new ResponseEntity<>(result, HttpStatus.OK);
     }
 
     @ApiOperation(value = "기간검색-서비스링크 시간()", response = TrafficVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/term/ifsc-hh/", produces = {"application/json; charset=utf8"})
+    @PostMapping(value = "/term/ifsc-hh/", produces = {"application/json; charset=utf8"})
     public ResponseEntity<List<TrafficVo>> findAllIfscHHTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
         List<TrafficVo> result = this.serviceTerm.findAllIfscHH(cond);
         return new ResponseEntity<>(result, HttpStatus.OK);
     }
 
     @ApiOperation(value = "기간검색-서비스링크 일()", response = TrafficVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/term/ifsc-dd/", produces = {"application/json; charset=utf8"})
+    @PostMapping(value = "/term/ifsc-dd/", produces = {"application/json; charset=utf8"})
     public ResponseEntity<List<TrafficVo>> findAllIfscDDTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
         List<TrafficVo> result = this.serviceTerm.findAllIfscDD(cond);
         return new ResponseEntity<>(result, HttpStatus.OK);
     }
 
     @ApiOperation(value = "기간검색-서비스링크 월()", response = TrafficVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/term/ifsc-mn/", produces = {"application/json; charset=utf8"})
+    @PostMapping(value = "/term/ifsc-mn/", produces = {"application/json; charset=utf8"})
     public ResponseEntity<List<TrafficVo>> findAllIfscMNTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
         List<TrafficVo> result = this.serviceTerm.findAllIfscMN(cond);
         return new ResponseEntity<>(result, HttpStatus.OK);
     }
 
     @ApiOperation(value = "기간검색-서비스링크 년()", response = TrafficVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/term/ifsc-yy/", produces = {"application/json; charset=utf8"})
+    @PostMapping(value = "/term/ifsc-yy/", produces = {"application/json; charset=utf8"})
     public ResponseEntity<List<TrafficVo>> findAllIfscYYTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
         List<TrafficVo> result = this.serviceTerm.findAllIfscYY(cond);
         return new ResponseEntity<>(result, HttpStatus.OK);
@@ -107,35 +107,35 @@ public class TrafficController {
 
     //////////// 도로 기간검색
     @ApiOperation(value = "기간검색-도로 15분()", response = TrafficVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/term/road-15m/", produces = {"application/json; charset=utf8"})
+    @PostMapping(value = "/term/road-15m/", produces = {"application/json; charset=utf8"})
     public ResponseEntity<List<TrafficVo>> findAllRoad15MTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
         List<TrafficVo> result = this.serviceTerm.findAllRoad15M(cond);
         return new ResponseEntity<>(result, HttpStatus.OK);
     }
 
     @ApiOperation(value = "기간검색-도로 시간()", response = TrafficVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/term/road-hh/", produces = {"application/json; charset=utf8"})
+    @PostMapping(value = "/term/road-hh/", produces = {"application/json; charset=utf8"})
     public ResponseEntity<List<TrafficVo>> findAllRoadHHTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
         List<TrafficVo> result = this.serviceTerm.findAllRoadHH(cond);
         return new ResponseEntity<>(result, HttpStatus.OK);
     }
 
     @ApiOperation(value = "기간검색-도로 일()", response = TrafficVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/term/road-dd/", produces = {"application/json; charset=utf8"})
+    @PostMapping(value = "/term/road-dd/", produces = {"application/json; charset=utf8"})
     public ResponseEntity<List<TrafficVo>> findAllRoadDDTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
         List<TrafficVo> result = this.serviceTerm.findAllRoadDD(cond);
         return new ResponseEntity<>(result, HttpStatus.OK);
     }
 
     @ApiOperation(value = "기간검색-도로 월()", response = TrafficVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/term/road-mn/", produces = {"application/json; charset=utf8"})
+    @PostMapping(value = "/term/road-mn/", produces = {"application/json; charset=utf8"})
     public ResponseEntity<List<TrafficVo>> findAllRoadMNTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
         List<TrafficVo> result = this.serviceTerm.findAllRoadMN(cond);
         return new ResponseEntity<>(result, HttpStatus.OK);
     }
 
     @ApiOperation(value = "기간검색-도로 년()", response = TrafficVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/term/road-yy/", produces = {"application/json; charset=utf8"})
+    @PostMapping(value = "/term/road-yy/", produces = {"application/json; charset=utf8"})
     public ResponseEntity<List<TrafficVo>> findAllRoadYYTerm(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
         List<TrafficVo> result = this.serviceTerm.findAllRoadYY(cond);
         return new ResponseEntity<>(result, HttpStatus.OK);
@@ -143,14 +143,14 @@ public class TrafficController {
 
     //////////// 링크 시간대검색
     @ApiOperation(value = "시간대검색-링크 15분()", response = TrafficVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/hour/link-15m/", produces = {"application/json; charset=utf8"})
+    @PostMapping(value = "/hour/link-15m/", produces = {"application/json; charset=utf8"})
     public ResponseEntity<List<TrafficVo>> findAllLink15MHour(@RequestBody TrafficHourParam cond, HttpServletRequest request) {
         List<TrafficVo> result = this.serviceHour.findAllLink15M(cond);
         return new ResponseEntity<>(result, HttpStatus.OK);
     }
 
     @ApiOperation(value = "시간대검색-링크 시간()", response = TrafficVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/hour/link-hh/", produces = {"application/json; charset=utf8"})
+    @PostMapping(value = "/hour/link-hh/", produces = {"application/json; charset=utf8"})
     public ResponseEntity<List<TrafficVo>> findAllLinkHHHour(@RequestBody TrafficHourParam cond, HttpServletRequest request) {
         List<TrafficVo> result = this.serviceHour.findAllLinkHH(cond);
         return new ResponseEntity<>(result, HttpStatus.OK);
@@ -158,14 +158,14 @@ public class TrafficController {
 
     //////////// 서비스 링크 시간대검색
     @ApiOperation(value = "시간대검색-서비스링크 15분()", response = TrafficVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/hour/ifsc-15m/", produces = {"application/json; charset=utf8"})
+    @PostMapping(value = "/hour/ifsc-15m/", produces = {"application/json; charset=utf8"})
     public ResponseEntity<List<TrafficVo>> findAllIfsc15MHour(@RequestBody TrafficHourParam cond, HttpServletRequest request) {
         List<TrafficVo> result = this.serviceHour.findAllIfsc15M(cond);
         return new ResponseEntity<>(result, HttpStatus.OK);
     }
 
     @ApiOperation(value = "시간대검색-서비스링크 시간()", response = TrafficVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/hour/ifsc-hh/", produces = {"application/json; charset=utf8"})
+    @PostMapping(value = "/hour/ifsc-hh/", produces = {"application/json; charset=utf8"})
     public ResponseEntity<List<TrafficVo>> findAllIfscHHHour(@RequestBody TrafficHourParam cond, HttpServletRequest request) {
         List<TrafficVo> result = this.serviceHour.findAllIfscHH(cond);
         return new ResponseEntity<>(result, HttpStatus.OK);
@@ -173,61 +173,61 @@ public class TrafficController {
 
     //////////// 도로 시간대검색
     @ApiOperation(value = "시간대검색-도로 15분()", response = TrafficVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/hour/road-15m/", produces = {"application/json; charset=utf8"})
+    @PostMapping(value = "/hour/road-15m/", produces = {"application/json; charset=utf8"})
     public ResponseEntity<List<TrafficVo>> findAllRoad15MHour(@RequestBody TrafficHourParam cond, HttpServletRequest request) {
         List<TrafficVo> result = this.serviceHour.findAllRoad15M(cond);
         return new ResponseEntity<>(result, HttpStatus.OK);
     }
 
     @ApiOperation(value = "시간대검색-도로 시간()", response = TrafficVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/hour/road-hh/", produces = {"application/json; charset=utf8"})
+    @PostMapping(value = "/hour/road-hh/", produces = {"application/json; charset=utf8"})
     public ResponseEntity<List<TrafficVo>> findAllRoadHHHour(@RequestBody TrafficHourParam cond, HttpServletRequest request) {
         List<TrafficVo> result = this.serviceHour.findAllRoadHH(cond);
         return new ResponseEntity<>(result, HttpStatus.OK);
     }
 
     //////////// 링크 지정시각검색
+    //////////// TODO: 지정일은 반드시 조회조건에 포함시켜야 한다.
     @ApiOperation(value = "지정시각검색-링크 15분()", response = TrafficVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/spec/link-15m/", produces = {"application/json; charset=utf8"})
-    public ResponseEntity<List<TrafficVo>> findAllLink15MHour(@RequestBody TrafficSpecParam cond, HttpServletRequest request) {
+    @PostMapping(value = "/spec/link-15m/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<TrafficVo>> findAllLink15MSpec(@RequestBody TrafficSpecParam cond, HttpServletRequest request) {
         List<TrafficVo> result = this.serviceSpec.findAllLink15M(cond);
         return new ResponseEntity<>(result, HttpStatus.OK);
     }
 
     @ApiOperation(value = "지정시각검색-링크 시간()", response = TrafficVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/spec/link-hh/", produces = {"application/json; charset=utf8"})
-    public ResponseEntity<List<TrafficVo>> findAllLinkHHHour(@RequestBody TrafficSpecParam cond, HttpServletRequest request) {
+    @PostMapping(value = "/spec/link-hh/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<TrafficVo>> findAllLinkHHSpec(@RequestBody TrafficSpecParam cond, HttpServletRequest request) {
         List<TrafficVo> result = this.serviceSpec.findAllLinkHH(cond);
         return new ResponseEntity<>(result, HttpStatus.OK);
     }
 
     //////////// 서비스 링크 지정시각검색
-    //////////// TODO: 지정일은 반드시 조회조건에 포함시켜야 한다.
     @ApiOperation(value = "지정시각검색-서비스링크 15분()", response = TrafficVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/spec/ifsc-15m/", produces = {"application/json; charset=utf8"})
-    public ResponseEntity<List<TrafficVo>> findAllIfsc15MHour(@RequestBody TrafficSpecParam cond, HttpServletRequest request) {
+    @PostMapping(value = "/spec/ifsc-15m/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<TrafficVo>> findAllIfsc15MSpec(@RequestBody TrafficSpecParam cond, HttpServletRequest request) {
         List<TrafficVo> result = this.serviceSpec.findAllIfsc15M(cond);
         return new ResponseEntity<>(result, HttpStatus.OK);
     }
 
     @ApiOperation(value = "지정시각검색-서비스링크 시간()", response = TrafficVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/spec/ifsc-hh/", produces = {"application/json; charset=utf8"})
-    public ResponseEntity<List<TrafficVo>> findAllIfscHHHour(@RequestBody TrafficSpecParam cond, HttpServletRequest request) {
+    @PostMapping(value = "/spec/ifsc-hh/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<TrafficVo>> findAllIfscHHSpec(@RequestBody TrafficSpecParam cond, HttpServletRequest request) {
         List<TrafficVo> result = this.serviceSpec.findAllIfscHH(cond);
         return new ResponseEntity<>(result, HttpStatus.OK);
     }
 
     //////////// 도로 지정시각검색
     @ApiOperation(value = "지정시각검색-도로 15분()", response = TrafficVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/spec/road-15m/", produces = {"application/json; charset=utf8"})
-    public ResponseEntity<List<TrafficVo>> findAllRoad15MHour(@RequestBody TrafficSpecParam cond, HttpServletRequest request) {
+    @PostMapping(value = "/spec/road-15m/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<TrafficVo>> findAllRoad15MSpec(@RequestBody TrafficSpecParam cond, HttpServletRequest request) {
         List<TrafficVo> result = this.serviceSpec.findAllRoad15M(cond);
         return new ResponseEntity<>(result, HttpStatus.OK);
     }
 
     @ApiOperation(value = "지정시각검색-도로 시간()", response = TrafficVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/spec/road-hh/", produces = {"application/json; charset=utf8"})
-    public ResponseEntity<List<TrafficVo>> findAllRoadHHHour(@RequestBody TrafficSpecParam cond, HttpServletRequest request) {
+    @PostMapping(value = "/spec/road-hh/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<TrafficVo>> findAllRoadHHSpec(@RequestBody TrafficSpecParam cond, HttpServletRequest request) {
         List<TrafficVo> result = this.serviceSpec.findAllRoadHH(cond);
         return new ResponseEntity<>(result, HttpStatus.OK);
     }

+ 16 - 9
src/main/java/com/its/op/controller/statistics/UnitSystSttsController.java

@@ -1,15 +1,25 @@
 package com.its.op.controller.statistics;
 
 import com.its.op.service.statistics.impl.UnitSystSttsServiceImpl;
+import com.its.op.vo.statistics.UnitSystSttsParam;
+import com.its.op.vo.statistics.UnitSystSttsVo;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
 @Slf4j
 @RestController
-@RequestMapping("/statistics/atrd")
-@Api(tags = "03.통계-분석-5.시설물통신단절통계", description="시설물통신단절통계")
+@RequestMapping("/statistics/unit-syst-stts")
+@Api(tags = "03.통계-분석-6.프로세스상태통계", description="프로세스상태통계")
 public class UnitSystSttsController {
 
     private UnitSystSttsServiceImpl service;
@@ -18,14 +28,11 @@ public class UnitSystSttsController {
         this.service = service;
     }
 
-/*
-    @ApiOperation(value = "소통정보통계-기간검색()", response = TrafficVo.class, responseContainer = "ArrayList")
-    @GetMapping(value = "/term/", produces = {"application/json; charset=utf8"})
-    public ResponseEntity<List<TrafficVo>> findAll(@RequestBody TrafficTermParam cond, HttpServletRequest request) {
-        List<TrafficVo> result = this.service.findAllTerm();
+    @ApiOperation(value = "프로세스상태통계조회", response = UnitSystSttsVo.class, responseContainer = "ArrayList")
+    @PostMapping(value = "/", produces = {"application/json; charset=utf8"})
+    public ResponseEntity<List<UnitSystSttsVo>> findAllByDateRange(@RequestBody UnitSystSttsParam cond, HttpServletRequest request) {
+        List<UnitSystSttsVo> result = this.service.findAllByDateRange(cond);
         return new ResponseEntity<>(result, HttpStatus.OK);
     }
-*/
-
 
 }

+ 12 - 0
src/main/java/com/its/op/mapper/statistics/AtrdMapper.java

@@ -1,8 +1,20 @@
 package com.its.op.mapper.statistics;
 
+import com.its.op.vo.statistics.AtrdDailyParam;
+import com.its.op.vo.statistics.AtrdHourlyParam;
+import com.its.op.vo.statistics.AtrdVo;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 @Mapper
 public interface AtrdMapper {
 
+    // 시간대별통계
+    List<AtrdVo> findAllHourly(@Param("cond") AtrdHourlyParam cond);
+
+    // 일별통계
+    List<AtrdVo> findAllDaily(@Param("cond") AtrdDailyParam cond);
+
 }

+ 19 - 20
src/main/java/com/its/op/mapper/statistics/AtrdTrafficMapper.java

@@ -1,7 +1,6 @@
 package com.its.op.mapper.statistics;
 
-import com.its.op.vo.statistics.AtrdTrafficVo;
-import com.its.op.vo.statistics.TrafficQryVo;
+import com.its.op.vo.statistics.*;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -11,30 +10,30 @@ import java.util.List;
 public interface AtrdTrafficMapper {
 
     // 기간 검색 - 15분, 시간, 일, 월, 년(링크, 서비스링크, 도로)
-    List<AtrdTrafficVo> findAllLinkStatTermById(@Param("cond") TrafficQryVo cond);
-    List<AtrdTrafficVo> findAllIfscStatTermById(@Param("cond") TrafficQryVo cond);
-    List<AtrdTrafficVo> findAllRoadStatTermById(@Param("cond") TrafficQryVo cond);
+    List<AtrdTrafficVo> findAllLinkStatByIdTerm(@Param("cond") TrafficTermParam cond);
+    List<AtrdTrafficVo> findAllIfscStatByIdTerm(@Param("cond") TrafficTermParam cond);
+    List<AtrdTrafficVo> findAllRoadStatByIdTerm(@Param("cond") TrafficTermParam cond);
 
-    List<AtrdTrafficVo> findAllLinkStatByRoadId(@Param("cond") TrafficQryVo cond);
-    List<AtrdTrafficVo> findAllIfscStatByRoadId(@Param("cond") TrafficQryVo cond);
-    List<AtrdTrafficVo> findAllRoadStatByRoadId(@Param("cond") TrafficQryVo cond);
+    List<AtrdTrafficVo> findAllLinkStatByAtrdIdTerm(@Param("cond") TrafficTermParam cond);
+    List<AtrdTrafficVo> findAllIfscStatByAtrdIdTerm(@Param("cond") TrafficTermParam cond);
+    List<AtrdTrafficVo> findAllRoadStatByAtrdIdTerm(@Param("cond") TrafficTermParam cond);
 
     // 시간대 검색 - 15분, 시간(링크, 서비스링크, 도로)
-    List<AtrdTrafficVo> findAllLinkStatHourById(@Param("cond") TrafficQryVo cond);
-    List<AtrdTrafficVo> findAllIfscStatHourById(@Param("cond") TrafficQryVo cond);
-    List<AtrdTrafficVo> findAllRoadStatHourById(@Param("cond") TrafficQryVo cond);
+    List<AtrdTrafficVo> findAllLinkStatByIdHour(@Param("cond") TrafficHourParam cond);
+    List<AtrdTrafficVo> findAllIfscStatByIdHour(@Param("cond") TrafficHourParam cond);
+    List<AtrdTrafficVo> findAllRoadStatByIdHour(@Param("cond") TrafficHourParam cond);
 
-    List<AtrdTrafficVo> findAllLinkStatHourByRoadId(@Param("cond") TrafficQryVo cond);
-    List<AtrdTrafficVo> findAllIfscStatHourByRoadId(@Param("cond") TrafficQryVo cond);
-    List<AtrdTrafficVo> findAllRoadStatHourByRoadId(@Param("cond") TrafficQryVo cond);
+    List<AtrdTrafficVo> findAllLinkStatByAtrdIdHour(@Param("cond") TrafficHourParam cond);
+    List<AtrdTrafficVo> findAllIfscStatByAtrdIdHour(@Param("cond") TrafficHourParam cond);
+    List<AtrdTrafficVo> findAllRoadStatByAtrdIdHour(@Param("cond") TrafficHourParam cond);
 
     // 지정시각 거색 - 15분, 시간(링크, 서비스링크, 도로)
-    List<AtrdTrafficVo> findAllLinkStatSpecById(@Param("cond") TrafficQryVo cond);
-    List<AtrdTrafficVo> findAllIfscStatSpecById(@Param("cond") TrafficQryVo cond);
-    List<AtrdTrafficVo> findAllRoadStatSpecById(@Param("cond") TrafficQryVo cond);
+    List<AtrdTrafficVo> findAllLinkStatByIdSpec(@Param("cond") TrafficSpecParam cond);
+    List<AtrdTrafficVo> findAllIfscStatByIdSpec(@Param("cond") TrafficSpecParam cond);
+    List<AtrdTrafficVo> findAllRoadStatByIdSpec(@Param("cond") TrafficSpecParam cond);
 
-    List<AtrdTrafficVo> findAllLinkStatSpecByRoadId(@Param("cond") TrafficQryVo cond);
-    List<AtrdTrafficVo> findAllIfscStatSpecByRoadId(@Param("cond") TrafficQryVo cond);
-    List<AtrdTrafficVo> findAllRoadStatSpecByRoadId(@Param("cond") TrafficQryVo cond);
+    List<AtrdTrafficVo> findAllLinkStatByAtrdIdSpec(@Param("cond") TrafficSpecParam cond);
+    List<AtrdTrafficVo> findAllIfscStatByAtrdIdSpec(@Param("cond") TrafficSpecParam cond);
+    List<AtrdTrafficVo> findAllRoadStatByAtrdIdSpec(@Param("cond") TrafficSpecParam cond);
 
 }

+ 10 - 0
src/main/java/com/its/op/mapper/statistics/FcltSttsMapper.java

@@ -1,8 +1,18 @@
 package com.its.op.mapper.statistics;
 
+import com.its.op.vo.statistics.FcltSttsParam;
+import com.its.op.vo.statistics.FcltSttsTypeVo;
+import com.its.op.vo.statistics.FcltSttsVo;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 @Mapper
 public interface FcltSttsMapper {
 
+    List<FcltSttsTypeVo> findAllFcltSttsType();
+    List<FcltSttsVo> findAllFcltSttsCCTV(@Param("cond") FcltSttsParam cond);
+    List<FcltSttsVo> findAllFcltSttsVDS(@Param("cond") FcltSttsParam cond);
+    List<FcltSttsVo> findAllFcltSttsVMS(@Param("cond") FcltSttsParam cond);
 }

+ 15 - 0
src/main/java/com/its/op/mapper/statistics/IncidentMapper.java

@@ -1,8 +1,23 @@
 package com.its.op.mapper.statistics;
 
+import com.its.op.vo.statistics.IncidentParam;
+import com.its.op.vo.statistics.IncidentSectVo;
+import com.its.op.vo.statistics.IncidentTypeVo;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 @Mapper
 public interface IncidentMapper {
 
+    // 유형별 통계(일, 월, 년 통계)
+    List<IncidentTypeVo> findAllTypeDD(@Param("cond") IncidentParam cond);
+    List<IncidentTypeVo> findAllTypeMN(@Param("cond") IncidentParam cond);
+    List<IncidentTypeVo> findAllTypeYY(@Param("cond") IncidentParam cond);
+
+    // 구간별 통계(일, 월, 년 통계)
+    List<IncidentSectVo> findAllSectDD(@Param("cond") IncidentParam cond);
+    List<IncidentSectVo> findAllSectMN(@Param("cond") IncidentParam cond);
+    List<IncidentSectVo> findAllSectYY(@Param("cond") IncidentParam cond);
 }

+ 7 - 0
src/main/java/com/its/op/mapper/statistics/UnitSystSttsMapper.java

@@ -1,8 +1,15 @@
 package com.its.op.mapper.statistics;
 
+import com.its.op.vo.statistics.UnitSystSttsParam;
+import com.its.op.vo.statistics.UnitSystSttsVo;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 @Mapper
 public interface UnitSystSttsMapper {
 
+    List<UnitSystSttsVo> findAllByDateRange(@Param("cond") UnitSystSttsParam cond);
+
 }

+ 26 - 0
src/main/java/com/its/op/service/statistics/impl/AtrdServiceImpl.java

@@ -2,12 +2,18 @@ package com.its.op.service.statistics.impl;
 
 import com.its.op.mapper.statistics.AtrdMapper;
 import com.its.op.service.statistics.StatisticsService;
+import com.its.op.vo.statistics.AtrdDailyParam;
+import com.its.op.vo.statistics.AtrdHourlyParam;
+import com.its.op.vo.statistics.AtrdVo;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.List;
+
 @Slf4j
 @Getter
 @Setter
@@ -21,4 +27,24 @@ public class AtrdServiceImpl implements StatisticsService {
         this.mapper = mapper;
     }
 
+    public List<AtrdVo> findAllHourly(AtrdHourlyParam cond) {
+        try {
+            return this.mapper.findAllHourly(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllHourly: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdVo>();
+    }
+
+    public List<AtrdVo> findAllDaily(AtrdDailyParam cond) {
+        try {
+            return this.mapper.findAllDaily(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllDaily: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdVo>();
+    }
+
 }

+ 681 - 0
src/main/java/com/its/op/service/statistics/impl/AtrdTrafficServiceImpl.java

@@ -2,12 +2,19 @@ package com.its.op.service.statistics.impl;
 
 import com.its.op.mapper.statistics.AtrdTrafficMapper;
 import com.its.op.service.statistics.StatisticsService;
+import com.its.op.vo.statistics.AtrdTrafficVo;
+import com.its.op.vo.statistics.TrafficHourParam;
+import com.its.op.vo.statistics.TrafficSpecParam;
+import com.its.op.vo.statistics.TrafficTermParam;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.List;
+
 @Slf4j
 @Getter
 @Setter
@@ -21,4 +28,678 @@ public class AtrdTrafficServiceImpl implements StatisticsService {
         this.mapper = mapper;
     }
 
+    //////////////////////////////////////////////////////////////
+    // LINK_ID, IFSC_ID, ROAD_ID 가 검색 기준
+    //////////////////////////////////////////////////////////////
+    //////////// 링크 기간검색
+    public List<AtrdTrafficVo> findAllLink15MTerm(TrafficTermParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_LINK_15M_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllLinkStatByIdTerm(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllLink15MTerm: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllLinkHHTerm(TrafficTermParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_LINK_HH_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllLinkStatByIdTerm(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllLinkHHTerm: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllLinkDDTerm(TrafficTermParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_LINK_DD_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 10) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 10), 'YYYY-MM-DD HH24') AS STAT_DT_FMT, ");
+            return this.mapper.findAllLinkStatByIdTerm(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllLinkDDTerm: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllLinkMNTerm(TrafficTermParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_LINK_MN_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 8) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 8), 'YYYY-MM-DD') AS STAT_DT_FMT, ");
+            return this.mapper.findAllLinkStatByIdTerm(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllLinkMNTerm: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllLinkYYTerm(TrafficTermParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_LINK_YY_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 6) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 6), 'YYYY-MM') AS STAT_DT_FMT, ");
+            return this.mapper.findAllLinkStatByIdTerm(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllLinkYYTerm: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    //////////// 서비스 링크 기간검색
+    public List<AtrdTrafficVo> findAllIfsc15MTerm(TrafficTermParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_IFSC_15M_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllIfscStatByIdTerm(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllIfsc15MTerm: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllIfscHHTerm(TrafficTermParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_IFSC_HH_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllIfscStatByIdTerm(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllIfscHHTerm: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllIfscDDTerm(TrafficTermParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_IFSC_DD_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 10) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 10), 'YYYY-MM-DD HH24') AS STAT_DT_FMT, ");
+            return this.mapper.findAllIfscStatByIdTerm(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllIfscDDTerm: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllIfscMNTerm(TrafficTermParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_IFSC_MN_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 8) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 8), 'YYYY-MM-DD') AS STAT_DT_FMT, ");
+            return this.mapper.findAllIfscStatByIdTerm(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllIfscMNTerm: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllIfscYYTerm(TrafficTermParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_IFSC_YY_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 6) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 6), 'YYYY-MM') AS STAT_DT_FMT, ");
+            return this.mapper.findAllIfscStatByIdTerm(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllIfscYYTerm: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    //////////// 도로 기간검색
+    public List<AtrdTrafficVo> findAllRoad15MTerm(TrafficTermParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_ROAD_15M_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllRoadStatByIdTerm(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllRoad15MTerm: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllRoadHHTerm(TrafficTermParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_ROAD_HH_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllRoadStatByIdTerm(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllRoadHHTerm: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllRoadDDTerm(TrafficTermParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_ROAD_DD_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 10) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 10), 'YYYY-MM-DD HH24') AS STAT_DT_FMT, ");
+            return this.mapper.findAllRoadStatByIdTerm(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllRoadDDTerm: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllRoadMNTerm(TrafficTermParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_ROAD_MN_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 8) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 8), 'YYYY-MM-DD') AS STAT_DT_FMT, ");
+            return this.mapper.findAllRoadStatByIdTerm(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllRoadMNTerm: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllRoadYYTerm(TrafficTermParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_ROAD_YY_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 6) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 6), 'YYYY-MM') AS STAT_DT_FMT, ");
+            return this.mapper.findAllRoadStatByIdTerm(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllRoadYYTerm: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    //////////// 링크 시간대검색
+    public List<AtrdTrafficVo> findAllLink15MHour(TrafficHourParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_LINK_15M_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllLinkStatByIdHour(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllLink15MHour: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllLinkHHHour(TrafficHourParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_LINK_HH_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllLinkStatByIdHour(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllLinkHHHour: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    //////////// 서비스 링크 시간대검색
+    public List<AtrdTrafficVo> findAllIfsc15MHour(TrafficHourParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_IFSC_15M_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllIfscStatByIdHour(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllIfsc15MHour: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllIfscHHHour(TrafficHourParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_IFSC_HH_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllIfscStatByIdHour(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllIfscHHHour: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    //////////// 도로 시간대검색
+    public List<AtrdTrafficVo> findAllRoad15MHour(TrafficHourParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_ROAD_15M_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllRoadStatByIdHour(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllRoad15MHour: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllRoadHHHour(TrafficHourParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_ROAD_HH_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllRoadStatByIdHour(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllRoadHHHour: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    //////////// 링크 지정시각검색
+    //////////// TODO: 지정일은 반드시 조회조건에 포함시켜야 한다.
+    public List<AtrdTrafficVo> findAllLink15MSpec(TrafficSpecParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_LINK_15M_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllLinkStatByIdSpec(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllLink15MSpec: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllLinkHHSpec(TrafficSpecParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_LINK_HH_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllLinkStatByIdSpec(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllLinkHHSpec: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    //////////// 서비스 링크 지정시각검색
+    public List<AtrdTrafficVo> findAllIfsc15MSpec(TrafficSpecParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_IFSC_15M_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllIfscStatByIdSpec(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllIfsc15MSpec: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllIfscHHSpec(TrafficSpecParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_IFSC_HH_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllIfscStatByIdSpec(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllIfscHHSpec: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    //////////// 도로 지정시각검색
+    public List<AtrdTrafficVo> findAllRoad15MSpec(TrafficSpecParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_ROAD_15M_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllRoadStatByIdSpec(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllRoad15MSpec: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllRoadHHSpec(TrafficSpecParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_ROAD_HH_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllRoadStatByIdSpec(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllRoadHHSpec: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    //////////////////////////////////////////////////////////////
+    // ATRD_ID 가 검색 기준
+    //////////////////////////////////////////////////////////////
+    //////////// 링크 기간검색
+    public List<AtrdTrafficVo> findAllLink15MByAtrdIdTerm(TrafficTermParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_LINK_15M_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllLinkStatByAtrdIdTerm(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllLink15MByAtrdIdTerm: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllLinkHHByAtrdIdTerm(TrafficTermParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_LINK_HH_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllLinkStatByAtrdIdTerm(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllLinkHHByAtrdIdTerm: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllLinkDDByAtrdIdTerm(TrafficTermParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_LINK_DD_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 10) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 10), 'YYYY-MM-DD HH24') AS STAT_DT_FMT, ");
+            return this.mapper.findAllLinkStatByAtrdIdTerm(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllLinkDDByAtrdIdTerm: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllLinkMNByAtrdIdTerm(TrafficTermParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_LINK_MN_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 8) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 8), 'YYYY-MM-DD') AS STAT_DT_FMT, ");
+            return this.mapper.findAllLinkStatByAtrdIdTerm(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllLinkMNByAtrdIdTerm: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllLinkYYByAtrdIdTerm(TrafficTermParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_LINK_YY_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 6) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 6), 'YYYY-MM') AS STAT_DT_FMT, ");
+            return this.mapper.findAllLinkStatByAtrdIdTerm(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllLinkYYByAtrdIdTerm: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    //////////// 서비스 링크 기간검색
+    public List<AtrdTrafficVo> findAllIfsc15MByAtrdIdTerm(TrafficTermParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_IFSC_15M_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllIfscStatByAtrdIdTerm(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllIfsc15MByAtrdIdTerm: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllIfscHHByAtrdIdTerm(TrafficTermParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_IFSC_HH_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllIfscStatByAtrdIdTerm(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllIfscHHByAtrdIdTerm: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllIfscDDByAtrdIdTerm(TrafficTermParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_IFSC_DD_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 10) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 10), 'YYYY-MM-DD HH24') AS STAT_DT_FMT, ");
+            return this.mapper.findAllIfscStatByAtrdIdTerm(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllIfscDDByAtrdIdTerm: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllIfscMNByAtrdIdTerm(TrafficTermParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_IFSC_MN_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 8) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 8), 'YYYY-MM-DD') AS STAT_DT_FMT, ");
+            return this.mapper.findAllIfscStatByAtrdIdTerm(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllIfscMNByAtrdIdTerm: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllIfscYYByAtrdIdTerm(TrafficTermParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_IFSC_YY_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 6) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 6), 'YYYY-MM') AS STAT_DT_FMT, ");
+            return this.mapper.findAllIfscStatByAtrdIdTerm(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllIfscYYByAtrdIdTerm: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    //////////// 도로 기간검색
+    public List<AtrdTrafficVo> findAllRoad15MByAtrdIdTerm(TrafficTermParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_ROAD_15M_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllRoadStatByAtrdIdTerm(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllRoad15MByAtrdIdTerm: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllRoadHHByAtrdIdTerm(TrafficTermParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_ROAD_HH_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllRoadStatByAtrdIdTerm(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllRoadHHByAtrdIdTerm: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllRoadDDByAtrdIdTerm(TrafficTermParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_ROAD_DD_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 10) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 10), 'YYYY-MM-DD HH24') AS STAT_DT_FMT, ");
+            return this.mapper.findAllRoadStatByAtrdIdTerm(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllRoadDDByAtrdIdTerm: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllRoadMNByAtrdIdTerm(TrafficTermParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_ROAD_MN_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 8) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 8), 'YYYY-MM-DD') AS STAT_DT_FMT, ");
+            return this.mapper.findAllRoadStatByAtrdIdTerm(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllRoadMNByAtrdIdTerm: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllRoadYYByAtrdIdTerm(TrafficTermParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_ROAD_YY_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 6) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 6), 'YYYY-MM') AS STAT_DT_FMT, ");
+            return this.mapper.findAllRoadStatByAtrdIdTerm(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllRoadYYByAtrdIdTerm: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    //////////// 링크 시간대검색
+    public List<AtrdTrafficVo> findAllLink15MByAtrdIdHour(TrafficHourParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_LINK_15M_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllLinkStatByAtrdIdHour(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllLink15MByAtrdIdHour: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllLinkHHByAtrdIdHour(TrafficHourParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_LINK_HH_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllLinkStatByAtrdIdHour(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllLinkHHByAtrdIdHour: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    //////////// 서비스 링크 시간대검색
+    public List<AtrdTrafficVo> findAllIfsc15MByAtrdIdHour(TrafficHourParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_IFSC_15M_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllIfscStatByAtrdIdHour(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllIfsc15MByAtrdIdHour: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllIfscHHByAtrdIdHour(TrafficHourParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_IFSC_HH_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllIfscStatByAtrdIdHour(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllIfscHHByAtrdIdHour: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    //////////// 도로 시간대검색
+    public List<AtrdTrafficVo> findAllRoad15MByAtrdIdHour(TrafficHourParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_ROAD_15M_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllRoadStatByAtrdIdHour(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllRoad15MByAtrdIdHour: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllRoadHHByAtrdIdHour(TrafficHourParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_ROAD_HH_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllRoadStatByAtrdIdHour(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllRoadHHByAtrdIdHour: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    //////////// 링크 지정시각검색
+    //////////// TODO: 지정일은 반드시 조회조건에 포함시켜야 한다.
+    public List<AtrdTrafficVo> findAllLink15MByAtrdIdSpec(TrafficSpecParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_LINK_15M_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllLinkStatByAtrdIdSpec(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllLink15MByAtrdIdSpec: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllLinkHHByAtrdIdSpec(TrafficSpecParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_LINK_HH_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllLinkStatByAtrdIdSpec(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllLinkHHByAtrdIdSpec: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    //////////// 서비스 링크 지정시각검색
+    public List<AtrdTrafficVo> findAllIfsc15MByAtrdIdSpec(TrafficSpecParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_IFSC_15M_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllIfscStatByAtrdIdSpec(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllIfsc15MByAtrdIdSpec: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllIfscHHByAtrdIdSpec(TrafficSpecParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_IFSC_HH_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllIfscStatByAtrdIdSpec(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllIfscHHByAtrdIdSpec: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    //////////// 도로 지정시각검색
+    public List<AtrdTrafficVo> findAllRoad15MByAtrdIdSpec(TrafficSpecParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_ROAD_15M_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllRoadStatByAtrdIdSpec(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllRoad15MByAtrdIdSpec: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
+    public List<AtrdTrafficVo> findAllRoadHHByAtrdIdSpec(TrafficSpecParam cond) {
+        try {
+            cond.setTABLE_NAME("TB_ROAD_HH_STAT");
+            cond.setDATE_COL_FMT("SUBSTR(A.STAT_DT, 1, 12) AS STAT_DT, TO_DATE(SUBSTR(A.STAT_DT, 1, 12), 'YYYY-MM-DD HH24:MI') AS STAT_DT_FMT, ");
+            return this.mapper.findAllRoadStatByAtrdIdSpec(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllRoadHHByAtrdIdSpec: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<AtrdTrafficVo>();
+    }
+
 }

+ 37 - 0
src/main/java/com/its/op/service/statistics/impl/FcltSttsServiceImpl.java

@@ -2,12 +2,16 @@ package com.its.op.service.statistics.impl;
 
 import com.its.op.mapper.statistics.FcltSttsMapper;
 import com.its.op.service.statistics.StatisticsService;
+import com.its.op.vo.statistics.*;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.List;
+
 @Slf4j
 @Getter
 @Setter
@@ -21,4 +25,37 @@ public class FcltSttsServiceImpl implements StatisticsService {
         this.mapper = mapper;
     }
 
+    public List<FcltSttsTypeVo> findAllFcltSttsType() {
+        try {
+            return this.mapper.findAllFcltSttsType();
+        }
+        catch (Exception e) {
+            log.error("{}.findAllFcltSttsType: Exception: {}", getClass().getSimpleName(), e.getMessage());
+        }
+        return new ArrayList<FcltSttsTypeVo>();
+    }
+
+    public List<FcltSttsVo> findAllFcltStts(FcltSttsParam cond) {
+        try {
+            if (cond.getFCLT_CD().equals("CCTV")) {
+                return this.mapper.findAllFcltSttsCCTV(cond);
+            }
+            else
+            if (cond.getFCLT_CD().equals("VMS")) {
+                return this.mapper.findAllFcltSttsVMS(cond);
+            }
+            else
+            if (cond.getFCLT_CD().equals("VDS")) {
+                return this.mapper.findAllFcltSttsVDS(cond);
+            }
+            else {
+                log.error("{}.findAllFcltStts: Unknown Fclt Type: {}", getClass().getSimpleName(), cond);
+            }
+        }
+        catch (Exception e) {
+            log.error("{}.findAllFcltStts: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<FcltSttsVo>();
+    }
+
 }

+ 67 - 0
src/main/java/com/its/op/service/statistics/impl/IncidentServiceImpl.java

@@ -2,12 +2,18 @@ package com.its.op.service.statistics.impl;
 
 import com.its.op.mapper.statistics.IncidentMapper;
 import com.its.op.service.statistics.StatisticsService;
+import com.its.op.vo.statistics.IncidentParam;
+import com.its.op.vo.statistics.IncidentSectVo;
+import com.its.op.vo.statistics.IncidentTypeVo;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.List;
+
 @Slf4j
 @Getter
 @Setter
@@ -21,4 +27,65 @@ public class IncidentServiceImpl implements StatisticsService {
         this.mapper = mapper;
     }
 
+    public List<IncidentTypeVo> findAllTypeDD(IncidentParam cond) {
+        try {
+            return this.mapper.findAllTypeDD(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllTypeDD: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<IncidentTypeVo>();
+    }
+
+    public List<IncidentTypeVo> findAllTypeMN(IncidentParam cond) {
+        try {
+            return this.mapper.findAllTypeMN(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllTypeMN: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<IncidentTypeVo>();
+    }
+
+    public List<IncidentTypeVo> findAllTypeYY(IncidentParam cond) {
+        try {
+            return this.mapper.findAllTypeYY(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllTypeYY: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<IncidentTypeVo>();
+    }
+
+
+    public List<IncidentSectVo> findAllSectDD(IncidentParam cond) {
+        try {
+            return this.mapper.findAllSectDD(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllSectDD: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<IncidentSectVo>();
+    }
+
+    public List<IncidentSectVo> findAllSectMN(IncidentParam cond) {
+        try {
+            return this.mapper.findAllSectMN(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllSectMN: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<IncidentSectVo>();
+    }
+
+    public List<IncidentSectVo> findAllSectYY(IncidentParam cond) {
+        try {
+            return this.mapper.findAllSectYY(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllSectYY: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<IncidentSectVo>();
+    }
+
 }

+ 20 - 0
src/main/java/com/its/op/service/statistics/impl/UnitSystSttsServiceImpl.java

@@ -1,13 +1,20 @@
 package com.its.op.service.statistics.impl;
 
+import com.its.app.utils.SysUtils;
 import com.its.op.mapper.statistics.UnitSystSttsMapper;
 import com.its.op.service.statistics.StatisticsService;
+import com.its.op.vo.statistics.UnitSystSttsParam;
+import com.its.op.vo.statistics.UnitSystSttsVo;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.List;
+
 @Slf4j
 @Getter
 @Setter
@@ -21,4 +28,17 @@ public class UnitSystSttsServiceImpl implements StatisticsService {
         this.mapper = mapper;
     }
 
+    public List<UnitSystSttsVo> findAllByDateRange(UnitSystSttsParam cond) {
+        try {
+            int gapMin = SysUtils.gapTime(cond.getFROM_DT(), cond.getTO_DT(), Calendar.MINUTE);
+            cond.setSTS_TOT((gapMin+1)/5);  // 분을 5분으로 나눈다. 상태정보는 5분 마다 수집하여 이력으로 저장하기 때문에
+
+            return this.mapper.findAllByDateRange(cond);
+        }
+        catch (Exception e) {
+            log.error("{}.findAllByDateRange: Cond: {}, Exception: {}", getClass().getSimpleName(), cond, e.getMessage());
+        }
+        return new ArrayList<UnitSystSttsVo>();
+    }
+
 }

+ 1 - 1
src/main/java/com/its/op/vo/history/TrafHsParam.java

@@ -9,7 +9,7 @@ import lombok.ToString;
 @ToString
 //@JsonNaming(UpperCaseUnderscoreStrategy.class)
 public class TrafHsParam {
-    private String ID;
+    private long   ID;
     private String FROM_DT;
     private String TO_DT;
 }

+ 17 - 0
src/main/java/com/its/op/vo/statistics/AtrdDailyParam.java

@@ -0,0 +1,17 @@
+package com.its.op.vo.statistics;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+@Getter
+@Setter
+@ToString
+@ApiModel(description = "간선도로통계 파라미터")
+public class AtrdDailyParam {
+    private String FROM_DT;
+    private String TO_DT;
+    private String FROM_HM;     // HH24MI
+    private String TO_HM;       // HH24MI
+}

+ 15 - 0
src/main/java/com/its/op/vo/statistics/AtrdHourlyParam.java

@@ -0,0 +1,15 @@
+package com.its.op.vo.statistics;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+@Getter
+@Setter
+@ToString
+@ApiModel(description = "간선도로통계 파라미터")
+public class AtrdHourlyParam {
+    private String FROM_DT;
+    private String TO_DT;
+}

+ 53 - 0
src/main/java/com/its/op/vo/statistics/AtrdVo.java

@@ -0,0 +1,53 @@
+package com.its.op.vo.statistics;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+@Getter
+@Setter
+@ToString
+//@JsonNaming(UpperCaseUnderscoreStrategy.class)
+public class AtrdVo {
+    private String ATRD_ID;
+    private String ATRD_NM;
+    private String DRCT_CD;
+    private String DRCT_CD_DESC;
+    private int    SECT_LNGT;
+    private String TRF_TYPE;
+    private int    AVG_SPED;
+
+    private int    C00;     // 00시
+    private int    C01;     // 01시, 01일
+    private int    C02;     // 02시, 02일
+    private int    C03;     // 03시, 03일
+    private int    C04;     // 04시, 04일
+    private int    C05;     // 05시, 05일
+    private int    C06;     // 06시, 06일
+    private int    C07;     // 07시, 07일
+    private int    C08;     // 08시, 08일
+    private int    C09;     // 09시, 09일
+    private int    C10;     // 10시, 10일
+    private int    C11;     // 11시, 11일
+    private int    C12;     // 12시, 12일
+    private int    C13;     // 13시, 13일
+    private int    C14;     // 14시, 14일
+    private int    C15;     // 15시, 15일
+    private int    C16;     // 16시, 16일
+    private int    C17;     // 17시, 17일
+    private int    C18;     // 18시, 18일
+    private int    C19;     // 19시, 19일
+    private int    C20;     // 20시, 20일
+    private int    C21;     // 21시, 21일
+    private int    C22;     // 22시, 22일
+    private int    C23;     // 23시, 23일
+    private int    C24;     //       24일
+    private int    C25;     //       25일
+    private int    C26;     //       26일
+    private int    C27;     //       27일
+    private int    C28;     //       28일
+    private int    C29;     //       29일
+    private int    C30;     //       30일
+    private int    C31;     //       31일
+
+}

+ 16 - 0
src/main/java/com/its/op/vo/statistics/FcltSttsParam.java

@@ -0,0 +1,16 @@
+package com.its.op.vo.statistics;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+@Getter
+@Setter
+@ToString
+@ApiModel(description = "간선도로통계 파라미터")
+public class FcltSttsParam {
+    private String FCLT_CD;
+    private String FROM_DT;
+    private String TO_DT;
+}

+ 15 - 0
src/main/java/com/its/op/vo/statistics/FcltSttsTypeVo.java

@@ -0,0 +1,15 @@
+package com.its.op.vo.statistics;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+@Getter
+@Setter
+@ToString
+//@JsonNaming(UpperCaseUnderscoreStrategy.class)
+public class FcltSttsTypeVo {
+    private String FCLT_CD;
+    private String FCLT_NM;
+
+}

+ 20 - 0
src/main/java/com/its/op/vo/statistics/FcltSttsVo.java

@@ -0,0 +1,20 @@
+package com.its.op.vo.statistics;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+@Getter
+@Setter
+@ToString
+//@JsonNaming(UpperCaseUnderscoreStrategy.class)
+public class FcltSttsVo {
+    private String FCLT_NMBR;
+    private String FCLT_ID;
+    private String FCLT_NM;
+
+    private int    CNT_TOT;
+    private int    CNT_CMS1;
+    private int    CNT_CMS2;
+
+}

+ 15 - 0
src/main/java/com/its/op/vo/statistics/IncidentParam.java

@@ -0,0 +1,15 @@
+package com.its.op.vo.statistics;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+@Getter
+@Setter
+@ToString
+@ApiModel(description = "돌발상황통계 파라미터")
+public class IncidentParam {
+    private String FROM_DT;
+    private String TO_DT;
+}

+ 22 - 0
src/main/java/com/its/op/vo/statistics/IncidentSectVo.java

@@ -0,0 +1,22 @@
+package com.its.op.vo.statistics;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+@Getter
+@Setter
+@ToString
+//@JsonNaming(UpperCaseUnderscoreStrategy.class)
+public class IncidentSectVo {
+    private String STAT_DT;         // 통계일
+    private String DATA_CNT;        // 데이터 건수(화면표출안함)
+    private String STAT_DT_FMT;     // 통계일 표출 형식
+    private String LINK_ID;         // 구간 ID
+    private String F_NAME;          // 시점명
+    private String T_NAME;          // 종점명
+    private String INCD_OCRR_NUM;   // 발생건수
+    private String FTLT_PNUM;       // 사망자수
+    private String INJR_PNUM;       // 부상자수
+    private String PRPR_DMGE_AMT;   // 피해금액
+}

+ 20 - 0
src/main/java/com/its/op/vo/statistics/IncidentTypeVo.java

@@ -0,0 +1,20 @@
+package com.its.op.vo.statistics;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+@Getter
+@Setter
+@ToString
+//@JsonNaming(UpperCaseUnderscoreStrategy.class)
+public class IncidentTypeVo {
+    private String STAT_DT;         // 통계일
+    private String DATA_CNT;        // 데이터 건수(화면표출안함)
+    private String STAT_DT_FMT;     // 통계일 표출 형식
+    private String INCD_TYPE_CD;    // 돌발유형코드(1: 사고, 2: 공사, 3: 행사, 4: 기상)
+    private String INCD_OCRR_NUM;   // 발생건수
+    private String FTLT_PNUM;       // 사망자수
+    private String INJR_PNUM;       // 부상자수
+    private String PRPR_DMGE_AMT;   // 피해금액
+}

+ 25 - 0
src/main/java/com/its/op/vo/statistics/QueryCondParam.java

@@ -0,0 +1,25 @@
+package com.its.op.vo.statistics;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Setter;
+import lombok.ToString;
+
+@Setter
+@ToString
+public class QueryCondParam {
+    @JsonIgnore
+    private String TABLE_NAME;
+    @JsonIgnore
+    private String DATE_COL_FMT;
+
+    @ApiModelProperty(value = "Table Name", notes = "Table Name", hidden = true)
+    public String getTABLE_NAME() {
+        return TABLE_NAME;
+    }
+
+    @ApiModelProperty(value = "Select Date Column Display Format", notes = "Date Column Format", hidden = true)
+    public String getDATE_COL_FMT() {
+        return DATE_COL_FMT;
+    }
+}

+ 3 - 2
src/main/java/com/its/op/vo/statistics/TrafficHourParam.java

@@ -1,5 +1,6 @@
 package com.its.op.vo.statistics;
 
+import io.swagger.annotations.ApiModel;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
@@ -7,8 +8,8 @@ import lombok.ToString;
 @Getter
 @Setter
 @ToString
-//@JsonNaming(UpperCaseUnderscoreStrategy.class)
-public class TrafficHourParam {
+@ApiModel(description = "시간대검색 파라미터")
+public class TrafficHourParam extends QueryCondParam {
     private String ID;
     private String FROM_DT;
     private String TO_DT;

+ 0 - 24
src/main/java/com/its/op/vo/statistics/TrafficQryVo.java

@@ -1,24 +0,0 @@
-package com.its.op.vo.statistics;
-
-import lombok.Getter;
-import lombok.Setter;
-import lombok.ToString;
-
-@Getter
-@Setter
-@ToString
-public class TrafficQryVo {
-    private String tableName;
-    private String dateQryFormat;
-    private String ID;
-    private int    ORD;
-    private String STAT_DT;
-    private String STAT_DT_FMT;
-    private String F_NAME;
-    private String T_NAME;
-    private int    SECT_LNGT;
-    private int    TFVL;
-    private int    SPED;
-    private double OCPY_RATE;
-    private int    TRVL_HH;
-}

+ 3 - 2
src/main/java/com/its/op/vo/statistics/TrafficSpecParam.java

@@ -1,5 +1,6 @@
 package com.its.op.vo.statistics;
 
+import io.swagger.annotations.ApiModel;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
@@ -9,8 +10,8 @@ import java.util.List;
 @Getter
 @Setter
 @ToString
-//@JsonNaming(UpperCaseUnderscoreStrategy.class)
-public class TrafficSpecParam {
+@ApiModel(description = "지정시각검색 파라미터")
+public class TrafficSpecParam extends QueryCondParam {
     private String ID;
     private String FROM_HM;     // HH+0000
     private String TO_HM;       // HH+5959

+ 3 - 10
src/main/java/com/its/op/vo/statistics/TrafficTermParam.java

@@ -1,7 +1,6 @@
 package com.its.op.vo.statistics;
 
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiModel;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
@@ -10,14 +9,8 @@ import lombok.ToString;
 @Setter
 @ToString
 //@JsonNaming(UpperCaseUnderscoreStrategy.class)
-public class TrafficTermParam {
-    @ApiModelProperty(notes = "Table Name", hidden = true)
-    @JsonIgnore
-    private String TABLE_NAME;
-    @ApiModelProperty(notes = "Date Column Format", hidden = true)
-    @JsonIgnore
-    private String DATE_COL_FMT;
-
+@ApiModel(description = "기간검색 파라미터")
+public class TrafficTermParam extends QueryCondParam {
     private String ID;
     private String FROM_DT;
     private String TO_DT;

+ 31 - 0
src/main/java/com/its/op/vo/statistics/UnitSystSttsParam.java

@@ -0,0 +1,31 @@
+package com.its.op.vo.statistics;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Setter;
+import lombok.ToString;
+
+@Setter
+@ToString
+@ApiModel(description = "간선도로통계 파라미터")
+public class UnitSystSttsParam {
+    private String FROM_DT;
+    private String TO_DT;
+
+    @JsonIgnore
+    private int    STS_TOT;
+
+    public String getFROM_DT() {
+        return FROM_DT;
+    }
+
+    public String getTO_DT() {
+        return TO_DT;
+    }
+
+    @ApiModelProperty(value = "Total Count", notes = "Total Count", hidden = true)
+    public int getSTS_TOT() {
+        return STS_TOT;
+    }
+}

+ 20 - 0
src/main/java/com/its/op/vo/statistics/UnitSystSttsVo.java

@@ -0,0 +1,20 @@
+package com.its.op.vo.statistics;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+@Getter
+@Setter
+@ToString
+//@JsonNaming(UpperCaseUnderscoreStrategy.class)
+public class UnitSystSttsVo {
+    private String SYST_ID;
+    private String SYST_NM;
+    private int    STS_TOT;
+    private int    CNT_SPS0;
+    private int    CNT_SPS1;
+    private int    CNT_SPS2;
+    private int    CNT_SPS3;
+    private int    CNT_SPS4;
+}

+ 240 - 16
src/main/resources/mybatis/mapper/statistics/Atrd.xml

@@ -3,22 +3,246 @@
 
 <mapper namespace="com.its.op.mapper.statistics.AtrdMapper">
 
-    <select id="findAllByDateRange" parameterType="com.its.op.vo.statistics.TrafficTermParam" resultType="com.its.op.vo.statistics.TrafficVo">
-    <![CDATA[
-        SELECT A.IFSC_ID AS LINK_ID, A.PRCN_DT, A.TFVL, A.SPED, A.OCPY_RATE, A.TRVL_HH,
-               FN_TODATEFMT(A.PRCN_DT) AS PRCN_DT2,
-               A.CMTR_GRAD_CD,
-               B.CMMN_CD_KOR_NM AS CMTR_GRAD_CD_DESC, A.PTRN_SPED, A.DATA_NUM
-        FROM TB_IFSC_TRAF_HS A,
-             (SELECT CMMN_CD, CMMN_CD_KOR_NM
-              FROM TB_CMMN_CD
-              WHERE CMMN_CLSF_CD = 'LTC'
-             ) B
-        WHERE A.CMTR_GRAD_CD = B.CMMN_CD
-          AND A.IFSC_ID      = #{cond.ID}
-          AND A.PRCN_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
-        ORDER BY A.PRCN_DT, A.IFSC_ID
-        ]]>
+    <select id="findAllHourly" parameterType="com.its.op.vo.statistics.AtrdHourlyParam" resultType="com.its.op.vo.statistics.AtrdVo">
+        SELECT LY.ARTERYID AS ATRD_ID, LY.ARTERYNAME AS ATRD_NM, LY.DIRECTION AS DRCT_CD, LY.DIRECTIONNAME AS DRCT_CD_DESC,
+               LY.ARTERYLENGHT AS SECT_LNGT, LX.TRFTYPE AS TRF_TYPE,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(TTM, 0, '-', ROUND(TLL*3.6/TTM, 0))) AS AVG_SPED,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T00, 0, '-', ROUND(L00*3.6/T00, 0))) AS C00,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T01, 0, '-', ROUND(L01*3.6/T01, 0))) AS C01,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T02, 0, '-', ROUND(L02*3.6/T02, 0))) AS C02,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T03, 0, '-', ROUND(L03*3.6/T03, 0))) AS C03,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T04, 0, '-', ROUND(L04*3.6/T04, 0))) AS C04,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T05, 0, '-', ROUND(L05*3.6/T05, 0))) AS C05,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T06, 0, '-', ROUND(L06*3.6/T06, 0))) AS C06,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T07, 0, '-', ROUND(L07*3.6/T07, 0))) AS C07,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T08, 0, '-', ROUND(L08*3.6/T08, 0))) AS C08,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T09, 0, '-', ROUND(L09*3.6/T09, 0))) AS C09,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T10, 0, '-', ROUND(L10*3.6/T10, 0))) AS C10,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T11, 0, '-', ROUND(L11*3.6/T11, 0))) AS C11,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T12, 0, '-', ROUND(L12*3.6/T12, 0))) AS C12,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T13, 0, '-', ROUND(L13*3.6/T13, 0))) AS C13,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T14, 0, '-', ROUND(L14*3.6/T14, 0))) AS C14,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T15, 0, '-', ROUND(L15*3.6/T15, 0))) AS C15,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T16, 0, '-', ROUND(L16*3.6/T16, 0))) AS C16,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T17, 0, '-', ROUND(L17*3.6/T17, 0))) AS C17,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T18, 0, '-', ROUND(L18*3.6/T18, 0))) AS C18,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T19, 0, '-', ROUND(L19*3.6/T19, 0))) AS C19,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T20, 0, '-', ROUND(L20*3.6/T20, 0))) AS C20,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T21, 0, '-', ROUND(L21*3.6/T21, 0))) AS C21,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T22, 0, '-', ROUND(L22*3.6/T22, 0))) AS C22,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T23, 0, '-', ROUND(L23*3.6/T23, 0))) AS C23
+        FROM (
+                 SELECT GROUPING(ARTERYID)  AS GROUPING_ARTERYID,
+                        GROUPING(DIRECTION) AS GROUPING_DIRECTION,
+                        GROUPING(TRFTYPE)   AS GROUPING_TRFTYPE,
+                        CASE WHEN GROUPING(ARTERYID ) = 1 THEN '도로' ELSE ARTERYID  END AS GROUP_ARTERYID,
+                        CASE WHEN GROUPING(DIRECTION) = 1 THEN '방향' ELSE DIRECTION END AS GROUP_DIRECTION,
+                        CASE WHEN GROUPING(TRFTYPE)   = 1 THEN '소계' ELSE TRFTYPE   END AS GROUP_TRFTYPE,
+                        ARTERYID, DIRECTION, TRFTYPE,
+                        SUM(DECODE(TRVTM, NULL, 0, LINKLEN)) TLL,
+                        SUM(DECODE(TRVTM, NULL, 0, TRVTM  )) TTM,
+                        SUM(DECODE(STATHOUR, '00', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T00,
+                        SUM(DECODE(STATHOUR, '00', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L00,
+                        SUM(DECODE(STATHOUR, '01', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T01,
+                        SUM(DECODE(STATHOUR, '01', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L01,
+                        SUM(DECODE(STATHOUR, '02', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T02,
+                        SUM(DECODE(STATHOUR, '02', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L02,
+                        SUM(DECODE(STATHOUR, '03', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T03,
+                        SUM(DECODE(STATHOUR, '03', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L03,
+                        SUM(DECODE(STATHOUR, '04', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T04,
+                        SUM(DECODE(STATHOUR, '04', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L04,
+                        SUM(DECODE(STATHOUR, '05', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T05,
+                        SUM(DECODE(STATHOUR, '05', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L05,
+                        SUM(DECODE(STATHOUR, '06', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T06,
+                        SUM(DECODE(STATHOUR, '06', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L06,
+                        SUM(DECODE(STATHOUR, '07', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T07,
+                        SUM(DECODE(STATHOUR, '07', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L07,
+                        SUM(DECODE(STATHOUR, '08', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T08,
+                        SUM(DECODE(STATHOUR, '08', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L08,
+                        SUM(DECODE(STATHOUR, '09', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T09,
+                        SUM(DECODE(STATHOUR, '09', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L09,
+                        SUM(DECODE(STATHOUR, '10', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T10,
+                        SUM(DECODE(STATHOUR, '10', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L10,
+                        SUM(DECODE(STATHOUR, '11', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T11,
+                        SUM(DECODE(STATHOUR, '11', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L11,
+                        SUM(DECODE(STATHOUR, '12', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T12,
+                        SUM(DECODE(STATHOUR, '12', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L12,
+                        SUM(DECODE(STATHOUR, '13', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T13,
+                        SUM(DECODE(STATHOUR, '13', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L13,
+                        SUM(DECODE(STATHOUR, '14', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T14,
+                        SUM(DECODE(STATHOUR, '14', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L14,
+                        SUM(DECODE(STATHOUR, '15', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T15,
+                        SUM(DECODE(STATHOUR, '15', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L15,
+                        SUM(DECODE(STATHOUR, '16', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T16,
+                        SUM(DECODE(STATHOUR, '16', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L16,
+                        SUM(DECODE(STATHOUR, '17', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T17,
+                        SUM(DECODE(STATHOUR, '17', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L17,
+                        SUM(DECODE(STATHOUR, '18', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T18,
+                        SUM(DECODE(STATHOUR, '18', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L18,
+                        SUM(DECODE(STATHOUR, '19', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T19,
+                        SUM(DECODE(STATHOUR, '19', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L19,
+                        SUM(DECODE(STATHOUR, '20', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T20,
+                        SUM(DECODE(STATHOUR, '20', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L20,
+                        SUM(DECODE(STATHOUR, '21', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T21,
+                        SUM(DECODE(STATHOUR, '21', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L21,
+                        SUM(DECODE(STATHOUR, '22', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T22,
+                        SUM(DECODE(STATHOUR, '22', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L22,
+                        SUM(DECODE(STATHOUR, '23', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T23,
+                        SUM(DECODE(STATHOUR, '23', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L23
+                 FROM (
+                          SELECT Y.ARTERYID, Y.ARTERYNAME, Y.DIRECTION, Y.ARTERYLEN, X.TRFTYPE,
+                                 Y.LINKID, Y.LINKLEN, X.STATHOUR, X.SPD, X.TRVTM
+                          FROM (SELECT /*+ INDEX(A IX_ROAD_HH_STAT_PK) */
+                                    'FSN' AS TRFTYPE,
+                                    B.ATRD_ID AS ARTERYID, A.ROAD_ID AS LINKID, C.SECT_LNGT AS LINKLEN,
+                                    SUBSTR(A.STAT_DT, 9, 2) AS STATHOUR, A.SPED AS SPD, A.TRVL_HH AS TRVTM
+                                FROM TB_ROAD_HH_STAT A, TB_ATRD_ROAD_RLTN B, TB_ROAD C
+                                WHERE 1=1
+                                  AND A.STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
+                                  AND A.ROAD_ID = B.ROAD_ID
+                                  AND B.ROAD_ID = C.ROAD_ID
+                               ) X,
+                               VW_ATRD_ROAD_RLTN Y
+                          WHERE Y.LINKID = X.LINKID
+                      )
+                 GROUP BY ROLLUP (ARTERYID, DIRECTION, TRFTYPE)
+                 HAVING GROUPING(TRFTYPE) = 0) LX,
+             VW_ATRD LY
+        WHERE LY.ARTERYID  = LX.ARTERYID(+)
+          AND LY.DIRECTION = LX.DIRECTION(+)
+        ORDER BY LY.ARTERYNAME, LY.DIRECTION, LX.TRFTYPE
+    </select>
+
+    <select id="findAllDaily" parameterType="com.its.op.vo.statistics.AtrdDailyParam" resultType="com.its.op.vo.statistics.AtrdVo">
+        SELECT LY.ARTERYID AS ATRD_ID, LY.ARTERYNAME AS ATRD_NM, LY.DIRECTION AS DRCT_CD, LY.DIRECTIONNAME AS DRCT_CD_DESC,
+               LY.ARTERYLENGHT AS SECT_LNGT, LX.TRFTYPE AS TRF_TYPE,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(TTM, 0, '-', ROUND(TLL*3.6/TTM, 0))) AS AVG_SPED,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T01, 0, '-', ROUND(L01*3.6/T01, 0))) AS C01,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T02, 0, '-', ROUND(L02*3.6/T02, 0))) AS C02,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T03, 0, '-', ROUND(L03*3.6/T03, 0))) AS C03,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T04, 0, '-', ROUND(L04*3.6/T04, 0))) AS C04,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T05, 0, '-', ROUND(L05*3.6/T05, 0))) AS C05,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T06, 0, '-', ROUND(L06*3.6/T06, 0))) AS C06,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T07, 0, '-', ROUND(L07*3.6/T07, 0))) AS C07,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T08, 0, '-', ROUND(L08*3.6/T08, 0))) AS C08,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T09, 0, '-', ROUND(L09*3.6/T09, 0))) AS C09,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T10, 0, '-', ROUND(L10*3.6/T10, 0))) AS C10,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T11, 0, '-', ROUND(L11*3.6/T11, 0))) AS C11,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T12, 0, '-', ROUND(L12*3.6/T12, 0))) AS C12,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T13, 0, '-', ROUND(L13*3.6/T13, 0))) AS C13,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T14, 0, '-', ROUND(L14*3.6/T14, 0))) AS C14,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T15, 0, '-', ROUND(L15*3.6/T15, 0))) AS C15,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T16, 0, '-', ROUND(L16*3.6/T16, 0))) AS C16,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T17, 0, '-', ROUND(L17*3.6/T17, 0))) AS C17,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T18, 0, '-', ROUND(L18*3.6/T18, 0))) AS C18,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T19, 0, '-', ROUND(L19*3.6/T19, 0))) AS C19,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T20, 0, '-', ROUND(L20*3.6/T20, 0))) AS C20,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T21, 0, '-', ROUND(L21*3.6/T21, 0))) AS C21,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T22, 0, '-', ROUND(L22*3.6/T22, 0))) AS C22,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T23, 0, '-', ROUND(L23*3.6/T23, 0))) AS C23,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T24, 0, '-', ROUND(L24*3.6/T24, 0))) AS C24,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T25, 0, '-', ROUND(L25*3.6/T25, 0))) AS C25,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T26, 0, '-', ROUND(L26*3.6/T26, 0))) AS C26,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T27, 0, '-', ROUND(L27*3.6/T27, 0))) AS C27,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T28, 0, '-', ROUND(L28*3.6/T28, 0))) AS C28,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T29, 0, '-', ROUND(L29*3.6/T29, 0))) AS C29,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T30, 0, '-', ROUND(L30*3.6/T30, 0))) AS C30,
+               DECODE(LX.ARTERYID, NULL, '-', DECODE(T31, 0, '-', ROUND(L31*3.6/T31, 0))) AS C31
+        FROM (
+                 SELECT GROUPING(ARTERYID)  AS GROUPING_ARTERYID,
+                        GROUPING(DIRECTION) AS GROUPING_DIRECTION,
+                        GROUPING(TRFTYPE)   AS GROUPING_TRFTYPE,
+                        CASE WHEN GROUPING(ARTERYID ) = 1 THEN '도로' ELSE ARTERYID  END AS GROUP_ARTERYID,
+                        CASE WHEN GROUPING(DIRECTION) = 1 THEN '방향' ELSE DIRECTION END AS GROUP_DIRECTION,
+                        CASE WHEN GROUPING(TRFTYPE)   = 1 THEN '소계' ELSE TRFTYPE   END AS GROUP_TRFTYPE,
+                        ARTERYID, DIRECTION, TRFTYPE,
+                        SUM(DECODE(TRVTM, NULL, 0, LINKLEN)) TLL,
+                        SUM(DECODE(TRVTM, NULL, 0, TRVTM  )) TTM,
+                        SUM(DECODE(STATDAY, '01', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T01,
+                        SUM(DECODE(STATDAY, '01', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L01,
+                        SUM(DECODE(STATDAY, '02', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T02,
+                        SUM(DECODE(STATDAY, '02', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L02,
+                        SUM(DECODE(STATDAY, '03', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T03,
+                        SUM(DECODE(STATDAY, '03', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L03,
+                        SUM(DECODE(STATDAY, '04', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T04,
+                        SUM(DECODE(STATDAY, '04', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L04,
+                        SUM(DECODE(STATDAY, '05', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T05,
+                        SUM(DECODE(STATDAY, '05', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L05,
+                        SUM(DECODE(STATDAY, '06', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T06,
+                        SUM(DECODE(STATDAY, '06', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L06,
+                        SUM(DECODE(STATDAY, '07', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T07,
+                        SUM(DECODE(STATDAY, '07', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L07,
+                        SUM(DECODE(STATDAY, '08', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T08,
+                        SUM(DECODE(STATDAY, '08', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L08,
+                        SUM(DECODE(STATDAY, '09', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T09,
+                        SUM(DECODE(STATDAY, '09', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L09,
+                        SUM(DECODE(STATDAY, '10', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T10,
+                        SUM(DECODE(STATDAY, '10', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L10,
+                        SUM(DECODE(STATDAY, '11', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T11,
+                        SUM(DECODE(STATDAY, '11', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L11,
+                        SUM(DECODE(STATDAY, '12', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T12,
+                        SUM(DECODE(STATDAY, '12', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L12,
+                        SUM(DECODE(STATDAY, '13', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T13,
+                        SUM(DECODE(STATDAY, '13', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L13,
+                        SUM(DECODE(STATDAY, '14', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T14,
+                        SUM(DECODE(STATDAY, '14', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L14,
+                        SUM(DECODE(STATDAY, '15', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T15,
+                        SUM(DECODE(STATDAY, '15', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L15,
+                        SUM(DECODE(STATDAY, '16', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T16,
+                        SUM(DECODE(STATDAY, '16', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L16,
+                        SUM(DECODE(STATDAY, '17', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T17,
+                        SUM(DECODE(STATDAY, '17', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L17,
+                        SUM(DECODE(STATDAY, '18', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T18,
+                        SUM(DECODE(STATDAY, '18', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L18,
+                        SUM(DECODE(STATDAY, '19', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T19,
+                        SUM(DECODE(STATDAY, '19', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L19,
+                        SUM(DECODE(STATDAY, '20', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T20,
+                        SUM(DECODE(STATDAY, '20', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L20,
+                        SUM(DECODE(STATDAY, '21', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T21,
+                        SUM(DECODE(STATDAY, '21', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L21,
+                        SUM(DECODE(STATDAY, '22', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T22,
+                        SUM(DECODE(STATDAY, '22', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L22,
+                        SUM(DECODE(STATDAY, '23', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T23,
+                        SUM(DECODE(STATDAY, '23', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L23,
+                        SUM(DECODE(STATDAY, '24', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T24,
+                        SUM(DECODE(STATDAY, '24', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L24,
+                        SUM(DECODE(STATDAY, '25', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T25,
+                        SUM(DECODE(STATDAY, '25', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L25,
+                        SUM(DECODE(STATDAY, '26', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T26,
+                        SUM(DECODE(STATDAY, '26', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L26,
+                        SUM(DECODE(STATDAY, '27', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T27,
+                        SUM(DECODE(STATDAY, '27', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L27,
+                        SUM(DECODE(STATDAY, '28', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T28,
+                        SUM(DECODE(STATDAY, '28', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L28,
+                        SUM(DECODE(STATDAY, '29', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T29,
+                        SUM(DECODE(STATDAY, '29', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L29,
+                        SUM(DECODE(STATDAY, '30', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T30,
+                        SUM(DECODE(STATDAY, '30', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L30,
+                        SUM(DECODE(STATDAY, '31', DECODE(TRVTM, NULL, 0, TRVTM),   0)) AS T31,
+                        SUM(DECODE(STATDAY, '31', DECODE(TRVTM, NULL, 0, LINKLEN), 0)) AS L31
+                 FROM (
+                          SELECT Y.ARTERYID, Y.ARTERYNAME, Y.DIRECTION, Y.ARTERYLEN, X.TRFTYPE,
+                                 Y.LINKID, Y.LINKLEN, X.STATDAY, X.SPD, X.TRVTM
+                          FROM (SELECT /*+ INDEX(A IX_ROAD_15M_STAT_PK) */
+                                    'FSN' AS TRFTYPE,
+                                    B.ATRD_ID AS ARTERYID, A.ROAD_ID AS LINKID, C.SECT_LNGT AS LINKLEN,
+                                    SUBSTR(A.STAT_DT, 7, 2) AS STATDAY, A.SPED AS SPD, A.TRVL_HH AS TRVTM
+                                FROM TB_ROAD_15M_STAT A, TB_ATRD_ROAD_RLTN B, TB_ROAD C
+                                WHERE 1=1
+                                  AND A.STAT_DT               BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
+                                  AND SUBSTR(A.STAT_DT, 9, 4) BETWEEN #{cond.FROM_HM} AND #{cond.TO_HM}
+                                  AND A.ROAD_ID = B.ROAD_ID
+                                  AND B.ROAD_ID = C.ROAD_ID
+                               ) X,
+                               VW_ATRD_ROAD_RLTN Y
+                          WHERE Y.LINKID = X.LINKID
+                      )
+                 GROUP BY ROLLUP (ARTERYID, DIRECTION, TRFTYPE)
+                 HAVING GROUPING(TRFTYPE) = 0) LX,
+             VW_ATRD LY
+        WHERE LY.ARTERYID  = LX.ARTERYID(+)
+          AND LY.DIRECTION = LX.DIRECTION(+)
+        ORDER BY LY.ARTERYNAME, LY.DIRECTION, LX.TRFTYPE
     </select>
 
 </mapper>

+ 451 - 16
src/main/resources/mybatis/mapper/statistics/AtrdTraffic.xml

@@ -3,22 +3,457 @@
 
 <mapper namespace="com.its.op.mapper.statistics.AtrdTrafficMapper">
 
-    <select id="findAllByDateRange" parameterType="com.its.op.vo.statistics.TrafficTermParam" resultType="com.its.op.vo.statistics.TrafficVo">
-    <![CDATA[
-        SELECT A.IFSC_ID AS LINK_ID, A.PRCN_DT, A.TFVL, A.SPED, A.OCPY_RATE, A.TRVL_HH,
-               FN_TODATEFMT(A.PRCN_DT) AS PRCN_DT2,
-               A.CMTR_GRAD_CD,
-               B.CMMN_CD_KOR_NM AS CMTR_GRAD_CD_DESC, A.PTRN_SPED, A.DATA_NUM
-        FROM TB_IFSC_TRAF_HS A,
-             (SELECT CMMN_CD, CMMN_CD_KOR_NM
-              FROM TB_CMMN_CD
-              WHERE CMMN_CLSF_CD = 'LTC'
-             ) B
-        WHERE A.CMTR_GRAD_CD = B.CMMN_CD
-          AND A.IFSC_ID      = #{cond.ID}
-          AND A.PRCN_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
-        ORDER BY A.PRCN_DT, A.IFSC_ID
-        ]]>
+    <!--
+        기간 검색 - 15분, 시간, 일, 월, 년(링크, 서비스링크, 도로)
+    -->
+    <select id="findAllLinkStatByIdTerm" parameterType="com.its.op.vo.statistics.TrafficTermParam" resultType="com.its.op.vo.statistics.AtrdTrafficVo">
+        SELECT A.LINK_ID AS ID, 1 AS ORD, 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,
+               A.TFVL, A.SPED, A.OCPY_RATE, A.TRVL_HH
+        FROM (SELECT LINK_ID,
+                     ${cond.DATE_COL_FMT}
+                     TFVL, SPED, OCPY_RATE, TRVL_HH
+              FROM ${cond.TABLE_NAME} A
+              WHERE LINK_ID = #{cond.ID}
+                AND STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
+             ) A,
+             TB_LINK B, TB_NODE C, TB_NODE D
+        WHERE B.DEL_YN = 'N'
+          AND A.LINK_ID = B.LINK_ID
+          AND B.F_NODE = C.NODE_ID(+)
+          AND B.T_NODE = D.NODE_ID(+)
+        ORDER BY A.STAT_DT
+    </select>
+
+    <select id="findAllLinkStatByAtrdIdTerm" parameterType="com.its.op.vo.statistics.TrafficTermParam" resultType="com.its.op.vo.statistics.AtrdTrafficVo">
+        SELECT A.LINK_ID AS ID, A.ORD, 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,
+               A.TFVL, A.SPED, A.OCPY_RATE, A.TRVL_HH
+        FROM (SELECT A.LINK_ID, B.ORD,
+                     ${cond.DATE_COL_FMT}
+                     TFVL, SPED, OCPY_RATE, TRVL_HH
+              FROM ${cond.TABLE_NAME} A,
+                   (SELECT C.LINK_ID,
+                           RANK() OVER(PARTITION BY A.ATRD_ID ORDER BY A.ORD, B.ORD, C.ORD) AS ORD
+                    FROM TB_ATRD_ROAD_RLTN A, TB_ROAD_IFSC_RLTN B, TB_IFSC_LINK_RLTN C
+                    WHERE A.ATRD_ID = #{cond.ID}
+                      AND A.ROAD_ID = B.ROAD_ID
+                      AND B.IFSC_ID = C.IFSC_ID ) B
+              WHERE A.LINK_ID = B.LINK_ID
+                AND STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
+             ) A,
+             TB_LINK B, TB_NODE C, TB_NODE D
+        WHERE B.DEL_YN = 'N'
+          AND A.LINK_ID = B.LINK_ID
+          AND B.F_NODE = C.NODE_ID(+)
+          AND B.T_NODE = D.NODE_ID(+)
+        ORDER BY A.ORD, A.STAT_DT
+    </select>
+
+    <select id="findAllIfscStatByIdTerm" parameterType="com.its.op.vo.statistics.TrafficTermParam" resultType="com.its.op.vo.statistics.AtrdTrafficVo">
+        SELECT A.IFSC_ID AS ID, 1 AS ORD, 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,
+               A.TFVL, A.SPED, A.OCPY_RATE, A.TRVL_HH
+        FROM (SELECT IFSC_ID,
+                     ${cond.DATE_COL_FMT}
+                     TFVL, SPED, OCPY_RATE, TRVL_HH
+              FROM ${cond.TABLE_NAME} A
+              WHERE IFSC_ID = #{cond.ID}
+                AND STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
+             ) A,
+             TB_IFSC B, TB_NODE C, TB_NODE D
+        WHERE B.DEL_YN    = 'N'
+          AND A.IFSC_ID   = B.IFSC_ID
+          AND B.F_NODE_ID = C.NODE_ID(+)
+          AND B.T_NODE_ID = D.NODE_ID(+)
+        ORDER BY A.STAT_DT
+    </select>
+
+    <select id="findAllIfscStatByAtrdIdTerm" parameterType="com.its.op.vo.statistics.TrafficTermParam" resultType="com.its.op.vo.statistics.AtrdTrafficVo">
+        SELECT A.IFSC_ID AS ID, A.ORD, 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,
+               A.TFVL, A.SPED, A.OCPY_RATE, A.TRVL_HH
+        FROM (SELECT A.IFSC_ID, B.ORD,
+                     ${cond.DATE_COL_FMT}
+                     TFVL, SPED, OCPY_RATE, TRVL_HH
+              FROM ${cond.TABLE_NAME} A,
+                   (SELECT B.IFSC_ID,
+                           RANK() OVER(PARTITION BY A.ATRD_ID ORDER BY A.ORD, B.ORD) AS ORD
+                    FROM TB_ATRD_ROAD_RLTN A, TB_ROAD_IFSC_RLTN B
+                    WHERE A.ATRD_ID = #{cond.ID}
+                      AND A.ROAD_ID = B.ROAD_ID ) B
+              WHERE A.IFSC_ID = B.IFSC_ID
+                AND STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
+             ) A,
+             TB_IFSC B, TB_NODE C, TB_NODE D
+        WHERE B.DEL_YN    = 'N'
+          AND A.IFSC_ID   = B.IFSC_ID
+          AND B.F_NODE_ID = C.NODE_ID(+)
+          AND B.T_NODE_ID = D.NODE_ID(+)
+        ORDER BY A.ORD, A.STAT_DT
+    </select>
+
+    <select id="findAllRoadStatByIdTerm" parameterType="com.its.op.vo.statistics.TrafficTermParam" resultType="com.its.op.vo.statistics.AtrdTrafficVo">
+        SELECT A.ROAD_ID AS ID, 1 AS ORD, 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,
+               A.TFVL, A.SPED, A.OCPY_RATE, A.TRVL_HH
+        FROM (SELECT ROAD_ID,
+                     ${cond.DATE_COL_FMT}
+                     TFVL, SPED, OCPY_RATE, TRVL_HH
+              FROM ${cond.TABLE_NAME} A
+              WHERE ROAD_ID = #{cond.ID}
+                AND STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
+             ) A,
+             TB_ROAD B, TB_NODE C, TB_NODE D
+        WHERE B.DEL_YN = 'N'
+          AND A.ROAD_ID = B.ROAD_ID
+          AND B.F_NODE_ID = C.NODE_ID(+)
+          AND B.T_NODE_ID = D.NODE_ID(+)
+        ORDER BY A.STAT_DT
+    </select>
+
+    <select id="findAllRoadStatByAtrdIdTerm" parameterType="com.its.op.vo.statistics.TrafficTermParam" resultType="com.its.op.vo.statistics.AtrdTrafficVo">
+        SELECT A.ROAD_ID AS ID, A.ORD, 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,
+               A.TFVL, A.SPED, A.OCPY_RATE, A.TRVL_HH
+        FROM (SELECT A.ROAD_ID, B.ORD,
+                     ${cond.DATE_COL_FMT}
+                     A.TFVL, A.SPED, A.OCPY_RATE, A.TRVL_HH
+              FROM ${cond.TABLE_NAME} A,
+                   (SELECT ROAD_ID, ORD
+                      FROM TB_ATRD_ROAD_RLTN
+                     WHERE ATRD_ID = #{cond.ID}) B
+              WHERE A.ROAD_ID = B.ROAD_ID
+                AND A.STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
+             ) A,
+             TB_ROAD B, TB_NODE C, TB_NODE D
+        WHERE B.DEL_YN    = 'N'
+          AND A.ROAD_ID   = B.ROAD_ID
+          AND B.F_NODE_ID = C.NODE_ID(+)
+          AND B.T_NODE_ID = D.NODE_ID(+)
+        ORDER BY A.ORD, A.STAT_DT
+    </select>
+
+    <!--
+        시간대 검색 - 15분, 시간(링크, 서비스링크, 도로)
+    -->
+    <select id="findAllLinkStatByIdHour" parameterType="com.its.op.vo.statistics.TrafficHourParam" resultType="com.its.op.vo.statistics.AtrdTrafficVo">
+        SELECT A.LINK_ID AS ID, 1 AS ORD, 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,
+               A.TFVL, A.SPED, A.OCPY_RATE, A.TRVL_HH
+        FROM (SELECT LINK_ID,
+                     ${cond.DATE_COL_FMT}
+                     TFVL, SPED, OCPY_RATE, TRVL_HH
+              FROM ${cond.TABLE_NAME} 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}
+             ) A,
+             TB_LINK B, TB_NODE C, TB_NODE D
+        WHERE B.DEL_YN  = 'N'
+          AND A.LINK_ID = B.LINK_ID
+          AND B.F_NODE  = C.NODE_ID(+)
+          AND B.T_NODE  = D.NODE_ID(+)
+        ORDER BY A.STAT_DT
+    </select>
+
+    <select id="findAllLinkStatByAtrdIdHour" parameterType="com.its.op.vo.statistics.TrafficHourParam" resultType="com.its.op.vo.statistics.AtrdTrafficVo">
+        SELECT A.LINK_ID AS ID, A.ORD, 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,
+               A.TFVL, A.SPED, A.OCPY_RATE, A.TRVL_HH
+        FROM (SELECT A.LINK_ID, B.ORD,
+                     ${cond.DATE_COL_FMT}
+                     TFVL, SPED, OCPY_RATE, TRVL_HH
+              FROM ${cond.TABLE_NAME} A,
+                   (SELECT C.LINK_ID,
+                           RANK() OVER(PARTITION BY A.ATRD_ID ORDER BY A.ORD, B.ORD, C.ORD) AS ORD
+                    FROM TB_ATRD_ROAD_RLTN A, TB_ROAD_IFSC_RLTN B, TB_IFSC_LINK_RLTN C
+                    WHERE A.ATRD_ID = #{cond.ID}
+                      AND A.ROAD_ID = B.ROAD_ID
+                      AND B.IFSC_ID = C.IFSC_ID ) B
+              WHERE A.LINK_ID = B.LINK_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}
+             ) A,
+             TB_LINK B, TB_NODE C, TB_NODE D
+        WHERE B.DEL_YN  = 'N'
+          AND A.LINK_ID = B.LINK_ID
+          AND B.F_NODE  = C.NODE_ID(+)
+          AND B.T_NODE  = D.NODE_ID(+)
+        ORDER BY A.ORD, A.STAT_DT
+    </select>
+
+    <select id="findAllIfscStatByIdHour" parameterType="com.its.op.vo.statistics.TrafficHourParam" resultType="com.its.op.vo.statistics.AtrdTrafficVo">
+        SELECT A.IFSC_ID AS ID, 1 AS ORD, 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,
+               A.TFVL, A.SPED, A.OCPY_RATE, A.TRVL_HH
+        FROM (SELECT IFSC_ID,
+                     ${cond.DATE_COL_FMT}
+                     TFVL, SPED, OCPY_RATE, TRVL_HH
+              FROM ${cond.TABLE_NAME} 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}
+             ) A,
+             TB_IFSC B, TB_NODE C, TB_NODE D
+        WHERE B.DEL_YN    = 'N'
+          AND A.IFSC_ID   = B.IFSC_ID
+          AND B.F_NODE_ID = C.NODE_ID(+)
+          AND B.T_NODE_ID = D.NODE_ID(+)
+        ORDER BY A.STAT_DT
+    </select>
+
+    <select id="findAllIfscStatByAtrdIdHour" parameterType="com.its.op.vo.statistics.TrafficHourParam" resultType="com.its.op.vo.statistics.AtrdTrafficVo">
+        SELECT A.IFSC_ID AS ID, A.ORD, 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,
+               A.TFVL, A.SPED, A.OCPY_RATE, A.TRVL_HH
+        FROM (SELECT A.IFSC_ID, B.ORD,
+                     ${cond.DATE_COL_FMT}
+                     TFVL, SPED, OCPY_RATE, TRVL_HH
+              FROM ${cond.TABLE_NAME} A,
+                   (SELECT B.IFSC_ID,
+                           RANK() OVER(PARTITION BY A.ATRD_ID ORDER BY A.ORD, B.ORD) AS ORD
+                    FROM TB_ATRD_ROAD_RLTN A, TB_ROAD_IFSC_RLTN B
+                    WHERE A.ATRD_ID = #{cond.ID}
+                      AND A.ROAD_ID = B.ROAD_ID ) B
+              WHERE A.IFSC_ID = B.IFSC_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}
+             ) A,
+             TB_IFSC B, TB_NODE C, TB_NODE D
+        WHERE B.DEL_YN    = 'N'
+          AND A.IFSC_ID   = B.IFSC_ID
+          AND B.F_NODE_ID = C.NODE_ID(+)
+          AND B.T_NODE_ID = D.NODE_ID(+)
+        ORDER BY A.ORD, A.STAT_DT
+    </select>
+
+    <select id="findAllRoadStatByIdHour" parameterType="com.its.op.vo.statistics.TrafficHourParam" resultType="com.its.op.vo.statistics.AtrdTrafficVo">
+        SELECT A.ROAD_ID AS ID, 1 AS ORD, 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,
+               A.TFVL, A.SPED, A.OCPY_RATE, A.TRVL_HH
+        FROM (SELECT ROAD_ID,
+                     ${cond.DATE_COL_FMT}
+                     TFVL, SPED, OCPY_RATE, TRVL_HH
+              FROM ${cond.TABLE_NAME} 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}
+             ) A,
+             TB_ROAD B, TB_NODE C, TB_NODE D
+        WHERE B.DEL_YN    = 'N'
+          AND A.ROAD_ID   = B.ROAD_ID
+          AND B.F_NODE_ID = C.NODE_ID(+)
+          AND B.T_NODE_ID = D.NODE_ID(+)
+        ORDER BY A.STAT_DT
+    </select>
+
+    <select id="findAllRoadStatByAtrdIdHour" parameterType="com.its.op.vo.statistics.TrafficHourParam" resultType="com.its.op.vo.statistics.AtrdTrafficVo">
+        SELECT A.ROAD_ID AS ID, A.ORD, 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,
+               A.TFVL, A.SPED, A.OCPY_RATE, A.TRVL_HH
+        FROM (SELECT A.ROAD_ID, B.ORD,
+                     ${cond.DATE_COL_FMT}
+                     TFVL, SPED, OCPY_RATE, TRVL_HH
+              FROM ${cond.TABLE_NAME} A,
+                   (SELECT ROAD_ID, ORD
+                    FROM TB_ATRD_ROAD_RLTN
+                    WHERE ATRD_ID = #{cond.ID}) B
+              WHERE A.ROAD_ID = B.ROAD_ID
+                AND A.STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
+                AND SUBSTR(A.STAT_DT, 9, 6) BETWEEN #{cond.FROM_HM} AND #{cond.TO_HM}
+             ) A,
+             TB_ROAD B, TB_NODE C, TB_NODE D
+        WHERE B.DEL_YN    = 'N'
+          AND A.ROAD_ID   = B.ROAD_ID
+          AND B.F_NODE_ID = C.NODE_ID(+)
+          AND B.T_NODE_ID = D.NODE_ID(+)
+        ORDER BY A.ORD, A.STAT_DT
+    </select>
+
+    <!--
+        지정시각 거색 - 15분, 시간(링크, 서비스링크, 도로)
+    -->
+    <select id="findAllLinkStatByIdSpec" parameterType="com.its.op.vo.statistics.TrafficSpecParam" resultType="com.its.op.vo.statistics.AtrdTrafficVo">
+        SELECT A.LINK_ID AS ID, 1 AS ORD, 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,
+               A.TFVL, A.SPED, A.OCPY_RATE, A.TRVL_HH
+        FROM (SELECT LINK_ID,
+                     ${cond.DATE_COL_FMT}
+                     TFVL, SPED, OCPY_RATE, TRVL_HH
+              FROM ${cond.TABLE_NAME} A
+              WHERE LINK_ID = #{cond.ID}
+            <if test="cond.statDays != null and cond.statDays.size > 0">
+                AND
+                <foreach collection="cond.statDays" item="day" index="index" open="(" close=")" separator=" OR ">
+                    STAT_DT LIKE '' || ${day} || '%'
+                </foreach>
+            </if>
+                AND SUBSTR(STAT_DT, 9, 6) BETWEEN #{cond.FROM_HM} AND #{cond.TO_HM}
+             ) A,
+             TB_LINK B, TB_NODE C, TB_NODE D
+        WHERE B.DEL_YN  = 'N'
+          AND A.LINK_ID = B.LINK_ID
+          AND B.F_NODE  = C.NODE_ID(+)
+          AND B.T_NODE  = D.NODE_ID(+)
+        ORDER BY A.STAT_DT
+    </select>
+
+    <select id="findAllLinkStatByAtrdIdSpec" parameterType="com.its.op.vo.statistics.TrafficSpecParam" resultType="com.its.op.vo.statistics.AtrdTrafficVo">
+        SELECT A.LINK_ID AS ID, A.ORD, 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,
+               A.TFVL, A.SPED, A.OCPY_RATE, A.TRVL_HH
+        FROM (SELECT A.LINK_ID, B.ORD,
+                     ${cond.DATE_COL_FMT}
+                     TFVL, SPED, OCPY_RATE, TRVL_HH
+              FROM ${cond.TABLE_NAME} A,
+                   (SELECT C.LINK_ID,
+                           RANK() OVER(PARTITION BY A.ATRD_ID ORDER BY A.ORD, B.ORD, C.ORD) AS ORD
+                    FROM TB_ATRD_ROAD_RLTN A, TB_ROAD_IFSC_RLTN B, TB_IFSC_LINK_RLTN C
+                    WHERE A.ATRD_ID = #{cond.ID}
+                      AND A.ROAD_ID = B.ROAD_ID
+                      AND B.IFSC_ID = C.IFSC_ID ) B
+              WHERE A.LINK_ID = B.LINK_ID
+            <if test="cond.statDays != null and cond.statDays.size > 0">
+                AND
+                <foreach collection="cond.statDays" item="day" index="index" open="(" close=")" separator=" OR ">
+                    STAT_DT LIKE '' || ${day} || '%'
+                </foreach>
+            </if>
+                AND SUBSTR(STAT_DT, 9, 6) BETWEEN #{cond.FROM_HM} AND #{cond.TO_HM}
+             ) A,
+             TB_LINK B, TB_NODE C, TB_NODE D
+        WHERE B.DEL_YN  = 'N'
+          AND A.LINK_ID = B.LINK_ID
+          AND B.F_NODE  = C.NODE_ID(+)
+          AND B.T_NODE  = D.NODE_ID(+)
+        ORDER BY A.ORD, A.STAT_DT
+    </select>
+
+    <select id="findAllIfscStatByIdSpec" parameterType="com.its.op.vo.statistics.TrafficSpecParam" resultType="com.its.op.vo.statistics.AtrdTrafficVo">
+        SELECT A.IFSC_ID AS ID, 1 AS ORD, 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,
+               A.TFVL, A.SPED, A.OCPY_RATE, A.TRVL_HH
+        FROM (SELECT IFSC_ID,
+                     ${cond.DATE_COL_FMT}
+                     TFVL, SPED, OCPY_RATE, TRVL_HH
+              FROM ${cond.TABLE_NAME} A
+              WHERE IFSC_ID = #{cond.ID}
+            <if test="cond.statDays != null and cond.statDays.size > 0">
+                AND
+                <foreach collection="cond.statDays" item="day" index="index" open="(" close=")" separator=" OR ">
+                    STAT_DT LIKE '' || ${day} || '%'
+                </foreach>
+            </if>
+                AND SUBSTR(STAT_DT, 9, 6) BETWEEN #{cond.FROM_HM} AND #{cond.TO_HM}
+             ) A,
+             TB_IFSC B, TB_NODE C, TB_NODE D
+        WHERE B.DEL_YN    = 'N'
+          AND A.IFSC_ID   = B.IFSC_ID
+          AND B.F_NODE_ID = C.NODE_ID(+)
+          AND B.T_NODE_ID = D.NODE_ID(+)
+        ORDER BY A.STAT_DT
+    </select>
+
+    <select id="findAllIfscStatByAtrdIdSpec" parameterType="com.its.op.vo.statistics.TrafficSpecParam" resultType="com.its.op.vo.statistics.AtrdTrafficVo">
+        SELECT A.IFSC_ID AS ID, A.ORD, 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,
+               A.TFVL, A.SPED, A.OCPY_RATE, A.TRVL_HH
+        FROM (SELECT A.IFSC_ID, B.ORD,
+                     ${cond.DATE_COL_FMT}
+                     TFVL, SPED, OCPY_RATE, TRVL_HH
+              FROM ${cond.TABLE_NAME} A,
+                   (SELECT B.IFSC_ID,
+                           RANK() OVER(PARTITION BY A.ATRD_ID ORDER BY A.ORD, B.ORD) AS ORD
+                    FROM TB_ATRD_ROAD_RLTN A, TB_ROAD_IFSC_RLTN B
+                    WHERE A.ATRD_ID = #{cond.ID}
+                      AND A.ROAD_ID = B.ROAD_ID ) B
+              WHERE A.IFSC_ID = B.IFSC_ID
+            <if test="cond.statDays != null and cond.statDays.size > 0">
+                AND
+                <foreach collection="cond.statDays" item="day" index="index" open="(" close=")" separator=" OR ">
+                    STAT_DT LIKE '' || ${day} || '%'
+                </foreach>
+            </if>
+                AND SUBSTR(STAT_DT, 9, 6) BETWEEN #{cond.FROM_HM} AND #{cond.TO_HM}
+             ) A,
+             TB_IFSC B, TB_NODE C, TB_NODE D
+        WHERE B.DEL_YN    = 'N'
+          AND A.IFSC_ID   = B.IFSC_ID
+          AND B.F_NODE_ID = C.NODE_ID(+)
+          AND B.T_NODE_ID = D.NODE_ID(+)
+        ORDER BY A.ORD, A.STAT_DT
+    </select>
+
+    <select id="findAllRoadStatByIdSpec" parameterType="com.its.op.vo.statistics.TrafficSpecParam" resultType="com.its.op.vo.statistics.AtrdTrafficVo">
+        SELECT A.ROAD_ID AS ID, 1 AS ORD, 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,
+               A.TFVL, A.SPED, A.OCPY_RATE, A.TRVL_HH
+        FROM (SELECT ROAD_ID,
+                     ${cond.DATE_COL_FMT}
+                     TFVL, SPED, OCPY_RATE, TRVL_HH
+              FROM ${cond.TABLE_NAME} A
+              WHERE ROAD_ID = #{cond.ID}
+            <if test="cond.statDays != null and cond.statDays.size > 0">
+                AND
+                <foreach collection="cond.statDays" item="day" index="index" open="(" close=")" separator=" OR ">
+                    STAT_DT LIKE '' || ${day} || '%'
+                </foreach>
+            </if>
+                AND SUBSTR(STAT_DT, 9, 6) BETWEEN #{cond.FROM_HM} AND #{cond.TO_HM}
+             ) A,
+             TB_ROAD B, TB_NODE C, TB_NODE D
+        WHERE B.DEL_YN    = 'N'
+          AND A.ROAD_ID   = B.ROAD_ID
+          AND B.F_NODE_ID = C.NODE_ID(+)
+          AND B.T_NODE_ID = D.NODE_ID(+)
+        ORDER BY A.STAT_DT
+    </select>
+
+    <select id="findAllRoadStatByAtrdIdSpec" parameterType="com.its.op.vo.statistics.TrafficSpecParam" resultType="com.its.op.vo.statistics.AtrdTrafficVo">
+        SELECT A.ROAD_ID ID, A.ORD, 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,
+               A.TFVL, A.SPED, A.OCPY_RATE, A.TRVL_HH
+        FROM (SELECT A.ROAD_ID, B.ORD,
+                     ${cond.DATE_COL_FMT}
+                     TFVL, SPED, OCPY_RATE, TRVL_HH
+              FROM ${cond.TABLE_NAME} A,
+                   (SELECT ROAD_ID, ORD
+                    FROM TB_ATRD_ROAD_RLTN
+                    WHERE ATRD_ID = #{cond.ID}) B
+              WHERE A.ROAD_ID = B.ROAD_ID
+            <if test="cond.statDays != null and cond.statDays.size > 0">
+                AND
+                <foreach collection="cond.statDays" item="day" index="index" open="(" close=")" separator=" OR ">
+                    STAT_DT LIKE '' || ${day} || '%'
+                </foreach>
+            </if>
+                AND SUBSTR(A.STAT_DT, 9, 6) BETWEEN #{cond.FROM_HM} AND #{cond.TO_HM}
+             ) A,
+             TB_ROAD B, TB_NODE C, TB_NODE D
+        WHERE B.DEL_YN    = 'N'
+          AND A.ROAD_ID   = B.ROAD_ID
+          AND B.F_NODE_ID = C.NODE_ID(+)
+          AND B.T_NODE_ID = D.NODE_ID(+)
+        ORDER BY A.ORD, A.STAT_DT
     </select>
 
 </mapper>

+ 51 - 16
src/main/resources/mybatis/mapper/statistics/FcltStts.xml

@@ -3,22 +3,57 @@
 
 <mapper namespace="com.its.op.mapper.statistics.FcltSttsMapper">
 
-    <select id="findAllByDateRange" parameterType="com.its.op.vo.statistics.TrafficTermParam" resultType="com.its.op.vo.statistics.TrafficVo">
-    <![CDATA[
-        SELECT A.IFSC_ID AS LINK_ID, A.PRCN_DT, A.TFVL, A.SPED, A.OCPY_RATE, A.TRVL_HH,
-               FN_TODATEFMT(A.PRCN_DT) AS PRCN_DT2,
-               A.CMTR_GRAD_CD,
-               B.CMMN_CD_KOR_NM AS CMTR_GRAD_CD_DESC, A.PTRN_SPED, A.DATA_NUM
-        FROM TB_IFSC_TRAF_HS A,
-             (SELECT CMMN_CD, CMMN_CD_KOR_NM
-              FROM TB_CMMN_CD
-              WHERE CMMN_CLSF_CD = 'LTC'
-             ) B
-        WHERE A.CMTR_GRAD_CD = B.CMMN_CD
-          AND A.IFSC_ID      = #{cond.ID}
-          AND A.PRCN_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
-        ORDER BY A.PRCN_DT, A.IFSC_ID
-        ]]>
+    <select id = "findAllFcltSttsType" resultType="com.its.op.vo.statistics.FcltSttsTypeVo">
+        SELECT 'CCTV' AS FCLT_CD, 'CCTV' AS FCLT_NM FROM DUAL
+        UNION
+        SELECT 'VMS' AS FCLT_CD, 'VMS' AS FCLT_NM FROM DUAL
+        UNION
+        SELECT 'VDS' AS FCLT_CD, 'VDS' AS FCLT_NM FROM DUAL
+    </select>
+
+    <select id="findAllFcltSttsCCTV" parameterType="com.its.op.vo.statistics.FcltSttsParam" resultType="com.its.op.vo.statistics.FcltSttsVo">
+        SELECT A.CCTV_MNGM_NMBR AS FCLT_NMBR, A.CCTV_CTLR_ID AS FCLT_ID, A.ISTL_LCTN_NM AS FCLT_NM,
+               NVL(B.CNT_CMS1, 0) + NVL(B.CNT_CMS2, 0) AS CNT_TOT,
+               NVL(B.CNT_CMS1, 0) AS CNT_CMS1, NVL(B.CNT_CMS2, 0) AS CNT_CMS2
+        FROM TB_CCTV_CTLR A,
+             (SELECT CCTV_MNGM_NMBR,
+                     SUM(DECODE(CMNC_STTS_CD, 'CMS1', 1, 0)) AS CNT_CMS1,
+                     SUM(DECODE(CMNC_STTS_CD, 'CMS2', 1, 0)) AS CNT_CMS2
+              FROM TB_CCTV_STTS_HS
+              WHERE CRTN_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
+                AND CMNC_STTS_CD IN ('CMS1', 'CMS2')
+              GROUP BY CCTV_MNGM_NMBR) B
+        WHERE A.CCTV_MNGM_NMBR = B.CCTV_MNGM_NMBR(+)
+    </select>
+
+    <select id="findAllFcltSttsVMS" parameterType="com.its.op.vo.statistics.FcltSttsParam" resultType="com.its.op.vo.statistics.FcltSttsVo">
+        SELECT A.VMS_CTLR_NMBR AS FCLT_NMBR, A.VMS_CTLR_ID AS FCLT_ID, A.VMS_NM AS FCLT_NM,
+               NVL(B.CNT_CMS1, 0) + NVL(B.CNT_CMS2, 0) AS CNT_TOT,
+               NVL(B.CNT_CMS1, 0) AS CNT_CMS1, NVL(B.CNT_CMS2, 0) AS CNT_CMS2
+        FROM TB_VMS_CTLR A,
+             (SELECT VMS_CTLR_NMBR,
+                     SUM(DECODE(CONN_STTS_CD, 'CMS1', 1, 0)) AS CNT_CMS1,
+                     SUM(DECODE(CONN_STTS_CD, 'CMS2', 1, 0)) AS CNT_CMS2
+              FROM TB_VMS_STTS_HS
+              WHERE RGST_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
+                AND CONN_STTS_CD IN ('CMS1', 'CMS2')
+              GROUP BY VMS_CTLR_NMBR) B
+        WHERE A.VMS_CTLR_NMBR = B.VMS_CTLR_NMBR(+)
+    </select>
+
+    <select id="findAllFcltSttsVDS" parameterType="com.its.op.vo.statistics.FcltSttsParam" resultType="com.its.op.vo.statistics.FcltSttsVo">
+        SELECT A.CTLR_MNGM_NMBR AS FCLT_NMBR, A.VDS_CTLR_ID AS FCLT_ID, A.LCTN AS FCLT_NM,
+               NVL(B.CNT_CMS1, 0) + NVL(B.CNT_CMS2, 0) AS CNT_TOT,
+               NVL(B.CNT_CMS1, 0) AS CNT_CMS1, NVL(B.CNT_CMS2, 0) AS CNT_CMS2
+        FROM TB_VDS_CTLR A,
+             (SELECT CTLR_MNGM_NMBR,
+                     SUM(DECODE(CMNC_STTS_CD, 'CMS1', 1, 0)) AS CNT_CMS1,
+                     SUM(DECODE(CMNC_STTS_CD, 'CMS2', 1, 0)) AS CNT_CMS2
+              FROM TB_VDS_CTLR_STTS_RAW
+              WHERE OCRR_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
+                AND CMNC_STTS_CD IN ('CMS1', 'CMS2')
+              GROUP BY CTLR_MNGM_NMBR) B
+        WHERE A.CTLR_MNGM_NMBR = B.CTLR_MNGM_NMBR(+)
     </select>
 
 </mapper>

+ 158 - 16
src/main/resources/mybatis/mapper/statistics/Incident.xml

@@ -3,22 +3,164 @@
 
 <mapper namespace="com.its.op.mapper.statistics.IncidentMapper">
 
-    <select id="findAllByDateRange" parameterType="com.its.op.vo.statistics.TrafficTermParam" resultType="com.its.op.vo.statistics.TrafficVo">
-    <![CDATA[
-        SELECT A.IFSC_ID AS LINK_ID, A.PRCN_DT, A.TFVL, A.SPED, A.OCPY_RATE, A.TRVL_HH,
-               FN_TODATEFMT(A.PRCN_DT) AS PRCN_DT2,
-               A.CMTR_GRAD_CD,
-               B.CMMN_CD_KOR_NM AS CMTR_GRAD_CD_DESC, A.PTRN_SPED, A.DATA_NUM
-        FROM TB_IFSC_TRAF_HS A,
-             (SELECT CMMN_CD, CMMN_CD_KOR_NM
-              FROM TB_CMMN_CD
-              WHERE CMMN_CLSF_CD = 'LTC'
-             ) B
-        WHERE A.CMTR_GRAD_CD = B.CMMN_CD
-          AND A.IFSC_ID      = #{cond.ID}
-          AND A.PRCN_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
-        ORDER BY A.PRCN_DT, A.IFSC_ID
-        ]]>
+    <select id="findAllTypeDD" parameterType="com.its.op.vo.statistics.IncidentParam" resultType="com.its.op.vo.statistics.IncidentTypeVo">
+        SELECT NVL(STAT_DT,      'X') AS STAT_DT,
+               NVL(DATA_CNT,       0) AS DATA_CNT,
+               NVL(STAT_DTNM,    'X') AS STAT_DT_FMT,
+               NVL(INCD_TYPE_CD, '-') AS INCD_TYPE_CD,
+               NVL(INCD_OCRR_NUM,  0) AS INCD_OCRR_NUM,
+               NVL(FTLT_PNUM,      0) AS FTLT_PNUM,
+               NVL(INJR_PNUM,      0) AS INJR_PNUM,
+               NVL(PRPR_DMGE_AMT,  0) AS PRPR_DMGE_AMT
+        FROM (
+                 SELECT SUBSTR(STAT_DT, 1, 8) AS STAT_DT, COUNT(1) DATA_CNT,
+                        TO_CHAR(TO_DATE(SUBSTR(STAT_DT, 1, 8), 'YYYYMMDD'), 'YYYY-MM-DD') AS STAT_DTNM,
+                        INCD_TYPE_CD AS INCD_TYPE_CD,
+                        SUM(INCD_OCRR_NUM) INCD_OCRR_NUM,
+                        SUM(FTLT_PNUM)     FTLT_PNUM,
+                        SUM(INJR_PNUM)     INJR_PNUM,
+                        SUM(PRPR_DMGE_AMT) PRPR_DMGE_AMT
+                 FROM TB_INCD_TYPE_DD_STAT
+                 WHERE STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
+                 GROUP BY ROLLUP(SUBSTR(STAT_DT, 1, 8), INCD_TYPE_CD)
+                 ORDER BY STAT_DT
+             )
+    </select>
+
+    <select id="findAllTypeMN" parameterType="com.its.op.vo.statistics.IncidentParam" resultType="com.its.op.vo.statistics.IncidentTypeVo">
+        SELECT NVL(STAT_DT,      'X') AS STAT_DT,
+               NVL(DATA_CNT,       0) AS DATA_CNT,
+               NVL(STAT_DTNM,    'X') AS STAT_DT_FMT,
+               NVL(INCD_TYPE_CD, '-') AS INCD_TYPE_CD,
+               NVL(INCD_OCRR_NUM,  0) AS INCD_OCRR_NUM,
+               NVL(FTLT_PNUM,      0) AS FTLT_PNUM,
+               NVL(INJR_PNUM,      0) AS INJR_PNUM,
+               NVL(PRPR_DMGE_AMT,  0) AS PRPR_DMGE_AMT
+        FROM (
+                 SELECT SUBSTR(STAT_DT, 1, 6) AS STAT_DT, COUNT(1) DATA_CNT,
+                        TO_CHAR(TO_DATE(SUBSTR(STAT_DT, 1, 6), 'YYYYMM'), 'YYYY-MM') AS STAT_DTNM,
+                        INCD_TYPE_CD AS INCD_TYPE_CD,
+                        SUM(INCD_OCRR_NUM) INCD_OCRR_NUM,
+                        SUM(FTLT_PNUM)     FTLT_PNUM,
+                        SUM(INJR_PNUM)     INJR_PNUM,
+                        SUM(PRPR_DMGE_AMT) PRPR_DMGE_AMT
+                 FROM TB_INCD_TYPE_MN_STAT
+                 WHERE STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
+                 GROUP BY ROLLUP(SUBSTR(STAT_DT, 1, 6), INCD_TYPE_CD)
+                 ORDER BY STAT_DT
+             )
+    </select>
+
+    <select id="findAllTypeYY" parameterType="com.its.op.vo.statistics.IncidentParam" resultType="com.its.op.vo.statistics.IncidentTypeVo">
+        SELECT NVL(STAT_DT,      'X') AS STAT_DT,
+               NVL(DATA_CNT,       0) AS DATA_CNT,
+               NVL(STAT_DTNM,    'X') AS STAT_DT_FMT,
+               NVL(INCD_TYPE_CD, '-') AS INCD_TYPE_CD,
+               NVL(INCD_OCRR_NUM,  0) AS INCD_OCRR_NUM,
+               NVL(FTLT_PNUM,      0) AS FTLT_PNUM,
+               NVL(INJR_PNUM,      0) AS INJR_PNUM,
+               NVL(PRPR_DMGE_AMT,  0) AS PRPR_DMGE_AMT
+        FROM (
+                 SELECT SUBSTR(STAT_DT, 1, 4) AS STAT_DT, COUNT(1) DATA_CNT,
+                        SUBSTR(STAT_DT, 1, 4) AS STAT_DTNM,
+                        INCD_TYPE_CD AS INCD_TYPE_CD,
+                        SUM(INCD_OCRR_NUM) INCD_OCRR_NUM,
+                        SUM(FTLT_PNUM) FTLT_PNUM,
+                        SUM(INJR_PNUM) INJR_PNUM,
+                        SUM(PRPR_DMGE_AMT) PRPR_DMGE_AMT
+                 FROM TB_INCD_TYPE_MN_STAT
+                 WHERE STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
+                 GROUP BY ROLLUP(SUBSTR(STAT_DT, 1, 4), INCD_TYPE_CD)
+                 ORDER BY STAT_DT
+             )
+    </select>
+
+
+    <select id="findAllSectDD" parameterType="com.its.op.vo.statistics.IncidentParam" resultType="com.its.op.vo.statistics.IncidentSectVo">
+        SELECT NVL(A.STAT_DT,      'X') AS STAT_DT,
+               NVL(A.DATA_CNT,       0) AS DATA_CNT,
+               NVL(A.STAT_DTNM,    'X') AS STAT_DT_FMT,
+               NVL(A.LINK_ID,        0) AS LINK_ID,
+               '[' || B.F_NODE || '] ' || C.NODE_NAME AS F_NODE,
+               '[' || B.T_NODE || '] ' || D.NODE_NAME AS T_NODE,
+               NVL(A.INCD_OCRR_NUM,  0) AS INCD_OCRR_NUM,
+               NVL(A.FTLT_PNUM,      0) AS FTLT_PNUM,
+               NVL(A.INJR_PNUM,      0) AS INJR_PNUM,
+               NVL(A.PRPR_DMGE_AMT,  0) AS PRPR_DMGE_AMT
+        FROM (
+                 SELECT SUBSTR(STAT_DT, 1, 8) AS STAT_DT, COUNT(1) DATA_CNT,
+                        TO_CHAR(TO_DATE(SUBSTR(STAT_DT, 1, 8), 'YYYYMMDD'), 'YYYY-MM-DD') AS STAT_DTNM,
+                        LINK_ID AS LINK_ID,
+                        SUM(INCD_OCRR_NUM) INCD_OCRR_NUM,
+                        SUM(FTLT_PNUM)     FTLT_PNUM,
+                        SUM(INJR_PNUM)     INJR_PNUM,
+                        SUM(PRPR_DMGE_AMT) PRPR_DMGE_AMT
+                 FROM TB_INCD_SECT_DD_STAT
+                 WHERE STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
+                 GROUP BY ROLLUP(SUBSTR(STAT_DT, 1, 8), LINK_ID)
+             ) A, TB_LINK B, TB_NODE C, TB_NODE D
+        WHERE A.LINK_ID = B.LINK_ID
+          AND B.F_NODE = C.NODE_ID
+          AND B.T_NODE = D.NODE_ID
+        ORDER BY A.STAT_DT
+    </select>
+
+    <select id="findAllSectMN" parameterType="com.its.op.vo.statistics.IncidentParam" resultType="com.its.op.vo.statistics.IncidentSectVo">
+        SELECT NVL(A.STAT_DT,      'X') AS STAT_DT,
+               NVL(A.DATA_CNT,       0) AS DATA_CNT,
+               NVL(A.STAT_DTNM,    'X') AS STAT_DT_FMT,
+               '[' || B.F_NODE || '] ' || C.NODE_NAME AS F_NODE,
+               '[' || B.T_NODE || '] ' || D.NODE_NAME AS T_NODE,
+               NVL(A.LINK_ID,        0) AS LINK_ID,
+               NVL(A.INCD_OCRR_NUM,  0) AS INCD_OCRR_NUM,
+               NVL(A.FTLT_PNUM,      0) AS FTLT_PNUM,
+               NVL(A.INJR_PNUM,      0) AS INJR_PNUM,
+               NVL(A.PRPR_DMGE_AMT,  0) AS PRPR_DMGE_AMT
+        FROM (
+                 SELECT SUBSTR(STAT_DT, 1, 6) AS STAT_DT, COUNT(1) DATA_CNT,
+                        TO_CHAR(TO_DATE(SUBSTR(STAT_DT, 1, 6), 'YYYYMM'), 'YYYY-MM') AS STAT_DTNM,
+                        LINK_ID AS LINK_ID,
+                        SUM(INCD_OCRR_NUM) INCD_OCRR_NUM,
+                        SUM(FTLT_PNUM)     FTLT_PNUM,
+                        SUM(INJR_PNUM)     INJR_PNUM,
+                        SUM(PRPR_DMGE_AMT) PRPR_DMGE_AMT
+                 FROM TB_INCD_SECT_MN_STAT
+                 WHERE STAT_DT BETWEEN '20201201000000' AND '20211201000000'
+                 GROUP BY ROLLUP(SUBSTR(STAT_DT, 1, 6), LINK_ID)
+             ) A, TB_LINK B, TB_NODE C, TB_NODE D
+        WHERE A.LINK_ID = B.LINK_ID
+          AND B.F_NODE = C.NODE_ID
+          AND B.T_NODE = D.NODE_ID
+        ORDER BY A.STAT_DT
+    </select>
+
+    <select id="findAllSectYY" parameterType="com.its.op.vo.statistics.IncidentParam" resultType="com.its.op.vo.statistics.IncidentSectVo">
+        SELECT NVL(A.STAT_DT,      'X') AS STAT_DT,
+               NVL(A.DATA_CNT,       0) AS DATA_CNT,
+               NVL(A.STAT_DTNM,    'X') AS STAT_DT_FMT,
+               NVL(A.LINK_ID,        0) AS LINK_ID,
+               '[' || B.F_NODE || '] ' || C.NODE_NAME AS F_NODE,
+               '[' || B.T_NODE || '] ' || D.NODE_NAME AS T_NODE,
+               NVL(A.INCD_OCRR_NUM,  0) AS INCD_OCRR_NUM,
+               NVL(A.FTLT_PNUM,      0) AS FTLT_PNUM,
+               NVL(A.INJR_PNUM,      0) AS INJR_PNUM,
+               NVL(A.PRPR_DMGE_AMT,  0) AS PRPR_DMGE_AMT
+        FROM (
+                 SELECT SUBSTR(STAT_DT, 1, 4) AS STAT_DT, COUNT(1) DATA_CNT,
+                        SUBSTR(STAT_DT, 1, 4) AS STAT_DTNM,
+                        LINK_ID AS LINK_ID,
+                        SUM(INCD_OCRR_NUM) INCD_OCRR_NUM,
+                        SUM(FTLT_PNUM) FTLT_PNUM,
+                        SUM(INJR_PNUM) INJR_PNUM,
+                        SUM(PRPR_DMGE_AMT) PRPR_DMGE_AMT
+                 FROM TB_INCD_SECT_MN_STAT
+                 WHERE STAT_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
+                 GROUP BY ROLLUP(SUBSTR(STAT_DT, 1, 4), LINK_ID)
+             ) A, TB_LINK B, TB_NODE C, TB_NODE D
+        WHERE A.LINK_ID = B.LINK_ID
+          AND B.F_NODE = C.NODE_ID
+          AND B.T_NODE = D.NODE_ID
+        ORDER BY A.STAT_DT
     </select>
 
 </mapper>

+ 22 - 16
src/main/resources/mybatis/mapper/statistics/UnitSystStts.xml

@@ -3,22 +3,28 @@
 
 <mapper namespace="com.its.op.mapper.statistics.UnitSystSttsMapper">
 
-    <select id="findAllByDateRange" parameterType="com.its.op.vo.statistics.TrafficTermParam" resultType="com.its.op.vo.statistics.TrafficVo">
-    <![CDATA[
-        SELECT A.IFSC_ID AS LINK_ID, A.PRCN_DT, A.TFVL, A.SPED, A.OCPY_RATE, A.TRVL_HH,
-               FN_TODATEFMT(A.PRCN_DT) AS PRCN_DT2,
-               A.CMTR_GRAD_CD,
-               B.CMMN_CD_KOR_NM AS CMTR_GRAD_CD_DESC, A.PTRN_SPED, A.DATA_NUM
-        FROM TB_IFSC_TRAF_HS A,
-             (SELECT CMMN_CD, CMMN_CD_KOR_NM
-              FROM TB_CMMN_CD
-              WHERE CMMN_CLSF_CD = 'LTC'
-             ) B
-        WHERE A.CMTR_GRAD_CD = B.CMMN_CD
-          AND A.IFSC_ID      = #{cond.ID}
-          AND A.PRCN_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT}
-        ORDER BY A.PRCN_DT, A.IFSC_ID
-        ]]>
+    <select id ="findAllByDateRange" parameterType="com.its.op.vo.statistics.UnitSystSttsParam" resultType="com.its.op.vo.statistics.UnitSystSttsVo">
+        SELECT A.SYST_ID, A.SYST_NM,
+               ${cond.STS_TOT} AS STS_TOT,
+               NVL(B.CNT, 0) CNT_SPS0, NVL(C.CNT, 0) CNT_SPS1, NVL(D.CNT, 0) CNT_SPS2, NVL(E.CNT, 0) CNT_SPS3, NVL(F.CNT, 0) CNT_SPS4
+        FROM TB_UNIT_SYST A,
+             (SELECT SYST_ID, COUNT(SYST_ID) CNT FROM TB_UNIT_SYST_STTS_HS WHERE SYST_STTS_CD = 'SPS0' AND CRTN_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT} GROUP BY SYST_ID
+             ) B,
+             (SELECT SYST_ID, COUNT(SYST_ID) CNT FROM TB_UNIT_SYST_STTS_HS WHERE SYST_STTS_CD = 'SPS1' AND CRTN_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT} GROUP BY SYST_ID
+             ) C,
+             (SELECT SYST_ID, COUNT(SYST_ID) CNT FROM TB_UNIT_SYST_STTS_HS WHERE SYST_STTS_CD = 'SPS2' AND CRTN_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT} GROUP BY SYST_ID
+             ) D,
+             (SELECT SYST_ID, COUNT(SYST_ID) CNT FROM TB_UNIT_SYST_STTS_HS WHERE SYST_STTS_CD = 'SPS3' AND CRTN_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT} GROUP BY SYST_ID
+             ) E,
+             (SELECT SYST_ID, COUNT(SYST_ID) CNT FROM TB_UNIT_SYST_STTS_HS WHERE SYST_STTS_CD = 'SPS4' AND CRTN_DT BETWEEN #{cond.FROM_DT} AND #{cond.TO_DT} GROUP BY SYST_ID
+             ) F
+        WHERE A.SYST_ID = B.SYST_ID(+)
+          AND A.SYST_ID = C.SYST_ID(+)
+          AND A.SYST_ID = D.SYST_ID(+)
+          AND A.SYST_ID = E.SYST_ID(+)
+          AND A.SYST_ID = F.SYST_ID(+)
+          AND A.STTS_DSPL_YN = 'Y'
+        ORDER BY A.SYST_ID
     </select>
 
 </mapper>