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..92b74612 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.MainCurrentStcsModel; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -17,13 +18,11 @@ 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; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -52,7 +51,7 @@ public class MainDashController { @ApiImplicitParam(name = "yyyymm",value = "날짜", dataTypeClass = String.class) public ResponseEntity stcsDay(String yyyymm) { List result = null; - + // log.debug(yyyymm); //입력값 검증 @@ -356,4 +355,27 @@ public class MainDashController { return ResponseEntity.ok().body(new SuccessResponse>(result)); } + @GetMapping("/current/flight-plan") + @ApiOperation(value = "김포공항, 비정상상황 비행 통계") + @Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API") + @ApiImplicitParams({ + @ApiImplicitParam(name = "date",value = "날짜", dataTypeClass = String.class), + @ApiImplicitParam(name = "type",value = "날짜형식", dataTypeClass = String.class) + }) + public ResponseEntity currentFlightPlan(@RequestParam(required = false) String groupId){ + + log.warn("groupId => {}", groupId); + List result = new ArrayList<>(); + try { + result = service.currentFlightPlan(groupId); + } 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 0fe39c11..51fb56a5 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,18 +1,18 @@ 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; +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.statistics.service.MainStatisticsService; +import com.palnet.biz.jpa.entity.FltPlanBas; import com.palnet.biz.jpa.repository.pty.*; import com.querydsl.core.Tuple; +import com.querydsl.core.BooleanBuilder; import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; @@ -20,13 +20,10 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -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.statistics.service.MainStatisticsService; import com.palnet.biz.jpa.entity.CtrCntrlWarnLog; -import com.palnet.biz.jpa.entity.FltPlanBas; import com.palnet.biz.jpa.entity.type.WarnType; import com.palnet.biz.jpa.repository.ctr.CtrCntrlQueryRepository; import com.palnet.biz.jpa.repository.ctr.CtrCntrlWarnLogQueryRepository; @@ -52,17 +49,16 @@ public class MainDashService { private CtrCntrlWarnLogQueryRepository ctrCntrlWarnLogQueryRepository; @Autowired - private CtrCntrlQueryRepository query; + private CtrCntrlQueryRepository query; @Autowired - private FltPlanArcrftRepository fltPlanArcrftRepository; - - @Autowired - private JwtTokenUtil token; + private MainStatisticsService mainStatisticsService; @Autowired - private MainStatisticsService mainStatisticsService; + private FltPlanArcrftRepository fltPlanArcrftRepository; + @Autowired + private JwtTokenUtil token; /** * 일별 비행횟수 통계 @@ -284,7 +280,55 @@ public class MainDashService { } return result; - } + } + + + + public List currentFlightPlan(String groupId){ + final int sumCount = 2; // 2번은 합계 + + boolean authCheck = mainStatisticsService.authCheck(groupId); + + String[] dateCate = {"-2", "-1", "0", "1"}; // 2일전, 전일, 금일, 명일 + + List result = new ArrayList<>(); + + for(String cate : dateCate){ + List fltPlanBas = fltPlanQueryRepository.currentFlightStcs(groupId, authCheck, cate); + + int count = fltPlanBas.size(); + int aprvnCount = (int)fltPlanBas.stream().filter(value -> value.getAprvlYn().equals("Y")).count(); + + List stcsValues = Arrays.asList(count, aprvnCount, aprvnCount); + + MainCurrentStcsModel node = new MainCurrentStcsModel(); + node.setStcsValues(stcsValues); + + result.add(node); + } + + for(int i = 0; i < result.size(); i++){ + + if(i == 0) continue;; + + int prevSum = result.get(i-1).getStcsValues().get(sumCount); // 전날 합계 [기준] + int sum = result.get(i).getStcsValues().get(sumCount); // 합계 + + double percent = 0; + + if(prevSum != 0){ + percent = ((sum - prevSum) / (double) prevSum) * 100; + } + + result.get(i).setPercent(percent); + } + + result.remove(0); + + return result; + } + + public List currentFlightWarn(String groupId){ 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 9e6b32d1..6ff1309a 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 @@ -11,6 +11,9 @@ import java.util.List; import java.util.Map; import java.util.Optional; +import com.palnet.biz.api.main.dash.model.MainCurrentStcsModel; +import com.querydsl.core.types.dsl.*; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.Cacheable; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; @@ -1824,8 +1827,8 @@ public class FltPlanQueryRepository { BooleanBuilder builder = new BooleanBuilder(); if(date != null && date.length() > 0) builder.and(formattedDate.eq(date)); builder.and(qFltPlanBas.aprvlYn.eq("Y")); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); if(groupId != null && !(groupId.equals(""))) builder.and(qFltPlanBas.groupId.eq(groupId)); - if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); List result = query .select( @@ -1854,6 +1857,78 @@ public class FltPlanQueryRepository { return result; } + + /** + * 일일 비행데이터 + * @param groupId + * @param authCheck + * @param cate + * @return + */ + public List currentFlightStcs(String groupId, boolean authCheck, String cate){ + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; + + BooleanBuilder builder = getCurrentBooleanBuilder(groupId, authCheck, cate, qFltPlanBas); + + List stcsValues = query + .select( + Projections.bean( + FltPlanBas.class, + qFltPlanBas.planSno, + qFltPlanBas.aprvlYn + ) + ) + .from(qFltPlanBas) + .where(builder) + .fetch(); + + return stcsValues; + } + + private BooleanBuilder getCurrentBooleanBuilder(String groupId, boolean authCheck, String cate, QFltPlanBas qFltPlanBas){ + + BooleanBuilder builder = new BooleanBuilder(); + builder.and(qFltPlanBas.groupId.eq(groupId)); + if(authCheck) builder.and(qFltPlanBas.cstmrSno.eq(jwtTokenUtil.getCstmrSnoByToken())); + + BooleanExpression dateExpression = null; + switch (cate){ + case "-2" : + dateExpression = + Expressions.stringTemplate("DATE_FORMAT({0}, {1})", qFltPlanBas.createDt, "%Y-%m-%d") + .eq(LocalDate.now().minusDays(2).toString()); + + builder.and(dateExpression); + + break; + case "-1": + dateExpression = + Expressions.stringTemplate("DATE_FORMAT({0}, {1})", qFltPlanBas.createDt, "%Y-%m-%d") + .eq(LocalDate.now().minusDays(1).toString()); + + builder.and(dateExpression); + break; + + case "0": + dateExpression = + Expressions.stringTemplate("DATE_FORMAT({0}, {1})", qFltPlanBas.createDt, "%Y-%m-%d") + .eq(LocalDate.now().toString()); + builder.and(dateExpression); + break; + + case "1": + dateExpression = + Expressions.stringTemplate("DATE_FORMAT({0}, {1})", qFltPlanBas.createDt, "%Y-%m-%d") + .eq(LocalDate.now().plusDays(1).toString()); + + builder.and(dateExpression); + break; + } + + return builder; + } + + public List getFlightDronList(String orderBy, String groupId){