|
|
|
@ -10,6 +10,8 @@ import com.palnet.biz.api.external.model.PilotValidRq;
|
|
|
|
|
import com.palnet.biz.api.external.model.PilotValidRs; |
|
|
|
|
import com.palnet.biz.api.external.service.TsService; |
|
|
|
|
import com.palnet.biz.jpa.entity.*; |
|
|
|
|
import com.palnet.biz.jpa.entity.type.ArcrftWghtCd; |
|
|
|
|
import com.palnet.biz.jpa.entity.type.FltType; |
|
|
|
|
import com.palnet.biz.jpa.repository.flt.*; |
|
|
|
|
import com.palnet.biz.jpa.repository.pty.PtyCstmrQueryRepository; |
|
|
|
|
import com.palnet.biz.jpa.repository.pty.PtyGroupBasRepository; |
|
|
|
@ -66,54 +68,64 @@ public class BasLaancService {
|
|
|
|
|
// LAANC 검증
|
|
|
|
|
public BasLaancValidatedRs validationLaanc(BasLaancPlanRq rq) { |
|
|
|
|
|
|
|
|
|
BasLaancValidatedRs basLaancValidatedRs = new BasLaancValidatedRs(); |
|
|
|
|
|
|
|
|
|
basLaancValidatedRs.setCommercialYn("COMMERCIAL".equals(rq.getFltType()) ? "Y" : "N"); |
|
|
|
|
// basLaancValidatedRs.set
|
|
|
|
|
; |
|
|
|
|
// TODO 조종사 자격 및 기체보험 확인
|
|
|
|
|
PilotValidRq pilotValidRq = PilotValidRq.builder() |
|
|
|
|
BasLaancValidatedRs rs = new BasLaancValidatedRs(); |
|
|
|
|
|
|
|
|
|
// 조종사 자격 확인 - 무게가 2kg 초과이거나 상업적일 경우에만 진행
|
|
|
|
|
// 상업 여부 - 상업(true)
|
|
|
|
|
boolean isCommercial = FltType.COMMERCIAL == rq.getFltType(); |
|
|
|
|
// 2kg 초과 기체신고번호
|
|
|
|
|
List<String> idntfNumList = rq.getArcrftList().stream().filter(arcrft -> arcrft.getArcrftWghtCd() != ArcrftWghtCd.W250G_LOE && arcrft.getArcrftWghtCd() != ArcrftWghtCd.W250G_W2KG).map(BasLaancArcrftModel::getIdntfNum).collect(Collectors.toList()); |
|
|
|
|
// 신고 여부 - 무게가 2kg 초과이거나 상업적일 경우 - true
|
|
|
|
|
boolean isReport = !idntfNumList.isEmpty() || isCommercial; |
|
|
|
|
rs.setReport(isReport); |
|
|
|
|
|
|
|
|
|
// TODO start - 조종사 자격 및 기체보험 확인
|
|
|
|
|
if (isReport) { |
|
|
|
|
List<PilotValidRq> pilotValidRqList = idntfNumList.stream().map(idntfNum -> { |
|
|
|
|
// TODO 기체보험 확인, 조종사 자격 확인
|
|
|
|
|
return PilotValidRq.builder() |
|
|
|
|
.pilotci("조종사CI") |
|
|
|
|
.declarationnum("기체신고번호") |
|
|
|
|
.declarationnum(idntfNum) |
|
|
|
|
.build(); |
|
|
|
|
}).collect(Collectors.toList()); |
|
|
|
|
|
|
|
|
|
PilotValidRs pilotValidRs = tsService.callPilotValid(pilotValidRq); |
|
|
|
|
if (pilotValidRs == null) { |
|
|
|
|
basLaancValidatedRs.setPilotQlfcYn("N"); |
|
|
|
|
basLaancValidatedRs.setArcrftInsuranceYn("N"); |
|
|
|
|
List<PilotValidRs> pilotValidRsList = tsService.callPilotValid(pilotValidRqList); |
|
|
|
|
if (pilotValidRsList.isEmpty()) { |
|
|
|
|
rs.setPilotQlfc(false); |
|
|
|
|
rs.setArcrftInsurance(false); |
|
|
|
|
} else { |
|
|
|
|
basLaancValidatedRs.setPilotQlfcYn(pilotValidRs.getPilotcredentialyn()); |
|
|
|
|
basLaancValidatedRs.setArcrftInsuranceYn(pilotValidRs.getArcrftinsuranceyn()); |
|
|
|
|
rs.setPilotValidRsList(pilotValidRsList); |
|
|
|
|
rs.setPilotQlfc(pilotValidRsList.stream().allMatch(pilotValidRs -> "Y".equals(pilotValidRs.getPilotcredentialyn()))); |
|
|
|
|
rs.setArcrftInsurance(pilotValidRsList.stream().allMatch(pilotValidRs -> "Y".equals(pilotValidRs.getArcrftinsuranceyn()))); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
// TODO end - 조종사 자격 및 기체보험 확인
|
|
|
|
|
|
|
|
|
|
// BasLaancValidatedRs basLaancValidatedRs = this.validationPlanAreaAndArcrftAndAirspace(rq);
|
|
|
|
|
|
|
|
|
|
// 고도 150m 이하 - true
|
|
|
|
|
boolean isElev = rq.getAreaList().stream().anyMatch(area -> area.getFltElev() != null && Integer.parseInt(area.getFltElev()) <= 150); |
|
|
|
|
rs.setElev(isElev); |
|
|
|
|
// 기체중량 25kg 이하
|
|
|
|
|
boolean isArcrftWeight = rq.getArcrftList().stream().anyMatch(arcrft -> arcrft.getArcrftWghtCd() != ArcrftWghtCd.W25KG_GO && arcrft.getArcrftWghtCd() != ArcrftWghtCd.W25KG_GO_TEST); |
|
|
|
|
rs.setArcrftWeight(isArcrftWeight); |
|
|
|
|
|
|
|
|
|
// // TODO 조종사 자격 및 기체보험 확인
|
|
|
|
|
// PilotValidRq pilotValidRq = PilotValidRq.builder()
|
|
|
|
|
// .pilotci("조종사CI")
|
|
|
|
|
// .declarationnum("기체신고번호")
|
|
|
|
|
// .build();
|
|
|
|
|
//
|
|
|
|
|
// PilotValidRs pilotValidRs = tsService.callPilotValid(pilotValidRq);
|
|
|
|
|
// if (pilotValidRs == null) {
|
|
|
|
|
// basLaancValidatedRs.setPilotQlfcYn("N");
|
|
|
|
|
// basLaancValidatedRs.setArcrftInsuranceYn("N");
|
|
|
|
|
// } else {
|
|
|
|
|
// basLaancValidatedRs.setPilotQlfcYn(pilotValidRs.getPilotcredentialyn());
|
|
|
|
|
// basLaancValidatedRs.setArcrftInsuranceYn(pilotValidRs.getArcrftinsuranceyn());
|
|
|
|
|
// }
|
|
|
|
|
// 비행구역 중복여부, 기체 중복여부, 판단구역 - 공역과 겹칠 경우, 비행가능여부
|
|
|
|
|
BasLaancValidatedRs validationPlanRs = this.validationPlanAreaAndArcrftAndAirspace(rq); |
|
|
|
|
BasLaancMapper.MAPPER.merge(rs, validationPlanRs); |
|
|
|
|
|
|
|
|
|
return basLaancValidatedRs; |
|
|
|
|
return rs; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 비행계획서 등록, 약관 등록, 공문 생성
|
|
|
|
|
@Transactional |
|
|
|
|
public BasLaancLastRs createFlightPlan(BasLaancPlanRq rq) { |
|
|
|
|
BasLaancValidatedRs basLaancValidatedRs = this.validationPlanAreaAndArcrftAndAirspace(rq); |
|
|
|
|
BasLaancValidatedRs basLaancValidatedRs = rq.getValidatedRs(); |
|
|
|
|
|
|
|
|
|
BasLaancValidatedRs validatedRs = this.validationPlanAreaAndArcrftAndAirspace(rq); |
|
|
|
|
BasLaancMapper.MAPPER.merge(basLaancValidatedRs, validatedRs); |
|
|
|
|
// LAANC가 검증된것들만 DB저장
|
|
|
|
|
if (!basLaancValidatedRs.isValid()) new CustomException(ErrorCode.PLAN_DATA_DUPLICATE); |
|
|
|
|
if (!basLaancValidatedRs.isValid()) throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 비행계획서
|
|
|
|
@ -124,7 +136,7 @@ public class BasLaancService {
|
|
|
|
|
FltPlanBas fltPlanBas = BasLaancMapper.MAPPER.modelToPlanEntity(cstmrInfo); |
|
|
|
|
FltPlanBas rqFltPlanBas = BasLaancMapper.MAPPER.modelToPlanEntity(rq); |
|
|
|
|
|
|
|
|
|
BasLaancMapper.MAPPER.mergeToEntity(fltPlanBas, rqFltPlanBas); |
|
|
|
|
BasLaancMapper.MAPPER.merge(fltPlanBas, rqFltPlanBas); |
|
|
|
|
fltPlanBas.setDelYn("N"); |
|
|
|
|
fltPlanBas.setAprvlYn("Y"); |
|
|
|
|
fltPlanBas.setAprvlDt(Instant.now()); |
|
|
|
@ -187,7 +199,7 @@ public class BasLaancService {
|
|
|
|
|
arcrftEntity.setCreateUserId(userId); |
|
|
|
|
arcrftEntity.setUpdateUserId(userId); |
|
|
|
|
// 추가 필드
|
|
|
|
|
arcrftEntity.setAcrftInsuranceYn(rq.getValidatedRs().getArcrftInsuranceYn()); // 보험여부
|
|
|
|
|
arcrftEntity.setAcrftInsuranceYn(rq.getValidatedRs().isArcrftInsurance() ? "Y" : "N"); // 보험여부
|
|
|
|
|
// arcrftEntity.setInsuranceExperiod(null); // 보헌 유효기간
|
|
|
|
|
// arcrftEntity.setCorporationNm(null); // 법인명
|
|
|
|
|
fltPlanArcrftRepository.save(arcrftEntity); |
|
|
|
@ -232,12 +244,10 @@ public class BasLaancService {
|
|
|
|
|
|
|
|
|
|
// 초기화
|
|
|
|
|
BasLaancValidatedRs rs = BasLaancValidatedRs.builder() |
|
|
|
|
.pilotQlfcYn("N") |
|
|
|
|
.arcrftInsuranceYn("N") |
|
|
|
|
.arcrftDuplicatedYn("N") |
|
|
|
|
.planAreaDuplicatdYn("N") |
|
|
|
|
.evaluatedTargetAreaYn("N") |
|
|
|
|
.flightAreaYn("N") |
|
|
|
|
.isPlanAreaDuplicatd(false) // 비행구역 중복여부
|
|
|
|
|
.isArcrftDuplicated(false) // 기체 중복여부
|
|
|
|
|
.isEvaluatedTargetArea(false) // 판단구역 - 공역과 겹칠 경우
|
|
|
|
|
.isFlightArea(false) // 비행가능여부
|
|
|
|
|
.build(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -303,7 +313,7 @@ public class BasLaancService {
|
|
|
|
|
Geometry targetGeometry = areaUtils.coordinateToGeometry(targetBufferCoords); |
|
|
|
|
Geometry effectiveGeometry = areaUtils.coordinateToGeometry(effectiveCoordBufferList); |
|
|
|
|
if (targetGeometry.intersects(effectiveGeometry) && isEqualsFltElev) { |
|
|
|
|
rs.setPlanAreaDuplicatdYn("Y"); |
|
|
|
|
rs.setPlanAreaDuplicatd(true); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -320,7 +330,7 @@ public class BasLaancService {
|
|
|
|
|
) |
|
|
|
|
); |
|
|
|
|
if (isDuplicatedArcrft) { |
|
|
|
|
rs.setArcrftDuplicatedYn("Y"); |
|
|
|
|
rs.setArcrftDuplicated(true); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -354,7 +364,7 @@ public class BasLaancService {
|
|
|
|
|
|
|
|
|
|
// 평가 가능 지역 판단
|
|
|
|
|
boolean duplicatedAirspace = airspaceUtils.isDuplicatedAirspace(featureInfo); |
|
|
|
|
rs.setEvaluatedTargetAreaYn(duplicatedAirspace ? "Y" : "N"); |
|
|
|
|
rs.setEvaluatedTargetArea(duplicatedAirspace); |
|
|
|
|
|
|
|
|
|
// 비행 가능 지역 판단
|
|
|
|
|
// if (duplicatedAirspace) {
|
|
|
|
@ -366,7 +376,7 @@ public class BasLaancService {
|
|
|
|
|
|
|
|
|
|
// 비행 가능 지역 판단
|
|
|
|
|
boolean validLaancAirspace = airspaceUtils.isValidLaancAirspace(featureInfo); |
|
|
|
|
rs.setFlightAreaYn(validLaancAirspace ? "Y" : "N"); |
|
|
|
|
rs.setFlightArea(validLaancAirspace); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
return rs; |
|
|
|
|