diff --git a/data/flt/src/main/java/kr/co/palnet/kac/data/flt/model/query/FltPlanBasJoinAreaModel.java b/data/flt/src/main/java/kr/co/palnet/kac/data/flt/model/query/FltPlanBasJoinAreaModel.java new file mode 100644 index 0000000..e931b82 --- /dev/null +++ b/data/flt/src/main/java/kr/co/palnet/kac/data/flt/model/query/FltPlanBasJoinAreaModel.java @@ -0,0 +1,15 @@ +package kr.co.palnet.kac.data.flt.model.query; + +import lombok.Data; + +@Data +public class FltPlanBasJoinAreaModel { + + private Long planSno; + + private String groupId; + + private String ownerNm; + + private String idntfNum; +} diff --git a/data/flt/src/main/java/kr/co/palnet/kac/data/flt/repository/FltPlanQueryRepository.java b/data/flt/src/main/java/kr/co/palnet/kac/data/flt/repository/FltPlanQueryRepository.java index 30b69ae..648fac5 100644 --- a/data/flt/src/main/java/kr/co/palnet/kac/data/flt/repository/FltPlanQueryRepository.java +++ b/data/flt/src/main/java/kr/co/palnet/kac/data/flt/repository/FltPlanQueryRepository.java @@ -1,12 +1,14 @@ package kr.co.palnet.kac.data.flt.repository; import com.querydsl.core.BooleanBuilder; +import com.querydsl.core.types.Projections; import com.querydsl.jpa.impl.JPAQuery; import com.querydsl.jpa.impl.JPAQueryFactory; import kr.co.palnet.kac.data.flt.model.FltPlanBas; import kr.co.palnet.kac.data.flt.model.QFltPlanArcrft; import kr.co.palnet.kac.data.flt.model.QFltPlanArea; import kr.co.palnet.kac.data.flt.model.QFltPlanBas; +import kr.co.palnet.kac.data.flt.model.query.FltPlanBasJoinAreaModel; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Repository; @@ -50,4 +52,32 @@ public class FltPlanQueryRepository { .orderBy(bas.createDt.desc()) .fetch()); } + + public Optional> findAllBySearch(String serachDate){ + + QFltPlanBas fltPlanBas = QFltPlanBas.fltPlanBas; + QFltPlanArcrft fltPlanArcrft = QFltPlanArcrft.fltPlanArcrft; + + LocalDateTime searchDateParam = LocalDate.parse(serachDate).atStartOfDay(); + + BooleanBuilder builder = new BooleanBuilder(); + builder.and(fltPlanBas.schFltStDt.loe(searchDateParam)) + .and(fltPlanBas.schFltEndDt.goe(searchDateParam)) + .and(fltPlanBas.aprvlYn.eq("Y")); + + return Optional.ofNullable(query. + select(Projections.bean( + FltPlanBasJoinAreaModel.class, + fltPlanBas.planSno, + fltPlanBas.groupId, + fltPlanArcrft.ownerNm, + fltPlanArcrft.idntfNum + )) + .from(fltPlanBas) + .leftJoin(fltPlanArcrft) + .on(fltPlanBas.planSno.eq(fltPlanArcrft.planSno)) + .where(builder) + .fetch()); + } + } diff --git a/data/flt/src/main/java/kr/co/palnet/kac/data/flt/service/FltPlanDomainService.java b/data/flt/src/main/java/kr/co/palnet/kac/data/flt/service/FltPlanDomainService.java index 1a27165..a59ed10 100644 --- a/data/flt/src/main/java/kr/co/palnet/kac/data/flt/service/FltPlanDomainService.java +++ b/data/flt/src/main/java/kr/co/palnet/kac/data/flt/service/FltPlanDomainService.java @@ -1,6 +1,7 @@ package kr.co.palnet.kac.data.flt.service; import kr.co.palnet.kac.data.flt.model.*; +import kr.co.palnet.kac.data.flt.model.query.FltPlanBasJoinAreaModel; import kr.co.palnet.kac.data.flt.repository.*; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -32,6 +33,10 @@ public class FltPlanDomainService { return fltPlanQueryRepository.findAllBySearch(memberName, createStDate, createEndDate); } + public Optional> findAllFltPlanBasBySearch(String searchDate){ + return fltPlanQueryRepository.findAllBySearch(searchDate); + } + public Optional findById(Long planSno){ return fltPlanBasRepository.findById(planSno); } diff --git a/data/pty/src/main/java/kr/co/palnet/kac/data/pty/service/PtyGroupDomainService.java b/data/pty/src/main/java/kr/co/palnet/kac/data/pty/service/PtyGroupDomainService.java index 05ee846..5e8983e 100644 --- a/data/pty/src/main/java/kr/co/palnet/kac/data/pty/service/PtyGroupDomainService.java +++ b/data/pty/src/main/java/kr/co/palnet/kac/data/pty/service/PtyGroupDomainService.java @@ -20,23 +20,23 @@ public class PtyGroupDomainService { private final PtyCstmrGroupRepository ptyCstmrGroupRepository; - public Optional> findJoinGroupByCstmrSno(Long cstmrSno){ + public Optional> findPtyCstmrGroupJoinGroupByCstmrSno(Long cstmrSno){ return ptyCstmrGroupRepository.findByCstmrSnoAndJoinYn(cstmrSno, "Y"); } - public Optional> findByGroupId(String groupId){ + public Optional> findPtyCstmrGroupByGroupId(String groupId){ return ptyCstmrGroupRepository.findByGroupId(groupId); } - public Optional> findByGroupNm(String groupNm){ + public Optional> findPtyGroupBasByGroupNm(String groupNm){ return ptyGroupBasRepository.findByGroupNm(groupNm); } - public Optional> findByCstmrSno(Long cstmrSno){ + public Optional> findPtyCstmrGroupByCstmrSno(Long cstmrSno){ return ptyCstmrGroupRepository.findByCstmrSno(cstmrSno); } - public Optional findByGroupIdAndCstmrSno(String groupId, Long cstmrSno){ + public Optional findPtyCstmrGroupByGroupIdAndCstmrSno(String groupId, Long cstmrSno){ return ptyCstmrGroupRepository.findByGroupIdAndCstmrSno(groupId, cstmrSno); } @@ -44,7 +44,7 @@ public class PtyGroupDomainService { return ptyCstmrGroupRepository.save(entity); } - public PtyGroupBas findById(String id){ + public PtyGroupBas findPtyGroupBasById(String id){ return ptyGroupBasRepository.findById(id).orElse(null); } diff --git a/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/service/FlightLaancService.java b/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/service/FlightLaancService.java index 18e4a8a..b1c2631 100644 --- a/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/service/FlightLaancService.java +++ b/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/service/FlightLaancService.java @@ -119,7 +119,7 @@ public class FlightLaancService { String groupId = ""; String groupNm = ""; - Optional> kacData = ptyGroupDomainService.findByGroupNm("KAC"); + Optional> kacData = ptyGroupDomainService.findPtyGroupBasByGroupNm("KAC"); if (kacData.isPresent() && !kacData.get().isEmpty()) { List kac = kacData.get(); diff --git a/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/controller/FlightPlanController.java b/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/controller/FlightPlanController.java index 4e83041..53d4113 100644 --- a/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/controller/FlightPlanController.java +++ b/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/controller/FlightPlanController.java @@ -1,15 +1,15 @@ package kr.co.palnet.kac.api.v1.flight.plan.controller; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.enums.ParameterIn; import kr.co.palnet.kac.api.v1.flight.plan.model.buffer.CreateBufferModel; +import kr.co.palnet.kac.api.v1.flight.plan.model.schedule.SearchPlanScheduleRS; import kr.co.palnet.kac.api.v1.flight.plan.service.FlightPlanService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -30,4 +30,13 @@ public class FlightPlanController { return ResponseEntity.ok().body(result); } + @GetMapping("/schedule") + @Operation(summary = "비행 운항 스케줄 조회", description = "비행 현황 스케줄 정보를 조회하는 API 입니다.") + public ResponseEntity getPlanSchedule(@Parameter(name="searchDate", description = "검색 날짜", in = ParameterIn.QUERY, example = "2023-11-15") @RequestParam("searchDate") String searchDate){ + + List result = flightPlanService.getPlanSchedule(searchDate); + + return ResponseEntity.ok().body(result); + } + } diff --git a/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/model/schedule/SearchPlanScheduleRS.java b/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/model/schedule/SearchPlanScheduleRS.java new file mode 100644 index 0000000..75a9165 --- /dev/null +++ b/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/model/schedule/SearchPlanScheduleRS.java @@ -0,0 +1,23 @@ +package kr.co.palnet.kac.api.v1.flight.plan.model.schedule; + +import lombok.Data; + +import java.time.Instant; + +@Data +public class SearchPlanScheduleRS { + private String groupId; + private String groupNm; + private String ownerNm; + private String idntfNum; + private String startAddress; + private String endAddress; + private Instant schFltStDt; + private Instant schFltEndDt; + private String cntrlId; + private Instant cntrlStDt; + private Instant cntrlEndDt; + + // BEFORE (B) : 비행 전, FLYING (F) : 비행 중, SUCCESS (S) : 비행 완료 + private String statusCd; +} diff --git a/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/service/FlightPlanService.java b/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/service/FlightPlanService.java index 682ca53..f5bee56 100644 --- a/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/service/FlightPlanService.java +++ b/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/service/FlightPlanService.java @@ -5,18 +5,30 @@ import kr.co.palnet.kac.api.util.model.FlightPlanAreaCoordModel; import kr.co.palnet.kac.api.v1.flight.laanc.model.create.BasLaancAreaCoordModel; import kr.co.palnet.kac.api.v1.flight.plan.model.buffer.BufferAreaCoordModel; import kr.co.palnet.kac.api.v1.flight.plan.model.buffer.CreateBufferModel; +import kr.co.palnet.kac.api.v1.flight.plan.model.schedule.SearchPlanScheduleRS; +import kr.co.palnet.kac.data.flt.model.FltPlanBas; +import kr.co.palnet.kac.data.flt.model.query.FltPlanBasJoinAreaModel; +import kr.co.palnet.kac.data.flt.service.FltPlanDomainService; +import kr.co.palnet.kac.data.pty.service.PtyGroupDomainService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.locationtech.jts.geom.Coordinate; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; +import java.util.Optional; @Service @Slf4j @RequiredArgsConstructor public class FlightPlanService { + private final FltPlanDomainService fltPlanDomainService; + + private final PtyGroupDomainService ptyGroupDomainService; + + private final AreaUtils areaUtils; public List createBuffer(List rq) { @@ -40,4 +52,30 @@ public class FlightPlanService { return rq; } + + public List getPlanSchedule(String searchDate) { + + Optional> fltPlanBasJoinAreaData = fltPlanDomainService.findAllFltPlanBasBySearch(searchDate); + + List result = new ArrayList<>(); + + if(fltPlanBasJoinAreaData.isPresent()){ + List planJoinArea = fltPlanBasJoinAreaData.get(); + + for(FltPlanBasJoinAreaModel model : planJoinArea){ + SearchPlanScheduleRS node = new SearchPlanScheduleRS(); + + ptyGroupDomainService. + + + + + result.add(node); + } + } + + + + return result; + } } diff --git a/web/api-user/src/main/java/kr/co/palnet/kac/api/v1/user/account/service/UserAccountService.java b/web/api-user/src/main/java/kr/co/palnet/kac/api/v1/user/account/service/UserAccountService.java index 900e7a0..08d2461 100644 --- a/web/api-user/src/main/java/kr/co/palnet/kac/api/v1/user/account/service/UserAccountService.java +++ b/web/api-user/src/main/java/kr/co/palnet/kac/api/v1/user/account/service/UserAccountService.java @@ -90,7 +90,7 @@ public class UserAccountService { if(cstmrSno == null) return; - Optional> groupData = ptyGroupDomainService.findJoinGroupByCstmrSno(cstmrSno); + Optional> groupData = ptyGroupDomainService.findPtyCstmrGroupJoinGroupByCstmrSno(cstmrSno); if(groupData.isPresent() && !groupData.get().isEmpty()){ @@ -99,7 +99,7 @@ public class UserAccountService { for(PtyCstmrGroup group : groupInfo) { // 회원의 그룹 권한이 MASTER 일 경우 if(group.getGroupAuthCd().equals("MASTER")) { - PtyGroupBas groupEntity = ptyGroupDomainService.findById(group.getGroupId()); + PtyGroupBas groupEntity = ptyGroupDomainService.findPtyGroupBasById(group.getGroupId()); // 그룹이 있을경우 그룹의 사용여부 "N" 값으로 저장 if(groupEntity != null) { @@ -108,7 +108,7 @@ public class UserAccountService { } // 탈퇴하는 회원이 그룹의 MASTER일 경우 그룹 참여자의 Join여부를 N으로 업데이트 함 - Optional> cstmrEntityData = ptyGroupDomainService.findByGroupId(group.getGroupId()); + Optional> cstmrEntityData = ptyGroupDomainService.findPtyCstmrGroupByGroupId(group.getGroupId()); // cstmrEntity 값이 있을 경우 참여여부 "N" 값으로 저장 if(cstmrEntityData.isPresent()) { @@ -123,7 +123,7 @@ public class UserAccountService { } // 회원 고유번호로 데이터베이스에서 그룹참여정보 가져옴 - Optional> aprvlEntityData = ptyGroupDomainService.findByCstmrSno(cstmrSno); + Optional> aprvlEntityData = ptyGroupDomainService.findPtyCstmrGroupByCstmrSno(cstmrSno); // AprvlEntity[그룹참여 정보가] 있을경우 if(aprvlEntityData.isPresent()) { @@ -138,7 +138,7 @@ public class UserAccountService { } // 그룹 참여여부를 "N"값으로 저장 - Optional cstmrEntityData = ptyGroupDomainService.findByGroupIdAndCstmrSno(group.getGroupId(), cstmrSno); + Optional cstmrEntityData = ptyGroupDomainService.findPtyCstmrGroupByGroupIdAndCstmrSno(group.getGroupId(), cstmrSno); if(cstmrEntityData.isPresent()) { PtyCstmrGroup cstmrEntity = cstmrEntityData.get();