Browse Source

비정상상황 로그 queryRepository 추가

pull/12/head
lkd9125(이경도) 10 months ago
parent
commit
a415ca94fe
  1. 29
      pav-server/src/main/java/com/palnet/biz/api/main/statistics/service/MainStatisticsService.java
  2. 206
      pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java
  3. 232
      pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java

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

@ -8,6 +8,7 @@ import org.springframework.stereotype.Service;
import com.palnet.biz.api.main.statistics.model.FlightStaticStcsModel;
import com.palnet.biz.jpa.repository.ctr.CtrCntrlQueryRepository;
import com.palnet.biz.jpa.repository.ctr.CtrCntrlWarnLogQueryRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -18,7 +19,9 @@ import lombok.extern.slf4j.Slf4j;
public class MainStatisticsService {
private final CtrCntrlQueryRepository query;
private final CtrCntrlQueryRepository cntrlQueryRepository;
private final CtrCntrlWarnLogQueryRepository ctrCntrlWarnLogQueryRepository;
/**
* 파라미터 체크
@ -93,9 +96,9 @@ public class MainStatisticsService {
*/
public List<FlightStaticStcsModel> getFlightStaticStcs(){
FlightStaticStcsModel time = query.getFlightTimeStcs();
FlightStaticStcsModel distance = query.getFlightDistanceStcs();
FlightStaticStcsModel fltCount = query.getFlightCountStcs();
FlightStaticStcsModel time = cntrlQueryRepository.getFlightTimeStcs();
FlightStaticStcsModel distance = cntrlQueryRepository.getFlightDistanceStcs();
FlightStaticStcsModel fltCount = cntrlQueryRepository.getFlightCountStcs();
List<FlightStaticStcsModel> result = Arrays.asList(time, distance, fltCount);
@ -115,15 +118,15 @@ public class MainStatisticsService {
switch (cate) {
case "TIME":
resultList = query.fltTimeStcs(date, formatParam);
resultList = cntrlQueryRepository.fltTimeStcs(date, formatParam);
break;
case "DISTANCE":
resultList = query.fltDistanceStcs(date, formatParam);
resultList = cntrlQueryRepository.fltDistanceStcs(date, formatParam);
break;
case "FLT_COUNT":
resultList = query.fltCountStcs(date, formatParam);
resultList = cntrlQueryRepository.fltCountStcs(date, formatParam);
break;
}
@ -143,15 +146,15 @@ public class MainStatisticsService {
switch (cate) {
case "TIME":
resultList = query.fltTopTimeStcs(date, formatParam);
resultList = cntrlQueryRepository.fltTopTimeStcs(date, formatParam);
break;
case "DISTANCE":
resultList = query.fltTopDistanceStcs(date, formatParam);
resultList = cntrlQueryRepository.fltTopDistanceStcs(date, formatParam);
break;
case "FLT_COUNT":
resultList = query.fltTopCountStcs(date, formatParam);
resultList = cntrlQueryRepository.fltTopCountStcs(date, formatParam);
break;
}
@ -172,7 +175,7 @@ public class MainStatisticsService {
List<FlightStaticStcsModel> result = new ArrayList<>();
for(int i = 0; i < cate.length; i ++){
FlightStaticStcsModel node = query.getWarnStaticStcs(cate[i]);
FlightStaticStcsModel node = ctrCntrlWarnLogQueryRepository.getWarnStaticStcs(cate[i]);
result.add(node);
}
@ -188,7 +191,7 @@ public class MainStatisticsService {
*/
public List<FlightStaticStcsModel> warnStatics(String cate, String date, String[] formatParam){
List<FlightStaticStcsModel> resultList = query.warnStcs(cate, date, formatParam);
List<FlightStaticStcsModel> resultList = ctrCntrlWarnLogQueryRepository.warnStcs(cate, date, formatParam);
return resultList;
}
@ -202,7 +205,7 @@ public class MainStatisticsService {
*/
public List<FlightStaticStcsModel> warnTopStatics(String cate, String date, String[] formatParam){
List<FlightStaticStcsModel> resultList = query.warnTopStcs(cate, date, formatParam);
List<FlightStaticStcsModel> resultList = ctrCntrlWarnLogQueryRepository.warnTopStcs(cate, date, formatParam);
return resultList;
}

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

@ -4,7 +4,6 @@ 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;
@ -2438,210 +2437,7 @@ public List<AnlsHstryDetailModel> listCntrlHstry(String id){
return result;
}
/**
* 비정상상황 고정 데이터, 카테고리별 집계[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;
}
}

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

@ -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…
Cancel
Save