浏览代码

营销系统-IP修改

wangcl 1 周之前
父节点
当前提交
7ab4962b01

+ 21 - 42
pig-marketing/pig-marketing-biz/src/main/java/com/pig4cloud/pig/marketing/util/IPLocationUtil.java

@@ -146,55 +146,34 @@ public class IPLocationUtil {
      * @return 三级地址信息,格式:国家-省-市
      */
     private String getFullAddressFromIp2region(String ip) {
-        if (searcher == null) {
-            log.warn("ip2region搜索器未初始化,无法查询IP归属地");
-            return null;
-        }
-        
         try {
-            String region = searcher.search(ip);
-            if (region == null || region.trim().isEmpty()) {
+            // 统一委托给 IPUtils,避免本地 Searcher 与库/数据版本不一致
+            String region = IPUtils.getIpRegion(ip);
+            if (region == null || region.trim().isEmpty() || "未知".equals(region) || "内网".equals(region)) {
                 return null;
             }
-            
-            // ip2region返回格式:国家|0|省份|城市|ISP
-            List<String> arr = cn.hutool.core.util.StrUtil.split(region, '|');
-            if (arr.size() >= 4) {
-                String country = "0".equals(arr.get(0)) ? null : arr.get(0);
-                String province = "0".equals(arr.get(2)) ? null : arr.get(2);
-                String city = "0".equals(arr.get(3)) ? null : arr.get(3);
-                
-                // 构建三级地址
-                StringBuilder address = new StringBuilder();
-                
-                if (country != null && !country.trim().isEmpty()) {
-                    address.append(country);
-                    
-                    if (province != null && !province.trim().isEmpty()) {
-                        address.append("-").append(province);
-                        
-                        if (city != null && !city.trim().isEmpty()) {
-                            address.append("-").append(city);
-                        } else {
-                            // 没有城市信息,使用省份作为城市
-                            address.append("-").append(province);
-                        }
-                    } else {
-                        // 没有省份信息,使用国家作为省份和城市
-                        address.append("-").append(country).append("-").append(country);
-                    }
-                } else {
-                    // 没有国家信息,无法解析
-                    return null;
-                }
-                
-                return address.toString();
+
+            // IPUtils 返回通常为 "国家-省" 或仅 "国家"
+            List<String> arr = cn.hutool.core.util.StrUtil.split(region, '-');
+            String country = arr.size() >= 1 ? arr.get(0) : null;
+            String province = arr.size() >= 2 ? arr.get(1) : null;
+
+            if (country == null || country.trim().isEmpty()) {
+                return null;
             }
-            
+
+            StringBuilder address = new StringBuilder();
+            address.append(country);
+            if (province != null && !province.trim().isEmpty()) {
+                address.append("-").append(province).append("-").append(province);
+            } else {
+                // 没有省份信息,用国家补齐三级
+                address.append("-").append(country).append("-").append(country);
+            }
+            return address.toString();
         } catch (Exception e) {
             log.warn("查询IP[{}]归属地出错", ip, e);
         }
-        
         return null;
     }