From 1f9454af3356f628c25c3e2e492869163731da56 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期五, 09 十月 2026 10:47:24 +0800
Subject: [PATCH] 修改bug

---
 ManagementFBTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GaoDeMapUtil.java |   64 ++++++++++++++++++++++----------
 1 files changed, 44 insertions(+), 20 deletions(-)

diff --git a/ManagementFBTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GaoDeMapUtil.java b/ManagementFBTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GaoDeMapUtil.java
index 89d066f..ed6452f 100644
--- a/ManagementFBTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GaoDeMapUtil.java
+++ b/ManagementFBTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GaoDeMapUtil.java
@@ -1,6 +1,8 @@
 package com.stylefeng.guns.modular.system.util;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.stylefeng.guns.core.util.SpringContextHolder;
 import org.apache.http.HttpEntity;
 import org.apache.http.client.config.RequestConfig;
 import org.apache.http.client.methods.CloseableHttpResponse;
@@ -25,35 +27,57 @@
     }
 
     /**
+     * 获取GDKeyManager(非Spring环境下返回null,如main测试)
+     */
+    private static GDKeyManager getKeyManager() {
+        try {
+            return SpringContextHolder.getBean(GDKeyManager.class);
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    /**
      * 根据地址查询经纬度
+     * key次数用完时自动切换可用key重试
      *
      * @param address
      * @return
      */
     public static JSONObject getLngAndLat(String address) {
         JSONObject positionObj = new JSONObject();
+        GDKeyManager keyManager = getKeyManager();
 
-        try {
-            // 拼接请求高德的url
-            String url = "http://restapi.amap.com/v3/geocode/geo?address=" + address + "&output=JSON&key=" + "ca723c3c8a78962a7751129ae035dc9d";
-            // 请求高德接口
-            String result = sendHttpGet(url);
-            JSONObject resultJOSN = JSONObject.parseObject(result);
-            System.out.println("高德接口返回原始数据:");
-            System.out.println(resultJOSN);
-            JSONArray geocodesArray = resultJOSN.getJSONArray("geocodes");
-            if (geocodesArray.size() > 0) {
-                String position = geocodesArray.getJSONObject(0).getString("location");
-                String[] lngAndLat = position.split(",");
-                String longitude = lngAndLat[0];
-                String latitude = lngAndLat[1];
-                positionObj.put("longitude", longitude);
-                positionObj.put("latitude", latitude);
+        int maxAttempts = 5;
+        for (int i = 0; i < maxAttempts; i++) {
+            String key = keyManager != null ? keyManager.getKey() : GDKeyManager.FALLBACK_KEY;
+            try {
+                // 拼接请求高德的url
+                String url = "http://restapi.amap.com/v3/geocode/geo?address=" + address + "&output=JSON&key=" + key;
+                // 请求高德接口
+                String result = sendHttpGet(url);
+                JSONObject resultJOSN = JSON.parseObject(result);
+                System.out.println("高德接口返回原始数据:");
+                System.out.println(resultJOSN);
+                if (GDKeyManager.isWebKeyExhausted(resultJOSN)) {
+                    if (keyManager != null) {
+                        keyManager.reportExhausted(key);
+                    }
+                    continue;
+                }
+                JSONArray geocodesArray = resultJOSN.getJSONArray("geocodes");
+                if (geocodesArray != null && geocodesArray.size() > 0) {
+                    String position = geocodesArray.getJSONObject(0).getString("location");
+                    String[] lngAndLat = position.split(",");
+                    String longitude = lngAndLat[0];
+                    String latitude = lngAndLat[1];
+                    positionObj.put("longitude", longitude);
+                    positionObj.put("latitude", latitude);
+                }
+                break;
+            } catch (Exception e) {
+                e.printStackTrace();
             }
-            geocodesArray.getJSONObject(0).getString("location");
-
-        } catch (Exception e) {
-            e.printStackTrace();
         }
         return positionObj;
     }

--
Gitblit v1.7.1