From 7f51aeac43625c8af12e10411a69ffe05d0ca8fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dhji=28=EC=A7=80=EB=8C=80=ED=95=9C=29?= Date: Wed, 25 Oct 2023 19:45:25 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B3=B5=EC=97=AD(=EA=B8=88=EC=A7=80=EA=B5=AC?= =?UTF-8?q?=EC=97=AD)=20=ED=8F=AC=ED=95=A8=EC=97=AC=EB=B6=80=20api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../laanc/controller/BasLaancController.java | 33 +++++++++++++-- .../model/BasLaancDuplicatedAirspaceRs.java | 26 ++++++++++++ .../bas/laanc/service/BasLaancService.java | 40 +++++++++++++++++++ 3 files changed, 95 insertions(+), 4 deletions(-) create mode 100644 pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancDuplicatedAirspaceRs.java 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 966ec1fc..779b556e 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 @@ -55,7 +55,7 @@ public class BasLaancController { log.debug(">>> rs : {}", rs); } catch (CustomException e) { - Map resultMap = new HashMap(); + Map resultMap = new HashMap<>(); log.error("IGNORE : ", e); resultMap.put("result", false); resultMap.put("errorCode", e.getErrorCode()); @@ -80,7 +80,7 @@ public class BasLaancController { try { rs = basLaancService.createFlightPlan(rq); } catch (CustomException e) { - Map resultMap = new HashMap(); + Map resultMap = new HashMap<>(); log.error("IGNORE : ", e); resultMap.put("result", false); resultMap.put("errorCode", e.getErrorCode()); @@ -104,7 +104,7 @@ public class BasLaancController { try { rs = basLaancService.getAllowableElevation(rq); } catch (CustomException e) { - Map resultMap = new HashMap(); + Map resultMap = new HashMap<>(); log.error("IGNORE : ", e); resultMap.put("result", false); resultMap.put("errorCode", e.getErrorCode()); @@ -119,6 +119,7 @@ public class BasLaancController { return ResponseEntity.ok().body(new SuccessResponse<>(rs)); } + // TS 연동 @PostMapping(value = "/valid/ts/pilot") @ApiOperation(value = "TS 연동 - 비행자격 조회(조종사 자격증명, 기체보험 여부)") @@ -128,7 +129,31 @@ public class BasLaancController { try { rs = basLaancService.getTsValid(idntfNumList); } catch (CustomException e) { - Map resultMap = new HashMap(); + Map resultMap = new HashMap<>(); + log.error("IGNORE : ", e); + resultMap.put("result", false); + resultMap.put("errorCode", e.getErrorCode()); + resultMap.put("errorMessage", e.getMessage()); + return ResponseEntity.ok().body(new SuccessResponse(resultMap)); + } catch (Exception e) { + log.error("IGNORE : ", e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(new ErrorResponse("Server Error", "-1")); + + } + return ResponseEntity.ok().body(new SuccessResponse<>(rs)); + } + + // 허용고도 조회 + @PostMapping(value = "/valid/duplicated/airspace") + @ApiOperation(value = "공역(금지구역) 포함 여부") + @Tag(name = "LAANC", description = "LAANC 관련 API") + public ResponseEntity getDuplicatedAirspace(@RequestBody List rq) { + List rs = null; + try { + rs = basLaancService.getDuplicatedAirspace(rq); + } catch (CustomException e) { + Map resultMap = new HashMap<>(); log.error("IGNORE : ", e); resultMap.put("result", false); resultMap.put("errorCode", e.getErrorCode()); diff --git a/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancDuplicatedAirspaceRs.java b/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancDuplicatedAirspaceRs.java new file mode 100644 index 00000000..d9d6ce01 --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancDuplicatedAirspaceRs.java @@ -0,0 +1,26 @@ +package com.palnet.biz.api.bas.laanc.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * packageName : com.palnet.biz.api.bas.laanc.model + * fileName : BasLaancDuplicatedAirspaceRs + * author : dhji + * date : 2023-10-25(025) + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2023-10-25(025) dhji 최초 생성 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class BasLaancDuplicatedAirspaceRs { + private boolean isDuplicated; + private BasLaancAreaModel rq; +} 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 a708243e..71c620f1 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 @@ -636,6 +636,7 @@ public class BasLaancService { return allowElevationList; } + // TS 연동 public BasLaancTsRs getTsValid(List idntfNumList) { // List idntfNumList = rq.getIdntfNumList(); Integer cstmrSno = jwtTokenUtil.getCstmrSnoByToken(); @@ -657,4 +658,43 @@ public class BasLaancService { .build(); return rs; } + + // 관제권 포함 여부 + public List getDuplicatedAirspace(List rq) { + AirspaceUtils airspaceUtils = AirspaceUtils.getInstance(); + List rs = new ArrayList<>(); + for (BasLaancAreaModel area : rq) { + + //rq로 들어온 좌표로 버퍼좌표 생성 + List targetCoord = new ArrayList<>(); + List targetCoordBufferList = new ArrayList<>(); + + for (BasLaancAreaCoordModel basLaancAreaCoordModel : area.getCoordList()) { + Coordinate coords = new Coordinate(basLaancAreaCoordModel.getLon(), basLaancAreaCoordModel.getLat()); + targetCoord.add(coords); + } + + if ("LINE".equals(area.getAreaType())) { + List trans = areaUtils.transform(targetCoord, "EPSG:4326", "EPSG:5181"); + List bufferList = areaUtils.buffer(trans, area.getBufferZone()); + targetCoordBufferList = areaUtils.transform(bufferList, "EPSG:5181", "EPSG:4326"); + } else if ("POLYGON".equals(area.getAreaType())) { + targetCoordBufferList.addAll(targetCoord); + } else if ("CIRCLE".equals(area.getAreaType())) { + targetCoordBufferList = areaUtils.createCircle(targetCoord.get(0), area.getBufferZone()); + } + + Geometry targetGeometry = airspaceUtils.createGeometryByCoordinate(targetCoordBufferList); + Integer fltElev = area.getFltElev() != null ? Integer.parseInt(area.getFltElev()) : 0; + AirspaceUtils.FeatureInfo targetFeatureInfo = new AirspaceUtils.FeatureInfo(null, null, 0, fltElev, targetGeometry); + boolean duplicatedAirspace = airspaceUtils.isDuplicatedAirspace(targetFeatureInfo); + BasLaancDuplicatedAirspaceRs duplicatedAirspaceRs = BasLaancDuplicatedAirspaceRs.builder() + .isDuplicated(duplicatedAirspace) + .rq(area) + .build(); + rs.add(duplicatedAirspaceRs); + } + + return rs; + } }