|
|
|
@ -3,6 +3,9 @@ package com.palnet.biz.api.bas.dos.service;
|
|
|
|
|
import com.palnet.biz.api.bas.dos.model.BasDosPlanAreaRs; |
|
|
|
|
import com.palnet.biz.api.bas.dos.model.BasDosPlanRq; |
|
|
|
|
import com.palnet.biz.api.bas.dos.model.BasDosPlanRs; |
|
|
|
|
import com.palnet.biz.api.bas.dos.model.UpdatePlanRq; |
|
|
|
|
import com.palnet.biz.api.external.model.DosApprovalResult; |
|
|
|
|
import com.palnet.biz.api.external.service.DronOneStopService; |
|
|
|
|
import com.palnet.biz.jpa.entity.DosFltPlanArea; |
|
|
|
|
import com.palnet.biz.jpa.entity.DosFltPlanBas; |
|
|
|
|
import com.palnet.biz.jpa.entity.DosFltPlanResult; |
|
|
|
@ -19,9 +22,12 @@ import org.springframework.stereotype.Service;
|
|
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
|
import org.springframework.util.StringUtils; |
|
|
|
|
|
|
|
|
|
import java.time.Instant; |
|
|
|
|
import java.time.LocalDate; |
|
|
|
|
import java.time.Month; |
|
|
|
|
import java.util.*; |
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.Map; |
|
|
|
|
import java.util.Optional; |
|
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
|
|
@Slf4j |
|
|
|
@ -33,6 +39,7 @@ public class BasDosService {
|
|
|
|
|
private final DosFltPlanAreaRepository dosFltPlanAreaRepository; |
|
|
|
|
private final DosFltPlanResultRepository dosFltPlanResultRepository; |
|
|
|
|
private final DosFltPlanQueryRepository dosFltPlanQueryRepository; |
|
|
|
|
private final DronOneStopService dronOneStopService; |
|
|
|
|
private final AreaUtils areaUtils; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@ -73,13 +80,13 @@ public class BasDosService {
|
|
|
|
|
String[] purposeTexts = {"레저비행", "사진/영상촬영"}; |
|
|
|
|
if (StringUtils.hasText(purpose)) { |
|
|
|
|
boolean isEtc = true; |
|
|
|
|
for(String compareStr: purposeTexts){ |
|
|
|
|
if(purpose.contains(compareStr)){ |
|
|
|
|
for (String compareStr : purposeTexts) { |
|
|
|
|
if (purpose.contains(compareStr)) { |
|
|
|
|
isEtc = false; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if(isEtc) { |
|
|
|
|
if (isEtc) { |
|
|
|
|
purpose = "기타"; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -196,6 +203,68 @@ public class BasDosService {
|
|
|
|
|
return rs; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 비행계획 수정 |
|
|
|
|
* |
|
|
|
|
* @param rq |
|
|
|
|
*/ |
|
|
|
|
public void updatePlan(List<UpdatePlanRq> rq) { |
|
|
|
|
for (UpdatePlanRq planRq : rq) { |
|
|
|
|
if (planRq.getPlanAreaSno() == null) { |
|
|
|
|
log.info("planAreaSno is empty."); |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Optional<DosFltPlanArea> optional = dosFltPlanAreaRepository.findById(planRq.getPlanAreaSno()); |
|
|
|
|
if (optional.isPresent()) { |
|
|
|
|
DosFltPlanArea area = optional.get(); |
|
|
|
|
|
|
|
|
|
if (planRq.getFltElev() != null) area.setFltElev(planRq.getFltElev()); |
|
|
|
|
if (planRq.getBufferZone() != null) area.setBufferZone(planRq.getBufferZone()); |
|
|
|
|
if (StringUtils.hasText(planRq.getDtl())) area.setDtl(planRq.getDtl()); |
|
|
|
|
if (StringUtils.hasText(planRq.getEra())) area.setEra(planRq.getEra()); |
|
|
|
|
if (StringUtils.hasText(planRq.getRm())) area.setRm(planRq.getRm()); |
|
|
|
|
|
|
|
|
|
area = dosFltPlanAreaRepository.save(area); |
|
|
|
|
|
|
|
|
|
// 재검증
|
|
|
|
|
if (planRq.getFltElev() != null || planRq.getBufferZone() != null) { |
|
|
|
|
Optional<DosFltPlanResult> optionalResult = dosFltPlanResultRepository.findById(area.getPlanAreaSno()); |
|
|
|
|
DosFltPlanResult dosFltPlanResult = null; |
|
|
|
|
if(optionalResult.isPresent()) { |
|
|
|
|
dosFltPlanResult = optionalResult.get(); |
|
|
|
|
} |
|
|
|
|
// Circle만 체크
|
|
|
|
|
Double bufferZone = area.getBufferZone(); |
|
|
|
|
Double fltElev = area.getFltElev() != null ? area.getFltElev() : 0; |
|
|
|
|
|
|
|
|
|
// 좌표 추출 - 중심 좌표
|
|
|
|
|
Coordinate centerPoint = new Coordinate(area.getLon(), area.getLat()); |
|
|
|
|
|
|
|
|
|
DosApprovalResult approvalResult = dronOneStopService.getApprovalResult(bufferZone, fltElev, centerPoint); |
|
|
|
|
|
|
|
|
|
// 재검증 수정
|
|
|
|
|
if(dosFltPlanResult != null){ |
|
|
|
|
dosFltPlanResult.setApprovalCd(approvalResult.getApprovalCd().getCode()); |
|
|
|
|
dosFltPlanResult.setFltElevMax(approvalResult.getFltElevMax()); |
|
|
|
|
} else { |
|
|
|
|
dosFltPlanResult = DosFltPlanResult.builder() |
|
|
|
|
.planAreaSno(area.getPlanAreaSno()) |
|
|
|
|
.planSno(area.getPlanSno()) |
|
|
|
|
.approvalCd(approvalResult.getApprovalCd().getCode()) |
|
|
|
|
.fltElevMax(approvalResult.getFltElevMax()) |
|
|
|
|
.updateDt(Instant.now()) |
|
|
|
|
.createDt(Instant.now()) |
|
|
|
|
.build(); |
|
|
|
|
} |
|
|
|
|
dosFltPlanResultRepository.save(dosFltPlanResult); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
log.warn("update data is not found : {}", planRq); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Buffer 좌표 추출 |
|
|
|
|
* 비행구역의 데이터를 이용하여 주변의 좌표를 추출한다. |
|
|
|
|