ArrivalData_GPS.java
3.67 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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
package com.bsth.data.arrival;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import java.util.concurrent.TimeUnit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import com.bsth.Application;
import com.bsth.data.match.Arrival2Schedule;
import com.bsth.data.schedule.DayOfSchedule;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ListMultimap;
/**
*
* @ClassName: ArrivalData_GPS
* @Description: TODO(GPS到离站数据)
* @author PanZhao
* @date 2016年8月18日 下午10:05:27
*
*/
@Component
public class ArrivalData_GPS implements CommandLineRunner{
// 起终点站进出数据 K:车辆编码
private static ListMultimap<String, ArrivalEntity> startAndEndMaps;
private static Map<String, Integer> carIndexMap;
static{
startAndEndMaps = ArrayListMultimap.create();
carIndexMap = new HashMap<>();
}
@Autowired
DataLoaderThread dataLoaderThread;
static Logger logger = LoggerFactory.getLogger(ArrivalData_GPS.class);
@Override
public void run(String... arg0) throws Exception {
logger.info("ArrivalData_GPS,30,10");
Application.mainServices.scheduleWithFixedDelay(dataLoaderThread, 30, 600, TimeUnit.SECONDS);
}
@Component
public static class DataLoaderThread extends Thread {
@Autowired
DataLoader dataLoader;
@Autowired
DayOfSchedule dayOfSchedule;
@Autowired
AnalyseData analyseData;
@Override
public void run() {
try{
List<ArrivalEntity> arrSets = dataLoader.load();
if(null == arrSets || arrSets.size() == 0)
return;
//有起终点进出的车辆
Set<String> carSet = new TreeSet<>();
//按车辆起终点站过滤数据
String nbbm;
Set<String> seList;
for(ArrivalEntity arr : arrSets){
nbbm = arr.getNbbm();
seList = dayOfSchedule.getSEStationList(nbbm);
if(seList.contains(arr.getStopNo())){
startAndEndMaps.put(nbbm, arr);
carSet.add(nbbm);
}
}
//从专业的角度分析一下数据
analyseData.analyse(carSet);
//开始匹配
Arrival2Schedule.start(carSet);
}catch(Exception e){
logger.error("", e);
}
}
}
/**
*
* @Title: clearRAMData
* @Description: TODO(清理内存数据)
*/
public void clearRAMData(String lineCode){
List<ArrivalEntity> remList = new ArrayList<>();
//车辆映射的进出站数据,遍历删除对应线路数据。
Collection<ArrivalEntity> seList = startAndEndMaps.values();
for(ArrivalEntity arr : seList){
if(arr.getLineCode().equals(lineCode))
remList.add(arr);
}
//删除数据
int count = 0;
for(ArrivalEntity arr : remList){
startAndEndMaps.remove(arr.getNbbm(), arr);
count ++;
}
logger.info(lineCode + " 清除到离站数据 ," + count);
}
public synchronized static List<ArrivalEntity> findByNbbm(String nbbm){
return startAndEndMaps.get(nbbm);
}
public static List<ArrivalEntity> getIncrement(String nbbm){
Integer mark = null;
if (!carIndexMap.containsKey(nbbm))
mark = 0;
else
mark = carIndexMap.get(nbbm);
List<ArrivalEntity> all = startAndEndMaps.get(nbbm);
int size = all.size();
if(size == 0)
return new ArrayList<>(0);
List<ArrivalEntity> rs = all.subList(mark, size);
carIndexMap.put(nbbm, size);
return rs;
}
}