package com.basic.security.manager.impl.es;
|
|
import android.util.Log;
|
|
import com.basic.security.manager.impl.sqlite.SlBaseManager;
|
import com.basic.security.manager.impl.sqlite.SlDeviceSettingManager;
|
import com.basic.security.model.ModelAdapter;
|
import com.basic.security.utils.Constants;
|
|
import java.io.IOException;
|
import java.util.Properties;
|
|
import okhttp3.Call;
|
import okhttp3.Callback;
|
import okhttp3.MediaType;
|
import okhttp3.OkHttpClient;
|
import okhttp3.Request;
|
import okhttp3.RequestBody;
|
import okhttp3.Response;
|
|
import static com.basic.security.utils.DateUtil.formatTime;
|
|
//import org.apache.http.client.ResponseHandler;
|
//import org.apache.http.client.methods.HttpPost;
|
//import org.apache.http.entity.StringEntity;
|
//import org.apache.http.impl.client.BasicResponseHandler;
|
//import org.apache.http.impl.client.CloseableHttpClient;
|
//import org.apache.http.impl.client.HttpClients;
|
|
public class EsBaseManager {
|
|
|
//ES集群中某个节点
|
private static String HOSTNAME;
|
//连接端口号
|
private static String HTTP_PORT;
|
//连接url
|
private static String HTTP_URL;
|
//同步人员的url
|
private static String PERSON_URL;
|
|
public EsBaseManager() {
|
Properties properties = new Properties();
|
try {
|
properties.load(EsBaseManager.class.getResourceAsStream("/assets/es_config.properties"));
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
HOSTNAME = properties.getProperty("HOSTNAME");
|
HTTP_PORT = properties.getProperty("HTTP_PORT");
|
HTTP_URL = properties.getProperty("HTTP_URL");
|
PERSON_URL = properties.getProperty("PERSON_URL");
|
}
|
|
/**
|
* 使用传统的http请求:
|
*
|
* @param url
|
* @param json
|
* @return
|
*/
|
public static String httpResp(String url, String json) {
|
String returnValue = "这是默认返回值,接口调用失败";
|
// CloseableHttpClient httpClient = HttpClients.createDefault();
|
// ResponseHandler<String> responseHandler = new BasicResponseHandler();
|
// try{
|
// //第一步:创建HttpClient对象
|
// httpClient = HttpClients.createDefault();
|
//
|
// //第二步:创建httpPost对象
|
// HttpPost httpPost = new HttpPost("http://"+HOSTNAME+":"+HTTP_PORT+url);
|
//
|
// //第三步:给httpPost设置JSON格式的参数
|
// httpPost.setHeader("Content-type", "application/json");
|
//
|
// StringEntity requestEntity = new StringEntity(json,"utf-8");
|
// requestEntity.setContentEncoding("UTF-8");
|
// httpPost.setHeader("Content-type", "application/json");
|
// httpPost.setEntity(requestEntity);
|
// //第四步:发送HttpPost请求,获取返回值
|
// long start = System.currentTimeMillis();
|
//// log.info("开始时间: "+start);
|
// returnValue = httpClient.execute(httpPost,responseHandler); //调接口获取返回值时,必须用此方法
|
//
|
// long end = System.currentTimeMillis();
|
//// log.info("删除结束时间: "+end+"\n用时:"+(end-start));
|
// }
|
// catch(Exception e)
|
// {
|
// e.printStackTrace();
|
// }
|
// finally {
|
// try {
|
// httpClient.close();
|
// } catch (IOException e) {
|
// e.printStackTrace();
|
// }
|
// }
|
// //第五步:处理返回值
|
return returnValue;
|
}
|
|
/**
|
* 编写一个方法,当每次有记录保存到访问记录中的时候,调用!
|
*/
|
public void queryAndSend(String recordTime) {
|
/**
|
* 首先根据参数从数据库中查询这条数据
|
*/
|
ModelAdapter modelAdapter = new ModelAdapter();
|
modelAdapter = SlBaseManager.findByTime("visit", recordTime);
|
// System.out.println(recordTime+"=====");
|
ModelAdapter deviceAdapter = SlDeviceSettingManager.getDeviceSetting();
|
if (modelAdapter.model.size() != 0) {
|
//拼接字符串之前也需要判断相对的字段是否有值
|
String jsonStr = "{\n" +
|
//摄像机id,存设备id
|
"\"videoReqNum\" : \"" + modelAdapter.model.get("device_id") + "\",\n" +
|
//性别,默认值1
|
"\"Gender\" : \"1\",\n" +
|
//内容,保留字段
|
"\"content\" : \"\",\n" +
|
//比对时间,比对完成时间
|
"\"likeDate\" : \"" + formatTime(Long.parseLong(String.valueOf(Constants.compareFeatureTime)), "yyyy-MM-dd HH:mm:ss") + "\",\n" +
|
//抓拍地址:设备地址
|
"\"picAddress\" : \"" + deviceAdapter.model.get("address") + "\",\n" +
|
//年龄
|
"\"Age\" : \"\",\n" +
|
//抓拍时间
|
"\"picDate\" : \"" + formatTime(Long.parseLong(modelAdapter.model.get("visit_time").toString()), "yyyy-MM-dd HH:mm:ss") + "\",\n" +
|
//相似值
|
"\"likePer\" : \"" + Constants.score + "\",\n" +
|
//分析设备id,当前设备id
|
"\"indeviceid\" : \"" + modelAdapter.model.get("device_id") + "\",\n" +
|
//人员id
|
"\"personId\" : \"" + modelAdapter.model.get("person_id") + "\",\n" +
|
//分析设备名称,设备名称
|
"\"indevicename\" : \"" + modelAdapter.model.get("device_name") + "\",\n" +
|
//是否报警,传空
|
"\"personIsHub\" : \"\",\n" +
|
//设备id
|
"\"videoIp\" : \"" + modelAdapter.model.get("device_id") + "\"\n" +
|
"}";
|
|
/**
|
* 将数据插入到ES集群
|
*/
|
useOkHttp(modelAdapter.model.get("id").toString(), jsonStr);
|
}
|
}
|
|
/**
|
* 使用OkHttp请求
|
*/
|
public void useOkHttp(String id, String jsonStr) {
|
try {
|
// Log.d("Http.params",jsonStr);
|
OkHttpClient okHttpClient = new OkHttpClient();
|
MediaType JSON = MediaType.parse("application/json");
|
|
RequestBody body = RequestBody.create(JSON, jsonStr);
|
Request request = new Request.Builder()
|
.url("http://" + HOSTNAME + ":" + HTTP_PORT + "" + HTTP_URL + "" + id + "")
|
.put(body)
|
.build();
|
// System.out.println(body);
|
okHttpClient.newCall(request).enqueue(new Callback() {
|
|
@Override
|
public void onFailure(Call call, IOException e) {
|
Log.d("Http:call", "" + call.request() + "");
|
}
|
|
@Override
|
public void onResponse(Call call, Response response) throws IOException {
|
Log.d("Http:call", "" + response.code() + "");
|
}
|
});
|
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
}
|
|
/**
|
* 同步管理平台上的同步过来的人员
|
*/
|
public void syncPerson() {
|
try {
|
OkHttpClient okHttpClient = new OkHttpClient();
|
Request request = new Request.Builder()
|
.url("http://" + HOSTNAME + ":" + HTTP_PORT + "" + HTTP_URL + "")
|
.build();
|
|
okHttpClient.newCall(request).enqueue(new Callback() {
|
@Override
|
public void onFailure(Call call, IOException e) {
|
System.out.println("获取ES数据失败!");
|
}
|
|
@Override
|
public void onResponse(Call call, Response response) throws IOException {
|
if (response.isSuccessful()) {
|
System.out.println("获取ES数据成功!" + response);
|
}
|
}
|
});
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
}
|