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 6728d2a0..f4a462dc 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 @@ -24,6 +24,7 @@ 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; @@ -304,6 +305,24 @@ public class MainDashController { return ResponseEntity.ok().body(new SuccessResponse>(result)); } + @GetMapping(value = "/stcs/dron-flight/") + @ApiOperation(value = "드론 비행 현황") + @Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API") + public ResponseEntity dronFlightStcs(@RequestParam String groupId){ + + Map result = null; + + try { + result = service.mainDashDronFlightStcs(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< Map>(result)); + } + @GetMapping(value = "/dron-flight/list/") @ApiOperation(value = "드론 별 비행운항 목록") @Tag(name = "메인화면 컨트롤러", description = "메인화면 관련 API") @@ -343,5 +362,4 @@ public class MainDashController { 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 3f5a95a5..9856a23f 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 @@ -10,6 +10,7 @@ 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; @@ -129,9 +130,6 @@ public class MainDashService { String userAuth = token.getUserAuthByToken(); List userGroupList = token.getGroupAuthByToken(); - - log.info(">>>>>>>>> groupList {} " , userAuth); - BasGroupModel myFirstGroup = new BasGroupModel(); List resultList = new ArrayList(); @@ -149,6 +147,29 @@ public class MainDashService { return resultList; } + + public Map mainDashDronFlightStcs(String groupId){ + + String userAuth = token.getUserAuthByToken(); + List userGroupList = token.getGroupAuthByToken(); + + BasGroupModel myFirstGroup = new BasGroupModel(); + + Map resultList = new HashMap<>(); + + if(userAuth.equals("SUPER")) { + + resultList = fltPlanQueryRepository.getFlightDronStcs("KAC"); + + }else { + + myFirstGroup = ptyGroupQueryRepository.myFirstGroup(userGroupList); + + resultList = fltPlanQueryRepository.getFlightDronStcs(myFirstGroup.getGroupId()); + } + + return resultList; + } /** * 김포공항, 비행승인 통계 * @param yyyymm 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 ad1f4b3e..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 @@ -3,11 +3,12 @@ package com.palnet.biz.jpa.repository.flt; import java.time.Duration; import java.time.Instant; import java.time.LocalDate; -import java.time.LocalDateTime; import java.time.ZoneId; import java.time.ZoneOffset; import java.time.temporal.ChronoUnit; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Optional; import com.palnet.biz.api.main.dash.model.MainCurrentStcsModel; @@ -28,7 +29,6 @@ import com.palnet.biz.api.bas.flight.model.BasFlightPlanListRq; import com.palnet.biz.api.bas.flight.model.BasFlightPlanModel; import com.palnet.biz.api.bas.flight.model.BasFlightPlanPilotModel; import com.palnet.biz.api.bas.flight.model.BasFlightScheduleRs; -import com.palnet.biz.api.comn.file.service.ComnFileService; import com.palnet.biz.api.main.dash.model.MainDashFlightListModel; import com.palnet.biz.api.main.dash.model.MainDashStcsModel; import com.palnet.biz.api.main.statistics.model.FlightStcsValueModel; @@ -56,6 +56,7 @@ import com.palnet.biz.jpa.model.LaancPlanareaCoordDto; import com.palnet.comn.utils.DateUtils; import com.palnet.comn.utils.InstantUtils; import com.querydsl.core.BooleanBuilder; +import com.querydsl.core.Tuple; import com.querydsl.core.group.GroupBy; import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Expression; @@ -69,7 +70,6 @@ import com.querydsl.core.types.dsl.StringTemplate; import com.querydsl.jpa.JPAExpressions; import com.querydsl.jpa.impl.JPAQuery; import com.querydsl.jpa.impl.JPAQueryFactory; -import com.querydsl.sql.SQLExpressions; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -1992,6 +1992,68 @@ public class FltPlanQueryRepository { .orderBy(((ComparableExpressionBase) groupOrder).desc(), cib.createDt.asc()) .fetch(); + return result; + } + + public Map getFlightDronStcs(String groupId){ + + QComIdntfBas cib = QComIdntfBas.comIdntfBas; + QFltPlanArcrft fpa = QFltPlanArcrft.fltPlanArcrft; + QFltPlanBas fpb = QFltPlanBas.fltPlanBas; + QPtyGroupBas pgb = QPtyGroupBas.ptyGroupBas; + QFltPlanCtrCntrlRel fpccr = QFltPlanCtrCntrlRel.fltPlanCtrCntrlRel; + QCtrCntrlBas ccb = QCtrCntrlBas.ctrCntrlBas; + + BooleanBuilder builder = new BooleanBuilder(); + + if(!groupId.equals("all")) { + builder.and(pgb.groupId.eq(groupId)); + } + Instant now = Instant.now(); + + Instant todayStart = LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC); + Instant todayEnd = LocalDate.now().plusDays(1).atStartOfDay().toInstant(ZoneOffset.UTC); + + List res = query + .select( + new CaseBuilder() + .when(ccb.statusCd.eq("01")).then("비행 중") + .when(ccb.statusCd.eq("99")).then("비행 완료") + .when(fpb.planSno.isNotNull()).then("비행 대기 중") + .otherwise("비행 없음").as("status"), + fpb.count() + ) + .from(fpa) + .leftJoin(fpb).on(fpb.planSno.eq(fpa.planSno)) + .leftJoin(pgb).on(pgb.groupId.eq(fpb.groupId)) + .leftJoin(cib).on(cib.idntfNum.eq(fpa.idntfNum)) + .leftJoin(fpccr).on(fpccr.planSno.eq(fpb.planSno)) + .leftJoin(ccb).on(ccb.cntrlId.eq(fpccr.cntrlId)) + .where( + builder + .and(fpb.schFltStDt.between( + now.atZone(ZoneId.of("Asia/Seoul")).truncatedTo(ChronoUnit.DAYS).toInstant(), + now.atZone(ZoneId.of("Asia/Seoul")).truncatedTo(ChronoUnit.DAYS).plus(1, ChronoUnit.DAYS).toInstant() + )) + .and(fpb.schFltEndDt.between( + now.atZone(ZoneId.of("Asia/Seoul")).truncatedTo(ChronoUnit.DAYS).toInstant(), + now.atZone(ZoneId.of("Asia/Seoul")).truncatedTo(ChronoUnit.DAYS).plus(1, ChronoUnit.DAYS).toInstant() + )) + .and(fpb.planSno.isNotNull()) + ) + .groupBy(ccb.statusCd) + .fetch(); + + Map result = new HashMap<>(); + + for (Tuple tuple : res) { + String status = tuple.get(0, String.class); + String count = tuple.get(1, Long.class).toString(); // Assuming count is at index 1 + + result.put(status, count); + } + + return result; } } \ No newline at end of file