|
|
|
@ -1,10 +1,50 @@
|
|
|
|
|
package com.palnet.biz.jpa.repository.flt; |
|
|
|
|
|
|
|
|
|
import com.palnet.biz.api.bas.flight.model.*; |
|
|
|
|
import java.time.Duration; |
|
|
|
|
import java.time.Instant; |
|
|
|
|
import java.time.LocalDate; |
|
|
|
|
import java.time.ZoneId; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.Optional; |
|
|
|
|
|
|
|
|
|
import org.springframework.cache.annotation.Cacheable; |
|
|
|
|
import org.springframework.data.domain.Page; |
|
|
|
|
import org.springframework.data.domain.PageImpl; |
|
|
|
|
import org.springframework.data.domain.Pageable; |
|
|
|
|
import org.springframework.stereotype.Repository; |
|
|
|
|
import org.springframework.util.StringUtils; |
|
|
|
|
|
|
|
|
|
import com.palnet.biz.api.bas.flight.model.BasFlightPlanArcrftModel; |
|
|
|
|
import com.palnet.biz.api.bas.flight.model.BasFlightPlanAreaCoordRq; |
|
|
|
|
import com.palnet.biz.api.bas.flight.model.BasFlightPlanAreaModel; |
|
|
|
|
import com.palnet.biz.api.bas.flight.model.BasFlightPlanListRq; |
|
|
|
|
import com.palnet.biz.api.bas.flight.model.BasFlightPlanModel; |
|
|
|
|
import com.palnet.biz.api.bas.flight.model.BasFlightPlanPilotModel; |
|
|
|
|
import com.palnet.biz.api.bas.flight.model.BasFlightScheduleRs; |
|
|
|
|
import com.palnet.biz.api.comn.file.service.ComnFileService; |
|
|
|
|
import com.palnet.biz.api.main.dash.model.MainDashStcsModel; |
|
|
|
|
import com.palnet.biz.jpa.entity.*; |
|
|
|
|
import com.palnet.biz.jpa.model.*; |
|
|
|
|
import com.palnet.biz.api.main.statistics.model.FlightStaticStcsModel; |
|
|
|
|
import com.palnet.biz.jpa.entity.FltPlanBas; |
|
|
|
|
import com.palnet.biz.jpa.entity.QComArcrftBas; |
|
|
|
|
import com.palnet.biz.jpa.entity.QComFileBas; |
|
|
|
|
import com.palnet.biz.jpa.entity.QComIdntfBas; |
|
|
|
|
import com.palnet.biz.jpa.entity.QCtrCntrlBas; |
|
|
|
|
import com.palnet.biz.jpa.entity.QCtrCntrlHstryArea; |
|
|
|
|
import com.palnet.biz.jpa.entity.QFltPlanArcrft; |
|
|
|
|
import com.palnet.biz.jpa.entity.QFltPlanArea; |
|
|
|
|
import com.palnet.biz.jpa.entity.QFltPlanAreaCoord; |
|
|
|
|
import com.palnet.biz.jpa.entity.QFltPlanBas; |
|
|
|
|
import com.palnet.biz.jpa.entity.QFltPlanCtrCntrlRel; |
|
|
|
|
import com.palnet.biz.jpa.entity.QFltPlanPilot; |
|
|
|
|
import com.palnet.biz.jpa.entity.QPtyCstmrDtl; |
|
|
|
|
import com.palnet.biz.jpa.entity.QPtyCstmrGroup; |
|
|
|
|
import com.palnet.biz.jpa.entity.QPtyGroupBas; |
|
|
|
|
import com.palnet.biz.jpa.model.LaancAprvSearchDto; |
|
|
|
|
import com.palnet.biz.jpa.model.LaancPlanArcrftDto; |
|
|
|
|
import com.palnet.biz.jpa.model.LaancPlanAreaDto; |
|
|
|
|
import com.palnet.biz.jpa.model.LaancPlanDto; |
|
|
|
|
import com.palnet.biz.jpa.model.LaancPlanPilotDto; |
|
|
|
|
import com.palnet.biz.jpa.model.LaancPlanareaCoordDto; |
|
|
|
|
import com.palnet.comn.utils.DateUtils; |
|
|
|
|
import com.palnet.comn.utils.InstantUtils; |
|
|
|
|
import com.querydsl.core.BooleanBuilder; |
|
|
|
@ -19,19 +59,9 @@ import com.querydsl.core.types.dsl.StringTemplate;
|
|
|
|
|
import com.querydsl.jpa.JPAExpressions; |
|
|
|
|
import com.querydsl.jpa.impl.JPAQuery; |
|
|
|
|
import com.querydsl.jpa.impl.JPAQueryFactory; |
|
|
|
|
|
|
|
|
|
import lombok.RequiredArgsConstructor; |
|
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
|
import org.springframework.cache.annotation.Cacheable; |
|
|
|
|
import org.springframework.data.domain.Page; |
|
|
|
|
import org.springframework.data.domain.PageImpl; |
|
|
|
|
import org.springframework.data.domain.Pageable; |
|
|
|
|
import org.springframework.stereotype.Repository; |
|
|
|
|
import org.springframework.util.StringUtils; |
|
|
|
|
|
|
|
|
|
import java.time.Duration; |
|
|
|
|
import java.time.Instant; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.Optional; |
|
|
|
|
|
|
|
|
|
@Slf4j |
|
|
|
|
@Repository |
|
|
|
@ -1147,4 +1177,331 @@ public class FltPlanQueryRepository {
|
|
|
|
|
return result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 비행실적 데이터, top 1 |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
public FlightStaticStcsModel getFltResultStaticStcs(){ |
|
|
|
|
FlightStaticStcsModel result = new FlightStaticStcsModel(); |
|
|
|
|
|
|
|
|
|
QFltPlanCtrCntrlRel bas = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; |
|
|
|
|
|
|
|
|
|
BooleanBuilder builder = new BooleanBuilder(); |
|
|
|
|
builder.and(bas.planSno.isNotNull()); |
|
|
|
|
|
|
|
|
|
List<FlightStaticStcsModel> queryResult = query |
|
|
|
|
.select( |
|
|
|
|
Projections.bean(FlightStaticStcsModel.class, |
|
|
|
|
bas.idntfNum.as("name") // 결과 객체의 프로퍼티 이름을 지정
|
|
|
|
|
) |
|
|
|
|
) |
|
|
|
|
.from(bas) |
|
|
|
|
.where(builder) |
|
|
|
|
.groupBy(bas.idntfNum) |
|
|
|
|
.orderBy(bas.planSno.countDistinct().desc()) |
|
|
|
|
.limit(1) |
|
|
|
|
.fetch(); |
|
|
|
|
|
|
|
|
|
if(queryResult.size() > 0){ |
|
|
|
|
result = queryResult.get(0); |
|
|
|
|
if(result.getName().equals("")) result.setName(" "); |
|
|
|
|
|
|
|
|
|
String idntfNum = result.getName(); |
|
|
|
|
|
|
|
|
|
result.setYear(getFltResultYear(idntfNum)); |
|
|
|
|
result.setMonth(getFltResultMonth(idntfNum)); |
|
|
|
|
result.setDay(getFltResultDay(idntfNum)); |
|
|
|
|
} else { |
|
|
|
|
FlightStaticStcsModel node = new FlightStaticStcsModel(); |
|
|
|
|
|
|
|
|
|
node.setName("-"); |
|
|
|
|
node.setYear("NoData"); |
|
|
|
|
node.setMonth("NoData"); |
|
|
|
|
node.setDay("NoData"); |
|
|
|
|
|
|
|
|
|
return node; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private Long getFltResultDay(String idntfNum){ |
|
|
|
|
QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; |
|
|
|
|
QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; |
|
|
|
|
|
|
|
|
|
BooleanBuilder builder = new BooleanBuilder(); |
|
|
|
|
builder.and(qFltPlanCtrCntrlRel.idntfNum.eq(idntfNum)); |
|
|
|
|
builder.and(qFltPlanBas.createDt.eq(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); |
|
|
|
|
builder.and(qFltPlanCtrCntrlRel.planSno.isNotNull()); |
|
|
|
|
|
|
|
|
|
return query |
|
|
|
|
.select( |
|
|
|
|
qFltPlanCtrCntrlRel.planSno.countDistinct() // 결과 객체의 프로퍼티 이름을 지정
|
|
|
|
|
) |
|
|
|
|
.from(qFltPlanCtrCntrlRel) |
|
|
|
|
.leftJoin(qFltPlanBas) |
|
|
|
|
.on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) |
|
|
|
|
.where(builder) |
|
|
|
|
.fetchOne(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private Long getFltResultMonth(String idntfNum){ |
|
|
|
|
QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; |
|
|
|
|
QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; |
|
|
|
|
|
|
|
|
|
BooleanBuilder builder = new BooleanBuilder(); |
|
|
|
|
builder.and(qFltPlanCtrCntrlRel.idntfNum.eq(idntfNum)); |
|
|
|
|
builder.and(qFltPlanCtrCntrlRel.planSno.isNotNull()); |
|
|
|
|
builder.and(qFltPlanBas.createDt.goe(LocalDate.now().minusMonths(1).atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); |
|
|
|
|
builder.and(qFltPlanBas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); |
|
|
|
|
|
|
|
|
|
return query |
|
|
|
|
.select( |
|
|
|
|
qFltPlanCtrCntrlRel.planSno.countDistinct() // 결과 객체의 프로퍼티 이름을 지정
|
|
|
|
|
) |
|
|
|
|
.from(qFltPlanCtrCntrlRel) |
|
|
|
|
.leftJoin(qFltPlanBas) |
|
|
|
|
.on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) |
|
|
|
|
.where(builder) |
|
|
|
|
.fetchOne(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private Long getFltResultYear(String idntfNum){ |
|
|
|
|
QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; |
|
|
|
|
QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; |
|
|
|
|
|
|
|
|
|
BooleanBuilder builder = new BooleanBuilder(); |
|
|
|
|
builder.and(qFltPlanCtrCntrlRel.idntfNum.eq(idntfNum)); |
|
|
|
|
builder.and(qFltPlanCtrCntrlRel.planSno.isNotNull()); |
|
|
|
|
builder.and(qFltPlanBas.createDt.goe(LocalDate.now().minusYears(1).atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); |
|
|
|
|
builder.and(qFltPlanBas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); |
|
|
|
|
|
|
|
|
|
return query |
|
|
|
|
.select( |
|
|
|
|
qFltPlanCtrCntrlRel.planSno.countDistinct() // 결과 객체의 프로퍼티 이름을 지정
|
|
|
|
|
) |
|
|
|
|
.from(qFltPlanCtrCntrlRel) |
|
|
|
|
.leftJoin(qFltPlanBas) |
|
|
|
|
.on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) |
|
|
|
|
.where(builder) |
|
|
|
|
.fetchOne(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 비행계획에 많이 기용된 기체 데이터, top 1 |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
public FlightStaticStcsModel getFltPlanStaticStcs(){ |
|
|
|
|
FlightStaticStcsModel result = new FlightStaticStcsModel(); |
|
|
|
|
|
|
|
|
|
QFltPlanArcrft bas = QFltPlanArcrft.fltPlanArcrft; |
|
|
|
|
|
|
|
|
|
List<FlightStaticStcsModel> queryResult = query |
|
|
|
|
.select( |
|
|
|
|
Projections.bean(FlightStaticStcsModel.class, |
|
|
|
|
bas.idntfNum.as("name") // 결과 객체의 프로퍼티 이름을 지정
|
|
|
|
|
) |
|
|
|
|
) |
|
|
|
|
.from(bas) |
|
|
|
|
.groupBy(bas.idntfNum) |
|
|
|
|
.orderBy(bas.planSno.count().desc()) |
|
|
|
|
.limit(1) |
|
|
|
|
.fetch(); |
|
|
|
|
|
|
|
|
|
if(queryResult.size() > 0){ |
|
|
|
|
result = queryResult.get(0); |
|
|
|
|
if(result.getName().equals("")) result.setName(" "); |
|
|
|
|
|
|
|
|
|
String idntfNum = result.getName(); |
|
|
|
|
|
|
|
|
|
result.setYear(getFltPlanYear(idntfNum)); |
|
|
|
|
result.setMonth(getFltPlanMonth(idntfNum)); |
|
|
|
|
result.setDay(getFltPlanDay(idntfNum)); |
|
|
|
|
} else { |
|
|
|
|
FlightStaticStcsModel node = new FlightStaticStcsModel(); |
|
|
|
|
|
|
|
|
|
node.setName("-"); |
|
|
|
|
node.setYear("NoData"); |
|
|
|
|
node.setMonth("NoData"); |
|
|
|
|
node.setDay("NoData"); |
|
|
|
|
|
|
|
|
|
return node; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private Long getFltPlanDay(String idntfNum){ |
|
|
|
|
QFltPlanArcrft bas = QFltPlanArcrft.fltPlanArcrft; |
|
|
|
|
|
|
|
|
|
BooleanBuilder builder = new BooleanBuilder(); |
|
|
|
|
builder.and(bas.idntfNum.eq(idntfNum.trim())); |
|
|
|
|
builder.and(bas.createDt.eq(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); |
|
|
|
|
|
|
|
|
|
return query |
|
|
|
|
.select( |
|
|
|
|
bas.planSno.count() // 결과 객체의 프로퍼티 이름을 지정
|
|
|
|
|
) |
|
|
|
|
.from(bas) |
|
|
|
|
.where(builder) |
|
|
|
|
.fetchOne(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private Long getFltPlanMonth(String idntfNum){ |
|
|
|
|
QFltPlanArcrft bas = QFltPlanArcrft.fltPlanArcrft; |
|
|
|
|
|
|
|
|
|
BooleanBuilder builder = new BooleanBuilder(); |
|
|
|
|
builder.and(bas.idntfNum.eq(idntfNum.trim())); |
|
|
|
|
builder.and(bas.createDt.goe(LocalDate.now().minusMonths(1).atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); |
|
|
|
|
builder.and(bas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); |
|
|
|
|
|
|
|
|
|
return query |
|
|
|
|
.select( |
|
|
|
|
bas.planSno.count() // 결과 객체의 프로퍼티 이름을 지정
|
|
|
|
|
) |
|
|
|
|
.from(bas) |
|
|
|
|
.where(builder) |
|
|
|
|
.fetchOne(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private Long getFltPlanYear(String idntfNum){ |
|
|
|
|
QFltPlanArcrft bas = QFltPlanArcrft.fltPlanArcrft; |
|
|
|
|
|
|
|
|
|
BooleanBuilder builder = new BooleanBuilder(); |
|
|
|
|
builder.and(bas.idntfNum.eq(idntfNum.trim())); |
|
|
|
|
builder.and(bas.createDt.goe(LocalDate.now().minusYears(1).atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); |
|
|
|
|
builder.and(bas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); |
|
|
|
|
|
|
|
|
|
return query |
|
|
|
|
.select( |
|
|
|
|
bas.planSno.count() |
|
|
|
|
) |
|
|
|
|
.from(bas) |
|
|
|
|
.where(builder) |
|
|
|
|
.fetchOne(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 비행실적 많은 기체 데이터, top 1 |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
public FlightStaticStcsModel getFltPlanAprvnStaticStcs(){ |
|
|
|
|
FlightStaticStcsModel result = new FlightStaticStcsModel(); |
|
|
|
|
|
|
|
|
|
QFltPlanArcrft qFltPlanArcrft = QFltPlanArcrft.fltPlanArcrft; |
|
|
|
|
QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; |
|
|
|
|
|
|
|
|
|
BooleanBuilder builder = new BooleanBuilder(); |
|
|
|
|
builder.and(qFltPlanBas.aprvlYn.eq("Y")); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<FlightStaticStcsModel> queryResult = query |
|
|
|
|
.select( |
|
|
|
|
Projections.bean(FlightStaticStcsModel.class, |
|
|
|
|
qFltPlanArcrft.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정
|
|
|
|
|
qFltPlanArcrft.planSno.count().as("value") // 결과 객체의 프로퍼티 이름을 지정
|
|
|
|
|
) |
|
|
|
|
) |
|
|
|
|
.from(qFltPlanArcrft) |
|
|
|
|
.leftJoin(qFltPlanBas) |
|
|
|
|
.on(qFltPlanArcrft.planSno.eq(qFltPlanBas.planSno)) |
|
|
|
|
.where(builder) |
|
|
|
|
.groupBy(qFltPlanArcrft.idntfNum) |
|
|
|
|
.orderBy(qFltPlanArcrft.planSno.count().desc()) |
|
|
|
|
.limit(1) |
|
|
|
|
.fetch(); |
|
|
|
|
|
|
|
|
|
if(queryResult.size() > 0){ |
|
|
|
|
result = queryResult.get(0); |
|
|
|
|
if(result.getName().equals("")) result.setName(" "); |
|
|
|
|
String idntfNum = result.getName(); |
|
|
|
|
|
|
|
|
|
result.setYear(getFltPlanAprvnYear(idntfNum)); |
|
|
|
|
result.setMonth(getFltPlanAprvnMonth(idntfNum)); |
|
|
|
|
result.setDay(getFltPlanAprvnDay(idntfNum)); |
|
|
|
|
} else { |
|
|
|
|
FlightStaticStcsModel node = new FlightStaticStcsModel(); |
|
|
|
|
|
|
|
|
|
node.setName("-"); |
|
|
|
|
node.setYear("NoData"); |
|
|
|
|
node.setMonth("NoData"); |
|
|
|
|
node.setDay("NoData"); |
|
|
|
|
|
|
|
|
|
return node; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private Long getFltPlanAprvnDay(String idntfNum){ |
|
|
|
|
QFltPlanArcrft qFltPlanArcrft = QFltPlanArcrft.fltPlanArcrft; |
|
|
|
|
QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; |
|
|
|
|
|
|
|
|
|
BooleanBuilder builder = new BooleanBuilder(); |
|
|
|
|
builder.and(qFltPlanArcrft.idntfNum.eq(idntfNum)); |
|
|
|
|
builder.and(qFltPlanBas.aprvlYn.eq("Y")); |
|
|
|
|
builder.and(qFltPlanBas.createDt.eq(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); |
|
|
|
|
|
|
|
|
|
return query |
|
|
|
|
.select( |
|
|
|
|
qFltPlanArcrft.planSno.count() // 결과 객체의 프로퍼티 이름을 지정
|
|
|
|
|
) |
|
|
|
|
.from(qFltPlanArcrft) |
|
|
|
|
.leftJoin(qFltPlanBas) |
|
|
|
|
.on(qFltPlanArcrft.planSno.eq(qFltPlanBas.planSno)) |
|
|
|
|
.where(builder) |
|
|
|
|
.fetchOne(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private Long getFltPlanAprvnMonth(String idntfNum){ |
|
|
|
|
|
|
|
|
|
QFltPlanArcrft qFltPlanArcrft = QFltPlanArcrft.fltPlanArcrft; |
|
|
|
|
QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; |
|
|
|
|
|
|
|
|
|
BooleanBuilder builder = new BooleanBuilder(); |
|
|
|
|
builder.and(qFltPlanArcrft.idntfNum.eq(idntfNum)); |
|
|
|
|
builder.and(qFltPlanBas.aprvlYn.eq("Y")); |
|
|
|
|
builder.and(qFltPlanBas.createDt.goe(LocalDate.now().minusMonths(1).atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); |
|
|
|
|
builder.and(qFltPlanBas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); |
|
|
|
|
|
|
|
|
|
return query |
|
|
|
|
.select( |
|
|
|
|
qFltPlanArcrft.planSno.count() // 결과 객체의 프로퍼티 이름을 지정
|
|
|
|
|
) |
|
|
|
|
.from(qFltPlanArcrft) |
|
|
|
|
.leftJoin(qFltPlanBas) |
|
|
|
|
.on(qFltPlanArcrft.planSno.eq(qFltPlanBas.planSno)) |
|
|
|
|
.where(builder) |
|
|
|
|
.fetchOne(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private Long getFltPlanAprvnYear(String idntfNum){ |
|
|
|
|
QFltPlanArcrft qFltPlanArcrft = QFltPlanArcrft.fltPlanArcrft; |
|
|
|
|
QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; |
|
|
|
|
|
|
|
|
|
BooleanBuilder builder = new BooleanBuilder(); |
|
|
|
|
builder.and(qFltPlanArcrft.idntfNum.eq(idntfNum)); |
|
|
|
|
builder.and(qFltPlanBas.aprvlYn.eq("Y")); |
|
|
|
|
builder.and(qFltPlanBas.createDt.goe(LocalDate.now().minusYears(1).atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); |
|
|
|
|
builder.and(qFltPlanBas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); |
|
|
|
|
|
|
|
|
|
return query |
|
|
|
|
.select( |
|
|
|
|
qFltPlanArcrft.planSno.count() // 결과 객체의 프로퍼티 이름을 지정
|
|
|
|
|
) |
|
|
|
|
.from(qFltPlanArcrft) |
|
|
|
|
.leftJoin(qFltPlanBas) |
|
|
|
|
.on(qFltPlanArcrft.planSno.eq(qFltPlanBas.planSno)) |
|
|
|
|
.where(builder) |
|
|
|
|
.fetchOne(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |