GpsDataLoaderThread.java
3.9 KB
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
package com.bsth.data.gpsdata.thread;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.bsth.data.BasicData;
import com.bsth.data.gpsdata.GpsEntity;
import com.bsth.data.gpsdata.GpsRealData;
import com.bsth.data.gpsdata.arrival.GpsRealAnalyse;
import com.bsth.data.gpsdata.recovery.GpsDataRecovery;
import com.bsth.util.ConfigUtil;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
/**
* Created by panzhao on 2017/1/11.
*/
@Component
public class GpsDataLoaderThread extends Thread {
Logger logger = LoggerFactory.getLogger(GpsDataLoaderThread.class);
/**
* 构造函数
*/
public GpsDataLoaderThread() {
url = ConfigUtil.get("http.gps.real.url");
}
// 网关数据接口地址
private static String url;
@Autowired
GpsRealData gpsRealData;
@Autowired
GpsRealAnalyse gpsRealAnalyse;
@Override
public void run() {
try {
//如果正在恢复数据
if (GpsDataRecovery.run)
return;
load();
} catch (Exception e) {
logger.error("", e);
}
}
public void load() throws Exception {
List<GpsEntity> list = null;
List<GpsEntity> updateList = new ArrayList<>();
CloseableHttpClient httpClient = null;
CloseableHttpResponse response = null;
try {
httpClient = HttpClients.createDefault();
HttpGet get = new HttpGet(url);
response = httpClient.execute(get);
HttpEntity entity = response.getEntity();
if (null != entity) {
BufferedReader br = new BufferedReader(new InputStreamReader(entity.getContent()));
StringBuffer stringBuffer = new StringBuffer();
String str = "";
while ((str = br.readLine()) != null)
stringBuffer.append(str);
JSONObject jsonObj = JSON.parseObject(stringBuffer.toString());
if (jsonObj != null)
list = JSON.parseArray(jsonObj.getString("data"), GpsEntity.class);
String nbbm;
GpsEntity old;
for (GpsEntity gps : list) {
//没有设备号
if (StringUtils.isBlank(gps.getDeviceId()))
continue;
old = gpsRealData.get(gps.getDeviceId());
if (old != null &&
old.getTimestamp() == gps.getTimestamp())
continue;
nbbm = BasicData.deviceId2NbbmMap.get(gps.getDeviceId());
if (StringUtils.isBlank(nbbm))
gps.setIncomplete(true);//标记为异常数据
else
gps.setNbbm(nbbm);
//有更新的点位
updateList.add(gps);
}
//分析数据
gpsRealAnalyse.analyse(updateList);
} else
logger.error("real gps result is null");
} catch (Exception e) {
logger.error("", e);
} finally {
if (null != httpClient)
httpClient.close();
if (null != response)
response.close();
}
}
}