shjung hace 2 años
padre
commit
e0cfa119c3

+ 15 - 4
src/main/java/com/its/op/controller/its/rse/TbRseOdStatHhController.java

@@ -1,6 +1,7 @@
 package com.its.op.controller.its.rse;
 
 import com.its.op.dto.its.rse.RseOdStatDto;
+import com.its.op.dto.its.rse.RseOdStatListDataDto;
 import com.its.op.dto.its.rse.RseOdStatListDto;
 import com.its.op.service.its.rse.TbRseOdStatHhService;
 import io.swagger.annotations.Api;
@@ -27,9 +28,9 @@ public class TbRseOdStatHhController {
     @ApiOperation(value = "RSE OD 교통량 조회(출발/도착)", response = RseOdStatDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/tfvl/od", produces = {"application/json; charset=utf8"})
     public List<RseOdStatDto> findAllOdListByDateRange(
-            @ApiParam(name = "FROM_DT", value = "조회시작시각(YYYYMMDDHH24MI00)", example = "20220122000000", required = true)
+            @ApiParam(name = "FROM_DT", value = "조회시작시각(YYYYMMDDHH24MI00)", example = "20221214090000", required = true)
             @RequestParam String FROM_DT,
-            @ApiParam(name = "TO_DT", value = "조회종료시각(YYYYMMDDHH24MI59)", example = "20220122235959", required = true)
+            @ApiParam(name = "TO_DT", value = "조회종료시각(YYYYMMDDHH24MI59)", example = "20221214235959", required = true)
             @RequestParam String TO_DT) {
         return this.service.findAllOdListByDateRange(FROM_DT, TO_DT);
     }
@@ -37,11 +38,21 @@ public class TbRseOdStatHhController {
     @ApiOperation(value = "RSE OD 교통량 목록 조회(출발-도착 목록)", response = RseOdStatListDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/tfvl/od-list", produces = {"application/json; charset=utf8"})
     public List<RseOdStatListDto> findAllListByDateRange(
-            @ApiParam(name = "FROM_DT", value = "조회시작시각(YYYYMMDDHH24MI00)", example = "20220122000000", required = true)
+            @ApiParam(name = "FROM_DT", value = "조회시작시각(YYYYMMDDHH24MI00)", example = "20221214090000", required = true)
             @RequestParam String FROM_DT,
-            @ApiParam(name = "TO_DT", value = "조회종료시각(YYYYMMDDHH24MI59)", example = "20220122235959", required = true)
+            @ApiParam(name = "TO_DT", value = "조회종료시각(YYYYMMDDHH24MI59)", example = "20221214235959", required = true)
             @RequestParam String TO_DT) {
         return this.service.findAllListByDateRange(FROM_DT, TO_DT);
     }
 
+    @ApiOperation(value = "RSE OD 교통량 목록 조회(출발-도착 목록)", response = RseOdStatListDataDto.class, responseContainer = "ArrayList")
+    @GetMapping(value = "/tfvl/od-list-data", produces = {"application/json; charset=utf8"})
+    public List<RseOdStatListDataDto> findAllListDataByDateRange(
+            @ApiParam(name = "FROM_DT", value = "조회시작시각(YYYYMMDDHH24MI00)", example = "20221214090000", required = true)
+            @RequestParam String FROM_DT,
+            @ApiParam(name = "TO_DT", value = "조회종료시각(YYYYMMDDHH24MI59)", example = "20221214235959", required = true)
+            @RequestParam String TO_DT) {
+        return this.service.findAllListDataByDateRange(FROM_DT, TO_DT);
+    }
+
 }

+ 3 - 0
src/main/java/com/its/op/dao/repository/its/rse/TbRseCtlrRepository.java

@@ -20,6 +20,9 @@ public interface TbRseCtlrRepository extends JpaRepository<TbRseCtlr, Long>, Jpa
     @Query("select p from TbRseCtlr p")
     List<TbRseCtlr> findAllList();
 
+    @Query("select p from TbRseCtlr p order by p.rseCtlrNmbr")
+    List<TbRseCtlr> findAllListOrder();
+
     @Query(value = "SELECT NVL(MAX(RSE_CTLR_NMBR), 1000) + 1 AS NEWID FROM TB_RSE_CTLR", nativeQuery = true)
     Long getNewNmbr();
 

+ 2 - 2
src/main/java/com/its/op/dto/its/rse/RseOdStatDto.java

@@ -27,10 +27,10 @@ public class RseOdStatDto implements Serializable {
 
     @ApiModelProperty("출발 교통량합")
     @JsonProperty("depart_tfvl")
-    private Long DEPART_TFVL;
+    private Integer DEPART_TFVL;
 
     @ApiModelProperty("도착 교통량합")
     @JsonProperty("arrival_tfvl")
-    private Long ARRIVAL_TFVL;
+    private Integer ARRIVAL_TFVL;
 
 }

+ 83 - 0
src/main/java/com/its/op/dto/its/rse/RseOdStatListDataDto.java

@@ -0,0 +1,83 @@
+package com.its.op.dto.its.rse;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.its.op.entity.its.rse.TbRseCtlr;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Builder;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.*;
+
+/**
+ * RSE OD 교통량 시간 통계 DTO Class
+ */
+@Data
+@Builder
+@ApiModel("RseOdStatListDataDto(RSE OD 교통량 시간 통계)")
+public class RseOdStatListDataDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("RSE 제어기 번호")
+    @JsonProperty("rse_ctlr_nmbr")
+    private Long RSE_CTLR_NMBR;
+
+    @ApiModelProperty("RSE 명")
+    @JsonProperty("rse_nm")
+    private String RSE_NM;
+
+    @ApiModelProperty("TO RSE 교통량정보 목록")
+    @JsonProperty("lists")
+    private List<RseOdTraf> lists;
+
+    @JsonIgnore
+    private Map<Long, RseOdTraf> map;
+
+    public void mapToList() {
+        //this.lists = new ArrayList<>(this.map.values());
+        if (this.lists == null) {
+            this.lists = new ArrayList<>();
+        }
+
+        // 키로 정렬
+        Object[] keys = this.map.keySet().toArray();
+        Arrays.sort(keys);
+        for (Long key : this.map.keySet()) {
+            this.lists.add(this.map.get(key));
+        }
+    }
+
+    public static RseOdStatListDataDto makeRseList(Long RSE_CTLR_NMBR, String RSE_NM, List<TbRseCtlr> lists) {
+        RseOdStatListDataDto dto = RseOdStatListDataDto.builder()
+                .RSE_CTLR_NMBR(RSE_CTLR_NMBR)
+                .RSE_NM(RSE_NM)
+                .build();
+        dto.setLists(new ArrayList<>());
+        dto.setMap(new HashMap<>());
+        lists.forEach(obj -> {
+            dto.getMap().put(obj.getRseCtlrNmbr(), RseOdTraf.builder()
+                    .RSE_CTLR_NMBR(obj.getRseCtlrNmbr())
+                    .RSE_NM(obj.getRseNm())
+                    .TFVL(0)
+                    .build());
+        });
+        return dto;
+    }
+    @Data
+    @Builder
+    public static class RseOdTraf {
+        @ApiModelProperty("RSE 제어기 번호")
+        @JsonProperty("rse_ctlr_nmbr")
+        private Long RSE_CTLR_NMBR;
+
+        @ApiModelProperty("RSE 명")
+        @JsonProperty("rse_nm")
+        private String RSE_NM;
+
+        @ApiModelProperty("교통량합")
+        @JsonProperty("tfvl")
+        private Integer TFVL;
+    }
+}

+ 1 - 1
src/main/java/com/its/op/dto/its/rse/RseOdStatListDto.java

@@ -27,6 +27,6 @@ public class RseOdStatListDto implements Serializable {
 
     @ApiModelProperty("교통량합")
     @JsonProperty("tfvl")
-    private Long TFVL;
+    private Integer TFVL;
 
 }

+ 53 - 0
src/main/java/com/its/op/service/its/rse/TbRseOdStatHhService.java

@@ -1,8 +1,11 @@
 package com.its.op.service.its.rse;
 
 import com.its.op.dao.mapper.its.rse.RseOdStatHhMapper;
+import com.its.op.dao.repository.its.rse.TbRseCtlrRepository;
 import com.its.op.dto.its.rse.RseOdStatDto;
+import com.its.op.dto.its.rse.RseOdStatListDataDto;
 import com.its.op.dto.its.rse.RseOdStatListDto;
+import com.its.op.entity.its.rse.TbRseCtlr;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -15,6 +18,7 @@ import java.util.*;
 @Service
 public class TbRseOdStatHhService {
 
+    private final TbRseCtlrRepository repo;
     private final RseOdStatHhMapper mapper;
 
     /**
@@ -44,4 +48,53 @@ public class TbRseOdStatHhService {
         param.put("TO_DT", toDt);
         return this.mapper.findAllListByDateRange(param);
     }
+
+    /**
+     * RSE OD 교통량 통계(출발 RSE, 도착 RSE 교통량 - 목록으로 만들어서 리턴)
+     * @param fromDt
+     * @param toDt
+     * @return
+     */
+    @Transactional(readOnly = true)
+    public List<RseOdStatListDataDto> findAllListDataByDateRange(String fromDt, String toDt) {
+        List<RseOdStatListDataDto> result = new ArrayList<>();
+        Map<Long, RseOdStatListDataDto> resultMap = new HashMap<>();
+        List<TbRseCtlr> lists = this.repo.findAllListOrder();
+        log.info("{}", lists);
+
+        lists.forEach(obj -> {
+            RseOdStatListDataDto dto = RseOdStatListDataDto.makeRseList(obj.getRseCtlrNmbr(), obj.getRseNm(), lists);
+            resultMap.put(obj.getRseCtlrNmbr(), dto);
+        });
+
+        Map<String, String> param = new HashMap<>();
+        param.put("FROM_DT", fromDt);
+        param.put("TO_DT", toDt);
+        List<RseOdStatListDto> data = this.mapper.findAllListByDateRange(param);
+        data.forEach(obj -> {
+            RseOdStatListDataDto dto = resultMap.get(obj.getF_RSE_CTLR_NMBR());
+            if (dto != null) {
+                RseOdStatListDataDto.RseOdTraf vo = dto.getMap().get(obj.getT_RSE_CTLR_NMBR());
+                if (vo != null) {
+                    vo.setTFVL(obj.getTFVL());
+                }
+            }
+        });
+
+        for (Long key : resultMap.keySet()) {
+            // 맵을 리스트로 변환
+            resultMap.get(key).mapToList();
+        }
+
+        // 키로 정렬
+        Object[] keys = resultMap.keySet().toArray();
+        Arrays.sort(keys);
+        for (Long key : resultMap.keySet()) {
+            result.add(resultMap.get(key));
+        }
+
+//        List<RseOdStatListDataDto> result = resultMap.values();
+//        Collections.sort(result);
+        return result;
+    }
 }