|
|
|
@ -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<String> 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<DosPlanRs.DosPlan.CheckInfo> 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); |
|
|
|
|