diff --git a/data/com/src/main/java/kr/co/palnet/kac/data/com/domain/ComRiseSetBas.java b/data/com/src/main/java/kr/co/palnet/kac/data/com/domain/ComRiseSetBas.java index ae16947..cbcfc82 100644 --- a/data/com/src/main/java/kr/co/palnet/kac/data/com/domain/ComRiseSetBas.java +++ b/data/com/src/main/java/kr/co/palnet/kac/data/com/domain/ComRiseSetBas.java @@ -5,8 +5,6 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import org.hibernate.annotations.CreationTimestamp; -import org.hibernate.annotations.UpdateTimestamp; import java.io.Serializable; import java.time.Instant; @@ -30,7 +28,6 @@ public class ComRiseSetBas { private String locDate; // 지역 private String location; - } diff --git a/data/com/src/main/java/kr/co/palnet/kac/data/com/repository/ComRiseSetBasRepository.java b/data/com/src/main/java/kr/co/palnet/kac/data/com/repository/ComRiseSetBasRepository.java index c1c359d..059640b 100644 --- a/data/com/src/main/java/kr/co/palnet/kac/data/com/repository/ComRiseSetBasRepository.java +++ b/data/com/src/main/java/kr/co/palnet/kac/data/com/repository/ComRiseSetBasRepository.java @@ -2,7 +2,17 @@ package kr.co.palnet.kac.data.com.repository; import kr.co.palnet.kac.data.com.domain.ComRiseSetBas; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +import java.util.List; public interface ComRiseSetBasRepository extends JpaRepository { + @Query(value = "SELECT * FROM COM_RISE_SET_BAS WHERE LOC_DATE >= :locStDate", nativeQuery = true) + List findByLocStDate(@Param("locStDate") String locStDate); + + @Query(value = "SELECT R FROM COM_RISE_SET_BAS R WHERE LOC_DATE >= :locStDate AND LOC_DATE <= :locEndDate", nativeQuery = true) + List findByLocStDateAndLocEndDate(@Param("locStDate") String locStDate, @Param("locEndDate") String locEndDate); + } diff --git a/data/com/src/main/java/kr/co/palnet/kac/data/com/repository/ComRiseSetQueryRepository.java b/data/com/src/main/java/kr/co/palnet/kac/data/com/repository/ComRiseSetQueryRepository.java new file mode 100644 index 0000000..df2323e --- /dev/null +++ b/data/com/src/main/java/kr/co/palnet/kac/data/com/repository/ComRiseSetQueryRepository.java @@ -0,0 +1,249 @@ +package kr.co.palnet.kac.data.com.repository; + + +import com.querydsl.core.BooleanBuilder; +import com.querydsl.core.types.Projections; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.jpa.impl.JPAQueryFactory; +import kr.co.palnet.kac.data.com.domain.ComRiseSetBas; +import kr.co.palnet.kac.data.com.domain.QComRiseSetBas; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Repository; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.List; + +/** + * packageName : com.palnet.biz.jpa.repository.com + * fileName : ComRiseSetQueryRepository + * author : dhji + * date : 2023-10-15(015) + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2023-10-15(015) dhji 최초 생성 + */ +@Slf4j +@Repository +@RequiredArgsConstructor +public class ComRiseSetQueryRepository { + private final JPAQueryFactory query; + + public List findAllBySearch(String location, String locStDate, String locEndDate) { + QComRiseSetBas bas = QComRiseSetBas.comRiseSetBas; + + BooleanBuilder builder = new BooleanBuilder(); + + if (locStDate != null) { + builder.and(bas.locDate.goe(locStDate)); + } + if (locEndDate != null) { + builder.and(bas.locDate.loe(locEndDate)); + } + if (location != null) { + builder.and(bas.location.eq(location)); + } + + List results = query.select(bas) + .from(bas) + .where(builder) + .orderBy(bas.locDate.asc()) + .fetch(); + + return results; + + } + + /** + * 검색조건의 맞춰 일몰,일출 시간을 조회하는 SQL 기능. + * @param rq + * @return + */ + public List findAllBySearchTransform(String location, String locStDate, String locEndDate) { + QComRiseSetBas bas = QComRiseSetBas.comRiseSetBas; + + BooleanBuilder builder = new BooleanBuilder(); + + if (locStDate != null) { + builder.and(bas.locDate.goe(locStDate)); + } + if (locEndDate != null) { + builder.and(bas.locDate.loe(locEndDate)); + } + if (location != null) { + builder.and(bas.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} + */ + List results = query + .select(Projections.bean( + ComRiseSetBas.class, + bas.locDate, + bas.location, + bas.sunrise, + bas.sunset, + bas.civilm, + bas.civile + )) + .from(bas) + .where(builder) + .orderBy(bas.locDate.asc()) + .fetch(); + + return results; + + } + + /** + * 기간내 근접한 지역의 일출/일몰 조회하는 SQL 기능. + * @param rq + * @return + */ + public ComRiseSetBas findBySearchCoordDateTransform(ComRiseSetBas rq, String locStDate, String locEndDate) { + QComRiseSetBas bas = QComRiseSetBas.comRiseSetBas; + BooleanBuilder builder = new BooleanBuilder(); + builder.and(bas.locDate.goe(locStDate)); + builder.and(bas.locDate.loe(locEndDate)); + + /** + * 검색 시작일[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( + ComRiseSetBas.class, + bas.location, + bas.sunrise.max().as("sunrise"), + bas.sunset.min().as("sunset"), + bas.civilm.max().as("civilm"), + bas.civile.min().as("civile") + )) + .from(bas) + .where(builder) + .groupBy(bas.location) + .orderBy(Expressions.stringTemplate("ST_Distance_Sphere({0}, {1})", + Expressions.stringTemplate("POINT({0}, {1})", + rq.getLon(), + rq.getLat() + ), + Expressions.stringTemplate("POINT({0}, {1})", + bas.lon, + bas.lat + ) + ).asc()) + .fetchFirst(); + } + + /** + * 근접한 지역의 현재~6개월치의 일출/일몰 데이터 조회하는 SQL 기능. + * @param rq + * @return + */ + public List findAllBySearchCoordTransform(ComRiseSetBas rq) { + QComRiseSetBas bas = QComRiseSetBas.comRiseSetBas; + + BooleanBuilder builder = new BooleanBuilder(); + LocalDate stDate = LocalDate.now(); + LocalDate endDate = stDate.plusMonths(6); + String stDateStr = stDate.format(DateTimeFormatter.ofPattern("yyyyMMdd")); + String endDateStr = endDate.format(DateTimeFormatter.ofPattern("yyyyMMdd")); + builder.and(bas.locDate.goe(stDateStr)); + builder.and(bas.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.location) + .from(bas) + .where(builder) + .groupBy(bas.location) + .orderBy(Expressions.stringTemplate("ST_Distance_Sphere({0}, {1})", + Expressions.stringTemplate("POINT({0}, {1})", + rq.getLon(), + rq.getLat() + ), + Expressions.stringTemplate("POINT({0}, {1})", + bas.lon, + bas.lat + ) + ).asc()) + .fetchFirst(); + + builder.and(bas.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( + ComRiseSetBas.class, + bas.locDate, + bas.location, + bas.sunrise, + bas.sunset, + bas.civilm, + bas.civile)) + .from(bas) + .where(builder) + .orderBy(bas.locDate.asc()) + .fetch(); + return rs; + } +} diff --git a/data/com/src/main/java/kr/co/palnet/kac/data/com/service/ComSunrisesetDomainService.java b/data/com/src/main/java/kr/co/palnet/kac/data/com/service/ComSunrisesetDomainService.java new file mode 100644 index 0000000..8436464 --- /dev/null +++ b/data/com/src/main/java/kr/co/palnet/kac/data/com/service/ComSunrisesetDomainService.java @@ -0,0 +1,48 @@ +package kr.co.palnet.kac.data.com.service; + +import kr.co.palnet.kac.data.com.domain.ComRiseSetBas; +import kr.co.palnet.kac.data.com.repository.ComRiseSetQueryRepository; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Slf4j +@RequiredArgsConstructor +@Service +public class ComSunrisesetDomainService { + + + private final ComRiseSetQueryRepository comRiseSetQueryRepository; + + /** + * 검색조건의 맞춰 일몰,일출 시간을 조회하는 기능. + * @param rq + * @return + */ + public List getSunRiseSetList(String location, String locStDate, String locEndDate) { + return comRiseSetQueryRepository.findAllBySearchTransform(location, locStDate, locEndDate); + + } + + /** + * 기간내 근접한 지역의 일출/일몰 조회하는 기능. + * @param rq + * @return + */ + public ComRiseSetBas getSunRiseSetByCoordAndDate(ComRiseSetBas rq, String locStDate, String locEndDate) { + if(rq == null) throw new RuntimeException("파라미터가 유효하지 않습니다."); + return comRiseSetQueryRepository.findBySearchCoordDateTransform(rq, locStDate, locEndDate); + } + + /** + * 근접한 지역의 현재~6개월치의 일출/일몰 데이터 조회하는 기능 + * @param rq + * @return + */ + public List getSunRiseSetByCoord(ComRiseSetBas rq) { + if(rq == null) throw new RuntimeException("파라미터가 유효하지 않습니다."); + return comRiseSetQueryRepository.findAllBySearchCoordTransform(rq); + } +} diff --git a/docker-compose.yml b/docker-compose.yml index 546121d..3fb1e6f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,6 +11,7 @@ services: - MYSQL_PASSWORD=palnet!234 ports: - 13306:3306 + command: ["--sql-mode=NO_ENGINE_SUBSTITUTION"] volumes: - ./db/data:/var/lib/mysql # restart: always diff --git a/web/api-common/src/main/java/kr/co/palnet/kac/api/v1/common/sunriseset/controller/ComSunrisesetController.java b/web/api-common/src/main/java/kr/co/palnet/kac/api/v1/common/sunriseset/controller/ComSunrisesetController.java new file mode 100644 index 0000000..1711aa1 --- /dev/null +++ b/web/api-common/src/main/java/kr/co/palnet/kac/api/v1/common/sunriseset/controller/ComSunrisesetController.java @@ -0,0 +1,181 @@ +package kr.co.palnet.kac.api.v1.common.sunriseset.controller; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import kr.co.palnet.kac.api.v1.common.sunriseset.model.ComSunrisesetCoordRQ; +import kr.co.palnet.kac.api.v1.common.sunriseset.model.ComSunrisesetRQ; +import kr.co.palnet.kac.api.v1.common.sunriseset.model.ComSunrisesetRS; +import kr.co.palnet.kac.api.v1.common.sunriseset.service.ComSunrisesetService; +import kr.co.palnet.kac.core.exception.BaseException; +import kr.co.palnet.kac.core.response.BasicResponse; +import kr.co.palnet.kac.core.response.ErrorResponse; +import kr.co.palnet.kac.core.response.SuccessResponse; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * packageName : com.palnet.biz.api.comn.sunriseset.controller + * fileName : ComnSunrisesetController + * author : dhji + * date : 2023-10-15(015) + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2023-10-15(015) dhji 최초 생성 + */ +@Slf4j +@Tag(name = "공통 API", description = "공통 API") +@RequiredArgsConstructor +@RequestMapping("/v1/com/sunriseset") +@RestController +public class ComSunrisesetController { + + private final ComSunrisesetService comSunrisesetService; + + /** + * 일출/일몰 시간대를 조회하는 기능, + * ComnSunrisesetRq에 있는 검색 시작일, 끝일의 조건에 맞춰 조회함. + * @param rq + * @return + */ + @GetMapping("/list") + @Operation(summary = "일출/일몰 조회", description = "기간 내 모든 일출과 일몰시간을 조회하는 API 입니다.") + public ResponseEntity getSunRiseSetList(ComSunrisesetRQ rq) { + List rs = null; + try { + log.debug(">>> rq : {}", rq); + rs = comSunrisesetService.getSunRiseSetList(rq); // 검색조건의 맞춰 일몰,일출 시간을 조회하는 기능 +// log.debug(">>> rs : {}", rs); + + } catch (BaseException e) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * CustomException은 개발자가 "의도적으로" 낸 예외처리, + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ + 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) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ + log.error("IGNORE : ", e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(new ErrorResponse("Server Error", "-1")); + + } + return ResponseEntity.ok().body(new SuccessResponse<>(rs)); + } + + /** + * 근접한 지역의 일출/일몰 조회, + * ComnSunrisesetCoordRq 모델에 있는 시작,끝날짜 조건에 맞춰 가장 근접한 지역의 일출/일몰 조회. + * @param rq + * @return + */ + @GetMapping("/coord") + @Operation(summary = "일출/일몰 조회(좌표)", description = "기간 내 좌표와 근접한 지역의 일출과 일몰시간을 1건 조회하는 API 입니다.") + public ResponseEntity getSunRiseSetByCoordAndDate(ComSunrisesetCoordRQ rq) { + ComSunrisesetRS rs = null; + try { + log.debug(">>> rq : {}", rq); + rs = comSunrisesetService.getSunRiseSetByCoordAndDate(rq); // 기간내 근접한 지역의 일출/일몰 조회하는 기능 +// log.debug(">>> rs : {}", rs); + + } catch (BaseException e) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * CustomException은 개발자가 "의도적으로" 낸 예외처리, + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ + 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) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ + log.error("IGNORE : ", e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(new ErrorResponse("Server Error", "-1")); + + } + return ResponseEntity.ok().body(new SuccessResponse<>(rs)); + } + + /** + * 근접한 지역의 현재~6개월치의 일출/일몰 데이터 조회하는 기능 + * @param rq + * @return + */ + @GetMapping("/coord/list") + @Operation(summary = "일출/일몰 조회(좌표 - 6개월치)", description = "기간 내 근접 지역에서 현재부터 6개월치 일출과 일몰시간을 조회하는 API 입니다.") + public ResponseEntity getSunRiseSetByCoord(ComSunrisesetCoordRQ rq) { + List rs = null; + try { + log.debug(">>> rq : {}", rq); + rs = comSunrisesetService.getSunRiseSetByCoord(rq); +// log.debug(">>> rs : {}", rs); + + } catch (BaseException e) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * CustomException은 개발자가 "의도적으로" 낸 예외처리, + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ + 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) { + /** + * try{ + ... + } + * try 영역 안 코드들중 문제가 생기면 오는 곳. + * log.error 로그로 원인 파악과 함께 API를 호출한 곳에 서버에러 내려줌 + */ + log.error("IGNORE : ", e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(new ErrorResponse("Server Error", "-1")); + + } + return ResponseEntity.ok().body(new SuccessResponse<>(rs)); + } +} diff --git a/web/api-common/src/main/java/kr/co/palnet/kac/api/v1/common/sunriseset/model/ComSunrisesetCoordRQ.java b/web/api-common/src/main/java/kr/co/palnet/kac/api/v1/common/sunriseset/model/ComSunrisesetCoordRQ.java new file mode 100644 index 0000000..395314a --- /dev/null +++ b/web/api-common/src/main/java/kr/co/palnet/kac/api/v1/common/sunriseset/model/ComSunrisesetCoordRQ.java @@ -0,0 +1,56 @@ +package kr.co.palnet.kac.api.v1.common.sunriseset.model; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.v3.oas.annotations.media.Schema; +import kr.co.palnet.kac.data.com.domain.ComRiseSetBas; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * packageName : com.palnet.biz.api.comn.sunriseset.model + * fileName : ComnSunrisesetCoordRq + * author : dhji + * date : 2023-10-15(015) + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2023-10-15(015) dhji 최초 생성 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class ComSunrisesetCoordRQ { + + @Schema(description = "시작일자", example = "20231101") + private String locStDate; + + @Schema(description = "종료일자", example = "20231231") + private String locEndDate; + + @Schema(description = "위도", example = "37.520987") + private Double lat; + + @Schema(description = "경도", example = "126.610646") + private Double lon; + + @JsonIgnore + public boolean hasAllData() { + return (locStDate != null && !locStDate.isEmpty()) && (locEndDate != null && !locEndDate.isEmpty()) && lat != null && lon != null; + } + + @JsonIgnore + public boolean hasCoord() { + return lat != null && lon != null; + } + + public ComRiseSetBas toEntity(){ + return ComRiseSetBas.builder() + .lat(lat) + .lon(lon) + .build(); + } +} diff --git a/web/api-common/src/main/java/kr/co/palnet/kac/api/v1/common/sunriseset/model/ComSunrisesetRQ.java b/web/api-common/src/main/java/kr/co/palnet/kac/api/v1/common/sunriseset/model/ComSunrisesetRQ.java new file mode 100644 index 0000000..409b2e7 --- /dev/null +++ b/web/api-common/src/main/java/kr/co/palnet/kac/api/v1/common/sunriseset/model/ComSunrisesetRQ.java @@ -0,0 +1,35 @@ +package kr.co.palnet.kac.api.v1.common.sunriseset.model; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * packageName : com.palnet.biz.api.comn.sunriseset.model + * fileName : ComnSunrisesetRq + * author : dhji + * date : 2023-10-15(015) + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2023-10-15(015) dhji 최초 생성 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class ComSunrisesetRQ { + + @Schema(description = "시작일자", example = "20231101", implementation = String.class) + private String locStDate; + + @Schema(description = "종료일자", example = "20231231", implementation = String.class) + private String locEndDate; + + @Schema(description = "지역", example = "김포") + private String location; + +} diff --git a/web/api-common/src/main/java/kr/co/palnet/kac/api/v1/common/sunriseset/model/ComSunrisesetRS.java b/web/api-common/src/main/java/kr/co/palnet/kac/api/v1/common/sunriseset/model/ComSunrisesetRS.java new file mode 100644 index 0000000..046e201 --- /dev/null +++ b/web/api-common/src/main/java/kr/co/palnet/kac/api/v1/common/sunriseset/model/ComSunrisesetRS.java @@ -0,0 +1,49 @@ +package kr.co.palnet.kac.api.v1.common.sunriseset.model; + +import io.swagger.v3.oas.annotations.media.Schema; +import kr.co.palnet.kac.data.com.domain.ComRiseSetBas; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * packageName : com.palnet.biz.api.comn.sunriseset.model + * fileName : ComnSunrisesetRs + * author : dhji + * date : 2023-10-15(015) + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2023-10-15(015) dhji 최초 생성 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class ComSunrisesetRS { + @Schema(description = "일자", example = "20231212") + private String locDate; + @Schema(description = "지역", example = "김포") + private String location; + @Schema(description = "일출", example = "071000") + private String sunrise; // 일출 + @Schema(description = "일몰", example = "183000") + private String sunset; // 일몰 + @Schema(description = "시민박명(아침)", example = "071000") + private String civilm; // 시민박명(아침) + @Schema(description = "시민박명(저녁)", example = "183000") + private String civile; // 시민박명(저녁) + + public static ComSunrisesetRS toRS(ComRiseSetBas comRiseSetBas){ + return ComSunrisesetRS.builder() + .locDate(comRiseSetBas.getLocDate()) + .location(comRiseSetBas.getLocation()) + .sunrise(comRiseSetBas.getSunrise()) + .sunset(comRiseSetBas.getSunset()) + .civilm(comRiseSetBas.getCivilm()) + .civile(comRiseSetBas.getCivile()) + .build(); + } +} diff --git a/web/api-common/src/main/java/kr/co/palnet/kac/api/v1/common/sunriseset/service/ComSunrisesetService.java b/web/api-common/src/main/java/kr/co/palnet/kac/api/v1/common/sunriseset/service/ComSunrisesetService.java new file mode 100644 index 0000000..707c896 --- /dev/null +++ b/web/api-common/src/main/java/kr/co/palnet/kac/api/v1/common/sunriseset/service/ComSunrisesetService.java @@ -0,0 +1,72 @@ +package kr.co.palnet.kac.api.v1.common.sunriseset.service; + +import kr.co.palnet.kac.api.v1.common.sunriseset.model.ComSunrisesetCoordRQ; +import kr.co.palnet.kac.api.v1.common.sunriseset.model.ComSunrisesetRQ; +import kr.co.palnet.kac.api.v1.common.sunriseset.model.ComSunrisesetRS; +import kr.co.palnet.kac.core.exception.BaseErrorCode; +import kr.co.palnet.kac.core.exception.BaseException; +import kr.co.palnet.kac.data.com.domain.ComRiseSetBas; +import kr.co.palnet.kac.data.com.service.ComSunrisesetDomainService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * packageName : com.palnet.biz.api.comn.sunriseset.service + * fileName : comnSunrisesetService + * author : dhji + * date : 2023-10-15(015) + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2023-10-15(015) dhji 최초 생성 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class ComSunrisesetService { + + + private final ComSunrisesetDomainService comSunrisesetDomainService; + + /** + * 검색조건의 맞춰 일몰,일출 시간을 조회하는 기능. + * @param rq + * @return + */ + public List getSunRiseSetList(ComSunrisesetRQ rq) { + List result = comSunrisesetDomainService.getSunRiseSetList(rq.getLocation(), rq.getLocStDate(), rq.getLocEndDate()); + + return result.stream().map(ComSunrisesetRS::toRS).toList(); + + } + + /** + * 기간내 근접한 지역의 일출/일몰 조회하는 기능. + * @param rq + * @return + */ + public ComSunrisesetRS getSunRiseSetByCoordAndDate(ComSunrisesetCoordRQ rq) { + if(rq == null || !rq.hasAllData()) throw new BaseException(BaseErrorCode.WEB_PARAM_INVALID); + + ComRiseSetBas result = comSunrisesetDomainService.getSunRiseSetByCoordAndDate(rq.toEntity(), rq.getLocStDate(), rq.getLocEndDate()); + + return ComSunrisesetRS.toRS(result); + } + + /** + * 근접한 지역의 현재~6개월치의 일출/일몰 데이터 조회하는 기능 + * @param rq + * @return + */ + public List getSunRiseSetByCoord(ComSunrisesetCoordRQ rq) { + if(rq == null || !rq.hasCoord()) throw new BaseException(BaseErrorCode.WEB_PARAM_INVALID); + + List result = comSunrisesetDomainService.getSunRiseSetByCoord(rq.toEntity()); + + return result.stream().map(ComSunrisesetRS::toRS).toList(); + } +}