From 08c36febaae18904ebd8e57173c7dc2d24254b71 Mon Sep 17 00:00:00 2001 From: seheonnn Date: Sun, 19 May 2024 11:22:37 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=E2=9C=A8=20=20feat:=20=EC=9E=AC=EB=82=9C?= =?UTF-8?q?=20=EB=AC=B8=EC=9E=90=20Api=20=EC=82=AD=EC=A0=9C=20=EB=B0=8F=20?= =?UTF-8?q?=EA=B8=B0=EC=83=81=20=ED=8A=B9=EB=B3=B4=20Api=20=EC=97=B0?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{bootstrap.yml => application.yml} | 0 .../controller/WeatherTestController.java | 8 +-- ...gTestRequest.java => AdvisoryRequest.java} | 2 +- ...asterMessage.java => WeatherAdvisory.java} | 6 +- .../openapi/MsgOpenApiResponse.java | 72 ++++++++----------- .../weatherservice/openapi/OpenApiUtil.java | 39 ++++++---- .../redis/DisasterMessageRepository.java | 8 --- .../redis/WeatherAdvisoryRepository.java | 8 +++ .../service/WeatherService.java | 26 +++---- 9 files changed, 83 insertions(+), 86 deletions(-) rename Eureka/src/main/resources/{bootstrap.yml => application.yml} (100%) rename weather-service/src/main/java/com/waither/weatherservice/dto/request/{MsgTestRequest.java => AdvisoryRequest.java} (69%) rename weather-service/src/main/java/com/waither/weatherservice/entity/{DisasterMessage.java => WeatherAdvisory.java} (81%) delete mode 100644 weather-service/src/main/java/com/waither/weatherservice/redis/DisasterMessageRepository.java create mode 100644 weather-service/src/main/java/com/waither/weatherservice/redis/WeatherAdvisoryRepository.java diff --git a/Eureka/src/main/resources/bootstrap.yml b/Eureka/src/main/resources/application.yml similarity index 100% rename from Eureka/src/main/resources/bootstrap.yml rename to Eureka/src/main/resources/application.yml diff --git a/weather-service/src/main/java/com/waither/weatherservice/controller/WeatherTestController.java b/weather-service/src/main/java/com/waither/weatherservice/controller/WeatherTestController.java index ef6cae21..94c978ae 100644 --- a/weather-service/src/main/java/com/waither/weatherservice/controller/WeatherTestController.java +++ b/weather-service/src/main/java/com/waither/weatherservice/controller/WeatherTestController.java @@ -10,9 +10,9 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.waither.weatherservice.dto.request.AccuweatherTestRequest; +import com.waither.weatherservice.dto.request.AdvisoryRequest; import com.waither.weatherservice.dto.request.AirTestRequest; import com.waither.weatherservice.dto.request.ForeCastTestRequest; -import com.waither.weatherservice.dto.request.MsgTestRequest; import com.waither.weatherservice.service.WeatherService; import lombok.RequiredArgsConstructor; @@ -36,9 +36,9 @@ public void createDailyWeatherTest(@RequestBody ForeCastTestRequest request) thr weatherService.createDailyWeather(request.nx(), request.ny(), request.baseDate(), request.baseTime()); } - @PostMapping("/msg") - public void createDisasterMsgTest(@RequestBody MsgTestRequest request) throws URISyntaxException, IOException { - weatherService.createDisasterMsg(request.location()); + @PostMapping("/advisory") + public void createWeatherAdvisory(@RequestBody AdvisoryRequest request) throws URISyntaxException, IOException { + weatherService.createWeatherAdvisory(request.location()); } @PostMapping("/air") diff --git a/weather-service/src/main/java/com/waither/weatherservice/dto/request/MsgTestRequest.java b/weather-service/src/main/java/com/waither/weatherservice/dto/request/AdvisoryRequest.java similarity index 69% rename from weather-service/src/main/java/com/waither/weatherservice/dto/request/MsgTestRequest.java rename to weather-service/src/main/java/com/waither/weatherservice/dto/request/AdvisoryRequest.java index 60ebdf39..587a5a5f 100644 --- a/weather-service/src/main/java/com/waither/weatherservice/dto/request/MsgTestRequest.java +++ b/weather-service/src/main/java/com/waither/weatherservice/dto/request/AdvisoryRequest.java @@ -1,6 +1,6 @@ package com.waither.weatherservice.dto.request; -public record MsgTestRequest( +public record AdvisoryRequest( String location ) { } diff --git a/weather-service/src/main/java/com/waither/weatherservice/entity/DisasterMessage.java b/weather-service/src/main/java/com/waither/weatherservice/entity/WeatherAdvisory.java similarity index 81% rename from weather-service/src/main/java/com/waither/weatherservice/entity/DisasterMessage.java rename to weather-service/src/main/java/com/waither/weatherservice/entity/WeatherAdvisory.java index 241645f9..03b6d3d5 100644 --- a/weather-service/src/main/java/com/waither/weatherservice/entity/DisasterMessage.java +++ b/weather-service/src/main/java/com/waither/weatherservice/entity/WeatherAdvisory.java @@ -13,15 +13,15 @@ @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @AllArgsConstructor(access = AccessLevel.PRIVATE) -@RedisHash(value = "DisasterMessage", timeToLive = 86400L) // 유효시간: 24시간 -public class DisasterMessage { +@RedisHash(value = "WeatherAdvisory", timeToLive = 86400L) // 유효시간: 24시간 +public class WeatherAdvisory { @Id private String id; private String message; public String toString() { - return "DisasterMessage{" + + return "WeatherAdvisory{" + "message='" + message + '\'' + '}'; } diff --git a/weather-service/src/main/java/com/waither/weatherservice/openapi/MsgOpenApiResponse.java b/weather-service/src/main/java/com/waither/weatherservice/openapi/MsgOpenApiResponse.java index 348141d7..8c013b5d 100644 --- a/weather-service/src/main/java/com/waither/weatherservice/openapi/MsgOpenApiResponse.java +++ b/weather-service/src/main/java/com/waither/weatherservice/openapi/MsgOpenApiResponse.java @@ -3,7 +3,6 @@ import java.util.List; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; @@ -11,66 +10,53 @@ @JsonIgnoreProperties(ignoreUnknown = true) public class MsgOpenApiResponse { - @JsonProperty("DisasterMsg2") - private List disasterMsg; + private Response response; @Getter @JsonIgnoreProperties(ignoreUnknown = true) - public static class MsgData { - @JsonProperty("head") - private List head; - @JsonProperty("row") - private List row; + public static class Response { + private Header header; + private Body body; } @Getter @JsonIgnoreProperties(ignoreUnknown = true) - public static class HeadData { - @JsonProperty("totalCount") + public static class Header { + private String resultCode; + private String resultMsg; + } + + @Getter + @JsonIgnoreProperties(ignoreUnknown = true) + public static class Body { + private String dataType; + private Items items; + private int pageNo; + private int numOfRows; private int totalCount; - @JsonProperty("numOfRows") - private String numOfRows; - @JsonProperty("pageNo") - private String pageNo; - @JsonProperty("type") - private String type; - @JsonProperty("RESULT") - private ResultData resultData; } @Getter @JsonIgnoreProperties(ignoreUnknown = true) - public static class ResultData { - @JsonProperty("resultCode") - private String resultCode; - @JsonProperty("resultMsg") - private String resultMsg; + public static class Items { + private List item; } @Getter @JsonIgnoreProperties(ignoreUnknown = true) - public static class RowData { - @JsonProperty("create_date") - private String createDate; - @JsonProperty("location_id") - private String locationId; - @JsonProperty("location_name") - private String locationName; - @JsonProperty("md101_sn") - private String md101Sn; - @JsonProperty("msg") - private String msg; - @JsonProperty("send_platform") - private String sendPlatform; + public static class Item { + private String stnId; + private String title; + private String tmFc; + private String tmSeq; + @Override public String toString() { - return "RowData{" + - "createDate='" + createDate + '\'' + - ", locationId='" + locationId + '\'' + - ", locationName='" + locationName + '\'' + - ", md101Sn='" + md101Sn + '\'' + - ", msg='" + msg + '\'' + - ", sendPlatform='" + sendPlatform + '\'' + + return "Item{" + + "stnId='" + stnId + '\'' + + ", title='" + title + '\'' + + ", tmFc='" + tmFc + '\'' + + ", tmSeq='" + tmSeq + '\'' + '}'; } } diff --git a/weather-service/src/main/java/com/waither/weatherservice/openapi/OpenApiUtil.java b/weather-service/src/main/java/com/waither/weatherservice/openapi/OpenApiUtil.java index 991c7ed9..540aa163 100644 --- a/weather-service/src/main/java/com/waither/weatherservice/openapi/OpenApiUtil.java +++ b/weather-service/src/main/java/com/waither/weatherservice/openapi/OpenApiUtil.java @@ -3,7 +3,8 @@ import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; -import java.net.URLEncoder; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.Arrays; import java.util.Comparator; import java.util.HashMap; @@ -101,22 +102,24 @@ public String apiResponseStringFilter(List items, } // 재난 문자 Api - public List callDisasterMsgApi(String location) throws + public List callAdvisoryApi(String location, String today) throws URISyntaxException, IOException { WebClient webClient = WebClient.create(); - String uriString = "http://apis.data.go.kr/1741000/DisasterMsg4/getDisasterMsg2List" + - "?" + URLEncoder.encode("serviceKey", ENCODING) + "=" + disasterMsgKey + - "&" + URLEncoder.encode("pageNo", ENCODING) + "=" + URLEncoder.encode("1", ENCODING) + - "&" + URLEncoder.encode("numOfRows", ENCODING) + "=" + URLEncoder.encode("2", ENCODING) + - "&" + URLEncoder.encode("type", ENCODING) + "=" + URLEncoder.encode("json", ENCODING) + - "&" + URLEncoder.encode("location_name", ENCODING) + "=" + URLEncoder.encode(location, ENCODING); + String uriString = "http://apis.data.go.kr/1360000/WthrWrnInfoService/getWthrWrnList" + + "?serviceKey=" + forecastKey + + "&numOfRows=" + "10" + + "&pageNo=" + "1" + + "&dataType=" + "JSON" + + "&stnId=" + location + + "&fromTmFc=" + today + + "&toTmFc=" + today; URI uri = new URI(uriString); - log.info("[*] 재난 문자 Api : {}", uri); + log.info("[*] 기상 특보 Api : {}", uri); String responseString = webClient.get() .uri(uri) @@ -131,18 +134,24 @@ public List callDisasterMsgApi(String location) thro .block(); ObjectMapper objectMapper = new ObjectMapper(); - MsgOpenApiResponse response = objectMapper.readValue(responseString, MsgOpenApiResponse.class); + MsgOpenApiResponse.Response response = objectMapper.readValue(responseString, MsgOpenApiResponse.class) + .getResponse(); - if (response.getDisasterMsg().get(0).getHead().get(2).getResultData().getResultCode().equals("INFO-0")) { - return response.getDisasterMsg().get(1).getRow(); + if (response.getHeader().getResultCode().equals("00")) { + return response.getBody().getItems().getItem(); + } else if (response.getHeader().getResultCode().equals("03")) { + log.info("특보 내용 없음"); + throw new WeatherExceptionHandler(WeatherErrorCode.WEATHER_OPENAPI_ERROR); } else { - String resultMsg = response.getDisasterMsg().get(0).getHead().get(2).getResultData().getResultMsg(); - log.info("[*] OpenApi Error : {}", resultMsg); + log.info("특보 오류"); throw new WeatherExceptionHandler(WeatherErrorCode.WEATHER_OPENAPI_ERROR); } } - // TODO 재난 문자 필터 (날씨 정보만 추출) + public String convertLocalDateToString(LocalDate localDate) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd"); + return localDate.format(formatter); + } public List callAirKorea(String searchDate) throws URISyntaxException { int pageNo = 1; diff --git a/weather-service/src/main/java/com/waither/weatherservice/redis/DisasterMessageRepository.java b/weather-service/src/main/java/com/waither/weatherservice/redis/DisasterMessageRepository.java deleted file mode 100644 index e48264a0..00000000 --- a/weather-service/src/main/java/com/waither/weatherservice/redis/DisasterMessageRepository.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.waither.weatherservice.redis; - -import org.springframework.data.repository.CrudRepository; - -import com.waither.weatherservice.entity.DisasterMessage; - -public interface DisasterMessageRepository extends CrudRepository { -} diff --git a/weather-service/src/main/java/com/waither/weatherservice/redis/WeatherAdvisoryRepository.java b/weather-service/src/main/java/com/waither/weatherservice/redis/WeatherAdvisoryRepository.java new file mode 100644 index 00000000..99cb7cf1 --- /dev/null +++ b/weather-service/src/main/java/com/waither/weatherservice/redis/WeatherAdvisoryRepository.java @@ -0,0 +1,8 @@ +package com.waither.weatherservice.redis; + +import org.springframework.data.repository.CrudRepository; + +import com.waither.weatherservice.entity.WeatherAdvisory; + +public interface WeatherAdvisoryRepository extends CrudRepository { +} diff --git a/weather-service/src/main/java/com/waither/weatherservice/service/WeatherService.java b/weather-service/src/main/java/com/waither/weatherservice/service/WeatherService.java index a9b17d9a..991b1266 100644 --- a/weather-service/src/main/java/com/waither/weatherservice/service/WeatherService.java +++ b/weather-service/src/main/java/com/waither/weatherservice/service/WeatherService.java @@ -2,6 +2,7 @@ import java.io.IOException; import java.net.URISyntaxException; +import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.List; @@ -12,8 +13,8 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.waither.weatherservice.dto.response.MainWeatherResponse; import com.waither.weatherservice.entity.DailyWeather; -import com.waither.weatherservice.entity.DisasterMessage; import com.waither.weatherservice.entity.ExpectedWeather; +import com.waither.weatherservice.entity.WeatherAdvisory; import com.waither.weatherservice.exception.WeatherExceptionHandler; import com.waither.weatherservice.gps.GpsTransfer; import com.waither.weatherservice.gps.LatXLngY; @@ -22,8 +23,8 @@ import com.waither.weatherservice.openapi.MsgOpenApiResponse; import com.waither.weatherservice.openapi.OpenApiUtil; import com.waither.weatherservice.redis.DailyWeatherRepository; -import com.waither.weatherservice.redis.DisasterMessageRepository; import com.waither.weatherservice.redis.ExpectedWeatherRepository; +import com.waither.weatherservice.redis.WeatherAdvisoryRepository; import com.waither.weatherservice.response.WeatherErrorCode; import lombok.RequiredArgsConstructor; @@ -38,7 +39,7 @@ public class WeatherService { private final OpenApiUtil openApiUtil; private final DailyWeatherRepository dailyWeatherRepository; private final ExpectedWeatherRepository expectedWeatherRepository; - private final DisasterMessageRepository disasterMessageRepository; + private final WeatherAdvisoryRepository weatherAdvisoryRepository; private final Producer producer; private final GpsTransfer gpsTransfer; @@ -112,21 +113,22 @@ public void createDailyWeather(int nx, } - public void createDisasterMsg(String location) throws URISyntaxException, IOException { - List rows = openApiUtil.callDisasterMsgApi(location); - MsgOpenApiResponse.RowData row = rows.get(0); + public void createWeatherAdvisory(String location) throws URISyntaxException, IOException { + LocalDate now = LocalDate.now(); + String today = openApiUtil.convertLocalDateToString(now); - String createDate = row.getCreateDate(); - String msg = row.getMsg(); + List items = openApiUtil.callAdvisoryApi(location, today); - String key = location + "_" + createDate; - DisasterMessage disasterMessage = DisasterMessage.builder() + String msg = items.get(0).getTitle(); + + String key = location + "_" + today; + WeatherAdvisory weatherAdvisory = WeatherAdvisory.builder() .id(key) .message(msg) .build(); - DisasterMessage save = disasterMessageRepository.save(disasterMessage); - log.info("[*] 재난 문자 : {}", save); + WeatherAdvisory save = weatherAdvisoryRepository.save(weatherAdvisory); + log.info("[*] 기상 특보 : {}", save); } public void createAirKorea(String searchTime) throws URISyntaxException { From 372afc160d07d8cf35f3aa19e4c9a459eed7aafc Mon Sep 17 00:00:00 2001 From: seheonnn Date: Sun, 19 May 2024 15:57:38 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=E2=9C=A8=20=20feat:=20=EC=9C=84=EB=8F=84,?= =?UTF-8?q?=20=EA=B2=BD=EB=8F=84=20->=20=EC=A7=80=EC=97=AD=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EB=B3=80=ED=99=98=20=EB=A1=9C=EC=A7=81=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{application.yml => bootstrap.yml} | 0 weather-service/build.gradle | 3 ++ .../controller/WeatherTestController.java | 2 +- .../dto/request/AdvisoryRequest.java | 3 +- .../weatherservice/gps/GpsTransfer.java | 48 ++++++++++++++++++ .../weatherservice/openapi/OpenApiUtil.java | 6 +-- .../service/WeatherService.java | 4 +- .../src/main/resources/api/Region.xlsx | Bin 0 -> 63838 bytes 8 files changed, 58 insertions(+), 8 deletions(-) rename Eureka/src/main/resources/{application.yml => bootstrap.yml} (100%) create mode 100644 weather-service/src/main/resources/api/Region.xlsx diff --git a/Eureka/src/main/resources/application.yml b/Eureka/src/main/resources/bootstrap.yml similarity index 100% rename from Eureka/src/main/resources/application.yml rename to Eureka/src/main/resources/bootstrap.yml diff --git a/weather-service/build.gradle b/weather-service/build.gradle index ee0a9f34..b8f2ebb3 100644 --- a/weather-service/build.gradle +++ b/weather-service/build.gradle @@ -49,6 +49,9 @@ dependencies { //Springdoc implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.1.0' + + // File + implementation 'org.apache.poi:poi-ooxml:5.2.0' } openApi { diff --git a/weather-service/src/main/java/com/waither/weatherservice/controller/WeatherTestController.java b/weather-service/src/main/java/com/waither/weatherservice/controller/WeatherTestController.java index 94c978ae..0d275a15 100644 --- a/weather-service/src/main/java/com/waither/weatherservice/controller/WeatherTestController.java +++ b/weather-service/src/main/java/com/waither/weatherservice/controller/WeatherTestController.java @@ -38,7 +38,7 @@ public void createDailyWeatherTest(@RequestBody ForeCastTestRequest request) thr @PostMapping("/advisory") public void createWeatherAdvisory(@RequestBody AdvisoryRequest request) throws URISyntaxException, IOException { - weatherService.createWeatherAdvisory(request.location()); + weatherService.createWeatherAdvisory(request.latitude(), request.longitude()); } @PostMapping("/air") diff --git a/weather-service/src/main/java/com/waither/weatherservice/dto/request/AdvisoryRequest.java b/weather-service/src/main/java/com/waither/weatherservice/dto/request/AdvisoryRequest.java index 587a5a5f..94d75554 100644 --- a/weather-service/src/main/java/com/waither/weatherservice/dto/request/AdvisoryRequest.java +++ b/weather-service/src/main/java/com/waither/weatherservice/dto/request/AdvisoryRequest.java @@ -1,6 +1,7 @@ package com.waither.weatherservice.dto.request; public record AdvisoryRequest( - String location + double latitude, + double longitude ) { } diff --git a/weather-service/src/main/java/com/waither/weatherservice/gps/GpsTransfer.java b/weather-service/src/main/java/com/waither/weatherservice/gps/GpsTransfer.java index f2e4b798..dbc1d174 100644 --- a/weather-service/src/main/java/com/waither/weatherservice/gps/GpsTransfer.java +++ b/weather-service/src/main/java/com/waither/weatherservice/gps/GpsTransfer.java @@ -1,7 +1,17 @@ package com.waither.weatherservice.gps; +import java.io.IOException; +import java.io.InputStream; + +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.stereotype.Component; +import com.waither.weatherservice.exception.WeatherExceptionHandler; +import com.waither.weatherservice.response.WeatherErrorCode; + @Component public class GpsTransfer { @@ -92,4 +102,42 @@ public LatXLngY convertGridToGps(double x, double y) { .y(y) .build(); } + + // ex) lat = 37.57142000, lon = 126.96580000 -> 108 + public String convertGpsToRegionCode(double lat, double lon) { + String regionCode = null; + try { + InputStream inputStream = getClass().getResourceAsStream("/api/Region.xlsx"); + XSSFWorkbook workbook = new XSSFWorkbook(inputStream); + Sheet sheet = workbook.getSheetAt(0); // 시트 인덱스, 첫 번째 시트를 가져옴 + + for (int i = 2; i <= sheet.getLastRowNum(); i++) { + Row row = sheet.getRow(i); + if (row != null) { + Cell lonCell = row.getCell(3); + Cell latCell = row.getCell(4); + + // 셀이 비어 있는지 확인 + if (lonCell != null && latCell != null) { + String lonValue = lonCell.toString().replace(",", ""); + String latValue = latCell.toString().replace(",", ""); + + double rowLon = Double.parseDouble(lonValue); + double rowLat = Double.parseDouble(latValue); + + // 위도 경도에 일치하는 지역코드 + if (lon == rowLon && lat == rowLat) { + String stnId = row.getCell(0).toString(); + regionCode = stnId; + break; // 일치하는 stn_id를 찾으면 반복 종료 + } + } + } + } + workbook.close(); + } catch (IOException e) { + throw new WeatherExceptionHandler(WeatherErrorCode.WEATHER_MAIN_ERROR); + } + return regionCode; + } } diff --git a/weather-service/src/main/java/com/waither/weatherservice/openapi/OpenApiUtil.java b/weather-service/src/main/java/com/waither/weatherservice/openapi/OpenApiUtil.java index 540aa163..4288c55a 100644 --- a/weather-service/src/main/java/com/waither/weatherservice/openapi/OpenApiUtil.java +++ b/weather-service/src/main/java/com/waither/weatherservice/openapi/OpenApiUtil.java @@ -29,12 +29,8 @@ @RequiredArgsConstructor public class OpenApiUtil { - public static final String ENCODING = "UTF-8"; - public static final String RESPONSE_EXCEPTION_MSG = "Response is null"; @Value("${openapi.forecast.key}") private String forecastKey; - @Value("${openapi.disasterMsg.key}") - private String disasterMsgKey; @Value("${openapi.accuweather.key}") private String accuweatherKey; @@ -153,6 +149,7 @@ public String convertLocalDateToString(LocalDate localDate) { return localDate.format(formatter); } + // TODO AccuWeather 대기 정보로 변경 예정 public List callAirKorea(String searchDate) throws URISyntaxException { int pageNo = 1; int numOfRows = 10; @@ -203,7 +200,6 @@ public Map parseAirKoreaResponseToMap(String data) { .map(s -> s.split(" : ")) .collect(HashMap::new, (m, arr) -> m.put(arr[0], arr[1]), HashMap::putAll); - // TODO 삭제 예정 map.forEach((key, value) -> log.info(key + " -> " + value)); return map; diff --git a/weather-service/src/main/java/com/waither/weatherservice/service/WeatherService.java b/weather-service/src/main/java/com/waither/weatherservice/service/WeatherService.java index 991b1266..317010a1 100644 --- a/weather-service/src/main/java/com/waither/weatherservice/service/WeatherService.java +++ b/weather-service/src/main/java/com/waither/weatherservice/service/WeatherService.java @@ -113,10 +113,12 @@ public void createDailyWeather(int nx, } - public void createWeatherAdvisory(String location) throws URISyntaxException, IOException { + public void createWeatherAdvisory(double latitude, double longitude) throws URISyntaxException, IOException { LocalDate now = LocalDate.now(); String today = openApiUtil.convertLocalDateToString(now); + String location = gpsTransfer.convertGpsToRegionCode(latitude, longitude); + List items = openApiUtil.callAdvisoryApi(location, today); String msg = items.get(0).getTitle(); diff --git a/weather-service/src/main/resources/api/Region.xlsx b/weather-service/src/main/resources/api/Region.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..6f2a44ee803e469fe8bb25f779ff254adf3baff6 GIT binary patch literal 63838 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%0DhmGoOXN=Tqr*G+*mg^#io$UIibRNRaeZ%>k&dnZ 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 literal 0 HcmV?d00001