From dca4e278611c8e671566d8eddce7cf69268346ac Mon Sep 17 00:00:00 2001 From: hly <2783385703@qq.com> Date: Thu, 28 Aug 2025 11:56:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/jeecg/api/service/impl/LogisticsUtil.java | 49 +++++++++++++++++----- 1 file changed, 38 insertions(+), 11 deletions(-) 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;