From b15ecf1f77c2731f30480b56a4c5a0fe894dc8ce 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 00:48:36 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20Flt=EB=AA=A8=EB=93=88=20-=20Laanc?= =?UTF-8?q?=EC=8A=B9=EC=9D=B8=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EB=B6=88?= =?UTF-8?q?=EB=9F=AC=EC=98=A4=EA=B8=B0=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/repository/ComFileBasRepository.java | 5 +- .../com/service/ComFileDomainService.java | 5 + .../kac/data/flt/model/FltPlanArcrft.java | 2 +- .../repository/FltPlanArcrftRepository.java | 7 +- .../flt/repository/FltPlanAreaRepository.java | 9 +- .../repository/FltPlanQueryRepository.java | 53 +++++++ .../flt/service/FltPlanDomainService.java | 18 +++ .../kr/co/palnet/kac/api/util/FileUtils.java | 3 +- .../controller/FlightLaancController.java | 10 ++ .../flight/laanc/model/FltPlanArcrftDTO.java | 4 +- .../model/create/BasLaancArcrftModel.java | 37 +++++ .../laanc/model/create/BasLaancAreaModel.java | 20 +++ .../flight/laanc/model/search/FileModel.java | 17 +++ .../laanc/model/search/SearchLaancAprvRQ.java | 28 ++++ .../laanc/model/search/SearchLaancAprvRS.java | 140 ++++++++++++++++++ .../laanc/service/FlightLaancService.java | 73 +++++++++ 16 files changed, 424 insertions(+), 7 deletions(-) create mode 100644 data/flt/src/main/java/kr/co/palnet/kac/data/flt/repository/FltPlanQueryRepository.java create mode 100644 web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/search/FileModel.java create mode 100644 web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/search/SearchLaancAprvRQ.java create mode 100644 web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/search/SearchLaancAprvRS.java diff --git a/data/com/src/main/java/kr/co/palnet/kac/data/com/repository/ComFileBasRepository.java b/data/com/src/main/java/kr/co/palnet/kac/data/com/repository/ComFileBasRepository.java index aac1931..78645d4 100644 --- a/data/com/src/main/java/kr/co/palnet/kac/data/com/repository/ComFileBasRepository.java +++ b/data/com/src/main/java/kr/co/palnet/kac/data/com/repository/ComFileBasRepository.java @@ -3,10 +3,13 @@ package kr.co.palnet.kac.data.com.repository; import kr.co.palnet.kac.data.com.domain.ComFileBas; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; import java.util.Optional; -public interface ComFileBasRepository extends JpaRepository { +public interface ComFileBasRepository extends JpaRepository { Optional findFirstByOrderByFileGroupNoDesc(); + Optional> findByFileGroupNoInAndDelYnOrderByCreateDtDesc(List fileGroupNos, String delYn); + } diff --git a/data/com/src/main/java/kr/co/palnet/kac/data/com/service/ComFileDomainService.java b/data/com/src/main/java/kr/co/palnet/kac/data/com/service/ComFileDomainService.java index 982dbd0..f605a40 100644 --- a/data/com/src/main/java/kr/co/palnet/kac/data/com/service/ComFileDomainService.java +++ b/data/com/src/main/java/kr/co/palnet/kac/data/com/service/ComFileDomainService.java @@ -6,6 +6,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.util.List; import java.util.Optional; @Service @@ -30,4 +31,8 @@ public class ComFileDomainService { return 1L; } } + + public Optional> findByFileGroupNoInAndDelYnOrderByCreateDtDesc(List fileGroupNos, String delYn){ + return comFileBasRepository.findByFileGroupNoInAndDelYnOrderByCreateDtDesc(fileGroupNos, delYn); + } } diff --git a/data/flt/src/main/java/kr/co/palnet/kac/data/flt/model/FltPlanArcrft.java b/data/flt/src/main/java/kr/co/palnet/kac/data/flt/model/FltPlanArcrft.java index 22e04ca..02efee1 100644 --- a/data/flt/src/main/java/kr/co/palnet/kac/data/flt/model/FltPlanArcrft.java +++ b/data/flt/src/main/java/kr/co/palnet/kac/data/flt/model/FltPlanArcrft.java @@ -114,7 +114,7 @@ public class FltPlanArcrft { // 보험유효기간 @Column(name = "INSURANCE_EXPERIOD", columnDefinition = "datetime") - private String insuranceExperiod; + private LocalDateTime insuranceExperiod; // 법인명 @Column(name = "CORPORATION_NM", length = 100) diff --git a/data/flt/src/main/java/kr/co/palnet/kac/data/flt/repository/FltPlanArcrftRepository.java b/data/flt/src/main/java/kr/co/palnet/kac/data/flt/repository/FltPlanArcrftRepository.java index ac567d1..519a4cb 100644 --- a/data/flt/src/main/java/kr/co/palnet/kac/data/flt/repository/FltPlanArcrftRepository.java +++ b/data/flt/src/main/java/kr/co/palnet/kac/data/flt/repository/FltPlanArcrftRepository.java @@ -3,6 +3,11 @@ package kr.co.palnet.kac.data.flt.repository; import kr.co.palnet.kac.data.flt.model.FltPlanArcrft; import org.springframework.data.jpa.repository.JpaRepository; -public interface FltPlanArcrftRepository extends JpaRepository { +import java.util.List; +import java.util.Optional; + +public interface FltPlanArcrftRepository extends JpaRepository { + + public Optional> findByPlanSno(Long planSno); } diff --git a/data/flt/src/main/java/kr/co/palnet/kac/data/flt/repository/FltPlanAreaRepository.java b/data/flt/src/main/java/kr/co/palnet/kac/data/flt/repository/FltPlanAreaRepository.java index 2e18c7f..ef81511 100644 --- a/data/flt/src/main/java/kr/co/palnet/kac/data/flt/repository/FltPlanAreaRepository.java +++ b/data/flt/src/main/java/kr/co/palnet/kac/data/flt/repository/FltPlanAreaRepository.java @@ -3,5 +3,12 @@ package kr.co.palnet.kac.data.flt.repository; import kr.co.palnet.kac.data.flt.model.FltPlanArea; import org.springframework.data.jpa.repository.JpaRepository; -public interface FltPlanAreaRepository extends JpaRepository { +import java.util.List; +import java.util.Optional; + +public interface FltPlanAreaRepository extends JpaRepository { + + public Optional> findByPlanSno(Long planSno); + + } 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 new file mode 100644 index 0000000..30b69ae --- /dev/null +++ b/data/flt/src/main/java/kr/co/palnet/kac/data/flt/repository/FltPlanQueryRepository.java @@ -0,0 +1,53 @@ +package kr.co.palnet.kac.data.flt.repository; + +import com.querydsl.core.BooleanBuilder; +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 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; + +@Repository +@Slf4j +@RequiredArgsConstructor +public class FltPlanQueryRepository { + + private final JPAQueryFactory query; + + public Optional> findAllBySearch(String memberName, LocalDateTime createStDate, LocalDateTime createEndDate){ + + QFltPlanBas bas = QFltPlanBas.fltPlanBas; + + BooleanBuilder builder = new BooleanBuilder(); + if(StringUtils.hasText(memberName)){ + builder.and(bas.memberName.contains(memberName)); + } + + if(createStDate != null) { + builder.and(bas.createDt.goe(createStDate)); + } + if(createEndDate != null){ + builder.and(bas.createDt.lt(createEndDate)); + } + + return Optional.ofNullable(query + .select(bas) + .from(bas) + .where(builder) + .orderBy(bas.createDt.desc()) + .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 e735840..e0b6359 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 @@ -6,6 +6,10 @@ 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; + @Slf4j @RequiredArgsConstructor @Service @@ -13,6 +17,8 @@ public class FltPlanDomainService { private final FltPlanBasRepository fltPlanBasRepository; + private final FltPlanQueryRepository fltPlanQueryRepository; + private final FltPlanAreaRepository fltPlanAreaRepository; private final FltPlanAreaCoordRepository fltPlanAreaCoordRepository; @@ -21,11 +27,19 @@ public class FltPlanDomainService { private final FltPlanArcrftRepository fltPlanArcrftRepository; + public Optional> findAllFltPlanBasBySearch(String memberName, LocalDateTime createStDate, LocalDateTime createEndDate){ + + return fltPlanQueryRepository.findAllBySearch(memberName, createStDate, createEndDate); + } public FltPlanBas saveFltPlanBas(FltPlanBas entity){ return fltPlanBasRepository.save(entity); } + public Optional> findFltPlanAreaByPlanSno(Long planSno){ + return fltPlanAreaRepository.findByPlanSno(planSno); + } + public FltPlanArea saveFltPlanArea(FltPlanArea entity){ return fltPlanAreaRepository.save(entity); } @@ -38,6 +52,10 @@ public class FltPlanDomainService { return fltPlanPilotRepository.save(entity); } + public Optional> findFltPlanArcrftByPlanSno(Long planSno){ + return fltPlanArcrftRepository.findByPlanSno(planSno); + } + public FltPlanArcrft saveFltPlanArcrft(FltPlanArcrft entity){ return fltPlanArcrftRepository.save(entity); } diff --git a/web/api-flight/src/main/java/kr/co/palnet/kac/api/util/FileUtils.java b/web/api-flight/src/main/java/kr/co/palnet/kac/api/util/FileUtils.java index e53f02f..74b30d7 100644 --- a/web/api-flight/src/main/java/kr/co/palnet/kac/api/util/FileUtils.java +++ b/web/api-flight/src/main/java/kr/co/palnet/kac/api/util/FileUtils.java @@ -8,13 +8,14 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; import org.springframework.core.io.ClassPathResource; +import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; import java.io.IOException; import java.io.InputStream; import java.time.LocalDateTime; -@Service +@Component @RequiredArgsConstructor @Slf4j public class FileUtils { diff --git a/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/controller/FlightLaancController.java b/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/controller/FlightLaancController.java index d72e734..69dcd4f 100644 --- a/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/controller/FlightLaancController.java +++ b/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/controller/FlightLaancController.java @@ -5,6 +5,8 @@ import io.swagger.v3.oas.annotations.tags.Tag; import kr.co.palnet.kac.api.v1.flight.laanc.model.create.CreateLaancPlanRQ; import kr.co.palnet.kac.api.v1.flight.laanc.model.create.CreateLaancPlanRS; import kr.co.palnet.kac.api.v1.flight.laanc.model.pliotvalid.PilotValidRs; +import kr.co.palnet.kac.api.v1.flight.laanc.model.search.SearchLaancAprvRQ; +import kr.co.palnet.kac.api.v1.flight.laanc.model.search.SearchLaancAprvRS; import kr.co.palnet.kac.api.v1.flight.laanc.model.tsqr.LaancTsQRcodeRQ; import kr.co.palnet.kac.api.v1.flight.laanc.model.tsqr.LaancTsQRcodeRS; import kr.co.palnet.kac.api.v1.flight.laanc.model.valid.LaancAllowableElevationRS; @@ -74,6 +76,14 @@ public class FlightLaancController { return ResponseEntity.ok().body(result); } + @GetMapping("/list") + @Operation(summary = "LAANC 승인 목록", description = "LAANC 승인 목록") + public ResponseEntity> getLaancAprvList(SearchLaancAprvRQ rq){ + + List result = flightLaancService.getLaancAprvList(rq); + + return ResponseEntity.ok().body(result); + } diff --git a/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/FltPlanArcrftDTO.java b/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/FltPlanArcrftDTO.java index 8774301..73dcc38 100644 --- a/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/FltPlanArcrftDTO.java +++ b/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/FltPlanArcrftDTO.java @@ -32,7 +32,7 @@ public class FltPlanArcrftDTO { private String cameraYn; // 카메라탑재여부 private String insrncYn; // 보험가입여부 private String acrftInsuranceYn; // 기체보험유무 - private String insuranceExperiod; // 보험유효기간 + private LocalDateTime insuranceExperiod; // 보험유효기간 private String corporationNm; // 법인명 private String ownerNm; // 소유자명 private String createUserId; // 생성사용자ID @@ -64,7 +64,7 @@ public class FltPlanArcrftDTO { dto.setCameraYn(model.getCameraYn()); dto.setInsrncYn(model.getInsrncYn()); dto.setAcrftInsuranceYn(model.getAcrftInsuranceYn()); - dto.setInsuranceExperiod(model.getAcrftInsuranceYn()); + dto.setInsuranceExperiod(model.getInsuranceExperiod()); dto.setCorporationNm(model.getCorporationNm()); dto.setOwnerNm(model.getOwnerNm()); dto.setCreateUserId(model.getCreateUserId()); diff --git a/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/create/BasLaancArcrftModel.java b/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/create/BasLaancArcrftModel.java index c8e62bb..7449cf5 100644 --- a/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/create/BasLaancArcrftModel.java +++ b/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/create/BasLaancArcrftModel.java @@ -3,6 +3,7 @@ package kr.co.palnet.kac.api.v1.flight.laanc.model.create; import io.swagger.v3.oas.annotations.media.Schema; import kr.co.palnet.kac.api.v1.flight.laanc.model.constant.ArcrftTypeCd; import kr.co.palnet.kac.api.v1.flight.laanc.model.constant.ArcrftWghtCd; + import kr.co.palnet.kac.data.flt.model.FltPlanArcrft; import lombok.Data; import java.time.LocalDate; @@ -104,4 +105,40 @@ public class BasLaancArcrftModel { @Schema(description = "자체중량코드", example = "10") private ArcrftWghtCd arcrftWghtCd; // 기체 무게 코드 ---- + + public static BasLaancArcrftModel toModel(FltPlanArcrft entity){ + BasLaancArcrftModel model = new BasLaancArcrftModel(); + model.setPlanArcrftSno(entity.getPlanArcrftSno()); + model.setPlanSno(entity.getPlanSno()); + model.setArcrftSno(entity.getArcrftSno()); + model.setIdntfNum(entity.getIdntfNum()); + model.setGroupNm(entity.getGroupNm()); + model.setPrdctNum(entity.getPrdctNum()); + model.setArcrftTypeCd(ArcrftTypeCd.fromCode(entity.getArcrftTypeCd())); + model.setArcrftModelNm(entity.getArcrftModelNm()); + model.setPrdctCmpnNm(entity.getPrdctCmpnNm()); + model.setPrdctDate(entity.getPrdctDate()); + model.setArcrftLngth(entity.getArcrftLngth()); + model.setArcrftWdth(entity.getArcrftWdth()); + model.setArcrftHght(entity.getArcrftHght()); + model.setArcrftWght(entity.getArcrftWght()); + model.setWghtTypeCd(entity.getWghtTypeCd()); + model.setImageUrl(entity.getImageUrl()); + model.setTakeoffWght(entity.getTakeoffWght()); + model.setUseYn(entity.getUseYn()); + model.setCameraYn(entity.getCameraYn()); + model.setInsrncYn(entity.getInsrncYn()); + model.setOwnerNm(entity.getOwnerNm()); + model.setCreateUserId(entity.getCreateUserId()); + model.setCreateDt(entity.getCreateDt()); + model.setUpdateUserId(entity.getUpdateUserId()); + model.setUpdateDt(entity.getUpdateDt()); + model.setDocState(entity.getArcrftModelNm()); + model.setAcrftInsuranceYn(entity.getAcrftInsuranceYn()); + model.setInsuranceExperiod(entity.getInsuranceExperiod()); + model.setCorporationNm(entity.getCorporationNm()); + model.setArcrftWghtCd(ArcrftWghtCd.fromCode(entity.getArcrftWghtCd())); + + return model; + } } diff --git a/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/create/BasLaancAreaModel.java b/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/create/BasLaancAreaModel.java index c2d9bec..b85b61c 100644 --- a/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/create/BasLaancAreaModel.java +++ b/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/create/BasLaancAreaModel.java @@ -2,6 +2,7 @@ package kr.co.palnet.kac.api.v1.flight.laanc.model.create; import io.swagger.v3.oas.annotations.media.Schema; import kr.co.palnet.kac.api.v1.flight.laanc.model.constant.FltMethod; +import kr.co.palnet.kac.data.flt.model.FltPlanArea; import lombok.Data; import java.time.LocalDateTime; @@ -53,4 +54,23 @@ public class BasLaancAreaModel { // kac 추가 필드 @Schema(description = "비행방식(기타)") private String fltMothoeRm; + + public static BasLaancAreaModel toModel(FltPlanArea entity){ + BasLaancAreaModel model = new BasLaancAreaModel(); + model.setPlanAreaSno(entity.getPlanAreaSno()); + model.setPlanSno(entity.getPlanSno()); + model.setAreaType(entity.getAreaType()); + model.setFltMethod(FltMethod.fromCode(entity.getFltMethod())); + model.setFltAreaAddr(entity.getFltAreaAddr()); + model.setBufferZone(entity.getBufferZone()); + model.setFltElev(entity.getFltElev()); + model.setCreateUserId(entity.getCreateUserId()); + model.setCreateDt(entity.getCreateDt()); + model.setUpdateUserId(entity.getUpdateUserId()); + model.setUpdateDt(entity.getUpdateDt()); + model.setDocState(entity.getAreaType()); + model.setFltMothoeRm(entity.getFltMothoeRm()); + + return model; + } } diff --git a/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/search/FileModel.java b/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/search/FileModel.java new file mode 100644 index 0000000..11e5e3b --- /dev/null +++ b/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/search/FileModel.java @@ -0,0 +1,17 @@ +package kr.co.palnet.kac.api.v1.flight.laanc.model.search; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class FileModel { + private Long fileSno; + private Long fileGroupNo; + private String downloadUrl; + private String fileName; +} diff --git a/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/search/SearchLaancAprvRQ.java b/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/search/SearchLaancAprvRQ.java new file mode 100644 index 0000000..2037db8 --- /dev/null +++ b/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/search/SearchLaancAprvRQ.java @@ -0,0 +1,28 @@ +package kr.co.palnet.kac.api.v1.flight.laanc.model.search; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SearchLaancAprvRQ { + + @Schema(description = "작성자 이름", example = "팔") + private String memberName; + + @Schema(description = "신청(등록)시작일자", example = "2023-12-12", implementation = String.class) + private LocalDateTime createStDate; + + @Schema(description = "신청(등록)종료일자", example = "2023-12-12", implementation = String.class) + private LocalDateTime createEndDate; + +} + diff --git a/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/search/SearchLaancAprvRS.java b/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/search/SearchLaancAprvRS.java new file mode 100644 index 0000000..bf3c916 --- /dev/null +++ b/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/model/search/SearchLaancAprvRS.java @@ -0,0 +1,140 @@ +package kr.co.palnet.kac.api.v1.flight.laanc.model.search; + +import kr.co.palnet.kac.api.v1.flight.laanc.model.FltPlanPilotDTO; +import kr.co.palnet.kac.api.v1.flight.laanc.model.constant.ArcrftWghtCd; +import kr.co.palnet.kac.api.v1.flight.laanc.model.constant.FltPurpose; +import kr.co.palnet.kac.api.v1.flight.laanc.model.constant.FltType; +import kr.co.palnet.kac.api.v1.flight.laanc.model.create.BasLaancArcrftModel; +import kr.co.palnet.kac.api.v1.flight.laanc.model.create.BasLaancAreaModel; +import kr.co.palnet.kac.data.flt.model.FltPlanBas; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SearchLaancAprvRS { + + //비행계획서 일려번호 + private Long planSno; + //그룹 아이디 + private String groupId; + //작성자 일련번호 + private Long cstmrSno; + //작성자 이름 + private String memberName; + //작성자 이메일 + private String email; + //작성자 연락처 + private String hpno; + //작성자 국가번호(연락처) + private String clncd; + //작성자 주소 + private String addr; + //작성자 상세주소 + private String addrDtlCn; + //작성자 우편번호 + private String zip; + //비행시작일시 + private LocalDateTime schFltStDt; + //비행종료일시 + private LocalDateTime schFltEndDt; + //비행목적 + private FltPurpose fltPurpose; + //상업/비사업 구분 + private FltType fltType; + //상업/비사업 구분 코드 + private String fltTypeNm; + //승인여부 + private String aprvlYn; + //승인일자 + private LocalDateTime aprvlDt; + //삭제여부 + // private String delYn; + // 파일그룹번호 + private Long fileGroupNo; + //등록자ID + private String createUserId; + //등록일시 + private LocalDateTime createDt; + //수정자ID + private String updateUserId; + //수정일시 + private LocalDateTime updateDt; + //서비스유형 + private String serviceType; + //기업여부 + private String corpRegYn; + //공문URL + private String pdfUrl; + + + private List areaList; + private List arcrftList; + private List pilotList; + + public static SearchLaancAprvRS toModel(FltPlanBas entity){ + SearchLaancAprvRS model = new SearchLaancAprvRS(); + model.setPlanSno(entity.getPlanSno()); + model.setGroupId(entity.getGroupId()); + model.setCstmrSno(entity.getCstmrSno()); + model.setServiceType(entity.getServiceType()); + model.setMemberName(entity.getMemberName()); + model.setEmail(entity.getEmail()); + model.setHpno(entity.getHpno()); + model.setClncd(entity.getClncd()); + model.setAddr(entity.getAddr()); + model.setAddrDtlCn(entity.getAddrDtlCn()); + model.setZip(entity.getZip()); + model.setSchFltStDt(entity.getSchFltStDt()); + model.setSchFltEndDt(entity.getSchFltEndDt()); + model.setFltPurpose(FltPurpose.fromCode(entity.getFltPurpose())); + model.setFltType(FltType.fromCode(entity.getFltType())); + model.setCorpRegYn(entity.getCorpRegYn()); + model.setAprvlYn(entity.getAprvlYn()); + model.setAprvlDt(entity.getAprvlDt()); + model.setFileGroupNo(entity.getFileGroupNo()); + model.setCreateUserId(entity.getCreateUserId()); + model.setCreateDt(entity.getCreateDt()); + model.setUpdateUserId(entity.getUpdateUserId()); + model.setUpdateDt(entity.getUpdateDt()); + + return model; + } + + + // 하나의 필드로 묶어서 처리 + //기체 무게 + public String getArcrftWght() { + if (arcrftList == null || arcrftList.isEmpty()) return null; + List arcrftWghtCdList = arcrftList.stream().map(BasLaancArcrftModel::getArcrftWghtCd).distinct().filter(Objects::nonNull).collect(Collectors.toList()); + String ArcrftWghtType = arcrftWghtCdList.stream().map(ArcrftWghtCd::getValue).collect(Collectors.joining(",")); + return ArcrftWghtType; + } + + //고도 + public String getElev() { + if (areaList == null || areaList.isEmpty()) return null; + List elevList = areaList.stream().map(BasLaancAreaModel::getFltElev).distinct().filter(Objects::nonNull).collect(Collectors.toList()); + String elev = String.join(",", elevList); + return elev; + } + +//조종사 성명 +// public String getPilotName() { +// if (pilotList == null || pilotList.isEmpty()) return null; +// List pilotNameList = pilotList.stream().map(BasLaancPilotModel::getMemberName).distinct().filter(Objects::nonNull).collect(Collectors.toList()); +// String pilotName = String.join(",", pilotNameList); +// return pilotName; +// } + + +} 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 ffc652d..22075be 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 @@ -8,11 +8,16 @@ import kr.co.palnet.kac.api.util.*; import kr.co.palnet.kac.api.v1.flight.laanc.model.create.CstmrModel; import kr.co.palnet.kac.api.v1.flight.laanc.model.*; import kr.co.palnet.kac.api.v1.flight.laanc.model.create.*; +import kr.co.palnet.kac.api.v1.flight.laanc.model.search.FileModel; +import kr.co.palnet.kac.api.v1.flight.laanc.model.search.SearchLaancAprvRQ; +import kr.co.palnet.kac.api.v1.flight.laanc.model.search.SearchLaancAprvRS; import kr.co.palnet.kac.api.v1.flight.laanc.model.tsqr.LaancTsQRcodeRQ; import kr.co.palnet.kac.api.v1.flight.laanc.model.tsqr.LaancTsQRcodeRS; import kr.co.palnet.kac.api.v1.flight.laanc.model.valid.*; import kr.co.palnet.kac.data.com.domain.ComConfirmBas; +import kr.co.palnet.kac.data.com.domain.ComFileBas; import kr.co.palnet.kac.data.com.service.ComConfirmDomainService; +import kr.co.palnet.kac.data.flt.model.FltPlanArcrft; import kr.co.palnet.kac.data.other.service.OtherDomainService; import kr.co.palnet.kac.api.external.model.ComnSmsLaancAprovModel; import kr.co.palnet.kac.api.external.model.CtrTrnsLctnModel; @@ -49,6 +54,7 @@ import org.locationtech.jts.geom.Geometry; import java.io.IOException; import java.time.LocalDateTime; import java.util.*; +import java.util.stream.Collectors; @Service @Slf4j @@ -498,4 +504,71 @@ public class FlightLaancService { return result; } + + @Transactional + public List getLaancAprvList(SearchLaancAprvRQ rq) { + + Optional> fltPlanBasListData = fltPlanDomainService.findAllFltPlanBasBySearch(rq.getMemberName(), rq.getCreateStDate(), rq.getCreateEndDate()); + + List result = new ArrayList<>(); + + if(fltPlanBasListData.isPresent() && !fltPlanBasListData.get().isEmpty()){ + + List fltPlanBasList = fltPlanBasListData.get(); + + for(FltPlanBas fltPlanBas : fltPlanBasList){ + SearchLaancAprvRS node = SearchLaancAprvRS.toModel(fltPlanBas); + + Long planSno = node.getPlanSno(); + + Optional> fltPlanAreaListData = fltPlanDomainService.findFltPlanAreaByPlanSno(planSno); + Optional> fltPlanArcrftListData = fltPlanDomainService.findFltPlanArcrftByPlanSno(planSno); + + if(fltPlanAreaListData.isPresent()){ + List fltPlanAreaList = fltPlanAreaListData.get(); + List areaList = fltPlanAreaList.stream().map(BasLaancAreaModel::toModel).toList(); + + node.setAreaList(areaList); + } + + if(fltPlanArcrftListData.isPresent()){ + List fltPlanArcrftList = fltPlanArcrftListData.get(); + List arcrftList = fltPlanArcrftList.stream().map(BasLaancArcrftModel::toModel).toList(); + + node.setArcrftList(arcrftList); + } + + result.add(node); + } + } + + List fileGroupNoList = result.stream().map(SearchLaancAprvRS::getFileGroupNo).filter(Objects::nonNull).collect(Collectors.toList()); + Optional> filesData = comFileDomainService.findByFileGroupNoInAndDelYnOrderByCreateDtDesc(fileGroupNoList, "N"); + + List fileModels = new ArrayList<>(); + + if(filesData.isPresent() && !filesData.get().isEmpty()){ + List files = filesData.get(); + + for (ComFileBas file : files) { + fileModels.add(FileModel.builder() + .fileGroupNo(file.getFileGroupNo()) + .fileSno(file.getFileSno()) + .fileName(file.getFileOriNm()) + .downloadUrl(fileUtils.getDownloadUrl(file.getFileSno())) + .build()); + } + } + + result.forEach(dto -> { + if (dto.getFileGroupNo() != null) { + fileModels.stream() + .filter(file -> Objects.equals(file.getFileGroupNo(), dto.getFileGroupNo())) + .findFirst() + .ifPresent(file -> dto.setPdfUrl(file.getDownloadUrl())); + } + }); + + return result; + } }