Browse Source

feat : 일출일몰 완료

feature/renewal/common
qkr7828 7 months ago
parent
commit
6343553626
  1. 3
      data/com/src/main/java/kr/co/palnet/kac/data/com/domain/ComRiseSetBas.java
  2. 10
      data/com/src/main/java/kr/co/palnet/kac/data/com/repository/ComRiseSetBasRepository.java
  3. 249
      data/com/src/main/java/kr/co/palnet/kac/data/com/repository/ComRiseSetQueryRepository.java
  4. 48
      data/com/src/main/java/kr/co/palnet/kac/data/com/service/ComSunrisesetDomainService.java
  5. 1
      docker-compose.yml
  6. 181
      web/api-common/src/main/java/kr/co/palnet/kac/api/v1/common/sunriseset/controller/ComSunrisesetController.java
  7. 56
      web/api-common/src/main/java/kr/co/palnet/kac/api/v1/common/sunriseset/model/ComSunrisesetCoordRQ.java
  8. 35
      web/api-common/src/main/java/kr/co/palnet/kac/api/v1/common/sunriseset/model/ComSunrisesetRQ.java
  9. 49
      web/api-common/src/main/java/kr/co/palnet/kac/api/v1/common/sunriseset/model/ComSunrisesetRS.java
  10. 72
      web/api-common/src/main/java/kr/co/palnet/kac/api/v1/common/sunriseset/service/ComSunrisesetService.java

3
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.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import java.io.Serializable; import java.io.Serializable;
import java.time.Instant; import java.time.Instant;
@ -30,7 +28,6 @@ public class ComRiseSetBas {
private String locDate; private String locDate;
// 지역 // 지역
private String location; private String location;
} }

10
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 kr.co.palnet.kac.data.com.domain.ComRiseSetBas;
import org.springframework.data.jpa.repository.JpaRepository; 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<ComRiseSetBas, ComRiseSetBas.ComRiseSetBasId> { public interface ComRiseSetBasRepository extends JpaRepository<ComRiseSetBas, ComRiseSetBas.ComRiseSetBasId> {
@Query(value = "SELECT * FROM COM_RISE_SET_BAS WHERE LOC_DATE >= :locStDate", nativeQuery = true)
List<ComRiseSetBas> 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<ComRiseSetBas> findByLocStDateAndLocEndDate(@Param("locStDate") String locStDate, @Param("locEndDate") String locEndDate);
} }

249
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<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;
}
}

48
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<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);
}
}

1
docker-compose.yml

@ -11,6 +11,7 @@ services:
- MYSQL_PASSWORD=palnet!234 - MYSQL_PASSWORD=palnet!234
ports: ports:
- 13306:3306 - 13306:3306
command: ["--sql-mode=NO_ENGINE_SUBSTITUTION"]
volumes: volumes:
- ./db/data:/var/lib/mysql - ./db/data:/var/lib/mysql
# restart: always # restart: always

181
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<? 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));
}
}

56
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();
}
}

35
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;
}

49
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();
}
}

72
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<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…
Cancel
Save