|
|
|
@ -1,11 +1,11 @@
|
|
|
|
|
package com.palnet.biz.api.external.service; |
|
|
|
|
|
|
|
|
|
import com.palnet.biz.api.bas.dos.model.LimitZoneType; |
|
|
|
|
import com.palnet.biz.api.comn.coordinate.model.CompotentAuthorityItemRS; |
|
|
|
|
import com.palnet.biz.api.comn.coordinate.model.CompotentAuthorityRQ; |
|
|
|
|
import com.palnet.biz.api.comn.coordinate.service.ComnCoordinateService; |
|
|
|
|
import com.palnet.biz.api.comn.share.ShareService; |
|
|
|
|
import com.palnet.biz.api.external.model.ApprovalCd; |
|
|
|
|
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.api.external.model.*; |
|
|
|
|
import com.palnet.biz.jpa.entity.*; |
|
|
|
|
import com.palnet.biz.jpa.entity.type.ReviewedType; |
|
|
|
|
import com.palnet.biz.jpa.repository.dos.*; |
|
|
|
@ -26,6 +26,7 @@ import java.time.Instant;
|
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
import java.util.HashMap; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.Map; |
|
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
|
|
@Slf4j |
|
|
|
@ -41,6 +42,8 @@ public class DronOneStopService {
|
|
|
|
|
private final DosFltPlanPilotRepository dosFltPlanPilotRepository; |
|
|
|
|
private final ShareService shareService; |
|
|
|
|
private final AreaUtils areaUtils; |
|
|
|
|
private final ComnCoordinateService comnCoordinateService; |
|
|
|
|
|
|
|
|
|
private final List<String> PASS_PURPOSES = List.of("수색구조", "인명구조", "시설정검"); |
|
|
|
|
|
|
|
|
|
public DosPlanRs saveDosPlan(DosPlanRq rq) { |
|
|
|
@ -130,6 +133,7 @@ public class DronOneStopService {
|
|
|
|
|
// 검토결과 - approvalCd가 비대상일 경우 검토불필요 그외 대기
|
|
|
|
|
ReviewedType reviewedType = saveApprovalCd == ApprovalCd.UNTARGETED_AREA ? ReviewedType.UNNECESSARY : ReviewedType.WAIT; |
|
|
|
|
|
|
|
|
|
DosCptAuthResult cptAuth = this.getCptAuth(centerCoordinate, area.getRadius()); |
|
|
|
|
// area save
|
|
|
|
|
DosFltPlanArea dosFltPlanAreaInsert = DosFltPlanArea.builder() |
|
|
|
|
.planSno(saveDosFltPlanBas.getPlanSno()) |
|
|
|
@ -144,6 +148,8 @@ public class DronOneStopService {
|
|
|
|
|
.limitZone(approvalResult.getLimitZone()) |
|
|
|
|
.reviewedType(reviewedType) |
|
|
|
|
.reqElev(reqElev) |
|
|
|
|
.cptCd(cptAuth.getCptCode()) |
|
|
|
|
.innerCptCd(cptAuth.getControlCptCode()) |
|
|
|
|
.updateDt(Instant.now()) |
|
|
|
|
.createDt(Instant.now()) |
|
|
|
|
.build(); |
|
|
|
@ -352,4 +358,47 @@ public class DronOneStopService {
|
|
|
|
|
return distance; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public DosCptAuthResult getCptAuth(Coordinate centerCoordinate, Double radius) { |
|
|
|
|
List<Coordinate> targetCoordinate = areaUtils.createCircle(centerCoordinate, radius); |
|
|
|
|
List<CompotentAuthorityRQ> rq = targetCoordinate.stream().map(coordinate -> CompotentAuthorityRQ.builder() |
|
|
|
|
.lat(coordinate.y) |
|
|
|
|
.lon(coordinate.x) |
|
|
|
|
.build()).collect(Collectors.toList()); |
|
|
|
|
List<CompotentAuthorityItemRS> competentAuthority = comnCoordinateService.getCompetentAuthority(rq); |
|
|
|
|
DosCptAuthResult result = new DosCptAuthResult(); |
|
|
|
|
if (competentAuthority != null && !competentAuthority.isEmpty()) { |
|
|
|
|
List<String> cptCode = competentAuthority.stream().map(CompotentAuthorityItemRS::getCptAuthCode).distinct().collect(Collectors.toList()); |
|
|
|
|
result.setCptCode(cptCode); |
|
|
|
|
} |
|
|
|
|
// TODO 관제권 체크 후 결과 반환
|
|
|
|
|
// 관제권 airspaces
|
|
|
|
|
Map<AirspaceUtils.AirspaceType, String> airspaceParamMap = Map.of( |
|
|
|
|
AirspaceUtils.AirspaceType.C_CONTROL_GIMPO, "F0002", // 김포항공관리사무소(안전운항과)
|
|
|
|
|
AirspaceUtils.AirspaceType.C_CONTROL_ULSAN, "C0001" // 울산공항출장소
|
|
|
|
|
// AirspaceUtils.AirspaceType.C_CONTROL_JEJU, "F0008", // 제주지방항공청(안전운항과)
|
|
|
|
|
|
|
|
|
|
); |
|
|
|
|
List<String> controlCptCode = new ArrayList<>(); |
|
|
|
|
AirspaceUtils airspaceUtils = AirspaceUtils.getInstance(); |
|
|
|
|
Geometry targetGeometry = airspaceUtils.createGeometryByCoordinate(targetCoordinate); |
|
|
|
|
for (AirspaceUtils.AirspaceType airspaceType : airspaceParamMap.keySet()) { |
|
|
|
|
List<AirspaceUtils.FeatureInfo> airspaces = airspaceUtils.getAirspaces(airspaceType); |
|
|
|
|
if (airspaces == null || airspaces.isEmpty()) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
String innerCptCode = airspaceParamMap.get(airspaceType); |
|
|
|
|
for (AirspaceUtils.FeatureInfo airspace : airspaces) { |
|
|
|
|
if (airspace.getGeometry().intersects(targetGeometry)) { |
|
|
|
|
controlCptCode.add(innerCptCode); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (!controlCptCode.isEmpty()) { |
|
|
|
|
result.setControlCptCode(controlCptCode); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|