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