Browse Source

feat: 드론원스톱 요청반경/허용반경 임시작업

pull/19/head
지대한 2 months ago
parent
commit
10d353f19d
  1. 26
      http/server/server.http
  2. 6
      pav-server/src/main/java/com/palnet/biz/api/bas/dos/service/BasDosService.java
  3. 35
      pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancService.java
  4. 4
      pav-server/src/main/java/com/palnet/biz/api/external/model/DosApprovalResult.java
  5. 39
      pav-server/src/main/java/com/palnet/comn/utils/AirspaceUtils.java

26
http/server/server.http

@ -81,19 +81,27 @@ Content-Type: application/json
"zone": [ "zone": [
{ {
"zoneno": "1", "zoneno": "1",
"lat": 37.529, "lat": 37.52422,
"lon": 126.699, "lon": 126.7474,
"elev": 100, "elev": 120,
"radius": 5, "radius": 5,
"addr": "서울시 마포구 상암동1674" "addr": "서울시 마포구 111"
}, },
{ {
"zoneno": "2", "zoneno": "2",
"lat": 37.529, "lat": 37.52414,
"lon": 126.699, "lon": 126.7518,
"elev": 150, "elev": 45,
"radius": 5, "radius": 950,
"addr": "서울시 마포구 상암동1674" "addr": "서울시 마포구 150"
},
{
"zoneno": "3",
"lat": 37.52845,
"lon": 126.7520,
"elev": 45,
"radius": 600,
"addr": "서울시 마포구 150"
} }
], ],
"drone": [ "drone": [

6
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(); AirspaceUtils airspaceUtils = AirspaceUtils.getInstance();
Geometry rqGeometry = airspaceUtils.createGeometryByCoordinate(coordBuffers); 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); boolean isDuplicatedAirspace = airspaceUtils.isDuplicatedAirspace(targetfeatureInfo, AirspaceUtils.AirspaceType.GIMPO);
if (!isDuplicatedAirspace) { if (!isDuplicatedAirspace) {
continue; continue;

35
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.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.util.UriComponents;
import org.springframework.web.util.UriComponentsBuilder; import org.springframework.web.util.UriComponentsBuilder;
import java.io.IOException; import java.io.IOException;
@ -170,7 +169,7 @@ public class BasLaancService {
/** /**
* 비행계획서 등록, 약관 등록, 공문 생성 * 비행계획서 등록, 약관 등록, 공문 생성
* *
* @param rq * @param rq
* @return * @return
*/ */
@ -197,7 +196,7 @@ public class BasLaancService {
// 비행계획서 // 비행계획서
String userId = jwtTokenUtil.getUserIdByToken(); String userId = jwtTokenUtil.getUserIdByToken();
Integer cstmrSno = jwtTokenUtil.getCstmrSnoByToken(); Integer cstmrSno = jwtTokenUtil.getCstmrSnoByToken();
// 개인정보 가져오기 - 비행계획서 작성자 정보, 조종사 정보 // 개인정보 가져오기 - 비행계획서 작성자 정보, 조종사 정보
AnctCstmrModel cstmrInfo = ptyCstmrQueryRepository.findByCstmrSno(cstmrSno); AnctCstmrModel cstmrInfo = ptyCstmrQueryRepository.findByCstmrSno(cstmrSno);
FltPlanBas fltPlanBas = BasLaancMapper.MAPPER.modelToPlanEntity(cstmrInfo); FltPlanBas fltPlanBas = BasLaancMapper.MAPPER.modelToPlanEntity(cstmrInfo);
@ -230,7 +229,7 @@ public class BasLaancService {
FltPlanBas rBasEntity = fltPlanBasRepository.save(fltPlanBas); FltPlanBas rBasEntity = fltPlanBasRepository.save(fltPlanBas);
Integer planSno = rBasEntity.getPlanSno(); Integer planSno = rBasEntity.getPlanSno();
// 비행구역 // 비행구역
List<BasLaancAreaModel> basLaancAreaModelList = rq.getAreaList(); List<BasLaancAreaModel> basLaancAreaModelList = rq.getAreaList();
if (basLaancAreaModelList != null && !basLaancAreaModelList.isEmpty()) { if (basLaancAreaModelList != null && !basLaancAreaModelList.isEmpty()) {
@ -391,7 +390,7 @@ public class BasLaancService {
/** /**
* 비행신청 - 공역관련 검증 * 비행신청 - 공역관련 검증
* *
* @param rq * @param rq
* @return * @return
*/ */
@ -426,7 +425,11 @@ public class BasLaancService {
AirspaceUtils airspaceUtils = AirspaceUtils.getInstance(); AirspaceUtils airspaceUtils = AirspaceUtils.getInstance();
Geometry rqGeometry = airspaceUtils.createGeometryByCoordinate(rqCoordBufferList); Geometry rqGeometry = airspaceUtils.createGeometryByCoordinate(rqCoordBufferList);
Double fltElev = basLaancAreaModel.getFltElev() != null ? basLaancAreaModel.getFltElev() : 0D; 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); boolean duplicatedAirspace = airspaceUtils.isDuplicatedAirspace(featureInfo);
@ -472,6 +475,7 @@ public class BasLaancService {
/** /**
* 비행계획서 검증 - 특별 비행 * 비행계획서 검증 - 특별 비행
*
* @param rq * @param rq
* @return * @return
*/ */
@ -621,7 +625,12 @@ public class BasLaancService {
Geometry targetGeometry = airspaceUtils.createGeometryByCoordinate(targetCoordBufferList); Geometry targetGeometry = airspaceUtils.createGeometryByCoordinate(targetCoordBufferList);
Double fltElev = area.getFltElev() != null ? Double.parseDouble(area.getFltElev()) : 0; 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); boolean duplicatedAirspace = airspaceUtils.isDuplicatedAirspace(targetFeatureInfo);
BasLaancDuplicatedAirspaceRs duplicatedAirspaceRs = BasLaancDuplicatedAirspaceRs.builder() BasLaancDuplicatedAirspaceRs duplicatedAirspaceRs = BasLaancDuplicatedAirspaceRs.builder()
.isDuplicated(duplicatedAirspace) .isDuplicated(duplicatedAirspace)
@ -715,7 +724,7 @@ public class BasLaancService {
* QR code 확인 * QR code 확인
* QR code 촬영후 return url로 데이터 받은 이후 확인 프로세스 * QR code 촬영후 return url로 데이터 받은 이후 확인 프로세스
* QR code 생성(PAV-KAC) > qr code 스캔(사용자) > 자격정보 전송(TS) > return url 자격정보 받음(PAV-KAC) > 확인(자격정보 확인)* * QR code 생성(PAV-KAC) > qr code 스캔(사용자) > 자격정보 전송(TS) > return url 자격정보 받음(PAV-KAC) > 확인(자격정보 확인)*
* *
* @param confirmKey * @param confirmKey
* @return * @return
*/ */
@ -723,8 +732,8 @@ public class BasLaancService {
log.info(">>> confirmKey : {}", confirmKey); log.info(">>> confirmKey : {}", confirmKey);
String userIdByToken = jwtTokenUtil.getUserIdByToken(); String userIdByToken = jwtTokenUtil.getUserIdByToken();
ComConfirmBas entity = comConfirmBasRepository.findFirstByConfirmKeyOrderByCreateDtDesc(confirmKey); ComConfirmBas entity = comConfirmBasRepository.findFirstByConfirmKeyOrderByCreateDtDesc(confirmKey);
if(entity == null) throw new CustomException(ErrorCode.DATA_NOTFIND, "QR코드 조회 실패"); if (entity == null) throw new CustomException(ErrorCode.DATA_NOTFIND, "QR코드 조회 실패");
if (!"RECEIVED".equals(entity.getStatus())){ if (!"RECEIVED".equals(entity.getStatus())) {
Map<String, String> errorParam = new HashMap<>(); Map<String, String> errorParam = new HashMap<>();
errorParam.put("status", entity.getStatus()); errorParam.put("status", entity.getStatus());
throw new CustomException(ErrorCode.DATA_NOTFIND, errorParam); throw new CustomException(ErrorCode.DATA_NOTFIND, errorParam);
@ -743,7 +752,7 @@ public class BasLaancService {
PilotValidRs rs = null; PilotValidRs rs = null;
String rsData = entity.getRsData(); String rsData = entity.getRsData();
if(rsData != null && !rsData.isEmpty()){ if (rsData != null && !rsData.isEmpty()) {
rs = JsonUtils.fromJson(rsData, PilotValidRs.class); rs = JsonUtils.fromJson(rsData, PilotValidRs.class);
} }
@ -753,9 +762,9 @@ public class BasLaancService {
/** /**
* TS 비행계획서 * TS 비행계획서
* 드론원스탑에서 받은 데이터 받기 * 드론원스탑에서 받은 데이터 받기
* *
* @param tsPlanRq * @param tsPlanRq
*/ */
public void createPlanDos(TsPlanRq tsPlanRq) { public void createPlanDos(TsPlanRq tsPlanRq) {
// convert // convert
BasLaancPlanRq rq = tsPlanRq.toBasLaancPlanRq(); BasLaancPlanRq rq = tsPlanRq.toBasLaancPlanRq();

4
pav-server/src/main/java/com/palnet/biz/api/external/model/DosApprovalResult.java vendored

@ -14,4 +14,8 @@ public class DosApprovalResult {
private ApprovalCd approvalCd; private ApprovalCd approvalCd;
// 허용최대고도 // 허용최대고도
private Double fltElevMax; private Double fltElevMax;
// 요청반경(10m단위)
private Integer reqRadius;
// 허용반경
private Integer allowRadius;
} }

39
pav-server/src/main/java/com/palnet/comn/utils/AirspaceUtils.java

@ -1,6 +1,7 @@
package com.palnet.comn.utils; package com.palnet.comn.utils;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -312,7 +313,7 @@ public class AirspaceUtils {
BigDecimal lf = new BigDecimal(String.valueOf(lastCoords.get(0))); BigDecimal lf = new BigDecimal(String.valueOf(lastCoords.get(0)));
BigDecimal ll = new BigDecimal(String.valueOf(lastCoords.get(1))); BigDecimal ll = new BigDecimal(String.valueOf(lastCoords.get(1)));
if (!ff.equals(lf) || !fl.equals(ll)) { 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 nameObject = String.valueOf(propertiesObject.get("name"));
// String descriptionObject = String.valueOf(propertiesObject.get("description")); // String descriptionObject = String.valueOf(propertiesObject.get("description"));
// log.info("coords first and last coords not eqauls : name/descriion = {}/{}", nameObject, descriptionObject); // log.info("coords first and last coords not eqauls : name/descriion = {}/{}", nameObject, descriptionObject);
@ -328,21 +329,21 @@ public class AirspaceUtils {
if (use) { if (use) {
String name = String.valueOf(simpleFeature.getAttribute("name")); String name = String.valueOf(simpleFeature.getAttribute("name"));
String description = String.valueOf(simpleFeature.getAttribute("description")); String description = String.valueOf(simpleFeature.getAttribute("description"));
String propType = String.valueOf(simpleFeature.getAttribute("type"));
Double lowElev = Double.parseDouble(String.valueOf(simpleFeature.getAttribute("lowElev"))); 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"))); Double highElev = Double.parseDouble(String.valueOf(simpleFeature.getAttribute("highElev")));
Geometry geometry = (Geometry) simpleFeature.getDefaultGeometry(); Geometry geometry = (Geometry) simpleFeature.getDefaultGeometry();
// log.debug(">>> name, description, use, lowElev, highElev : {}, {}, {}, {}, {}", name, description, use, lowElev, highElev); FeatureInfo info = FeatureInfo.builder()
FeatureInfo info = new FeatureInfo(name, description, lowElev, highElev, geometry); .name(name)
.description(description)
.type(propType)
.lowElev(lowElev)
.highElev(highElev)
.geometry(geometry)
.build();
featureInfos.add(info); featureInfos.add(info);
} }
} catch (IOException e) { } catch (Exception e) {
log.error("geometry json read error : {}", e.getMessage()); log.error("geometry json read error : {}", e.getMessage());
} }
} }
@ -354,10 +355,18 @@ public class AirspaceUtils {
if (use) { if (use) {
String name = String.valueOf(simpleFeature.getAttribute("name")); String name = String.valueOf(simpleFeature.getAttribute("name"));
String description = String.valueOf(simpleFeature.getAttribute("description")); String description = String.valueOf(simpleFeature.getAttribute("description"));
String propType = String.valueOf(simpleFeature.getAttribute("type"));
Double lowElev = Double.parseDouble(String.valueOf(simpleFeature.getAttribute("lowElev"))); Double lowElev = Double.parseDouble(String.valueOf(simpleFeature.getAttribute("lowElev")));
Double highElev = Double.parseDouble(String.valueOf(simpleFeature.getAttribute("highElev"))); Double highElev = Double.parseDouble(String.valueOf(simpleFeature.getAttribute("highElev")));
Geometry geometry = (Geometry) simpleFeature.getDefaultGeometry(); 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); featureInfos.add(info);
} }
} catch (IOException e) { } catch (IOException e) {
@ -368,7 +377,9 @@ public class AirspaceUtils {
GeometryJSON geoJson = new GeometryJSON(); GeometryJSON geoJson = new GeometryJSON();
try { try {
Geometry geometry = geoJson.read(jsonObject.toJSONString()); 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) { } catch (IOException e) {
log.error("geometry json read error : {}", e.getMessage()); log.error("geometry json read error : {}", e.getMessage());
} }
@ -389,9 +400,11 @@ public class AirspaceUtils {
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Builder
public static class FeatureInfo { public static class FeatureInfo {
private String name; private String name;
private String description; private String description;
private String type;
private Double lowElev; private Double lowElev;
private Double highElev; private Double highElev;
private Geometry geometry; private Geometry geometry;

Loading…
Cancel
Save