SampleTimeDataLoader.java
3.72 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
122
123
124
125
126
127
package com.bsth.data.forecast;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.bsth.data.forecast.entity.SimpleRoute;
import com.bsth.data.forecast.entity.SimpleRoute.TimeRange;
import com.bsth.entity.StationRoute;
import com.bsth.entity.forecast.Sample;
import com.bsth.repository.StationRouteRepository;
import com.bsth.repository.forecast.SampleRepository;
import com.google.common.collect.ArrayListMultimap;
/**
*
* @Title: loadData
* @Description: TODO(从数据库加载数据)
*/
@Component
public class SampleTimeDataLoader extends Thread {
@Autowired
SampleRepository sampleRepository;
@Autowired
StationRouteRepository stationRouteRepository;
// 当天日期
String rq;
SimpleDateFormat sdfyyyyMMddHHmm = new SimpleDateFormat("yyyy-MM-ddHH:mm");
Logger logger = LoggerFactory.getLogger(this.getClass());
@Override
public void run() {
SimpleDateFormat sdfyyyyMMdd = new SimpleDateFormat("yyyy-MM-dd");
rq = sdfyyyyMMdd.format(new Date());
Iterator<Sample> iterator = sampleRepository.findAll().iterator();
ArrayListMultimap<String, Sample> sampleMap = ArrayListMultimap.create();
Sample sample;
String key;
while (iterator.hasNext()) {
sample = iterator.next();
key = sample.getLineCode() + "_" + sample.getUpdown() + "_" + sample.getsStation() + "_"
+ sample.geteStation();
sampleMap.put(key, sample);
}
// 加载全部路由信息
List<StationRoute> allRoutes = stationRouteRepository.findAllEffective();
// 线路和走向分组
ArrayListMultimap<String, StationRoute> groupMap = ArrayListMultimap.create();
for (StationRoute sr : allRoutes)
groupMap.put(sr.getLineCode() + "_" + sr.getDirections(), sr);
ArrayListMultimap<String, SimpleRoute> lineSampleMapCopy = ArrayListMultimap.create();
// 排序路由链并附加各个时区耗时信息
StationRouteComp comp = new StationRouteComp();
Set<String> kys = groupMap.keySet();
List<StationRoute> routeList;
StationRoute sRoute;
List<Sample> sapList;
for (String k : kys) {
routeList = groupMap.get(k);
// 排序
Collections.sort(routeList, comp);
for (int i = 1; i < routeList.size(); i++) {
sRoute = routeList.get(i);
sapList = sampleMap.get(k + "_" +routeList.get(i - 1).getStationCode() + "_" + sRoute.getStationCode());
lineSampleMapCopy.put(k, createSimpleRoute(sRoute, sapList));
}
}
ForecastRealServer.lineSampleMap = lineSampleMapCopy;
logger.info("SampleTimeDataLoader.... over...");
}
private SimpleRoute createSimpleRoute(StationRoute sRoute, List<Sample> list) {
SimpleRoute simple = new SimpleRoute();
simple.stationCode = sRoute.getStationCode();
simple.ranges = new ArrayList<>();
try{
TimeRange tg;
for (Sample s : list) {
tg = new TimeRange();
tg.startTime = sdfyyyyMMddHHmm.parse(rq + s.getsDate()).getTime();
tg.endTime = sdfyyyyMMddHHmm.parse(rq + s.geteDate()).getTime();
tg.runTime = s.getRunTime();
simple.ranges.add(tg);
}
//排序
Collections.sort(simple.ranges);
}catch(Exception e){
logger.error("", e);
}
return simple;
}
public static class StationRouteComp implements Comparator<StationRoute> {
@Override
public int compare(StationRoute o1, StationRoute o2) {
return o1.getStationRouteCode() - o2.getStationRouteCode();
}
}
}