From fc5dfda2c7cf5eab244df406220b2ce250d893f6 Mon Sep 17 00:00:00 2001 From: JSoi Date: Tue, 19 Jul 2022 03:55:23 +0900 Subject: [PATCH] =?UTF-8?q?#18=20[Refactor]=20PublicNewApiService->PublicA?= =?UTF-8?q?piService=EB=A1=9C=20merge?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/service/PublicApiService.java | 90 +++++++++++++ .../api/service/PublicNewApiService.java | 121 ------------------ 2 files changed, 90 insertions(+), 121 deletions(-) delete mode 100644 src/main/java/com/mpnp/baechelin/api/service/PublicNewApiService.java diff --git a/src/main/java/com/mpnp/baechelin/api/service/PublicApiService.java b/src/main/java/com/mpnp/baechelin/api/service/PublicApiService.java index b7b5ab4..01144d4 100644 --- a/src/main/java/com/mpnp/baechelin/api/service/PublicApiService.java +++ b/src/main/java/com/mpnp/baechelin/api/service/PublicApiService.java @@ -5,13 +5,19 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import com.mpnp.baechelin.api.model.BarrierCode; +import com.mpnp.baechelin.api.model.PublicApiCategoryForm; +import com.mpnp.baechelin.api.model.PublicApiForm; import com.mpnp.baechelin.config.httpclient.HttpConfig; import com.mpnp.baechelin.api.dto.*; import com.mpnp.baechelin.api.model.LocationKeywordSearchForm; import com.mpnp.baechelin.store.domain.Category; import com.mpnp.baechelin.store.domain.Store; +import com.mpnp.baechelin.store.dto.StoreCardResponseDto; import com.mpnp.baechelin.store.repository.StoreRepository; +import com.mpnp.baechelin.store.service.StoreService; import lombok.AllArgsConstructor; +import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.*; @@ -44,6 +50,8 @@ public class PublicApiService { */ private final StoreRepository storeRepository; private final LocationService locationService; + private final StoreService storeService; + // private final HttpConfig httpConfig; // // public PublicApiResponseDto processApiToDBWithWebclientMono(PublicApiRequestDto publicApiRequestDto) throws UnsupportedEncodingException { @@ -173,6 +181,88 @@ private void saveDTO(List rows) { } } + public List processNewApi(String key, int requestSize, String siDoNm) { + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_XML); + headers.setAccept(List.of(MediaType.APPLICATION_XML)); + URI uri = UriComponentsBuilder + .fromUriString("http://apis.data.go.kr/B554287/DisabledPersonConvenientFacility/getDisConvFaclList") + .queryParam("serviceKey", key) + .queryParam("numOfRows", requestSize) + .queryParam("siDoNm", siDoNm) + .queryParam("faclTyCd", "UC0B01") + .build() + .encode() + .toUri(); + + RestTemplate restTemplate = new RestTemplate(); + log.warn(uri.toString()); + ResponseEntity resultRe = restTemplate.exchange( + uri, HttpMethod.GET, new HttpEntity<>(headers), PublicApiForm.class + ); + PublicApiForm result = resultRe.getBody(); + if (result == null || result.getServList()==null) return null; + List storeList = new ArrayList<>(); + for (PublicApiForm.ServList servList : result.getServList()) { + // servList + Barrier Free Tag 합치기 + category + List barrierTagList = processNewApiSecondStage(key, servList.getWfcltId()); + log.info("barrierlist : {}", barrierTagList.toString()); + Map infoMap = locationService.convertGeoAndStoreNameToKeyword(servList.getFaclLat(), servList.getFaclLng(), servList.getFaclNm()); + if ((boolean) infoMap.get("status")) { + int storeId = (Integer) infoMap.get("storeId"); + String category = (String) infoMap.get("category"); + String phoneNumber = (String) infoMap.get("phoneNumber"); + String storeName = (String) infoMap.get("storeName"); + Store nStore = new Store(storeId, servList, barrierTagList, phoneNumber, category, storeName); + if(!storeRepository.existsById(nStore.getId())){ + storeRepository.save(nStore); + storeList.add(nStore); + } + } + } + return storeList.stream().map(StoreCardResponseDto::new).collect(Collectors.toList()); + } + + public List processNewApiSecondStage(String key, String sisulNum) { + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_XML); + headers.setAccept(List.of(MediaType.APPLICATION_XML)); + URI uri = UriComponentsBuilder + .fromUriString("http://apis.data.go.kr/B554287/DisabledPersonConvenientFacility/getFacInfoOpenApiJpEvalInfoList") + .queryParam("serviceKey", key) + .queryParam("wfcltId", sisulNum) + .build() + .encode() + .toUri(); + + RestTemplate restTemplate = new RestTemplate(); + log.warn(uri.toString()); + ResponseEntity resultRe = restTemplate.exchange( + uri, HttpMethod.GET, new HttpEntity<>(headers), PublicApiCategoryForm.class + ); + PublicApiCategoryForm result = resultRe.getBody(); + List barrierTagResult = new ArrayList<>(); // 태그 결과들을 담을 리스트 + if (result == null || result.getServList() == null) { + return barrierTagResult; + } else { + PublicApiCategoryForm.ServList first = result.getServList().stream().findFirst().orElse(null); + // Input 한 개당 하나의 배리어 프리 정보가 생성되므로 하나만 찾는다 + if (first != null && first.getEvalInfo() != null) { // 결과가 존재할 떄 + String[] splitInput = first.getEvalInfo().split(","); + return Arrays.stream(splitInput) + .map(BarrierCode::getColumnFromDesc) + .filter(code -> code != null && !code.equals("")) + .collect(Collectors.toList()); + } + } + return barrierTagResult; + } + + /* + *계단 또는 승강설비,대변기,복도,소변기,일반사항,장애인전용주차구역,주출입구 높이차이 제거,주출입구 접근로,출입구(문),해당시설 층수 + * */ + + private String categoryFilter(String category) { if (category == null) { return Category.ETC.getDesc(); diff --git a/src/main/java/com/mpnp/baechelin/api/service/PublicNewApiService.java b/src/main/java/com/mpnp/baechelin/api/service/PublicNewApiService.java deleted file mode 100644 index 0d0d26b..0000000 --- a/src/main/java/com/mpnp/baechelin/api/service/PublicNewApiService.java +++ /dev/null @@ -1,121 +0,0 @@ -package com.mpnp.baechelin.api.service; - -import com.mpnp.baechelin.api.dto.PublicApiRequestDto; -import com.mpnp.baechelin.api.dto.PublicApiResponseDto; -import com.mpnp.baechelin.api.model.PublicApiCategoryForm; -import com.mpnp.baechelin.api.model.PublicApiForm; -import com.mpnp.baechelin.store.domain.Store; -import com.mpnp.baechelin.store.service.StoreService; -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.http.*; -import org.springframework.stereotype.Service; -import org.springframework.web.client.RestTemplate; -import org.springframework.web.util.UriComponentsBuilder; - -import java.net.URI; -import java.util.*; -import java.util.stream.Collectors; - -@RequiredArgsConstructor -@Slf4j -@Service -public class PublicNewApiService { - private final StoreService storeService; - - public PublicApiForm processNewApi(String key, int requestSize, String siDoNm) { - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_XML); - headers.setAccept(List.of(MediaType.APPLICATION_XML)); - URI uri = UriComponentsBuilder - .fromUriString("http://apis.data.go.kr/B554287/DisabledPersonConvenientFacility/getDisConvFaclList") - .queryParam("serviceKey", key) - .queryParam("numOfRows", requestSize) - .queryParam("siDoNm", siDoNm) - .queryParam("faclTyCd", "UC0B01") - .build() - .encode() - .toUri(); - - RestTemplate restTemplate = new RestTemplate(); - log.warn(uri.toString()); - ResponseEntity resultRe = restTemplate.exchange( - uri, HttpMethod.GET, new HttpEntity<>(headers), PublicApiForm.class - ); - PublicApiForm result = resultRe.getBody(); - if (result == null) return null; - List storeList = new ArrayList<>(); - for (PublicApiForm.ServList servList : result.getServList()) { - // servList + Barrier Free Tag 합치기 - List barrierTagList = processNewApiSecondStage(key, servList.getWfcltId()); - log.info("barrierlist : {}", barrierTagList.toString()); -// storeService.addNewPublicApiObj(servList, barrierTagList); - } - return result; - } - - public List processNewApiSecondStage(String key, String sisulNum) { - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_XML); - headers.setAccept(List.of(MediaType.APPLICATION_XML)); - URI uri = UriComponentsBuilder - .fromUriString("http://apis.data.go.kr/B554287/DisabledPersonConvenientFacility/getFacInfoOpenApiJpEvalInfoList") - .queryParam("serviceKey", key) - .queryParam("wfcltId", sisulNum) - .build() - .encode() - .toUri(); - - RestTemplate restTemplate = new RestTemplate(); - log.warn(uri.toString()); - ResponseEntity resultRe = restTemplate.exchange( - uri, HttpMethod.GET, new HttpEntity<>(headers), PublicApiCategoryForm.class - ); - PublicApiCategoryForm result = resultRe.getBody(); - List barrierTagResult = new ArrayList<>(); // 태그 결과들을 담을 리스트 - if (result == null || result.getServList() == null) { - return barrierTagResult; - } else { - PublicApiCategoryForm.ServList first = result.getServList().stream().findFirst().orElse(null); - // Input 한 개당 하나의 배리어 프리 정보가 생성되므로 하나만 찾는다 - if (first != null && first.getEvalInfo() != null) { // 결과가 존재할 떄 - String[] splitInput = first.getEvalInfo().split(","); - return Arrays.stream(splitInput) - .map(BarrierCode::getColumnFromDesc) - .filter(code -> code != null && !code.equals("")) - .collect(Collectors.toList()); - } - } - return barrierTagResult; - } - - /* - *계단 또는 승강설비,대변기,복도,소변기,일반사항,장애인전용주차구역,주출입구 높이차이 제거,주출입구 접근로,출입구(문),해당시설 층수 - * */ - @Getter - protected enum BarrierCode { - ELEVATOR("계단 또는 승강설비", "elevator"), - TOILET_A("소변기", "toilet"), - TOILET_B("대변기", "toilet"), - PARKING("장애인전용주차구역", "parking"), - HEIGHT_DIFFERENCE("주출입구 높이차이 제거", "height_different"), - APPROACH("주출입구 접근로", "approach"), - ETC("", null); - private final String desc; - private final String columnName; - - BarrierCode(String desc, String columnName) { - this.desc = desc; - this.columnName = columnName; - } - - private static String getColumnFromDesc(String desc) { - BarrierCode barrierCode = Arrays.stream(BarrierCode.values()) - .filter(b -> b.getDesc().equals(desc)).findFirst().orElse(ETC); - return barrierCode.getColumnName(); - } - - } - -}