diff --git a/pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java b/pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java index 7b2c8a1..f833185 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java +++ b/pav-server/src/main/java/com/palnet/biz/api/main/dash/controller/MainDashController.java @@ -305,7 +305,7 @@ public class MainDashController { @GetMapping("/stcs/flight-static") @ApiOperation(value = "비행통계 상단 데이터[DB전체 통계데이터]") @Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API") - public ResponseEntity statisticsStatic(){ + public ResponseEntity fltStcsStatic(){ List result = null; @@ -330,7 +330,7 @@ public class MainDashController { @ApiImplicitParam(name = "cate",value = "비행시간,거리,횟수[TIME]", dataTypeClass = String.class), @ApiImplicitParam(name = "type",value = "날짜형식[month]", dataTypeClass = String.class) }) - public ResponseEntity statistics(@RequestParam String cate, String date, @PathVariable String type){ + public ResponseEntity fltStcs(@RequestParam String cate, String date, @PathVariable String type){ log.warn("cate => {}, date => {}, type => {}", cate, date, type); FlightStcsModel result = new FlightStcsModel(); @@ -356,5 +356,64 @@ public class MainDashController { return ResponseEntity.ok().body(new SuccessResponse(result)); } + + + + @GetMapping("/stcs/warn-static") + @ApiOperation(value = "비정상 상황 상단 데이터[DB전체 통계데이터]") + @Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API") + public ResponseEntity warnStcsStatic(){ + + List result = null; + + try { + result = service.getWarnStaticStcs(); + + 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)); + } + + @GetMapping("/stcs/warn/{type}") + @ApiOperation(value = "비정상상황 cate = ['PLAN' ,'ALTITUDE', 'CRASH'], type=['year','month','day','one-day']") + @Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API") + @ApiImplicitParams({ + @ApiImplicitParam(name = "date",value = "날짜[2023]", dataTypeClass = String.class), + @ApiImplicitParam(name = "cate",value = "비행시간,거리,횟수[TIME]", dataTypeClass = String.class), + @ApiImplicitParam(name = "type",value = "날짜형식[month]", dataTypeClass = String.class) + }) + public ResponseEntity warnStcs(@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.fltStatics(cate, date, formatParam); + List topData = service.fltTopStatics(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/dash/service/MainDashService.java b/pav-server/src/main/java/com/palnet/biz/api/main/dash/service/MainDashService.java index ad87d60..4a546d6 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/main/dash/service/MainDashService.java +++ b/pav-server/src/main/java/com/palnet/biz/api/main/dash/service/MainDashService.java @@ -20,6 +20,7 @@ import org.springframework.stereotype.Service; import com.palnet.biz.api.main.dash.model.FlightStaticStcsModel; import com.palnet.biz.api.main.dash.model.MainDashListModel; import com.palnet.biz.api.main.dash.model.MainDashStcsModel; +import com.palnet.biz.jpa.entity.type.WarnType; import com.palnet.biz.jpa.repository.ctr.CtrCntrlBasRepository; import com.palnet.biz.jpa.repository.ctr.CtrCntrlQueryRepository; import com.palnet.biz.jpa.repository.flt.FltPlanQueryRepository; @@ -289,4 +290,26 @@ public class MainDashService { return resultList; } + + /** + * 비행관련 고정 통계, 항상 DB 전체값에서 통계진행할것임 + * @return + */ + public List getWarnStaticStcs(){ + + // TODO:: 비행경로이탈, 고도이탈, 충돌위험 임시코드 + String[] cate = {"PLAN" ,"ALTITUDE", "CRASH"}; + // String[] cate = {WarnType.PLAN.getValue() ,WarnType.ALTITUDE.getValue(), WarnType.CRASH.getValue()}; + + List result = new ArrayList<>(); + + for(int i = 0; i < cate.length; i ++){ + FlightStaticStcsModel node = query.getWarnStaticStcs(cate[i]); + result.add(node); + } + + return result; + } + + } diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/entity/type/WarnType.java b/pav-server/src/main/java/com/palnet/biz/jpa/entity/type/WarnType.java new file mode 100644 index 0000000..77c13c0 --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/jpa/entity/type/WarnType.java @@ -0,0 +1,31 @@ +package com.palnet.biz.jpa.entity.type; + +import com.fasterxml.jackson.annotation.JsonCreator; + +import lombok.Getter; + +@Getter +public enum WarnType { + + PLAN("PLAN"), + ALTITUDE("ALTITUDE"), + CRASH("CRASH"), + ; + + + private final String value; + + WarnType(String value) { + this.value = value; + } + + @JsonCreator + public static WarnType fromCode(String code) { + for (WarnType warnType : WarnType.values()) { + if (warnType.getValue().equals(code)) { + return warnType; + } + } + return null; + } +} 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 6bc95b5..45424c9 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 @@ -2207,4 +2207,40 @@ public List 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 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); + } + + return result; + } + + + }