From e46a819b4c66e68c81683b1014f82278e57d06d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?lkd9125=28=EC=9D=B4=EA=B2=BD=EB=8F=84=29?= Date: Thu, 12 Sep 2024 18:36:52 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=ED=86=B5=EA=B3=84=20=EC=83=81=EB=8B=A8?= =?UTF-8?q?=20API=20CPT=5FCD=20=EA=B5=AC=EB=B6=84=EC=9E=90=20=EA=B3=84?= =?UTF-8?q?=EC=82=B0=20=EC=B6=94=EA=B0=80,=20=ED=86=B5=EA=B3=84=20?= =?UTF-8?q?=ED=95=98=EB=8B=A8=20CPT=5FCD=20=EC=BB=AC=EB=9F=BC=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../biz/api/bas/dos/model/AllStatDataRS.java | 8 +++ .../biz/api/bas/dos/model/CptStatRS.java | 2 + .../ctr/CtrCntrlQueryRepository.java | 3 +- .../dos/DosFltPlanAreaQueryRepository.java | 61 ++++++++++++++++--- 4 files changed, 66 insertions(+), 8 deletions(-) diff --git a/pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/AllStatDataRS.java b/pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/AllStatDataRS.java index 38e641d5..979bd9ac 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/AllStatDataRS.java +++ b/pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/AllStatDataRS.java @@ -25,4 +25,12 @@ public class AllStatDataRS { private Long day; } + + @Data + public static class CptCountModel{ + private String cptName; + + private Long count; + } + } diff --git a/pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/CptStatRS.java b/pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/CptStatRS.java index e3f84d38..97807758 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/CptStatRS.java +++ b/pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/CptStatRS.java @@ -16,6 +16,8 @@ public class CptStatRS { private String cptName; // 관할청 이름 + private String cptCd; + private List countModel; // 카운트 private List coordinateModels; // 중심좌표 diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java b/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java index 1a9fa43b..056cd475 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java @@ -1361,7 +1361,8 @@ public class CtrCntrlQueryRepository{ .from(qCntrlBasEntity) .leftJoin(qCtrCntrHstry) .on(qCntrlBasEntity.cntrlId.eq(qCtrCntrHstry.cntrlId)) - .where(builder) .orderBy(qCtrCntrHstry.hstrySno.asc()) + .where(builder) + .orderBy(qCtrCntrHstry.hstrySno.asc()) .fetch(); return result; diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/repository/dos/DosFltPlanAreaQueryRepository.java b/pav-server/src/main/java/com/palnet/biz/jpa/repository/dos/DosFltPlanAreaQueryRepository.java index f30ab6d2..554e4d6f 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/repository/dos/DosFltPlanAreaQueryRepository.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/repository/dos/DosFltPlanAreaQueryRepository.java @@ -20,7 +20,10 @@ import org.springframework.stereotype.Repository; import java.time.LocalDate; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; @Repository @Slf4j @@ -35,8 +38,53 @@ public class DosFltPlanAreaQueryRepository { QDosFltPlanArea qDosFltPlanArea = QDosFltPlanArea.dosFltPlanArea; QDosFltPlanBas qDosFltPlanBas = QDosFltPlanBas.dosFltPlanBas; - // TODO :: CPT_CD가 추가 되면 사용할 것, 가장 신청이 많은 항공청 코드를 가져와야함 -// String cptCd = ""; + + + // TODO :: CPT_CD의 데이터가 없음으로 임시 F0002처리 + StringTemplate ifTemplate = Expressions.stringTemplate("CASE WHEN {0} IS NULL THEN 'F0002' ELSE {0} END", qDosFltPlanArea.cptCd); + + Map cptCountModels = query + .select( + Projections.bean( + AllStatDataRS.CptCountModel.class, + ifTemplate.as("cptName"), + qDosFltPlanArea.count().as("count") + ) + ) + .from(qDosFltPlanArea) + .groupBy(qDosFltPlanArea.cptCd) + .fetch() + .stream() + .collect(Collectors.toMap( + AllStatDataRS.CptCountModel::getCptName, + AllStatDataRS.CptCountModel::getCount + )); + + for(Map.Entry entry : cptCountModels.entrySet()){ + + String[] cptCdArray = entry.getKey().split(","); + + if(cptCdArray.length > 1) continue; + + for(String cptCd : cptCdArray){ + Long newCount = cptCountModels.get(cptCd) + entry.getValue(); + cptCountModels.put(cptCd, newCount); + } + } + + // 정렬 + Long max = -1000L; + String cptCd = ""; + + for(Map.Entry entry : cptCountModels.entrySet()){ + Long value = entry.getValue(); + + if(value > max){ + max = value; + cptCd = entry.getKey(); + } + } + Integer year = LocalDate.now().getYear(); Integer month = LocalDate.now().getMonth().getValue(); @@ -46,7 +94,7 @@ public class DosFltPlanAreaQueryRepository { NumberTemplate todayTemplate = Expressions.numberTemplate(Long.class, "COUNT(CASE WHEN DATE({0}) = CURDATE() THEN 1 END)", qDosFltPlanBas.applyDt); BooleanBuilder builder = new BooleanBuilder(); -// builder.and(qDosFltPlanArea.cptCd.eq(cptCd)); + builder.and(qDosFltPlanArea.cptCd.contains(cptCd)); AllStatDataRS.GroupModel groupModel = query .select( @@ -63,7 +111,7 @@ public class DosFltPlanAreaQueryRepository { .on(qDosFltPlanArea.planSno.eq(qDosFltPlanBas.planSno)) .fetchOne(); -// groupModel.setGroupName(cptCd); + groupModel.setGroupName(cptCd); return groupModel; } @@ -80,8 +128,6 @@ public class DosFltPlanAreaQueryRepository { for(StatisticsDosService.CompetentAgency competnetAgency : constants){ - String cptCd = competnetAgency.name(); - String format = this.getFormat(rq.getCategory()); StringTemplate formattedDate = Expressions.stringTemplate("DATE_FORMAT({0},{1})", qDosFltPlanBas.applyDt , format); @@ -124,9 +170,10 @@ public class DosFltPlanAreaQueryRepository { CptStatRS.CptStat cptStatModel = new CptStatRS.CptStat(); cptStatModel.setCptName(competnetAgency.getDesc()); + cptStatModel.setCptCd(competnetAgency.name()); // TODO :: CPT_CD 나오기전 임시 코드 - if(cptCd.equals("F0002")){ + if(competnetAgency.name().equals("F0002")){ cptStatModel.setCountModel(countModel); cptStatModel.setCoordinateModels(coordinateModels); }