package com.stylefeng.guns.modular.system.util; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.stereotype.Component; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; /** * 高德猎鹰服务 */ @Component public class GDFalconUtil implements ApplicationRunner { private String key = "94fb3bba5b141c701cbdcab72fe9d9cf"; @Autowired private RestTemplate restTemplate; private static String serverId = null; public String getServerId() { return serverId; } /** * 服务启动后执行的代码 * @param args * @throws Exception */ @Override public void run(ApplicationArguments args) throws Exception { this.init(); } /** * 初始化创建服务 */ public void init(){ if(serverId == null){ JSONArray jsonArray = this.selectServer(); if(null == jsonArray){ serverId = this.createServer("server"); }else{ serverId = jsonArray.getJSONObject(0).getString("sid"); } } } /** * 创建新的服务 * @return */ public String createServer(String name){ String url = "https://tsapi.amap.com/v1/track/service/add"; //调用推送 HttpHeaders headers = new HttpHeaders(); // 以表单的方式提交 headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); //将请求头部和参数合成一个请求 MultiValueMap params = new LinkedMultiValueMap<>(); params.add("key", key); params.add("name", name); HttpEntity> requestEntity = new HttpEntity<>(params, headers); String s = restTemplate.postForObject(url, requestEntity , String.class); JSONObject jsonObject = JSON.parseObject(s); if(jsonObject.getIntValue("errcode") == 10000){ JSONObject data = jsonObject.getJSONObject("data"); if(null != data){ return data.getString("sid"); } } return null; } /** * 查询服务 * @return */ private JSONArray selectServer(){ String url = "https://tsapi.amap.com/v1/track/service/list?key=" + key; String forObject = restTemplate.getForObject(url, String.class); JSONObject jsonObject = JSON.parseObject(forObject); if(jsonObject.getIntValue("errcode") == 10000){ JSONObject data = jsonObject.getJSONObject("data"); if(null != data){ return data.getJSONArray("results"); } } return null; } /** * 创建终端数据 * @param name * @return */ public String createTerminal(String name){ String tid = this.selectTerminal(name); if(tid != null){ return tid; } String url = "https://tsapi.amap.com/v1/track/terminal/add"; //调用推送 HttpHeaders headers = new HttpHeaders(); // 以表单的方式提交 headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); //将请求头部和参数合成一个请求 MultiValueMap params = new LinkedMultiValueMap<>(); params.add("key", key); params.add("sid", serverId); params.add("name", name); HttpEntity> requestEntity = new HttpEntity<>(params, headers); String s = restTemplate.postForObject(url, requestEntity , String.class); JSONObject jsonObject = JSON.parseObject(s); if(jsonObject.getIntValue("errcode") == 10000){ JSONObject data = jsonObject.getJSONObject("data"); return data.getString("tid"); } System.err.println(jsonObject.getString("errmsg")); return null; } /** * 查询终端 * @param name * @return */ public String selectTerminal(String name){ String url = "https://tsapi.amap.com/v1/track/terminal/list?key=" + key + "&sid=" + serverId + "&name=" + name; String forObject = restTemplate.getForObject(url, String.class); JSONObject jsonObject = JSON.parseObject(forObject); if(jsonObject.getIntValue("errcode") == 10000){ JSONObject data = jsonObject.getJSONObject("data"); int count = 0; if(null != data){ count = data.getIntValue("count"); } if(count > 0){ JSONObject results = data.getJSONArray("results").getJSONObject(0); return results.getString("tid"); }else{ return this.createTerminal(name); } } return null; } /** * 创建轨迹 * @param tid 终端id * @return */ public String createTrack(String tid){ String url = "https://tsapi.amap.com/v1/track/trace/add"; //调用推送 HttpHeaders headers = new HttpHeaders(); // 以表单的方式提交 headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); //将请求头部和参数合成一个请求 MultiValueMap params = new LinkedMultiValueMap<>(); params.add("key", key); params.add("sid", serverId); params.add("tid", tid); HttpEntity> requestEntity = new HttpEntity<>(params, headers); String s = restTemplate.postForObject(url, requestEntity , String.class); JSONObject jsonObject = JSON.parseObject(s); if(jsonObject.getIntValue("errcode") == 10000){ return jsonObject.getString("data"); } System.err.println(jsonObject.getString("errmsg")); return null; } /** * 删除轨迹 * @param tid 终端id * @param trid 轨迹id */ public void deleteTrack(String tid, String trid){ String url = "https://tsapi.amap.com/v1/track/trace/delete"; //调用推送 HttpHeaders headers = new HttpHeaders(); // 以表单的方式提交 headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); //将请求头部和参数合成一个请求 MultiValueMap params = new LinkedMultiValueMap<>(); params.add("key", key); params.add("sid", serverId); params.add("tid", tid); params.add("trid", trid); HttpEntity> requestEntity = new HttpEntity<>(params, headers); String s = restTemplate.postForObject(url, requestEntity , String.class); JSONObject jsonObject = JSON.parseObject(s); if(jsonObject.getIntValue("errcode") != 10000){ System.err.println(jsonObject.getString("errmsg")); } } // // public Map queryTrsearch(){ // // } }