|
|
|
@ -2,13 +2,14 @@ package com.palnet.biz.jpa.repository.ctr;
|
|
|
|
|
|
|
|
|
|
import java.time.Duration; |
|
|
|
|
import java.time.Instant; |
|
|
|
|
import java.time.LocalDate; |
|
|
|
|
import java.time.ZoneId; |
|
|
|
|
import java.time.ZoneOffset; |
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
import java.util.Calendar; |
|
|
|
|
import java.util.Date; |
|
|
|
|
import java.util.List; |
|
|
|
|
|
|
|
|
|
import javax.persistence.criteria.Expression; |
|
|
|
|
|
|
|
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
|
import org.springframework.cache.annotation.Cacheable; |
|
|
|
@ -28,8 +29,8 @@ import com.palnet.biz.api.ctr.cntrl.model.CtrCntrlDtlModel;
|
|
|
|
|
import com.palnet.biz.api.ctr.cntrl.model.CtrCntrlEndModel; |
|
|
|
|
import com.palnet.biz.api.ctr.cntrl.model.CtrCntrlGroupArcrftModel; |
|
|
|
|
import com.palnet.biz.api.ctr.cntrl.model.CtrCntrlGroupModel; |
|
|
|
|
import com.palnet.biz.api.main.statistics.model.FlightStaticStcsModel; |
|
|
|
|
import com.palnet.biz.api.main.dash.model.MainDashStcsModel; |
|
|
|
|
import com.palnet.biz.api.main.statistics.model.FlightStaticStcsModel; |
|
|
|
|
import com.palnet.biz.jpa.entity.ComArcrftBas; |
|
|
|
|
import com.palnet.biz.jpa.entity.ComIdntfBas; |
|
|
|
|
import com.palnet.biz.jpa.entity.CtrCntrlHstry; |
|
|
|
@ -57,7 +58,6 @@ import com.querydsl.core.types.dsl.Expressions;
|
|
|
|
|
import com.querydsl.core.types.dsl.StringTemplate; |
|
|
|
|
import com.querydsl.jpa.JPAExpressions; |
|
|
|
|
import com.querydsl.jpa.impl.JPAQueryFactory; |
|
|
|
|
import com.querydsl.sql.SQLExpressions; |
|
|
|
|
|
|
|
|
|
import lombok.RequiredArgsConstructor; |
|
|
|
|
import lombok.extern.log4j.Log4j2; |
|
|
|
@ -1859,10 +1859,22 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
|
|
|
|
|
|
|
|
|
|
if(queryResult.size() > 0){ |
|
|
|
|
result = queryResult.get(0); |
|
|
|
|
|
|
|
|
|
String idntfNum = result.getName(); |
|
|
|
|
|
|
|
|
|
result.setDay(getFltTimeDay(idntfNum)); |
|
|
|
|
result.setYear(getFltTimeYear(idntfNum)); |
|
|
|
|
result.setMonth(getFltTimeMonth(idntfNum)); |
|
|
|
|
|
|
|
|
|
log.warn("a => {}", result); |
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
FlightStaticStcsModel node = new FlightStaticStcsModel(); |
|
|
|
|
node.setName("-"); |
|
|
|
|
node.setValue("noData"); |
|
|
|
|
node.setName("-"); |
|
|
|
|
node.setYear("noData"); |
|
|
|
|
node.setMonth("noData"); |
|
|
|
|
node.setDay("noData"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
result = node; |
|
|
|
|
} |
|
|
|
@ -1870,6 +1882,74 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
|
|
|
|
|
return result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private String 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 |
|
|
|
|
.select( |
|
|
|
|
Projections.bean(String.class, |
|
|
|
|
Expressions.stringTemplate( |
|
|
|
|
"CONCAT(SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF({0}, {1})))))", |
|
|
|
|
qCtrCntrlBas.cntrlEndDt, |
|
|
|
|
qCtrCntrlBas.cntrlStDt |
|
|
|
|
) // 결과 객체의 프로퍼티 이름을 지정
|
|
|
|
|
) |
|
|
|
|
) |
|
|
|
|
.from(qCtrCntrlBas) |
|
|
|
|
.where(builder) |
|
|
|
|
.fetchOne(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private String getFltTimeMonth(String idntfNum){ |
|
|
|
|
QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas; |
|
|
|
|
|
|
|
|
|
BooleanBuilder builder = new BooleanBuilder(); |
|
|
|
|
builder.and(qCtrCntrlBas.idntfNum.eq(idntfNum)); |
|
|
|
|
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 |
|
|
|
|
) // 결과 객체의 프로퍼티 이름을 지정
|
|
|
|
|
) |
|
|
|
|
) |
|
|
|
|
.from(qCtrCntrlBas) |
|
|
|
|
.where(builder) |
|
|
|
|
.fetchOne(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private String getFltTimeYear(String idntfNum){ |
|
|
|
|
QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas; |
|
|
|
|
|
|
|
|
|
BooleanBuilder builder = new BooleanBuilder(); |
|
|
|
|
builder.and(qCtrCntrlBas.idntfNum.eq(idntfNum)); |
|
|
|
|
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, |
|
|
|
|
Expressions.stringTemplate( |
|
|
|
|
"CONCAT(SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF({0}, {1})))))", |
|
|
|
|
qCtrCntrlBas.cntrlEndDt, |
|
|
|
|
qCtrCntrlBas.cntrlStDt |
|
|
|
|
) // 결과 객체의 프로퍼티 이름을 지정
|
|
|
|
|
) |
|
|
|
|
) |
|
|
|
|
.from(qCtrCntrlBas) |
|
|
|
|
.where(builder) |
|
|
|
|
.fetchOne(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 가장 많이 이동한 기체 |
|
|
|
|
* @return |
|
|
|
@ -1896,10 +1976,18 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
|
|
|
|
|
|
|
|
|
|
if(queryResult.size() > 0){ |
|
|
|
|
result = queryResult.get(0); |
|
|
|
|
|
|
|
|
|
String idntfNum = result.getName(); |
|
|
|
|
|
|
|
|
|
result.setYear(getFltDistanceYear(idntfNum)); |
|
|
|
|
result.setMonth(getFltDistanceMonth(idntfNum)); |
|
|
|
|
result.setDay(getFltDistanceDay(idntfNum)); |
|
|
|
|
} else { |
|
|
|
|
FlightStaticStcsModel node = new FlightStaticStcsModel(); |
|
|
|
|
node.setName("-"); |
|
|
|
|
node.setValue("noData"); |
|
|
|
|
node.setName("-"); |
|
|
|
|
node.setYear("noData"); |
|
|
|
|
node.setMonth("noData"); |
|
|
|
|
node.setDay("noData"); |
|
|
|
|
|
|
|
|
|
result = node; |
|
|
|
|
} |
|
|
|
@ -1907,6 +1995,62 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
|
|
|
|
|
return result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private String getFltDistanceDay(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 |
|
|
|
|
.select( |
|
|
|
|
Projections.bean(String.class, |
|
|
|
|
qCtrCntrlBas.ttlDstnc.sum() // 결과 객체의 프로퍼티 이름을 지정
|
|
|
|
|
) |
|
|
|
|
) |
|
|
|
|
.from(qCtrCntrlBas) |
|
|
|
|
.where(builder) |
|
|
|
|
.fetchOne(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private String getFltDistanceMonth(String idntfNum){ |
|
|
|
|
QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas; |
|
|
|
|
|
|
|
|
|
BooleanBuilder builder = new BooleanBuilder(); |
|
|
|
|
builder.and(qCtrCntrlBas.idntfNum.eq(idntfNum)); |
|
|
|
|
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, |
|
|
|
|
qCtrCntrlBas.ttlDstnc.sum() // 결과 객체의 프로퍼티 이름을 지정
|
|
|
|
|
) |
|
|
|
|
) |
|
|
|
|
.from(qCtrCntrlBas) |
|
|
|
|
.where(builder) |
|
|
|
|
.fetchOne(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private String getFltDistanceYear(String idntfNum){ |
|
|
|
|
QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas; |
|
|
|
|
|
|
|
|
|
BooleanBuilder builder = new BooleanBuilder(); |
|
|
|
|
builder.and(qCtrCntrlBas.idntfNum.eq(idntfNum)); |
|
|
|
|
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, |
|
|
|
|
qCtrCntrlBas.ttlDstnc.sum() // 결과 객체의 프로퍼티 이름을 지정
|
|
|
|
|
) |
|
|
|
|
) |
|
|
|
|
.from(qCtrCntrlBas) |
|
|
|
|
.where(builder) |
|
|
|
|
.fetchOne(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 가장 많이 비행한 기체 |
|
|
|
|
* @return |
|
|
|
@ -1931,10 +2075,18 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
|
|
|
|
|
|
|
|
|
|
if(queryResult.size() > 0){ |
|
|
|
|
result = queryResult.get(0); |
|
|
|
|
|
|
|
|
|
String idntfNum = result.getName(); |
|
|
|
|
|
|
|
|
|
result.setYear(getFltCountYear(idntfNum)); |
|
|
|
|
result.setMonth(getFltCountMonth(idntfNum)); |
|
|
|
|
result.setDay(getFltCountDay(idntfNum)); |
|
|
|
|
} else { |
|
|
|
|
FlightStaticStcsModel node = new FlightStaticStcsModel(); |
|
|
|
|
node.setName("-"); |
|
|
|
|
node.setValue("noData"); |
|
|
|
|
node.setName("-"); |
|
|
|
|
node.setYear("noData"); |
|
|
|
|
node.setMonth("noData"); |
|
|
|
|
node.setDay("noData"); |
|
|
|
|
|
|
|
|
|
result = node; |
|
|
|
|
} |
|
|
|
@ -1942,6 +2094,64 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
|
|
|
|
|
return result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private String getFltCountDay(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 |
|
|
|
|
.select( |
|
|
|
|
Projections.bean(String.class, |
|
|
|
|
qCtrCntrlBas.cntrlId.count() // 결과 객체의 프로퍼티 이름을 지정
|
|
|
|
|
) |
|
|
|
|
) |
|
|
|
|
.from(qCtrCntrlBas) |
|
|
|
|
.where(builder) |
|
|
|
|
.fetchOne(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private String getFltCountMonth(String idntfNum){ |
|
|
|
|
QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas; |
|
|
|
|
|
|
|
|
|
BooleanBuilder builder = new BooleanBuilder(); |
|
|
|
|
builder.and(qCtrCntrlBas.idntfNum.eq(idntfNum)); |
|
|
|
|
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, |
|
|
|
|
qCtrCntrlBas.cntrlId.count() // 결과 객체의 프로퍼티 이름을 지정
|
|
|
|
|
) |
|
|
|
|
) |
|
|
|
|
.from(qCtrCntrlBas) |
|
|
|
|
.where(builder) |
|
|
|
|
.fetchOne(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private String getFltCountYear(String idntfNum){ |
|
|
|
|
QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas; |
|
|
|
|
|
|
|
|
|
BooleanBuilder builder = new BooleanBuilder(); |
|
|
|
|
builder.and(qCtrCntrlBas.idntfNum.eq(idntfNum)); |
|
|
|
|
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, |
|
|
|
|
qCtrCntrlBas.cntrlId.count() // 결과 객체의 프로퍼티 이름을 지정
|
|
|
|
|
) |
|
|
|
|
) |
|
|
|
|
.from(qCtrCntrlBas) |
|
|
|
|
.where(builder) |
|
|
|
|
.fetchOne(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 비행통계 카테고리 시간 |
|
|
|
|