|
|
|
@ -101,7 +101,7 @@ public class BasLaancService {
|
|
|
|
|
|
|
|
|
|
// LAANC 검증
|
|
|
|
|
public BasLaancValidatedRs validationLaanc(BasLaancPlanRq rq) { |
|
|
|
|
|
|
|
|
|
if (!this.laancParamValid(rq)) throw new CustomException(ErrorCode.NON_VALID_PARAMETER); |
|
|
|
|
BasLaancValidatedRs rs = new BasLaancValidatedRs(); |
|
|
|
|
|
|
|
|
|
// 조종사 자격 확인 - 무게가 2kg 초과이거나 상업적일 경우에만 진행
|
|
|
|
@ -155,7 +155,6 @@ public class BasLaancService {
|
|
|
|
|
BasLaancValidatedRs validationPlanDbRs = this.validationPlanAirspace(rq); |
|
|
|
|
rs.setEvaluatedTargetArea(validationPlanDbRs.isEvaluatedTargetArea()); |
|
|
|
|
rs.setFlightArea(validationPlanDbRs.isFlightArea()); |
|
|
|
|
rs.setNotSpecial(this.laancParamValid(rq)); |
|
|
|
|
|
|
|
|
|
return rs; |
|
|
|
|
|
|
|
|
@ -165,6 +164,7 @@ public class BasLaancService {
|
|
|
|
|
@Transactional |
|
|
|
|
public BasLaancLastRs createFlightPlan(BasLaancPlanRq rq) { |
|
|
|
|
if (rq == null || rq.getValidatedRs() == null) throw new CustomException(ErrorCode.NON_VALID_PARAMETER); |
|
|
|
|
if (!this.laancParamValid(rq)) throw new CustomException(ErrorCode.NON_VALID_PARAMETER); |
|
|
|
|
|
|
|
|
|
BasLaancValidatedRs basLaancValidatedRs = rq.getValidatedRs(); |
|
|
|
|
|
|
|
|
@ -519,26 +519,25 @@ public class BasLaancService {
|
|
|
|
|
* 1. 비행시작 일자 금일 ~ 90일 이내 |
|
|
|
|
* 2. 비행 종료일자 금일 ~ 6개월까지 -- validtion 통과후 일몰 |
|
|
|
|
* 3. 일몰, 일출 시간[해떠있는 시간] 체크 |
|
|
|
|
* |
|
|
|
|
* @param rq |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
private boolean laancParamValid(BasLaancPlanRq rq) { |
|
|
|
|
|
|
|
|
|
// 시작날짜보다 종료날짜가 뒤에있으면 Exception발생
|
|
|
|
|
if(!(rq.getSchFltEndDt().isAfter(rq.getSchFltStDt()))) throw new CustomException(ErrorCode.NON_VALID_PARAMETER); |
|
|
|
|
|
|
|
|
|
// TODO :: Instant는 ChronoUnit.MONTHS 지원을 해주지 않아 LocalDateTime으로 계산을 진행했습니다.
|
|
|
|
|
LocalDateTime today = Instant.now().atZone(ZoneId.of(InstantUtils.DEFAULT_ZONE)).toLocalDateTime(); |
|
|
|
|
if (!(rq.getSchFltEndDt().isAfter(rq.getSchFltStDt()))) |
|
|
|
|
throw new CustomException(ErrorCode.NON_VALID_PARAMETER); |
|
|
|
|
|
|
|
|
|
LocalDateTime stDt = rq.getSchFltStDt().atZone(ZoneId.of(InstantUtils.DEFAULT_ZONE)).toLocalDateTime(); |
|
|
|
|
LocalDateTime endDt = rq.getSchFltEndDt().atZone(ZoneId.of(InstantUtils.DEFAULT_ZONE)).toLocalDateTime(); |
|
|
|
|
LocalDateTime today = Instant.now().atZone(ZoneId.of("Asia/Seoul")).toLocalDateTime(); |
|
|
|
|
LocalDateTime stDt = rq.getSchFltStDt().atZone(ZoneId.of("Asia/Seoul")).toLocalDateTime(); |
|
|
|
|
LocalDateTime endDt = rq.getSchFltEndDt().atZone(ZoneId.of("Asia/Seoul")).toLocalDateTime(); |
|
|
|
|
|
|
|
|
|
// schFltStDt가 금일부터 90일 이내에 있는지 확인
|
|
|
|
|
boolean isSchFltStDtValid = stDt.isAfter(today) && |
|
|
|
|
stDt.isBefore(today.plus(90, ChronoUnit.DAYS)); |
|
|
|
|
boolean isSchFltStDtValid = stDt.isAfter(today) && stDt.isBefore(today.plusDays(90)); |
|
|
|
|
|
|
|
|
|
// schFltEndDt가 SchFltStDt보다 뒤에 있고, 금일부터 6개월 이내에 있는지 확인
|
|
|
|
|
boolean isSchFltEndDtValid = endDt.isBefore(today.plus(6, ChronoUnit.MONTHS)); |
|
|
|
|
boolean isSchFltEndDtValid = endDt.isBefore(today.plusMonths(6)); |
|
|
|
|
|
|
|
|
|
// 시간 파라미터가 맞지 않을경우
|
|
|
|
|
if (!(isSchFltStDtValid && isSchFltEndDtValid)) return false; |
|
|
|
@ -550,8 +549,8 @@ public class BasLaancService {
|
|
|
|
|
|
|
|
|
|
ComnSunrisesetRs comnSunrisesetRs = comRiseSetQueryRepository.findBySearchCoordDateTransform(comnSunrisesetCoordRq); |
|
|
|
|
|
|
|
|
|
LocalTime sunUp = this.convertStringToTime(comnSunrisesetRs.getSunrise(), "HHmmss"); |
|
|
|
|
LocalTime sunDown = this.convertStringToTime(comnSunrisesetRs.getSunset(), "HHmmss"); |
|
|
|
|
LocalTime sunUp = this.convertStringToTime(comnSunrisesetRs.getCivilm(), "HHmmss"); |
|
|
|
|
LocalTime sunDown = this.convertStringToTime(comnSunrisesetRs.getCivile(), "HHmmss"); |
|
|
|
|
|
|
|
|
|
LocalTime stringStTm = this.convertStringToTime(stringStDt[1].replace(":", ""), "HHmmss"); |
|
|
|
|
LocalTime stringEndTm = this.convertStringToTime(stringEndDt[1].replace(":", ""), "HHmmss"); |
|
|
|
@ -564,6 +563,7 @@ public class BasLaancService {
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* String to LocalTime - Instant는 시간정보만 담을 수 없음.. |
|
|
|
|
* |
|
|
|
|
* @param time |
|
|
|
|
* @param format |
|
|
|
|
* @return |
|
|
|
@ -575,6 +575,7 @@ public class BasLaancService {
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 일출, 일몰 시간 아래에 있는지 확인 |
|
|
|
|
* |
|
|
|
|
* @param sunrise |
|
|
|
|
* @param sunset |
|
|
|
|
* @param timeToCheck |
|
|
|
|