From 10d353f19d4d1eced29230c426df75cd8ecd03ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dhji=28=EC=A7=80=EB=8C=80=ED=95=9C=29?= Date: Thu, 11 Jul 2024 11:46:19 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=93=9C=EB=A1=A0=EC=9B=90=EC=8A=A4?= =?UTF-8?q?=ED=86=B1=20=EC=9A=94=EC=B2=AD=EB=B0=98=EA=B2=BD/=ED=97=88?= =?UTF-8?q?=EC=9A=A9=EB=B0=98=EA=B2=BD=20=EC=9E=84=EC=8B=9C=EC=9E=91?= =?UTF-8?q?=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- http/server/server.http | 26 ++++++++----- .../api/bas/dos/service/BasDosService.java | 6 ++- .../bas/laanc/service/BasLaancService.java | 35 ++++++++++------- .../api/external/model/DosApprovalResult.java | 4 ++ .../com/palnet/comn/utils/AirspaceUtils.java | 39 ++++++++++++------- 5 files changed, 74 insertions(+), 36 deletions(-) diff --git a/http/server/server.http b/http/server/server.http index 84c5c690..abd3c18b 100644 --- a/http/server/server.http +++ b/http/server/server.http @@ -81,19 +81,27 @@ Content-Type: application/json "zone": [ { "zoneno": "1", - "lat": 37.529, - "lon": 126.699, - "elev": 100, + "lat": 37.52422, + "lon": 126.7474, + "elev": 120, "radius": 5, - "addr": "서울시 마포구 상암동1674" + "addr": "서울시 마포구 111" }, { "zoneno": "2", - "lat": 37.529, - "lon": 126.699, - "elev": 150, - "radius": 5, - "addr": "서울시 마포구 상암동1674" + "lat": 37.52414, + "lon": 126.7518, + "elev": 45, + "radius": 950, + "addr": "서울시 마포구 150" + }, + { + "zoneno": "3", + "lat": 37.52845, + "lon": 126.7520, + "elev": 45, + "radius": 600, + "addr": "서울시 마포구 150" } ], "drone": [ diff --git a/pav-server/src/main/java/com/palnet/biz/api/bas/dos/service/BasDosService.java b/pav-server/src/main/java/com/palnet/biz/api/bas/dos/service/BasDosService.java index 0c7396da..98bf4a9c 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/bas/dos/service/BasDosService.java +++ b/pav-server/src/main/java/com/palnet/biz/api/bas/dos/service/BasDosService.java @@ -147,7 +147,11 @@ public class BasDosService { AirspaceUtils airspaceUtils = AirspaceUtils.getInstance(); Geometry rqGeometry = airspaceUtils.createGeometryByCoordinate(coordBuffers); - AirspaceUtils.FeatureInfo targetfeatureInfo = new AirspaceUtils.FeatureInfo(null, null, 0.0, area.getFltElev(), rqGeometry); + AirspaceUtils.FeatureInfo targetfeatureInfo = AirspaceUtils.FeatureInfo.builder() + .lowElev(0D) + .highElev(area.getFltElev()) + .geometry(rqGeometry) + .build(); boolean isDuplicatedAirspace = airspaceUtils.isDuplicatedAirspace(targetfeatureInfo, AirspaceUtils.AirspaceType.GIMPO); if (!isDuplicatedAirspace) { continue; 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 84365624..b4fc576f 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 @@ -39,7 +39,6 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; -import org.springframework.web.util.UriComponents; import org.springframework.web.util.UriComponentsBuilder; import java.io.IOException; @@ -170,7 +169,7 @@ public class BasLaancService { /** * 비행계획서 등록, 약관 등록, 공문 생성 - * + * * @param rq * @return */ @@ -197,7 +196,7 @@ public class BasLaancService { // 비행계획서 String userId = jwtTokenUtil.getUserIdByToken(); Integer cstmrSno = jwtTokenUtil.getCstmrSnoByToken(); - + // 개인정보 가져오기 - 비행계획서 작성자 정보, 조종사 정보 AnctCstmrModel cstmrInfo = ptyCstmrQueryRepository.findByCstmrSno(cstmrSno); FltPlanBas fltPlanBas = BasLaancMapper.MAPPER.modelToPlanEntity(cstmrInfo); @@ -230,7 +229,7 @@ public class BasLaancService { FltPlanBas rBasEntity = fltPlanBasRepository.save(fltPlanBas); Integer planSno = rBasEntity.getPlanSno(); - + // 비행구역 List basLaancAreaModelList = rq.getAreaList(); if (basLaancAreaModelList != null && !basLaancAreaModelList.isEmpty()) { @@ -391,7 +390,7 @@ public class BasLaancService { /** * 비행신청 - 공역관련 검증 - * + * * @param rq * @return */ @@ -426,7 +425,11 @@ public class BasLaancService { AirspaceUtils airspaceUtils = AirspaceUtils.getInstance(); Geometry rqGeometry = airspaceUtils.createGeometryByCoordinate(rqCoordBufferList); Double fltElev = basLaancAreaModel.getFltElev() != null ? basLaancAreaModel.getFltElev() : 0D; - AirspaceUtils.FeatureInfo featureInfo = new AirspaceUtils.FeatureInfo(null, null, 0D, fltElev, rqGeometry); + AirspaceUtils.FeatureInfo featureInfo = AirspaceUtils.FeatureInfo.builder() + .lowElev(0D) + .highElev(fltElev) + .geometry(rqGeometry) + .build(); // 평가 가능 지역 판단 boolean duplicatedAirspace = airspaceUtils.isDuplicatedAirspace(featureInfo); @@ -472,6 +475,7 @@ public class BasLaancService { /** * 비행계획서 검증 - 특별 비행 + * * @param rq * @return */ @@ -621,7 +625,12 @@ public class BasLaancService { Geometry targetGeometry = airspaceUtils.createGeometryByCoordinate(targetCoordBufferList); Double fltElev = area.getFltElev() != null ? Double.parseDouble(area.getFltElev()) : 0; - AirspaceUtils.FeatureInfo targetFeatureInfo = new AirspaceUtils.FeatureInfo(null, null, 0D, fltElev, targetGeometry); +// AirspaceUtils.FeatureInfo targetFeatureInfo = new AirspaceUtils.FeatureInfo(null, null, 0D, fltElev, targetGeometry); + AirspaceUtils.FeatureInfo targetFeatureInfo = AirspaceUtils.FeatureInfo.builder() + .lowElev(0D) + .highElev(fltElev) + .geometry(targetGeometry) + .build(); boolean duplicatedAirspace = airspaceUtils.isDuplicatedAirspace(targetFeatureInfo); BasLaancDuplicatedAirspaceRs duplicatedAirspaceRs = BasLaancDuplicatedAirspaceRs.builder() .isDuplicated(duplicatedAirspace) @@ -715,7 +724,7 @@ public class BasLaancService { * QR code 확인 * QR code 촬영후 return url로 데이터 받은 이후 확인 프로세스 * QR code 생성(PAV-KAC) > qr code 스캔(사용자) > 자격정보 전송(TS) > return url 자격정보 받음(PAV-KAC) > 확인(자격정보 확인)* - * + * * @param confirmKey * @return */ @@ -723,8 +732,8 @@ public class BasLaancService { log.info(">>> confirmKey : {}", confirmKey); String userIdByToken = jwtTokenUtil.getUserIdByToken(); ComConfirmBas entity = comConfirmBasRepository.findFirstByConfirmKeyOrderByCreateDtDesc(confirmKey); - if(entity == null) throw new CustomException(ErrorCode.DATA_NOTFIND, "QR코드 조회 실패"); - if (!"RECEIVED".equals(entity.getStatus())){ + if (entity == null) throw new CustomException(ErrorCode.DATA_NOTFIND, "QR코드 조회 실패"); + if (!"RECEIVED".equals(entity.getStatus())) { Map errorParam = new HashMap<>(); errorParam.put("status", entity.getStatus()); throw new CustomException(ErrorCode.DATA_NOTFIND, errorParam); @@ -743,7 +752,7 @@ public class BasLaancService { PilotValidRs rs = null; String rsData = entity.getRsData(); - if(rsData != null && !rsData.isEmpty()){ + if (rsData != null && !rsData.isEmpty()) { rs = JsonUtils.fromJson(rsData, PilotValidRs.class); } @@ -753,9 +762,9 @@ public class BasLaancService { /** * TS 비행계획서 * 드론원스탑에서 받은 데이터 받기 - * + * * @param tsPlanRq - */ + */ public void createPlanDos(TsPlanRq tsPlanRq) { // convert BasLaancPlanRq rq = tsPlanRq.toBasLaancPlanRq(); diff --git a/pav-server/src/main/java/com/palnet/biz/api/external/model/DosApprovalResult.java b/pav-server/src/main/java/com/palnet/biz/api/external/model/DosApprovalResult.java index 0b3fb73b..8d9fa605 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/external/model/DosApprovalResult.java +++ b/pav-server/src/main/java/com/palnet/biz/api/external/model/DosApprovalResult.java @@ -14,4 +14,8 @@ public class DosApprovalResult { private ApprovalCd approvalCd; // 허용최대고도 private Double fltElevMax; + // 요청반경(10m단위) + private Integer reqRadius; + // 허용반경 + private Integer allowRadius; } diff --git a/pav-server/src/main/java/com/palnet/comn/utils/AirspaceUtils.java b/pav-server/src/main/java/com/palnet/comn/utils/AirspaceUtils.java index a086971f..46e99c0f 100644 --- a/pav-server/src/main/java/com/palnet/comn/utils/AirspaceUtils.java +++ b/pav-server/src/main/java/com/palnet/comn/utils/AirspaceUtils.java @@ -1,6 +1,7 @@ package com.palnet.comn.utils; import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -312,7 +313,7 @@ public class AirspaceUtils { BigDecimal lf = new BigDecimal(String.valueOf(lastCoords.get(0))); BigDecimal ll = new BigDecimal(String.valueOf(lastCoords.get(1))); if (!ff.equals(lf) || !fl.equals(ll)) { - JSONObject propertiesObject = (JSONObject) feature.get("properties"); +// JSONObject propertiesObject = (JSONObject) feature.get("properties"); // String nameObject = String.valueOf(propertiesObject.get("name")); // String descriptionObject = String.valueOf(propertiesObject.get("description")); // log.info("coords first and last coords not eqauls : name/descriion = {}/{}", nameObject, descriptionObject); @@ -328,21 +329,21 @@ public class AirspaceUtils { if (use) { String name = String.valueOf(simpleFeature.getAttribute("name")); String description = String.valueOf(simpleFeature.getAttribute("description")); + String propType = String.valueOf(simpleFeature.getAttribute("type")); Double lowElev = Double.parseDouble(String.valueOf(simpleFeature.getAttribute("lowElev"))); - - Object t1 = simpleFeature.getAttribute("highElev"); -// log.info("t1: {} :: {}", t1, t1.getClass().getName()); - String t2 = String.valueOf(simpleFeature.getAttribute("highElev")); -// log.info("t2: {} :: {}", t2, t2.getClass().getName()); - Double t3 = Double.parseDouble(String.valueOf(simpleFeature.getAttribute("highElev"))); -// log.info("t3: {} :: {}", t3, t3.getClass().getName()); Double highElev = Double.parseDouble(String.valueOf(simpleFeature.getAttribute("highElev"))); Geometry geometry = (Geometry) simpleFeature.getDefaultGeometry(); -// log.debug(">>> name, description, use, lowElev, highElev : {}, {}, {}, {}, {}", name, description, use, lowElev, highElev); - FeatureInfo info = new FeatureInfo(name, description, lowElev, highElev, geometry); + FeatureInfo info = FeatureInfo.builder() + .name(name) + .description(description) + .type(propType) + .lowElev(lowElev) + .highElev(highElev) + .geometry(geometry) + .build(); featureInfos.add(info); } - } catch (IOException e) { + } catch (Exception e) { log.error("geometry json read error : {}", e.getMessage()); } } @@ -354,10 +355,18 @@ public class AirspaceUtils { if (use) { String name = String.valueOf(simpleFeature.getAttribute("name")); String description = String.valueOf(simpleFeature.getAttribute("description")); + String propType = String.valueOf(simpleFeature.getAttribute("type")); Double lowElev = Double.parseDouble(String.valueOf(simpleFeature.getAttribute("lowElev"))); Double highElev = Double.parseDouble(String.valueOf(simpleFeature.getAttribute("highElev"))); Geometry geometry = (Geometry) simpleFeature.getDefaultGeometry(); - FeatureInfo info = new FeatureInfo(name, description, lowElev, highElev, geometry); + FeatureInfo info = FeatureInfo.builder() + .name(name) + .description(description) + .type(propType) + .lowElev(lowElev) + .highElev(highElev) + .geometry(geometry) + .build(); featureInfos.add(info); } } catch (IOException e) { @@ -368,7 +377,9 @@ public class AirspaceUtils { GeometryJSON geoJson = new GeometryJSON(); try { Geometry geometry = geoJson.read(jsonObject.toJSONString()); - FeatureInfo info = new FeatureInfo(null, null, null, null, geometry); + FeatureInfo info = FeatureInfo.builder() + .geometry(geometry) + .build(); } catch (IOException e) { log.error("geometry json read error : {}", e.getMessage()); } @@ -389,9 +400,11 @@ public class AirspaceUtils { @Data @NoArgsConstructor @AllArgsConstructor + @Builder public static class FeatureInfo { private String name; private String description; + private String type; private Double lowElev; private Double highElev; private Geometry geometry;