|
|
@ -20,7 +20,6 @@ import javax.annotation.PostConstruct; |
|
|
|
|
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.List; |
|
|
|
import java.util.UUID; |
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
@Slf4j |
|
|
@ -359,23 +358,51 @@ public class LogisticsUtil { |
|
|
|
if (provinceMatcher.find()) { |
|
|
|
province = provinceMatcher.group(1); |
|
|
|
list.add(province); |
|
|
|
|
|
|
|
// 特殊处理直辖市:北京、天津、上海、重庆 |
|
|
|
if ("北京市".equals(province) || "天津市".equals(province) || |
|
|
|
"上海市".equals(province) || "重庆市".equals(province)) { |
|
|
|
|
|
|
|
// 对于直辖市,省份和城市是同一个 |
|
|
|
city = province; |
|
|
|
list.add(city); |
|
|
|
|
|
|
|
// 直接匹配区县(从省份名称后开始匹配) |
|
|
|
java.util.regex.Pattern municipalityDistrictPattern = |
|
|
|
java.util.regex.Pattern.compile("(?<=" + java.util.regex.Pattern.quote(province) + ")(.*?区|.*?县)"); |
|
|
|
java.util.regex.Matcher municipalityDistrictMatcher = municipalityDistrictPattern.matcher(address); |
|
|
|
if (municipalityDistrictMatcher.find()) { |
|
|
|
district = municipalityDistrictMatcher.group(1); |
|
|
|
list.add(district); |
|
|
|
} |
|
|
|
|
|
|
|
log.info("直辖市地址解析 - 省份:{},城市:{},区县:{}", province, city, district); |
|
|
|
return list; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 非直辖市的处理逻辑 |
|
|
|
// 匹配城市(以市、自治州、地区、盟结尾) |
|
|
|
java.util.regex.Pattern cityPattern = java.util.regex.Pattern.compile("(?<=" + province + ")(.*?市|.*?自治州|.*?地区|.*?盟)"); |
|
|
|
java.util.regex.Matcher cityMatcher = cityPattern.matcher(address); |
|
|
|
if (cityMatcher.find()) { |
|
|
|
city = cityMatcher.group(1); |
|
|
|
list.add(city); |
|
|
|
if (!province.isEmpty()) { |
|
|
|
java.util.regex.Pattern cityPattern = java.util.regex.Pattern.compile("(?<=" + java.util.regex.Pattern.quote(province) + ")(.*?市|.*?自治州|.*?地区|.*?盟)"); |
|
|
|
java.util.regex.Matcher cityMatcher = cityPattern.matcher(address); |
|
|
|
if (cityMatcher.find()) { |
|
|
|
city = cityMatcher.group(1); |
|
|
|
list.add(city); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 匹配区县(以区、县、旗结尾) |
|
|
|
java.util.regex.Pattern districtPattern = java.util.regex.Pattern.compile("(?<=" + city + ")(.*?区|.*?县|.*?旗|.*?市)"); |
|
|
|
java.util.regex.Matcher districtMatcher = districtPattern.matcher(address); |
|
|
|
if (districtMatcher.find()) { |
|
|
|
district = districtMatcher.group(1); |
|
|
|
list.add(district); |
|
|
|
if (!city.isEmpty()) { |
|
|
|
java.util.regex.Pattern districtPattern = java.util.regex.Pattern.compile("(?<=" + java.util.regex.Pattern.quote(city) + ")(.*?区|.*?县|.*?旗|.*?市)"); |
|
|
|
java.util.regex.Matcher districtMatcher = districtPattern.matcher(address); |
|
|
|
if (districtMatcher.find()) { |
|
|
|
district = districtMatcher.group(1); |
|
|
|
list.add(district); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
log.info("地址解析结果 - 省份:{},城市:{},区县:{}", province, city, district); |
|
|
|
} |
|
|
|
|
|
|
|
return list; |
|
|
|