1.查詢所有電子圍欄

package com.skjd.util;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
public class HttpUtils {
// 代理伺服器的HTTP請求協定,用戶端真實IP字段名稱
public static final String X_REAL_IP = "x-forwarded-for";
public static String get(final String url) throws Exception {
String result = null;
CloseableHttpClient httpclient = HttpClients.createDefault();
try {
HttpGet httpGet = new HttpGet(url);
CloseableHttpResponse response = httpclient.execute(httpGet);
try {
System.out.println(response.getStatusLine());
HttpEntity entity = response.getEntity();
// do something useful with the response body
// and ensure it is fully consumed
result = org.apache.http.util.EntityUtils.toString(entity);
org.apache.http.util.EntityUtils.consume(entity);
} finally {
response.close();
}
} finally {
httpclient.close();
}
return result;
}
public static String post(final String url, final Map<String, String> param) throws Exception {
String result = null;
CloseableHttpClient httpclient = HttpClients.createDefault();
try {
HttpPost httpPost = new HttpPost("http://httpbin.org/post");
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
for (String key : param.keySet()) {
nvps.add(new BasicNameValuePair(key, param.get(key)));
}
httpPost.setEntity(new UrlEncodedFormEntity(nvps));
CloseableHttpResponse response = httpclient.execute(httpPost);
try {
System.out.println(response.getStatusLine());
HttpEntity entity = response.getEntity();
// do something useful with the response body
// and ensure it is fully consumed
result = org.apache.http.util.EntityUtils.toString(entity);
org.apache.http.util.EntityUtils.consume(entity);
} finally {
response.close();
}
} finally {
httpclient.close();
}
return result;
}
/**
* 發送POST請求的方法
*/
public static String sendPostRequest(String url,String param){
HttpURLConnection httpURLConnection = null;
OutputStream out = null; //寫
InputStream in = null; //讀
int responseCode = 0; //遠端主機響應的HTTP狀态碼
String result="";
try{
URL sendUrl = new URL(url);
httpURLConnection = (HttpURLConnection)sendUrl.openConnection();
//post方式請求
httpURLConnection.setRequestMethod("POST");
//設定頭部資訊
httpURLConnection.setRequestProperty("headerdata", "ceshiyongde");
//一定要設定 Content-Type 要不然服務端接收不到參數
httpURLConnection.setRequestProperty("Content-Type", "application/Json; charset=UTF-8");
//訓示應用程式要将資料寫入URL連接配接,其值預設為false(是否傳參)
httpURLConnection.setDoOutput(true);
//httpURLConnection.setDoInput(true);
httpURLConnection.setUseCaches(false);
httpURLConnection.setConnectTimeout(30000); //30秒連接配接逾時
httpURLConnection.setReadTimeout(30000); //30秒讀取逾時
//擷取輸出流
out = httpURLConnection.getOutputStream();
//輸出流裡寫入POST參數
out.write(param.getBytes());
out.flush();
out.close();
responseCode = httpURLConnection.getResponseCode();
BufferedReader br = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream(),"UTF-8"));
result =br.readLine();
}catch(Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 發送GET請求的方法
*/
public static String sendPostRequestGet(String url){
HttpURLConnection httpURLConnection = null;
OutputStream out = null; //寫
InputStream in = null; //讀
int responseCode = 0; //遠端主機響應的HTTP狀态碼
String result="";
try{
URL sendUrl = new URL(url);
httpURLConnection = (HttpURLConnection)sendUrl.openConnection();
//post方式請求
httpURLConnection.setRequestMethod("GET");
//設定頭部資訊
httpURLConnection.setRequestProperty("headerdata", "ceshiyongde");
//一定要設定 Content-Type 要不然服務端接收不到參數
httpURLConnection.setRequestProperty("Content-Type", "application/Json; charset=UTF-8");
//訓示應用程式要将資料寫入URL連接配接,其值預設為false(是否傳參)
httpURLConnection.setDoOutput(true);
//httpURLConnection.setDoInput(true);
httpURLConnection.setUseCaches(false);
httpURLConnection.setConnectTimeout(30000); //30秒連接配接逾時
httpURLConnection.setReadTimeout(30000); //30秒讀取逾時
responseCode = httpURLConnection.getResponseCode();
BufferedReader br = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream(),"UTF-8"));
result =br.readLine();
}catch(Exception e) {
e.printStackTrace();
}
return result;
}
/**
* for nigx返向代理構造 擷取用戶端IP位址
* @param request
* @return
*/
public static String getRemoteHost(HttpServletRequest request){
String ip = request.getHeader(X_REAL_IP);
if(ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) {
ip = request.getRemoteAddr();
}
return ip.split(",")[0];
}
public static void main(String[] args) {
try {
System.out.println(get("http://www.baidu.com"));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
http請求工具類
/**
* 根據key查詢所有的圍欄
* 傳回所有圍欄的資訊
* @param pd
* @return
* @throws Exception
*/
public List<Map<String,Object>> select(Map<String,Object> pd) throws Exception{
Gson gson=new Gson();
String key=pd.get("key").toString();
String url="http://restapi.amap.com/v4/geofence/meta?key="
+key;
//請求傳回的參數
String data=HttpUtils.sendPostRequestGet(url);
//轉為對象便于擷取
Map<String,Object> dataJson = gson.fromJson(data, HashMap.class);
Map<String, Object> map=(LinkedTreeMap)dataJson.get("data");
List<Map<String,Object>> list = (List)map.get("rs_list");
return list;
}
2.建立圍欄
/**
* 傳入對應格式的坐标區域,建立一個圍欄;傳回status(新增成功0,已存在傳回1;失敗傳回2);若新增成功則傳回gid;message資訊
*/
public static PageData xyUtil(PageData pd){
PageData pd2=new PageData();
pd.put("key", "be8e6c802d51a4be29c99be895d8c2c7");
//資料庫讀取的坐标參數
/*114.288221,30.593268#114.321866,30.580559#114.311223,30.560015#114.291278,30.602487#*/
//第三方接口要求的格式:lon1,lat1;lon2,lat2;lon3,lat3(3<=點個數<=5000)
//将#号換為;
String points = pd.getString("points").replace("#", ";");
String key=pd.getString("key");
String name=pd.getString("name1");
PageData pd3=new PageData();
pd3.put("points", points);
pd3.put("name", name);
/*pd3.put("valid_time ", DateUtil.getDay());設定過期時間、預設90天*/
pd3.put("repeat", "Mon,Tues,Wed,Thur,Fri,Sat,Sun");//可以指定每天的監控時間段和一周内監控的日期
Gson gson=new Gson();
//傳入的參數
String param=gson.toJson(pd3);
String url="http://restapi.amap.com/v4/geofence/meta?key="
+ key
+ "&type=ajaxRequest";
String data=HttpUtil.sendPostRequest(url,param);
//請求回來的資料
System.out.println(data);
PageData data2 = gson.fromJson(data, pd.getClass());
PageData data3 = gson.fromJson(data2.get("data").toString(), pd.getClass());
//狀态為0說明新增成功!
if(data3.get("status").toString().equals("0.0")){
pd2.put("status", "0");
pd2.put("gid", data3.get("gid").toString());
//傳回狀态106.0說明已存在,則查詢此區域的gid
}else if(data3.get("status").toString().equals("106.0")){
pd2.put("status", "1");
}else{
pd2.put("status", "2");
}
pd2.put("message", data3.get("message").toString());
return pd2;
}
3.更新圍欄
/**
* 更新圍欄;傳入圍欄名稱name;gid;傳入圍欄坐标點points
* @param pd
* @return 傳回status
*/
public static PageData xyupdata(PageData pd){
PageData pd2=new PageData();
pd.put("key", "be8e6c802d51a4be29c99be895d8c2c7");
String key=pd.getString("key");
/* String gid=pd.getString("gid");*/
String gid=pd.getString("gid");
pd2.put("repeat", "Mon,Tues,Wed,Thur,Fri,Sat,Sun");
pd2.put("points",pd.getString("points").replace("#", ";"));
pd2.put("name", pd.getString("name1"));
Gson gson=new Gson();
//傳入的參數
String param=gson.toJson(pd2);
String url="http://restapi.amap.com/v4/geofence/meta?key="
+ key+"&gid="
+gid
+ "&type=ajaxRequest&method=patch";
String data=HttpUtil.sendPostRequest(url,param);
System.out.println(data);
PageData data2 = gson.fromJson(data, pd.getClass());
PageData data3 = gson.fromJson(data2.get("data").toString(), pd.getClass());
return data3;
}
4.删除圍欄
/**
* 删除圍欄;傳入圍欄名稱gid;
* @param pd
* @return 傳回status
*/
public static PageData xydel(PageData pd){
PageData pd2=new PageData();
pd.put("key", "be8e6c802d51a4be29c99be895d8c2c7");
String key=pd.getString("key");
/* String gid=pd.getString("gid");*/
String gid=pd.getString("gid");
Gson gson=new Gson();
//傳入的參數
String param=gson.toJson(pd2);
String url="http://restapi.amap.com/v4/geofence/meta?key="
+ key+"&gid="
+gid
+ "&type=ajaxRequest&method=delete";
String data=HttpUtil.sendPostRequest(url,param);
System.out.println(data);
PageData data2 = gson.fromJson(data, pd.getClass());
PageData data3 = gson.fromJson(data2.get("data").toString(), pd.getClass());
return data3;
}
5.查詢一個坐标是否在圍欄内;如果需要查詢是否在指定的圍欄内,需要做進一步處理
/**需要傳入參數key;diu(唯一裝置号);時間戳;坐标點
*傳回 狀态status(0表示在範圍内;1表示不在範圍内)
*如果在範圍内,則傳回圍欄清單,帶有gid和name
* @throws Exception
*/
public Map<String,Object> xyTest(Map<String,Object> pd) throws Exception{
Map<String,Object> pd2=new HashMap();
//坐标點
String locations =pd.get("locations").toString();
//key
String key=pd.get("key").toString();
//裝置唯一辨別
String diu=pd.get("diu").toString();
//時間戳
String time="1484816232";
Gson gson=new Gson();
String url="http://restapi.amap.com/v4/geofence/status?"
+ "key="+key
+ "&diu="+diu
+ "&locations="+locations+","
+ time;
//請求傳回的參數
String data=HttpUtils.sendPostRequestGet(url);
//轉為對象便于擷取
Map<String,Object> dataJson = gson.fromJson(data, HashMap.class);
Map<String, Object> map=(LinkedTreeMap)dataJson.get("data");
//擷取圍欄事件清單;如果為空說明不在圍欄内
if(map.get("fencing_event_list")==null||((List)map.get("fencing_event_list")).size()<1){
pd2.put("status", "1");
return pd2;
}
//如果不為空,則擷取裡面的傳回值
List<Map<String,Object>> list = (List) map.get("fencing_event_list");
List<Map<String,Object>> list2 = new ArrayList<>();
for(int i=0;i<list.size();i++){
Map<String,Object> pd3=new HashMap();
Map<String,Object> map2 = list.get(i);
//如果高德地圖api傳回的狀态為in說明在範圍内
if(map2.get("client_status").toString().equals("in")){
//圍欄資訊
Map<String,Object> map3 =(Map)map2.get("fence_info");
//添加全局圍欄gid值;
pd3.put("fence_gid",map3.get("fence_gid").toString());
//添加圍欄名稱
pd3.put("fence_name", map3.get("fence_name").toString());
list2.add(pd3);
}
}
//添加狀态值
pd2.put("status", "0");
pd2.put("list", list2);
return pd2;
}