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 f4a462d..92b7461 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,6 +1,5 @@ package com.palnet.biz.api.main.dash.controller; -import java.time.LocalDate; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -24,7 +23,6 @@ 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; @@ -308,12 +306,12 @@ public class MainDashController { @GetMapping(value = "/stcs/dron-flight/") @ApiOperation(value = "드론 비행 현황") @Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API") - public ResponseEntity dronFlightStcs(@RequestParam String groupId){ + public ResponseEntity dronFlightStcs(){ Map result = null; try { - result = service.mainDashDronFlightStcs(groupId); + result = service.mainDashDronFlightStcs(); }catch (Exception e) { log.error("IGNORE : {}", e); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) @@ -341,17 +339,33 @@ public class MainDashController { return ResponseEntity.ok().body(new SuccessResponse>(result)); } + @GetMapping("/current/flight-warn") + public ResponseEntity currentFlightWarn(@RequestParam(required = false) String groupId){ + + List result = new ArrayList<>(); + + try { + result = service.currentFlightWarn(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)); + } + @GetMapping("/current/flight-plan") - @ApiOperation(value = "일일 비행통계") + @ApiOperation(value = "김포공항, 비정상상황 비행 통계") @Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API") @ApiImplicitParams({ - @ApiImplicitParam(name = "groupId",value = "그룹아이디", dataTypeClass = String.class) + @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); + log.warn("groupId => {}", groupId); List result = new ArrayList<>(); - try { result = service.currentFlightPlan(groupId); } catch (Exception e){ @@ -360,6 +374,8 @@ public class MainDashController { .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/MainDashFlightListModel.java b/pav-server/src/main/java/com/palnet/biz/api/main/dash/model/MainDashFlightListModel.java index 62020b1..40c89be 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/main/dash/model/MainDashFlightListModel.java +++ b/pav-server/src/main/java/com/palnet/biz/api/main/dash/model/MainDashFlightListModel.java @@ -13,9 +13,9 @@ public class MainDashFlightListModel { private String idntfNum; - private Instant schFltStDt; + private Instant cntrlStDt; - private Instant schFltEndDt; + private Instant cntrlEndDt; private Object totalFlightTime; 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 9856a23..e723fe6 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,7 +1,6 @@ package com.palnet.biz.api.main.dash.service; 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; @@ -23,7 +22,10 @@ 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; +import com.palnet.biz.jpa.repository.ctr.CtrCntrlWarnLogQueryRepository; import com.palnet.biz.jpa.repository.flt.FltPlanArcrftRepository; import com.palnet.biz.jpa.repository.flt.FltPlanQueryRepository; @@ -41,6 +43,9 @@ public class MainDashService { @Autowired private FltPlanQueryRepository fltPlanQueryRepository; + + @Autowired + private CtrCntrlWarnLogQueryRepository ctrCntrlWarnLogQueryRepository; @Autowired private CtrCntrlQueryRepository query; @@ -52,8 +57,7 @@ public class MainDashService { private FltPlanArcrftRepository fltPlanArcrftRepository; @Autowired - private JwtTokenUtil token; - + private JwtTokenUtil token; /** * 일별 비행횟수 통계 @@ -148,7 +152,7 @@ public class MainDashService { return resultList; } - public Map mainDashDronFlightStcs(String groupId){ + public Map mainDashDronFlightStcs(){ String userAuth = token.getUserAuthByToken(); List userGroupList = token.getGroupAuthByToken(); @@ -325,4 +329,52 @@ public class MainDashService { + + public List currentFlightWarn(String groupId){ + final int sumCount = 3; // 3번은 합계 + + boolean authCheck = mainStatisticsService.authCheck(groupId); + + + String[] dateCate = {"-2", "-1", "0", "1"}; + + List result = new ArrayList<>(); + + for(String cate : dateCate){ + List cntrlWarnLogs = ctrCntrlWarnLogQueryRepository.currentStcs(groupId, authCheck, cate); + + int count = cntrlWarnLogs.size(); // + + int plan = (int)cntrlWarnLogs.stream().filter(value -> value.getWarnType().equals(WarnType.PLAN.getValue())).count(); + int altitude = (int)cntrlWarnLogs.stream().filter(value -> value.getWarnType().equals(WarnType.ALTITUDE.getValue())).count(); + int crash = (int)cntrlWarnLogs.stream().filter(value -> value.getWarnType().equals(WarnType.CRASH.getValue())).count(); + + List stcsValues = Arrays.asList(plan, altitude, crash, 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/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java b/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java index c7280cb..4825bda 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/repository/ctr/CtrCntrlWarnLogQueryRepository.java @@ -8,12 +8,15 @@ import org.springframework.stereotype.Repository; import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; import com.palnet.biz.api.main.statistics.model.FlightStcsValueModel; +import com.palnet.biz.jpa.entity.CtrCntrlWarnLog; +import com.palnet.biz.jpa.entity.FltPlanBas; import com.palnet.biz.jpa.entity.QCtrCntrlWarnLog; import com.palnet.biz.jpa.entity.QFltPlanBas; import com.palnet.biz.jpa.entity.QFltPlanCtrCntrlRel; import com.querydsl.core.BooleanBuilder; import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Projections; +import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.dsl.StringTemplate; import com.querydsl.jpa.impl.JPAQueryFactory; @@ -284,4 +287,74 @@ public class CtrCntrlWarnLogQueryRepository { return result; } + + public List currentStcs(String groupId, boolean authCheck, String cate){ + QFltPlanBas qFltPlanBas = QFltPlanBas.fltPlanBas; + QFltPlanCtrCntrlRel qFltPlanCtrCntrlRel = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QCtrCntrlWarnLog qCtrCntrlWarnLog = QCtrCntrlWarnLog.ctrCntrlWarnLog; + + BooleanBuilder builder = getCurrentBooleanBuilder(groupId, authCheck, cate, qFltPlanBas, qCtrCntrlWarnLog); + + List stcsValues = query + .select( + Projections.bean( + CtrCntrlWarnLog.class, + qCtrCntrlWarnLog.warnType + ) + ) + .from(qCtrCntrlWarnLog) + .leftJoin(qFltPlanCtrCntrlRel) + .on(qFltPlanCtrCntrlRel.cntrlId.eq(qCtrCntrlWarnLog.cntrlId)) + .leftJoin(qFltPlanBas) + .on(qFltPlanCtrCntrlRel.planSno.eq(qFltPlanBas.planSno)) + .where(builder) + .groupBy(qCtrCntrlWarnLog.cntrlId) + .fetch(); + + return stcsValues; + } + + private BooleanBuilder getCurrentBooleanBuilder(String groupId, boolean authCheck, String cate, QFltPlanBas qFltPlanBas, QCtrCntrlWarnLog qCtrCntrlWarnLog){ + + 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})", qCtrCntrlWarnLog.createDt, dateFormat) + .eq(LocalDate.now().minusDays(2).toString()); + + builder.and(dateExpression); + + break; + case "-1": + dateExpression = + Expressions.stringTemplate("DATE_FORMAT({0}, {1})", qCtrCntrlWarnLog.createDt, dateFormat) + .eq(LocalDate.now().minusDays(1).toString()); + + builder.and(dateExpression); + break; + + case "0": + dateExpression = + Expressions.stringTemplate("DATE_FORMAT({0}, {1})", qCtrCntrlWarnLog.createDt, dateFormat) + .eq(LocalDate.now().toString()); + builder.and(dateExpression); + break; + + case "1": + dateExpression = + Expressions.stringTemplate("DATE_FORMAT({0}, {1})", qCtrCntrlWarnLog.createDt, dateFormat) + .eq(LocalDate.now().plusDays(1).toString()); + + builder.and(dateExpression); + break; + } + + return builder; + } } diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCstmrQueryRepository.java b/pav-server/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCstmrQueryRepository.java index 61d3b9a..c3014cb 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCstmrQueryRepository.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCstmrQueryRepository.java @@ -164,7 +164,6 @@ public class PtyCstmrQueryRepository { model.setUserId(entity.getUserId()); model.setCstmrSno(entity.getCstmrSno()); model.setCstmrStatusCd(entity.getCstmrStatusCd()); - model.setCptAuthCode(entity.getCptAuthCode()); model.setUserPswd(entity.getUserPswd()); if (pcgEntityList != null && !pcgEntityList.isEmpty()) { List groupModelList = new ArrayList<>(); @@ -278,8 +277,7 @@ public class PtyCstmrQueryRepository { dtl.email, dtl.hpno, dtl.updateDt, - bas.userId, - bas.cptAuthCode + bas.userId )) .from(bas) .leftJoin(dtl)