From a527959cf25a8d7f56091bf76e4886f91affc2fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?hagjoon=28=EC=9D=B4=ED=95=99=EC=A4=80=29?= Date: Tue, 14 Nov 2023 17:58:45 +0900 Subject: [PATCH 1/6] =?UTF-8?q?[=EB=A9=94=EC=9D=B8]=20=EC=9D=BC=EC=9D=BC?= =?UTF-8?q?=20=EB=B9=84=ED=96=89=ED=9A=9F=EC=88=98=20=ED=98=84=ED=99=A9=20?= =?UTF-8?q?:=20=EB=B9=84=ED=96=89=EA=B3=84=ED=9A=8D=EC=84=9C=20=EC=8A=B9?= =?UTF-8?q?=EC=9D=B8=20=ED=95=AD=EB=AA=A9=20=EC=9E=91=EC=97=85=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dash/controller/MainDashController.java | 16 +++++++- .../model/MainDashFlightNumStcsModel.java | 35 ++++++++++++++++ .../main/dash/service/MainDashService.java | 40 ++++++++++++++++++- .../repository/flt/FltPlanBasRepository.java | 3 ++ 4 files changed, 91 insertions(+), 3 deletions(-) create mode 100644 pav-server/src/main/java/com/palnet/biz/api/main/dash/model/MainDashFlightNumStcsModel.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 f139250c..712e6995 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 @@ -3,6 +3,7 @@ package com.palnet.biz.api.main.dash.controller; import java.util.List; import java.util.Map; +import com.palnet.biz.api.main.dash.model.MainDashFlightNumStcsModel; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -162,7 +163,7 @@ public class MainDashController { } - + @GetMapping(value = "/stcs/flight/date/{type}") @ApiOperation(value = "김포공항, 비행실적 통계") @Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API") @@ -319,6 +320,19 @@ public class MainDashController { return ResponseEntity.ok().body(new SuccessResponse>(result)); } + @GetMapping("/stcs/dailyflight") + @ApiOperation(value = "일일 비행횟수 현황") + @Tag(name = "메인화면 컨트롤러",description = "메인화면 관련 API") + public ResponseEntity getDailyFlightNumOfStcs(){ + List result = null; + try { + result = service.dailyFlightNumOfStcs(); + }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/MainDashFlightNumStcsModel.java b/pav-server/src/main/java/com/palnet/biz/api/main/dash/model/MainDashFlightNumStcsModel.java new file mode 100644 index 00000000..c93bc60d --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/api/main/dash/model/MainDashFlightNumStcsModel.java @@ -0,0 +1,35 @@ +package com.palnet.biz.api.main.dash.model; + +import io.swagger.annotations.ApiParam; +import lombok.Data; + +/** + * packageName : com.palnet.biz.api.main.dash.model + * fileName : MainDashFlightNumStcsModel + * author : hagjoon + * date : 2023-11-13 + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2023-11-13 hagjoon 최초 생성 + */ +@Data +public class MainDashFlightNumStcsModel { + + @ApiParam(value = "구분",example = "전일(어제), 금일(오늘), 명일(내일)") + private String dateType = ""; + + @ApiParam(value = "계획",example = "전일(어제), 금일(오늘), 명일(내일) 비행계획서 목록") + private long flightPlan = 0; + + @ApiParam(value = "비행 완료",example = "전일(어제), 금일(오늘), 명일(내일) 비행완료 목록") + private long completeFlight = 0; + + @ApiParam(value = "미 비행",example = "전일(어제), 금일(오늘), 명일(내일) 미 비행 목록") + private long notFlight = 0; + + @ApiParam(value = "비고",example = "전일(어제), 금일(오늘), 명일(내일) 비고") + private int note = 0; + +} 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 9f0f8238..ac0caa5b 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,5 +1,7 @@ package com.palnet.biz.api.main.dash.service; +import java.time.Instant; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -9,6 +11,9 @@ import java.util.stream.Collectors; import com.palnet.biz.api.acnt.jwt.model.JwtGroupModel; import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; import com.palnet.biz.api.bas.group.model.BasGroupModel; +import com.palnet.biz.api.main.dash.model.MainDashFlightNumStcsModel; +import com.palnet.biz.jpa.entity.FltPlanBas; +import com.palnet.biz.jpa.repository.flt.FltPlanBasRepository; import com.palnet.biz.jpa.repository.pty.*; import lombok.extern.slf4j.Slf4j; @@ -28,7 +33,9 @@ import com.palnet.biz.jpa.repository.flt.FltPlanQueryRepository; @Service @Slf4j public class MainDashService { - + @Autowired + private FltPlanBasRepository fltPlanBasRepository; + private Logger logger = LoggerFactory.getLogger(getClass()); @Autowired @@ -250,6 +257,35 @@ public class MainDashService { } return result; - } + } + + public List dailyFlightNumOfStcs(){ + // 1. 전일 , 금일, 명일(내일) + Instant yesterday = Instant.now().minus(1, ChronoUnit.DAYS); + Instant today = Instant.now(); + Instant tomorrow = Instant.now().plus(1, ChronoUnit.DAYS); + + long yesterdayCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", yesterday, today); + log.info("yesterdayCount : {}", yesterdayCount); + long todayCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", today, today.plus(1, ChronoUnit.DAYS)); + log.info("todayCount : {}", todayCount); + long tomorrowCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", tomorrow, tomorrow.plus(1, ChronoUnit.DAYS)); + log.info("tomorrowCount : {} ", tomorrowCount); + + // 카운트와 함께 MainDashFlightNumStcsModel 인스턴스 생성 + List result = new ArrayList<>(); + result.add(createModel("yesterday", yesterdayCount)); + result.add(createModel("today", todayCount)); + result.add(createModel("tomorrow", tomorrowCount)); + + return result; + } + + private MainDashFlightNumStcsModel createModel(String dateType, long flightPlanCount) { + MainDashFlightNumStcsModel model = new MainDashFlightNumStcsModel(); + model.setDateType(dateType); + model.setFlightPlan(flightPlanCount); + return model; + } } diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanBasRepository.java b/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanBasRepository.java index 94b07a4d..5d91b400 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanBasRepository.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanBasRepository.java @@ -53,5 +53,8 @@ public interface FltPlanBasRepository extends JpaRepository "and f.aprvlYn = 'Y' ") List findBasList(@Param("planSno") int planSno); + @Query("SELECT f FROM FltPlanBas f WHERE f.aprvlYn = 'Y' AND f.aprvlDt IS NOT NULL AND f.aprvlDt >= :startDate AND f.aprvlDt < :endDate") + List findApprovedFlightPlansByApprovalDate(Instant startDate, Instant endDate); + long countByAprvlYnAndAprvlDtBetween(String aprvlYn, Instant startDate, Instant endDate); } -- 2.30.3 From f06c7fca310d5c5429f23bcdf0f076117ead1370 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?hagjoon=28=EC=9D=B4=ED=95=99=EC=A4=80=29?= Date: Tue, 14 Nov 2023 18:23:11 +0900 Subject: [PATCH 2/6] =?UTF-8?q?[=EB=A9=94=EC=9D=B8]=20=EC=9D=BC=EC=9D=BC?= =?UTF-8?q?=20=EB=B9=84=ED=96=89=ED=9A=9F=EC=88=98=20=ED=98=84=ED=99=A9=20?= =?UTF-8?q?:=20=EB=B9=84=ED=96=89=EA=B3=84=ED=9A=8D=EC=84=9C=20=EC=8A=B9?= =?UTF-8?q?=EC=9D=B8=20=ED=95=AD=EB=AA=A9=20=ED=91=9C=EC=B6=9C=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/dash/service/MainDashService.java | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) 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 ac0caa5b..ce9f3709 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 @@ -261,16 +261,21 @@ public class MainDashService { public List dailyFlightNumOfStcs(){ // 1. 전일 , 금일, 명일(내일) - Instant yesterday = Instant.now().minus(1, ChronoUnit.DAYS); - Instant today = Instant.now(); - Instant tomorrow = Instant.now().plus(1, ChronoUnit.DAYS); - - long yesterdayCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", yesterday, today); - log.info("yesterdayCount : {}", yesterdayCount); - long todayCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", today, today.plus(1, ChronoUnit.DAYS)); - log.info("todayCount : {}", todayCount); - long tomorrowCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", tomorrow, tomorrow.plus(1, ChronoUnit.DAYS)); - log.info("tomorrowCount : {} ", tomorrowCount); + Instant yesterdayStart = Instant.now().minus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS); + Instant yesterdayEnd = Instant.now().truncatedTo(ChronoUnit.DAYS).minus(1, ChronoUnit.SECONDS); + Instant todayStart = Instant.now().truncatedTo(ChronoUnit.DAYS); + Instant todayEnd = Instant.now().plus(1, ChronoUnit.DAYS).minus(1, ChronoUnit.SECONDS); + Instant tomorrowStart = Instant.now().plus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS); + Instant tomorrowEnd = Instant.now().plus(2, ChronoUnit.DAYS).minus(1, ChronoUnit.SECONDS); + + long yesterdayCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", yesterdayStart, yesterdayEnd); + log.info("yesterdayCount: {}", yesterdayCount); + + long todayCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", todayStart, todayEnd); + log.info("todayCount: {}", todayCount); + + long tomorrowCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", tomorrowStart, tomorrowEnd); + log.info("tomorrowCount: {}", tomorrowCount); // 카운트와 함께 MainDashFlightNumStcsModel 인스턴스 생성 List result = new ArrayList<>(); -- 2.30.3 From 2aa5f8450592a80f28dec642a83c74cf1e3db761 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?leehagjoon=28=EC=9D=B4=ED=95=99=EC=A4=80=29?= Date: Wed, 15 Nov 2023 15:00:47 +0900 Subject: [PATCH 3/6] =?UTF-8?q?[=EB=A9=94=EC=9D=B8]=20=EC=9D=BC=EC=9D=BC?= =?UTF-8?q?=20=EB=B9=84=ED=96=89=ED=9A=9F=EC=88=98=20=ED=98=84=ED=99=A9=20?= =?UTF-8?q?-=20=EB=B9=84=ED=96=89=EC=99=84=EB=A3=8C,=20=EB=AF=B8=20?= =?UTF-8?q?=EB=B9=84=ED=96=89,=20=EB=B9=84=EA=B3=A0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/MainDashFlightNumStcsModel.java | 2 +- .../main/dash/service/MainDashService.java | 45 ++++++++++++--- .../ctr/CtrCntrlQueryRepository.java | 57 ++++++++++++++++++- 3 files changed, 95 insertions(+), 9 deletions(-) diff --git a/pav-server/src/main/java/com/palnet/biz/api/main/dash/model/MainDashFlightNumStcsModel.java b/pav-server/src/main/java/com/palnet/biz/api/main/dash/model/MainDashFlightNumStcsModel.java index c93bc60d..29cf8009 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/main/dash/model/MainDashFlightNumStcsModel.java +++ b/pav-server/src/main/java/com/palnet/biz/api/main/dash/model/MainDashFlightNumStcsModel.java @@ -30,6 +30,6 @@ public class MainDashFlightNumStcsModel { private long notFlight = 0; @ApiParam(value = "비고",example = "전일(어제), 금일(오늘), 명일(내일) 비고") - private int note = 0; + private double note = 0; } 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 ce9f3709..02ea506a 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 @@ -268,28 +268,59 @@ public class MainDashService { Instant tomorrowStart = Instant.now().plus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS); Instant tomorrowEnd = Instant.now().plus(2, ChronoUnit.DAYS).minus(1, ChronoUnit.SECONDS); + // 2. 비행계획서 승인 항목 : 비행계획서 제출기준(승인된 건수로봐도 동일) long yesterdayCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", yesterdayStart, yesterdayEnd); log.info("yesterdayCount: {}", yesterdayCount); - long todayCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", todayStart, todayEnd); log.info("todayCount: {}", todayCount); - long tomorrowCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", tomorrowStart, tomorrowEnd); log.info("tomorrowCount: {}", tomorrowCount); - // 카운트와 함께 MainDashFlightNumStcsModel 인스턴스 생성 + // 3. 비행 완료 항목 : 실제 비행이 완료된 건수 + long yesterdayCompleteCount = query.completeFlight(yesterdayStart,yesterdayEnd).size(); + log.info("yesterdayCompleteCount: {}", yesterdayCompleteCount); + long todayCompleteCount = query.completeFlight(todayStart,todayEnd).size(); + log.info("todayCompleteCount: {}", todayCompleteCount); + long tomorrowCompleteCount = query.completeFlight(tomorrowStart,tomorrowEnd).size(); + log.info("tomorrowCompleteCount: {}", tomorrowCompleteCount); + + // 4. 미 비행 항목 : 비행계획서는 제출했으나,실제 비행안한 건수 + long yesterdayNotFlight = query.notFlight(yesterdayStart,yesterdayEnd).size(); + log.info("yesterdayNotFlight : {} ", yesterdayNotFlight); + long todayNotFlight = query.notFlight(todayStart, todayEnd).size(); + log.info("todayNotFlight : {} ", todayNotFlight); + long tomorrowNotFlight = query.notFlight(tomorrowStart,tomorrowEnd).size(); + log.info("tomorrowNotFlight : {} ", tomorrowNotFlight); + + // 5. 비고 : 비행 완료 건수를 기준으로 상승 또는 하락폭 적용 + // ex) 오늘 기준 오늘은 어제의 비행 완료 건수를 비교해서 적용 + // 전일(어제)은 2일전 비행 완료 건수를 비교해서 적용 + // 명일(내일)은 오늘 비행 완료 건수를 비교해서 적용 + long yesterdayNote = yesterdayCompleteCount - query.completeFlight(yesterdayStart.minus(1, ChronoUnit.DAYS), yesterdayEnd.minus(1, ChronoUnit.DAYS)).size(); + double yesterdayNotePercent = yesterdayCompleteCount != 0 ? ((double) yesterdayNote / yesterdayCompleteCount) * 100.0 : 0.0; + log.info("yesterdayNotePercent: {} ", yesterdayNotePercent); + double todayNotePercent = yesterdayCompleteCount != 0 ? ((double)(todayCompleteCount - yesterdayCompleteCount) / yesterdayCompleteCount) * 100.0 : 0.0; + log.info("todayNotePercent: {} ", todayNotePercent); + double tomorrowNotePercent = todayCompleteCount != 0 ? ((double) (tomorrowCompleteCount - todayCompleteCount) / todayCompleteCount) * 100.0 : 0.0; + log.info("tomorrowNotePercent: {} ", tomorrowNotePercent); + + + List result = new ArrayList<>(); - result.add(createModel("yesterday", yesterdayCount)); - result.add(createModel("today", todayCount)); - result.add(createModel("tomorrow", tomorrowCount)); + result.add(createModel("yesterday", yesterdayCount,yesterdayCompleteCount,yesterdayNotFlight,yesterdayNotePercent)); + result.add(createModel("today", todayCount,todayCompleteCount,todayNotFlight,todayNotePercent)); + result.add(createModel("tomorrow", tomorrowCount,tomorrowCompleteCount,tomorrowNotFlight,tomorrowNotePercent)); return result; } - private MainDashFlightNumStcsModel createModel(String dateType, long flightPlanCount) { + private MainDashFlightNumStcsModel createModel(String dateType, long flightPlanCount, long completeCount, long notFlight, double note) { MainDashFlightNumStcsModel model = new MainDashFlightNumStcsModel(); model.setDateType(dateType); model.setFlightPlan(flightPlanCount); + model.setCompleteFlight(completeCount); + model.setNotFlight(notFlight); + model.setNote(note); return model; } 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 9e6491e1..3097bc6f 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 @@ -9,6 +9,8 @@ import java.util.Calendar; import java.util.Date; import java.util.List; +import com.palnet.biz.api.main.dash.model.MainDashFlightNumStcsModel; +import com.querydsl.core.Tuple; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.Cacheable; @@ -2570,7 +2572,60 @@ public List listCntrlHstry(String id){ } - + public List completeFlight(Instant start, Instant end) { + // Tuple 여러 값을 담을 수 있는 클래스, 여러 필드를 한꺼번에 반환해야 할 때 유용하다. + QFltPlanCtrCntrlRel fpccr = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas fpb = QFltPlanBas.fltPlanBas; + QCtrCntrlBas ccb = QCtrCntrlBas.ctrCntrlBas; + + return query + .select( + fpb.planSno, + fpb.aprvlYn, + fpb.aprvlDt, + ccb.cntrlId, + ccb.statusCd, + ccb.cntrlStDt, + ccb.cntrlEndDt + ) + .from(fpb) + .leftJoin(fpccr).on(fpb.planSno.eq(fpccr.planSno)) + .leftJoin(ccb).on(fpccr.cntrlId.eq(ccb.cntrlId)) + .where( + fpb.aprvlYn.eq("Y"), + fpccr.planSno.isNotNull(), + ccb.statusCd.eq("99"), + ccb.cntrlEndDt.between(start,end) + ) + .fetch(); + + } + + public List notFlight(Instant start, Instant end){ + QCtrCntrlBas ccb = QCtrCntrlBas.ctrCntrlBas; + QFltPlanCtrCntrlRel fpccr = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QFltPlanBas fpb = QFltPlanBas.fltPlanBas; + + return query + .select( + fpb.planSno, + fpb.aprvlYn, + fpb.aprvlDt, + ccb.cntrlId, + fpccr.cntrlId, + fpccr.planSno + ) + .from(fpb) + .leftJoin(fpccr).on(fpb.planSno.eq(fpccr.planSno)) + .leftJoin(ccb).on(fpccr.cntrlId.eq(ccb.cntrlId)) + .where( + fpb.aprvlYn.eq("Y"), + fpccr.planSno.isNull(), + ccb.cntrlEndDt.between(start, end), + fpb.aprvlDt.between(start, end) + ) + .fetch(); + } } -- 2.30.3 From 3d0209c0cbf4647e0cbbe042a71d8bc4c94a3f37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?leehagjoon=28=EC=9D=B4=ED=95=99=EC=A4=80=29?= Date: Wed, 15 Nov 2023 15:03:07 +0900 Subject: [PATCH 4/6] =?UTF-8?q?=EC=B6=A9=EB=8F=8C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dash/controller/MainDashController.java | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) 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 1e4a1346..55af27ba 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 @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import com.palnet.biz.api.main.dash.model.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -17,10 +18,6 @@ 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.MainCurrentStcsModel; -import com.palnet.biz.api.main.dash.model.MainDashFlightListModel; -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; import com.palnet.comn.code.RSErrorCode; import com.querydsl.core.Tuple; @@ -354,6 +351,20 @@ public class MainDashController { } return ResponseEntity.ok().body(new SuccessResponse>(result)); - } + } + + @GetMapping("/stcs/dailyflight") + @ApiOperation(value = "일일 비행횟수 현황") + @Tag(name = "메인화면 컨트롤러",description = "메인화면 관련 API") + public ResponseEntity getDailyFlightNumOfStcs(){ + List result = null; + try { + result = service.dailyFlightNumOfStcs(); + }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)); + } } -- 2.30.3 From d72ceca0d8004179c4f15b675fac474baa5eaa09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?leehagjoon=28=EC=9D=B4=ED=95=99=EC=A4=80=29?= Date: Wed, 15 Nov 2023 15:04:43 +0900 Subject: [PATCH 5/6] =?UTF-8?q?=EB=A1=9C=EA=B7=B8=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../biz/api/main/dash/service/MainDashService.java | 12 ------------ 1 file changed, 12 deletions(-) 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 8c597f2e..4223d7a4 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 @@ -304,27 +304,18 @@ public class MainDashService { // 2. 비행계획서 승인 항목 : 비행계획서 제출기준(승인된 건수로봐도 동일) long yesterdayCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", yesterdayStart, yesterdayEnd); - log.info("yesterdayCount: {}", yesterdayCount); long todayCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", todayStart, todayEnd); - log.info("todayCount: {}", todayCount); long tomorrowCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", tomorrowStart, tomorrowEnd); - log.info("tomorrowCount: {}", tomorrowCount); // 3. 비행 완료 항목 : 실제 비행이 완료된 건수 long yesterdayCompleteCount = query.completeFlight(yesterdayStart,yesterdayEnd).size(); - log.info("yesterdayCompleteCount: {}", yesterdayCompleteCount); long todayCompleteCount = query.completeFlight(todayStart,todayEnd).size(); - log.info("todayCompleteCount: {}", todayCompleteCount); long tomorrowCompleteCount = query.completeFlight(tomorrowStart,tomorrowEnd).size(); - log.info("tomorrowCompleteCount: {}", tomorrowCompleteCount); // 4. 미 비행 항목 : 비행계획서는 제출했으나,실제 비행안한 건수 long yesterdayNotFlight = query.notFlight(yesterdayStart,yesterdayEnd).size(); - log.info("yesterdayNotFlight : {} ", yesterdayNotFlight); long todayNotFlight = query.notFlight(todayStart, todayEnd).size(); - log.info("todayNotFlight : {} ", todayNotFlight); long tomorrowNotFlight = query.notFlight(tomorrowStart,tomorrowEnd).size(); - log.info("tomorrowNotFlight : {} ", tomorrowNotFlight); // 5. 비고 : 비행 완료 건수를 기준으로 상승 또는 하락폭 적용 // ex) 오늘 기준 오늘은 어제의 비행 완료 건수를 비교해서 적용 @@ -332,11 +323,8 @@ public class MainDashService { // 명일(내일)은 오늘 비행 완료 건수를 비교해서 적용 long yesterdayNote = yesterdayCompleteCount - query.completeFlight(yesterdayStart.minus(1, ChronoUnit.DAYS), yesterdayEnd.minus(1, ChronoUnit.DAYS)).size(); double yesterdayNotePercent = yesterdayCompleteCount != 0 ? ((double) yesterdayNote / yesterdayCompleteCount) * 100.0 : 0.0; - log.info("yesterdayNotePercent: {} ", yesterdayNotePercent); double todayNotePercent = yesterdayCompleteCount != 0 ? ((double)(todayCompleteCount - yesterdayCompleteCount) / yesterdayCompleteCount) * 100.0 : 0.0; - log.info("todayNotePercent: {} ", todayNotePercent); double tomorrowNotePercent = todayCompleteCount != 0 ? ((double) (tomorrowCompleteCount - todayCompleteCount) / todayCompleteCount) * 100.0 : 0.0; - log.info("tomorrowNotePercent: {} ", tomorrowNotePercent); -- 2.30.3 From efb8e810f3690cb946c375bd797526c0b722deb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?leehagjoon=28=EC=9D=B4=ED=95=99=EC=A4=80=29?= Date: Wed, 15 Nov 2023 15:38:37 +0900 Subject: [PATCH 6/6] =?UTF-8?q?=EC=B6=A9=EB=8F=8C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dash/controller/MainDashController.java | 20 ++++-- .../main/dash/service/MainDashService.java | 65 +++++++++++++++++-- 2 files changed, 77 insertions(+), 8 deletions(-) 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 cf4bde4b..a590825f 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 @@ -4,7 +4,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import com.palnet.biz.api.main.dash.model.MainCurrentStcsModel; +import com.palnet.biz.api.main.dash.model.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -18,9 +18,6 @@ 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.MainDashFlightListModel; -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; import com.palnet.comn.code.RSErrorCode; @@ -384,4 +381,19 @@ public class MainDashController { return ResponseEntity.ok().body(new SuccessResponse>(result)); } + + + @GetMapping("/stcs/dailyflight") + @ApiOperation(value = "일일 비행횟수 현황") + @Tag(name = "메인화면 컨트롤러",description = "메인화면 관련 API") + public ResponseEntity getDailyFlightNumOfStcs(){ + List result = null; + try { + result = service.dailyFlightNumOfStcs(); + }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 51fb56a5..93159598 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,14 +1,17 @@ package com.palnet.biz.api.main.dash.service; +import java.time.Instant; +import java.time.temporal.ChronoUnit; import java.util.*; import java.util.stream.Collectors; import com.palnet.biz.api.acnt.jwt.model.JwtGroupModel; import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; import com.palnet.biz.api.bas.group.model.BasGroupModel; -import com.palnet.biz.api.main.dash.model.MainCurrentStcsModel; +import com.palnet.biz.api.main.dash.model.*; import com.palnet.biz.api.main.statistics.service.MainStatisticsService; import com.palnet.biz.jpa.entity.FltPlanBas; +import com.palnet.biz.jpa.repository.flt.FltPlanBasRepository; import com.palnet.biz.jpa.repository.pty.*; import com.querydsl.core.Tuple; @@ -20,9 +23,6 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import com.palnet.biz.api.main.dash.model.MainDashFlightListModel; -import com.palnet.biz.api.main.dash.model.MainDashListModel; -import com.palnet.biz.api.main.dash.model.MainDashStcsModel; import com.palnet.biz.jpa.entity.CtrCntrlWarnLog; import com.palnet.biz.jpa.entity.type.WarnType; import com.palnet.biz.jpa.repository.ctr.CtrCntrlQueryRepository; @@ -56,6 +56,9 @@ public class MainDashService { @Autowired private FltPlanArcrftRepository fltPlanArcrftRepository; + + @Autowired + private FltPlanBasRepository fltPlanBasRepository; @Autowired private JwtTokenUtil token; @@ -378,4 +381,58 @@ public class MainDashService { return result; } + + public List dailyFlightNumOfStcs(){ + // 1. 전일 , 금일, 명일(내일) + Instant yesterdayStart = Instant.now().minus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS); + Instant yesterdayEnd = Instant.now().truncatedTo(ChronoUnit.DAYS).minus(1, ChronoUnit.SECONDS); + Instant todayStart = Instant.now().truncatedTo(ChronoUnit.DAYS); + Instant todayEnd = Instant.now().plus(1, ChronoUnit.DAYS).minus(1, ChronoUnit.SECONDS); + Instant tomorrowStart = Instant.now().plus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS); + Instant tomorrowEnd = Instant.now().plus(2, ChronoUnit.DAYS).minus(1, ChronoUnit.SECONDS); + + // 2. 비행계획서 승인 항목 : 비행계획서 제출기준(승인된 건수로봐도 동일) + long yesterdayCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", yesterdayStart, yesterdayEnd); + long todayCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", todayStart, todayEnd); + long tomorrowCount = fltPlanBasRepository.countByAprvlYnAndAprvlDtBetween("Y", tomorrowStart, tomorrowEnd); + + // 3. 비행 완료 항목 : 실제 비행이 완료된 건수 + long yesterdayCompleteCount = query.completeFlight(yesterdayStart,yesterdayEnd).size(); + long todayCompleteCount = query.completeFlight(todayStart,todayEnd).size(); + long tomorrowCompleteCount = query.completeFlight(tomorrowStart,tomorrowEnd).size(); + + // 4. 미 비행 항목 : 비행계획서는 제출했으나,실제 비행안한 건수 + long yesterdayNotFlight = query.notFlight(yesterdayStart,yesterdayEnd).size(); + long todayNotFlight = query.notFlight(todayStart, todayEnd).size(); + long tomorrowNotFlight = query.notFlight(tomorrowStart,tomorrowEnd).size(); + + // 5. 비고 : 비행 완료 건수를 기준으로 상승 또는 하락폭 적용 + // ex) 오늘 기준 오늘은 어제의 비행 완료 건수를 비교해서 적용 + // 전일(어제)은 2일전 비행 완료 건수를 비교해서 적용 + // 명일(내일)은 오늘 비행 완료 건수를 비교해서 적용 + long yesterdayNote = yesterdayCompleteCount - query.completeFlight(yesterdayStart.minus(1, ChronoUnit.DAYS), yesterdayEnd.minus(1, ChronoUnit.DAYS)).size(); + double yesterdayNotePercent = yesterdayCompleteCount != 0 ? ((double) yesterdayNote / yesterdayCompleteCount) * 100.0 : 0.0; + double todayNotePercent = yesterdayCompleteCount != 0 ? ((double)(todayCompleteCount - yesterdayCompleteCount) / yesterdayCompleteCount) * 100.0 : 0.0; + double tomorrowNotePercent = todayCompleteCount != 0 ? ((double) (tomorrowCompleteCount - todayCompleteCount) / todayCompleteCount) * 100.0 : 0.0; + + + + List result = new ArrayList<>(); + result.add(createModel("yesterday", yesterdayCount,yesterdayCompleteCount,yesterdayNotFlight,yesterdayNotePercent)); + result.add(createModel("today", todayCount,todayCompleteCount,todayNotFlight,todayNotePercent)); + result.add(createModel("tomorrow", tomorrowCount,tomorrowCompleteCount,tomorrowNotFlight,tomorrowNotePercent)); + + return result; + } + + private MainDashFlightNumStcsModel createModel(String dateType, long flightPlanCount, long completeCount, long notFlight, double note) { + MainDashFlightNumStcsModel model = new MainDashFlightNumStcsModel(); + model.setDateType(dateType); + model.setFlightPlan(flightPlanCount); + model.setCompleteFlight(completeCount); + model.setNotFlight(notFlight); + model.setNote(note); + return model; + } + } -- 2.30.3