|
|
|
@ -152,16 +152,7 @@ public class BasFlightService {
|
|
|
|
|
return rs; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public BasFlightPlanLaancRs planValid(BasFlightPlanModel rq) { |
|
|
|
|
|
|
|
|
|
BasFlightPlanLaancRs rs = BasFlightPlanLaancRs.builder() |
|
|
|
|
.pilotQlfcYn("N") |
|
|
|
|
.acrftInsuranceYn("N") |
|
|
|
|
.acrftDuplicatedYn("N") |
|
|
|
|
.planAreaDuplicatdYn("N") |
|
|
|
|
.evaluatedTargetAreaYn("N") |
|
|
|
|
.flightAreaYn("N") |
|
|
|
|
.build(); |
|
|
|
|
public void planValid(BasFlightPlanModel rq) { |
|
|
|
|
boolean isEqualsFltElev = false; |
|
|
|
|
|
|
|
|
|
List<BasFlightPlanAreaModel> rqAreaList = rq.getAreaList(); |
|
|
|
@ -178,9 +169,7 @@ public class BasFlightService {
|
|
|
|
|
} |
|
|
|
|
List<BasFlightPlanAreaCoordRq> effectivePlanCount = fltPlanQueryRepository.CoordCount(rq); |
|
|
|
|
for (BasFlightPlanModel i : effectivePlanList) { |
|
|
|
|
// TODO 의미?
|
|
|
|
|
if (rq.getPlanSno().equals(i.getPlanSno())) return rs; |
|
|
|
|
|
|
|
|
|
if (rq.getPlanSno().equals(i.getPlanSno())) return; |
|
|
|
|
} |
|
|
|
|
if (effectivePlanList != null && !effectivePlanList.isEmpty()) { |
|
|
|
|
plan: |
|
|
|
@ -236,28 +225,22 @@ public class BasFlightService {
|
|
|
|
|
rqCoordBufferList = areaUtils.createCircle(rqCoord.get(0), rqArea.getBufferZone()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//검증 - 비행계획서 비행구역 중복확인
|
|
|
|
|
//검증
|
|
|
|
|
overlapCheck = areaUtils.overlaps(rqCoordBufferList, effectiveCoordBufferList); |
|
|
|
|
overlapCheck2 = areaUtils.overlaps(effectiveCoordBufferList, rqCoordBufferList); |
|
|
|
|
if ((overlapCheck || overlapCheck2) && isEqualsFltElev) { |
|
|
|
|
// throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE);
|
|
|
|
|
rs.setPlanAreaDuplicatdYn("Y"); |
|
|
|
|
break plan; |
|
|
|
|
throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE); |
|
|
|
|
} |
|
|
|
|
for (Coordinate coord : effectiveCoordBufferList) { |
|
|
|
|
containCheck = areaUtils.contains(rqCoordBufferList, coord); |
|
|
|
|
if (containCheck && isEqualsFltElev) { |
|
|
|
|
// throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE);
|
|
|
|
|
rs.setPlanAreaDuplicatdYn("Y"); |
|
|
|
|
break plan; |
|
|
|
|
throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
for (Coordinate coord : rqCoordBufferList) { |
|
|
|
|
containCheck2 = areaUtils.contains(effectiveCoordBufferList, coord); |
|
|
|
|
if (containCheck2 && isEqualsFltElev) { |
|
|
|
|
// throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE);
|
|
|
|
|
rs.setPlanAreaDuplicatdYn("Y"); |
|
|
|
|
break plan; |
|
|
|
|
throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -269,92 +252,21 @@ public class BasFlightService {
|
|
|
|
|
for (BasFlightPlanAreaCoordRq idntfNum : effectivePlanCount) { |
|
|
|
|
for (BasFlightPlanArcrftModel rqArcrft : rq.getArcrftList()) { |
|
|
|
|
if (rqArcrft.getIdntfNum().equals(idntfNum.getIdntfNum())) { |
|
|
|
|
// throw new CustomException(ErrorCode.ARCRFT_DATA_DUPLICATE);
|
|
|
|
|
rs.setAcrftDuplicatedYn("Y"); |
|
|
|
|
break acrft; |
|
|
|
|
throw new CustomException(ErrorCode.ARCRFT_DATA_DUPLICATE); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 공역 중복 확인
|
|
|
|
|
for (BasFlightPlanAreaModel rqArea : rq.getAreaList()) { |
|
|
|
|
List<Coordinate> rqCoord = new ArrayList<>(); |
|
|
|
|
List<Coordinate> rqCoordBufferList = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
//rq로 들어온 좌표로 버퍼좌표 생성
|
|
|
|
|
for (BasFlightPlanAreaCoordModel coord : rqArea.getCoordList()) { |
|
|
|
|
Coordinate coords = new Coordinate(coord.getLon(), coord.getLat()); |
|
|
|
|
rqCoord.add(coords); |
|
|
|
|
} |
|
|
|
|
if ("LINE".equals(rqArea.getAreaType())) { |
|
|
|
|
List<Coordinate> trans = areaUtils.transform(rqCoord, "EPSG:4326", "EPSG:5181"); |
|
|
|
|
List<Coordinate> bufferList = areaUtils.buffer(trans, rqArea.getBufferZone()); |
|
|
|
|
rqCoordBufferList = areaUtils.transform(bufferList, "EPSG:5181", "EPSG:4326"); |
|
|
|
|
} else if ("POLYGON".equals(rqArea.getAreaType())) { |
|
|
|
|
rqCoordBufferList.addAll(rqCoord); |
|
|
|
|
} else if ("CIRCLE".equals(rqArea.getAreaType())) { |
|
|
|
|
rqCoordBufferList = areaUtils.createCircle(rqCoord.get(0), rqArea.getBufferZone()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
AirspaceUtils airspaceUtils = AirspaceUtils.getInstance(); |
|
|
|
|
Geometry rqGeometry = airspaceUtils.createGeometryByCoordinate(rqCoordBufferList); |
|
|
|
|
Integer fltElev = Integer.valueOf(rqArea.getFltElev()); |
|
|
|
|
if (fltElev == null) fltElev = 0; |
|
|
|
|
AirspaceUtils.FeatureInfo featureInfo = new AirspaceUtils.FeatureInfo(null, null, 0, fltElev, rqGeometry); |
|
|
|
|
|
|
|
|
|
// 평가 가능 지역 판단
|
|
|
|
|
boolean duplicatedAirspace = airspaceUtils.isDuplicatedAirspace(featureInfo); |
|
|
|
|
rs.setEvaluatedTargetAreaYn(duplicatedAirspace ? "Y" : "N"); |
|
|
|
|
|
|
|
|
|
// 비행 가능 지역 판단
|
|
|
|
|
if (duplicatedAirspace) { |
|
|
|
|
boolean validLaancAirspace = airspaceUtils.isValidLaancAirspace(featureInfo); |
|
|
|
|
rs.setFlightAreaYn(validLaancAirspace ? "Y" : "N"); |
|
|
|
|
} else { |
|
|
|
|
rs.setFlightAreaYn("N"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
return rs; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 비행계획서 검증(LAANC)
|
|
|
|
|
public BasFlightPlanLaancRs validPlan(BasFlightPlanModel rq) { |
|
|
|
|
// 비행계획서 유효성 검사.
|
|
|
|
|
BasFlightPlanLaancRs rs = this.planValid(rq); |
|
|
|
|
|
|
|
|
|
// TODO 조종사 자격 및 기체보험 확인
|
|
|
|
|
PilotValidRq pilotValidRq = PilotValidRq.builder() |
|
|
|
|
.pilotci("조종사CI") |
|
|
|
|
.declarationnum("기체신고번호") |
|
|
|
|
.build(); |
|
|
|
|
|
|
|
|
|
PilotValidRs pilotValidRs = tsService.callPilotValid(pilotValidRq); |
|
|
|
|
if (pilotValidRs == null) { |
|
|
|
|
rs.setPilotQlfcYn("N"); |
|
|
|
|
rs.setAcrftInsuranceYn("N"); |
|
|
|
|
rs.setCorpRegYn("N"); |
|
|
|
|
} else { |
|
|
|
|
rs.setPilotQlfcYn(pilotValidRs.getPilotcredentialyn()); |
|
|
|
|
rs.setAcrftInsuranceYn(pilotValidRs.getArcrftinsuranceyn()); |
|
|
|
|
rs.setCorpRegYn(pilotValidRs.getCorpregyn()); |
|
|
|
|
} |
|
|
|
|
return rs; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 비행계획서 등록
|
|
|
|
|
@Transactional |
|
|
|
|
public BasFlightPlanCreateRs createPlan(BasFlightPlanModel rq) { |
|
|
|
|
public boolean createPlan(BasFlightPlanModel rq) { |
|
|
|
|
|
|
|
|
|
// 비행계획서 유효성 검사.
|
|
|
|
|
BasFlightPlanLaancRs basFlightPlanLaancRs = this.planValid(rq); |
|
|
|
|
|
|
|
|
|
// LAANC가 검증된것들만 DB저장
|
|
|
|
|
if (!basFlightPlanLaancRs.isValidAirspace()) new CustomException(ErrorCode.PLAN_DATA_DUPLICATE); |
|
|
|
|
|
|
|
|
|
this.planValid(rq); |
|
|
|
|
|
|
|
|
|
// 비행계획서
|
|
|
|
|
String userId = jwtTokenUtil.getUserIdByToken(); |
|
|
|
@ -363,10 +275,6 @@ public class BasFlightService {
|
|
|
|
|
basEntity.setAprvlYn("N"); |
|
|
|
|
basEntity.setCreateUserId(userId); |
|
|
|
|
basEntity.setUpdateUserId(userId); |
|
|
|
|
// 사업자 유무 - TS 데이터
|
|
|
|
|
basEntity.setCorpRegYn(rq.getValidLance().getCorpRegYn()); // 사업자유무
|
|
|
|
|
basEntity.setServiceType("PAV-KAC"); |
|
|
|
|
|
|
|
|
|
FltPlanBas rBasEntity = fltPlanBasRepository.save(basEntity); |
|
|
|
|
Integer planSno = rBasEntity.getPlanSno(); |
|
|
|
|
// 비행구역
|
|
|
|
@ -413,59 +321,18 @@ public class BasFlightService {
|
|
|
|
|
arcrftEntity.setPlanSno(planSno); |
|
|
|
|
arcrftEntity.setCreateUserId(userId); |
|
|
|
|
arcrftEntity.setUpdateUserId(userId); |
|
|
|
|
// 추가 필드
|
|
|
|
|
arcrftEntity.setAcrftInsuranceYn(rq.getValidLance().getAcrftInsuranceYn()); // 보험여부
|
|
|
|
|
// arcrftEntity.setInsuranceExperiod(null); // 보헌 유효기간
|
|
|
|
|
// arcrftEntity.setCorporationNm(null); // 법인명
|
|
|
|
|
fltPlanArcrftRepository.save(arcrftEntity); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
// 약관 저장
|
|
|
|
|
if (rq.getTerms() != null && !rq.getTerms().isEmpty()) { |
|
|
|
|
for (AnctCstmrTermsModel agree : rq.getTerms()) { |
|
|
|
|
PtyTermsAgreeTxn agreeEntity = new PtyTermsAgreeTxn(); |
|
|
|
|
agreeEntity.setCstmrSno(basEntity.getCstmrSno()); |
|
|
|
|
agreeEntity.setProcIp(HttpUtils.getRequestIp()); |
|
|
|
|
agreeEntity.setTermsSno(agree.getTermsSno()); |
|
|
|
|
agreeEntity.setUpdateDt(Instant.now()); |
|
|
|
|
agreeEntity.setUpdateUserId(userId); |
|
|
|
|
agreeEntity.setAgreeYn(agree.getAgreeYn()); |
|
|
|
|
if (agree.getAgreeYn().equals("Y")) { |
|
|
|
|
agreeEntity.setAgreeDt(Instant.now()); |
|
|
|
|
} |
|
|
|
|
ptyTermsAgreeTxnRepository.save(agreeEntity); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
throw new CustomException(ErrorCode.FAIL, "약관등록 실패"); |
|
|
|
|
} |
|
|
|
|
// TODO PDF 생성 후 URL 가져오기
|
|
|
|
|
BasFlightPlanCreateRs rs = new BasFlightPlanCreateRs(); |
|
|
|
|
return rs; |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 비행계획서 수정
|
|
|
|
|
@Transactional |
|
|
|
|
public BasFlightPlanLaancRs updatePlan(BasFlightPlanModel rq) { |
|
|
|
|
public boolean updatePlan(BasFlightPlanModel rq) { |
|
|
|
|
|
|
|
|
|
// 비행계획서 유효성 검사.
|
|
|
|
|
BasFlightPlanLaancRs rs = this.planValid(rq); |
|
|
|
|
|
|
|
|
|
// TODO 조종사 자격 및 기체보험 확인
|
|
|
|
|
PilotValidRq pilotValidRq = PilotValidRq.builder() |
|
|
|
|
.pilotci("조종사CI") |
|
|
|
|
.declarationnum("기체신고번호") |
|
|
|
|
.build(); |
|
|
|
|
PilotValidRs pilotValidRs = tsService.callPilotValid(pilotValidRq); |
|
|
|
|
if (pilotValidRs == null) { |
|
|
|
|
rs.setPilotQlfcYn("N"); |
|
|
|
|
rs.setAcrftInsuranceYn("N"); |
|
|
|
|
} else { |
|
|
|
|
rs.setPilotQlfcYn(pilotValidRs.getPilotcredentialyn()); |
|
|
|
|
rs.setAcrftInsuranceYn(pilotValidRs.getArcrftinsuranceyn()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// LAANC가 검증된것들만 DB저장
|
|
|
|
|
if (!rs.isValid()) return rs; |
|
|
|
|
this.planValid(rq); |
|
|
|
|
|
|
|
|
|
if (rq != null && rq.getPlanSno() != null) { |
|
|
|
|
String userId = jwtTokenUtil.getUserIdByToken(); |
|
|
|
@ -474,10 +341,6 @@ public class BasFlightService {
|
|
|
|
|
FltPlanBas planEntity = fltPlanBasRepository.findById(planSno).orElseThrow(); |
|
|
|
|
BasFlightMapper.mapper.updateEntityByModel(planEntity, rq); |
|
|
|
|
planEntity.setUpdateUserId(userId); |
|
|
|
|
|
|
|
|
|
// 사업자 유무 - TS 데이터
|
|
|
|
|
planEntity.setCorpRegYn(pilotValidRs.getCorpregyn()); // 사업자유무
|
|
|
|
|
// planEntity.setServiceType("PAV-KAC");
|
|
|
|
|
fltPlanBasRepository.save(planEntity); |
|
|
|
|
|
|
|
|
|
// 비행구역
|
|
|
|
@ -494,7 +357,6 @@ public class BasFlightService {
|
|
|
|
|
BasFlightMapper.mapper.updateEntityByModel(areaEntity, areaModel); |
|
|
|
|
} |
|
|
|
|
areaEntity.setUpdateUserId(userId); |
|
|
|
|
|
|
|
|
|
fltPlanAreaRepository.save(areaEntity); |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -576,8 +438,6 @@ public class BasFlightService {
|
|
|
|
|
} else { |
|
|
|
|
BasFlightMapper.mapper.updateEntityByModel(arcrftEntity, arcrftModel); |
|
|
|
|
} |
|
|
|
|
// 추가 필드
|
|
|
|
|
arcrftEntity.setAcrftInsuranceYn(pilotValidRs.getArcrftinsuranceyn()); // 보험여부
|
|
|
|
|
fltPlanArcrftRepository.save(arcrftEntity); |
|
|
|
|
} |
|
|
|
|
List<FltPlanArcrft> deleteArcrftEntity = arcrftEntityList.stream().filter(fltPlanArcrft -> { |
|
|
|
@ -590,7 +450,7 @@ public class BasFlightService {
|
|
|
|
|
fltPlanArcrftRepository.deleteAll(deleteArcrftEntity); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return rs; |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 비행계획서 삭제
|
|
|
|
@ -838,5 +698,4 @@ public class BasFlightService {
|
|
|
|
|
|
|
|
|
|
return jsonObject; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|