diff --git a/pav-server/src/main/java/com/palnet/biz/api/bas/dos/controller/StatisticsDosController.java b/pav-server/src/main/java/com/palnet/biz/api/bas/dos/controller/StatisticsDosController.java index e6b5fe97..e51888c8 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/bas/dos/controller/StatisticsDosController.java +++ b/pav-server/src/main/java/com/palnet/biz/api/bas/dos/controller/StatisticsDosController.java @@ -27,11 +27,11 @@ public class StatisticsDosController { } @GetMapping("/table-data") - public ResponseEntity tableData(@RequestParam CptStatRQ rq){ + public ResponseEntity tableData(CptStatRQ rq){ CptStatRS result = statisticsDosService.cptStatData(rq); - return ResponseEntity.ok().body(null); + return ResponseEntity.ok().body(result); } 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 8f4a8b2f..38e641d5 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 @@ -23,5 +23,6 @@ public class AllStatDataRS { private Long month; private Long day; + } } 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 7b60b88f..e3f84d38 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,10 +16,17 @@ public class CptStatRS { private String cptName; // 관할청 이름 - private Long count; // 총 카운트 + private List countModel; // 카운트 private List coordinateModels; // 중심좌표 - + + } + + @Data + public static class DateCountModel{ + private String date; + + private Long count; } @Data diff --git a/pav-server/src/main/java/com/palnet/biz/api/bas/dos/service/StatisticsDosService.java b/pav-server/src/main/java/com/palnet/biz/api/bas/dos/service/StatisticsDosService.java index 3690ad01..055607db 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/bas/dos/service/StatisticsDosService.java +++ b/pav-server/src/main/java/com/palnet/biz/api/bas/dos/service/StatisticsDosService.java @@ -3,6 +3,7 @@ package com.palnet.biz.api.bas.dos.service; import com.palnet.biz.api.bas.dos.model.AllStatDataRS; import com.palnet.biz.api.bas.dos.model.CptStatRQ; import com.palnet.biz.api.bas.dos.model.CptStatRS; +import com.palnet.biz.jpa.repository.dos.DosFltPlanAreaQueryRepository; import com.palnet.biz.jpa.repository.dos.DosFltPlanAreaRepository; import com.palnet.biz.jpa.repository.dos.DosFltPlanBasRepository; import lombok.Getter; @@ -10,6 +11,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.util.List; + @Service @Slf4j @RequiredArgsConstructor @@ -19,10 +22,16 @@ public class StatisticsDosService { private final DosFltPlanAreaRepository dosFltPlanAreaRepository; + private final DosFltPlanAreaQueryRepository dosFltPlanAreaQueryRepository; + public AllStatDataRS allData() { - + + + + AllStatDataRS.GroupModel fullApproval = dosFltPlanAreaQueryRepository.allApplyData(); AllStatDataRS result = new AllStatDataRS(); + result.setFullApproval(fullApproval); return result; } @@ -30,26 +39,29 @@ public class StatisticsDosService { public CptStatRS cptStatData(CptStatRQ rq) { + + List cptList = dosFltPlanAreaQueryRepository.cptStatData(rq); + CptStatRS result = new CptStatRS(); + result.setCptList(cptList); return result; } @Getter @RequiredArgsConstructor - private enum Auth{ - + public enum CompetentAgency{ - F0001("서울지방항공청(항공운항과)"), - F0002("김포항공관리사무소(안전운항과)"), + F0002("김포항공관리사무소"), + F0001("서울지방항공청"), F0003("양양공항출장소"), F0004("원주공항출장소"), - F0005("청주공항출장소"), F0006("군산공항출장소"), - F0007("부산지방항공청(항공운항과)"), - F0008("제주지방항공청(안전운항과)"), - F0009("정석비행장"), + F0007("부산지방항공청"), F0010("울진공항출장소"), + C0001("울산공항출장소"), + C0002("여수공항출장소"), + C0003("무안공항출장소"), ; private final String desc; 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 new file mode 100644 index 00000000..f30ab6d2 --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/jpa/repository/dos/DosFltPlanAreaQueryRepository.java @@ -0,0 +1,160 @@ +package com.palnet.biz.jpa.repository.dos; + +import com.palnet.biz.api.bas.dos.model.AllStatDataRS; +import com.palnet.biz.api.bas.dos.model.CptStatRQ; +import com.palnet.biz.api.bas.dos.model.CptStatRS; +import com.palnet.biz.api.bas.dos.service.StatisticsDosService; +import com.palnet.biz.jpa.entity.QDosFltPlanArea; +import com.palnet.biz.jpa.entity.QDosFltPlanBas; +import com.palnet.comn.code.ErrorCode; +import com.palnet.comn.exception.CustomException; +import com.querydsl.core.BooleanBuilder; +import com.querydsl.core.types.Projections; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.NumberTemplate; +import com.querydsl.core.types.dsl.StringTemplate; +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Repository; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +@Repository +@Slf4j +@RequiredArgsConstructor +public class DosFltPlanAreaQueryRepository { + + private final JPAQueryFactory query; + + + public AllStatDataRS.GroupModel allApplyData() { + + QDosFltPlanArea qDosFltPlanArea = QDosFltPlanArea.dosFltPlanArea; + QDosFltPlanBas qDosFltPlanBas = QDosFltPlanBas.dosFltPlanBas; + + // TODO :: CPT_CD가 추가 되면 사용할 것, 가장 신청이 많은 항공청 코드를 가져와야함 +// String cptCd = ""; + + Integer year = LocalDate.now().getYear(); + Integer month = LocalDate.now().getMonth().getValue(); + + NumberTemplate yearTemplate = Expressions.numberTemplate(Long.class, "COUNT(CASE WHEN YEAR({0}) = {1} THEN 1 END)", qDosFltPlanBas.applyDt, year); + NumberTemplate monthTemplate = Expressions.numberTemplate(Long.class, "COUNT(CASE WHEN YEAR({0}) = {1} AND MONTH({2}) = {3} THEN 1 END)", qDosFltPlanBas.applyDt, year, qDosFltPlanBas.applyDt, month); + 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)); + + AllStatDataRS.GroupModel groupModel = query + .select( + Projections.bean( + AllStatDataRS.GroupModel.class, + qDosFltPlanArea.count().as("all"), + yearTemplate.as("year"), + monthTemplate.as("month"), + todayTemplate.as("day") + ) + ) + .from(qDosFltPlanArea) + .leftJoin(qDosFltPlanBas) + .on(qDosFltPlanArea.planSno.eq(qDosFltPlanBas.planSno)) + .fetchOne(); + +// groupModel.setGroupName(cptCd); + + return groupModel; + } + + + public List cptStatData(CptStatRQ rq) { + + QDosFltPlanArea qDosFltPlanArea = QDosFltPlanArea.dosFltPlanArea; + QDosFltPlanBas qDosFltPlanBas = QDosFltPlanBas.dosFltPlanBas; + + StatisticsDosService.CompetentAgency[] constants = StatisticsDosService.CompetentAgency.values(); + + List cptStatList = new ArrayList<>(); + + 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); + + BooleanBuilder builder = new BooleanBuilder(); + + if(!rq.getCategory().equals("year")){ + builder.and(qDosFltPlanBas.applyDt.goe(rq.getStartDt())); + builder.and(qDosFltPlanBas.applyDt.loe(rq.getEndDt())); + } + + List countModel = query + .select( + Projections.bean( + CptStatRS.DateCountModel.class, + formattedDate.as("date"), + qDosFltPlanArea.count().as("count") + ) + ) + .from(qDosFltPlanArea) + .leftJoin(qDosFltPlanBas) + .on(qDosFltPlanArea.planSno.eq(qDosFltPlanBas.planSno)) + .where(builder) + .groupBy(formattedDate) + .fetch(); + + List coordinateModels = query + .select( + Projections.bean( + CptStatRS.CoordinateModel.class, + qDosFltPlanArea.lat.as("lat"), + qDosFltPlanArea.lon.as("lon") + ) + ) + .from(qDosFltPlanArea) + .leftJoin(qDosFltPlanBas) + .on(qDosFltPlanArea.planSno.eq(qDosFltPlanBas.planSno)) + .where(builder) + .fetch(); + + + CptStatRS.CptStat cptStatModel = new CptStatRS.CptStat(); + cptStatModel.setCptName(competnetAgency.getDesc()); + + // TODO :: CPT_CD 나오기전 임시 코드 + if(cptCd.equals("F0002")){ + cptStatModel.setCountModel(countModel); + cptStatModel.setCoordinateModels(coordinateModels); + } + + cptStatList.add(cptStatModel); + } + + return cptStatList; + } + + private String getFormat(String category){ + String format = null; + + switch (category){ + case "year": + format = "%Y"; + break; + case "month": + format = "%Y-%m"; + break; + case "day": + format = "%Y-%m-%d"; + break; + default: + throw new CustomException(ErrorCode.NON_VALID_PARAMETER); + } + + return format; + } + +}