diff --git a/pav-server/src/main/java/com/palnet/biz/api/comn/coordinate/service/ComnCoordinateService.java b/pav-server/src/main/java/com/palnet/biz/api/comn/coordinate/service/ComnCoordinateService.java index 19ca91bf..333f93fd 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/comn/coordinate/service/ComnCoordinateService.java +++ b/pav-server/src/main/java/com/palnet/biz/api/comn/coordinate/service/ComnCoordinateService.java @@ -5,9 +5,13 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.regex.Pattern; +import java.util.stream.Collectors; import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; import com.palnet.biz.api.comn.coordinate.model.*; +import com.palnet.biz.jpa.entity.ComAdmDistrictBas; +import com.palnet.biz.jpa.repository.com.ComAdmDistrictBasRepository; import com.palnet.biz.jpa.repository.flt.FltCptAuthAdmDistrictRelRepository; import com.palnet.comn.code.ErrorCode; import com.palnet.comn.exception.CustomException; @@ -29,6 +33,8 @@ import lombok.RequiredArgsConstructor; @Slf4j public class ComnCoordinateService { + private final ComAdmDistrictBasRepository comAdmDistrictBasRepository; + private final FltCptAuthAdmDistrictRelRepository fltCptAuthAdmDistrictRelRepository; private final FltCptAuthAdminDistrictBasQueryRepository fltCptAuthAdminDistrictBasQueryRepository; @@ -99,7 +105,7 @@ public class ComnCoordinateService { String regexp = this.getLowScopeRegexp(address); - List lowAddress = fltCptAuthAdmDistrictRelRepository.findLowestAdmSectNmByPattren(regexp); + List lowAddress = comAdmDistrictBasRepository.findLowestAdmSectNmByPattren(regexp); SearchLowAddressRS result = new SearchLowAddressRS(); result.setLowAddressList(lowAddress); @@ -159,13 +165,47 @@ public class ComnCoordinateService { for(LocationCdAddressModel model : addressList){ try { String scope = CoordUtils.getInstance().getScope(model.getAddress()); - List locationCoordinateModelList = CoordUtils.getInstance().getCoordinateByAddress(model.getAdmCd(), scope); - SearchDepartmentBoundaryRS.BoundaryModel boundaryModel = new SearchDepartmentBoundaryRS.BoundaryModel(); - boundaryModel.setCoordinates(locationCoordinateModelList); - boundaryModel.setLocation(model.getAddress()); - boundaryModels.add(boundaryModel); + List locationCoordinateModelList = null; + Boolean accurateSearch = false; + try { + locationCoordinateModelList = CoordUtils.getInstance().getCoordinateByAddress(model.getAdmCd(), scope); + } catch (CustomException e){ + log.error("FAIL INFO => {} : {}", model.getAddress(), model.getAdmCd()); + log.error("",e); + + accurateSearch = this.accurateSearchValidation(model.getAddress()); + } + + // 경기도 용인시, 경기도 고양시 등 "~도 ~시"인 주소 데이터인 경우 "~도 ~시 ~구" 까지 데이터를 조회 + if(accurateSearch){ + String regexp = "^" + model.getAddress() + " [^ ]+구$"; + List entites = comAdmDistrictBasRepository.findLowestAdmCdByPattren(regexp); + + HashSet entitySet = new HashSet<>(entites); + entitySet.removeIf(node -> node.getAdmCd().equals(model.getAdmCd())); + + List entityList = new ArrayList<>(entitySet); + + for(ComAdmDistrictBas entity : entityList){ + List coordModelList = CoordUtils.getInstance().getCoordinateByAddress(entity.getAdmCd(), scope); + + SearchDepartmentBoundaryRS.BoundaryModel boundaryModel = new SearchDepartmentBoundaryRS.BoundaryModel(); + boundaryModel.setCoordinates(coordModelList); + boundaryModel.setLocation(entity.getAdmSectNm()); + + boundaryModels.add(boundaryModel); + } + } else { + SearchDepartmentBoundaryRS.BoundaryModel boundaryModel = new SearchDepartmentBoundaryRS.BoundaryModel(); + boundaryModel.setCoordinates(locationCoordinateModelList); + boundaryModel.setLocation(model.getAddress()); + + boundaryModels.add(boundaryModel); + } + + } catch (CustomException e){ log.error("FAIL INFO => {} : {}", model.getAddress(), model.getAdmCd()); log.error("",e); @@ -177,4 +217,10 @@ public class ComnCoordinateService { return result; } + + public Boolean accurateSearchValidation(String address){ + + + return Pattern.matches("^[^ ]+도 [^ ]+시$", address); + } } diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/repository/com/ComAdmDistrictBasRepository.java b/pav-server/src/main/java/com/palnet/biz/jpa/repository/com/ComAdmDistrictBasRepository.java index 5b58ab3c..0ad1fc5f 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/repository/com/ComAdmDistrictBasRepository.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/repository/com/ComAdmDistrictBasRepository.java @@ -2,8 +2,12 @@ package com.palnet.biz.jpa.repository.com; import com.palnet.biz.jpa.entity.ComAdmDistrictBas; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import java.util.List; + /** * packageName : com.palnet.biz.jpa.repository.com * fileName : ComAdmDistrictBasRepository @@ -17,4 +21,11 @@ import org.springframework.stereotype.Repository; */ @Repository public interface ComAdmDistrictBasRepository extends JpaRepository { + + @Query(value = "SELECT LOWEST_ADM_SECT_NM FROM COM_ADM_DISTRICT_BAS CADB WHERE CADB.ADM_SECT_NM REGEXP :pattern", nativeQuery = true) + public List findLowestAdmSectNmByPattren(@Param("pattern") String pattern); + + @Query(value = "SELECT * FROM COM_ADM_DISTRICT_BAS CADB WHERE CADB.ADM_SECT_NM REGEXP :pattern", nativeQuery = true) + public List findLowestAdmCdByPattren(@Param("pattern") String pattern); + } diff --git a/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltCptAuthAdmDistrictRelRepository.java b/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltCptAuthAdmDistrictRelRepository.java index d58280b5..ec24917a 100644 --- a/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltCptAuthAdmDistrictRelRepository.java +++ b/pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltCptAuthAdmDistrictRelRepository.java @@ -23,6 +23,5 @@ import java.util.List; @Repository public interface FltCptAuthAdmDistrictRelRepository extends JpaRepository { - @Query(value = "SELECT LOWEST_ADM_SECT_NM FROM COM_ADM_DISTRICT_BAS CADB WHERE CADB.ADM_SECT_NM REGEXP :pattern", nativeQuery = true) - public List findLowestAdmSectNmByPattren(@Param("pattern") String pattern); + } diff --git a/pav-server/src/main/java/com/palnet/comn/utils/CoordUtils.java b/pav-server/src/main/java/com/palnet/comn/utils/CoordUtils.java index 0faf2639..444c216b 100644 --- a/pav-server/src/main/java/com/palnet/comn/utils/CoordUtils.java +++ b/pav-server/src/main/java/com/palnet/comn/utils/CoordUtils.java @@ -251,27 +251,27 @@ public class CoordUtils { } - public JSONObject parseGeoJson(String path, Coordinate coordinate) throws IOException, ParseException { + public JSONObject parseGeoJson(String path, Coordinate coordinate){ List features = new ArrayList(); Point point = null; try(InputStream inputStream = new ClassPathResource(path).getInputStream(); - BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8192)) { - - JSONParser jsonParser = new JSONParser(); - - JSONObject jsonObject = (JSONObject) jsonParser.parse(reader); - + BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8192)) { - point = geometryFactory.createPoint(coordinate); - - features = (List) jsonObject.get("features"); - - }catch(Exception e) { - log.error("", e); - } + JSONParser jsonParser = new JSONParser(); + + JSONObject jsonObject = (JSONObject) jsonParser.parse(reader); + + + point = geometryFactory.createPoint(coordinate); + + features = (List) jsonObject.get("features"); + + }catch(Exception e) { + log.error("", e); + } return this.contains(features, point); @@ -355,10 +355,8 @@ public class CoordUtils { List locationCoordinateModelList = new ArrayList<>(); - InputStream inputStream = null; - try { - inputStream = new ClassPathResource(coordinateForderPath).getInputStream(); - BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8), 8192); + try (InputStream inputStream = new ClassPathResource(coordinateForderPath).getInputStream(); + BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8), 8192);) { JSONParser jsonParser = new JSONParser(); JSONObject jsonObject = (JSONObject) jsonParser.parse(reader); @@ -397,7 +395,6 @@ public class CoordUtils { locationCoordinateModelList.add(locationCoordinateModel); } - } catch (IOException | ParseException e) { log.error("", e); }