|
|
|
@ -13,6 +13,7 @@ import java.util.List;
|
|
|
|
|
import java.util.Map; |
|
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
|
|
import com.palnet.biz.api.bas.flight.model.*; |
|
|
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
|
|
import org.json.simple.JSONObject; |
|
|
|
|
import org.json.simple.parser.JSONParser; |
|
|
|
@ -27,16 +28,6 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
|
|
|
|
import com.palnet.biz.api.acnt.jwt.model.JwtGroupModel; |
|
|
|
|
import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; |
|
|
|
|
import com.palnet.biz.api.bas.flight.model.BasFlightAprovRq; |
|
|
|
|
import com.palnet.biz.api.bas.flight.model.BasFlightPlanArcrftModel; |
|
|
|
|
import com.palnet.biz.api.bas.flight.model.BasFlightPlanAreaCoordModel; |
|
|
|
|
import com.palnet.biz.api.bas.flight.model.BasFlightPlanAreaCoordRq; |
|
|
|
|
import com.palnet.biz.api.bas.flight.model.BasFlightPlanAreaModel; |
|
|
|
|
import com.palnet.biz.api.bas.flight.model.BasFlightPlanListRq; |
|
|
|
|
import com.palnet.biz.api.bas.flight.model.BasFlightPlanModel; |
|
|
|
|
import com.palnet.biz.api.bas.flight.model.BasFlightPlanPilotModel; |
|
|
|
|
import com.palnet.biz.api.bas.flight.model.BasFlightScheduleRs; |
|
|
|
|
import com.palnet.biz.api.bas.flight.model.BasFlightWeatherModel; |
|
|
|
|
import com.palnet.biz.api.bas.group.model.BasGroupJoinModel; |
|
|
|
|
import com.palnet.biz.api.comn.model.ComnPagingRs; |
|
|
|
|
import com.palnet.biz.jpa.entity.FltPlanArcrft; |
|
|
|
@ -181,7 +172,14 @@ public class BasFlightService {
|
|
|
|
|
return rs; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void planValid(BasFlightPlanModel rq) { |
|
|
|
|
public BasFlightPlanLaancRs planValid(BasFlightPlanModel rq) { |
|
|
|
|
BasFlightPlanLaancRs rs = BasFlightPlanLaancRs.builder() |
|
|
|
|
.pilotQlfcYn("N") |
|
|
|
|
.acrftInsuranceYn("N") |
|
|
|
|
.airspaceDuplicatedYn("N") |
|
|
|
|
.acrftDuplicatedYn("N") |
|
|
|
|
.planAreaDuplicatdYn("N") |
|
|
|
|
.build(); |
|
|
|
|
boolean isEqualsFltElev = false; |
|
|
|
|
List<BasFlightPlanAreaModel> rqAreaList = rq.getAreaList(); |
|
|
|
|
String rqFltElev = rqAreaList.get(0).getFltElev(); |
|
|
|
@ -197,10 +195,12 @@ public class BasFlightService {
|
|
|
|
|
} |
|
|
|
|
List<BasFlightPlanAreaCoordRq> effectivePlanCount = fltPlanQueryRepository.CoordCount(rq); |
|
|
|
|
for (BasFlightPlanModel i : effectivePlanList) { |
|
|
|
|
if (rq.getPlanSno().equals(i.getPlanSno())) return; |
|
|
|
|
// TODO 의미?
|
|
|
|
|
if (rq.getPlanSno().equals(i.getPlanSno())) return rs; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
if (effectivePlanList != null && !effectivePlanList.isEmpty()) { |
|
|
|
|
for (BasFlightPlanModel plan : effectivePlanList) { |
|
|
|
|
plan: for (BasFlightPlanModel plan : effectivePlanList) { |
|
|
|
|
// 1. 구역 조회
|
|
|
|
|
List<FltPlanArea> areaList = fltPlanAreaRepository.findByPlanSnoOrderByPlanAreaSnoAsc(plan.getPlanSno()); |
|
|
|
|
|
|
|
|
@ -251,23 +251,29 @@ public class BasFlightService {
|
|
|
|
|
} else if ("CIRCLE".equals(rqArea.getAreaType())) { |
|
|
|
|
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); |
|
|
|
|
// throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE);
|
|
|
|
|
rs.setPlanAreaDuplicatdYn("Y"); |
|
|
|
|
break plan; |
|
|
|
|
} |
|
|
|
|
for (Coordinate coord : effectiveCoordBufferList) { |
|
|
|
|
containCheck = areaUtils.contains(rqCoordBufferList, coord); |
|
|
|
|
if (containCheck && isEqualsFltElev) { |
|
|
|
|
throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE); |
|
|
|
|
// throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE);
|
|
|
|
|
rs.setPlanAreaDuplicatdYn("Y"); |
|
|
|
|
break plan; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
for (Coordinate coord : rqCoordBufferList) { |
|
|
|
|
containCheck2 = areaUtils.contains(effectiveCoordBufferList, coord); |
|
|
|
|
if (containCheck2 && isEqualsFltElev) { |
|
|
|
|
throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE); |
|
|
|
|
// throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE);
|
|
|
|
|
rs.setPlanAreaDuplicatdYn("Y"); |
|
|
|
|
break plan; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -275,24 +281,34 @@ public class BasFlightService {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 3. 중복 기체 확인
|
|
|
|
|
for (BasFlightPlanAreaCoordRq idntfNum : effectivePlanCount) { |
|
|
|
|
acrft: for (BasFlightPlanAreaCoordRq idntfNum : effectivePlanCount) { |
|
|
|
|
for (BasFlightPlanArcrftModel rqArcrft : rq.getArcrftList()) { |
|
|
|
|
if (rqArcrft.getIdntfNum().equals(idntfNum.getIdntfNum())) { |
|
|
|
|
throw new CustomException(ErrorCode.ARCRFT_DATA_DUPLICATE); |
|
|
|
|
// throw new CustomException(ErrorCode.ARCRFT_DATA_DUPLICATE);
|
|
|
|
|
rs.setAcrftDuplicatedYn("Y"); |
|
|
|
|
break acrft; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return rs; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 비행계획서 등록
|
|
|
|
|
@Transactional |
|
|
|
|
public boolean createPlan(BasFlightPlanModel rq) { |
|
|
|
|
public BasFlightPlanLaancRs createPlan(BasFlightPlanModel rq) { |
|
|
|
|
|
|
|
|
|
// 비행계획서 유효성 검사.
|
|
|
|
|
this.planValid(rq); |
|
|
|
|
BasFlightPlanLaancRs rs = this.planValid(rq); |
|
|
|
|
// TODO 공역 중복 확인
|
|
|
|
|
rs.setAirspaceDuplicatedYn("N"); |
|
|
|
|
// TODO 조종사 자격 및 기체보험 확인
|
|
|
|
|
rs.setPilotQlfcYn("Y"); |
|
|
|
|
rs.setAcrftInsuranceYn("Y"); |
|
|
|
|
|
|
|
|
|
if(!rs.isValid()) return rs; |
|
|
|
|
|
|
|
|
|
// 비행계획서
|
|
|
|
|
String userId = jwtTokenUtil.getUserIdByToken(); |
|
|
|
@ -349,15 +365,23 @@ public class BasFlightService {
|
|
|
|
|
fltPlanArcrftRepository.save(arcrftEntity); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return true; |
|
|
|
|
return rs; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 비행계획서 수정
|
|
|
|
|
@Transactional |
|
|
|
|
public boolean updatePlan(BasFlightPlanModel rq) { |
|
|
|
|
public BasFlightPlanLaancRs updatePlan(BasFlightPlanModel rq) { |
|
|
|
|
|
|
|
|
|
// 비행계획서 유효성 검사.
|
|
|
|
|
this.planValid(rq); |
|
|
|
|
// 비행계획서 유효성 검사.
|
|
|
|
|
BasFlightPlanLaancRs rs = this.planValid(rq); |
|
|
|
|
// TODO 공역 중복 확인
|
|
|
|
|
rs.setAirspaceDuplicatedYn("N"); |
|
|
|
|
// TODO 조종사 자격 및 기체보험 확인
|
|
|
|
|
rs.setPilotQlfcYn("Y"); |
|
|
|
|
rs.setAcrftInsuranceYn("Y"); |
|
|
|
|
|
|
|
|
|
if(!rs.isValid()) return rs; |
|
|
|
|
|
|
|
|
|
if (rq != null && rq.getPlanSno() != null) { |
|
|
|
|
String userId = jwtTokenUtil.getUserIdByToken(); |
|
|
|
@ -475,7 +499,7 @@ public class BasFlightService {
|
|
|
|
|
fltPlanArcrftRepository.deleteAll(deleteArcrftEntity); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return true; |
|
|
|
|
return rs; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 비행계획서 삭제
|
|
|
|
|