qkr7828
7 months ago
10 changed files with 701 additions and 3 deletions
@ -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<ComRiseSetBas> 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<ComRiseSetBas> results = query.select(bas) |
||||
.from(bas) |
||||
.where(builder) |
||||
.orderBy(bas.locDate.asc()) |
||||
.fetch(); |
||||
|
||||
return results; |
||||
|
||||
} |
||||
|
||||
/** |
||||
* 검색조건의 맞춰 일몰,일출 시간을 조회하는 SQL 기능. |
||||
* @param rq |
||||
* @return |
||||
*/ |
||||
public List<ComRiseSetBas> 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<ComRiseSetBas> 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<ComRiseSetBas> 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<ComRiseSetBas> 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; |
||||
} |
||||
} |
@ -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<ComRiseSetBas> 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<ComRiseSetBas> getSunRiseSetByCoord(ComRiseSetBas rq) { |
||||
if(rq == null) throw new RuntimeException("파라미터가 유효하지 않습니다."); |
||||
return comRiseSetQueryRepository.findAllBySearchCoordTransform(rq); |
||||
} |
||||
} |
@ -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<? extends BasicResponse> getSunRiseSetList(ComSunrisesetRQ rq) { |
||||
List<ComSunrisesetRS> 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<String, Object> resultMap = new HashMap<String, Object>(); |
||||
log.error("IGNORE : ", e); |
||||
resultMap.put("result", false); |
||||
resultMap.put("errorCode", e.getErrorCode()); |
||||
resultMap.put("errorMessage", e.getMessage()); |
||||
return ResponseEntity.ok().body(new SuccessResponse<Map>(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<? extends BasicResponse> 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<String, Object> resultMap = new HashMap<String, Object>(); |
||||
log.error("IGNORE : ", e); |
||||
resultMap.put("result", false); |
||||
resultMap.put("errorCode", e.getErrorCode()); |
||||
resultMap.put("errorMessage", e.getMessage()); |
||||
return ResponseEntity.ok().body(new SuccessResponse<Map>(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<? extends BasicResponse> getSunRiseSetByCoord(ComSunrisesetCoordRQ rq) { |
||||
List<ComSunrisesetRS> 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<String, Object> resultMap = new HashMap<String, Object>(); |
||||
log.error("IGNORE : ", e); |
||||
resultMap.put("result", false); |
||||
resultMap.put("errorCode", e.getErrorCode()); |
||||
resultMap.put("errorMessage", e.getMessage()); |
||||
return ResponseEntity.ok().body(new SuccessResponse<Map>(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)); |
||||
} |
||||
} |
@ -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(); |
||||
} |
||||
} |
@ -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; |
||||
|
||||
} |
@ -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(); |
||||
} |
||||
} |
@ -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<ComSunrisesetRS> getSunRiseSetList(ComSunrisesetRQ rq) { |
||||
List<ComRiseSetBas> 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<ComSunrisesetRS> getSunRiseSetByCoord(ComSunrisesetCoordRQ rq) { |
||||
if(rq == null || !rq.hasCoord()) throw new BaseException(BaseErrorCode.WEB_PARAM_INVALID); |
||||
|
||||
List<ComRiseSetBas> result = comSunrisesetDomainService.getSunRiseSetByCoord(rq.toEntity()); |
||||
|
||||
return result.stream().map(ComSunrisesetRS::toRS).toList(); |
||||
} |
||||
} |
Loading…
Reference in new issue