diff --git a/web/api-flight/src/main/java/kr/co/palnet/kac/api/util/model/FlightPlanAreaCoordModel.java b/web/api-flight/src/main/java/kr/co/palnet/kac/api/util/model/FlightPlanAreaCoordModel.java index 0fefb15..36c5a0f 100644 --- a/web/api-flight/src/main/java/kr/co/palnet/kac/api/util/model/FlightPlanAreaCoordModel.java +++ b/web/api-flight/src/main/java/kr/co/palnet/kac/api/util/model/FlightPlanAreaCoordModel.java @@ -7,8 +7,8 @@ import java.time.LocalDateTime; @Data public class FlightPlanAreaCoordModel { - private Integer planAreaCoordSno; - private Integer planAreaSno; + private Long planAreaCoordSno; + private Long planAreaSno; @Schema(description = "x 좌표", example = "37.5208864") private double lat; @Schema(description = "y 좌표", example = "126.6071164") diff --git a/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/service/FlightLaancService.java b/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/service/FlightLaancService.java index 18f94f6..18e4a8a 100644 --- a/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/service/FlightLaancService.java +++ b/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/laanc/service/FlightLaancService.java @@ -578,6 +578,8 @@ public class FlightLaancService { public SearchLaancAprvDetailRS getLaancAprvDetail(Long planSno) { + if(planSno == null) throw new BaseException(BaseErrorCode.WEB_PARAM_INVALID); + Optional fltPlanBasData = fltPlanDomainService.findById(planSno); if(fltPlanBasData.isPresent()){ @@ -616,7 +618,7 @@ public class FlightLaancService { return result; } else { - throw new BaseException(BaseErrorCode.WEB_PARAM_INVALID); + throw new BaseException(BaseErrorCode.DATA_EMPTY); } } } diff --git a/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/controller/FlightPlanController.java b/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/controller/FlightPlanController.java index 2a6deb0..4e83041 100644 --- a/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/controller/FlightPlanController.java +++ b/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/controller/FlightPlanController.java @@ -1,11 +1,18 @@ package kr.co.palnet.kac.api.v1.flight.plan.controller; +import io.swagger.v3.oas.annotations.Operation; +import kr.co.palnet.kac.api.v1.flight.plan.model.buffer.CreateBufferModel; import kr.co.palnet.kac.api.v1.flight.plan.service.FlightPlanService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + @RestController @Slf4j @RequestMapping("/v1/flight/plan") @@ -14,6 +21,13 @@ public class FlightPlanController { private final FlightPlanService flightPlanService; + @PostMapping("/area/buffer") + @Operation(summary = "비행 계획서 작성 - 버퍼존 생성", description = "비행 계획서 작성 시 특정 좌표를 이은 선분에 대한 버퍼존을 생성하는 API 입니다.") + public ResponseEntity> createBuffer(@RequestBody List rq){ + + List result = flightPlanService.createBuffer(rq); + return ResponseEntity.ok().body(result); + } } diff --git a/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/model/buffer/BufferAreaCoordModel.java b/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/model/buffer/BufferAreaCoordModel.java new file mode 100644 index 0000000..8c804fd --- /dev/null +++ b/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/model/buffer/BufferAreaCoordModel.java @@ -0,0 +1,57 @@ +package kr.co.palnet.kac.api.v1.flight.plan.model.buffer; + +import io.swagger.v3.oas.annotations.media.Schema; +import kr.co.palnet.kac.api.util.model.FlightPlanAreaCoordModel; +import lombok.Data; + +import java.time.LocalDateTime; +@Data +public class BufferAreaCoordModel { + + @Schema(description = "비행구역좌표 일련번호", example = "1") + private Long planAreaCoordSno; + + @Schema(description = "비행계획비행구역 일련번호", example = "1") + private Long planAreaSno; + + @Schema(description = "위도", example = "127.33") + private double lat; + + @Schema(description = "경도", example = "37.99") + private double lon; + + @Schema(description = "생성자ID", hidden = true) + private String createUserId; + + @Schema(description = "생성일시", hidden = true) + private LocalDateTime createDt; + + @Schema(hidden = true) + private String docState = "R"; + + public static FlightPlanAreaCoordModel toCoordModel(BufferAreaCoordModel model){ + FlightPlanAreaCoordModel coordModel = new FlightPlanAreaCoordModel(); + coordModel.setPlanAreaCoordSno(model.getPlanAreaCoordSno()); + coordModel.setPlanAreaSno(model.getPlanAreaSno()); + coordModel.setLat(model.getLat()); + coordModel.setLon(model.getLon()); + coordModel.setCreateUserId(model.getCreateUserId()); + coordModel.setCreateDt(model.getCreateDt()); + coordModel.setDocState(model.getDocState()); + + return coordModel; + } + + public static BufferAreaCoordModel toModel(FlightPlanAreaCoordModel model){ + BufferAreaCoordModel coordModel = new BufferAreaCoordModel(); + coordModel.setPlanAreaCoordSno(model.getPlanAreaCoordSno()); + coordModel.setPlanAreaSno(model.getPlanAreaSno()); + coordModel.setLat(model.getLat()); + coordModel.setLon(model.getLon()); + coordModel.setCreateUserId(model.getCreateUserId()); + coordModel.setCreateDt(model.getCreateDt()); + coordModel.setDocState(model.getDocState()); + + return coordModel; + } +} diff --git a/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/model/buffer/CreateBufferModel.java b/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/model/buffer/CreateBufferModel.java new file mode 100644 index 0000000..ab5d043 --- /dev/null +++ b/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/model/buffer/CreateBufferModel.java @@ -0,0 +1,58 @@ +package kr.co.palnet.kac.api.v1.flight.plan.model.buffer; + +import io.swagger.v3.oas.annotations.media.Schema; +import kr.co.palnet.kac.api.v1.flight.laanc.model.constant.FltMethod; +import kr.co.palnet.kac.api.v1.flight.laanc.model.create.BasLaancAreaCoordModel; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +@Data +public class CreateBufferModel { + @Schema(description = "비행구역 일련번호", example = "1", hidden = true) + private Long planAreaSno; + + @Schema(description = "비행계획서 일련번호", example = "1", hidden = true) + private Long planSno; + + @Schema(description = "구역종류", example = "CIRCLE") + private String areaType; + + @Schema(description = "비행방식", example = "01") + private FltMethod fltMethod; + + @Schema(description = "비행구역주소", example = "인천광역시 부평구 청천2동") + private String fltAreaAddr; + + @Schema(description = "버퍼존", example = "100") + private Integer bufferZone; + + @Schema(description = "고도", example = "110") + private String fltElev; + + @Schema(description = "생성자ID", hidden = true) + private String createUserId; + + @Schema(description = "생성일시", hidden = true) + private LocalDateTime createDt; + + @Schema(description = "수정자ID", hidden = true) + private String updateUserId; + + @Schema(description = "수정일시", hidden = true) + private LocalDateTime updateDt; + + private String docState = "R"; + + private List coordList; + + @Schema(hidden = true) + private List bufferCoordList; + + // kac 추가 필드 + @Schema(description = "비행방식(기타)") + private String fltMothoeRm; + + +} diff --git a/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/service/FlightPlanService.java b/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/service/FlightPlanService.java index 74dba90..682ca53 100644 --- a/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/service/FlightPlanService.java +++ b/web/api-flight/src/main/java/kr/co/palnet/kac/api/v1/flight/plan/service/FlightPlanService.java @@ -1,11 +1,43 @@ package kr.co.palnet.kac.api.v1.flight.plan.service; +import kr.co.palnet.kac.api.util.AreaUtils; +import kr.co.palnet.kac.api.util.model.FlightPlanAreaCoordModel; +import kr.co.palnet.kac.api.v1.flight.laanc.model.create.BasLaancAreaCoordModel; +import kr.co.palnet.kac.api.v1.flight.plan.model.buffer.BufferAreaCoordModel; +import kr.co.palnet.kac.api.v1.flight.plan.model.buffer.CreateBufferModel; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.locationtech.jts.geom.Coordinate; import org.springframework.stereotype.Service; +import java.util.List; + @Service @Slf4j @RequiredArgsConstructor public class FlightPlanService { + + private final AreaUtils areaUtils; + + public List createBuffer(List rq) { + + for (CreateBufferModel area : rq) { + + if ("LINE".equals(area.getAreaType())) { + List coordList = area.getCoordList().stream().map(BufferAreaCoordModel::toCoordModel).toList(); + + List convertCoordinates = areaUtils.convertCoordinates(coordList); // 객체 타입 변환 + List transCoordList = areaUtils.transform(convertCoordinates, "EPSG:4326", "EPSG:5181"); + + List bufferList = areaUtils.buffer(transCoordList, area.getBufferZone()); // buffer 영역 생성 + + List transBufferList = areaUtils.transform(bufferList, "EPSG:5181", "EPSG:4326"); // buffer 영역 좌표계 변환 + List bufferCoordList = areaUtils.convertModel(transBufferList).stream().map(BufferAreaCoordModel::toModel).toList(); + + area.setBufferCoordList(bufferCoordList); + } + } + + return rq; + } }