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