Browse Source

feat: 드론원스톱 연동 수정에 따른 수정

- 미대상(비대상) 지역일 경우 검토불필요 처리 그외 검토대기
- 비행 목적이 특정 문구(수색구조, 인명구조, 시설정검 등)인 경우 무조건 승인 처리
- 반환시 제한구역코드 및 허용고도 추가
pull/19/head
지대한 2 months ago
parent
commit
8e7202c0a0
  1. 4
      pav-server/src/main/java/com/palnet/biz/api/external/model/DosPlanRs.java
  2. 19
      pav-server/src/main/java/com/palnet/biz/api/external/service/DronOneStopService.java
  3. 6
      pav-server/src/main/java/com/palnet/biz/jpa/entity/type/ReviewedType.java
  4. 2
      pav-server/src/test/java/com/palnet/biz/api/external/service/DronOneStopServiceTest.java

4
pav-server/src/main/java/com/palnet/biz/api/external/model/DosPlanRs.java vendored

@ -1,12 +1,10 @@
package com.palnet.biz.api.external.model; package com.palnet.biz.api.external.model;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.time.LocalDate;
import java.util.List; import java.util.List;
@Data @Data
@ -35,6 +33,8 @@ public class DosPlanRs {
private String zoneno; private String zoneno;
private String chkresult; private String chkresult;
private String obslimit;
private String prmtelev;
private String reason; private String reason;

19
pav-server/src/main/java/com/palnet/biz/api/external/service/DronOneStopService.java vendored

@ -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.DosPlanRq;
import com.palnet.biz.api.external.model.DosPlanRs; import com.palnet.biz.api.external.model.DosPlanRs;
import com.palnet.biz.jpa.entity.*; import com.palnet.biz.jpa.entity.*;
import com.palnet.biz.jpa.entity.type.ReviewedType;
import com.palnet.biz.jpa.repository.dos.*; import com.palnet.biz.jpa.repository.dos.*;
import com.palnet.comn.code.ErrorCode; import com.palnet.comn.code.ErrorCode;
import com.palnet.comn.exception.CustomException; import com.palnet.comn.exception.CustomException;
@ -24,6 +25,7 @@ import java.time.Instant;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Slf4j @Slf4j
@ -38,6 +40,7 @@ public class DronOneStopService {
private final DosFltPlanDroneRepository dosFltPlanDroneRepository; private final DosFltPlanDroneRepository dosFltPlanDroneRepository;
private final DosFltPlanPilotRepository dosFltPlanPilotRepository; private final DosFltPlanPilotRepository dosFltPlanPilotRepository;
private final AreaUtils areaUtils; private final AreaUtils areaUtils;
private final List<String> PASS_PURPOSES = List.of("수색구조", "인명구조", "시설정검");
public DosPlanRs saveDosPlan(DosPlanRq rq) { public DosPlanRs saveDosPlan(DosPlanRq rq) {
if (rq == null) { if (rq == null) {
@ -66,6 +69,7 @@ public class DronOneStopService {
DosPlanRs.DosPlan dosPlan = DosPlanRs.DosPlan.builder() DosPlanRs.DosPlan dosPlan = DosPlanRs.DosPlan.builder()
.aplyno(fltaply.getAplyno()) .aplyno(fltaply.getAplyno())
.build(); .build();
List<DosPlanRs.DosPlan.CheckInfo> checkInfos = new ArrayList<>(); List<DosPlanRs.DosPlan.CheckInfo> checkInfos = new ArrayList<>();
// drone save // drone save
@ -115,6 +119,10 @@ public class DronOneStopService {
// 검증 // 검증
Coordinate centerCoordinate = new Coordinate(area.getLon(), area.getLat()); Coordinate centerCoordinate = new Coordinate(area.getLon(), area.getLat());
DosApprovalResult approvalResult = getApprovalResult(area.getRadius(), area.getElev(), centerCoordinate); 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 // area save
DosFltPlanArea dosFltPlanAreaInsert = DosFltPlanArea.builder() DosFltPlanArea dosFltPlanAreaInsert = DosFltPlanArea.builder()
@ -128,16 +136,22 @@ public class DronOneStopService {
.allowRadius(approvalResult.getAllowRadius()) .allowRadius(approvalResult.getAllowRadius())
.reqRadius(approvalResult.getReqRadius()) .reqRadius(approvalResult.getReqRadius())
.limitZone(approvalResult.getLimitZone()) .limitZone(approvalResult.getLimitZone())
.reviewedType(reviewedType)
.updateDt(Instant.now()) .updateDt(Instant.now())
.createDt(Instant.now()) .createDt(Instant.now())
.build(); .build();
DosFltPlanArea saveDosFltPlanArea = dosFltPlanAreaRepository.save(dosFltPlanAreaInsert); DosFltPlanArea saveDosFltPlanArea = dosFltPlanAreaRepository.save(dosFltPlanAreaInsert);
// 비행 목적이 특정 문구(수색구조, 인명구조, 시설정검 등)인 경우 승인 처리
if(PASS_PURPOSES.contains(fltaply.getPrps())) {
saveApprovalCd = ApprovalCd.APPROVAL;
}
// result save // result save
DosFltPlanResult dosFltPlanResultInsert = DosFltPlanResult.builder() DosFltPlanResult dosFltPlanResultInsert = DosFltPlanResult.builder()
.planSno(saveDosFltPlanArea.getPlanSno()) .planSno(saveDosFltPlanArea.getPlanSno())
.planAreaSno(saveDosFltPlanArea.getPlanAreaSno()) .planAreaSno(saveDosFltPlanArea.getPlanAreaSno())
.approvalCd(approvalResult.getApprovalCd().getCode()) .approvalCd(saveApprovalCd.getCode())
.fltElevMax(approvalResult.getFltElevMax()) .fltElevMax(approvalResult.getFltElevMax())
.updateDt(Instant.now()) .updateDt(Instant.now())
.createDt(Instant.now()) .createDt(Instant.now())
@ -157,7 +171,10 @@ public class DronOneStopService {
.zoneno(area.getZoneno()) .zoneno(area.getZoneno())
.chkresult(approvalCd.getCode()) .chkresult(approvalCd.getCode())
.reason(approvalCd.getMessage()) .reason(approvalCd.getMessage())
.obslimit(Objects.requireNonNull(LimitZoneType.fromCode(approvalResult.getLimitZone())).getMessage())
.prmtelev(approvalResult.getFltElevMax() != null ? String.valueOf(((int) Math.floor(approvalResult.getFltElevMax()))) : null)
.build(); .build();
checkInfos.add(checkInfo); checkInfos.add(checkInfo);
}); });
dosPlan.setCheckinfos(checkInfos); dosPlan.setCheckinfos(checkInfos);

6
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; import lombok.Getter;
public enum ReviewedType { public enum ReviewedType {
REVIEWED("R", "완료"), REVIEWED("R", "검토완료"),
WAIT("W", "대기"), WAIT("W", "검토대기"),
UNNECESSARY("U", "불필요"), UNNECESSARY("U", "검토불필요"),
REVIEW_AGAIN("A", "재검토"); REVIEW_AGAIN("A", "재검토");
private final String code; private final String code;

2
pav-server/src/test/java/com/palnet/biz/api/external/service/DronOneStopServiceTest.java vendored

@ -78,6 +78,8 @@ class DronOneStopServiceTest {
@Test @Test
void updateApprovalResult() { void updateApprovalResult() {
// TODO 비행목적(DosFltPlanBas.purpose)이 수색구조, 인명구조, 시설점검 등 고도, 반경 상관없이 무조건 승인처리
List<DosFltPlanArea> areaList = dosFltPlanAreaRepository.findAll(); List<DosFltPlanArea> areaList = dosFltPlanAreaRepository.findAll();
List<DosFltPlanResult> resultList = dosFltPlanResultRepository.findAll(); List<DosFltPlanResult> resultList = dosFltPlanResultRepository.findAll();

Loading…
Cancel
Save