DeteMin
2020-03-31 77c62e023d2dc31200fc696158df84b3aee90ee7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
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();
        }
    }
}