Browse Source

refactor: 특정 행정구역 로직 보완

feature/address-coordinate
lkd9125(이경도) 2 months ago
parent
commit
d42fea4905
  1. 58
      pav-server/src/main/java/com/palnet/biz/api/comn/coordinate/service/ComnCoordinateService.java
  2. 11
      pav-server/src/main/java/com/palnet/biz/jpa/repository/com/ComAdmDistrictBasRepository.java
  3. 3
      pav-server/src/main/java/com/palnet/biz/jpa/repository/flt/FltCptAuthAdmDistrictRelRepository.java
  4. 35
      pav-server/src/main/java/com/palnet/comn/utils/CoordUtils.java

58
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<String> lowAddress = fltCptAuthAdmDistrictRelRepository.findLowestAdmSectNmByPattren(regexp);
List<String> 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<CoordUtils.LocationCoordinateModel> locationCoordinateModelList = CoordUtils.getInstance().getCoordinateByAddress(model.getAdmCd(), scope);
SearchDepartmentBoundaryRS.BoundaryModel boundaryModel = new SearchDepartmentBoundaryRS.BoundaryModel();
boundaryModel.setCoordinates(locationCoordinateModelList);
boundaryModel.setLocation(model.getAddress());
boundaryModels.add(boundaryModel);
List<CoordUtils.LocationCoordinateModel> 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<ComAdmDistrictBas> entites = comAdmDistrictBasRepository.findLowestAdmCdByPattren(regexp);
HashSet<ComAdmDistrictBas> entitySet = new HashSet<>(entites);
entitySet.removeIf(node -> node.getAdmCd().equals(model.getAdmCd()));
List<ComAdmDistrictBas> entityList = new ArrayList<>(entitySet);
for(ComAdmDistrictBas entity : entityList){
List<CoordUtils.LocationCoordinateModel> 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);
}
}

11
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<ComAdmDistrictBas, String> {
@Query(value = "SELECT LOWEST_ADM_SECT_NM FROM COM_ADM_DISTRICT_BAS CADB WHERE CADB.ADM_SECT_NM REGEXP :pattern", nativeQuery = true)
public List<String> 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<ComAdmDistrictBas> findLowestAdmCdByPattren(@Param("pattern") String pattern);
}

3
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<FltCptAuthAdmDistrictRel, FltCptAuthAdmDistrictRelPk> {
@Query(value = "SELECT LOWEST_ADM_SECT_NM FROM COM_ADM_DISTRICT_BAS CADB WHERE CADB.ADM_SECT_NM REGEXP :pattern", nativeQuery = true)
public List<String> findLowestAdmSectNmByPattren(@Param("pattern") String pattern);
}

35
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<JSONObject> features = new ArrayList<JSONObject>();
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>) 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>) jsonObject.get("features");
}catch(Exception e) {
log.error("", e);
}
return this.contains(features, point);
@ -355,10 +355,8 @@ public class CoordUtils {
List<LocationCoordinateModel> 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);
}

Loading…
Cancel
Save