|
|
|
@ -7,8 +7,8 @@ import java.io.InputStreamReader;
|
|
|
|
|
import java.util.*; |
|
|
|
|
import java.util.regex.Pattern; |
|
|
|
|
|
|
|
|
|
import com.palnet.biz.api.comn.coordinate.model.SearchAddressCoordinateRQ; |
|
|
|
|
import com.palnet.biz.api.comn.coordinate.model.SearchAddressCoordinateRS; |
|
|
|
|
import com.palnet.biz.api.comn.coordinate.model.*; |
|
|
|
|
import com.palnet.biz.jpa.repository.flt.FltCptAuthAdmDistrictRelRepository; |
|
|
|
|
import com.palnet.comn.code.ErrorCode; |
|
|
|
|
import com.palnet.comn.exception.CustomException; |
|
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
@ -20,8 +20,6 @@ import org.locationtech.jts.geom.Coordinate;
|
|
|
|
|
import org.springframework.core.io.ClassPathResource; |
|
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
|
|
|
|
|
import com.palnet.biz.api.comn.coordinate.model.CompotentAuthorityRQ; |
|
|
|
|
import com.palnet.biz.api.comn.coordinate.model.CompotentAuthorityRS; |
|
|
|
|
import com.palnet.biz.jpa.entity.FltCptAuthBas; |
|
|
|
|
import com.palnet.biz.jpa.repository.flt.FltCptAuthAdminDistrictBasQueryRepository; |
|
|
|
|
import com.palnet.comn.utils.CoordUtils; |
|
|
|
@ -34,6 +32,8 @@ import lombok.RequiredArgsConstructor;
|
|
|
|
|
@Slf4j |
|
|
|
|
public class ComnCoordinateService { |
|
|
|
|
|
|
|
|
|
private final FltCptAuthAdmDistrictRelRepository fltCptAuthAdmDistrictRelRepository; |
|
|
|
|
|
|
|
|
|
private final FltCptAuthAdminDistrictBasQueryRepository fltCptAuthAdminDistrictBasQueryRepository; |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -55,7 +55,7 @@ public class ComnCoordinateService {
|
|
|
|
|
String[] scope = {"ctprvn", "sig", "emd", "li"}; |
|
|
|
|
final String cd = (String) code.get("CD"); |
|
|
|
|
|
|
|
|
|
Set<FltCptAuthBas> fltCptAuthBas = new HashSet<FltCptAuthBas>(); |
|
|
|
|
Set<FltCptAuthBas> fltCptAuthBas = new HashSet<>(); |
|
|
|
|
|
|
|
|
|
for(int i = 0; i < scope.length; i++){ |
|
|
|
|
String cdParam = this.codeParsing(cd, scope[i]); |
|
|
|
@ -73,64 +73,12 @@ public class ComnCoordinateService {
|
|
|
|
|
return result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private String codeParsing(String cd, String scope){ |
|
|
|
|
switch (scope) { |
|
|
|
|
case "ctprvn": |
|
|
|
|
|
|
|
|
|
if(cd.length() < 2) break; |
|
|
|
|
|
|
|
|
|
cd = cd.substring(0, 2); |
|
|
|
|
break; |
|
|
|
|
case "sig": |
|
|
|
|
|
|
|
|
|
if(cd.length() < 5) break; |
|
|
|
|
|
|
|
|
|
cd = cd.substring(0, 5); |
|
|
|
|
break; |
|
|
|
|
case "emd": |
|
|
|
|
|
|
|
|
|
if(cd.length() < 8) break; |
|
|
|
|
|
|
|
|
|
cd = cd.substring(0, 8); |
|
|
|
|
break; |
|
|
|
|
case "li": |
|
|
|
|
|
|
|
|
|
if(cd.length() < 10) break; |
|
|
|
|
|
|
|
|
|
cd = cd.substring(0, 10); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int length = cd.length(); |
|
|
|
|
int maxLength = 10; |
|
|
|
|
|
|
|
|
|
int difference = maxLength - length; |
|
|
|
|
|
|
|
|
|
StringBuilder sb = new StringBuilder(); |
|
|
|
|
sb.append(cd); |
|
|
|
|
|
|
|
|
|
for(int i = 0; i < difference; i++){ |
|
|
|
|
sb.append("0"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return sb.toString(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public SearchAddressCoordinateRS getCoordinateByAddress(SearchAddressCoordinateRQ rq) { |
|
|
|
|
|
|
|
|
|
String[] addressArray = rq.getAddress().split(" "); |
|
|
|
|
StringBuilder address = new StringBuilder(); |
|
|
|
|
|
|
|
|
|
for(int i = 0; i < addressArray.length; i++){ |
|
|
|
|
String addressNode = addressArray[i].replace(" ", ""); |
|
|
|
|
|
|
|
|
|
address.append(addressNode); |
|
|
|
|
if((addressArray.length - 1) != i) address.append(" "); |
|
|
|
|
} |
|
|
|
|
String address = rq.getAddress(); |
|
|
|
|
|
|
|
|
|
String searchAdmCd = fltCptAuthAdminDistrictBasQueryRepository.findAdmCdByAddress(address.toString()); |
|
|
|
|
String scope = this.getScope(address.toString()); |
|
|
|
|
String searchAdmCd = fltCptAuthAdminDistrictBasQueryRepository.findAdmCdByAddress(address); |
|
|
|
|
String scope = this.getScope(address); |
|
|
|
|
|
|
|
|
|
if(searchAdmCd == null) { |
|
|
|
|
throw new CustomException(ErrorCode.DATA_NOTFIND); |
|
|
|
@ -201,6 +149,98 @@ public class ComnCoordinateService {
|
|
|
|
|
return result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public SearchLowAddressRS getLowAddress(String address) { |
|
|
|
|
|
|
|
|
|
String regexp = this.getLowScopeRegexp(address); |
|
|
|
|
|
|
|
|
|
List<String> lowAddress = fltCptAuthAdmDistrictRelRepository.findLowestAdmSectNmByPattren(regexp); |
|
|
|
|
|
|
|
|
|
SearchLowAddressRS result = new SearchLowAddressRS(); |
|
|
|
|
result.setLowAddressList(lowAddress); |
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private String getLowScopeRegexp(String address){ |
|
|
|
|
|
|
|
|
|
String regexp = ""; |
|
|
|
|
|
|
|
|
|
if(address == null || address.isEmpty()){ |
|
|
|
|
regexp = "^[^ ]+(시|도)$"; |
|
|
|
|
return regexp; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
String scope = this.getScope(address); |
|
|
|
|
|
|
|
|
|
String[] addressNode = address.split(" "); |
|
|
|
|
|
|
|
|
|
if(address.equals("세종특별자치시")){ |
|
|
|
|
scope = "sig"; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
switch (scope){ |
|
|
|
|
case "ctprvn": |
|
|
|
|
regexp = "^" + address + " [^ ]+(구|군|시)$|" + "^" + address + " [^ ]+시 [^ ]+구$"; |
|
|
|
|
break; |
|
|
|
|
case "sig": |
|
|
|
|
regexp = "^" + address + " [^ ]+(동|읍|면)$"; |
|
|
|
|
break; |
|
|
|
|
case "emd": |
|
|
|
|
regexp = "^" + address + " [^ ]+리$"; |
|
|
|
|
break; |
|
|
|
|
case "li": |
|
|
|
|
throw new CustomException(ErrorCode.DATA_NO); |
|
|
|
|
default: |
|
|
|
|
throw new CustomException(ErrorCode.NON_VALID_PARAMETER); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return regexp; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private String codeParsing(String cd, String scope){ |
|
|
|
|
switch (scope) { |
|
|
|
|
case "ctprvn": |
|
|
|
|
|
|
|
|
|
if(cd.length() < 2) break; |
|
|
|
|
|
|
|
|
|
cd = cd.substring(0, 2); |
|
|
|
|
break; |
|
|
|
|
case "sig": |
|
|
|
|
|
|
|
|
|
if(cd.length() < 5) break; |
|
|
|
|
|
|
|
|
|
cd = cd.substring(0, 5); |
|
|
|
|
break; |
|
|
|
|
case "emd": |
|
|
|
|
|
|
|
|
|
if(cd.length() < 8) break; |
|
|
|
|
|
|
|
|
|
cd = cd.substring(0, 8); |
|
|
|
|
break; |
|
|
|
|
case "li": |
|
|
|
|
|
|
|
|
|
if(cd.length() < 10) break; |
|
|
|
|
|
|
|
|
|
cd = cd.substring(0, 10); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int length = cd.length(); |
|
|
|
|
int maxLength = 10; |
|
|
|
|
|
|
|
|
|
int difference = maxLength - length; |
|
|
|
|
|
|
|
|
|
StringBuilder sb = new StringBuilder(); |
|
|
|
|
sb.append(cd); |
|
|
|
|
|
|
|
|
|
for(int i = 0; i < difference; i++){ |
|
|
|
|
sb.append("0"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return sb.toString(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private String getScope(String address) { |
|
|
|
|
Map<String, String[]> patternMap = new HashMap<>(); |
|
|
|
|
patternMap.put("ctprvn", new String[]{ |
|
|
|
@ -304,5 +344,4 @@ public class ComnCoordinateService {
|
|
|
|
|
} |
|
|
|
|
return result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|