From ff2fa08919037cd8e51c9029d02261e1042808f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?lkd9125=28=EC=9D=B4=EA=B2=BD=EB=8F=84=29?= Date: Thu, 18 Jan 2024 16:21:06 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=A2=8C=ED=91=9C=EB=A1=9C=20=EC=9D=BC?= =?UTF-8?q?=EC=B6=9C=EC=9D=BC=EB=AA=B0=20List=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?=EC=8B=9C=20=EC=97=86=EB=8A=94=20=ED=95=B4=EB=8B=B9=20=EB=82=A0?= =?UTF-8?q?=EC=A7=9C=EC=97=90=20=EC=97=86=EB=8A=94=20=EB=8F=84=EC=8B=9C?= =?UTF-8?q?=EB=8A=94=20=EA=B0=80=EC=9E=A5=20=EA=B0=80=EA=B9=8C=EC=9A=B4?= =?UTF-8?q?=EB=8F=84=EC=8B=9C=20=EC=B6=94=EC=A0=81=ED=95=98=EC=97=AC=20?= =?UTF-8?q?=EB=8C=80=EC=8B=A0=20=EC=A1=B0=ED=9A=8C=ED=95=98=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EB=B3=80=EA=B2=BD.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/ComnSunrisesetService.java | 16 ++++++++++- .../com/ComRiseSetBasRepository.java | 27 ++++++++++++++++++ .../com/ComRiseSetQueryRepository.java | 28 +++++++++++++++++++ 3 files changed, 70 insertions(+), 1 deletion(-) 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 8263554c..759d9a20 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 @@ -12,6 +12,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.List; /** @@ -62,6 +64,18 @@ public class ComnSunrisesetService { */ public List getSunRiseSetByCoord(ComnSunrisesetCoordRq rq) { if(rq == null || !rq.hasCoord()) throw new CustomException(ErrorCode.NON_VALID_PARAMETER); - return comRiseSetQueryRepository.findAllBySearchCoordTransform(rq); + + LocalDate stDate = LocalDate.now(); + LocalDate endDate = stDate.plusMonths(6); + + String location = comRiseSetQueryRepository.findLocationByGeo(rq); + String stDateStr = stDate.format(DateTimeFormatter.ofPattern("yyyyMMdd")); + String endDateStr = endDate.format(DateTimeFormatter.ofPattern("yyyyMMdd")); + + List list = comRiseSetBasRepository.findByLocStDateAndLocEndDateNearLocation(stDateStr, endDateStr, location); + + return ComnSunrisesetMapper.MAPPER.toRs(list); } + + } diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/repository/com/ComRiseSetBasRepository.java b/pav-server/src/main/java/com/palnet/biz/jpa/repository/com/ComRiseSetBasRepository.java index 11e8d724..f7942a8c 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/repository/com/ComRiseSetBasRepository.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/repository/com/ComRiseSetBasRepository.java @@ -26,6 +26,33 @@ public interface ComRiseSetBasRepository extends JpaRepository findByLocStDateAndLocEndDate(@Param("locStDate") String locStDate, @Param("locEndDate") String locEndDate); + /** + * RQ로 받은 location[지역]과 RQ로 받은 일자별로 가장 가까운 도시 SELECT함 + * SELECT + * NEAR.* + * FROM + * ( + * SELECT + * *, + * CAST( + * ST_DISTANCE_SPHERE( + * POINT(LON, LAT), + * POINT( + * (SELECT DISTINCT LON FROM COM_RISE_SET_BAS WHERE LOCATION = :location), + * (SELECT DISTINCT LAT FROM COM_RISE_SET_BAS WHERE LOCATION = :location) + * ) + * ) AS SIGNED + * ) AS DIST + * FROM COM_RISE_SET_BAS + * WHERE LOC_DATE BETWEEN :locStDate AND :locEndDate + * ORDER BY LOC_DATE ASC , DIST ASC ) + * AS NEAR + * GROUP BY NEAR.LOC_DATE + * @param locStDate + * @param locEndDate + * @param location + * @return + */ @Query(value = "SELECT NEAR.* FROM ( SELECT *, CAST( ST_DISTANCE_SPHERE( POINT(LON, LAT), POINT( (SELECT DISTINCT LON FROM COM_RISE_SET_BAS WHERE LOCATION = :location), (SELECT DISTINCT LAT FROM COM_RISE_SET_BAS WHERE LOCATION = :location) ) ) AS SIGNED ) AS DIST FROM COM_RISE_SET_BAS WHERE LOC_DATE BETWEEN :locStDate AND :locEndDate ORDER BY LOC_DATE ASC , DIST ASC ) AS NEAR GROUP BY NEAR.LOC_DATE", nativeQuery = true) List findByLocStDateAndLocEndDateNearLocation(@Param("locStDate") String locStDate, @Param("locEndDate") String locEndDate, @Param("location") String location); 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 c46e9541..ce004d30 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 @@ -249,4 +249,32 @@ public class ComRiseSetQueryRepository { .fetch(); return rs; } + + public String findLocationByGeo(ComnSunrisesetCoordRq 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.id.locDate.goe(stDateStr)); + builder.and(bas.id.locDate.loe(endDateStr)); + + return query.select(bas.id.location) + .from(bas) + .where(builder) + .groupBy(bas.id.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(); + } }