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