|
|
|
@ -100,8 +100,8 @@ public class BasLaancService {
|
|
|
|
|
private final String FILE_DOWNLOAD_URL = "/api/comn/file/download"; |
|
|
|
|
|
|
|
|
|
// LAANC 검증
|
|
|
|
|
public BasLaancValidatedRs validationLaanc(BasLaancPlanRq rq) { |
|
|
|
|
|
|
|
|
|
public BasLaancValidatedRs validationLaanc(BasLaancPlanRq rq) { |
|
|
|
|
if (!this.laancParamValid(rq)) throw new CustomException(ErrorCode.NON_VALID_PARAMETER); |
|
|
|
|
BasLaancValidatedRs rs = new BasLaancValidatedRs(); |
|
|
|
|
|
|
|
|
|
// 조종사 자격 확인 - 무게가 2kg 초과이거나 상업적일 경우에만 진행
|
|
|
|
@ -155,16 +155,16 @@ public class BasLaancService {
|
|
|
|
|
BasLaancValidatedRs validationPlanDbRs = this.validationPlanAirspace(rq); |
|
|
|
|
rs.setEvaluatedTargetArea(validationPlanDbRs.isEvaluatedTargetArea()); |
|
|
|
|
rs.setFlightArea(validationPlanDbRs.isFlightArea()); |
|
|
|
|
rs.setNotSpecial(this.laancParamValid(rq)); |
|
|
|
|
|
|
|
|
|
return rs; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 비행계획서 등록, 약관 등록, 공문 생성
|
|
|
|
|
@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(); |
|
|
|
|
|
|
|
|
@ -516,46 +516,45 @@ public class BasLaancService {
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 야간 특별비행 유무 확인 |
|
|
|
|
* 1. 비행시작 일자 금일 ~ 90일 이내 |
|
|
|
|
* 2. 비행 종료일자 금일 ~ 6개월까지 -- validtion 통과후 일몰 |
|
|
|
|
* 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); |
|
|
|
|
private boolean laancParamValid(BasLaancPlanRq rq) { |
|
|
|
|
|
|
|
|
|
// TODO :: Instant는 ChronoUnit.MONTHS 지원을 해주지 않아 LocalDateTime으로 계산을 진행했습니다.
|
|
|
|
|
LocalDateTime today = Instant.now().atZone(ZoneId.of(InstantUtils.DEFAULT_ZONE)).toLocalDateTime(); |
|
|
|
|
// 시작날짜보다 종료날짜가 뒤에있으면 Exception발생
|
|
|
|
|
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; |
|
|
|
|
// 시간 파라미터가 맞지 않을경우
|
|
|
|
|
if (!(isSchFltStDtValid && isSchFltEndDtValid)) return false; |
|
|
|
|
|
|
|
|
|
String[] stringStDt = InstantUtils.toDatetimeString(rq.getSchFltStDt()).split(" "); |
|
|
|
|
String[] stringEndDt = InstantUtils.toDatetimeString(rq.getSchFltEndDt()).split(" "); |
|
|
|
|
|
|
|
|
|
ComnSunrisesetCoordRq comnSunrisesetCoordRq = new ComnSunrisesetCoordRq(stringStDt[0].replace("-", ""), stringEndDt[0].replace("-", ""), null, null); |
|
|
|
|
|
|
|
|
|
ComnSunrisesetRs comnSunrisesetRs = comRiseSetQueryRepository.findBySearchCoordDateTransform(comnSunrisesetCoordRq); |
|
|
|
|
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"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
boolean stTmValid = this.isBetweenSunriseAndSunset(sunUp, sunDown, stringStTm); |
|
|
|
|
boolean endTmValid = this.isBetweenSunriseAndSunset(sunUp, sunDown, stringEndTm); |
|
|
|
|
|
|
|
|
@ -564,17 +563,19 @@ public class BasLaancService {
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* String to LocalTime - Instant는 시간정보만 담을 수 없음.. |
|
|
|
|
* |
|
|
|
|
* @param time |
|
|
|
|
* @param format |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
private LocalTime convertStringToTime(String time, String format){ |
|
|
|
|
private LocalTime convertStringToTime(String time, String format) { |
|
|
|
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format); |
|
|
|
|
return LocalTime.parse(time, formatter); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 일출, 일몰 시간 아래에 있는지 확인 |
|
|
|
|
* |
|
|
|
|
* @param sunrise |
|
|
|
|
* @param sunset |
|
|
|
|
* @param timeToCheck |
|
|
|
@ -582,7 +583,7 @@ public class BasLaancService {
|
|
|
|
|
*/ |
|
|
|
|
private boolean isBetweenSunriseAndSunset(LocalTime sunrise, LocalTime sunset, LocalTime timeToCheck) { |
|
|
|
|
return (timeToCheck.isAfter(sunrise) || timeToCheck.equals(sunrise)) && |
|
|
|
|
timeToCheck.isBefore(sunset); |
|
|
|
|
} |
|
|
|
|
timeToCheck.isBefore(sunset); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|