diff --git a/module-common/src/main/java/org/jeecg/api/service/impl/LogisticsUtil.java b/module-common/src/main/java/org/jeecg/api/service/impl/LogisticsUtil.java index 4705c48..dd6cbf7 100644 --- a/module-common/src/main/java/org/jeecg/api/service/impl/LogisticsUtil.java +++ b/module-common/src/main/java/org/jeecg/api/service/impl/LogisticsUtil.java @@ -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;