diff --git a/pav-server/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java b/pav-server/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java index a8f1a8b6..4ea55774 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/bas/flight/controller/BasFlightController.java +++ b/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; -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 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.template.service.TemplateService; 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.utils.AreaUtils; import com.palnet.comn.utils.PdfUtils; - import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; 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 +@RequiredArgsConstructor @RestController @RequestMapping(value = "/api/bas/flight", produces = {MediaType.APPLICATION_JSON_VALUE}) @Tag(name = "비행계획서", description = "비행계획서 관련 API") @@ -54,18 +49,6 @@ public class BasFlightController { private final AreaUtils utils; private final TemplateService templateService; 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") @Tag(name = "비행계획서", description = "비행계획서 관련 API") @@ -127,46 +110,19 @@ public class BasFlightController { return ResponseEntity.ok().body(new SuccessResponse<>(result)); } - // LAANC 비행계획서 검증 - @PostMapping(value = "/plan/valid") - @ApiOperation(value = "비행계획서 등록") - @Tag(name = "비행계획서", description = "비행계획서 관련 API") - public ResponseEntity validPlan(@RequestBody BasFlightPlanModel rq) { - BasFlightPlanLaancRs rs = null; - try { - log.debug(">>> rq : {}", rq); - rs = basFlightService.validPlan(rq); - log.debug(">>> rs : {}", rs); - - } catch (CustomException e) { - Map resultMap = new HashMap(); - log.error("IGNORE : {}", e); - resultMap.put("result", false); - resultMap.put("errorCode", e.getErrorCode()); - resultMap.put("errorMessage", e.getMessage()); - return ResponseEntity.ok().body(new SuccessResponse(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") @ApiOperation(value = "비행계획서 등록") @Tag(name = "비행계획서", description = "비행계획서 관련 API") public ResponseEntity createPlan(@RequestBody BasFlightPlanModel rq) { - BasFlightPlanCreateRs rs = null; + Map resultMap = new HashMap(); try { - log.debug(">>> rq : {}", rq); - rs = basFlightService.createPlan(rq); - log.debug(">>> rs : {}", rs); + log.error(">>> rq : {}", rq); + boolean result = basFlightService.createPlan(rq); + resultMap.put("result", result); + log.info(">>> resultMap : " , resultMap); } catch (CustomException e) { - Map resultMap = new HashMap(); log.error("IGNORE : {}", e); resultMap.put("result", false); resultMap.put("errorCode", e.getErrorCode()); @@ -178,7 +134,7 @@ public class BasFlightController { .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 = "비행계획서 수정") @Tag(name = "비행계획서", description = "비행계획서 관련 API") public ResponseEntity updatePlan(@RequestBody BasFlightPlanModel rq) { - BasFlightPlanLaancRs rs = null; + Map resultMap = new HashMap(); try { - rs = basFlightService.updatePlan(rq); + boolean result = basFlightService.updatePlan(rq); + resultMap.put("result", result); } catch (CustomException e) { - Map resultMap = new HashMap(); log.error("IGNORE : {}", e); resultMap.put("result", false); resultMap.put("errorCode", e.getErrorCode()); @@ -203,7 +159,7 @@ public class BasFlightController { .body(new ErrorResponse("Server Error", "-1")); } - return ResponseEntity.ok().body(new SuccessResponse<>(rs)); + return ResponseEntity.ok().body(new SuccessResponse<>(resultMap)); } // 비행계획서 삭제 diff --git a/pav-server/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanModel.java b/pav-server/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanModel.java index bf08a2f0..2b3b2776 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/bas/flight/model/BasFlightPlanModel.java +++ b/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; -import com.palnet.biz.api.acnt.cstmr.model.AnctCstmrTermsModel; import lombok.Data; import java.time.Instant; @@ -35,8 +34,4 @@ public class BasFlightPlanModel { // kac 추가 필드 private String corpRegYn; private String serviceType; - // laanc 정보 - private BasFlightPlanLaancRs validLance; - // 약관동의 - private List terms; } diff --git a/pav-server/src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java b/pav-server/src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java index 7ad8f748..a2e0db2b 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java +++ b/pav-server/src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java @@ -152,16 +152,7 @@ public class BasFlightService { return rs; } - public BasFlightPlanLaancRs planValid(BasFlightPlanModel rq) { - - BasFlightPlanLaancRs rs = BasFlightPlanLaancRs.builder() - .pilotQlfcYn("N") - .acrftInsuranceYn("N") - .acrftDuplicatedYn("N") - .planAreaDuplicatdYn("N") - .evaluatedTargetAreaYn("N") - .flightAreaYn("N") - .build(); + public void planValid(BasFlightPlanModel rq) { boolean isEqualsFltElev = false; List rqAreaList = rq.getAreaList(); @@ -178,9 +169,7 @@ public class BasFlightService { } List effectivePlanCount = fltPlanQueryRepository.CoordCount(rq); for (BasFlightPlanModel i : effectivePlanList) { - // TODO 의미? - if (rq.getPlanSno().equals(i.getPlanSno())) return rs; - + if (rq.getPlanSno().equals(i.getPlanSno())) return; } if (effectivePlanList != null && !effectivePlanList.isEmpty()) { plan: @@ -236,28 +225,22 @@ public class BasFlightService { rqCoordBufferList = areaUtils.createCircle(rqCoord.get(0), rqArea.getBufferZone()); } - //검증 - 비행계획서 비행구역 중복확인 + //검증 overlapCheck = areaUtils.overlaps(rqCoordBufferList, effectiveCoordBufferList); overlapCheck2 = areaUtils.overlaps(effectiveCoordBufferList, rqCoordBufferList); if ((overlapCheck || overlapCheck2) && isEqualsFltElev) { -// throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE); - rs.setPlanAreaDuplicatdYn("Y"); - break plan; + throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE); } for (Coordinate coord : effectiveCoordBufferList) { containCheck = areaUtils.contains(rqCoordBufferList, coord); if (containCheck && isEqualsFltElev) { -// throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE); - rs.setPlanAreaDuplicatdYn("Y"); - break plan; + throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE); } } for (Coordinate coord : rqCoordBufferList) { containCheck2 = areaUtils.contains(effectiveCoordBufferList, coord); if (containCheck2 && isEqualsFltElev) { -// throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE); - rs.setPlanAreaDuplicatdYn("Y"); - break plan; + throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE); } } } @@ -269,92 +252,21 @@ public class BasFlightService { for (BasFlightPlanAreaCoordRq idntfNum : effectivePlanCount) { for (BasFlightPlanArcrftModel rqArcrft : rq.getArcrftList()) { if (rqArcrft.getIdntfNum().equals(idntfNum.getIdntfNum())) { -// throw new CustomException(ErrorCode.ARCRFT_DATA_DUPLICATE); - rs.setAcrftDuplicatedYn("Y"); - break acrft; + throw new CustomException(ErrorCode.ARCRFT_DATA_DUPLICATE); } } } } } - - // 공역 중복 확인 - for (BasFlightPlanAreaModel rqArea : rq.getAreaList()) { - List rqCoord = new ArrayList<>(); - List 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 trans = areaUtils.transform(rqCoord, "EPSG:4326", "EPSG:5181"); - List 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 - public BasFlightPlanCreateRs createPlan(BasFlightPlanModel rq) { + public boolean createPlan(BasFlightPlanModel rq) { // 비행계획서 유효성 검사. - BasFlightPlanLaancRs basFlightPlanLaancRs = this.planValid(rq); - - // LAANC가 검증된것들만 DB저장 - if (!basFlightPlanLaancRs.isValidAirspace()) new CustomException(ErrorCode.PLAN_DATA_DUPLICATE); - + this.planValid(rq); // 비행계획서 String userId = jwtTokenUtil.getUserIdByToken(); @@ -363,10 +275,6 @@ public class BasFlightService { basEntity.setAprvlYn("N"); basEntity.setCreateUserId(userId); basEntity.setUpdateUserId(userId); - // 사업자 유무 - TS 데이터 - basEntity.setCorpRegYn(rq.getValidLance().getCorpRegYn()); // 사업자유무 - basEntity.setServiceType("PAV-KAC"); - FltPlanBas rBasEntity = fltPlanBasRepository.save(basEntity); Integer planSno = rBasEntity.getPlanSno(); // 비행구역 @@ -413,59 +321,18 @@ public class BasFlightService { arcrftEntity.setPlanSno(planSno); arcrftEntity.setCreateUserId(userId); arcrftEntity.setUpdateUserId(userId); - // 추가 필드 - arcrftEntity.setAcrftInsuranceYn(rq.getValidLance().getAcrftInsuranceYn()); // 보험여부 -// arcrftEntity.setInsuranceExperiod(null); // 보헌 유효기간 -// arcrftEntity.setCorporationNm(null); // 법인명 fltPlanArcrftRepository.save(arcrftEntity); } } - // 약관 저장 - 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; + return true; } // 비행계획서 수정 @Transactional - public BasFlightPlanLaancRs updatePlan(BasFlightPlanModel rq) { + public boolean updatePlan(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"); - } else { - rs.setPilotQlfcYn(pilotValidRs.getPilotcredentialyn()); - rs.setAcrftInsuranceYn(pilotValidRs.getArcrftinsuranceyn()); - } - - // LAANC가 검증된것들만 DB저장 - if (!rs.isValid()) return rs; + this.planValid(rq); if (rq != null && rq.getPlanSno() != null) { String userId = jwtTokenUtil.getUserIdByToken(); @@ -474,10 +341,6 @@ public class BasFlightService { FltPlanBas planEntity = fltPlanBasRepository.findById(planSno).orElseThrow(); BasFlightMapper.mapper.updateEntityByModel(planEntity, rq); planEntity.setUpdateUserId(userId); - - // 사업자 유무 - TS 데이터 - planEntity.setCorpRegYn(pilotValidRs.getCorpregyn()); // 사업자유무 -// planEntity.setServiceType("PAV-KAC"); fltPlanBasRepository.save(planEntity); // 비행구역 @@ -494,7 +357,6 @@ public class BasFlightService { BasFlightMapper.mapper.updateEntityByModel(areaEntity, areaModel); } areaEntity.setUpdateUserId(userId); - fltPlanAreaRepository.save(areaEntity); @@ -576,8 +438,6 @@ public class BasFlightService { } else { BasFlightMapper.mapper.updateEntityByModel(arcrftEntity, arcrftModel); } - // 추가 필드 - arcrftEntity.setAcrftInsuranceYn(pilotValidRs.getArcrftinsuranceyn()); // 보험여부 fltPlanArcrftRepository.save(arcrftEntity); } List deleteArcrftEntity = arcrftEntityList.stream().filter(fltPlanArcrft -> { @@ -590,7 +450,7 @@ public class BasFlightService { fltPlanArcrftRepository.deleteAll(deleteArcrftEntity); } } - return rs; + return true; } // 비행계획서 삭제 @@ -838,5 +698,4 @@ public class BasFlightService { return jsonObject; } - }