From 58b9f99f7de785504c4e91c1677e9ac9ab5e467f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?lkd9125=28=EC=9D=B4=EA=B2=BD=EB=8F=84=29?= Date: Thu, 22 Feb 2024 16:29:56 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20FLT=EB=AA=A8=EB=93=88=20-=20=EC=9A=B4?= =?UTF-8?q?=ED=95=AD=EC=8A=A4=EC=BC=80=EC=A4=84=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kac/data/ctr/model/CtrCntrlBas.java | 14 ++-- .../model/join/CntrlJoinHstryAreaModel.java | 20 +++++ .../CtrCntrlBasQueryRepository.java | 83 +++++++++++++++++++ .../ctr/service/CtrCntrlDomainService.java | 27 ++++++ .../FltPlanBasJoinAreaModel.java | 8 +- .../repository/FltPlanQueryRepository.java | 14 ++-- .../flt/service/FltPlanDomainService.java | 2 +- .../plan/controller/FlightPlanController.java | 2 +- .../model/schedule/SearchPlanScheduleRS.java | 10 +-- .../plan/service/FlightPlanService.java | 30 +++++-- 10 files changed, 181 insertions(+), 29 deletions(-) create mode 100644 data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/model/join/CntrlJoinHstryAreaModel.java create mode 100644 data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/repository/CtrCntrlBasQueryRepository.java create mode 100644 data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/service/CtrCntrlDomainService.java rename data/flt/src/main/java/kr/co/palnet/kac/data/flt/model/{query => join}/FltPlanBasJoinAreaModel.java (53%) diff --git a/data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/model/CtrCntrlBas.java b/data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/model/CtrCntrlBas.java index bf2ec2f..882e42f 100644 --- a/data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/model/CtrCntrlBas.java +++ b/data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/model/CtrCntrlBas.java @@ -3,7 +3,7 @@ package kr.co.palnet.kac.data.ctr.model; import jakarta.persistence.*; import lombok.*; -import java.time.Instant; +import java.time.LocalDateTime; import java.util.List; @@ -39,19 +39,19 @@ public class CtrCntrlBas { // 비행시작일시 @Column(name = "FLGHT_ST_DT", columnDefinition = "datetime(6)") - private Instant flghtStDt; + private LocalDateTime flghtStDt; // 비행종료일시 @Column(name = "FLGHT_END_DT", columnDefinition = "datetime(6)") - private Instant flghtEndDt; + private LocalDateTime flghtEndDt; // 관제시작일시 @Column(name = "CNTRL_ST_DT", columnDefinition = "datetime(6)", nullable = false) - private Instant cntrlStDt; + private LocalDateTime cntrlStDt; // 관제종료일시 @Column(name = "CNTRL_END_DT", columnDefinition = "datetime(6)") - private Instant cntrlEndDt; + private LocalDateTime cntrlEndDt; // 총비행시간 @Column(name = "TTL_TIME", columnDefinition = "double default 0.0") @@ -87,11 +87,11 @@ public class CtrCntrlBas { // 생성일시 @Column(name = "CREATE_DT", columnDefinition = "datetime", updatable = false, nullable = false) - private Instant createDt; + private LocalDateTime createDt; // 수정일시 @Column(name = "UPDATE_DT", columnDefinition = "datetime", nullable = false) - private Instant updateDt; + private LocalDateTime updateDt; @OneToMany(mappedBy = "ctrCntrlBas", fetch = FetchType.LAZY) private List ctrCntrlHstryList; diff --git a/data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/model/join/CntrlJoinHstryAreaModel.java b/data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/model/join/CntrlJoinHstryAreaModel.java new file mode 100644 index 0000000..47d9021 --- /dev/null +++ b/data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/model/join/CntrlJoinHstryAreaModel.java @@ -0,0 +1,20 @@ +package kr.co.palnet.kac.data.ctr.model.join; + +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class CntrlJoinHstryAreaModel { + private String startAddress; + + private String endAddress; + + private String cntrlId; + + private LocalDateTime cntrlStDt; + + private LocalDateTime cntrlEndDt; + + private String statusCd; +} diff --git a/data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/repository/CtrCntrlBasQueryRepository.java b/data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/repository/CtrCntrlBasQueryRepository.java new file mode 100644 index 0000000..a9362fc --- /dev/null +++ b/data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/repository/CtrCntrlBasQueryRepository.java @@ -0,0 +1,83 @@ +package kr.co.palnet.kac.data.ctr.repository; + +import com.querydsl.core.BooleanBuilder; +import com.querydsl.core.types.ExpressionUtils; +import com.querydsl.core.types.Projections; +import com.querydsl.core.types.dsl.CaseBuilder; +import com.querydsl.jpa.JPAExpressions; +import com.querydsl.jpa.impl.JPAQueryFactory; +import kr.co.palnet.kac.data.ctr.model.QCtrCntrlBas; +import kr.co.palnet.kac.data.ctr.model.QCtrCntrlHstryArea; +import kr.co.palnet.kac.data.ctr.model.join.CntrlJoinHstryAreaModel; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Repository; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +@Repository +@Slf4j +@RequiredArgsConstructor +public class CtrCntrlBasQueryRepository { + + private final JPAQueryFactory query; + + public Optional> findByIdntfNumAndSearchDate(String idntfNum, LocalDateTime schFltStDt, LocalDateTime schFltEndDt){ + + QCtrCntrlBas cntrlBas = QCtrCntrlBas.ctrCntrlBas; + QCtrCntrlHstryArea cntrlHstryArea = QCtrCntrlHstryArea.ctrCntrlHstryArea; + + BooleanBuilder builder = new BooleanBuilder(); + builder.and(cntrlBas.cntrlStDt.loe(schFltEndDt)) + .and(cntrlBas.cntrlStDt.goe(schFltStDt)) + .and(cntrlBas.idntfNum.eq(idntfNum)); + + return Optional.ofNullable(query.select(Projections.bean( + CntrlJoinHstryAreaModel.class, + ExpressionUtils.as( + JPAExpressions.select( + cntrlHstryArea.area1.concat(" ") + .concat(cntrlHstryArea.area2).concat(" ") + .concat(cntrlHstryArea.area3).concat(" ") + .concat(cntrlHstryArea.landNm).concat(" ") + .concat(cntrlHstryArea.landNum) + ) + .from(cntrlHstryArea) + .where(cntrlHstryArea.cntrlId.eq(cntrlBas.cntrlId) + .and(cntrlHstryArea.actnType.eq("01"))), + "startAddress" + ), + ExpressionUtils.as( + JPAExpressions.select( + cntrlHstryArea.area1.concat(" ") + .concat(cntrlHstryArea.area2).concat(" ") + .concat(cntrlHstryArea.area3).concat(" ") + .concat(cntrlHstryArea.landNm).concat(" ") + .concat(cntrlHstryArea.landNum) + ) + .from(cntrlHstryArea) + .where(cntrlHstryArea.cntrlId.eq(cntrlBas.cntrlId) + .and(cntrlHstryArea.actnType.eq("99"))), + "endAddress" + ), + cntrlBas.cntrlId, + cntrlBas.cntrlStDt, + cntrlBas.cntrlEndDt, + new CaseBuilder() + .when(cntrlBas.statusCd.eq("01")).then("F") + .when(cntrlBas.statusCd.eq("99")).then("S") + .otherwise("B").as("statusCd") + )) + .from(cntrlBas) + .where(builder) + .orderBy(cntrlBas.cntrlStDt.asc()) + .fetch()); + } + + + +} diff --git a/data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/service/CtrCntrlDomainService.java b/data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/service/CtrCntrlDomainService.java new file mode 100644 index 0000000..acc8b7d --- /dev/null +++ b/data/ctr/src/main/java/kr/co/palnet/kac/data/ctr/service/CtrCntrlDomainService.java @@ -0,0 +1,27 @@ +package kr.co.palnet.kac.data.ctr.service; + +import kr.co.palnet.kac.data.ctr.model.join.CntrlJoinHstryAreaModel; +import kr.co.palnet.kac.data.ctr.repository.CtrCntrlBasQueryRepository; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Optional; + +@Service +@Slf4j +@RequiredArgsConstructor +public class CtrCntrlDomainService { + + private final CtrCntrlBasQueryRepository ctrCntrlBasQueryRepository; + + public Optional> findCntrlJoinHstryAreaByIdntfNumAndSearchDate(String idntfNum, LocalDateTime schFltStDt, LocalDateTime schFltEndDt){ + return ctrCntrlBasQueryRepository.findByIdntfNumAndSearchDate(idntfNum, schFltStDt, schFltEndDt); + } + + + + +} 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/join/FltPlanBasJoinAreaModel.java similarity index 53% rename from data/flt/src/main/java/kr/co/palnet/kac/data/flt/model/query/FltPlanBasJoinAreaModel.java rename to data/flt/src/main/java/kr/co/palnet/kac/data/flt/model/join/FltPlanBasJoinAreaModel.java index e931b82..4c42e1c 100644 --- 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/join/FltPlanBasJoinAreaModel.java @@ -1,7 +1,9 @@ -package kr.co.palnet.kac.data.flt.model.query; +package kr.co.palnet.kac.data.flt.model.join; import lombok.Data; +import java.time.LocalDateTime; + @Data public class FltPlanBasJoinAreaModel { @@ -9,6 +11,10 @@ public class FltPlanBasJoinAreaModel { private String groupId; + private LocalDateTime schFltStDt; + + private LocalDateTime schFltEndDt; + 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 648fac5..6586a1e 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 @@ -2,23 +2,18 @@ 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 kr.co.palnet.kac.data.flt.model.join.FltPlanBasJoinAreaModel; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Repository; import org.springframework.util.StringUtils; -import java.time.Duration; -import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; -import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -53,12 +48,12 @@ public class FltPlanQueryRepository { .fetch()); } - public Optional> findAllBySearch(String serachDate){ + public Optional> findAllBySearch(String searchDate){ QFltPlanBas fltPlanBas = QFltPlanBas.fltPlanBas; QFltPlanArcrft fltPlanArcrft = QFltPlanArcrft.fltPlanArcrft; - LocalDateTime searchDateParam = LocalDate.parse(serachDate).atStartOfDay(); + LocalDateTime searchDateParam = LocalDate.parse(searchDate).atStartOfDay(); BooleanBuilder builder = new BooleanBuilder(); builder.and(fltPlanBas.schFltStDt.loe(searchDateParam)) @@ -70,6 +65,8 @@ public class FltPlanQueryRepository { FltPlanBasJoinAreaModel.class, fltPlanBas.planSno, fltPlanBas.groupId, + fltPlanBas.schFltStDt, + fltPlanBas.schFltEndDt, fltPlanArcrft.ownerNm, fltPlanArcrft.idntfNum )) @@ -77,6 +74,7 @@ public class FltPlanQueryRepository { .leftJoin(fltPlanArcrft) .on(fltPlanBas.planSno.eq(fltPlanArcrft.planSno)) .where(builder) + .orderBy(fltPlanBas.schFltStDt.asc()) .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 a59ed10..a5a3f1e 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,7 +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.model.join.FltPlanBasJoinAreaModel; import kr.co.palnet.kac.data.flt.repository.*; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; 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 53d4113..ed904a7 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 @@ -32,7 +32,7 @@ public class FlightPlanController { @GetMapping("/schedule") @Operation(summary = "비행 운항 스케줄 조회", description = "비행 현황 스케줄 정보를 조회하는 API 입니다.") - public ResponseEntity getPlanSchedule(@Parameter(name="searchDate", description = "검색 날짜", in = ParameterIn.QUERY, example = "2023-11-15") @RequestParam("searchDate") String searchDate){ + public ResponseEntity> getPlanSchedule(@Parameter(name="searchDate", description = "검색 날짜", in = ParameterIn.QUERY, example = "2023-11-15") @RequestParam("searchDate") String searchDate){ List result = flightPlanService.getPlanSchedule(searchDate); 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 index 75a9165..1b2d45a 100644 --- 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 @@ -2,7 +2,7 @@ package kr.co.palnet.kac.api.v1.flight.plan.model.schedule; import lombok.Data; -import java.time.Instant; +import java.time.LocalDateTime; @Data public class SearchPlanScheduleRS { @@ -12,11 +12,11 @@ public class SearchPlanScheduleRS { private String idntfNum; private String startAddress; private String endAddress; - private Instant schFltStDt; - private Instant schFltEndDt; + private LocalDateTime schFltStDt; + private LocalDateTime schFltEndDt; private String cntrlId; - private Instant cntrlStDt; - private Instant cntrlEndDt; + private LocalDateTime cntrlStDt; + private LocalDateTime 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 f5bee56..2d5f026 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 @@ -2,13 +2,14 @@ package kr.co.palnet.kac.api.v1.flight.plan.service; import kr.co.palnet.kac.api.util.AreaUtils; 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.ctr.model.join.CntrlJoinHstryAreaModel; +import kr.co.palnet.kac.data.ctr.service.CtrCntrlDomainService; +import kr.co.palnet.kac.data.flt.model.join.FltPlanBasJoinAreaModel; import kr.co.palnet.kac.data.flt.service.FltPlanDomainService; +import kr.co.palnet.kac.data.pty.model.PtyGroupBas; import kr.co.palnet.kac.data.pty.service.PtyGroupDomainService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -28,6 +29,8 @@ public class FlightPlanService { private final PtyGroupDomainService ptyGroupDomainService; + private final CtrCntrlDomainService ctrCntrlDomainService; + private final AreaUtils areaUtils; @@ -63,19 +66,34 @@ public class FlightPlanService { List planJoinArea = fltPlanBasJoinAreaData.get(); for(FltPlanBasJoinAreaModel model : planJoinArea){ + Optional> ctrJoinHstryAreaData = ctrCntrlDomainService.findCntrlJoinHstryAreaByIdntfNumAndSearchDate(model.getIdntfNum(), model.getSchFltStDt(), model.getSchFltEndDt()); + SearchPlanScheduleRS node = new SearchPlanScheduleRS(); - ptyGroupDomainService. + if(ctrJoinHstryAreaData.isPresent() && !ctrJoinHstryAreaData.get().isEmpty()){ + CntrlJoinHstryAreaModel cntrlJoinHstryAreaModel = ctrJoinHstryAreaData.get().get(0); + node.setCntrlId(cntrlJoinHstryAreaModel.getCntrlId()); + node.setStartAddress(cntrlJoinHstryAreaModel.getStartAddress()); + node.setEndAddress(cntrlJoinHstryAreaModel.getEndAddress()); + node.setCntrlStDt(cntrlJoinHstryAreaModel.getCntrlStDt()); + node.setCntrlEndDt(cntrlJoinHstryAreaModel.getCntrlEndDt()); + node.setStatusCd(cntrlJoinHstryAreaModel.getStatusCd()); + } else { + continue; + } + PtyGroupBas ptyGroupBas = ptyGroupDomainService.findPtyGroupBasById(model.getGroupId()); + node.setOwnerNm(model.getOwnerNm()); + node.setIdntfNum(model.getIdntfNum()); + node.setGroupId(model.getGroupId()); + node.setGroupNm(ptyGroupBas.getGroupNm()); result.add(node); } } - - return result; } }