ArrivalData_GPS.java
3.68 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
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(这里用一句话描述这个类的作用)
* @author PanZhao
* @date 2016年8月18日 下午10:05:27
*
*/
@Component
public class ArrivalData_GPS implements CommandLineRunner{
//全部进出站数据(当日) K:线路编码
//private static ListMultimap<String, ArrivalEntity> allArrivals;
// 起终点站进出数据 K:车辆编码
private static ListMultimap<String, ArrivalEntity> startAndEndMaps;
private static Map<String, Integer> carIndexMap;
static{
//allArrivals = ArrayListMultimap.create();
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 {
Application.mainServices.scheduleWithFixedDelay(dataLoaderThread, 40, 45, TimeUnit.SECONDS);
}
@Component
public static class DataLoaderThread extends Thread {
@Autowired
DataLoader dataLoader;
@Autowired
DayOfSchedule dayOfSchedule;
@Override
public void run() {
Set<ArrivalEntity> arrSets = dataLoader.load();
//有起终点进出的车辆
Set<String> carSet = new TreeSet<>();
//按车辆起终点站过滤数据
String nbbm;
Set<String> seList;
for(ArrivalEntity arr : arrSets){
//allArrivals.put(arr.getLineCode(), arr);
nbbm = arr.getNbbm();
seList = dayOfSchedule.getSEStationList(nbbm);
if(seList.contains(arr.getStopNo())){
startAndEndMaps.put(nbbm, arr);
carSet.add(nbbm);
}
}
//System.out.println("起终点数据大小为:" + startAndEndMaps.size() + " -- 全量数据:" + allArrivals.size());
try{
Arrival2Schedule.start(carSet);
}catch(Exception e){
logger.error("", e);
}
}
}
/**
*
* @Title: clearRAMData
* @Description: TODO(清理内存数据)
*/
public void clearRAMData(String lineCode){
//allArrivals.removeAll(lineCode);
int count = 0;
//车辆映射的进出站数据,遍历删除对应线路数据。
Collection<ArrivalEntity> seList = startAndEndMaps.values();
for(ArrivalEntity arr : seList){
if(arr.getLineCode().equals(lineCode)){
if(startAndEndMaps.remove(arr.getDeviceId(), arr)){
count ++;
}
}
}
logger.info(lineCode + " 清除到离站数据 ," + count);
}
public 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;
}
}