From 427665aff1c09b280461ec7527137730f4e0580a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?lkd9125=28=EC=9D=B4=EA=B2=BD=EB=8F=84=29?= Date: Tue, 12 Dec 2023 10:51:29 +0900 Subject: [PATCH] =?UTF-8?q?comn/sunriseset=20=ED=8C=A8=ED=82=A4=EC=A7=80?= =?UTF-8?q?=20=EC=A3=BC=EC=84=9D=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ComnSunrisesetController.java | 67 ++++++++++++++- .../service/ComnSunrisesetService.java | 15 ++++ .../com/ComRiseSetQueryRepository.java | 81 +++++++++++++++++++ 3 files changed, 160 insertions(+), 3 deletions(-) diff --git a/pav-server/src/main/java/com/palnet/biz/api/comn/sunriseset/controller/ComnSunrisesetController.java b/pav-server/src/main/java/com/palnet/biz/api/comn/sunriseset/controller/ComnSunrisesetController.java index cd893a27..b18accfd 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/comn/sunriseset/controller/ComnSunrisesetController.java +++ b/pav-server/src/main/java/com/palnet/biz/api/comn/sunriseset/controller/ComnSunrisesetController.java @@ -45,6 +45,12 @@ public class ComnSunrisesetController { private final ComnSunrisesetService comnSunrisesetService; + /** + * 일출/일몰 시간대를 조회하는 기능, + * ComnSunrisesetRq에 있는 검색 시작일, 끝일의 조건에 맞춰 조회함. + * @param rq + * @return + */ @ApiOperation(value = "일출/일몰 조회", notes = "기간내 모든 일출/일몰조회") @Tag(name = "공통 API", description = "공통 API") @GetMapping("/list") @@ -52,10 +58,18 @@ public class ComnSunrisesetController { List rs = null; try { log.debug(">>> rq : {}", rq); - rs = comnSunrisesetService.getSunRiseSetList(rq); + rs = comnSunrisesetService.getSunRiseSetList(rq); // 검색조건의 맞춰 일몰,일출 시간을 조회하는 기능 // log.debug(">>> rs : {}", rs); } catch (CustomException e) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * CustomException은 개발자가 "의도적으로" 낸 예외처리, + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ Map resultMap = new HashMap(); log.error("IGNORE : ", e); resultMap.put("result", false); @@ -63,6 +77,13 @@ public class ComnSunrisesetController { 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")); @@ -71,7 +92,12 @@ public class ComnSunrisesetController { return ResponseEntity.ok().body(new SuccessResponse<>(rs)); } - + /** + * 근접한 지역의 일출/일몰 조회, + * ComnSunrisesetCoordRq 모델에 있는 시작,끝날짜 조건에 맞춰 가장 근접한 지역의 일출/일몰 조회. + * @param rq + * @return + */ @ApiOperation(value = "일출/일몰 조회(좌표)", notes = "기간내 근접한 지역의 일출/일몰 조회") @Tag(name = "공통 API", description = "공통 API") @GetMapping("/coord") @@ -79,10 +105,18 @@ public class ComnSunrisesetController { ComnSunrisesetRs rs = null; try { log.debug(">>> rq : {}", rq); - rs = comnSunrisesetService.getSunRiseSetByCoordAndDate(rq); + rs = comnSunrisesetService.getSunRiseSetByCoordAndDate(rq); // 기간내 근접한 지역의 일출/일몰 조회하는 기능 // log.debug(">>> rs : {}", rs); } catch (CustomException e) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * CustomException은 개발자가 "의도적으로" 낸 예외처리, + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ Map resultMap = new HashMap(); log.error("IGNORE : ", e); resultMap.put("result", false); @@ -90,6 +124,13 @@ public class ComnSunrisesetController { 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")); @@ -98,6 +139,11 @@ public class ComnSunrisesetController { return ResponseEntity.ok().body(new SuccessResponse<>(rs)); } + /** + * 근접한 지역의 현재~6개월치의 일출/일몰 데이터 조회하는 기능 + * @param rq + * @return + */ @ApiOperation(value = "일출/일몰 조회(좌표-6개월치)", notes = "근접한 지역의 현재~6개월치의 일출/일몰 데이터 조회") @Tag(name = "공통 API", description = "공통 API") @ApiImplicitParams(value = { @@ -113,6 +159,14 @@ public class ComnSunrisesetController { // log.debug(">>> rs : {}", rs); } catch (CustomException e) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * CustomException은 개발자가 "의도적으로" 낸 예외처리, + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ Map resultMap = new HashMap(); log.error("IGNORE : ", e); resultMap.put("result", false); @@ -120,6 +174,13 @@ public class ComnSunrisesetController { 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")); diff --git a/pav-server/src/main/java/com/palnet/biz/api/comn/sunriseset/service/ComnSunrisesetService.java b/pav-server/src/main/java/com/palnet/biz/api/comn/sunriseset/service/ComnSunrisesetService.java index 851c3707..7538e893 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/comn/sunriseset/service/ComnSunrisesetService.java +++ b/pav-server/src/main/java/com/palnet/biz/api/comn/sunriseset/service/ComnSunrisesetService.java @@ -31,16 +31,31 @@ public class ComnSunrisesetService { private final ComRiseSetQueryRepository comRiseSetQueryRepository; + /** + * 검색조건의 맞춰 일몰,일출 시간을 조회하는 기능. + * @param rq + * @return + */ public List getSunRiseSetList(ComnSunrisesetRq rq) { return comRiseSetQueryRepository.findAllBySearchTransform(rq); } + /** + * 기간내 근접한 지역의 일출/일몰 조회하는 기능. + * @param rq + * @return + */ public ComnSunrisesetRs getSunRiseSetByCoordAndDate(ComnSunrisesetCoordRq rq) { if(rq == null || !rq.hasAllData()) throw new CustomException(ErrorCode.NON_VALID_PARAMETER); return comRiseSetQueryRepository.findBySearchCoordDateTransform(rq); } + /** + * 근접한 지역의 현재~6개월치의 일출/일몰 데이터 조회하는 기능 + * @param rq + * @return + */ public List getSunRiseSetByCoord(ComnSunrisesetCoordRq rq) { if(rq == null || !rq.hasCoord()) throw new CustomException(ErrorCode.NON_VALID_PARAMETER); return comRiseSetQueryRepository.findAllBySearchCoordTransform(rq); diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/repository/com/ComRiseSetQueryRepository.java b/pav-server/src/main/java/com/palnet/biz/jpa/repository/com/ComRiseSetQueryRepository.java index 0ea03f85..c46e9541 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/repository/com/ComRiseSetQueryRepository.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/repository/com/ComRiseSetQueryRepository.java @@ -60,6 +60,11 @@ public class ComRiseSetQueryRepository { } + /** + * 검색조건의 맞춰 일몰,일출 시간을 조회하는 SQL 기능. + * @param rq + * @return + */ public List findAllBySearchTransform(ComnSunrisesetRq rq) { QComRiseSetBas bas = QComRiseSetBas.comRiseSetBas; @@ -76,6 +81,23 @@ public class ComRiseSetQueryRepository { } } + /** + * 시작일자[locStDate] 조건, + * 종료일자[locEndDate] 조건, + * 지역[location] 조건에 맞춰 조회하는 SQL 입니다. + * + * SELECT + * CRSB.LOC_DATE , + * CRSB.LOCATION , + * CRSB.SUNRISE , + * CRSB.SUNSET , + * CRSB.CIVILM , + * CRSB.CIVILE + * FROM COM_RISE_SET_BAS CRSB + * WHERE CRSB.LOC_DATE >= #{locStDate} + * AND CRSB.LOC_DATE <= #{locEndDate} + * AND CRSB.LOCATION = #{location} + */ List results = query .select(Projections.bean( ComnSunrisesetRs.class, @@ -95,12 +117,33 @@ public class ComRiseSetQueryRepository { } + /** + * 기간내 근접한 지역의 일출/일몰 조회하는 SQL 기능. + * @param rq + * @return + */ public ComnSunrisesetRs findBySearchCoordDateTransform(ComnSunrisesetCoordRq rq) { QComRiseSetBas bas = QComRiseSetBas.comRiseSetBas; BooleanBuilder builder = new BooleanBuilder(); builder.and(bas.id.locDate.goe(rq.getLocStDate())); builder.and(bas.id.locDate.loe(rq.getLocEndDate())); + /** + * 검색 시작일[locStDate] 조건, + * 검색 끝일[locEndDate] 조건, + * 위도[lat] 조건, + * 경도[lon] 조건으로 데이터베이스에서 조회하는 SQL 입니다. + * + * SELECT + * MAX(CRSB.SUNRISE) AS 'sunrise', + * MIN(CRSB.SUNSET) AS 'sunset', + * MAX(CRSB.CIVILM) AS 'civilm', + * MIN(CRSB.CIVILE) AS 'civile' + * FROM COM_RISE_SET_BAS CRSB + * WHERE CRSB.LOC_DATE >= #{locStDate} + * AND CRSB.LOC_DATE <= #{locEndDate} + * ORDER BY ST_Distance_Sphere(POINT(#{lon}, #{lat}), POINT(#{CRSB.LON}, #{CRSB.LAT})) + */ return query .select(Projections.bean( ComnSunrisesetRs.class, @@ -126,6 +169,11 @@ public class ComRiseSetQueryRepository { .fetchFirst(); } + /** + * 근접한 지역의 현재~6개월치의 일출/일몰 데이터 조회하는 SQL 기능. + * @param rq + * @return + */ public List findAllBySearchCoordTransform(ComnSunrisesetCoordRq rq) { QComRiseSetBas bas = QComRiseSetBas.comRiseSetBas; @@ -137,6 +185,20 @@ public class ComRiseSetQueryRepository { builder.and(bas.id.locDate.goe(stDateStr)); builder.and(bas.id.locDate.loe(endDateStr)); + /** + * 검색 시작일[locStDate] 조건, + * 검색 끝일[locEndDate] 조건, + * 위도[lat] 조건, + * 경도[lon] 조건으로 데이터베이스에서 조회하는 SQL 입니다. + * + * SELECT + * CRSB.LOCATION + * FROM COM_RISE_SET_BAS CRSB + * WHERE CRSB.LOC_DATE >= #{locStDate} + * AND CRSB.LOC_DATE <= #{locEndDate} + * GROUP BY CRSB.LOCATION + * ORDER BY ST_Distance_Sphere(POINT(#{lon}, #{lat}), POINT(#{CRSB.LON}, #{CRSB.LAT})) ASC + */ String location = query.select(bas.id.location) .from(bas) .where(builder) @@ -154,6 +216,25 @@ public class ComRiseSetQueryRepository { .fetchFirst(); builder.and(bas.id.location.eq(location)); + + /** + * 검색 시작일[locStDate] 조건, + * 검색 끝일[locEndDate] 조건, + * 지역[location] 조건으로 조회하는 SQL 입니다. + * + * SELECT + * CRSB.LOC_DATE , + * CRSB.LOCATION , + * CRSB.SUNRISE , + * CRSB.SUNSET , + * CRSB.CIVILM , + * CRSB.CIVILE + * FROM COM_RISE_SET_BAS CRSB + * WHERE CRSB.LOC_DATE >= #{locStDate} + * AND CRSB.LOC_DATE <= #{locEndDate} + * AND CRSB.LOCATION = #{location} + * ORDER BY CRSB.LOC_DATE ASC + */ List rs = query.select(Projections.bean( ComnSunrisesetRs.class, bas.id.locDate,