Browse Source

비행실적 상단 고정데이터 AP추가

pull/12/head
lkd9125(이경도) 10 months ago
parent
commit
817a00fd04
  1. 23
      pav-server/src/main/java/com/palnet/biz/api/main/statistics/controller/MainStatisticsController.java
  2. 19
      pav-server/src/main/java/com/palnet/biz/api/main/statistics/service/MainStatisticsService.java
  3. 98
      pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java
  4. 6
      pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java
  5. 385
      pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java

23
pav-server/src/main/java/com/palnet/biz/api/main/statistics/controller/MainStatisticsController.java

@ -145,4 +145,27 @@ public class MainStatisticsController {
return ResponseEntity.ok().body(new SuccessResponse<FlightStcsModel>(result));
}
@GetMapping("/flight/result-static")
@ApiOperation(value = "비행실적 상단데이터 통계 [DB전체 통계데이터]")
@Tag(name = "통계 컨트롤러", description = "통계 관련 API")
public ResponseEntity<? extends BasicResponse> fltResultStcs(){
List<FlightStaticStcsModel> result = null;
try {
result = service.getFltResultStaticStcs();
log.warn("result => {}", result);
} catch (Exception e) {
log.error("IGNORE : {}", e);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(new ErrorResponse("Server Error", "-1"));
}
return ResponseEntity.ok().body(new SuccessResponse<List<FlightStaticStcsModel>>(result));
}
}

19
pav-server/src/main/java/com/palnet/biz/api/main/statistics/service/MainStatisticsService.java

@ -7,8 +7,10 @@ import java.util.List;
import org.springframework.stereotype.Service;
import com.palnet.biz.api.main.statistics.model.FlightStaticStcsModel;
import com.palnet.biz.jpa.entity.type.WarnType;
import com.palnet.biz.jpa.repository.ctr.CtrCntrlQueryRepository;
import com.palnet.biz.jpa.repository.ctr.CtrCntrlWarnLogQueryRepository;
import com.palnet.biz.jpa.repository.flt.FltPlanQueryRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -23,6 +25,8 @@ public class MainStatisticsService {
private final CtrCntrlWarnLogQueryRepository ctrCntrlWarnLogQueryRepository;
private final FltPlanQueryRepository fltPlanQueryRepository;
/**
* 파라미터 체크
* 1. 연단위 검색 -> Parameter Null일 경우
@ -209,4 +213,19 @@ public class MainStatisticsService {
return resultList;
}
/**
* 비행실적, 비행계획서 기용, 비행승인이 많이 기체 데이터, 상단 고정 데이터
* @return
*/
public List<FlightStaticStcsModel> getFltResultStaticStcs(){
FlightStaticStcsModel fltResult = fltPlanQueryRepository.getFltResultStaticStcs();
FlightStaticStcsModel fltPlan = fltPlanQueryRepository.getFltPlanStaticStcs();
FlightStaticStcsModel fltPlanAprvn = fltPlanQueryRepository.getFltPlanAprvnStaticStcs();
List<FlightStaticStcsModel> result = Arrays.asList(fltResult,fltPlan, fltPlanAprvn);
return result;
}
}

98
pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java

@ -1881,29 +1881,27 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
return result;
}
private String getFltTimeDay(String idntfNum){
private Long getFltTimeDay(String idntfNum){
QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas;
BooleanBuilder builder = new BooleanBuilder();
builder.and(qCtrCntrlBas.idntfNum.eq(idntfNum));
builder.and(qCtrCntrlBas.createDt.eq(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant()));
return query
return Long.parseLong(query
.select(
Projections.bean(String.class,
Expressions.stringTemplate(
"CONCAT(SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF({0}, {1})))))",
qCtrCntrlBas.cntrlEndDt,
qCtrCntrlBas.cntrlStDt
) // 결과 객체의 프로퍼티 이름을 지정
)
Expressions.stringTemplate(
"CONCAT(SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF({0}, {1})))))",
qCtrCntrlBas.cntrlEndDt,
qCtrCntrlBas.cntrlStDt
) // 결과 객체의 프로퍼티 이름을 지정
)
.from(qCtrCntrlBas)
.where(builder)
.fetchOne();
.fetchOne());
}
private String getFltTimeMonth(String idntfNum){
private Long getFltTimeMonth(String idntfNum){
QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas;
BooleanBuilder builder = new BooleanBuilder();
@ -1911,22 +1909,20 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
builder.and(qCtrCntrlBas.createDt.goe(LocalDate.now().minusMonths(1).atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant()));
builder.and(qCtrCntrlBas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant()));
return query
.select(
Projections.bean(String.class,
Expressions.stringTemplate(
"CONCAT(SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF({0}, {1})))))",
qCtrCntrlBas.cntrlEndDt,
qCtrCntrlBas.cntrlStDt
) // 결과 객체의 프로퍼티 이름을 지정
)
return Long.parseLong(query
.select(
Expressions.stringTemplate(
"CONCAT(SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF({0}, {1})))))",
qCtrCntrlBas.cntrlEndDt,
qCtrCntrlBas.cntrlStDt
) // 결과 객체의 프로퍼티 이름을 지정
)
.from(qCtrCntrlBas)
.where(builder)
.fetchOne();
.fetchOne());
}
private String getFltTimeYear(String idntfNum){
private Long getFltTimeYear(String idntfNum){
QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas;
BooleanBuilder builder = new BooleanBuilder();
@ -1934,19 +1930,17 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
builder.and(qCtrCntrlBas.createDt.goe(LocalDate.now().minusYears(1).atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant()));
builder.and(qCtrCntrlBas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant()));
return query
.select(
Projections.bean(String.class,
return Long.parseLong(query
.select(
Expressions.stringTemplate(
"CONCAT(SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF({0}, {1})))))",
qCtrCntrlBas.cntrlEndDt,
qCtrCntrlBas.cntrlStDt
) // 결과 객체의 프로퍼티 이름을 지정
)
)
.from(qCtrCntrlBas)
.where(builder)
.fetchOne();
.fetchOne());
}
/**
@ -1994,7 +1988,7 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
return result;
}
private String getFltDistanceDay(String idntfNum){
private Double getFltDistanceDay(String idntfNum){
QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas;
BooleanBuilder builder = new BooleanBuilder();
@ -2002,17 +1996,15 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
builder.and(qCtrCntrlBas.createDt.eq(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant()));
return query
.select(
Projections.bean(String.class,
qCtrCntrlBas.ttlDstnc.sum() // 결과 객체의 프로퍼티 이름을 지정
)
.select(
qCtrCntrlBas.ttlDstnc.sum() // 결과 객체의 프로퍼티 이름을 지정
)
.from(qCtrCntrlBas)
.where(builder)
.fetchOne();
}
private String getFltDistanceMonth(String idntfNum){
private Double getFltDistanceMonth(String idntfNum){
QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas;
BooleanBuilder builder = new BooleanBuilder();
@ -2021,17 +2013,16 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
builder.and(qCtrCntrlBas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant()));
return query
.select(
Projections.bean(String.class,
qCtrCntrlBas.ttlDstnc.sum() // 결과 객체의 프로퍼티 이름을 지정
)
.select(
qCtrCntrlBas.ttlDstnc.sum() // 결과 객체의 프로퍼티 이름을 지정
)
.from(qCtrCntrlBas)
.where(builder)
.fetchOne();
}
private String getFltDistanceYear(String idntfNum){
private Double getFltDistanceYear(String idntfNum){
QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas;
BooleanBuilder builder = new BooleanBuilder();
@ -2040,10 +2031,8 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
builder.and(qCtrCntrlBas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant()));
return query
.select(
Projections.bean(String.class,
qCtrCntrlBas.ttlDstnc.sum() // 결과 객체의 프로퍼티 이름을 지정
)
.select(
qCtrCntrlBas.ttlDstnc.sum() // 결과 객체의 프로퍼티 이름을 지정
)
.from(qCtrCntrlBas)
.where(builder)
@ -2093,7 +2082,7 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
return result;
}
private String getFltCountDay(String idntfNum){
private Long getFltCountDay(String idntfNum){
QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas;
BooleanBuilder builder = new BooleanBuilder();
@ -2101,17 +2090,15 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
builder.and(qCtrCntrlBas.createDt.eq(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant()));
return query
.select(
Projections.bean(String.class,
qCtrCntrlBas.cntrlId.count() // 결과 객체의 프로퍼티 이름을 지정
)
.select(
qCtrCntrlBas.cntrlId.count() // 결과 객체의 프로퍼티 이름을 지정
)
.from(qCtrCntrlBas)
.where(builder)
.fetchOne();
}
private String getFltCountMonth(String idntfNum){
private Long getFltCountMonth(String idntfNum){
QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas;
BooleanBuilder builder = new BooleanBuilder();
@ -2120,17 +2107,15 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
builder.and(qCtrCntrlBas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant()));
return query
.select(
Projections.bean(String.class,
qCtrCntrlBas.cntrlId.count() // 결과 객체의 프로퍼티 이름을 지정
)
.select(
qCtrCntrlBas.cntrlId.count() // 결과 객체의 프로퍼티 이름을 지정
)
.from(qCtrCntrlBas)
.where(builder)
.fetchOne();
}
private String getFltCountYear(String idntfNum){
private Long getFltCountYear(String idntfNum){
QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas;
BooleanBuilder builder = new BooleanBuilder();
@ -2139,10 +2124,8 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
builder.and(qCtrCntrlBas.createDt.loe(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant()));
return query
.select(
Projections.bean(String.class,
qCtrCntrlBas.cntrlId.count() // 결과 객체의 프로퍼티 이름을 지정
)
.select(
qCtrCntrlBas.cntrlId.count() // 결과 객체의 프로퍼티 이름을 지정
)
.from(qCtrCntrlBas)
.where(builder)
@ -2436,6 +2419,7 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
return result;
}

6
pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java

@ -64,8 +64,10 @@ public class CtrCntrlWarnLogQueryRepository {
} else {
FlightStaticStcsModel node = new FlightStaticStcsModel();
node.setName("-");
node.setValue("noData");
node.setName("-");
node.setYear("noData");
node.setMonth("noData");
node.setDay("noData");
result = node;
}

385
pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java

@ -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();
}
}
Loading…
Cancel
Save