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 5f0d0d1..5eb80a9 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 @@ -78,9 +78,16 @@ public class BasFlightController { private final ComnFileService comnFileService; private final PdfUtils pdfUtils; + /** + * 공역데이터 내려주는 기능. + * @return + * @throws IOException + * @throws ParseException + */ @GetMapping("/area") @Tag(name = "비행계획서", description = "비행계획서 관련 API") public ResponseEntity findAirSpace() throws IOException, ParseException { + // 1. file read Resource resource = new ClassPathResource("air/airgeo.json"); InputStream jsonInputStream = resource.getInputStream(); @@ -102,7 +109,12 @@ public class BasFlightController { return ResponseEntity.ok().body(airArea); } - // 비행계획서 조회 + /** + * 비행계획서 조회하는 기능, + * BasFlightPlanListRq 모델에 조건값에 따라 조회함. + * @param rq + * @return + */ @GetMapping(value = "/plan/list") @ApiOperation(value = "비행계획서 조회") @Tag(name = "비행계획서", description = "비행계획서 관련 API") @@ -110,8 +122,15 @@ public class BasFlightController { ComnPagingRs result = null; log.debug(">>> rq : {}", rq); try { - result = basFlightService.listPlan(rq); + result = basFlightService.listPlan(rq); // 비행계획서 조회하는 기능 } catch (Exception e) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ log.error("IGNORE : {}", e); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body(new ErrorResponse("Server Error", "-1")); @@ -120,7 +139,12 @@ public class BasFlightController { return ResponseEntity.ok().body(new SuccessResponse<>(result)); } - // 비행계획서 상세 조회 + /** + * 비행계획서 상세 조회기능, + * 비행계획서 번호[planSno]로 상세조회 + * @param planSno + * @return + */ @GetMapping(value = "/plan/detail/{planSno}") @ApiOperation(value = "비행계획서 상세 조회") @Tag(name = "비행계획서", description = "비행계획서 관련 API") @@ -128,8 +152,15 @@ public class BasFlightController { public ResponseEntity detailPlan(@PathVariable("planSno") Integer planSno) { BasFlightPlanModel result = null; try { - result = basFlightService.detailPlan(planSno); + result = basFlightService.detailPlan(planSno); // 비행계획서 고유번호[planSno]로 상세 조회하는 기능. } catch (Exception e) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ log.error("IGNORE : {}", e); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body(new ErrorResponse("Server Error", "-1")); @@ -138,25 +169,46 @@ public class BasFlightController { return ResponseEntity.ok().body(new SuccessResponse<>(result)); } - // 비행계획서 등록 + /** + * 비행계획서 등록하는 기능, + * BasFlightPlanModel모델에 입력받은값으로 등록함. + * @param rq + * @return + */ @PostMapping(value = "/plan/create") @ApiOperation(value = "비행계획서 등록") @Tag(name = "비행계획서", description = "비행계획서 관련 API") public ResponseEntity createPlan(@RequestBody BasFlightPlanModel rq) { Map resultMap = new HashMap(); + try { log.error(">>> rq : {}", rq); - boolean result = basFlightService.createPlan(rq); + boolean result = basFlightService.createPlan(rq); // 입력받은 값으로 비행계획서 등록하는 기능. resultMap.put("result", result); log.info(">>> resultMap : " , resultMap); } catch (CustomException e) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * CustomException은 개발자가 "의도적으로" 낸 예외처리, + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ 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) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ log.error("IGNORE : {}", e); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body(new ErrorResponse("Server Error", "-1")); @@ -165,23 +217,43 @@ public class BasFlightController { return ResponseEntity.ok().body(new SuccessResponse<>(resultMap)); } - // 비행계획서 수정 + /** + * 비행계획서 수정하는 기능, + * BasFlightPlanModel 모델에 입력받은 값으로 수정함 + * @param rq + * @return + */ @PutMapping(value = "/plan/update") @ApiOperation(value = "비행계획서 수정") @Tag(name = "비행계획서", description = "비행계획서 관련 API") public ResponseEntity updatePlan(@RequestBody BasFlightPlanModel rq) { Map resultMap = new HashMap(); try { - boolean result = basFlightService.updatePlan(rq); + boolean result = basFlightService.updatePlan(rq); // 입력받은 값으로 비행계획서 수정하는 기능. resultMap.put("result", result); } catch (CustomException e) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * CustomException은 개발자가 "의도적으로" 낸 예외처리, + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ 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) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ log.error("IGNORE : {}", e); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body(new ErrorResponse("Server Error", "-1")); @@ -190,7 +262,12 @@ public class BasFlightController { return ResponseEntity.ok().body(new SuccessResponse<>(resultMap)); } - // 비행계획서 삭제 + /** + * 비행계획서 삭제하는 기능, + * 비행계획서 고유번호[planSno]로 삭제함. + * @param planSno + * @return + */ @DeleteMapping(value = "/plan/delete/{planSno}") @ApiOperation(value = "비행계획서 삭제") @Tag(name = "비행계획서", description = "비행계획서 관련 API") @@ -198,15 +275,30 @@ public class BasFlightController { public ResponseEntity deletePlan(@PathVariable("planSno") Integer planSno) { Map resultMap = new HashMap(); try { - boolean result = basFlightService.deletePlan(planSno); + boolean result = basFlightService.deletePlan(planSno); // 비행계획서 고유번호[planSno]로 비행계획서 삭제하는 기능. resultMap.put("result", result); } catch (CustomException e) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * CustomException은 개발자가 "의도적으로" 낸 예외처리, + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ log.error("IGNORE : {}", e); resultMap.put("result", false); resultMap.put("errorCode", e.getErrorCode()); return ResponseEntity.ok().body(new SuccessResponse(resultMap)); } catch (Exception e) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ log.error("IGNORE : {}", e); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body(new ErrorResponse("Server Error", "-1")); @@ -215,7 +307,12 @@ public class BasFlightController { return ResponseEntity.ok().body(new SuccessResponse<>(resultMap)); } - // 그룹 조종사 조회 + /** + * 그룹 조종사 조회하는 기능 + * 그룹아이디[groupId]로 조회함. + * @param groupId + * @return + */ @GetMapping(value = "/plan/pilot/{groupId}") @ApiOperation(value = "그룹의 조종사 조회") @Tag(name = "비행계획서", description = "비행계획서 관련 API") @@ -223,9 +320,16 @@ public class BasFlightController { public ResponseEntity findPilot(@PathVariable("groupId") String groupId) { List result = null; try { - result = basFlightService.listPilotByGroup(groupId); + result = basFlightService.listPilotByGroup(groupId); // 그룹아이디[groupId]로 그룹 조종사 조회하는 기능. } catch (Exception e) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ log.error("IGNORE : {}", e); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body(new ErrorResponse("Server Error", "-1")); @@ -235,7 +339,12 @@ public class BasFlightController { } - // 그룹 기체 조회 + /** + * 그룹 기체 조회하는 기능, + * 그룹아이디[groupId]로 조회함. + * @param groupId + * @return + */ @GetMapping(value = "/plan/arcrft/{groupId}") @ApiOperation(value = "그룹의 기체 조회") @Tag(name = "비행계획서", description = "비행계획서 관련 API") @@ -243,8 +352,15 @@ public class BasFlightController { public ResponseEntity findArcrft(@PathVariable("groupId") String groupId) { List result = null; try { - result = basFlightService.listArcrftByGroup(groupId); + result = basFlightService.listArcrftByGroup(groupId); // 그룹아이디[groupId]로 그룹 기체 조회하는 기능. } catch (Exception e) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ log.error("IGNORE : {}", e); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body(new ErrorResponse("Server Error", "-1")); @@ -254,15 +370,26 @@ public class BasFlightController { } - // 비행 구역 버퍼 존 생성 + /** + * 비행 구역 버퍼 존 생성하는 기능 + * @param rq + * @return + */ @PostMapping("/plan/area/buffer") @ApiOperation(value = "비행 구역 버퍼 존 생성") @Tag(name = "비행계획서", description = "비행계획서 관련 API") public ResponseEntity findBuffer(@RequestBody List rq) { List rs = null; try { - rs = basFlightService.getBuffer(rq); + rs = basFlightService.getBuffer(rq); // 비행 구역 buffer zone 생성하는 기능. } catch (Exception e) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ log.error("IGNORE : {}", e); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body(new ErrorResponse("Server Error", "-1")); @@ -271,6 +398,11 @@ public class BasFlightController { return ResponseEntity.ok().body(new SuccessResponse<>(rs)); } + /** + * 비행계획서 날씨 확인하는 기능. + * @param rq + * @return + */ @GetMapping("/plan/api/weather") @ApiOperation(value = "비행계획서 날씨") @Tag(name = "비행계획서", description = "비행계획서 관련 API") @@ -278,8 +410,15 @@ public class BasFlightController { JSONObject jsonObject = null; try { - jsonObject = basFlightService.getWeather(rq); + jsonObject = basFlightService.getWeather(rq); // 지역과 날씨에 대한 정보를 얻는 기능. } catch (Exception e) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ log.error("IGNORE : {}", e); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body(new ErrorResponse("Server Error", "-1")); @@ -289,15 +428,27 @@ public class BasFlightController { return ResponseEntity.ok().body(new SuccessResponse<>(jsonObject)); } - // 비행계획서 리스트(승인) + /** + * 비행계획서 리스트(승인)를 조회하는 기능, + * 입력받은 값으로 승인관련된 비행계획서 리스트를 조회함. + * @param rq + * @return + */ @GetMapping(value = "/aprv/list") @ApiOperation(value = "비행계획서 리스트(승인)") @Tag(name = "비행계획서", description = "비행계획서 관련 API") public ResponseEntity findAprvList(BasFlightPlanListRq rq) { ComnPagingRs result = null; try { - result = basFlightService.aprvList(rq); + result = basFlightService.aprvList(rq); // 비행계획서 리스트(승인)를 조회하는 기능 } catch (Exception e) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ log.error("IGNORE : {}", e); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body(new ErrorResponse("Server Error", "-1")); @@ -306,22 +457,42 @@ public class BasFlightController { return ResponseEntity.ok().body(new SuccessResponse<>(result)); } - // 비행계획서 승인/미승인 + /** + * 비행계획서 승인/미승인 하는 기능, + * BasFlightAprovRq에 있는 값을 토대로 승인/미승인 함. + * @param rq + * @return + */ @PutMapping(value = "/aprv/proc") @ApiOperation(value = "비행 계획서 승인/미승인") @Tag(name = "비행계획서", description = "비행계획서 관련 API") public ResponseEntity updateAprvProc(@RequestBody BasFlightAprovRq rq) { Map resultMap = new HashMap(); try { - int result = basFlightService.aprovePlan(rq); + int result = basFlightService.aprovePlan(rq); // 비행계획서 승인/미승인하는 기능. resultMap.put("result", result); } catch (CustomException e) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * CustomException은 개발자가 "의도적으로" 낸 예외처리, + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ log.error("IGNORE : {}", e); resultMap.put("result", false); resultMap.put("errorCode", e.getErrorCode()); return ResponseEntity.ok().body(new SuccessResponse(resultMap)); } catch (Exception e) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ log.error("IGNORE : {}", e); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body(new ErrorResponse("Server Error", "-1")); @@ -331,15 +502,27 @@ public class BasFlightController { } + /** + * 비행경로 체크하는 기능. + * @param rq + * @return + */ @PostMapping("/airspace/contains") @Tag(name = "비행계획서", description = "비행계획서 관련 API") public ResponseEntity checkAirspaceContains(@RequestBody List rq) { Map resultMap = new HashMap(); try { - boolean result = basFlightService.checkAirspaceContains(rq); + boolean result = basFlightService.checkAirspaceContains(rq); // 비행경로 체크하는 기능. resultMap.put("result", result); } catch (Exception e) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ log.error("IGNORE : {}", e); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body(new ErrorResponse("Server Error", "-1")); @@ -349,7 +532,12 @@ public class BasFlightController { } - //지역 검색 + /** + * 지역 검색하는 기능. + * @param query + * @return + * @throws ParseException + */ @GetMapping("/plan/area/search") @ApiOperation(value = "지역 검색") @Tag(name = "비행계획서", description = "비행계획서 관련 API") @@ -358,6 +546,7 @@ public class BasFlightController { try { text = URLEncoder.encode(query, "UTF-8"); } catch (UnsupportedEncodingException e) { + // UTF-8 포맷팅으로 인코딩 실패시 에러 던짐 throw new RuntimeException("검색어 인코딩 실패", e); } @@ -373,6 +562,12 @@ public class BasFlightController { return ResponseEntity.ok().body(new SuccessResponse<>(obj)); } + /** + * 비행계획서 스케줄 검색하는 기능, + * 검색일[searchDate] 조건으로 조회함. + * @param searchDate + * @return + */ @GetMapping("/schedule") @Tag(name = "비행계획서", description = "비행계획서 관련 API") public ResponseEntity findSchedule(@RequestParam("searchDate") String searchDate) { @@ -380,9 +575,16 @@ public class BasFlightController { try { - response = basFlightService.findSchecdule(searchDate); + response = basFlightService.findSchecdule(searchDate); // 검색날짜 조건으로 비행스케줄 조회하는 기능. } catch (Exception e) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ log.error("IGNORE : {}", e); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body(new ErrorResponse("Server Error", "-1")); 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 7fb263a..3ffa1ac 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 @@ -73,7 +73,11 @@ public class BasFlightService { private final AreaUtils areaUtils; - // 비행계획서 조회 + /** + * 비행계획서 조회하는 기능 + * @param rq + * @return + */ public ComnPagingRs listPlan(BasFlightPlanListRq rq) { List groupList = ptyPlanQueryRepository.joinList(rq.getCstmrSno()); String userAccount = null; @@ -97,8 +101,11 @@ public class BasFlightService { } else { masterAccount = "NORMAL"; } + + // 데이터베이스에서 조건에 따라 비행계획서를 조회함. PageImpl result = fltPlanQueryRepository.listPlan(rq, masterAccount, pageable); + // 데이터베이스에서 조건에 따라 비행계획서를 조회하고 그 사이즈를 가져옴. long total = fltPlanQueryRepository.listPlanCount(rq, masterAccount); long totalPage = total % rq.getRecord() > 0 ? (total / rq.getRecord()) + 1 : total / rq.getRecord(); @@ -111,7 +118,11 @@ public class BasFlightService { return response; } - // 비행계획서 상세 조회 + /** + * 비행계획서 고유번호[planSno]로 상세 조회하는 기능. + * @param planSno + * @return + */ public BasFlightPlanModel detailPlan(Integer planSno) { BasFlightPlanModel rs = new BasFlightPlanModel(); // 비행계획서 @@ -155,6 +166,10 @@ public class BasFlightService { return rs; } + /** + * 비행계획서 유효하는지 확인하는 기능. + * @param rq + */ public void planValid(BasFlightPlanModel rq) { boolean isEqualsFltElev = false; @@ -269,7 +284,11 @@ public class BasFlightService { } } - // 비행계획서 등록 + /** + * 입력받은 값으로 비행계획서 등록하는 기능. + * @param rq + * @return + */ @Transactional public boolean createPlan(BasFlightPlanModel rq) { @@ -335,7 +354,11 @@ public class BasFlightService { return true; } - // 비행계획서 수정 + /** + * 입력받은 값으로 비행계획서 수정하는 기능. + * @param rq + * @return + */ @Transactional public boolean updatePlan(BasFlightPlanModel rq) { @@ -461,7 +484,11 @@ public class BasFlightService { return true; } - // 비행계획서 삭제 + /** + * 비행계획서 고유번호[planSno]로 비행계획서 삭제하는 기능. + * @param planSno + * @return + */ @Transactional public boolean deletePlan(Integer planSno) { FltPlanBas planEntity = fltPlanBasRepository.findById(planSno).orElseThrow(); @@ -471,7 +498,11 @@ public class BasFlightService { } - // 그룹 조종사 조회 + /** + * 그룹아이디[groupId]로 그룹 조종사 조회하는 기능. + * @param groupId + * @return + */ public List listPilotByGroup(String groupId) { List pilotList = fltPlanQueryRepository.listPilot(groupId); @@ -493,7 +524,11 @@ public class BasFlightService { return pilotList; } - // 그룹 기체 조회 + /** + * 그룹아이디[groupId]로 그룹 기체 조회하는 기능. + * @param groupId + * @return + */ public List listArcrftByGroup(String groupId) { List arcrftModels = fltPlanQueryRepository.listArcrft(groupId); @@ -502,7 +537,11 @@ public class BasFlightService { return arcrftModels; } - // 비행 구역 buffer zone + /** + * 비행 구역 buffer zone 생성하는 기능. + * @param rq + * @return + */ public List getBuffer(List rq) { for (BasFlightPlanAreaModel area : rq) { @@ -523,7 +562,11 @@ public class BasFlightService { return rq; } - // 비행계획서 리스트(승인) + /** + * 비행계획서 리스트(승인)를 조회하는 기능. + * @param rq + * @return + */ public ComnPagingRs aprvList(BasFlightPlanListRq rq) { String appAuth = jwtTokenUtil.getUserAuthByToken(); @@ -544,6 +587,8 @@ public class BasFlightService { } } } + + // 유저의 권한을 확인하는 로직 if (appAuth.equals("SUPER") || appAuth.equals("ADMIN")) { masterAccount = "ADMIN"; } else if (userAccount.equals("MASTER") || userAccount.equals("LEADER")) { @@ -551,9 +596,9 @@ public class BasFlightService { } else { masterAccount = "NORMAL"; } - PageImpl result = fltPlanQueryRepository.aprvList(rq, masterAccount, pageable); + PageImpl result = fltPlanQueryRepository.aprvList(rq, masterAccount, pageable); // 승인관련된 비행계획서를 조회하는 기능. - long total = fltPlanQueryRepository.aprvCount(rq, masterAccount); + long total = fltPlanQueryRepository.aprvCount(rq, masterAccount); // 승인관련된 비행계획서의 갯수를 조회하는 기능. long totalPage = total % rq.getRecord() > 0 ? (total / rq.getRecord()) + 1 : total / rq.getRecord(); @@ -565,13 +610,22 @@ public class BasFlightService { return response; } - // 비행계획서 승인/미승인 + /** + * 비행계획서 승인/미승인하는 기능. + * @param rq + * @return + */ @Transactional public int aprovePlan(BasFlightAprovRq rq) { int cnt = fltPlanBasRepository.updateAprvlYnByPlanSnoIn(rq.getPlanSnoList(), rq.getAprvlYn()); return cnt; } + /** + * 비행경로 체크하는 기능. + * @param rq + * @return + */ public boolean checkAirspaceContains(List rq) { boolean result = false; @@ -599,7 +653,12 @@ public class BasFlightService { } - //지역 검색 + /** + * 지역 검색하는 기능 + * @param apiUrl + * @param requestHeaders + * @return + */ public String searchArea(String apiUrl, Map requestHeaders) { HttpURLConnection con = connect(apiUrl); try { @@ -649,6 +708,11 @@ public class BasFlightService { } } + /** + * 검색날짜 조건으로 비행스케줄 조회하는 기능. + * @param searchDate + * @return + */ public List findSchecdule(String searchDate) { List schedule = fltPlanQueryRepository.findSchedule(searchDate); @@ -656,8 +720,17 @@ public class BasFlightService { return schedule; } + /** + * 지역과 날씨에 대한 정보를 얻는 기능. + * @param rq + * @return + * @throws IOException + * @throws ParseException + */ public JSONObject getWeather(BasFlightWeatherModel rq) throws IOException, ParseException { - StringBuilder urlBuilder = new StringBuilder(weatherUrl); + + + StringBuilder urlBuilder = new StringBuilder(weatherUrl); // weather.api.url[application.yml 파일] 에 있는 URL로 날씨 관련 요청을 보냄 urlBuilder.append("?" + URLEncoder.encode("serviceKey", "UTF-8") + weatherKey); urlBuilder.append("&" + URLEncoder.encode("pageNo", "UTF-8") + "=" + URLEncoder.encode(rq.getPageNo(), "UTF-8")); urlBuilder.append("&" + URLEncoder.encode("numOfRows", "UTF-8") + "=" + URLEncoder.encode(rq.getNumOfRows(), "UTF-8")); /*한 페이지 결과 수*/ @@ -684,7 +757,7 @@ public class BasFlightService { sb.append(line); } - CtrTrnsLctnModel weatherResult = ctrTrnsLctnService.convertLatlonToAddress(rq.getNx2(), rq.getNy2()); + CtrTrnsLctnModel weatherResult = ctrTrnsLctnService.convertLatlonToAddress(rq.getNx2(), rq.getNy2()); // 위치에 맞는 값에 대한 주소로 변환하는 기능. log.info("weatherResult >>>> : {}", weatherResult); diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java b/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java index d5aa708..a4a7a74 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java @@ -46,7 +46,13 @@ public class FltPlanQueryRepository { private final JwtTokenUtil jwtTokenUtil; - // 비행계획서 목록 + /** + * 비행계획서 목록 조회하는 SQL 기능. + * @param rq + * @param masterAccount + * @param pageable + * @return + */ // TODO 현재 모두 조회 - 권한에 따른 조회 필요 public PageImpl listPlan(BasFlightPlanListRq rq, String masterAccount, Pageable pageable) { QFltPlanBas bas = QFltPlanBas.fltPlanBas; @@ -77,6 +83,53 @@ public class FltPlanQueryRepository { builder.and(bas.delYn.ne("Y")); + /** + * 승인값[aprvlYn] 조건인지, + * 권한이 유저일 경우 유저번호[cstmrNo] 조건인지, + * 삭제된 값[delYn] 조건인지, + * 그룹[groupId] 조건인지 확인하여 조회하는 SQL입니다. + * + * SELECT + * FPB.PLAN_SNO , + * FPB.GROUP_ID , + * FPB.CSTMR_SNO , + * FPB.MEMBER_NAME , + * FPB.EMAIL , + * FPB.HPNO , + * FPB.CLNCD , + * FPB.ADDR , + * FPB.ADDR_DTL_CN , + * FPB.ZIP , + * FPB.SCH_FLT_ST_DT , + * FPB.SCH_FLT_END_DT , + * FPB.FLT_PURPOSE , + * FPB.APRVL_YN , + * FPB.DEL_YN , + * FPB.CREATE_USER_ID , + * FPB.CREATE_DT , + * FPB.UPDATE_USER_ID , + * FPB.UPDATE_DT , + * FPB.CORP_REG_YN , + * FPB.SERVICE_TYPE , + * FPA.PLAN_AREA_SNO , + * FPA.PLAN_SNO , + * FPA.AREA_TYPE , + * FPA.FLT_METHOD , + * FPA.BUFFER_ZONE , + * FPA.FLT_ELEV , + * FPA.CREATE_USER_ID , + * FPA.CREATE_DT , + * FPA.UPDATE_USER_ID , + * FPA.UPDATE_DT + * FROM FLT_PLAN_BAS FPB + * LEFT OUTER JOIN FLT_PLAN_AREA FPA + * ON FPB.PLAN_SNO = FPA.PLAN_SNO + * WHERE FPB.GROUP_ID = #{groupId} + * AND FPB.CSTMR_SNO = #{cstmrSno} -- 유저권한[masterAccount]값이 'NORMAL'일경우, cstmrSno값이 있을 경우 + * AND FPB.APRVL_YN = #{aprvlYn} + * AND FPB.DEL_YN != 'Y' + * LIMIT #{pageSize} OFFSET #{offset} + */ List r = query .from(bas) .leftJoin(area) @@ -160,6 +213,23 @@ public class FltPlanQueryRepository { } builder.and(bas.delYn.ne("Y")); + /** + * 승인값[aprvlYn] 조건인지, + * 권한이 유저일 경우 유저번호[cstmrNo] 조건인지, + * 삭제된 값[delYn] 조건인지, + * 그룹[groupId] 조건인지 확인하여 조회하는 SQL입니다. + * + * SELECT + * COUNT(*) + * FROM FLT_PLAN_BAS FPB + * LEFT OUTER JOIN FLT_PLAN_AREA FPA + * ON FPB.PLAN_SNO = FPA.PLAN_SNO + * WHERE FPB.GROUP_ID = #{groupId} + * AND FPB.CSTMR_SNO = #{cstmrSno} -- 유저권한[masterAccount]값이 'NORMAL'일경우, cstmrSno값이 있을 경우 + * AND FPB.APRVL_YN = #{aprvlYn} + * AND FPB.DEL_YN != 'Y' + * LIMIT #{pageSize} OFFSET #{offset} + */ List r = query .from(bas) .leftJoin(area) @@ -346,7 +416,11 @@ public class FltPlanQueryRepository { return list; } - // 조종사 조회 + /** + * 그룹아이디[groupId]로 조종사 조회하는 SQL기능. + * @param groupId + * @return + */ public List listPilot(String groupId) { // QPtyCstmrBas bas = QPtyCstmrBas.ptyCstmrBas; QPtyCstmrDtl dtl = QPtyCstmrDtl.ptyCstmrDtl; @@ -356,6 +430,26 @@ public class FltPlanQueryRepository { BooleanBuilder builder = new BooleanBuilder(); builder.and(group.groupId.eq(groupId)); + /** + * 그룹 아이디[groupId]로 그룹에 있는 조종사 정보를 조회하는 SQL입니다. + * + * SELECT + * PGB.GROUP_NM , + * PCD.CSTMR_SNO , + * PCD.MEMBER_NAME , + * PCD.EMAIL , + * PCD.HPNO , + * PCD.CLNCD , + * PCD.ADDR , + * PCD.ADDR_DTL_CN , + * PCD.ZIP + * FROM PTY_CSTMR_DTL PCD + * LEFT OUTER JOIN PTY_CSTMR_GROUP PCG + * ON PCD.CSTMR_SNO = PCG.CSTMR_SNO + * LEFT OUTER JOIN PTY_GROUP_BAS PGB + * ON PCG.GROUP_ID = PGB.GROUP_ID + * WHERE PCG.GROUP_ID = #{groupId} + */ List r = query .select(Projections.bean( BasFlightPlanPilotModel.class, @@ -378,8 +472,12 @@ public class FltPlanQueryRepository { .fetch(); return r; } - - // 기체 조회 + + /** + * 그룹아이디[groupId]로 기체 조회하는 SQL기능. + * @param groupId + * @return + */ public List listArcrft(String groupId) { QComArcrftBas arcrft = QComArcrftBas.comArcrftBas; QPtyGroupBas group = QPtyGroupBas.ptyGroupBas; @@ -388,6 +486,32 @@ public class FltPlanQueryRepository { BooleanBuilder builder = new BooleanBuilder(); builder.and(group.groupId.eq(groupId)).and(idntf.idntfNum.isNotNull()); + /** + * 그룹아이디[groupId] 조건으로 기체정보를 조회하는 SQL입니다. + * + * SELECT + * CAB.ARCRFT_SNO , + * CAB.ARCRFT_MODEL_NM , + * CAB.ARCRFT_TYPE_CD , + * CAB.PRDCT_NUM , + * CAB.PRDCT_CMPN_NM , + * CAB.PRDCT_DATE , + * CAB.USE_YN , + * CAB.CREATE_USER_ID , + * PGB.GROUP_ID , + * PGB.GROUP_NM , + * PGB.GROUP_TYPE_CD , + * CIB.OWNER_NM , + * CIB.HPNO , + * CIB.IDNTF_TYPE_CD + * FROM COM_ARCRFT_BAS CAB + * LEFT OUTER JOIN PTY_GROUP_BAS PGB + * ON CAB.GROUP_ID = PGB.GROUP_ID + * LEFT OUTER JOIN COM_IDNTF_BAS CIB + * ON CAB.ARCRFT_SNO = CIB.ARCRFT_SNO + * WHERE PGB.GROUP_ID = #{groupId} + * AND CIB.IDNTF_NUM IS NOT NULL + */ List models = query.select(Projections.bean( BasFlightPlanArcrftModel.class, arcrft.arcrftSno, @@ -417,11 +541,23 @@ public class FltPlanQueryRepository { return models; } + /** + * 승인관련된 비행계획서를 조회하는 SQL기능 입니다. + * @param rq + * @param masterAccount + * @param pageable + * @return + */ public PageImpl aprvList(BasFlightPlanListRq rq, String masterAccount, Pageable pageable) { QFltPlanBas bas = QFltPlanBas.fltPlanBas; QFltPlanArea area = QFltPlanArea.fltPlanArea; BooleanBuilder builder = new BooleanBuilder(); // if (userAccount.equals("CREATER") || userAccount.equals("ADMIN")) { + + /* + 권한이 SUPER, ADMIN일시 그룹 전체 조회, + 권한이 USER 일시 자기 항목만 조회 + */ if (masterAccount != null) { if (masterAccount.equals("SPUER") || masterAccount.equals("ADMIN")) { builder.and(bas.groupId.in(rq.getGroupId())); @@ -438,6 +574,53 @@ public class FltPlanQueryRepository { } builder.and(bas.delYn.ne("Y")); + /** + * 승인값[aprvlYn] 조건인지, + * 권한이 유저일 경우 유저번호[cstmrNo] 조건인지, + * 삭제된 값[delYn] 조건인지, + * 그룹[groupId] 조건인지 확인하여 조회하는 SQL입니다. + * + * SELECT + * FPB.PLAN_SNO , + * FPB.GROUP_ID , + * FPB.CSTMR_SNO , + * FPB.MEMBER_NAME , + * FPB.EMAIL , + * FPB.HPNO , + * FPB.CLNCD , + * FPB.ADDR , + * FPB.ADDR_DTL_CN , + * FPB.ZIP , + * FPB.SCH_FLT_ST_DT , + * FPB.SCH_FLT_END_DT , + * FPB.FLT_PURPOSE , + * FPB.APRVL_YN , + * FPB.DEL_YN , + * FPB.CREATE_USER_ID , + * FPB.CREATE_DT , + * FPB.UPDATE_USER_ID , + * FPB.UPDATE_DT , + * FPB.CORP_REG_YN , + * FPB.SERVICE_TYPE , + * FPA.PLAN_AREA_SNO , + * FPA.PLAN_SNO , + * FPA.AREA_TYPE , + * FPA.FLT_METHOD , + * FPA.BUFFER_ZONE , + * FPA.FLT_ELEV , + * FPA.CREATE_USER_ID , + * FPA.CREATE_DT , + * FPA.UPDATE_USER_ID , + * FPA.UPDATE_DT + * FROM FLT_PLAN_BAS FPB + * LEFT OUTER JOIN FLT_PLAN_AREA FPA + * ON FPB.PLAN_SNO = FPA.PLAN_SNO + * WHERE FPB.GROUP_ID = #{groupId} + * AND FPB.CSTMR_SNO = #{cstmrSno} -- 유저권한[masterAccount]값이 'NORMAL'일경우, cstmrSno값이 있을 경우 + * AND FPB.APRVL_YN = #{aprvlYn} + * AND FPB.DEL_YN != 'Y' + * LIMIT #{pageSize} OFFSET #{offset} + */ List r = query .from(bas) .leftJoin(area) @@ -487,6 +670,12 @@ public class FltPlanQueryRepository { return new PageImpl<>(r, pageable, r.size()); } + /** + * 승인관련된 비행계획서의 갯수를 조회하는 SQL 기능. + * @param rq + * @param masterAccount + * @return + */ public long aprvCount(BasFlightPlanListRq rq, String masterAccount) { QFltPlanBas bas = QFltPlanBas.fltPlanBas; QFltPlanArea area = QFltPlanArea.fltPlanArea; @@ -509,6 +698,23 @@ public class FltPlanQueryRepository { } builder.and(bas.delYn.ne("Y")); + /** + * 승인값[aprvlYn] 조건인지, + * 권한이 유저일 경우 유저번호[cstmrNo] 조건인지, + * 삭제된 값[delYn] 조건인지, + * 그룹[groupId] 조건인지 확인하여 조회하는 SQL입니다. + * + * SELECT + * COUNT(*) + * FROM FLT_PLAN_BAS FPB + * LEFT OUTER JOIN FLT_PLAN_AREA FPA + * ON FPB.PLAN_SNO = FPA.PLAN_SNO + * WHERE FPB.GROUP_ID = #{groupId} + * AND FPB.CSTMR_SNO = #{cstmrSno} -- 유저권한[masterAccount]값이 'NORMAL'일경우, cstmrSno값이 있을 경우 + * AND FPB.APRVL_YN = #{aprvlYn} + * AND FPB.DEL_YN != 'Y' + * LIMIT #{pageSize} OFFSET #{offset} + */ List list = query .from(bas) .leftJoin(area) @@ -560,6 +766,12 @@ public class FltPlanQueryRepository { return cnt; } + /** + * 검색시간[searchDate] 조건으로 비행스케줄을 조회하는 SQL 기능. + * @Cacheable 해당 어노테이션으로 RQ깂 변동 없을시 이전 데이터 주는기능. + * @param searchDate + * @return + */ @Cacheable(value = "schedule") public List findSchedule(String searchDate) { QFltPlanBas fltPlanBas = QFltPlanBas.fltPlanBas; @@ -582,6 +794,54 @@ public class FltPlanQueryRepository { .and(fltPlanBas.schFltEndDt.goe(searchDateParam)) .and(fltPlanBas.aprvlYn.eq("Y")); + /** + * 검색시간[searchDate] 조건으로 비행스케줄을 조회하는 SQL입니다. + * + * SELECT + * FPB.GROUP_ID , + * ( + * SELECT + * PGB.GROUP_NM + * FROM PTY_GROUP_BAS PGB + * WHERE PGB.GROUP_ID = FPB.GROUP_ID + * ) AS 'groupNm', + * FPA.OWNER_NM , + * FPA.IDNTF_NUM , + * ( + * SELECT + * CONCAT('', CCHA.AREA2, '', CCHA.AREA3, '', CCHA.LAND_NM, '', CCHA.LAND_NUM) + * FROM CTR_CNTRL_HSTRY_AREA CCHA + * WHERE CCHA.CNTRL_ID = CCB.CNTRL_ID + * AND CCHA.ACTN_TYPE = '01' + * ) AS 'startAddress' , + * ( + * SELECT + * CONCAT('', CCHA.AREA2, '', CCHA.AREA3, '', CCHA.LAND_NM, '', CCHA.LAND_NUM) + * FROM CTR_CNTRL_HSTRY_AREA CCHA + * WHERE CCHA.CNTRL_ID = CCB.CNTRL_ID + * AND CCHA.ACTN_TYPE = '99' + * ) AS 'endAddress' , + * FPB.SCH_FLT_ST_DT , + * FPB.SCH_FLT_END_DT , + * CCB.CNTRL_ID , + * CCB.CNTRL_ST_DT , + * CCB.CNTRL_END_DT , + * CASE + * WHEN CCB.STATUS_CD = '01' THEN 'F' + * WHEN CCB.STATUS_CD = '00' THEN 'S' + * ELSE 'B' + * END AS 'statusCd' + * FROM FLT_PLAN_BAS FPB + * LEFT OUTER JOIN FLT_PLAN_ARCRFT FPA + * ON FPB.PLAN_SNO = FPA.PLAN_SNO + * LEFT OUTER JOIN CTR_CNTRL_BAS CCB + * ON FPA.IDNTF_NUM = CCB.IDNTF_NUM + * AND CCB.CNTRL_ST_DT >= FPB.SCH_FLT_ST_DT + * AND CCB.CNTRL_ST_DT <= FPB.SCH_FLT_END_DT + * WHERE FPB.SCH_FLT_ST_DT <= #{searchDate} + * AND FPB.SCH_FLT_END_DT >= #{searchDate} + * AND FPB.APRVL_YN = 'Y' + */ List querys = query.select( Projections.bean( BasFlightScheduleRs.class, diff --git a/pav-server/src/main/java/com/palnet/biz/scheduler/ctr/service/CtrTrnsLctnService.java b/pav-server/src/main/java/com/palnet/biz/scheduler/ctr/service/CtrTrnsLctnService.java index edb9690..f472ba8 100644 --- a/pav-server/src/main/java/com/palnet/biz/scheduler/ctr/service/CtrTrnsLctnService.java +++ b/pav-server/src/main/java/com/palnet/biz/scheduler/ctr/service/CtrTrnsLctnService.java @@ -34,7 +34,13 @@ public class CtrTrnsLctnService { private String NAVER_API_KEY; private Logger logger = LoggerFactory.getLogger(getClass()); - + + /** + * 위치에 맞는 값에 대한 주소로 변환하는 기능. + * @param lat + * @param lon + * @return + */ public CtrTrnsLctnModel convertLatlonToAddress(double lat , double lon) { HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(); factory.setConnectTimeout(5000); //타임아웃 설정 5초