Browse Source

LAANC 검증시 기체 중복 및 비행 구역 중복 제외

pull/10/head
지대한 11 months ago
parent
commit
29e578c6cb
  1. 18
      pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancValidatedRs.java
  2. 55
      pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancService.java
  3. 18
      pav-server/src/main/java/com/palnet/biz/api/external/service/SunRiseSetService.java

18
pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancValidatedRs.java

@ -29,8 +29,6 @@ public class BasLaancValidatedRs {
private boolean isPilotQlfc; // 자격여부
private boolean isArcrftInsurance; // 항공기보험여부
private boolean isArcrftDuplicated; // 기체 중복여부
private boolean isPlanAreaDuplicatd; // 비행계획서비행구역 중복여부
private boolean isEvaluatedTargetArea; // 평가대상지역여부 - 공역과 겹칠때만 true
private boolean isFlightArea; // 비행가능여부 - 비행가능 true
@ -42,19 +40,23 @@ public class BasLaancValidatedRs {
private String corpRegYn; // 사업자 여부
private List<PilotValidRs> pilotValidRsList; // 자격여부
// 활용안함.
// private boolean isArcrftDuplicated; // 기체 중복여부
// private boolean isPlanAreaDuplicatd; // 비행계획서비행구역 중복여부
public boolean isValid() {
if (isReport) {
return isPilotQlfc
&& isArcrftInsurance
&& !isArcrftDuplicated // 기체 중복여부
&& !isPlanAreaDuplicatd // 비행구역 중복여부
// && !isArcrftDuplicated // 기체 중복여부
// && !isPlanAreaDuplicatd // 비행구역 중복여부
&& isFlightArea // 비행가능여부
&& isCheckingLance();
}
return !isArcrftDuplicated
&& !isPlanAreaDuplicatd
&& isFlightArea
&& isCheckingLance();
return isCheckingLance()
// && !isPlanAreaDuplicatd
// && !isArcrftDuplicated
&& isFlightArea;
}
public boolean isFlight() {

55
pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancService.java

@ -116,13 +116,15 @@ public class BasLaancService {
boolean isArcrftWeight = rq.getArcrftList().stream().anyMatch(arcrft -> arcrft.getArcrftWghtCd() != ArcrftWghtCd.W25KG_GO && arcrft.getArcrftWghtCd() != ArcrftWghtCd.W25KG_GO_TEST);
rs.setArcrftWeight(isArcrftWeight);
// 판단구역 - 공역과 겹칠 경우, 비행가능여부
/* 비행구역 기체 중복여부 확인 안하기로 .
// 비행구역 중복여부, 기체 중복여부
BasLaancValidatedRs validationPlanAirspaceRs = this.validationPlanAreaAndArcrft(rq);
rs.setPlanAreaDuplicatd(validationPlanAirspaceRs.isPlanAreaDuplicatd());
rs.setArcrftDuplicated(validationPlanAirspaceRs.isArcrftDuplicated());
*/
// 비행구역 중복여부, 기체 중복여부
// 판단구역 - 공역과 겹칠 경우, 비행가능여부
BasLaancValidatedRs validationPlanDbRs = this.validationPlanAirspace(rq);
rs.setEvaluatedTargetArea(validationPlanDbRs.isEvaluatedTargetArea());
rs.setFlightArea(validationPlanDbRs.isFlightArea());
@ -139,9 +141,11 @@ public class BasLaancService {
// BasLaancValidatedRs validatedAirspaceRs = this.validationPlanAirspace(rq);
/* 비행구역 기체 중복여부 확인 안하기로 .
BasLaancValidatedRs validatedDbRs = this.validationPlanAreaAndArcrft(rq);
basLaancValidatedRs.setPlanAreaDuplicatd(validatedDbRs.isPlanAreaDuplicatd());
basLaancValidatedRs.setArcrftDuplicated(validatedDbRs.isArcrftDuplicated());
*/
// BasLaancMapper.MAPPER.merge(basLaancValidatedRs, validatedRs);
// LAANC가 검증된것들만 DB저장
@ -311,7 +315,7 @@ public class BasLaancService {
comnSmsService.sendLaancAprovSms(comnSmsLaancAprovModel);
} catch (Exception e){
} catch (Exception e) {
log.error("ERROR: ", e);
}
@ -324,6 +328,7 @@ public class BasLaancService {
}
// LAANC 검증
/*
private BasLaancValidatedRs validationPlanAreaAndArcrft(BasLaancPlanRq rq) {
// 초기화
@ -419,51 +424,11 @@ public class BasLaancService {
}
// // 공역 중복 확인
// for (BasLaancAreaModel basLaancAreaModel : rq.getAreaList()) {
// List<Coordinate> rqCoord = new ArrayList<>();
// List<Coordinate> rqCoordBufferList = new ArrayList<>();
//
// //rq로 들어온 좌표로 버퍼좌표 생성
// for (BasLaancAreaCoordModel basLaancAreaCoordModel : basLaancAreaModel.getCoordList()) {
// Coordinate coords = new Coordinate(basLaancAreaCoordModel.getLon(), basLaancAreaCoordModel.getLat());
// rqCoord.add(coords);
// }
// if ("LINE".equals(basLaancAreaModel.getAreaType())) {
// List<Coordinate> trans = areaUtils.transform(rqCoord, "EPSG:4326", "EPSG:5181");
// List<Coordinate> bufferList = areaUtils.buffer(trans, basLaancAreaModel.getBufferZone());
// rqCoordBufferList = areaUtils.transform(bufferList, "EPSG:5181", "EPSG:4326");
// } else if ("POLYGON".equals(basLaancAreaModel.getAreaType())) {
// rqCoordBufferList.addAll(rqCoord);
// } else if ("CIRCLE".equals(basLaancAreaModel.getAreaType())) {
// rqCoordBufferList = areaUtils.createCircle(rqCoord.get(0), basLaancAreaModel.getBufferZone());
// }
//
// AirspaceUtils airspaceUtils = AirspaceUtils.getInstance();
// Geometry rqGeometry = airspaceUtils.createGeometryByCoordinate(rqCoordBufferList);
// Integer fltElev = basLaancAreaModel.getFltElev() != null ? Integer.valueOf(basLaancAreaModel.getFltElev()) : 0;
// AirspaceUtils.FeatureInfo featureInfo = new AirspaceUtils.FeatureInfo(null, null, 0, fltElev, rqGeometry);
//
// // 평가 가능 지역 판단
// boolean duplicatedAirspace = airspaceUtils.isDuplicatedAirspace(featureInfo);
// rs.setEvaluatedTargetArea(duplicatedAirspace);
//
// // 비행 가능 지역 판단
//// if (duplicatedAirspace) {
//// boolean validLaancAirspace = airspaceUtils.isValidLaancAirspace(featureInfo);
//// rs.setFlightAreaYn(validLaancAirspace ? "Y" : "N");
//// } else {
//// rs.setFlightAreaYn("N");
//// }
//
// // 비행 가능 지역 판단
// boolean validLaancAirspace = airspaceUtils.isValidLaancAirspace(featureInfo);
// rs.setFlightArea(validLaancAirspace);
//
// }
return rs;
}
*/
private BasLaancValidatedRs validationPlanAirspace(BasLaancPlanRq rq) {
// 초기화

18
pav-server/src/main/java/com/palnet/biz/api/external/service/SunRiseSetService.java vendored

@ -60,11 +60,11 @@ public class SunRiseSetService {
// TODO db에서 누락된 데이터를 조회하여 처리
// continue 20231202
// continue 20231129
List<String> locations = getLocation();
// LocalDate targetDate = LocalDate.now();
LocalDate targetDate = LocalDate.of(2023, 12, 1);
LocalDate end = targetDate.plusMonths(12);
LocalDate targetDate = LocalDate.of(2023, 11, 29);
LocalDate end = targetDate.plusMonths(6);
List<SunRiseSetRs> sunRiseSet = new ArrayList<>();
int cnt = 0;
@ -87,7 +87,7 @@ public class SunRiseSetService {
String str = (String) o;
if(!str.isEmpty()) {
String trim = str.trim();
if(trim.length() < 6 && trim.length() >= 4) {
if(trim.length() <= 6 && trim.length() >= 4 && trim.matches("-?\\d+(\\.\\d+)?")) {
field.set(result, String.format("%-6s", trim).replace(' ', '0'));
} else {
field.set(result, null);
@ -155,14 +155,4 @@ public class SunRiseSetService {
return Arrays.stream(locationStr.split(",")).map(String::trim).distinct().filter(str -> !str.isEmpty()).collect(Collectors.toList());
}
public static void main(String[] args) {
// 현재 시각을 가져옵니다.
Instant now = Instant.now();
// 3개월을 더합니다.
Instant threeMonthsLater = now.plus(Period.ofMonths(3));
System.out.println("현재 시각: " + now);
System.out.println("3개월 후 시각: " + threeMonthsLater);
}
}

Loading…
Cancel
Save