Browse Source

fix: 일출일몰 서비스 운영키 변경

feature/address-coordinate
lkd9125(이경도) 8 months ago
parent
commit
2108557781
  1. 25
      pav-server/src/main/java/com/palnet/biz/jpa/repository/com/ComRiseSetQueryRepository.java
  2. 1
      pav-server/src/main/java/com/palnet/biz/scheduler/external/SunRiseSetScheduler.java
  3. 111
      pav-server/src/main/java/com/palnet/biz/scheduler/external/service/SunRiseSchedulerService.java
  4. 5
      pav-server/src/main/resources/application.properties

25
pav-server/src/main/java/com/palnet/biz/jpa/repository/com/ComRiseSetQueryRepository.java

@ -8,6 +8,7 @@ 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.core.types.dsl.StringTemplate;
import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -34,6 +35,30 @@ import java.util.List;
public class ComRiseSetQueryRepository {
private final JPAQueryFactory query;
public List<String> findCompleteBySearch(){
QComRiseSetBas bas = QComRiseSetBas.comRiseSetBas;
LocalDate today = LocalDate.now();
LocalDate afterOneYear = LocalDate.now().plusYears(1);
StringTemplate locDate = Expressions.stringTemplate("DATE_FORMAT({0} , '%Y-%m-%d')", bas.id.locDate);
StringTemplate todayDate = Expressions.stringTemplate("DATE_FORMAT({0} , '%Y-%m-%d')", today.toString());
StringTemplate afterOneYearDate = Expressions.stringTemplate("DATE_FORMAT({0} , '%Y-%m-%d')", afterOneYear.toString());
BooleanBuilder builder = new BooleanBuilder();
builder.and(locDate.goe(todayDate));
builder.and(locDate.loe(afterOneYearDate));
return query
.select(bas.id.locDate)
.from(bas)
.where(builder)
.groupBy(bas.id.locDate)
.having(bas.count().eq(205L))
.fetch();
}
public List<ComRiseSetBas> findAllBySearch(ComnSunrisesetRq rq) {
QComRiseSetBas bas = QComRiseSetBas.comRiseSetBas;

1
pav-server/src/main/java/com/palnet/biz/scheduler/external/SunRiseSetScheduler.java vendored

@ -16,6 +16,7 @@ public class SunRiseSetScheduler {
@Scheduled(cron = "0 0 4 * * *") // 매일 새벽 4시
public void run(){
sunRiseSchedulerService.sunsetSchedule();
}
}

111
pav-server/src/main/java/com/palnet/biz/scheduler/external/service/SunRiseSchedulerService.java vendored

@ -7,6 +7,7 @@ import com.palnet.biz.api.external.service.SunRiseSetMapper;
import com.palnet.biz.jpa.entity.ComRiseSetBas;
import com.palnet.biz.jpa.entity.ComRiseSetBasPK;
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;
@ -17,15 +18,16 @@ import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.web.util.DefaultUriBuilderFactory;
import org.springframework.web.util.UriComponentsBuilder;
import java.lang.reflect.Field;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
@Service
@ -35,6 +37,8 @@ public class SunRiseSchedulerService {
private final ComRiseSetBasRepository comRiseSetBasRepository;
private final ComRiseSetQueryRepository comRiseSetQueryRepository;
@Value("${external.sunriseset.url}")
private String SUN_HOST;
@ -74,19 +78,33 @@ public class SunRiseSchedulerService {
public void sunsetSchedule(){
this.dayCallCount = 0;
List<String> todayLocation = this.todayLocation();
LocalDate today = LocalDate.now();
List<String> timeColumn = List.of("sunrise", "suntransit", "sunset", "moonrise", "moontransit", "moonset", "civilm", "civile", "nautm", "naute", "astm", "aste");
List<String> yearDaysList = new ArrayList<>();
List<ComRiseSetBas> sunRiseSet = new ArrayList<>();
LocalDate today = LocalDate.now();
// 내일부터 약180일 데이터 INSERT
for(int i = 0; i <= 180; i ++){
for(int i = 0; i <= 365; i ++){
today = today.plusDays(1);
String locdate = today.format(DateTimeFormatter.ofPattern("yyyyMMdd"));
yearDaysList.add(locdate);
}
List<String> removeDate = comRiseSetQueryRepository.findCompleteBySearch();
HashSet<String> set = new HashSet<>(yearDaysList);
set.removeAll(removeDate);
List<String> remainingDays = new ArrayList<>(set);
Collections.sort(remainingDays);
List<String> todayLocation = this.getLocation();
List<ComRiseSetBas> sunRiseSet = new ArrayList<>();
for(int i = 0; i < remainingDays.size(); i++){
String locdate = remainingDays.get(i);
for(int j = 0; j < todayLocation.size(); j ++){
try {
String location = todayLocation.get(j);
@ -128,9 +146,9 @@ public class SunRiseSchedulerService {
}catch (CustomException e) {
String errorCode = e.getErrorCode();
if(errorCode.equals("LT001")) throw new CustomException(ErrorCode.fromCode(errorCode));
if(errorCode.equals("LT001")) log.error("LIMITED_NUMBER_OF_SERVICE_REQUESTS_EXCEEDS_ERROR");
}catch (Exception e){
log.error("API CALL Error :: location {} , locdate {}", locdate, locdate);
log.error("API CALL Error :: location {} , locdate {}", location, locdate);
log.error("", e);
}
}
@ -142,18 +160,28 @@ public class SunRiseSchedulerService {
}
}
log.info("dayCallCount => {}", this.dayCallCount);
if(!sunRiseSet.isEmpty()) comRiseSetBasRepository.saveAll(sunRiseSet);
}
private List<SunRiseSetRs> callSunRiseSet(String locdate, String location) throws CustomException {
String uriStr = UriComponentsBuilder.fromUriString(AREA_RISE_SEET_INFO_URL)
String uriStr = null;
try{
uriStr = UriComponentsBuilder.fromUriString(AREA_RISE_SEET_INFO_URL)
.queryParam("serviceKey", SUN_KEY)
.queryParam("locdate", locdate)
.queryParam("location", location)
.queryParam("location",URLEncoder.encode(location, StandardCharsets.UTF_8))
.build().toUriString();
} catch(Exception e){
e.printStackTrace();
}
DefaultUriBuilderFactory factory = new DefaultUriBuilderFactory(SUN_HOST);
factory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.NONE);
WebClient client = WebClient.builder()
.uriBuilderFactory(factory)
.baseUrl(SUN_HOST)
.defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_XML_VALUE)
.build();
@ -191,55 +219,10 @@ public class SunRiseSchedulerService {
}
}
private List<String> todayLocation (){
int count = this.init();
int changeCount = this.arraySelect(count);
List<String> todayLocation = new ArrayList<>();
for(int i = 0; i < 4; i ++){
if(changeCount == 4) changeCount = 0;
String[] arr = this.location[i][changeCount];
todayLocation.addAll(Arrays.asList(arr));
changeCount ++;
}
// 중복제거
HashSet<String> set = new HashSet<>(todayLocation);
return new ArrayList<>(set);
}
private int arraySelect(int count){
int result;
switch (count){
case 1 :
result = 0;
break;
case 2 :
result = 1;
break;
case 3 :
result= 2;
break;
case 4 :
result = 3;
break;
default:
throw new CustomException(ErrorCode.NON_VALID_PARAMETER);
}
return result;
}
private int init(){
int day = LocalDate.now().getDayOfMonth();
return (day % 4) + 1;
private List<String> getLocation() {
String locationStr = "가거도, 가평, 강릉, 강원고성, 강진, 강화, 거제, 거창, 격렬비도, 경기광주, 경산, 경주, 경주시감포읍, 경주시산내면, 계룡, 고령, 고성, 고양, 고창, 고흥, 곡성, 공주, 과천, 광명, 광양, 광주, 괴산, 괴산군연풍면, 구례, 구리, 구미, 군산, 군위, 군포, 금산, 기장, 김제, 김천, 김천시부항면, 김포, 김해, 나주, 남양주, 남원, 남해, 논산, 단양, 달성, 담양, 당진, 대관령, 대구, 대덕전파천문대, 대전, 덕적도, 독도, 동두천, 동해, 마라도, 목포, 무안, 무주, 문경, 밀양, 백령도, 변산, 보령, 보성, 보은, 보현산천문대, 봉화, 부산, 부안, 부여, 부천, 사천, 산청, 삼산도, 삼척, 상주, 서귀포, 서산, 서울, 서천, 성남, 성산일출, 성주, 세종, 소백산천문대, 속초, 수원, 순창, 순천, 승주, 시흥, 신안, 신안군임자면, 아산, 안동, 안산, 안성, 안양, 양구, 양산, 양양, 양주, 양평, 어청도, 여수, 여수공항, 여주, 연세KVN, 연천, 연평도, 영광, 영덕, 영동, 영암, 영양, 영월, 영주, 영천, 예산, 예천, 오산, 옥천, 옹진, 완도, 완주, 용인, 울릉, 울산, 울산KVN, 울주, 울진, 원주, 위도, 음성, 의령, 의성, 의왕, 의정부, 이천, 익산, 인제, 인제군기린면, 인천, 임실, 장성, 장수, 장흥, 전주, 정선, 정읍, 제주, 제주레이더, 제천, 주문진, 증평, 진도, 진안, 진주, 진천, 진해, 창녕, 창원, 천안, 철원, 청도, 청송, 청양, 청주, 청주공항, 추자도, 추풍령, 춘양, 춘천, 충주, 칠곡, 탐라KVN, 태백, 태안, 통영, 파주, 평창, 평창KVN, 평택, 포천, 포항, 하남, 하동, 함안, 함양, 함평, 합천, 해남, 홍성, 홍천, 홍천군내면, 홍천군서석면, 화성, 화순, 화천, 횡성, 흑산도";
// String locationStr = "김포";
return Arrays.stream(locationStr.split(",")).map(String::trim).distinct().filter(str -> !str.isEmpty()).collect(Collectors.toList());
}
}

5
pav-server/src/main/resources/application.properties

@ -13,8 +13,9 @@ naver.api.url=https://naveropenapi.apigw.ntruss.com/map-reversegeocode/v2/gc
### 일출/일몰 ###
external.sunriseset.url=http://apis.data.go.kr/B090041/openapi/service/RiseSetInfoService
#external.sunriseset.key=b%2FStm6AMT3EwXc5kOvwnjK%2FPB57Ay1WzkIGVx5WaMt0MyRt3TEPgcJ%2Fur45GrnVOZKs2sfIWKUX3BTl8eYwVFw%3D%3D
external.sunriseset.key=b/Stm6AMT3EwXc5kOvwnjK/PB57Ay1WzkIGVx5WaMt0MyRt3TEPgcJ/ur45GrnVOZKs2sfIWKUX3BTl8eYwVFw==
#external.sunriseset.key=b/Stm6AMT3EwXc5kOvwnjK/PB57Ay1WzkIGVx5WaMt0MyRt3TEPgcJ/ur45GrnVOZKs2sfIWKUX3BTl8eYwVFw==
external.sunriseset.key=r6RMUsk3Vtama7D6uq7MiWV9dTC9MwfIIr4%2F45y0uVNw6BaYbgpKmL%2BLUDFVTfIYUmEe4K%2FaniEjdV9mg5t82Q%3D%3D
#external.sunriseset.key=r6RMUsk3Vtama7D6uq7MiWV9dTC9MwfIIr4/45y0uVNw6BaYbgpKmL+LUDFVTfIYUmEe4K/aniEjdV9mg5t82Q==
### TS ###
external.ts.url=http://121.137.95.45:8170
external.ts.return.uri=/api/external/laanc/vc/callback

Loading…
Cancel
Save