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 e4c55b0..019afd3 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 @@ -3,6 +3,7 @@ package com.palnet.biz.api.comn.sunriseset.controller; import com.palnet.biz.api.comn.response.BasicResponse; import com.palnet.biz.api.comn.response.ErrorResponse; import com.palnet.biz.api.comn.response.SuccessResponse; +import com.palnet.biz.api.comn.sunriseset.model.ComnSunrisesetCoordRq; import com.palnet.biz.api.comn.sunriseset.model.ComnSunrisesetRq; import com.palnet.biz.api.comn.sunriseset.model.ComnSunrisesetRs; import com.palnet.biz.api.comn.sunriseset.service.ComnSunrisesetService; @@ -41,9 +42,9 @@ public class ComnSunrisesetController { private final ComnSunrisesetService comnSunrisesetService; - @ApiOperation(value = "LAANC 승인 상세 조회") + @ApiOperation(value = "일출/일몰 조회", notes = "기간내 모든 일출/일몰조회") @Tag(name = "공통 API", description = "공통 API") - @GetMapping("/detail/{planSno}") + @GetMapping("/list") public ResponseEntity getSunRiseSetList(ComnSunrisesetRq rq) { List rs = null; try { @@ -66,4 +67,31 @@ public class ComnSunrisesetController { } return ResponseEntity.ok().body(new SuccessResponse<>(rs)); } + + + @ApiOperation(value = "일출/일몰 조회(좌표)", notes = "기간내 근접한 지역의 일출/일몰 조회") + @Tag(name = "공통 API", description = "공통 API") + @GetMapping("/coord") + public ResponseEntity getSunRiseSetByCoord(ComnSunrisesetCoordRq rq) { + ComnSunrisesetRs rs = null; + try { + log.debug(">>> rq : {}", rq); + rs = comnSunrisesetService.getSunRiseSetByCoord(rq); +// log.debug(">>> rs : {}", rs); + + } catch (CustomException e) { + 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) { + 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/pav-server/src/main/java/com/palnet/biz/api/comn/sunriseset/model/ComnSunrisesetCoordRq.java b/pav-server/src/main/java/com/palnet/biz/api/comn/sunriseset/model/ComnSunrisesetCoordRq.java new file mode 100644 index 0000000..7fa9d65 --- /dev/null +++ b/pav-server/src/main/java/com/palnet/biz/api/comn/sunriseset/model/ComnSunrisesetCoordRq.java @@ -0,0 +1,39 @@ +package com.palnet.biz.api.comn.sunriseset.model; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.annotations.ApiParam; +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 ComnSunrisesetCoordRq { + @ApiParam(value = "시작일자", defaultValue = "20231101", example = "20231101", required = true) + private String locStDate; + @ApiParam(value = "종료일자", defaultValue = "20231231", example = "20231231", required = true) + private String locEndDate; + @ApiParam(value = "위도", defaultValue = "37.4717452", example = "37.11", required = true) + private Double lat; + @ApiParam(value = "경도", defaultValue = "126.7081059", example = "127.11", required = true) + private Double lon; + + @JsonIgnore + public boolean hasAllData() { + return (locStDate != null && !locStDate.isEmpty()) && (locEndDate != null && !locEndDate.isEmpty()) && lat != null && lon != null; + } +} diff --git a/pav-server/src/main/java/com/palnet/biz/api/comn/sunriseset/model/ComnSunrisesetRq.java b/pav-server/src/main/java/com/palnet/biz/api/comn/sunriseset/model/ComnSunrisesetRq.java index 777f176..628be7f 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/comn/sunriseset/model/ComnSunrisesetRq.java +++ b/pav-server/src/main/java/com/palnet/biz/api/comn/sunriseset/model/ComnSunrisesetRq.java @@ -1,8 +1,6 @@ package com.palnet.biz.api.comn.sunriseset.model; import io.swagger.annotations.ApiParam; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; 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 ca2185c..afa2919 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 @@ -1,17 +1,15 @@ package com.palnet.biz.api.comn.sunriseset.service; +import com.palnet.biz.api.comn.sunriseset.model.ComnSunrisesetCoordRq; import com.palnet.biz.api.comn.sunriseset.model.ComnSunrisesetRq; import com.palnet.biz.api.comn.sunriseset.model.ComnSunrisesetRs; -import com.palnet.biz.jpa.entity.ComRiseSetBas; -import com.palnet.biz.jpa.repository.com.ComRiseSetBasRepository; import com.palnet.biz.jpa.repository.com.ComRiseSetQueryRepository; +import com.palnet.comn.code.ErrorCode; +import com.palnet.comn.exception.CustomException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import org.springframework.util.StopWatch; -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; import java.util.List; /** @@ -30,23 +28,16 @@ import java.util.List; @Service public class ComnSunrisesetService { + private final ComRiseSetQueryRepository comRiseSetQueryRepository; public List getSunRiseSetList(ComnSunrisesetRq rq) { - String locStDate = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); - String locEndDate = null; - if (rq != null) { - if (rq.getLocStDate() != null && !rq.getLocStDate().isEmpty()) { - locStDate = rq.getLocStDate(); - } - if (rq.getLocEndDate() != null && !rq.getLocEndDate().isEmpty()) { - locEndDate = rq.getLocEndDate(); - } - } - - List rs = comRiseSetQueryRepository.findAllBySearchTransform(rq); + return comRiseSetQueryRepository.findAllBySearchTransform(rq); - return rs; + } + public ComnSunrisesetRs getSunRiseSetByCoord(ComnSunrisesetCoordRq rq) { + if(rq == null || !rq.hasAllData()) throw new CustomException(ErrorCode.NON_VALID_PARAMETER); + return comRiseSetQueryRepository.findBySearchCoordTransform(rq); } } 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 60fd904..c322ff9 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 @@ -25,4 +25,5 @@ public interface ComRiseSetBasRepository extends JpaRepository findByLocStDateAndLocEndDate(@Param("locStDate") String locStDate, @Param("locEndDate") String locEndDate); + } 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 8a50780..a00fdce 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 @@ -1,11 +1,13 @@ package com.palnet.biz.jpa.repository.com; +import com.palnet.biz.api.comn.sunriseset.model.ComnSunrisesetCoordRq; import com.palnet.biz.api.comn.sunriseset.model.ComnSunrisesetRq; import com.palnet.biz.api.comn.sunriseset.model.ComnSunrisesetRs; import com.palnet.biz.jpa.entity.ComRiseSetBas; import com.palnet.biz.jpa.entity.QComRiseSetBas; 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 lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -90,4 +92,35 @@ public class ComRiseSetQueryRepository { return results; } + + public ComnSunrisesetRs findBySearchCoordTransform(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())); + + return query + .select(Projections.bean( + ComnSunrisesetRs.class, + bas.id.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.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(); + } } diff --git a/pav-server/src/main/resources/config/log/logback-spring.xml b/pav-server/src/main/resources/config/log/logback-spring.xml index abb43cd..3d4023d 100644 --- a/pav-server/src/main/resources/config/log/logback-spring.xml +++ b/pav-server/src/main/resources/config/log/logback-spring.xml @@ -44,23 +44,25 @@ - + + + - - + + - + - + + - @@ -68,9 +70,9 @@ + -