From 1a81341c7f6714247b30c6bda74c0796dbd6d61d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?lkd9125=28=EC=9D=B4=EA=B2=BD=EB=8F=84=29?= Date: Wed, 8 Nov 2023 19:35:38 +0900 Subject: [PATCH] =?UTF-8?q?=ED=86=B5=EA=B3=84=20API,=20=EB=B9=84=ED=96=89?= =?UTF-8?q?=EC=83=81=EB=8B=A8=20=EA=B3=A0=EC=A0=95=20=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=20API=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dash/controller/MainDashController.java | 50 ++++++ .../dash/model/FlightStaticStcsModel.java | 12 ++ .../main/dash/service/MainDashService.java | 38 +++++ .../repository/ctr/CtrCntrlBasRepository.java | 2 + .../ctr/CtrCntrlQueryRepository.java | 156 ++++++++++++++++++ .../ctr/service/CtrSchedulerService.java | 1 + 6 files changed, 259 insertions(+) create mode 100644 pav-server/src/main/java/com/palnet/biz/api/main/dash/model/FlightStaticStcsModel.java 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 2084b054..40339a9e 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 @@ -20,6 +20,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.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.api.main.dash.service.MainDashService; @@ -169,6 +170,7 @@ public class MainDashController { @ApiImplicitParam(name = "date",value = "날짜", dataTypeClass = String.class), @ApiImplicitParam(name = "type",value = "날짜형식", dataTypeClass = String.class) }) + @Deprecated public ResponseEntity flightStatistics(String date, @PathVariable String type){ String[] formatParam = null; @@ -202,6 +204,7 @@ public class MainDashController { @ApiImplicitParam(name = "date",value = "날짜", dataTypeClass = String.class), @ApiImplicitParam(name = "type",value = "날짜형식", dataTypeClass = String.class) }) + @Deprecated public ResponseEntity planAllowStatistics(String date ,@PathVariable String type){ String[] formatParam = null; @@ -236,6 +239,7 @@ public class MainDashController { @ApiImplicitParam(name = "type",value = "날짜형식", dataTypeClass = String.class), @ApiImplicitParam(name = "idntfNum",value = "드론식별번호", dataTypeClass = String.class), }) + @Deprecated public ResponseEntity droneFlightStatistics(String date, @RequestParam(required = true) String idntfNum, @PathVariable String type){ log.info("idntfNum -> {}", idntfNum); @@ -270,6 +274,7 @@ public class MainDashController { @ApiImplicitParam(name = "date",value = "날짜", dataTypeClass = String.class), @ApiImplicitParam(name = "type",value = "날짜형식", dataTypeClass = String.class) }) + @Deprecated public ResponseEntity warningFlightStatistics(String date, @PathVariable String type){ String[] formatParam = null; @@ -296,4 +301,49 @@ public class MainDashController { return ResponseEntity.ok().body(new SuccessResponse>(result)); } + @GetMapping("/stcs/flight-static") + @ApiOperation(value = "비행통계 상단 데이터[DB전체 통계데이터]") + @Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API") + public ResponseEntity statisticsStatic(){ + + List result = null; + + try { + result = service.getFlightStaticStcs(); + + 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/flight/{type}") + public ResponseEntity statistics(@RequestParam String cate, @RequestParam String date, @PathVariable String type){ + log.warn("cate => {}, date => {}, type => {}", cate, date, type); + + List result = null; + + try { + String[] formatParam = null; + + if(date == null) date = ""; + formatParam = service.paramCheck(date,type); + + + + + 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/model/FlightStaticStcsModel.java b/pav-server/src/main/java/com/palnet/biz/api/main/dash/model/FlightStaticStcsModel.java new file mode 100644 index 00000000..639c851e --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/api/main/dash/model/FlightStaticStcsModel.java @@ -0,0 +1,12 @@ +package com.palnet.biz.api.main.dash.model; + +import lombok.Data; + +@Data +public class FlightStaticStcsModel { + + private String name; + + private Object value; + +} 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 72235f74..f0939fcf 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 @@ -1,6 +1,7 @@ package com.palnet.biz.api.main.dash.service; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -9,17 +10,22 @@ import java.util.stream.Collectors; import com.palnet.biz.api.bas.group.model.BasGroupModel; import com.palnet.biz.jpa.repository.pty.*; +import lombok.extern.slf4j.Slf4j; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; 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.repository.ctr.CtrCntrlBasRepository; import com.palnet.biz.jpa.repository.ctr.CtrCntrlQueryRepository; import com.palnet.biz.jpa.repository.flt.FltPlanQueryRepository; @Service +@Slf4j public class MainDashService { private Logger logger = LoggerFactory.getLogger(getClass()); @@ -36,6 +42,9 @@ public class MainDashService { @Autowired private CtrCntrlQueryRepository query; + @Autowired + private CtrCntrlBasRepository cntrlBasRepository; + @@ -215,4 +224,33 @@ public class MainDashService { return result; } + + /** + * 비행관련 고정 통계, 항상 DB 전체값에서 통계진행할것임 + * @return + */ + public List getFlightStaticStcs(){ + + FlightStaticStcsModel time = query.getFlightTimeStcs(); + FlightStaticStcsModel distance = query.getFlightDistanceStcs(); + FlightStaticStcsModel fltCount = query.getFlightCountStcs(); + + List result = Arrays.asList(time, distance, fltCount); + + return result; + } + + /** + * 김포공항, 비정상상황 통계 + * @param idntfNum + * @param date + * @param formatParam + * @return + */ + public List statics(String date, String[] formatParam){ + + List resultList = query.fltTimeStcs(date, formatParam); + + return resultList; + } } diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlBasRepository.java b/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlBasRepository.java index f9db9bdc..8b48485c 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlBasRepository.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlBasRepository.java @@ -6,6 +6,7 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import com.palnet.biz.api.main.dash.model.FlightStaticStcsModel; import com.palnet.biz.jpa.entity.CtrCntrlBas; import org.springframework.transaction.annotation.Transactional; @@ -45,4 +46,5 @@ public interface CtrCntrlBasRepository extends JpaRepository listCntrlHstry(String id){ , bas.cntrlStDt , ConstantImpl.create(formatParam[1])); + + // result[0] = "%Y"; + // result[1] = "%m"; + BooleanBuilder builder = new BooleanBuilder(); builder.and(bas.statusCd.eq("99")); if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); @@ -1818,4 +1826,152 @@ public List listCntrlHstry(String id){ return result; } + + /** + * DB 데이터내에 가장 많은 비행시간을 가진 기체, 비행시간 SELECT + * @return + */ + public FlightStaticStcsModel getFlightTimeStcs(){ + FlightStaticStcsModel result = new FlightStaticStcsModel(); + + QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas; + + List queryResult = query + .select( + Projections.bean(FlightStaticStcsModel.class, + qCtrCntrlBas.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정 + Expressions.stringTemplate( + "CONCAT(SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF({0}, {1})))))", + qCtrCntrlBas.cntrlEndDt, + qCtrCntrlBas.cntrlStDt + ).as("value") // 결과 객체의 프로퍼티 이름을 지정 + ) + ) + .from(qCtrCntrlBas) + .groupBy(qCtrCntrlBas.idntfNum) + .orderBy(Expressions.stringTemplate( + "SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF({0}, {1}))))", + qCtrCntrlBas.cntrlEndDt, + qCtrCntrlBas.cntrlStDt + ).desc()) + .limit(1) + .fetch(); + + if(queryResult.size() > 0){ + result = queryResult.get(0); + } + + return result; + } + + /** + * 가장 많이 이동한 기체 + * @return + */ + public FlightStaticStcsModel getFlightDistanceStcs(){ + FlightStaticStcsModel result = new FlightStaticStcsModel(); + + QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas; + + List queryResult = query + .select( + Projections.bean(FlightStaticStcsModel.class, + qCtrCntrlBas.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정 + qCtrCntrlBas.ttlDstnc.sum().as("value") + ) + ) + .from(qCtrCntrlBas) + .groupBy(qCtrCntrlBas.idntfNum) + .orderBy(qCtrCntrlBas.ttlDstnc.sum().desc()) + .limit(1) + .fetch(); + + if(queryResult.size() > 0){ + result = queryResult.get(0); + } + + return result; + } + + /** + * 가장 많이 비행한 기체 + * @return + */ + public FlightStaticStcsModel getFlightCountStcs(){ + FlightStaticStcsModel result = new FlightStaticStcsModel(); + + QCtrCntrlBas qCtrCntrlBas = QCtrCntrlBas.ctrCntrlBas; + + List queryResult = query + .select( + Projections.bean(FlightStaticStcsModel.class, + qCtrCntrlBas.idntfNum.as("name"), // 결과 객체의 프로퍼티 이름을 지정 + qCtrCntrlBas.cntrlId.count().as("value") + ) + ) + .from(qCtrCntrlBas) + .groupBy(qCtrCntrlBas.idntfNum) + .orderBy(qCtrCntrlBas.cntrlId.count().desc()) + .limit(1) + .fetch(); + + if(queryResult.size() > 0){ + result = queryResult.get(0); + } + + return result; + } + + + /** + * 비행통계 카테고리 시간 + * @param date + * @param formatParam + * @return + */ + public List fltTimeStcs(String date, String[] formatParam){ + // QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas; + QCtrCntrlBas bas = QCtrCntrlBas.ctrCntrlBas; + + 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(); + if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); + + List result = query + .select( + Projections.bean( + FlightStaticStcsModel.class , + formattedDate2.as("name"), + Expressions.stringTemplate( + "CONCAT(SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF({0}, {1})))))", + bas.cntrlEndDt, + bas.cntrlStDt + ).as("value") + ) + ) + .from(bas) + .where(builder) + .groupBy(formattedDate2) + .fetch(); + + if(result.size() <= 0){ + FlightStaticStcsModel node = new FlightStaticStcsModel(); + + node.setName(null); + node.setValue("NoData"); + + result.add(node); + } + + return result; + } } diff --git a/pav-server/src/main/java/com/palnet/biz/scheduler/ctr/service/CtrSchedulerService.java b/pav-server/src/main/java/com/palnet/biz/scheduler/ctr/service/CtrSchedulerService.java index 8269ea43..b2756d23 100644 --- a/pav-server/src/main/java/com/palnet/biz/scheduler/ctr/service/CtrSchedulerService.java +++ b/pav-server/src/main/java/com/palnet/biz/scheduler/ctr/service/CtrSchedulerService.java @@ -71,6 +71,7 @@ public class CtrSchedulerService { ctrCntrlHstryAreaRepository.save(area); + // 총 비행거리 Update Double distance = getDistancSum(history.getCntrlId()); if(distance == null) log.error("No Search - CntrlId => {}", history.getCntrlId());