diff --git a/pav-server/src/main/java/com/palnet/biz/api/bas/dron/controller/BasDronController.java b/pav-server/src/main/java/com/palnet/biz/api/bas/dron/controller/BasDronController.java index 0e066315..ae4d2ad7 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/bas/dron/controller/BasDronController.java +++ b/pav-server/src/main/java/com/palnet/biz/api/bas/dron/controller/BasDronController.java @@ -39,7 +39,8 @@ public class BasDronController { /** - * 목록 조회 + * 드론 목록 조회기능, + * BasDronRqModel에 조회할 조건 값들이 들어있음 * @param rq * @return */ @@ -49,17 +50,25 @@ public class BasDronController { public ResponseEntity list(BasDronRqModel rq) { ComnPagingRs result = null; - //입력값 검증 + // 그룹아이디[groupId] 입력값 검증 if(StringUtils.isEmpty(rq.getGroupId())) { - return ResponseEntity.status(HttpStatus.OK) + // 검증통과하지 못할 시 서버에서 "의도적인" 에러 반환 + return ResponseEntity.status(HttpStatus.OK) // "의도적인" 에러 반환코드 .body(new ErrorResponse(RSErrorCode.ER_PARAM)); } try { - result = service.list(rq); + result = service.list(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")); @@ -71,7 +80,8 @@ public class BasDronController { /** - * 식별정보 조회 + * 식별정보 조회하는 기능, + * 기체 일련번호[arcrftSno]로 조회함. * @param rq * @return */ @@ -82,17 +92,25 @@ public class BasDronController { public ResponseEntity mylist(@PathVariable Integer id) { List result = null; - //입력값 검증 + // 기체일련번호확인[id] 입력값 검증처리 if(StringUtils.isEmpty(id)) { - return ResponseEntity.status(HttpStatus.OK) + // 검증통과하지 못할 시 서버에서 "의도적인" 에러 반환 + return ResponseEntity.status(HttpStatus.OK) // "의도적인" 에러 반환코드 .body(new ErrorResponse(RSErrorCode.ER_PARAM)); } try { - result = service.listIdntf(id); + result = service.listIdntf(id); // 기체 일련번호로 기체조회함 } 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")); @@ -104,7 +122,8 @@ public class BasDronController { /** - * 상세 조회 + * 드론 상세 조회, + * 기체일련번호[arcrftSno]로 드론 상세조회하는 기능. * @param id * @return */ @@ -116,16 +135,24 @@ public class BasDronController { BasDronModel result = null; try { - //입력값 검증 + // 기체일련번호확인[id] 입력값 검증처리 if(StringUtils.isEmpty(id)) { - return ResponseEntity.status(HttpStatus.OK) - .body(new ErrorResponse(RSErrorCode.ER_PARAM)); + // 검증통과하지 못할 시 서버에서 "의도적인" 에러 반환 + return ResponseEntity.status(HttpStatus.OK) // "의도적인" 에러 반환코드 + .body(new ErrorResponse(RSErrorCode.ER_PARAM)); } - result = service.detail(id); + result = service.detail(id); // 드론 상세 조회하는 기능. } 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")); @@ -137,7 +164,8 @@ public class BasDronController { /** - * 생성 + * 드론정보 생성하는 기능, + * BasDronModel 모델에 드론 입력정보로 드론정보 생성함. * @return */ @PostMapping(value = "/create") @@ -147,16 +175,31 @@ public class BasDronController { Map resultMap = new HashMap(); try { - boolean result = service.create(rq); + boolean result = service.create(rq); // 드론 정보 생성하는 기능. resultMap.put("result", result); }catch(CustomException e2) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * CustomException은 개발자가 "의도적으로" 낸 예외처리, + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ log.error("IGNORE : {}", e2); resultMap.put("result", false); resultMap.put("errorCode", e2.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")); @@ -167,7 +210,8 @@ public class BasDronController { } /** - * 생성 + * 식별장치 생성하는 기능, + * BasIdntfRqModel 모델에 입력받은 식별장치정보 생성함/ * @return */ @PostMapping(value = "/idntf/create") @@ -178,17 +222,32 @@ public class BasDronController { try { // boolean result = service.create(rq); - boolean result = service.createIdntf(rq); + boolean result = service.createIdntf(rq); // 식밸장치 생성하는 기능. resultMap.put("result", result); }catch(CustomException e2) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * CustomException은 개발자가 "의도적으로" 낸 예외처리, + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ log.error("IGNORE : {}", e2); resultMap.put("result", false); resultMap.put("errorCode", e2.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")); @@ -199,7 +258,8 @@ public class BasDronController { } /** - * 수정 + * 드론 정보 수정하는 기능, + * BasDronModel에 입력받은 수정할 정보를 데이터베이스에 수정함. * @return */ @PutMapping(value = "/update") @@ -209,17 +269,32 @@ public class BasDronController { Map resultMap = new HashMap(); try { - boolean result = service.update(rq); + boolean result = service.update(rq); // 드론정보 수정하는 기능. resultMap.put("result", result); } catch(CustomException e2) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * CustomException은 개발자가 "의도적으로" 낸 예외처리, + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ log.error("IGNORE : {}", e2); resultMap.put("result", false); resultMap.put("errorCode", e2.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")); @@ -230,7 +305,8 @@ public class BasDronController { } /** - * 삭제 + * 드론정보 삭제하는 기능, + * 기체일련번호[arcrftSno]로 삭제함 * @param id * @return */ @@ -277,17 +353,25 @@ public class BasDronController { try { - //입력값 검증 + // 기체일련번호확인[id] 입력값 검증처리 if(StringUtils.isEmpty(id)) { - return ResponseEntity.status(HttpStatus.OK) - .body(new ErrorResponse(RSErrorCode.ER_PARAM)); - } - - boolean result = service.deleteIdntf(id); + // 검증통과하지 못할 시 서버에서 "의도적인" 에러 반환 + return ResponseEntity.status(HttpStatus.OK) // "의도적인" 에러 반환코드 + .body(new ErrorResponse(RSErrorCode.ER_PARAM)); + } + + boolean result = service.deleteIdntf(id); // 드론정보 삭제하는 기능. 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")); diff --git a/pav-server/src/main/java/com/palnet/biz/api/bas/dron/service/BasDronService.java b/pav-server/src/main/java/com/palnet/biz/api/bas/dron/service/BasDronService.java index b2f81aef..5be94c80 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/bas/dron/service/BasDronService.java +++ b/pav-server/src/main/java/com/palnet/biz/api/bas/dron/service/BasDronService.java @@ -48,7 +48,7 @@ public class BasDronService { private JwtTokenUtil jwtTokenUtil; /** - * 드론 목록 + * 드론 목록을 조회하는 기능 * @param rq * @return */ @@ -56,10 +56,13 @@ public class BasDronService { ComnPagingRs response = new ComnPagingRs<>(); + // 페이징 처리를 위한 객체 Pageable pageable = PageRequest.of(rq.getPage()-1, rq.getRecord()); + // 데이터 베이스에서 검색조건에 맞는 값으로 드론목록 조회함. PageImpl result = query.list(rq, pageable); - + + // 데이터 베이스에서 전체 리스트 값이 몇인지 조회. long total = query.listCount(rq); long totalPage = total % rq.getRecord() > 0 ? (total/rq.getRecord()) + 1 : total/rq.getRecord(); @@ -92,7 +95,7 @@ public class BasDronService { } /** - * 상세 조회 + * 드론 상세 조회하는 기능. * @param arcrftSno * @return * @throws Exception @@ -110,7 +113,7 @@ public class BasDronService { } /** - * 생성 + * 드론 정보 생성하는 기능. * @param * @return * @throws Exception @@ -168,7 +171,7 @@ public class BasDronService { } /** - * 식밸장치 생성 + * 식밸장치 생성하는 기능. * @param * @return * @throws Exception @@ -206,6 +209,11 @@ public class BasDronService { } + /** + * 드론정보 삭제하는 기능. + * @param idntfNum + * @return + */ public boolean deleteIdntf(String idntfNum) { Optional optional = comIdntBasRepository.findById(idntfNum); @@ -218,7 +226,13 @@ public class BasDronService { return true; } - + + /** + * 입력받은 드론정보 데이터베이스에 생성함. + * @param model + * @return + * @throws Exception + */ public ComArcrftBas insertComArcrftBas(BasDronModel model) throws Exception{ @@ -261,7 +275,7 @@ public class BasDronService { /** - * 수정 + * 드론정보 수정하는 기능. * @param * @return * @throws Exception @@ -319,7 +333,13 @@ public class BasDronService { return true; } - + + /** + * 입력받은 드론 수정정보로 데이터베이스에 수정함. + * @param model + * @return + * @throws Exception + */ public ComArcrftBas updateComArcrftBas(BasDronModel model) throws Exception{ 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 5f0d0d17..5eb80a94 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 7fb263a2..3ffa1ac1 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 d5aa708c..a4a7a741 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/jpa/repository/pty/PtyDronQueryRepository.java b/pav-server/src/main/java/com/palnet/biz/jpa/repository/pty/PtyDronQueryRepository.java index 2e38fdee..de494b49 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/repository/pty/PtyDronQueryRepository.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/repository/pty/PtyDronQueryRepository.java @@ -31,7 +31,7 @@ public class PtyDronQueryRepository{ private final JPAQueryFactory query; /** - * 목록 조회 + * 드론 목록 조회하는 SQL기능. * @param rq * @return */ @@ -55,8 +55,39 @@ public class PtyDronQueryRepository{ builder.and(bas.arcrftTypeCd.eq(rq.getArcrftTypeCd())); } - builder.and(bas.useYn.eq("Y")); + builder.and(bas.useYn.eq("Y")); // 사용여부값 + /** + * 기체이름 값[arcrftModelNm] 조건인지, + * 그룹아이디 값 [groupId] 조건인지, + * 기체타입 값 [arcrftTypeCd] 조건인지, + * 사용여부 값 [useYn] 이 "Y" 인지 조건으로 데이터베이스에서 조회하는 SQL입니다. + * SELECT + * CAB.GROUP_ID , + * CAB.ARCRFT_SNO , + * CAB.ARCRFT_HGHT , + * CAB.ARCRFT_LNGTH , + * CAB.ARCRFT_MODEL_NM , + * CAB.ARCRFT_TYPE_CD , + * CAB.ARCRFT_WDTH , + * CAB.ARCRFT_WGHT , + * CAB.CAMERA_YN , + * CAB.CREATE_DT , + * CAB.CREATE_USER_ID , + * CAB.INSRNC_YN , + * CAB.PRDCT_CMPN_NM , + * CAB.PRDCT_DATE , + * CAB.PRDCT_NUM , + * CAB.TAKEOFF_WGHT , + * CAB.UPDATE_DT , + * CAB.UPDATE_USER_ID , + * CAB.WGHT_TYPE_CD + * FROM COM_ARCRFT_BAS CAB + * WHERE CAB.USE_YN = 'Y' + * AND CAB.ARCRFT_MODEL_NM = #{arcrftModelNm} -- 조건에 있을경우 + * AND CAB.GROUP_ID = #{groupId} -- 조건에 있을경우 + * AND CAB.ARCRFT_TYPE_CD = #{arcrftTypeCd} -- 조건에 있을경우 + */ List result = query.select(Projections.bean(BasDronModel.class , bas.groupId, @@ -97,7 +128,13 @@ public class PtyDronQueryRepository{ return new PageImpl<>(result, pageable, result.size()); } - public long listCount(BasDronRqModel rq){ + + /** + * 검색조건에 맞춘 드론목록의 사이즈가 몇인지 조회하는 SQL기능 + * @param rq + * @return + */ + public long listCount(BasDronRqModel rq){ QComArcrftBas bas = QComArcrftBas.comArcrftBas; QComIdntfBas idnt = QComIdntfBas.comIdntfBas; @@ -119,6 +156,19 @@ public class PtyDronQueryRepository{ builder.and(bas.useYn.eq("Y")); + /** + * 기체이름 값[arcrftModelNm] 조건인지, + * 그룹아이디 값 [groupId] 조건인지, + * 기체타입 값 [arcrftTypeCd] 조건인지, + * 사용여부 값 [useYn] 이 "Y" 인지 조건으로 데이터베이스에서 조회하는 SQL입니다. + * SELECT + * count(*) + * FROM COM_ARCRFT_BAS CAB + * WHERE CAB.USE_YN = 'Y' + * AND CAB.ARCRFT_MODEL_NM = #{arcrftModelNm} -- 조건에 있을경우 + * AND CAB.GROUP_ID = #{groupId} -- 조건에 있을경우 + * AND CAB.ARCRFT_TYPE_CD = #{arcrftTypeCd} -- 조건에 있을경우 + */ List result = query.select(Projections.bean(BasDronModel.class , bas.groupId, @@ -161,7 +211,7 @@ public class PtyDronQueryRepository{ return cnt; } /** - * 식별번호 조회 + * 식별번호 조회하는 SQL기능. * @param arcrftSno * @return */ @@ -174,7 +224,25 @@ public class PtyDronQueryRepository{ BooleanBuilder builder = new BooleanBuilder(); builder.and(idnt.arcrftSno.eq(arcrftSno)); - + /** + * 기체일련번호[arcrftSno] 조건으로 조회하는 SQL기능입니다. + * + * SELECT + * CIB.ARCRFT_SNO , + * CIB.IDNTF_NUM , + * CIB.IDNTF_TYPE_CD , + * CIB.CREATE_DT , + * CIB.UPDATE_DT , + * CIB.OWNER_NM , + * CIB.HPNO , + * CIB.CSTMR_SNO , + * CAB.GROUP_ID + * FROM COM_IDNTF_BAS CIB + * LEFT OUTER JOIN COM_ARCRFT_BAS CAB + * ON CIB.ARCRFT_SNO = CAB.ARCRFT_SNO + * WHERE CIB.ARCRFT_SNO = #{arcrftSno} + * ORDER BY CIB.CREATE_DT ASC + */ List result = query.select(Projections.bean(BasIdntfModel.class , @@ -200,7 +268,7 @@ public class PtyDronQueryRepository{ /** - * 상세 조회 + * 드론 상세 조회하는 SQL기능. * @param arcrftSno * @return */ @@ -208,6 +276,33 @@ public class PtyDronQueryRepository{ QComArcrftBas bas = QComArcrftBas.comArcrftBas; + /** + * 기체일련번호[arcrftSno] 조건으로 드론 상세조회하는 SQL입니다. + * + * SELECT + * CAB.GROUP_ID , + * CAB.ARCRFT_SNO , + * CAB.ARCRFT_HGHT , + * CAB.ARCRFT_LNGTH , + * CAB.ARCRFT_MODEL_NM , + * CAB.ARCRFT_TYPE_CD , + * CAB.ARCRFT_WDTH , + * CAB.ARCRFT_WGHT , + * CAB.CAMERA_YN , + * CAB.CREATE_DT , + * CAB.CREATE_USER_ID , + * CAB.INSRNC_YN , + * CAB.PRDCT_CMPN_NM , + * CAB.PRDCT_DATE , + * CAB.PRDCT_NUM , + * CAB.TAKEOFF_WGHT , + * CAB.UPDATE_DT , + * CAB.UPDATE_USER_ID , + * CAB.WGHT_TYPE_CD , + * CAB.IMAGE_URL + * FROM COM_ARCRFT_BAS CAB + * WHERE CAB.ARCRFT_SNO = #{arcrftSno} + */ BasDronModel result = query.select(Projections.bean(BasDronModel.class , bas.groupId, 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 edb96907..f472ba89 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초