lkd9125(이경도)
1 week ago
5 changed files with 193 additions and 13 deletions
@ -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<Long> yearTemplate = Expressions.numberTemplate(Long.class, "COUNT(CASE WHEN YEAR({0}) = {1} THEN 1 END)", qDosFltPlanBas.applyDt, year); |
||||
NumberTemplate<Long> 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<Long> 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<CptStatRS.CptStat> cptStatData(CptStatRQ rq) { |
||||
|
||||
QDosFltPlanArea qDosFltPlanArea = QDosFltPlanArea.dosFltPlanArea; |
||||
QDosFltPlanBas qDosFltPlanBas = QDosFltPlanBas.dosFltPlanBas; |
||||
|
||||
StatisticsDosService.CompetentAgency[] constants = StatisticsDosService.CompetentAgency.values(); |
||||
|
||||
List<CptStatRS.CptStat> 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<CptStatRS.DateCountModel> 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<CptStatRS.CoordinateModel> 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; |
||||
} |
||||
|
||||
} |
Loading…
Reference in new issue