Browse Source

비행통계 상단 년월일 추가

pull/12/head
lkd9125(이경도) 11 months ago
parent
commit
9ad0763121
  1. 10
      pav-server/src/main/java/com/palnet/biz/api/main/statistics/controller/MainStatisticsController.java
  2. 7
      pav-server/src/main/java/com/palnet/biz/api/main/statistics/model/FlightStaticStcsModel.java
  3. 224
      pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java

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

@ -29,14 +29,14 @@ import lombok.extern.log4j.Log4j2;
@RestController
@RequiredArgsConstructor
@RequestMapping(value = "/api/main/statistics", produces = {MediaType.APPLICATION_JSON_VALUE})
@Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API")
@Tag(name = "통계 컨트롤러", description = "통계 관련 API")
public class MainStatisticsController {
private final MainStatisticsService service;
@GetMapping("/flight-static")
@ApiOperation(value = "비행통계 상단 데이터[DB전체 통계데이터]")
@Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API")
@Tag(name = "통계 컨트롤러", description = "통계 관련 API")
public ResponseEntity<? extends BasicResponse> fltStcsStatic(){
List<FlightStaticStcsModel> result = null;
@ -56,7 +56,7 @@ public class MainStatisticsController {
@GetMapping("/flight/{type}")
@ApiOperation(value = "비행통계 cate = ['TIME', 'DISTANCE','FLT_COUNT'], type=['year','month','day','one-day']")
@Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API")
@Tag(name = "통계 컨트롤러", description = "통계 관련 API")
@ApiImplicitParams({
@ApiImplicitParam(name = "date",value = "날짜[2023]", dataTypeClass = String.class),
@ApiImplicitParam(name = "cate",value = "비행시간,거리,횟수[TIME]", dataTypeClass = String.class),
@ -93,7 +93,7 @@ public class MainStatisticsController {
@GetMapping("/warn-static")
@ApiOperation(value = "비정상 상황 상단 데이터[DB전체 통계데이터]")
@Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API")
@Tag(name = "통계 컨트롤러", description = "통계 관련 API")
public ResponseEntity<? extends BasicResponse> warnStcsStatic(){
List<FlightStaticStcsModel> result = null;
@ -113,7 +113,7 @@ public class MainStatisticsController {
@GetMapping("/warn/{type}")
@ApiOperation(value = "비정상상황 cate = ['PLAN' ,'ALTITUDE', 'CRASH'], type=['year','month','day','one-day']")
@Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API")
@Tag(name = "통계 컨트롤러", description = "통계 관련 API")
@ApiImplicitParams({
@ApiImplicitParam(name = "date",value = "날짜[2023]", dataTypeClass = String.class),
@ApiImplicitParam(name = "cate",value = "비행시간,거리,횟수[TIME]", dataTypeClass = String.class),

7
pav-server/src/main/java/com/palnet/biz/api/main/statistics/model/FlightStaticStcsModel.java

@ -9,4 +9,11 @@ public class FlightStaticStcsModel {
private Object value;
private Object year;
private Object month;
private Object day;
}

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

@ -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.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.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.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();
}
/**
* 비행통계 카테고리 시간

Loading…
Cancel
Save