Browse Source

feat: 드론원스톱 신청목록 수정

- 수정 가능 항목 : 반경, 고도, 세부사항, 긴급구조기관, 비고
feature/address-coordinate
지대한 3 months ago
parent
commit
eadb60f9bd
  1. 13
      http/server/server.http
  2. 22
      pav-server/src/main/java/com/palnet/biz/api/bas/dos/controller/BasDosController.java
  3. 27
      pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/UpdatePlanRq.java
  4. 79
      pav-server/src/main/java/com/palnet/biz/api/bas/dos/service/BasDosService.java
  5. 2
      pav-server/src/main/java/com/palnet/biz/api/external/service/DronOneStopService.java
  6. 5
      pav-server/src/main/java/com/palnet/biz/jpa/repository/dos/DosFltPlanAreaRepository.java

13
http/server/server.http

@ -51,6 +51,19 @@ Authorization: {{accessToken}}
GET {{appHost}}/api/bas/dos/plan?searchStDt=2024-06-14&searchEndDt=2024-06-14
Authorization: {{accessToken}}
### dos(드론원스톱) 목록 수정
PUT {{appHost}}/api/bas/dos/plan
Content-Type: application/json
Authorization: {{accessToken}}
[{
"planAreaSno": 43,
"bufferZone": 10.0,
"fltElev": 80.0,
"dtl": "수정상세",
"era": "수정응급실",
"rm": "수정ㅂㅣ고"
}]
### dos(드론원스톱) api 연동 테스트
POST {{appHost}}/api/external/dos/plan/laanc

22
pav-server/src/main/java/com/palnet/biz/api/bas/dos/controller/BasDosController.java

@ -2,14 +2,15 @@ package com.palnet.biz.api.bas.dos.controller;
import com.palnet.biz.api.bas.dos.model.BasDosPlanRq;
import com.palnet.biz.api.bas.dos.model.BasDosPlanRs;
import com.palnet.biz.api.bas.dos.model.UpdatePlanRq;
import com.palnet.biz.api.bas.dos.service.BasDosService;
import com.palnet.comn.code.ErrorCode;
import com.palnet.comn.exception.CustomException;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@ -35,4 +36,19 @@ public class BasDosController {
return ResponseEntity.ok(rs);
}
/**
* 비행계획 수정
*
* @param rq
* @return
*/
@PutMapping("/plan")
public ResponseEntity<?> updateDosPlan(@RequestBody List<UpdatePlanRq> rq) {
if(rq == null || rq.isEmpty()) {
throw new CustomException(ErrorCode.NON_VALID_PARAMETER);
}
basDosService.updatePlan(rq);
return ResponseEntity.ok().build();
}
}

27
pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/UpdatePlanRq.java

@ -0,0 +1,27 @@
package com.palnet.biz.api.bas.dos.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class UpdatePlanRq {
// 비행계획일련번호
// private Long planSno;
// 비행구역일련번호
private Long planAreaSno;
// 버퍼존(반경)
private Double bufferZone;
// 고도
private Double fltElev;
// 세부사항
private String dtl;
// 긴급구조기관
private String era;
// 비고
private String rm;
}

79
pav-server/src/main/java/com/palnet/biz/api/bas/dos/service/BasDosService.java

@ -3,6 +3,9 @@ package com.palnet.biz.api.bas.dos.service;
import com.palnet.biz.api.bas.dos.model.BasDosPlanAreaRs;
import com.palnet.biz.api.bas.dos.model.BasDosPlanRq;
import com.palnet.biz.api.bas.dos.model.BasDosPlanRs;
import com.palnet.biz.api.bas.dos.model.UpdatePlanRq;
import com.palnet.biz.api.external.model.DosApprovalResult;
import com.palnet.biz.api.external.service.DronOneStopService;
import com.palnet.biz.jpa.entity.DosFltPlanArea;
import com.palnet.biz.jpa.entity.DosFltPlanBas;
import com.palnet.biz.jpa.entity.DosFltPlanResult;
@ -19,9 +22,12 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.time.Instant;
import java.time.LocalDate;
import java.time.Month;
import java.util.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
@Slf4j
@ -33,6 +39,7 @@ public class BasDosService {
private final DosFltPlanAreaRepository dosFltPlanAreaRepository;
private final DosFltPlanResultRepository dosFltPlanResultRepository;
private final DosFltPlanQueryRepository dosFltPlanQueryRepository;
private final DronOneStopService dronOneStopService;
private final AreaUtils areaUtils;
/**
@ -73,13 +80,13 @@ public class BasDosService {
String[] purposeTexts = {"레저비행", "사진/영상촬영"};
if (StringUtils.hasText(purpose)) {
boolean isEtc = true;
for(String compareStr: purposeTexts){
if(purpose.contains(compareStr)){
for (String compareStr : purposeTexts) {
if (purpose.contains(compareStr)) {
isEtc = false;
break;
}
}
if(isEtc) {
if (isEtc) {
purpose = "기타";
}
@ -196,6 +203,68 @@ public class BasDosService {
return rs;
}
/**
* 비행계획 수정
*
* @param rq
*/
public void updatePlan(List<UpdatePlanRq> rq) {
for (UpdatePlanRq planRq : rq) {
if (planRq.getPlanAreaSno() == null) {
log.info("planAreaSno is empty.");
continue;
}
Optional<DosFltPlanArea> optional = dosFltPlanAreaRepository.findById(planRq.getPlanAreaSno());
if (optional.isPresent()) {
DosFltPlanArea area = optional.get();
if (planRq.getFltElev() != null) area.setFltElev(planRq.getFltElev());
if (planRq.getBufferZone() != null) area.setBufferZone(planRq.getBufferZone());
if (StringUtils.hasText(planRq.getDtl())) area.setDtl(planRq.getDtl());
if (StringUtils.hasText(planRq.getEra())) area.setEra(planRq.getEra());
if (StringUtils.hasText(planRq.getRm())) area.setRm(planRq.getRm());
area = dosFltPlanAreaRepository.save(area);
// 재검증
if (planRq.getFltElev() != null || planRq.getBufferZone() != null) {
Optional<DosFltPlanResult> optionalResult = dosFltPlanResultRepository.findById(area.getPlanAreaSno());
DosFltPlanResult dosFltPlanResult = null;
if(optionalResult.isPresent()) {
dosFltPlanResult = optionalResult.get();
}
// Circle만 체크
Double bufferZone = area.getBufferZone();
Double fltElev = area.getFltElev() != null ? area.getFltElev() : 0;
// 좌표 추출 - 중심 좌표
Coordinate centerPoint = new Coordinate(area.getLon(), area.getLat());
DosApprovalResult approvalResult = dronOneStopService.getApprovalResult(bufferZone, fltElev, centerPoint);
// 재검증 수정
if(dosFltPlanResult != null){
dosFltPlanResult.setApprovalCd(approvalResult.getApprovalCd().getCode());
dosFltPlanResult.setFltElevMax(approvalResult.getFltElevMax());
} else {
dosFltPlanResult = DosFltPlanResult.builder()
.planAreaSno(area.getPlanAreaSno())
.planSno(area.getPlanSno())
.approvalCd(approvalResult.getApprovalCd().getCode())
.fltElevMax(approvalResult.getFltElevMax())
.updateDt(Instant.now())
.createDt(Instant.now())
.build();
}
dosFltPlanResultRepository.save(dosFltPlanResult);
}
} else {
log.warn("update data is not found : {}", planRq);
}
}
}
/**
* Buffer 좌표 추출
* 비행구역의 데이터를 이용하여 주변의 좌표를 추출한다.

2
pav-server/src/main/java/com/palnet/biz/api/external/service/DronOneStopService.java vendored

@ -158,7 +158,7 @@ public class DronOneStopService {
return rs;
}
protected DosApprovalResult getApprovalResult(Double bufferZone, Double fltElev, Coordinate centerPoint) {
public DosApprovalResult getApprovalResult(Double bufferZone, Double fltElev, Coordinate centerPoint) {
DosApprovalResult result = new DosApprovalResult();
// Circle만 체크
// 좌표 추출 - 중심 좌표

5
pav-server/src/main/java/com/palnet/biz/jpa/repository/dos/DosFltPlanAreaRepository.java

@ -4,12 +4,13 @@ import com.palnet.biz.jpa.entity.DosFltPlanArea;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.Collection;
import java.util.List;
@Repository
public interface DosFltPlanAreaRepository extends JpaRepository<DosFltPlanArea, Long> {
List<DosFltPlanArea> findByPlanSnoOrderByPlanAreaSnoAsc(Long planSno);
List<DosFltPlanArea> findByPlanSnoInOrderByZoneNoAsc(Collection<Long> planSnoList);
List<DosFltPlanArea> findByPlanSnoInOrderByZoneNoAsc(List<Long> planSnoList);
List<DosFltPlanArea> findByPlanAreaSnoIn(List<Long> planAreaSnoList);
}

Loading…
Cancel
Save