puzhibing
5 天以前 10b15315adbf81a2d88f22b33da11030c07f1918
UserFBTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GDMapElectricFenceUtil.java
@@ -33,9 +33,98 @@
    @Autowired
    private IGDInterfaceService gdInterfaceService;
    private String key = "ca723c3c8a78962a7751129ae035dc9d";
    @Autowired
    private GDKeyManager gdKeyManager;
    private JSONArray jsonArray = new JSONArray();
    /**
     * 执行GET请求:key次数用完时自动切换可用key重试
     */
    private String doGetWithRetry(String baseUrl) {
        String lastResp = null;
        int maxAttempts = 5;
        for (int i = 0; i < maxAttempts; i++) {
            String key = gdKeyManager.getKey();
            String url = baseUrl + (baseUrl.contains("?") ? "&" : "?") + "key=" + key;
            String resp = restTemplate.getForObject(url, String.class);
            lastResp = resp;
            JSONObject jsonObject;
            try {
                jsonObject = JSON.parseObject(resp);
            } catch (Exception e) {
                return resp;
            }
            if (GDKeyManager.isWebKeyExhausted(jsonObject)) {
                gdKeyManager.reportExhausted(key);
                continue;
            }
            return resp;
        }
        return lastResp;
    }
    /**
     * 执行POST请求(JSON体):key次数用完时自动切换可用key重试
     */
    private String doPostJsonWithRetry(String baseUrl, String jsonBody) {
        String lastResp = null;
        int maxAttempts = 5;
        HttpHeaders headers = new HttpHeaders();
        MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
        headers.setContentType(type);
        headers.add("Accept", MediaType.APPLICATION_JSON.toString());
        for (int i = 0; i < maxAttempts; i++) {
            String key = gdKeyManager.getKey();
            String url = baseUrl + (baseUrl.contains("?") ? "&" : "?") + "key=" + key;
            HttpEntity<String> formEntity = new HttpEntity<>(jsonBody, headers);
            String resp = restTemplate.postForObject(url, formEntity, String.class);
            lastResp = resp;
            JSONObject jsonObject;
            try {
                jsonObject = JSON.parseObject(resp);
            } catch (Exception e) {
                return resp;
            }
            if (GDKeyManager.isWebKeyExhausted(jsonObject)) {
                gdKeyManager.reportExhausted(key);
                continue;
            }
            return resp;
        }
        return lastResp;
    }
    /**
     * 执行PATCH请求(JSON体):key次数用完时自动切换可用key重试
     */
    private String doPatchJsonWithRetry(String baseUrl, String jsonBody) {
        String lastResp = null;
        int maxAttempts = 5;
        HttpHeaders headers = new HttpHeaders();
        MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
        headers.setContentType(type);
        headers.add("Accept", MediaType.APPLICATION_JSON.toString());
        for (int i = 0; i < maxAttempts; i++) {
            String key = gdKeyManager.getKey();
            String url = baseUrl + (baseUrl.contains("?") ? "&" : "?") + "key=" + key;
            HttpEntity<String> formEntity = new HttpEntity<>(jsonBody, headers);
            String resp = restTemplate.patchForObject(url, formEntity, String.class);
            lastResp = resp;
            JSONObject jsonObject;
            try {
                jsonObject = JSON.parseObject(resp);
            } catch (Exception e) {
                return resp;
            }
            if (GDKeyManager.isWebKeyExhausted(jsonObject)) {
                gdKeyManager.reportExhausted(key);
                continue;
            }
            return resp;
        }
        return lastResp;
    }
    @Bean
@@ -81,14 +170,7 @@
            json.put("alert_condition", "enter;leave");
            json.put("desc", id);
            HttpHeaders headers = new HttpHeaders();
            MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
            headers.setContentType(type);
            headers.add("Accept", MediaType.APPLICATION_JSON.toString());
            HttpEntity<String> formEntity = new HttpEntity<>(json.toString(), headers);
            String url = "https://restapi.amap.com/v4/geofence/meta?key=" + key;
            String js = restTemplate.postForObject(url, formEntity, String.class);
            String js = doPostJsonWithRetry("https://restapi.amap.com/v4/geofence/meta", json.toString());
            JSONObject jsonObject = JSON.parseObject(js);
            JSONObject data = jsonObject.getJSONObject("data");
            String status = data.getString("status");
@@ -148,8 +230,8 @@
     * 查询以创建的所有电子围栏
     */
    public String findElectricFenc(String center, String radius, String points){
        String url = "https://restapi.amap.com/v4/geofence/meta?key=" + key;
        String forObject = restTemplate.getForObject(url, String.class);
        String url = "https://restapi.amap.com/v4/geofence/meta";
        String forObject = doGetWithRetry(url);
        JSONObject jsonObject = JSON.parseObject(forObject);
        JSONObject data = jsonObject.getJSONObject("data");
@@ -185,8 +267,8 @@
        if(page == 1){
            jsonArray = new JSONArray();
        }
        String url = "https://restapi.amap.com/v4/geofence/meta?key=" + key + "&page_no=" + page + "&page_size=" + 30;
        String forObject = restTemplate.getForObject(url, String.class);
        String url = "https://restapi.amap.com/v4/geofence/meta?page_no=" + page + "&page_size=" + 30;
        String forObject = doGetWithRetry(url);
        JSONObject jsonObject = JSON.parseObject(forObject);
        JSONObject data = jsonObject.getJSONObject("data");
        JSONArray rs_list = data.getJSONArray("rs_list");
@@ -275,14 +357,8 @@
        json.put("alert_condition", "enter;leave");
        json.put("desc", id + "围栏更新描述");
        HttpHeaders headers = new HttpHeaders();
        MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
        headers.setContentType(type);
        headers.add("Accept", MediaType.APPLICATION_JSON.toString());
        HttpEntity<String> formEntity = new HttpEntity<>(json.toString(), headers);
        String url = "https://restapi.amap.com/v4/geofence/meta?key=" + key + "&gid=" + gid;
        String s = restTemplate.patchForObject(url, formEntity, String.class);
        String url = "https://restapi.amap.com/v4/geofence/meta?gid=" + gid;
        String s = doPatchJsonWithRetry(url, json.toString());
        System.out.println(s);
//        gdInterfaceService.saveData("https://restapi.amap.com/v4/geofence/meta", "更新电子围栏");
@@ -304,8 +380,8 @@
            diu = "B78F99DD-2496-4A43-843B-172CDA2D9798";
        }
        locations = locations + "," + (new Date().getTime() / 1000);
        String url = "https://restapi.amap.com/v4/geofence/status?key=" + key + "&diu=" + diu + "&locations=" + locations;
        String forObject = restTemplate.getForObject(url, String.class);
        String url = "https://restapi.amap.com/v4/geofence/status?diu=" + diu + "&locations=" + locations;
        String forObject = doGetWithRetry(url);
        JSONObject jsonObject = JSON.parseObject(forObject);
        List<String> ids = new ArrayList<>();
        JSONObject data = jsonObject.getJSONObject("data");
@@ -334,7 +410,7 @@
     * @return
     */
    public boolean deleteElectricFenc(String gid){
        restTemplate.delete("https://restapi.amap.com/v4/geofence/meta?key={1}&gid={2}", key, gid);
        restTemplate.delete("https://restapi.amap.com/v4/geofence/meta?key={1}&gid={2}", gdKeyManager.getKey(), gid);
        System.out.println("删除:" );
//        gdInterfaceService.saveData("https://restapi.amap.com/v4/geofence/meta", "删除电子围栏");
@@ -351,9 +427,9 @@
     * @return
     */
    public Map<String, String> getDistance(String origins, String destination, Integer type){
        String url = "https://restapi.amap.com/v3/distance?key=" + key + "&origins=" + origins + "&destination=" + destination +
        String url = "https://restapi.amap.com/v3/distance?origins=" + origins + "&destination=" + destination +
                "&type=" + type;
        String forObject = restTemplate.getForObject(url, String.class);
        String forObject = doGetWithRetry(url);
        JSONObject jsonObject = JSON.parseObject(forObject);
        String status = jsonObject.getString("status");
@@ -381,9 +457,9 @@
     * @return
     */
    public Map<String, String> getDriving(String origins, String destination, String waypoints){
        String url = "https://restapi.amap.com/v3/direction/driving?key=" + key + "&origin=" + origins + "&destination=" + destination +
        String url = "https://restapi.amap.com/v3/direction/driving?origin=" + origins + "&destination=" + destination +
                "&waypoints=" + waypoints + "&extensions=base&strategy=0";
        String forObject = restTemplate.getForObject(url, String.class);
        String forObject = doGetWithRetry(url);
        JSONObject jsonObject = JSON.parseObject(forObject);
        String status = jsonObject.getString("status");