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 fe706dce..8b867e0b 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 @@ -1,8 +1,11 @@ package com.palnet.biz.api.main.dash.controller; +import java.time.LocalDate; +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; @@ -48,7 +51,7 @@ public class MainDashController { @ApiImplicitParam(name = "yyyymm",value = "날짜", dataTypeClass = String.class) public ResponseEntity stcsDay(String yyyymm) { List result = null; - + // log.debug(yyyymm); //입력값 검증 @@ -300,7 +303,29 @@ 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/model/MainCurrentStcsModel.java b/pav-server/src/main/java/com/palnet/biz/api/main/dash/model/MainCurrentStcsModel.java new file mode 100644 index 00000000..9259902f --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/api/main/dash/model/MainCurrentStcsModel.java @@ -0,0 +1,15 @@ +package com.palnet.biz.api.main.dash.model; + +import lombok.Data; + +import java.util.List; + +@Data +public class MainCurrentStcsModel { + + private List stcsValues; + + private Double percent; + + +} 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 7fcc26d2..cc354f6e 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,15 @@ package com.palnet.biz.api.main.dash.service; -import java.util.ArrayList; -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.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.BooleanBuilder; import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; @@ -37,7 +38,10 @@ public class MainDashService { private FltPlanQueryRepository fltPlanQueryRepository; @Autowired - private CtrCntrlQueryRepository query; + private CtrCntrlQueryRepository query; + + @Autowired + private MainStatisticsService mainStatisticsService; @@ -217,6 +221,54 @@ 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"}; + + List result = new ArrayList<>(); + + for(String cate : dateCate){ + List fltPlanBas = fltPlanQueryRepository.currentStcs(groupId, authCheck, cate); + + int count = fltPlanBas.size(); + Long aprvnCount = fltPlanBas.stream().filter(value -> value.getAprvlYn().equals("Y")).count(); + + List stcsValues = Arrays.asList(count, aprvnCount.intValue(), count); + + 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; + } + + } diff --git a/pav-server/src/main/java/com/palnet/biz/api/main/statistics/service/MainStatisticsService.java b/pav-server/src/main/java/com/palnet/biz/api/main/statistics/service/MainStatisticsService.java index aa33c2f2..cb16a98a 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/main/statistics/service/MainStatisticsService.java +++ b/pav-server/src/main/java/com/palnet/biz/api/main/statistics/service/MainStatisticsService.java @@ -111,7 +111,7 @@ public class MainStatisticsService { * @param groupId * @return */ - private Boolean authCheck(String groupId){ + public Boolean authCheck(String groupId){ if(groupId == null || groupId.equals("")) return false; 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 64168ba6..135849fc 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 @@ -7,6 +7,8 @@ import java.time.ZoneId; import java.util.List; 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; @@ -54,10 +56,6 @@ import com.querydsl.core.group.GroupBy; import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.ExpressionUtils; import com.querydsl.core.types.Projections; -import com.querydsl.core.types.dsl.CaseBuilder; -import com.querydsl.core.types.dsl.DateTemplate; -import com.querydsl.core.types.dsl.Expressions; -import com.querydsl.core.types.dsl.StringTemplate; import com.querydsl.jpa.JPAExpressions; import com.querydsl.jpa.impl.JPAQuery; import com.querydsl.jpa.impl.JPAQueryFactory; @@ -1817,8 +1815,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( @@ -1847,4 +1845,74 @@ public class FltPlanQueryRepository { return result; } + + public List currentStcs(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())); + + String dateFormat = "%Y-%m-%d"; + 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; + } + + } \ No newline at end of file