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] =?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; + } + }