lkd9125(이경도)
10 months ago
3 changed files with 249 additions and 218 deletions
@ -0,0 +1,232 @@
|
||||
package com.palnet.biz.jpa.repository.ctr; |
||||
|
||||
import java.time.LocalDate; |
||||
import java.time.ZoneId; |
||||
import java.util.List; |
||||
|
||||
import org.springframework.stereotype.Repository; |
||||
|
||||
import com.palnet.biz.api.main.statistics.model.FlightStaticStcsModel; |
||||
import com.palnet.biz.jpa.entity.QCtrCntrlWarnLog; |
||||
import com.querydsl.core.BooleanBuilder; |
||||
import com.querydsl.core.types.ConstantImpl; |
||||
import com.querydsl.core.types.Projections; |
||||
import com.querydsl.core.types.dsl.Expressions; |
||||
import com.querydsl.core.types.dsl.StringTemplate; |
||||
import com.querydsl.jpa.impl.JPAQueryFactory; |
||||
|
||||
import lombok.RequiredArgsConstructor; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
|
||||
@Slf4j |
||||
@Repository |
||||
@RequiredArgsConstructor |
||||
public class CtrCntrlWarnLogQueryRepository { |
||||
|
||||
private final JPAQueryFactory query; |
||||
|
||||
|
||||
/** |
||||
* 비정상상황 고정 데이터, 카테고리별 집계[PLAN, ALTITUDE, CRASH] |
||||
* @return |
||||
*/ |
||||
public FlightStaticStcsModel getWarnStaticStcs(String cate){ |
||||
FlightStaticStcsModel result = new FlightStaticStcsModel(); |
||||
|
||||
QCtrCntrlWarnLog bas = QCtrCntrlWarnLog.ctrCntrlWarnLog; |
||||
|
||||
BooleanBuilder builder = new BooleanBuilder(); |
||||
builder.and(bas.warnType.eq(cate)); |
||||
|
||||
List<FlightStaticStcsModel> queryResult = query |
||||
.select( |
||||
Projections.bean(FlightStaticStcsModel.class, |
||||
bas.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정
|
||||
bas.cntrlId.countDistinct().as("value") // 결과 객체의 프로퍼티 이름을 지정
|
||||
) |
||||
) |
||||
.from(bas) |
||||
.where(builder) |
||||
.groupBy(bas.idntfNum) |
||||
.orderBy(bas.cntrlId.countDistinct().desc()) |
||||
.limit(1) |
||||
.fetch(); |
||||
|
||||
if(queryResult.size() > 0){ |
||||
result = queryResult.get(0); |
||||
|
||||
String idntfNum = result.getName(); |
||||
|
||||
result.setYear(getWarnYear(idntfNum, cate)); |
||||
result.setMonth(getWarnMonth(idntfNum, cate)); |
||||
result.setDay(getWarnDay(idntfNum, cate)); |
||||
|
||||
|
||||
} else { |
||||
FlightStaticStcsModel node = new FlightStaticStcsModel(); |
||||
node.setName("-"); |
||||
node.setValue("noData"); |
||||
|
||||
result = node; |
||||
} |
||||
|
||||
return result; |
||||
} |
||||
|
||||
|
||||
private String getWarnDay(String idntfNum, String cate){ |
||||
QCtrCntrlWarnLog bas = QCtrCntrlWarnLog.ctrCntrlWarnLog; |
||||
|
||||
BooleanBuilder builder = new BooleanBuilder(); |
||||
builder.and(bas.idntfNum.eq(idntfNum)); |
||||
builder.and(bas.createDt.eq(LocalDate.now().atStartOfDay().atZone(ZoneId.of("Asia/Seoul")).toInstant())); |
||||
builder.and(bas.warnType.eq(cate)); |
||||
|
||||
return query |
||||
.select( |
||||
Projections.bean(String.class, |
||||
bas.cntrlId.countDistinct() // 결과 객체의 프로퍼티 이름을 지정
|
||||
) |
||||
) |
||||
.from(bas) |
||||
.where(builder) |
||||
.fetchOne(); |
||||
} |
||||
|
||||
private String getWarnMonth(String idntfNum, String cate){ |
||||
QCtrCntrlWarnLog bas = QCtrCntrlWarnLog.ctrCntrlWarnLog; |
||||
|
||||
BooleanBuilder builder = new BooleanBuilder(); |
||||
builder.and(bas.idntfNum.eq(idntfNum)); |
||||
builder.and(bas.warnType.eq(cate)); |
||||
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( |
||||
Projections.bean(String.class, |
||||
bas.cntrlId.countDistinct() // 결과 객체의 프로퍼티 이름을 지정
|
||||
) |
||||
) |
||||
.from(bas) |
||||
.where(builder) |
||||
.fetchOne(); |
||||
} |
||||
|
||||
private String getWarnYear(String idntfNum, String cate){ |
||||
QCtrCntrlWarnLog bas = QCtrCntrlWarnLog.ctrCntrlWarnLog; |
||||
|
||||
BooleanBuilder builder = new BooleanBuilder(); |
||||
builder.and(bas.idntfNum.eq(idntfNum)); |
||||
builder.and(bas.warnType.eq(cate)); |
||||
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( |
||||
Projections.bean(String.class, |
||||
bas.cntrlId.countDistinct() // 결과 객체의 프로퍼티 이름을 지정
|
||||
) |
||||
) |
||||
.from(bas) |
||||
.where(builder) |
||||
.fetchOne(); |
||||
} |
||||
|
||||
|
||||
|
||||
/** |
||||
* 비정상상황 카테고리 경로이탈 |
||||
* @param date |
||||
* @param formatParam |
||||
* @return |
||||
*/ |
||||
public List<FlightStaticStcsModel> warnStcs(String cate, String date, String[] formatParam){ |
||||
// QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas;
|
||||
QCtrCntrlWarnLog bas = QCtrCntrlWarnLog.ctrCntrlWarnLog; |
||||
|
||||
StringTemplate formattedDate = Expressions.stringTemplate( |
||||
"DATE_FORMAT({0}, {1})" |
||||
, bas.createDt |
||||
, ConstantImpl.create(formatParam[0])); |
||||
|
||||
StringTemplate formattedDate2 = Expressions.stringTemplate( |
||||
"DATE_FORMAT({0}, {1})" |
||||
, bas.createDt |
||||
, ConstantImpl.create(formatParam[1])); |
||||
|
||||
BooleanBuilder builder = new BooleanBuilder(); |
||||
builder.and(bas.warnType.eq(cate)); |
||||
if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); |
||||
|
||||
List<FlightStaticStcsModel> result = query |
||||
.select( |
||||
Projections.bean( |
||||
FlightStaticStcsModel.class , |
||||
formattedDate2.as("name"), |
||||
bas.cntrlId.countDistinct().as("value") |
||||
) |
||||
) |
||||
.from(bas) |
||||
.where(builder) |
||||
.groupBy(formattedDate2) |
||||
.fetch(); |
||||
|
||||
if(result.size() <= 0){ |
||||
FlightStaticStcsModel node = new FlightStaticStcsModel(); |
||||
|
||||
node.setName("-"); |
||||
node.setValue("NoData"); |
||||
|
||||
result.add(node); |
||||
} |
||||
|
||||
return result; |
||||
} |
||||
|
||||
/** |
||||
* 비정상상황 카테고리 기체별 Top5 통계 |
||||
* @param cate |
||||
* @param date |
||||
* @param formatParam |
||||
* @return |
||||
*/ |
||||
public List<FlightStaticStcsModel> warnTopStcs(String cate, String date, String[] formatParam){ |
||||
|
||||
QCtrCntrlWarnLog bas = QCtrCntrlWarnLog.ctrCntrlWarnLog; |
||||
|
||||
StringTemplate formattedDate = Expressions.stringTemplate( |
||||
"DATE_FORMAT({0}, {1})" |
||||
, bas.createDt |
||||
, ConstantImpl.create(formatParam[0])); |
||||
|
||||
BooleanBuilder builder = new BooleanBuilder(); |
||||
builder.and(bas.warnType.eq(cate)); |
||||
if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); |
||||
|
||||
List<FlightStaticStcsModel> result = query |
||||
.select( |
||||
Projections.bean(FlightStaticStcsModel.class, |
||||
bas.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정
|
||||
bas.cntrlId.countDistinct().as("value") // 결과 객체의 프로퍼티 이름을 지정
|
||||
) |
||||
) |
||||
.from(bas) |
||||
.where(builder) |
||||
.groupBy(bas.idntfNum) |
||||
.orderBy(bas.cntrlId.countDistinct().desc()) |
||||
.limit(5) |
||||
.fetch(); |
||||
|
||||
if(result.size() <= 0){ |
||||
FlightStaticStcsModel node = new FlightStaticStcsModel(); |
||||
|
||||
node.setName("-"); |
||||
node.setValue("NoData"); |
||||
|
||||
result.add(node); |
||||
} |
||||
|
||||
return result; |
||||
} |
||||
} |
Loading…
Reference in new issue