diff --git a/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/controller/BasLaancAprvController.java b/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/controller/BasLaancAprvController.java index 351abc77..acffb389 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/controller/BasLaancAprvController.java +++ b/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/controller/BasLaancAprvController.java @@ -135,4 +135,5 @@ public class BasLaancAprvController { } return ResponseEntity.ok().body(new SuccessResponse<>(rs)); } + } diff --git a/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/controller/BasLaancController.java b/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/controller/BasLaancController.java index 988701de..2804444a 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/controller/BasLaancController.java +++ b/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/controller/BasLaancController.java @@ -68,7 +68,6 @@ public class BasLaancController { .body(new ErrorResponse("Server Error", "-1")); } - log.warn("new SuccessResponse<>(rs) -? {}", new SuccessResponse<>(rs)); return ResponseEntity.ok().body(new SuccessResponse<>(rs)); } diff --git a/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancValidatedRs.java b/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancValidatedRs.java index fe2e3e16..50be0f12 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancValidatedRs.java +++ b/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancValidatedRs.java @@ -37,8 +37,6 @@ public class BasLaancValidatedRs { private boolean isReport; // 신고 대상 - 상업적이면서 기체중량2kg 이상일경우 - true - private boolean isNotSpecial; // 특별승인 여부 - 특별승인인 경우가 아니면 - true - private String corpRegYn; // 사업자 여부 private List pilotValidRsList; // 자격여부 @@ -53,13 +51,11 @@ public class BasLaancValidatedRs { // && !isArcrftDuplicated // 기체 중복여부 // && !isPlanAreaDuplicatd // 비행구역 중복여부 && isFlightArea // 비행가능여부 - && isNotSpecial && isCheckingLance(); } return isCheckingLance() // && !isPlanAreaDuplicatd // && !isArcrftDuplicated - && isNotSpecial && isFlightArea; } diff --git a/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancService.java b/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancService.java index 3d4eca5a..d75315a1 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancService.java +++ b/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancService.java @@ -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); + } } diff --git a/pav-server/src/main/java/com/palnet/comn/utils/InstantUtils.java b/pav-server/src/main/java/com/palnet/comn/utils/InstantUtils.java index 834b7502..43b3e22b 100644 --- a/pav-server/src/main/java/com/palnet/comn/utils/InstantUtils.java +++ b/pav-server/src/main/java/com/palnet/comn/utils/InstantUtils.java @@ -17,7 +17,7 @@ import java.time.format.DateTimeFormatter; * 2023-09-14(014) dhji 최초 생성 */ public class InstantUtils { - public static final String DEFAULT_ZONE = "Asia/Seoul"; + private static final String DEFAULT_ZONE = "Asia/Seoul"; private static final String DEFAULT_DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; private static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";