Browse Source

기존 flight 롤백

pull/8/head
지대한 1 year ago
parent
commit
49db329500
  1. 102
      pav-server/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java
  2. 5
      pav-server/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanModel.java
  3. 167
      pav-server/src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java

102
pav-server/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java

@ -1,29 +1,6 @@
package com.palnet.biz.api.bas.flight.controller; package com.palnet.biz.api.bas.flight.controller;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.palnet.biz.api.bas.flight.model.*; import com.palnet.biz.api.bas.flight.model.*;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import org.locationtech.jts.geom.Coordinate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import com.palnet.biz.api.bas.flight.service.BasFlightService; import com.palnet.biz.api.bas.flight.service.BasFlightService;
import com.palnet.biz.api.bas.flight.template.service.TemplateService; import com.palnet.biz.api.bas.flight.template.service.TemplateService;
import com.palnet.biz.api.bas.flight.template.vo.LaancPdfVO; import com.palnet.biz.api.bas.flight.template.vo.LaancPdfVO;
@ -36,13 +13,31 @@ import com.palnet.biz.scheduler.ctr.service.CtrTrnsLctnService;
import com.palnet.comn.exception.CustomException; import com.palnet.comn.exception.CustomException;
import com.palnet.comn.utils.AreaUtils; import com.palnet.comn.utils.AreaUtils;
import com.palnet.comn.utils.PdfUtils; import com.palnet.comn.utils.PdfUtils;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import org.locationtech.jts.geom.Coordinate;
import org.springframework.core.env.Environment;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.io.*;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j @Slf4j
@RequiredArgsConstructor
@RestController @RestController
@RequestMapping(value = "/api/bas/flight", produces = {MediaType.APPLICATION_JSON_VALUE}) @RequestMapping(value = "/api/bas/flight", produces = {MediaType.APPLICATION_JSON_VALUE})
@Tag(name = "비행계획서", description = "비행계획서 관련 API") @Tag(name = "비행계획서", description = "비행계획서 관련 API")
@ -55,18 +50,6 @@ public class BasFlightController {
private final TemplateService templateService; private final TemplateService templateService;
private final PdfUtils pdfUtils; private final PdfUtils pdfUtils;
@Autowired
public BasFlightController(BasFlightService basFlightService, Environment env, CtrTrnsLctnService ctrTrnsLctnService, AreaUtils AreaUtils, TemplateService templateService, PdfUtils pdfUtils) {
this.basFlightService = basFlightService;
this.env = env;
this.ctrTrnsLctnService = ctrTrnsLctnService;
this.utils = AreaUtils;
this.templateService = templateService;
this.pdfUtils = pdfUtils;
}
@GetMapping("/area") @GetMapping("/area")
@Tag(name = "비행계획서", description = "비행계획서 관련 API") @Tag(name = "비행계획서", description = "비행계획서 관련 API")
public ResponseEntity<Object> findAirSpace() throws IOException, ParseException { public ResponseEntity<Object> findAirSpace() throws IOException, ParseException {
@ -127,46 +110,19 @@ public class BasFlightController {
return ResponseEntity.ok().body(new SuccessResponse<>(result)); return ResponseEntity.ok().body(new SuccessResponse<>(result));
} }
// LAANC 비행계획서 검증
@PostMapping(value = "/plan/valid")
@ApiOperation(value = "비행계획서 등록")
@Tag(name = "비행계획서", description = "비행계획서 관련 API")
public ResponseEntity<? extends BasicResponse> validPlan(@RequestBody BasFlightPlanModel rq) {
BasFlightPlanLaancRs rs = null;
try {
log.debug(">>> rq : {}", rq);
rs = basFlightService.validPlan(rq);
log.debug(">>> rs : {}", rs);
} catch (CustomException e) {
Map<String, Object> resultMap = new HashMap<String, Object>();
log.error("IGNORE : {}", e);
resultMap.put("result", false);
resultMap.put("errorCode", e.getErrorCode());
resultMap.put("errorMessage", e.getMessage());
return ResponseEntity.ok().body(new SuccessResponse<Map>(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 = "/plan/create") @PostMapping(value = "/plan/create")
@ApiOperation(value = "비행계획서 등록") @ApiOperation(value = "비행계획서 등록")
@Tag(name = "비행계획서", description = "비행계획서 관련 API") @Tag(name = "비행계획서", description = "비행계획서 관련 API")
public ResponseEntity<? extends BasicResponse> createPlan(@RequestBody BasFlightPlanModel rq) { public ResponseEntity<? extends BasicResponse> createPlan(@RequestBody BasFlightPlanModel rq) {
BasFlightPlanCreateRs rs = null; Map<String, Object> resultMap = new HashMap<String, Object>();
try { try {
log.debug(">>> rq : {}", rq); log.error(">>> rq : {}", rq);
rs = basFlightService.createPlan(rq); boolean result = basFlightService.createPlan(rq);
log.debug(">>> rs : {}", rs); resultMap.put("result", result);
log.info(">>> resultMap : " , resultMap);
} catch (CustomException e) { } catch (CustomException e) {
Map<String, Object> resultMap = new HashMap<String, Object>();
log.error("IGNORE : {}", e); log.error("IGNORE : {}", e);
resultMap.put("result", false); resultMap.put("result", false);
resultMap.put("errorCode", e.getErrorCode()); resultMap.put("errorCode", e.getErrorCode());
@ -178,7 +134,7 @@ public class BasFlightController {
.body(new ErrorResponse("Server Error", "-1")); .body(new ErrorResponse("Server Error", "-1"));
} }
return ResponseEntity.ok().body(new SuccessResponse<>(rs)); return ResponseEntity.ok().body(new SuccessResponse<>(resultMap));
} }
// 비행계획서 수정 // 비행계획서 수정
@ -186,12 +142,12 @@ public class BasFlightController {
@ApiOperation(value = "비행계획서 수정") @ApiOperation(value = "비행계획서 수정")
@Tag(name = "비행계획서", description = "비행계획서 관련 API") @Tag(name = "비행계획서", description = "비행계획서 관련 API")
public ResponseEntity<? extends BasicResponse> updatePlan(@RequestBody BasFlightPlanModel rq) { public ResponseEntity<? extends BasicResponse> updatePlan(@RequestBody BasFlightPlanModel rq) {
BasFlightPlanLaancRs rs = null; Map<String, Object> resultMap = new HashMap<String, Object>();
try { try {
rs = basFlightService.updatePlan(rq); boolean result = basFlightService.updatePlan(rq);
resultMap.put("result", result);
} catch (CustomException e) { } catch (CustomException e) {
Map<String, Object> resultMap = new HashMap<String, Object>();
log.error("IGNORE : {}", e); log.error("IGNORE : {}", e);
resultMap.put("result", false); resultMap.put("result", false);
resultMap.put("errorCode", e.getErrorCode()); resultMap.put("errorCode", e.getErrorCode());
@ -203,7 +159,7 @@ public class BasFlightController {
.body(new ErrorResponse("Server Error", "-1")); .body(new ErrorResponse("Server Error", "-1"));
} }
return ResponseEntity.ok().body(new SuccessResponse<>(rs)); return ResponseEntity.ok().body(new SuccessResponse<>(resultMap));
} }
// 비행계획서 삭제 // 비행계획서 삭제

5
pav-server/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanModel.java

@ -1,6 +1,5 @@
package com.palnet.biz.api.bas.flight.model; package com.palnet.biz.api.bas.flight.model;
import com.palnet.biz.api.acnt.cstmr.model.AnctCstmrTermsModel;
import lombok.Data; import lombok.Data;
import java.time.Instant; import java.time.Instant;
@ -35,8 +34,4 @@ public class BasFlightPlanModel {
// kac 추가 필드 // kac 추가 필드
private String corpRegYn; private String corpRegYn;
private String serviceType; private String serviceType;
// laanc 정보
private BasFlightPlanLaancRs validLance;
// 약관동의
private List<AnctCstmrTermsModel> terms;
} }

167
pav-server/src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java

@ -152,16 +152,7 @@ public class BasFlightService {
return rs; return rs;
} }
public BasFlightPlanLaancRs planValid(BasFlightPlanModel rq) { public void planValid(BasFlightPlanModel rq) {
BasFlightPlanLaancRs rs = BasFlightPlanLaancRs.builder()
.pilotQlfcYn("N")
.acrftInsuranceYn("N")
.acrftDuplicatedYn("N")
.planAreaDuplicatdYn("N")
.evaluatedTargetAreaYn("N")
.flightAreaYn("N")
.build();
boolean isEqualsFltElev = false; boolean isEqualsFltElev = false;
List<BasFlightPlanAreaModel> rqAreaList = rq.getAreaList(); List<BasFlightPlanAreaModel> rqAreaList = rq.getAreaList();
@ -178,9 +169,7 @@ public class BasFlightService {
} }
List<BasFlightPlanAreaCoordRq> effectivePlanCount = fltPlanQueryRepository.CoordCount(rq); List<BasFlightPlanAreaCoordRq> effectivePlanCount = fltPlanQueryRepository.CoordCount(rq);
for (BasFlightPlanModel i : effectivePlanList) { for (BasFlightPlanModel i : effectivePlanList) {
// TODO 의미? if (rq.getPlanSno().equals(i.getPlanSno())) return;
if (rq.getPlanSno().equals(i.getPlanSno())) return rs;
} }
if (effectivePlanList != null && !effectivePlanList.isEmpty()) { if (effectivePlanList != null && !effectivePlanList.isEmpty()) {
plan: plan:
@ -236,28 +225,22 @@ public class BasFlightService {
rqCoordBufferList = areaUtils.createCircle(rqCoord.get(0), rqArea.getBufferZone()); rqCoordBufferList = areaUtils.createCircle(rqCoord.get(0), rqArea.getBufferZone());
} }
//검증 - 비행계획서 비행구역 중복확인 //검증
overlapCheck = areaUtils.overlaps(rqCoordBufferList, effectiveCoordBufferList); overlapCheck = areaUtils.overlaps(rqCoordBufferList, effectiveCoordBufferList);
overlapCheck2 = areaUtils.overlaps(effectiveCoordBufferList, rqCoordBufferList); overlapCheck2 = areaUtils.overlaps(effectiveCoordBufferList, rqCoordBufferList);
if ((overlapCheck || overlapCheck2) && isEqualsFltElev) { if ((overlapCheck || overlapCheck2) && isEqualsFltElev) {
// throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE); throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE);
rs.setPlanAreaDuplicatdYn("Y");
break plan;
} }
for (Coordinate coord : effectiveCoordBufferList) { for (Coordinate coord : effectiveCoordBufferList) {
containCheck = areaUtils.contains(rqCoordBufferList, coord); containCheck = areaUtils.contains(rqCoordBufferList, coord);
if (containCheck && isEqualsFltElev) { if (containCheck && isEqualsFltElev) {
// throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE); throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE);
rs.setPlanAreaDuplicatdYn("Y");
break plan;
} }
} }
for (Coordinate coord : rqCoordBufferList) { for (Coordinate coord : rqCoordBufferList) {
containCheck2 = areaUtils.contains(effectiveCoordBufferList, coord); containCheck2 = areaUtils.contains(effectiveCoordBufferList, coord);
if (containCheck2 && isEqualsFltElev) { if (containCheck2 && isEqualsFltElev) {
// throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE); throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE);
rs.setPlanAreaDuplicatdYn("Y");
break plan;
} }
} }
} }
@ -269,92 +252,21 @@ public class BasFlightService {
for (BasFlightPlanAreaCoordRq idntfNum : effectivePlanCount) { for (BasFlightPlanAreaCoordRq idntfNum : effectivePlanCount) {
for (BasFlightPlanArcrftModel rqArcrft : rq.getArcrftList()) { for (BasFlightPlanArcrftModel rqArcrft : rq.getArcrftList()) {
if (rqArcrft.getIdntfNum().equals(idntfNum.getIdntfNum())) { if (rqArcrft.getIdntfNum().equals(idntfNum.getIdntfNum())) {
// throw new CustomException(ErrorCode.ARCRFT_DATA_DUPLICATE); throw new CustomException(ErrorCode.ARCRFT_DATA_DUPLICATE);
rs.setAcrftDuplicatedYn("Y");
break acrft;
} }
} }
} }
} }
} }
// 공역 중복 확인
for (BasFlightPlanAreaModel rqArea : rq.getAreaList()) {
List<Coordinate> rqCoord = new ArrayList<>();
List<Coordinate> rqCoordBufferList = new ArrayList<>();
//rq로 들어온 좌표로 버퍼좌표 생성
for (BasFlightPlanAreaCoordModel coord : rqArea.getCoordList()) {
Coordinate coords = new Coordinate(coord.getLon(), coord.getLat());
rqCoord.add(coords);
}
if ("LINE".equals(rqArea.getAreaType())) {
List<Coordinate> trans = areaUtils.transform(rqCoord, "EPSG:4326", "EPSG:5181");
List<Coordinate> bufferList = areaUtils.buffer(trans, rqArea.getBufferZone());
rqCoordBufferList = areaUtils.transform(bufferList, "EPSG:5181", "EPSG:4326");
} else if ("POLYGON".equals(rqArea.getAreaType())) {
rqCoordBufferList.addAll(rqCoord);
} else if ("CIRCLE".equals(rqArea.getAreaType())) {
rqCoordBufferList = areaUtils.createCircle(rqCoord.get(0), rqArea.getBufferZone());
}
AirspaceUtils airspaceUtils = AirspaceUtils.getInstance();
Geometry rqGeometry = airspaceUtils.createGeometryByCoordinate(rqCoordBufferList);
Integer fltElev = Integer.valueOf(rqArea.getFltElev());
if (fltElev == null) fltElev = 0;
AirspaceUtils.FeatureInfo featureInfo = new AirspaceUtils.FeatureInfo(null, null, 0, fltElev, rqGeometry);
// 평가 가능 지역 판단
boolean duplicatedAirspace = airspaceUtils.isDuplicatedAirspace(featureInfo);
rs.setEvaluatedTargetAreaYn(duplicatedAirspace ? "Y" : "N");
// 비행 가능 지역 판단
if (duplicatedAirspace) {
boolean validLaancAirspace = airspaceUtils.isValidLaancAirspace(featureInfo);
rs.setFlightAreaYn(validLaancAirspace ? "Y" : "N");
} else {
rs.setFlightAreaYn("N");
}
}
return rs;
}
// 비행계획서 검증(LAANC)
public BasFlightPlanLaancRs validPlan(BasFlightPlanModel rq) {
// 비행계획서 유효성 검사.
BasFlightPlanLaancRs rs = this.planValid(rq);
// TODO 조종사 자격 및 기체보험 확인
PilotValidRq pilotValidRq = PilotValidRq.builder()
.pilotci("조종사CI")
.declarationnum("기체신고번호")
.build();
PilotValidRs pilotValidRs = tsService.callPilotValid(pilotValidRq);
if (pilotValidRs == null) {
rs.setPilotQlfcYn("N");
rs.setAcrftInsuranceYn("N");
rs.setCorpRegYn("N");
} else {
rs.setPilotQlfcYn(pilotValidRs.getPilotcredentialyn());
rs.setAcrftInsuranceYn(pilotValidRs.getArcrftinsuranceyn());
rs.setCorpRegYn(pilotValidRs.getCorpregyn());
}
return rs;
} }
// 비행계획서 등록 // 비행계획서 등록
@Transactional @Transactional
public BasFlightPlanCreateRs createPlan(BasFlightPlanModel rq) { public boolean createPlan(BasFlightPlanModel rq) {
// 비행계획서 유효성 검사. // 비행계획서 유효성 검사.
BasFlightPlanLaancRs basFlightPlanLaancRs = this.planValid(rq); this.planValid(rq);
// LAANC가 검증된것들만 DB저장
if (!basFlightPlanLaancRs.isValidAirspace()) new CustomException(ErrorCode.PLAN_DATA_DUPLICATE);
// 비행계획서 // 비행계획서
String userId = jwtTokenUtil.getUserIdByToken(); String userId = jwtTokenUtil.getUserIdByToken();
@ -363,10 +275,6 @@ public class BasFlightService {
basEntity.setAprvlYn("N"); basEntity.setAprvlYn("N");
basEntity.setCreateUserId(userId); basEntity.setCreateUserId(userId);
basEntity.setUpdateUserId(userId); basEntity.setUpdateUserId(userId);
// 사업자 유무 - TS 데이터
basEntity.setCorpRegYn(rq.getValidLance().getCorpRegYn()); // 사업자유무
basEntity.setServiceType("PAV-KAC");
FltPlanBas rBasEntity = fltPlanBasRepository.save(basEntity); FltPlanBas rBasEntity = fltPlanBasRepository.save(basEntity);
Integer planSno = rBasEntity.getPlanSno(); Integer planSno = rBasEntity.getPlanSno();
// 비행구역 // 비행구역
@ -413,59 +321,18 @@ public class BasFlightService {
arcrftEntity.setPlanSno(planSno); arcrftEntity.setPlanSno(planSno);
arcrftEntity.setCreateUserId(userId); arcrftEntity.setCreateUserId(userId);
arcrftEntity.setUpdateUserId(userId); arcrftEntity.setUpdateUserId(userId);
// 추가 필드
arcrftEntity.setAcrftInsuranceYn(rq.getValidLance().getAcrftInsuranceYn()); // 보험여부
// arcrftEntity.setInsuranceExperiod(null); // 보헌 유효기간
// arcrftEntity.setCorporationNm(null); // 법인명
fltPlanArcrftRepository.save(arcrftEntity); fltPlanArcrftRepository.save(arcrftEntity);
} }
} }
// 약관 저장 return true;
if (rq.getTerms() != null && !rq.getTerms().isEmpty()) {
for (AnctCstmrTermsModel agree : rq.getTerms()) {
PtyTermsAgreeTxn agreeEntity = new PtyTermsAgreeTxn();
agreeEntity.setCstmrSno(basEntity.getCstmrSno());
agreeEntity.setProcIp(HttpUtils.getRequestIp());
agreeEntity.setTermsSno(agree.getTermsSno());
agreeEntity.setUpdateDt(Instant.now());
agreeEntity.setUpdateUserId(userId);
agreeEntity.setAgreeYn(agree.getAgreeYn());
if (agree.getAgreeYn().equals("Y")) {
agreeEntity.setAgreeDt(Instant.now());
}
ptyTermsAgreeTxnRepository.save(agreeEntity);
}
} else {
throw new CustomException(ErrorCode.FAIL, "약관등록 실패");
}
// TODO PDF 생성 후 URL 가져오기
BasFlightPlanCreateRs rs = new BasFlightPlanCreateRs();
return rs;
} }
// 비행계획서 수정 // 비행계획서 수정
@Transactional @Transactional
public BasFlightPlanLaancRs updatePlan(BasFlightPlanModel rq) { public boolean updatePlan(BasFlightPlanModel rq) {
// 비행계획서 유효성 검사. // 비행계획서 유효성 검사.
BasFlightPlanLaancRs rs = this.planValid(rq); this.planValid(rq);
// TODO 조종사 자격 및 기체보험 확인
PilotValidRq pilotValidRq = PilotValidRq.builder()
.pilotci("조종사CI")
.declarationnum("기체신고번호")
.build();
PilotValidRs pilotValidRs = tsService.callPilotValid(pilotValidRq);
if (pilotValidRs == null) {
rs.setPilotQlfcYn("N");
rs.setAcrftInsuranceYn("N");
} else {
rs.setPilotQlfcYn(pilotValidRs.getPilotcredentialyn());
rs.setAcrftInsuranceYn(pilotValidRs.getArcrftinsuranceyn());
}
// LAANC가 검증된것들만 DB저장
if (!rs.isValid()) return rs;
if (rq != null && rq.getPlanSno() != null) { if (rq != null && rq.getPlanSno() != null) {
String userId = jwtTokenUtil.getUserIdByToken(); String userId = jwtTokenUtil.getUserIdByToken();
@ -474,10 +341,6 @@ public class BasFlightService {
FltPlanBas planEntity = fltPlanBasRepository.findById(planSno).orElseThrow(); FltPlanBas planEntity = fltPlanBasRepository.findById(planSno).orElseThrow();
BasFlightMapper.mapper.updateEntityByModel(planEntity, rq); BasFlightMapper.mapper.updateEntityByModel(planEntity, rq);
planEntity.setUpdateUserId(userId); planEntity.setUpdateUserId(userId);
// 사업자 유무 - TS 데이터
planEntity.setCorpRegYn(pilotValidRs.getCorpregyn()); // 사업자유무
// planEntity.setServiceType("PAV-KAC");
fltPlanBasRepository.save(planEntity); fltPlanBasRepository.save(planEntity);
// 비행구역 // 비행구역
@ -494,7 +357,6 @@ public class BasFlightService {
BasFlightMapper.mapper.updateEntityByModel(areaEntity, areaModel); BasFlightMapper.mapper.updateEntityByModel(areaEntity, areaModel);
} }
areaEntity.setUpdateUserId(userId); areaEntity.setUpdateUserId(userId);
fltPlanAreaRepository.save(areaEntity); fltPlanAreaRepository.save(areaEntity);
@ -576,8 +438,6 @@ public class BasFlightService {
} else { } else {
BasFlightMapper.mapper.updateEntityByModel(arcrftEntity, arcrftModel); BasFlightMapper.mapper.updateEntityByModel(arcrftEntity, arcrftModel);
} }
// 추가 필드
arcrftEntity.setAcrftInsuranceYn(pilotValidRs.getArcrftinsuranceyn()); // 보험여부
fltPlanArcrftRepository.save(arcrftEntity); fltPlanArcrftRepository.save(arcrftEntity);
} }
List<FltPlanArcrft> deleteArcrftEntity = arcrftEntityList.stream().filter(fltPlanArcrft -> { List<FltPlanArcrft> deleteArcrftEntity = arcrftEntityList.stream().filter(fltPlanArcrft -> {
@ -590,7 +450,7 @@ public class BasFlightService {
fltPlanArcrftRepository.deleteAll(deleteArcrftEntity); fltPlanArcrftRepository.deleteAll(deleteArcrftEntity);
} }
} }
return rs; return true;
} }
// 비행계획서 삭제 // 비행계획서 삭제
@ -838,5 +698,4 @@ public class BasFlightService {
return jsonObject; return jsonObject;
} }
} }

Loading…
Cancel
Save