diff --git a/pav-server/src/main/java/com/palnet/biz/api/main/statistics/controller/MainStatisticsController.java b/pav-server/src/main/java/com/palnet/biz/api/main/statistics/controller/MainStatisticsController.java index c987cae5..02795ff3 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/main/statistics/controller/MainStatisticsController.java +++ b/pav-server/src/main/java/com/palnet/biz/api/main/statistics/controller/MainStatisticsController.java @@ -14,7 +14,7 @@ import org.springframework.web.bind.annotation.RestController; import com.palnet.biz.api.comn.response.BasicResponse; import com.palnet.biz.api.comn.response.ErrorResponse; import com.palnet.biz.api.comn.response.SuccessResponse; -import com.palnet.biz.api.main.statistics.model.FlightStaticStcsModel; +import com.palnet.biz.api.main.statistics.model.FlightStcsValueModel; import com.palnet.biz.api.main.statistics.model.FlightStcsModel; import com.palnet.biz.api.main.statistics.service.MainStatisticsService; @@ -39,7 +39,7 @@ public class MainStatisticsController { @Tag(name = "통계 컨트롤러", description = "통계 관련 API") public ResponseEntity fltStcsStatic(){ - List result = null; + List result = null; try { result = service.getFlightStaticStcs(); @@ -51,7 +51,7 @@ public class MainStatisticsController { .body(new ErrorResponse("Server Error", "-1")); } - return ResponseEntity.ok().body(new SuccessResponse>(result)); + return ResponseEntity.ok().body(new SuccessResponse>(result)); } @GetMapping("/flight/{type}") @@ -73,8 +73,8 @@ public class MainStatisticsController { if(date == null) date = ""; formatParam = service.paramCheck(date,type); - List graphData = service.fltStatics(cate, date, formatParam); - List topData = service.fltTopStatics(cate, date, formatParam); + List graphData = service.fltStatics(cate, date, formatParam); + List topData = service.fltTopStatics(cate, date, formatParam); result.setGraphData(graphData); result.setTopData(topData); @@ -96,7 +96,7 @@ public class MainStatisticsController { @Tag(name = "통계 컨트롤러", description = "통계 관련 API") public ResponseEntity warnStcsStatic(){ - List result = null; + List result = null; try { result = service.getWarnStaticStcs(); @@ -108,7 +108,7 @@ public class MainStatisticsController { .body(new ErrorResponse("Server Error", "-1")); } - return ResponseEntity.ok().body(new SuccessResponse>(result)); + return ResponseEntity.ok().body(new SuccessResponse>(result)); } @GetMapping("/warn/{type}") @@ -130,8 +130,8 @@ public class MainStatisticsController { if(date == null) date = ""; formatParam = service.paramCheck(date,type); - List graphData = service.warnStatics(cate, date, formatParam); - List topData = service.warnTopStatics(cate, date, formatParam); + List graphData = service.warnStatics(cate, date, formatParam); + List topData = service.warnTopStatics(cate, date, formatParam); result.setGraphData(graphData); result.setTopData(topData); @@ -151,7 +151,7 @@ public class MainStatisticsController { @Tag(name = "통계 컨트롤러", description = "통계 관련 API") public ResponseEntity fltResultStcs(){ - List result = null; + List result = null; try { result = service.getFltResultStaticStcs(); @@ -163,7 +163,42 @@ public class MainStatisticsController { .body(new ErrorResponse("Server Error", "-1")); } - return ResponseEntity.ok().body(new SuccessResponse>(result)); + return ResponseEntity.ok().body(new SuccessResponse>(result)); + } + + @GetMapping("/flight/result/{type}") + @ApiOperation(value = "비정상상황 cate = ['FLT_RESULT' ,'FLT_PLAN', 'FLT_PLAN_APRVN'], type=['year','month','day','one-day']") + @Tag(name = "통계 컨트롤러", description = "통계 관련 API") + @ApiImplicitParams({ + @ApiImplicitParam(name = "date",value = "날짜[2023]", dataTypeClass = String.class), + @ApiImplicitParam(name = "cate",value = "비행실적,비행계획서,비행계획승인[FLT_PLAN_APRVN]", dataTypeClass = String.class), + @ApiImplicitParam(name = "type",value = "날짜형식[month]", dataTypeClass = String.class) + }) + public ResponseEntity fltResultStcs(@RequestParam String cate, String date, @PathVariable String type){ + log.warn("cate => {}, date => {}, type => {}", cate, date, type); + + FlightStcsModel result = new FlightStcsModel(); + + try { + String[] formatParam = null; + + if(date == null) date = ""; + formatParam = service.paramCheck(date,type); + + List graphData = service.getFltResultStcs(cate, date, formatParam); + List topData = service.getFltTopResultStcs(cate, date, formatParam); + + result.setGraphData(graphData); + result.setTopData(topData); + + 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(result)); } diff --git a/pav-server/src/main/java/com/palnet/biz/api/main/statistics/model/FlightStcsModel.java b/pav-server/src/main/java/com/palnet/biz/api/main/statistics/model/FlightStcsModel.java index 9691d722..765641f9 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/main/statistics/model/FlightStcsModel.java +++ b/pav-server/src/main/java/com/palnet/biz/api/main/statistics/model/FlightStcsModel.java @@ -7,8 +7,8 @@ import lombok.Data; @Data public class FlightStcsModel { - private List graphData; + private List graphData; - private List topData; + private List topData; } diff --git a/pav-server/src/main/java/com/palnet/biz/api/main/statistics/model/FlightStaticStcsModel.java b/pav-server/src/main/java/com/palnet/biz/api/main/statistics/model/FlightStcsValueModel.java similarity index 85% rename from pav-server/src/main/java/com/palnet/biz/api/main/statistics/model/FlightStaticStcsModel.java rename to pav-server/src/main/java/com/palnet/biz/api/main/statistics/model/FlightStcsValueModel.java index 80a48195..88ee32a0 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/main/statistics/model/FlightStaticStcsModel.java +++ b/pav-server/src/main/java/com/palnet/biz/api/main/statistics/model/FlightStcsValueModel.java @@ -3,7 +3,7 @@ package com.palnet.biz.api.main.statistics.model; import lombok.Data; @Data -public class FlightStaticStcsModel { +public class FlightStcsValueModel { private String name; diff --git a/pav-server/src/main/java/com/palnet/biz/api/main/statistics/service/MainStatisticsService.java b/pav-server/src/main/java/com/palnet/biz/api/main/statistics/service/MainStatisticsService.java index d99c8538..daeed3b7 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/main/statistics/service/MainStatisticsService.java +++ b/pav-server/src/main/java/com/palnet/biz/api/main/statistics/service/MainStatisticsService.java @@ -6,11 +6,13 @@ import java.util.List; import org.springframework.stereotype.Service; -import com.palnet.biz.api.main.statistics.model.FlightStaticStcsModel; +import com.palnet.biz.api.main.statistics.model.FlightStcsValueModel; 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 com.palnet.comn.code.ErrorCode; +import com.palnet.comn.exception.CustomException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -50,7 +52,7 @@ public class MainStatisticsService { Integer.parseInt(date.trim()); result[0] = "%Y"; - result[1] = "%m"; + result[1] = "%Y-%m"; break; case "day": // 3. 일단위 검색 -> Parameter 2023-09 등 월까지 있는경우 @@ -60,7 +62,7 @@ public class MainStatisticsService { } result[0] = "%Y-%m"; - result[1] = "%d"; + result[1] = "%Y-%m-%d"; } else { throw new NumberFormatException(); } @@ -75,7 +77,7 @@ public class MainStatisticsService { } result[0] = "%Y-%m-%d"; - result[1] = "%d"; + result[1] = "%Y-%m-%d"; } else { throw new NumberFormatException(); } @@ -98,13 +100,13 @@ public class MainStatisticsService { * 비행관련 고정 통계, 항상 DB 전체값에서 통계진행할것임 * @return */ - public List getFlightStaticStcs(){ + public List getFlightStaticStcs(){ - FlightStaticStcsModel time = cntrlQueryRepository.getFlightTimeStcs(); - FlightStaticStcsModel distance = cntrlQueryRepository.getFlightDistanceStcs(); - FlightStaticStcsModel fltCount = cntrlQueryRepository.getFlightCountStcs(); + FlightStcsValueModel time = cntrlQueryRepository.getFlightTimeStcs(); + FlightStcsValueModel distance = cntrlQueryRepository.getFlightDistanceStcs(); + FlightStcsValueModel fltCount = cntrlQueryRepository.getFlightCountStcs(); - List result = Arrays.asList(time, distance, fltCount); + List result = Arrays.asList(time, distance, fltCount); return result; } @@ -116,9 +118,9 @@ public class MainStatisticsService { * @param formatParam * @return */ - public List fltStatics(String cate, String date, String[] formatParam){ + public List fltStatics(String cate, String date, String[] formatParam){ - List resultList = null; + List resultList = null; switch (cate) { case "TIME": @@ -145,8 +147,8 @@ public class MainStatisticsService { * @param formatParam * @return */ - public List fltTopStatics(String cate, String date, String[] formatParam){ - List resultList = null; + public List fltTopStatics(String cate, String date, String[] formatParam){ + List resultList = null; switch (cate) { case "TIME": @@ -163,6 +165,10 @@ public class MainStatisticsService { break; } + for(FlightStcsValueModel node : resultList){ + if(node.getName().equals("")) node.setName(" "); + } + return resultList; } @@ -170,16 +176,16 @@ public class MainStatisticsService { * 비행관련 고정 통계, 항상 DB 전체값에서 통계진행할것임 * @return */ - public List getWarnStaticStcs(){ + public List getWarnStaticStcs(){ // TODO:: 비행경로이탈, 고도이탈, 충돌위험 임시코드 String[] cate = {"PLAN" ,"ALTITUDE", "CRASH"}; // String[] cate = {WarnType.PLAN.getValue() ,WarnType.ALTITUDE.getValue(), WarnType.CRASH.getValue()}; - List result = new ArrayList<>(); + List result = new ArrayList<>(); for(int i = 0; i < cate.length; i ++){ - FlightStaticStcsModel node = ctrCntrlWarnLogQueryRepository.getWarnStaticStcs(cate[i]); + FlightStcsValueModel node = ctrCntrlWarnLogQueryRepository.getWarnStaticStcs(cate[i]); result.add(node); } @@ -193,9 +199,13 @@ public class MainStatisticsService { * @param formatParam * @return */ - public List warnStatics(String cate, String date, String[] formatParam){ + public List warnStatics(String cate, String date, String[] formatParam){ - List resultList = ctrCntrlWarnLogQueryRepository.warnStcs(cate, date, formatParam); + List resultList = ctrCntrlWarnLogQueryRepository.warnStcs(cate, date, formatParam); + + for(FlightStcsValueModel node : resultList){ + if(node.getName().equals("")) node.setName(" "); + } return resultList; } @@ -207,9 +217,9 @@ public class MainStatisticsService { * @param formatParam * @return */ - public List warnTopStatics(String cate, String date, String[] formatParam){ + public List warnTopStatics(String cate, String date, String[] formatParam){ - List resultList = ctrCntrlWarnLogQueryRepository.warnTopStcs(cate, date, formatParam); + List resultList = ctrCntrlWarnLogQueryRepository.warnTopStcs(cate, date, formatParam); return resultList; } @@ -218,14 +228,74 @@ public class MainStatisticsService { * 비행실적, 비행계획서 기용, 비행승인이 많이 된 기체 데이터, 상단 고정 데이터 * @return */ - public List getFltResultStaticStcs(){ + public List getFltResultStaticStcs(){ - FlightStaticStcsModel fltResult = fltPlanQueryRepository.getFltResultStaticStcs(); - FlightStaticStcsModel fltPlan = fltPlanQueryRepository.getFltPlanStaticStcs(); - FlightStaticStcsModel fltPlanAprvn = fltPlanQueryRepository.getFltPlanAprvnStaticStcs(); + FlightStcsValueModel fltResult = fltPlanQueryRepository.getFltResultStaticStcs(); + FlightStcsValueModel fltPlan = fltPlanQueryRepository.getFltPlanStaticStcs(); + FlightStcsValueModel fltPlanAprvn = fltPlanQueryRepository.getFltPlanAprvnStaticStcs(); - List result = Arrays.asList(fltResult,fltPlan, fltPlanAprvn); + List result = Arrays.asList(fltResult,fltPlan, fltPlanAprvn); return result; } + + public List getFltResultStcs(String cate, String date, String[] formatParam){ + + List resultList = null; + + switch (cate) { + case "FLT_RESULT": + resultList = fltPlanQueryRepository.fltResultStcs(date, formatParam); + + break; + case "FLT_PLAN": + resultList = fltPlanQueryRepository.fltPlanStcs(date, formatParam); + + break; + case "FLT_PLAN_APRVN": + resultList = fltPlanQueryRepository.fltPlanAprvnStcs(date, formatParam); + + break; + default : + + throw new CustomException(ErrorCode.NON_VALID_PARAMETER, cate, date); + } + + for(FlightStcsValueModel node : resultList){ + if(node.getName().equals("")) node.setName(" "); + } + + return resultList; + } + + public List getFltTopResultStcs(String cate, String date, String[] formatParam){ + + List resultList = null; + + switch (cate) { + case "FLT_RESULT": + resultList = fltPlanQueryRepository.fltTopResultStcs(date, formatParam); + + break; + case "FLT_PLAN": + resultList = fltPlanQueryRepository.fltTopPlanStcs(date, formatParam); + + break; + case "FLT_PLAN_APRVN": + resultList = fltPlanQueryRepository.fltTopPlanAprvnStcs(date, formatParam); + + break; + default : + + throw new CustomException(ErrorCode.NON_VALID_PARAMETER, cate, date); + } + + for(FlightStcsValueModel node : resultList){ + if(node.getName().equals("")) node.setName(" "); + } + + return resultList; + } + + } diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java b/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java index 5769201b..22c2b016 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlQueryRepository.java @@ -29,7 +29,7 @@ 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.dash.model.MainDashStcsModel; -import com.palnet.biz.api.main.statistics.model.FlightStaticStcsModel; +import com.palnet.biz.api.main.statistics.model.FlightStcsValueModel; import com.palnet.biz.jpa.entity.ComArcrftBas; import com.palnet.biz.jpa.entity.ComIdntfBas; import com.palnet.biz.jpa.entity.CtrCntrlHstry; @@ -1830,14 +1830,14 @@ public List listCntrlHstry(String id){ * DB 데이터내에 가장 많은 비행시간을 가진 기체, 비행시간 SELECT * @return */ - public FlightStaticStcsModel getFlightTimeStcs(){ - FlightStaticStcsModel result = new FlightStaticStcsModel(); + public FlightStcsValueModel getFlightTimeStcs(){ + FlightStcsValueModel result = new FlightStcsValueModel(); QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas; - List queryResult = query + List queryResult = query .select( - Projections.bean(FlightStaticStcsModel.class, + Projections.bean(FlightStcsValueModel.class, qCtrCntrlBas.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정 Expressions.stringTemplate( "CONCAT(SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF({0}, {1})))))", @@ -1868,7 +1868,7 @@ public List listCntrlHstry(String id){ log.warn("a => {}", result); } else { - FlightStaticStcsModel node = new FlightStaticStcsModel(); + FlightStcsValueModel node = new FlightStcsValueModel(); node.setName("-"); node.setYear("noData"); node.setMonth("noData"); @@ -1947,14 +1947,14 @@ public List listCntrlHstry(String id){ * 가장 많이 이동한 기체 * @return */ - public FlightStaticStcsModel getFlightDistanceStcs(){ - FlightStaticStcsModel result = new FlightStaticStcsModel(); + public FlightStcsValueModel getFlightDistanceStcs(){ + FlightStcsValueModel result = new FlightStcsValueModel(); QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas; - List queryResult = query + List queryResult = query .select( - Projections.bean(FlightStaticStcsModel.class, + Projections.bean(FlightStcsValueModel.class, qCtrCntrlBas.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정 qCtrCntrlBas.ttlDstnc.sum().as("value") ) @@ -1976,7 +1976,7 @@ public List listCntrlHstry(String id){ result.setMonth(getFltDistanceMonth(idntfNum)); result.setDay(getFltDistanceDay(idntfNum)); } else { - FlightStaticStcsModel node = new FlightStaticStcsModel(); + FlightStcsValueModel node = new FlightStcsValueModel(); node.setName("-"); node.setYear("noData"); node.setMonth("noData"); @@ -2043,14 +2043,14 @@ public List listCntrlHstry(String id){ * 가장 많이 비행한 기체 * @return */ - public FlightStaticStcsModel getFlightCountStcs(){ - FlightStaticStcsModel result = new FlightStaticStcsModel(); + public FlightStcsValueModel getFlightCountStcs(){ + FlightStcsValueModel result = new FlightStcsValueModel(); QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas; - List queryResult = query + List queryResult = query .select( - Projections.bean(FlightStaticStcsModel.class, + Projections.bean(FlightStcsValueModel.class, qCtrCntrlBas.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정 qCtrCntrlBas.cntrlId.count().as("value") ) @@ -2070,7 +2070,7 @@ public List listCntrlHstry(String id){ result.setMonth(getFltCountMonth(idntfNum)); result.setDay(getFltCountDay(idntfNum)); } else { - FlightStaticStcsModel node = new FlightStaticStcsModel(); + FlightStcsValueModel node = new FlightStcsValueModel(); node.setName("-"); node.setYear("noData"); node.setMonth("noData"); @@ -2141,7 +2141,7 @@ public List listCntrlHstry(String id){ * @param formatParam * @return */ - public List fltTimeStcs(String date, String[] formatParam){ + public List fltTimeStcs(String date, String[] formatParam){ // QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas; QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas; @@ -2158,10 +2158,10 @@ public List listCntrlHstry(String id){ BooleanBuilder builder = new BooleanBuilder(); if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); - List result = query + List result = query .select( Projections.bean( - FlightStaticStcsModel.class , + FlightStcsValueModel.class , formattedDate2.as("name"), Expressions.stringTemplate( "CONCAT(SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF({0}, {1})))))", @@ -2176,7 +2176,7 @@ public List listCntrlHstry(String id){ .fetch(); if(result.size() <= 0){ - FlightStaticStcsModel node = new FlightStaticStcsModel(); + FlightStcsValueModel node = new FlightStcsValueModel(); node.setName("-"); node.setValue("NoData"); @@ -2193,7 +2193,7 @@ public List listCntrlHstry(String id){ * @param formatParam * @return */ - public List fltDistanceStcs(String date, String[] formatParam){ + public List fltDistanceStcs(String date, String[] formatParam){ QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas; @@ -2210,10 +2210,10 @@ public List listCntrlHstry(String id){ BooleanBuilder builder = new BooleanBuilder(); if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); - List result = query + List result = query .select( Projections.bean( - FlightStaticStcsModel.class , + FlightStcsValueModel.class , formattedDate2.as("name"), bas.ttlDstnc.sum().as("value") ) @@ -2224,7 +2224,7 @@ public List listCntrlHstry(String id){ .fetch(); if(result.size() <= 0){ - FlightStaticStcsModel node = new FlightStaticStcsModel(); + FlightStcsValueModel node = new FlightStcsValueModel(); node.setName("-"); node.setValue("NoData"); @@ -2241,7 +2241,7 @@ public List listCntrlHstry(String id){ * @param formatParam * @return */ - public List fltCountStcs(String date, String[] formatParam){ + public List fltCountStcs(String date, String[] formatParam){ QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas; @@ -2258,10 +2258,10 @@ public List listCntrlHstry(String id){ BooleanBuilder builder = new BooleanBuilder(); if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); - List result = query + List result = query .select( Projections.bean( - FlightStaticStcsModel.class , + FlightStcsValueModel.class , formattedDate2.as("name"), bas.cntrlId.count().as("value") ) @@ -2272,7 +2272,7 @@ public List listCntrlHstry(String id){ .fetch(); if(result.size() <= 0){ - FlightStaticStcsModel node = new FlightStaticStcsModel(); + FlightStcsValueModel node = new FlightStcsValueModel(); node.setName("-"); node.setValue("NoData"); @@ -2289,7 +2289,7 @@ public List listCntrlHstry(String id){ * @param formatParam * @return */ - public List fltTopTimeStcs(String date, String[] formatParam){ + public List fltTopTimeStcs(String date, String[] formatParam){ QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas; StringTemplate formattedDate = Expressions.stringTemplate( @@ -2300,9 +2300,9 @@ public List listCntrlHstry(String id){ BooleanBuilder builder = new BooleanBuilder(); if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); - List result = query + List result = query .select( - Projections.bean(FlightStaticStcsModel.class, + Projections.bean(FlightStcsValueModel.class, bas.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정 Expressions.stringTemplate( "CONCAT(SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF({0}, {1})))))", @@ -2323,7 +2323,7 @@ public List listCntrlHstry(String id){ .fetch(); if(result.size() <= 0){ - FlightStaticStcsModel node = new FlightStaticStcsModel(); + FlightStcsValueModel node = new FlightStcsValueModel(); node.setName("-"); node.setValue("NoData"); @@ -2340,7 +2340,7 @@ public List listCntrlHstry(String id){ * @param formatParam * @return */ - public List fltTopDistanceStcs(String date, String[] formatParam){ + public List fltTopDistanceStcs(String date, String[] formatParam){ QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas; StringTemplate formattedDate = Expressions.stringTemplate( @@ -2351,9 +2351,9 @@ public List listCntrlHstry(String id){ BooleanBuilder builder = new BooleanBuilder(); if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); - List result = query + List result = query .select( - Projections.bean(FlightStaticStcsModel.class, + Projections.bean(FlightStcsValueModel.class, bas.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정 bas.ttlDstnc.sum().as("value") ) @@ -2366,7 +2366,7 @@ public List listCntrlHstry(String id){ .fetch(); if(result.size() <= 0){ - FlightStaticStcsModel node = new FlightStaticStcsModel(); + FlightStcsValueModel node = new FlightStcsValueModel(); node.setName("-"); node.setValue("NoData"); @@ -2383,7 +2383,7 @@ public List listCntrlHstry(String id){ * @param formatParam * @return */ - public List fltTopCountStcs(String date, String[] formatParam){ + public List fltTopCountStcs(String date, String[] formatParam){ QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas; StringTemplate formattedDate = Expressions.stringTemplate( @@ -2394,9 +2394,9 @@ public List listCntrlHstry(String id){ BooleanBuilder builder = new BooleanBuilder(); if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); - List result = query + List result = query .select( - Projections.bean(FlightStaticStcsModel.class, + Projections.bean(FlightStcsValueModel.class, bas.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정 bas.cntrlId.count().as("value") ) @@ -2409,7 +2409,7 @@ public List listCntrlHstry(String id){ .fetch(); if(result.size() <= 0){ - FlightStaticStcsModel node = new FlightStaticStcsModel(); + FlightStcsValueModel node = new FlightStcsValueModel(); node.setName("-"); node.setValue("NoData"); diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java b/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java index 72a16094..3e293620 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java @@ -6,7 +6,7 @@ import java.util.List; import org.springframework.stereotype.Repository; -import com.palnet.biz.api.main.statistics.model.FlightStaticStcsModel; +import com.palnet.biz.api.main.statistics.model.FlightStcsValueModel; import com.palnet.biz.jpa.entity.QCtrCntrlWarnLog; import com.querydsl.core.BooleanBuilder; import com.querydsl.core.types.ConstantImpl; @@ -30,17 +30,17 @@ public class CtrCntrlWarnLogQueryRepository { * 비정상상황 고정 데이터, 카테고리별 집계[PLAN, ALTITUDE, CRASH] * @return */ - public FlightStaticStcsModel getWarnStaticStcs(String cate){ - FlightStaticStcsModel result = new FlightStaticStcsModel(); + public FlightStcsValueModel getWarnStaticStcs(String cate){ + FlightStcsValueModel result = new FlightStcsValueModel(); QCtrCntrlWarnLog bas = QCtrCntrlWarnLog.ctrCntrlWarnLog; BooleanBuilder builder = new BooleanBuilder(); builder.and(bas.warnType.eq(cate)); - List queryResult = query + List queryResult = query .select( - Projections.bean(FlightStaticStcsModel.class, + Projections.bean(FlightStcsValueModel.class, bas.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정 bas.cntrlId.countDistinct().as("value") // 결과 객체의 프로퍼티 이름을 지정 ) @@ -63,7 +63,7 @@ public class CtrCntrlWarnLogQueryRepository { } else { - FlightStaticStcsModel node = new FlightStaticStcsModel(); + FlightStcsValueModel node = new FlightStcsValueModel(); node.setName("-"); node.setYear("noData"); node.setMonth("noData"); @@ -143,7 +143,7 @@ public class CtrCntrlWarnLogQueryRepository { * @param formatParam * @return */ - public List warnStcs(String cate, String date, String[] formatParam){ + public List warnStcs(String cate, String date, String[] formatParam){ // QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas; QCtrCntrlWarnLog bas = QCtrCntrlWarnLog.ctrCntrlWarnLog; @@ -161,10 +161,10 @@ public class CtrCntrlWarnLogQueryRepository { builder.and(bas.warnType.eq(cate)); if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); - List result = query + List result = query .select( Projections.bean( - FlightStaticStcsModel.class , + FlightStcsValueModel.class , formattedDate2.as("name"), bas.cntrlId.countDistinct().as("value") ) @@ -175,7 +175,7 @@ public class CtrCntrlWarnLogQueryRepository { .fetch(); if(result.size() <= 0){ - FlightStaticStcsModel node = new FlightStaticStcsModel(); + FlightStcsValueModel node = new FlightStcsValueModel(); node.setName("-"); node.setValue("NoData"); @@ -193,7 +193,7 @@ public class CtrCntrlWarnLogQueryRepository { * @param formatParam * @return */ - public List warnTopStcs(String cate, String date, String[] formatParam){ + public List warnTopStcs(String cate, String date, String[] formatParam){ QCtrCntrlWarnLog bas = QCtrCntrlWarnLog.ctrCntrlWarnLog; @@ -206,9 +206,9 @@ public class CtrCntrlWarnLogQueryRepository { builder.and(bas.warnType.eq(cate)); if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); - List result = query + List result = query .select( - Projections.bean(FlightStaticStcsModel.class, + Projections.bean(FlightStcsValueModel.class, bas.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정 bas.cntrlId.countDistinct().as("value") // 결과 객체의 프로퍼티 이름을 지정 ) @@ -221,7 +221,7 @@ public class CtrCntrlWarnLogQueryRepository { .fetch(); if(result.size() <= 0){ - FlightStaticStcsModel node = new FlightStaticStcsModel(); + FlightStcsValueModel node = new FlightStcsValueModel(); node.setName("-"); node.setValue("NoData"); diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java b/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java index 8fe0e85f..84c52c1c 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java @@ -23,7 +23,7 @@ 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.api.main.statistics.model.FlightStaticStcsModel; +import com.palnet.biz.api.main.statistics.model.FlightStcsValueModel; import com.palnet.biz.jpa.entity.FltPlanBas; import com.palnet.biz.jpa.entity.QComArcrftBas; import com.palnet.biz.jpa.entity.QComFileBas; @@ -1181,17 +1181,17 @@ public class FltPlanQueryRepository { * 비행실적 데이터, top 1 * @return */ - public FlightStaticStcsModel getFltResultStaticStcs(){ - FlightStaticStcsModel result = new FlightStaticStcsModel(); + public FlightStcsValueModel getFltResultStaticStcs(){ + FlightStcsValueModel result = new FlightStcsValueModel(); QFltPlanCtrCntrlRel bas = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; BooleanBuilder builder = new BooleanBuilder(); builder.and(bas.planSno.isNotNull()); - List queryResult = query + List queryResult = query .select( - Projections.bean(FlightStaticStcsModel.class, + Projections.bean(FlightStcsValueModel.class, bas.idntfNum.as("name") // 결과 객체의 프로퍼티 이름을 지정 ) ) @@ -1212,7 +1212,7 @@ public class FltPlanQueryRepository { result.setMonth(getFltResultMonth(idntfNum)); result.setDay(getFltResultDay(idntfNum)); } else { - FlightStaticStcsModel node = new FlightStaticStcsModel(); + FlightStcsValueModel node = new FlightStcsValueModel(); node.setName("-"); node.setYear("NoData"); @@ -1293,14 +1293,14 @@ public class FltPlanQueryRepository { * 비행계획에 많이 기용된 기체 데이터, top 1 * @return */ - public FlightStaticStcsModel getFltPlanStaticStcs(){ - FlightStaticStcsModel result = new FlightStaticStcsModel(); + public FlightStcsValueModel getFltPlanStaticStcs(){ + FlightStcsValueModel result = new FlightStcsValueModel(); - QFltPlanArcrft bas = QFltPlanArcrft.fltPlanArcrft; + QFltPlanArcrft bas = QFltPlanArcrft.fltPlanArcrft; - List queryResult = query + List queryResult = query .select( - Projections.bean(FlightStaticStcsModel.class, + Projections.bean(FlightStcsValueModel.class, bas.idntfNum.as("name") // 결과 객체의 프로퍼티 이름을 지정 ) ) @@ -1320,7 +1320,7 @@ public class FltPlanQueryRepository { result.setMonth(getFltPlanMonth(idntfNum)); result.setDay(getFltPlanDay(idntfNum)); } else { - FlightStaticStcsModel node = new FlightStaticStcsModel(); + FlightStcsValueModel node = new FlightStcsValueModel(); node.setName("-"); node.setYear("NoData"); @@ -1390,8 +1390,8 @@ public class FltPlanQueryRepository { * 비행실적 많은 기체 데이터, top 1 * @return */ - public FlightStaticStcsModel getFltPlanAprvnStaticStcs(){ - FlightStaticStcsModel result = new FlightStaticStcsModel(); + public FlightStcsValueModel getFltPlanAprvnStaticStcs(){ + FlightStcsValueModel result = new FlightStcsValueModel(); QFltPlanArcrft qFltPlanArcrft = QFltPlanArcrft.fltPlanArcrft; QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; @@ -1400,9 +1400,9 @@ public class FltPlanQueryRepository { builder.and(qFltPlanBas.aprvlYn.eq("Y")); - List queryResult = query + List queryResult = query .select( - Projections.bean(FlightStaticStcsModel.class, + Projections.bean(FlightStcsValueModel.class, qFltPlanArcrft.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정 qFltPlanArcrft.planSno.count().as("value") // 결과 객체의 프로퍼티 이름을 지정 ) @@ -1425,7 +1425,7 @@ public class FltPlanQueryRepository { result.setMonth(getFltPlanAprvnMonth(idntfNum)); result.setDay(getFltPlanAprvnDay(idntfNum)); } else { - FlightStaticStcsModel node = new FlightStaticStcsModel(); + FlightStcsValueModel node = new FlightStcsValueModel(); node.setName("-"); node.setYear("NoData"); @@ -1501,7 +1501,291 @@ public class FltPlanQueryRepository { .fetchOne(); } + /** + * 비행실적 통계 카테고리 비행실적 + * @param date + * @param formatParam + * @return + */ + public List fltResultStcs(String date, String[] formatParam){ + // QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas; + + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + + StringTemplate formattedDate = Expressions.stringTemplate( + "DATE_FORMAT({0}, {1})" + , qFltPlanBas.createDt + , ConstantImpl.create(formatParam[0])); + + StringTemplate formattedDate2 = Expressions.stringTemplate( + "DATE_FORMAT({0}, {1})" + , qFltPlanBas.createDt + , ConstantImpl.create(formatParam[1])); + BooleanBuilder builder = new BooleanBuilder(); + if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); + List result = query + .select( + Projections.bean( + FlightStcsValueModel.class , + formattedDate2.as("name"), + qFltPlanCtrCntrlRel.planSno.countDistinct().as("value") + ) + ) + .from(qFltPlanCtrCntrlRel) + .leftJoin(qFltPlanBas) + .on(qFltPlanBas.planSno.eq(qFltPlanCtrCntrlRel.planSno)) + .where(builder) + .groupBy(formattedDate2) + .fetch(); + + if(result.size() <= 0){ + FlightStcsValueModel node = new FlightStcsValueModel(); + + node.setName("-"); + node.setValue("NoData"); + + result.add(node); + } + + return result; + } + + /** + * 비행계획서 통계 카테고리 비행계획서 + * @param date + * @param formatParam + * @return + */ + public List fltPlanStcs(String date, String[] formatParam){ + // QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas; + + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; + + StringTemplate formattedDate = Expressions.stringTemplate( + "DATE_FORMAT({0}, {1})" + , qFltPlanBas.createDt + , ConstantImpl.create(formatParam[0])); + + StringTemplate formattedDate2 = Expressions.stringTemplate( + "DATE_FORMAT({0}, {1})" + , qFltPlanBas.createDt + , ConstantImpl.create(formatParam[1])); + + BooleanBuilder builder = new BooleanBuilder(); + if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); + + List result = query + .select( + Projections.bean( + FlightStcsValueModel.class , + formattedDate2.as("name"), + qFltPlanBas.planSno.count().as("value") + ) + ) + .from(qFltPlanBas) + .where(builder) + .groupBy(formattedDate2) + .fetch(); + + if(result.size() <= 0){ + FlightStcsValueModel node = new FlightStcsValueModel(); + + node.setName("-"); + node.setValue("NoData"); + + result.add(node); + } + + return result; + } + + /** + * 비행승인 통계 카테고리 비행승인 + * @param date + * @param formatParam + * @return + */ + public List fltPlanAprvnStcs(String date, String[] formatParam){ + // QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas; + + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; + + StringTemplate formattedDate = Expressions.stringTemplate( + "DATE_FORMAT({0}, {1})" + , qFltPlanBas.createDt + , ConstantImpl.create(formatParam[0])); + + StringTemplate formattedDate2 = Expressions.stringTemplate( + "DATE_FORMAT({0}, {1})" + , qFltPlanBas.createDt + , ConstantImpl.create(formatParam[1])); + + BooleanBuilder builder = new BooleanBuilder(); + if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); + builder.and(qFltPlanBas.aprvlYn.eq("Y")); + + List result = query + .select( + Projections.bean( + FlightStcsValueModel.class , + formattedDate2.as("name"), + qFltPlanBas.planSno.count().as("value") + ) + ) + .from(qFltPlanBas) + .where(builder) + .groupBy(formattedDate2) + .fetch(); + + if(result.size() <= 0){ + FlightStcsValueModel node = new FlightStcsValueModel(); + + node.setName("-"); + node.setValue("NoData"); + result.add(node); + } + + return result; + } + + + /** + * 비행 실적, 날짜데이터에 맞춘 TOP5 + * @param date + * @param formatParam + * @return + */ + public List fltTopResultStcs(String date, String[] formatParam){ + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; + + StringTemplate formattedDate = Expressions.stringTemplate( + "DATE_FORMAT({0}, {1})" + , qFltPlanBas.createDt + , ConstantImpl.create(formatParam[0])); + + BooleanBuilder builder = new BooleanBuilder(); + if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); + + List result = query + .select( + Projections.bean(FlightStcsValueModel.class, + qFltPlanCtrCntrlRel.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정 + qFltPlanCtrCntrlRel.planSno.countDistinct().as("value") + ) + ) + .from(qFltPlanCtrCntrlRel) + .leftJoin(qFltPlanBas) + .on(qFltPlanBas.planSno.eq(qFltPlanCtrCntrlRel.planSno)) + .where(builder) + .orderBy(qFltPlanCtrCntrlRel.planSno.countDistinct().desc()) + .limit(5) + .fetch(); + + if(result.size() <= 0){ + FlightStcsValueModel node = new FlightStcsValueModel(); + + node.setName("-"); + node.setValue("NoData"); + + result.add(node); + } + + return result; + } + + /** + * 비행 실적, 날짜데이터에 맞춘 TOP5 + * @param date + * @param formatParam + * @return + */ + public List fltTopPlanStcs(String date, String[] formatParam){ + + QFltPlanArcrft qFltPlanArcrft = QFltPlanArcrft.fltPlanArcrft; + + StringTemplate formattedDate = Expressions.stringTemplate( + "DATE_FORMAT({0}, {1})" + , qFltPlanArcrft.createDt + , ConstantImpl.create(formatParam[0])); + + BooleanBuilder builder = new BooleanBuilder(); + if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); + + List result = query + .select( + Projections.bean(FlightStcsValueModel.class, + qFltPlanArcrft.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정 + qFltPlanArcrft.planSno.countDistinct().as("value") + ) + ) + .from(qFltPlanArcrft) + .where(builder) + .orderBy(qFltPlanArcrft.planSno.countDistinct().desc()) + .limit(5) + .fetch(); + + if(result.size() <= 0){ + FlightStcsValueModel node = new FlightStcsValueModel(); + + node.setName("-"); + node.setValue("NoData"); + + result.add(node); + } + + return result; + } + + /** + * 비행 실적, 날짜데이터에 맞춘 TOP5 + * @param date + * @param formatParam + * @return + */ + public List fltTopPlanAprvnStcs(String date, String[] formatParam){ + + QFltPlanArcrft qFltPlanArcrft = QFltPlanArcrft.fltPlanArcrft; + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; + + StringTemplate formattedDate = Expressions.stringTemplate( + "DATE_FORMAT({0}, {1})" + , qFltPlanBas.createDt + , ConstantImpl.create(formatParam[0])); + + BooleanBuilder builder = new BooleanBuilder(); + if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); + builder.and(qFltPlanBas.aprvlYn.eq("Y")); + + List result = query + .select( + Projections.bean(FlightStcsValueModel.class, + qFltPlanArcrft.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정 + qFltPlanArcrft.planSno.countDistinct().as("value") + ) + ) + .from(qFltPlanArcrft) + .leftJoin(qFltPlanBas) + .on(qFltPlanArcrft.planSno.eq(qFltPlanBas.planSno)) + .where(builder) + .groupBy(qFltPlanArcrft.idntfNum) + .orderBy(qFltPlanArcrft.planSno.countDistinct().desc()) + .limit(5) + .fetch(); + + if(result.size() <= 0){ + FlightStcsValueModel node = new FlightStcsValueModel(); + + node.setName("-"); + node.setValue("NoData"); + + result.add(node); + } + + return result; + } } \ No newline at end of file