diff --git a/pav-server/src/main/java/com/palnet/biz/api/external/model/DosPlanRs.java b/pav-server/src/main/java/com/palnet/biz/api/external/model/DosPlanRs.java index 6c6e6f2e..2d7e4899 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/external/model/DosPlanRs.java +++ b/pav-server/src/main/java/com/palnet/biz/api/external/model/DosPlanRs.java @@ -1,12 +1,10 @@ package com.palnet.biz.api.external.model; -import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.time.LocalDate; import java.util.List; @Data @@ -35,6 +33,8 @@ public class DosPlanRs { private String zoneno; private String chkresult; + private String obslimit; + private String prmtelev; private String reason; diff --git a/pav-server/src/main/java/com/palnet/biz/api/external/service/DronOneStopService.java b/pav-server/src/main/java/com/palnet/biz/api/external/service/DronOneStopService.java index 615660a8..79036bfe 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/external/service/DronOneStopService.java +++ b/pav-server/src/main/java/com/palnet/biz/api/external/service/DronOneStopService.java @@ -6,6 +6,7 @@ import com.palnet.biz.api.external.model.DosApprovalResult; import com.palnet.biz.api.external.model.DosPlanRq; import com.palnet.biz.api.external.model.DosPlanRs; import com.palnet.biz.jpa.entity.*; +import com.palnet.biz.jpa.entity.type.ReviewedType; import com.palnet.biz.jpa.repository.dos.*; import com.palnet.comn.code.ErrorCode; import com.palnet.comn.exception.CustomException; @@ -24,6 +25,7 @@ import java.time.Instant; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; @Slf4j @@ -38,6 +40,7 @@ public class DronOneStopService { private final DosFltPlanDroneRepository dosFltPlanDroneRepository; private final DosFltPlanPilotRepository dosFltPlanPilotRepository; private final AreaUtils areaUtils; + private final List PASS_PURPOSES = List.of("수색구조", "인명구조", "시설정검"); public DosPlanRs saveDosPlan(DosPlanRq rq) { if (rq == null) { @@ -66,6 +69,7 @@ public class DronOneStopService { DosPlanRs.DosPlan dosPlan = DosPlanRs.DosPlan.builder() .aplyno(fltaply.getAplyno()) .build(); + List checkInfos = new ArrayList<>(); // drone save @@ -115,6 +119,10 @@ public class DronOneStopService { // 검증 Coordinate centerCoordinate = new Coordinate(area.getLon(), area.getLat()); DosApprovalResult approvalResult = getApprovalResult(area.getRadius(), area.getElev(), centerCoordinate); + ApprovalCd saveApprovalCd = approvalResult.getApprovalCd(); + + // 검토결과 - approvalCd가 비대상일 경우 검토불필요 그외 대기 + ReviewedType reviewedType = saveApprovalCd == ApprovalCd.UNTARGETED_AREA ? ReviewedType.UNNECESSARY : ReviewedType.WAIT; // area save DosFltPlanArea dosFltPlanAreaInsert = DosFltPlanArea.builder() @@ -128,16 +136,22 @@ public class DronOneStopService { .allowRadius(approvalResult.getAllowRadius()) .reqRadius(approvalResult.getReqRadius()) .limitZone(approvalResult.getLimitZone()) + .reviewedType(reviewedType) .updateDt(Instant.now()) .createDt(Instant.now()) .build(); DosFltPlanArea saveDosFltPlanArea = dosFltPlanAreaRepository.save(dosFltPlanAreaInsert); + // 비행 목적이 특정 문구(수색구조, 인명구조, 시설정검 등)인 경우 승인 처리 + if(PASS_PURPOSES.contains(fltaply.getPrps())) { + saveApprovalCd = ApprovalCd.APPROVAL; + } + // result save DosFltPlanResult dosFltPlanResultInsert = DosFltPlanResult.builder() .planSno(saveDosFltPlanArea.getPlanSno()) .planAreaSno(saveDosFltPlanArea.getPlanAreaSno()) - .approvalCd(approvalResult.getApprovalCd().getCode()) + .approvalCd(saveApprovalCd.getCode()) .fltElevMax(approvalResult.getFltElevMax()) .updateDt(Instant.now()) .createDt(Instant.now()) @@ -157,7 +171,10 @@ public class DronOneStopService { .zoneno(area.getZoneno()) .chkresult(approvalCd.getCode()) .reason(approvalCd.getMessage()) + .obslimit(Objects.requireNonNull(LimitZoneType.fromCode(approvalResult.getLimitZone())).getMessage()) + .prmtelev(approvalResult.getFltElevMax() != null ? String.valueOf(((int) Math.floor(approvalResult.getFltElevMax()))) : null) .build(); + checkInfos.add(checkInfo); }); dosPlan.setCheckinfos(checkInfos); diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/entity/type/ReviewedType.java b/pav-server/src/main/java/com/palnet/biz/jpa/entity/type/ReviewedType.java index 3abefbb1..63e74c3e 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/entity/type/ReviewedType.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/entity/type/ReviewedType.java @@ -5,9 +5,9 @@ import com.fasterxml.jackson.annotation.JsonValue; import lombok.Getter; public enum ReviewedType { - REVIEWED("R", "완료"), - WAIT("W", "대기"), - UNNECESSARY("U", "불필요"), + REVIEWED("R", "검토완료"), + WAIT("W", "검토대기"), + UNNECESSARY("U", "검토불필요"), REVIEW_AGAIN("A", "재검토"); private final String code; diff --git a/pav-server/src/test/java/com/palnet/biz/api/external/service/DronOneStopServiceTest.java b/pav-server/src/test/java/com/palnet/biz/api/external/service/DronOneStopServiceTest.java index 5fb4b2e2..a9283934 100644 --- a/pav-server/src/test/java/com/palnet/biz/api/external/service/DronOneStopServiceTest.java +++ b/pav-server/src/test/java/com/palnet/biz/api/external/service/DronOneStopServiceTest.java @@ -78,6 +78,8 @@ class DronOneStopServiceTest { @Test void updateApprovalResult() { + // TODO 비행목적(DosFltPlanBas.purpose)이 수색구조, 인명구조, 시설점검 등 고도, 반경 상관없이 무조건 승인처리 + List areaList = dosFltPlanAreaRepository.findAll(); List resultList = dosFltPlanResultRepository.findAll();