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); }