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": [
{
"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": [

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();
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;

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.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<BasLaancAreaModel> 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<String, String> 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();

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 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;
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;

Loading…
Cancel
Save