Commit d8eed84ec5522b5dede9135856f320326aaece09

Authored by 王通
1 parent 2ce9bb69

1.对接中运量调度 新增接口

src/main/java/com/bsth/controller/realcontrol/ServiceDataInterface.java
@@ -234,6 +234,59 @@ public class ServiceDataInterface { @@ -234,6 +234,59 @@ public class ServiceDataInterface {
234 } 234 }
235 235
236 /** 236 /**
  237 + * 向指定的车辆下发指令
  238 + * 中运量用
  239 + * @return
  240 + */
  241 + @RequestMapping(value = "/send60Phrase/zyl", method = RequestMethod.POST)
  242 + public int send60PhraseZyl(@RequestBody Map<String, String> map, @RequestParam String secretKey) {
  243 + try {
  244 + String plate = map.get("plate");
  245 + String txt = map.get("txt");
  246 + String sender = map.get("sender");
  247 + short dispatchInstruct = Short.parseShort(map.get("instructionType"));
  248 + int direction = Integer.parseInt(map.get("direction"));
  249 + long alarmTime = Long.parseLong(map.get("alarmTime"));
  250 + if (txt.length() > 50)
  251 + txt = txt.substring(0, 50);
  252 + if (StringUtils.isEmpty(secretKey) || !secretKey.equals(SECRE_KEY))
  253 + return -500;
  254 +
  255 + //车辆和设备号对照
  256 + String nbbm = BasicData.nbbmCompanyPlateMap.inverse().get(plate);
  257 + String deviceId = BasicData.deviceId2NbbmMap.inverse().get(nbbm);
  258 + if (StringUtils.isEmpty(deviceId))
  259 + return -404;
  260 +
  261 + //检查设备是否在线
  262 + long t = System.currentTimeMillis();
  263 + GpsEntity gps = gpsRealData.get(deviceId);
  264 + if (null == gps || (t - gps.getServerTimestamp()) > 1000 * 60 * 5)
  265 + return -405;
  266 +
  267 + D60 d60 = null;
  268 + if (dispatchInstruct == 2) {
  269 + d60 = new DirectiveCreator().createD60_02(nbbm, txt, direction, 0, new Date(alarmTime));
  270 + } else {
  271 + d60 = new DirectiveCreator().createD60(nbbm, txt, dispatchInstruct, direction, 0, gps.getLineId());
  272 + }
  273 + d60.setSender(sender);
  274 + // 发送指令
  275 + int code = GatewayHttpUtils.postJson(JSON.toJSONString(d60));
  276 + d60.setHttpCode(code);
  277 +
  278 + if (code != 0)
  279 + d60.setErrorText("网关通讯失败, code: " + code);
  280 +
  281 + dayOfDirectives.put60(d60);
  282 + return d60.getMsgId();
  283 + } catch (Exception e) {
  284 + logger.error("", e);
  285 + return -500;
  286 + }
  287 + }
  288 +
  289 + /**
237 * 根据msg id 查询指令响应情况 290 * 根据msg id 查询指令响应情况
238 * 291 *
239 * @param msgIds 292 * @param msgIds
src/main/java/com/bsth/data/BasicData.java
1 -package com.bsth.data;  
2 -  
3 -import java.text.DateFormat;  
4 -import java.text.SimpleDateFormat;  
5 -import java.util.ArrayList;  
6 -import java.util.Calendar;  
7 -import java.util.Date;  
8 -import java.util.HashMap;  
9 -import java.util.HashSet;  
10 -import java.util.Iterator;  
11 -import java.util.List;  
12 -import java.util.Map;  
13 -import java.util.Set;  
14 -  
15 -import org.apache.commons.lang3.StringUtils;  
16 -import org.slf4j.Logger;  
17 -import org.slf4j.LoggerFactory;  
18 -import org.springframework.beans.factory.annotation.Autowired;  
19 -import org.springframework.stereotype.Component;  
20 -  
21 -import com.bsth.data.gpsdata_v2.cache.GeoCacheData;  
22 -import com.bsth.data.pinyin.PersionPinYinBuffer;  
23 -import com.bsth.entity.Business;  
24 -import com.bsth.entity.CarPark;  
25 -import com.bsth.entity.Cars;  
26 -import com.bsth.entity.Line;  
27 -import com.bsth.entity.Personnel;  
28 -import com.bsth.entity.StationRoute;  
29 -import com.bsth.entity.calc.CalcInterval;  
30 -import com.bsth.entity.schedule.CarConfigInfo;  
31 -import com.bsth.repository.BusinessRepository;  
32 -import com.bsth.repository.CarParkRepository;  
33 -import com.bsth.repository.CarsRepository;  
34 -import com.bsth.repository.LineRepository;  
35 -import com.bsth.repository.PersonnelRepository;  
36 -import com.bsth.repository.StationRepository;  
37 -import com.bsth.repository.StationRouteRepository;  
38 -import com.bsth.repository.calc.CalcIntervalRepository;  
39 -import com.bsth.repository.schedule.CarConfigInfoRepository;  
40 -import com.google.common.collect.BiMap;  
41 -import com.google.common.collect.HashBiMap;  
42 -  
43 -/**  
44 - * @author PanZhao  
45 - * @ClassName: BasicData  
46 - * @Description: TODO(基础的映射数据)  
47 - * @date 2016年8月10日 下午3:27:45  
48 - */  
49 -@Component  
50 -public class BasicData {  
51 -  
52 - //公司代码和公司名对照(K: 公司编码,V:公司名)  
53 - public static Map<String, String> businessCodeNameMap;  
54 -  
55 - //分公司公司代码和分公司公司名对照(K: 分公司编码_公司编码,V:分公司公司名)  
56 - public static Map<String, String> businessFgsCodeNameMap;  
57 -  
58 - //设备号和车辆自编号 (K: 设备编码 ,V:车辆自编号)  
59 - public static BiMap<String, String> deviceId2NbbmMap;  
60 -  
61 - //车辆自编号和公司代码对照 (K: 车辆自编号 ,V:公司代码)  
62 - public static Map<String, String> nbbm2CompanyCodeMap;  
63 -  
64 - //车辆自编号和分公司代码对照 (K: 车辆自编号 ,V:分公司编码_公司编码)  
65 - public static Map<String, String> nbbm2FgsCompanyCodeMap;  
66 -  
67 - //车辆自编号和牌照号对照 (K: 车辆自编号 ,V:牌照号)  
68 - public static Map<String, String> nbbmCompanyPlateMap;  
69 -  
70 - //站点编码和名称对照,包括停车场 (K: lineCode_updown_stationCode ,V:站点名称)  
71 - public static Map<String, String> stationCode2NameMap;  
72 -  
73 - //车辆和线路对照  
74 - public static Map<String, Line> nbbm2LineMap;  
75 -  
76 - //线路历史配车(K: 线路编码 ,V:List<车辆自编号>)  
77 - public static Map<String, List<String>> lineCodeHistoryNbbmMap;  
78 -  
79 - //线路ID和code 对照  
80 - public static BiMap<Integer, String> lineId2CodeMap;  
81 -  
82 - //线路编码和名称对照  
83 - public static Map<String, String> lineCode2NameMap;  
84 -  
85 - public static Map<String, String> lineCodeAllNameMap;  
86 - //停车场  
87 - public static List<String> parkCodeList;  
88 -  
89 - //线路ID和shangHaiLinecode 对照  
90 - public static Map<Integer, String> lineId2ShangHaiCodeMap;  
91 -  
92 - //线路Code和shangHaiLinecode 对照  
93 - public static Map<String, String> lineCode2ShangHaiCodeMap;  
94 -  
95 - /*//驾驶员工号 和 personnel 对象映射  
96 - public static Map<String, Personnel> jsyMap;  
97 - //售票员工号 和 personnel 对象映射  
98 - public static Map<String, Personnel> spyMap;*/  
99 - //所以员工和personnerl 对象映射  
100 - public static Map<String, Personnel> perMap;  
101 - //全量员工 工号和姓名对照  
102 - public static Map<String, String> allPerson;  
103 -  
104 - //站点名和运管处编号 对照  
105 - public static Map<String, Integer> stationName2YgcNumber;  
106 -  
107 - // 线路编码_日期 等级  
108 - public static Map<String, String> lineDate2Level;  
109 -  
110 - static Logger logger = LoggerFactory.getLogger(BasicData.class);  
111 -  
112 - public static String getStationNameByCode(String code, String prefix){  
113 - String name = stationCode2NameMap.get(code);  
114 - return name != null? name: stationCode2NameMap.get(prefix + code);  
115 - }  
116 -  
117 -/* @Autowired  
118 - JdbcTemplate jdbcTemplate;  
119 - public Map<String, String> getNbbm2PlateNo(){  
120 - List<Map<String, Object>> list = jdbcTemplate.queryForList("select CAR_CODE,CAR_PLATE from bsth_c_cars where CAR_CODE is not null and CAR_PLATE is not null");  
121 -  
122 - Map<String, String> rs = new HashMap<>();  
123 - for(Map<String, Object> map : list){  
124 - rs.put(map.get("CAR_CODE").toString(), map.get("CAR_PLATE").toString());  
125 - }  
126 - return rs;  
127 - }*/  
128 -  
129 - @Component  
130 - public static class BasicDataLoader extends Thread {  
131 -  
132 - @Autowired  
133 - CarsRepository carsRepository;  
134 -  
135 - @Autowired  
136 - StationRepository stationRepository;  
137 -  
138 - @Autowired  
139 - CarParkRepository carParkRepository;  
140 -  
141 - @Autowired  
142 - CarConfigInfoRepository carConfigInfoRepository;  
143 -  
144 - @Autowired  
145 - LineRepository lineRepository;  
146 -  
147 - @Autowired  
148 - StationRouteRepository stationRouteRepository;  
149 -  
150 - @Autowired  
151 - PersonnelRepository personnelRepository;  
152 -  
153 - @Autowired  
154 - BusinessRepository businessRepository;  
155 -  
156 - @Autowired  
157 - GeoCacheData geoCacheData;  
158 -  
159 - @Autowired  
160 - Station2ParkBuffer station2ParkBuffer;  
161 -  
162 - @Autowired  
163 - PersionPinYinBuffer persionPinYinBuffer;  
164 -  
165 - @Autowired  
166 - CalcIntervalRepository calcIntervalRepository;  
167 -  
168 - @Override  
169 - public void run() {  
170 - loadAllData();  
171 - }  
172 -  
173 - /**  
174 - * @Title: loadAllData  
175 - * @Description: TODO(加载所有数据)  
176 - */  
177 - public int loadAllData() {  
178 - try {  
179 - logger.info("开始加载基础数据..,");  
180 - //设备信息  
181 - loadDeviceInfo();  
182 - //站点信息  
183 - loadStationInfo();  
184 - //线路信息  
185 - loadLineInfo();  
186 - //车辆和线路映射信息  
187 - loadNbbm2LineInfo();  
188 - loadLineCodeHistoryNbbmMapInfo();  
189 - //人员信息  
190 - loadPersonnelInfo();  
191 - //公司信息  
192 - loadBusinessInfo();  
193 - // 线路等级信息  
194 - loadLineLevel();  
195 -  
196 - logger.info("load geo cache..,");  
197 - geoCacheData.loadData();  
198 - station2ParkBuffer.saveAll();  
199 - logger.info("加载基础数据成功!,");  
200 - } catch (Exception e) {  
201 - logger.error("加载基础数据时出现异常,", e);  
202 - }  
203 - return 0;  
204 - }  
205 -  
206 - /**  
207 - * loadBusinessInfo  
208 - * (公司代码公司名对照)  
209 - */  
210 - public void loadBusinessInfo() {  
211 - Map<String, String> businessMap = new HashMap<String, String>();  
212 - Map<String, String> businessFgsMap = new HashMap<String, String>();  
213 - Iterator<Business> busIter = businessRepository.findAll().iterator();  
214 - Business t;  
215 - while (busIter.hasNext()) {  
216 - t = busIter.next();  
217 - businessMap.put(t.getBusinessCode(), t.getBusinessName());  
218 - businessFgsMap.put(t.getBusinessCode() + "_" + t.getUpCode(), t.getBusinessName());  
219 - }  
220 - businessCodeNameMap = businessMap;  
221 - businessFgsCodeNameMap = businessFgsMap;  
222 - }  
223 -  
224 - /**  
225 - * @Title: loadDeviceInfo  
226 - * @Description: TODO(加载设备相关信息)  
227 - */  
228 - public void loadDeviceInfo() {  
229 - BiMap<String, String> deviceId2Nbbm = HashBiMap.create();  
230 - //车辆和公司代码对照  
231 - Map<String, String> nbbm2CompanyCode = new HashMap<>();  
232 - //车辆和分公司代码对照  
233 - Map<String, String> nbbm2FgsCompanyCode = new HashMap<>();  
234 -  
235 - //车辆自编号和拍照号对照  
236 - Map<String, String> nbbmCompanyPlate = new HashMap<>();  
237 -  
238 - Iterator<Cars> carIterator = carsRepository.findAll().iterator();  
239 - Cars car;  
240 - while (carIterator.hasNext()) {  
241 - car = carIterator.next();  
242 - deviceId2Nbbm.put(car.getEquipmentCode(), car.getInsideCode());  
243 - nbbm2CompanyCode.put(car.getInsideCode(), car.getBusinessCode());  
244 - nbbm2FgsCompanyCode.put(car.getInsideCode(), car.getBrancheCompanyCode() + "_" + car.getBusinessCode() );  
245 - nbbmCompanyPlate.put(car.getInsideCode(), car.getCarPlate());  
246 - }  
247 -  
248 - deviceId2NbbmMap = deviceId2Nbbm;  
249 - nbbm2CompanyCodeMap = nbbm2CompanyCode;  
250 - nbbm2FgsCompanyCodeMap = nbbm2FgsCompanyCode;  
251 - nbbmCompanyPlateMap =nbbmCompanyPlate;  
252 - }  
253 -  
254 - /**  
255 - * @Title: loadStationInfo  
256 - * @Description: TODO(加载站点信息)  
257 - */  
258 - public void loadStationInfo() {  
259 - Map<String, String> stationCode2Name = new HashMap<>();  
260 - Iterator<StationRoute> iterator = stationRouteRepository.findAll().iterator();  
261 - StationRoute sroute;  
262 - while (iterator.hasNext()) {  
263 - sroute = iterator.next();  
264 - stationCode2Name.put(sroute.getLineCode() + "_" + sroute.getDirections() + "_" + sroute.getStationCode(), sroute.getStationName());  
265 - }  
266 -  
267 - //停车场  
268 - Iterator<CarPark> iterator2 = carParkRepository.findAll().iterator();  
269 -  
270 - List<String> parkCodes = new ArrayList<>();  
271 -  
272 - CarPark carPark;  
273 - while (iterator2.hasNext()) {  
274 - carPark = iterator2.next();  
275 - stationCode2Name.put(carPark.getParkCode(), carPark.getParkName());  
276 -  
277 - parkCodes.add(carPark.getParkCode());  
278 - }  
279 - parkCodeList = parkCodes;  
280 - stationCode2NameMap = stationCode2Name;  
281 - }  
282 -  
283 - /**  
284 - * @Title: loadNbbm2LineInfo  
285 - * @Description: TODO(车辆和线路对照)  
286 - */  
287 - public void loadNbbm2LineInfo() {  
288 - Iterator<CarConfigInfo> allIterator = carConfigInfoRepository.findAll().iterator();  
289 - Map<String, Line> ccMap = new HashMap<>();  
290 -  
291 - CarConfigInfo cci;  
292 - while (allIterator.hasNext()) {  
293 - cci = allIterator.next();  
294 - if(cci.getIsCancel())  
295 - continue;//排除已经报废的  
296 - ccMap.put(cci.getCl().getInsideCode(), cci.getXl());  
297 - }  
298 - nbbm2LineMap = ccMap;  
299 - }  
300 -  
301 - /**  
302 - * @Title: loadLineCodeHistoryNbbmMapInfo  
303 - * @Description: TODO(线路历史配车)  
304 - */  
305 - public void loadLineCodeHistoryNbbmMapInfo() {  
306 - Iterator<CarConfigInfo> allIterator = carConfigInfoRepository.findAll().iterator();  
307 - Map<String, List<String>> ccMap = new HashMap<>(); //用list保持排序  
308 - Map<String, Set<String>> sMap = new HashMap<>(); //用Set去重  
309 -  
310 - CarConfigInfo cci;  
311 - while (allIterator.hasNext()) {  
312 - cci = allIterator.next();  
313 - String lineCode = cci.getXl().getLineCode();  
314 - if(!ccMap.containsKey(lineCode)){  
315 - ccMap.put(lineCode, new ArrayList<String>());  
316 - sMap.put(lineCode, new HashSet<String>());  
317 - }  
318 - if(sMap.get(lineCode).add(cci.getCl().getInsideCode())){  
319 - ccMap.get(lineCode).add(cci.getCl().getInsideCode());  
320 - }  
321 - }  
322 - lineCodeHistoryNbbmMap = ccMap;  
323 - }  
324 -  
325 - /**  
326 - * @Title: loadLineInfo  
327 - * @Description: TODO(加载线路相关信息)  
328 - */  
329 - public void loadLineInfo() {  
330 - Iterator<Line> iterator = lineRepository.findAllService().iterator();  
331 -  
332 - Line line;  
333 - BiMap<Integer, String> biMap = HashBiMap.create();  
334 - Map<String, String> code2name = new HashMap<>();  
335 - Map<Integer, String> id2SHcode = new HashMap<Integer, String>();  
336 - Map<String, String> code2SHcode = new HashMap<String, String>();  
337 - Map<String, Integer> tempStationName2YgcNumber = new HashMap<String, Integer>();  
338 -  
339 - /**  
340 - * 加载运管处的站点及序号  
341 - * 上行从1开始,下行顺序续编  
342 - */  
343 - List<Map<String, String>> ygcLines = stationRouteRepository.findAllLineWithYgc();  
344 - if(ygcLines != null && ygcLines.size() > 0){  
345 - int size = ygcLines.size();  
346 - Map<String, String> tempMap ;  
347 - int num = 1;  
348 - String key;  
349 - String lineCode = "";  
350 - for (int i = 0; i < size; i ++){  
351 - tempMap = ygcLines.get(i);  
352 - if(lineCode.equals("")){  
353 - lineCode = tempMap.get("lineCode");  
354 - }else if(!lineCode.equals(tempMap.get("lineCode"))){  
355 - num = 1;  
356 - lineCode = tempMap.get("lineCode");  
357 - }  
358 - key = tempMap.get("lineCode") + "_"+String.valueOf(tempMap.get("directions"))  
359 - + "_"+tempMap.get("stationCode")+ "_"+tempMap.get("stationMark");  
360 - tempStationName2YgcNumber.put(key,num++);  
361 - }  
362 - }  
363 -  
364 - while (iterator.hasNext()) {  
365 - line = iterator.next();  
366 - biMap.put(line.getId(), line.getLineCode());  
367 - code2name.put(line.getLineCode(), line.getName());  
368 - id2SHcode.put(line.getId(), line.getShanghaiLinecode());  
369 - code2SHcode.put(line.getLineCode(), line.getShanghaiLinecode());  
370 - }  
371 -  
372 - lineId2CodeMap = biMap;  
373 - lineCode2NameMap = code2name;  
374 - lineId2ShangHaiCodeMap = id2SHcode;  
375 - lineCode2ShangHaiCodeMap = code2SHcode;  
376 - stationName2YgcNumber = tempStationName2YgcNumber;  
377 -  
378 - Map<String, String> code2nameAll = new HashMap<>();  
379 - Iterator<Line> iteratorAll = lineRepository.findAll().iterator();  
380 - while (iteratorAll.hasNext()) {  
381 - line = iteratorAll.next();  
382 - code2nameAll.put(line.getLineCode(), line.getName());  
383 - }  
384 - lineCodeAllNameMap=code2nameAll;  
385 - }  
386 -  
387 - /**  
388 - * @Title: loadPersonnelInfo  
389 - * @Description: TODO(加载人员信息)  
390 - */  
391 - public void loadPersonnelInfo() {  
392 - Iterator<Personnel> iterator = personnelRepository.findAll().iterator();  
393 -  
394 - Map<String, Personnel> /*jsyTempMap = new HashMap<>(), spyTempMap = new HashMap<>(),*/perTempMap=new HashMap<>();  
395 - Map<String, String> allPersonMap = new HashMap<>();  
396 -  
397 - Personnel p;  
398 - String jobCode;  
399 - while (iterator.hasNext()) {  
400 - p = iterator.next();  
401 -  
402 - jobCode = p.getJobCode();  
403 - if (StringUtils.isEmpty(jobCode))  
404 - continue;  
405 -  
406 - /*if (p.getPosts() != null) {  
407 - if (p.getPosts().equals("1"))  
408 - jsyTempMap.put(jobCode, p);  
409 - else if (p.getPosts().equals("2"))  
410 - spyTempMap.put(jobCode, p);  
411 - }*/  
412 -  
413 - perTempMap.put(jobCode, p);  
414 -  
415 - allPersonMap.put(jobCode, p.getPersonnelName());  
416 - }  
417 -  
418 - //jsyMap = jsyTempMap;  
419 - //spyMap = spyTempMap;  
420 - allPerson = allPersonMap;  
421 - perMap = perTempMap;  
422 -  
423 - //人员拼音转换  
424 - persionPinYinBuffer.refresh();  
425 - }  
426 -  
427 - /**  
428 - * 加载线路级别信息 按当前日期取(当前+前后一天)的数据  
429 - */  
430 - public void loadLineLevel() {  
431 - List<String> dates = new ArrayList<>();  
432 - Map<String, String> result = new HashMap<>();  
433 - DateFormat df = new SimpleDateFormat("yyyy-MM-dd");  
434 -  
435 - Calendar c = Calendar.getInstance();  
436 - c.setTime(new Date(System.currentTimeMillis() - 86400000));  
437 - dates.add(df.format(c.getTime()));  
438 -  
439 - for (int i = 0;i < 2;i++) {  
440 - c.add(Calendar.DATE, 1);  
441 - dates.add(df.format(c.getTime()));  
442 - }  
443 -  
444 - List<CalcInterval> l = calcIntervalRepository.selectByDates(dates);  
445 - for (CalcInterval ci : l) {  
446 - result.put(ci.getXlBm() + "_" + ci.getDate(), ci.getLevel());  
447 - }  
448 -  
449 - lineDate2Level = result;  
450 - }  
451 - }  
452 -} 1 +package com.bsth.data;
  2 +
  3 +import java.text.DateFormat;
  4 +import java.text.SimpleDateFormat;
  5 +import java.util.ArrayList;
  6 +import java.util.Calendar;
  7 +import java.util.Date;
  8 +import java.util.HashMap;
  9 +import java.util.HashSet;
  10 +import java.util.Iterator;
  11 +import java.util.List;
  12 +import java.util.Map;
  13 +import java.util.Set;
  14 +
  15 +import org.apache.commons.lang3.StringUtils;
  16 +import org.slf4j.Logger;
  17 +import org.slf4j.LoggerFactory;
  18 +import org.springframework.beans.factory.annotation.Autowired;
  19 +import org.springframework.stereotype.Component;
  20 +
  21 +import com.bsth.data.gpsdata_v2.cache.GeoCacheData;
  22 +import com.bsth.data.pinyin.PersionPinYinBuffer;
  23 +import com.bsth.entity.Business;
  24 +import com.bsth.entity.CarPark;
  25 +import com.bsth.entity.Cars;
  26 +import com.bsth.entity.Line;
  27 +import com.bsth.entity.Personnel;
  28 +import com.bsth.entity.StationRoute;
  29 +import com.bsth.entity.calc.CalcInterval;
  30 +import com.bsth.entity.schedule.CarConfigInfo;
  31 +import com.bsth.repository.BusinessRepository;
  32 +import com.bsth.repository.CarParkRepository;
  33 +import com.bsth.repository.CarsRepository;
  34 +import com.bsth.repository.LineRepository;
  35 +import com.bsth.repository.PersonnelRepository;
  36 +import com.bsth.repository.StationRepository;
  37 +import com.bsth.repository.StationRouteRepository;
  38 +import com.bsth.repository.calc.CalcIntervalRepository;
  39 +import com.bsth.repository.schedule.CarConfigInfoRepository;
  40 +import com.google.common.collect.BiMap;
  41 +import com.google.common.collect.HashBiMap;
  42 +
  43 +/**
  44 + * @author PanZhao
  45 + * @ClassName: BasicData
  46 + * @Description: TODO(基础的映射数据)
  47 + * @date 2016年8月10日 下午3:27:45
  48 + */
  49 +@Component
  50 +public class BasicData {
  51 +
  52 + //公司代码和公司名对照(K: 公司编码,V:公司名)
  53 + public static Map<String, String> businessCodeNameMap;
  54 +
  55 + //分公司公司代码和分公司公司名对照(K: 分公司编码_公司编码,V:分公司公司名)
  56 + public static Map<String, String> businessFgsCodeNameMap;
  57 +
  58 + //设备号和车辆自编号 (K: 设备编码 ,V:车辆自编号)
  59 + public static BiMap<String, String> deviceId2NbbmMap;
  60 +
  61 + //车辆自编号和公司代码对照 (K: 车辆自编号 ,V:公司代码)
  62 + public static Map<String, String> nbbm2CompanyCodeMap;
  63 +
  64 + //车辆自编号和分公司代码对照 (K: 车辆自编号 ,V:分公司编码_公司编码)
  65 + public static Map<String, String> nbbm2FgsCompanyCodeMap;
  66 +
  67 + //车辆自编号和牌照号对照 (K: 车辆自编号 ,V:牌照号)
  68 + public static BiMap<String, String> nbbmCompanyPlateMap;
  69 +
  70 + //站点编码和名称对照,包括停车场 (K: lineCode_updown_stationCode ,V:站点名称)
  71 + public static Map<String, String> stationCode2NameMap;
  72 +
  73 + //车辆和线路对照
  74 + public static Map<String, Line> nbbm2LineMap;
  75 +
  76 + //线路历史配车(K: 线路编码 ,V:List<车辆自编号>)
  77 + public static Map<String, List<String>> lineCodeHistoryNbbmMap;
  78 +
  79 + //线路ID和code 对照
  80 + public static BiMap<Integer, String> lineId2CodeMap;
  81 +
  82 + //线路编码和名称对照
  83 + public static Map<String, String> lineCode2NameMap;
  84 +
  85 + public static Map<String, String> lineCodeAllNameMap;
  86 + //停车场
  87 + public static List<String> parkCodeList;
  88 +
  89 + //线路ID和shangHaiLinecode 对照
  90 + public static Map<Integer, String> lineId2ShangHaiCodeMap;
  91 +
  92 + //线路Code和shangHaiLinecode 对照
  93 + public static Map<String, String> lineCode2ShangHaiCodeMap;
  94 +
  95 + /*//驾驶员工号 和 personnel 对象映射
  96 + public static Map<String, Personnel> jsyMap;
  97 + //售票员工号 和 personnel 对象映射
  98 + public static Map<String, Personnel> spyMap;*/
  99 + //所以员工和personnerl 对象映射
  100 + public static Map<String, Personnel> perMap;
  101 + //全量员工 工号和姓名对照
  102 + public static Map<String, String> allPerson;
  103 +
  104 + //站点名和运管处编号 对照
  105 + public static Map<String, Integer> stationName2YgcNumber;
  106 +
  107 + // 线路编码_日期 等级
  108 + public static Map<String, String> lineDate2Level;
  109 +
  110 + static Logger logger = LoggerFactory.getLogger(BasicData.class);
  111 +
  112 + public static String getStationNameByCode(String code, String prefix){
  113 + String name = stationCode2NameMap.get(code);
  114 + return name != null? name: stationCode2NameMap.get(prefix + code);
  115 + }
  116 +
  117 +/* @Autowired
  118 + JdbcTemplate jdbcTemplate;
  119 + public Map<String, String> getNbbm2PlateNo(){
  120 + List<Map<String, Object>> list = jdbcTemplate.queryForList("select CAR_CODE,CAR_PLATE from bsth_c_cars where CAR_CODE is not null and CAR_PLATE is not null");
  121 +
  122 + Map<String, String> rs = new HashMap<>();
  123 + for(Map<String, Object> map : list){
  124 + rs.put(map.get("CAR_CODE").toString(), map.get("CAR_PLATE").toString());
  125 + }
  126 + return rs;
  127 + }*/
  128 +
  129 + @Component
  130 + public static class BasicDataLoader extends Thread {
  131 +
  132 + @Autowired
  133 + CarsRepository carsRepository;
  134 +
  135 + @Autowired
  136 + StationRepository stationRepository;
  137 +
  138 + @Autowired
  139 + CarParkRepository carParkRepository;
  140 +
  141 + @Autowired
  142 + CarConfigInfoRepository carConfigInfoRepository;
  143 +
  144 + @Autowired
  145 + LineRepository lineRepository;
  146 +
  147 + @Autowired
  148 + StationRouteRepository stationRouteRepository;
  149 +
  150 + @Autowired
  151 + PersonnelRepository personnelRepository;
  152 +
  153 + @Autowired
  154 + BusinessRepository businessRepository;
  155 +
  156 + @Autowired
  157 + GeoCacheData geoCacheData;
  158 +
  159 + @Autowired
  160 + Station2ParkBuffer station2ParkBuffer;
  161 +
  162 + @Autowired
  163 + PersionPinYinBuffer persionPinYinBuffer;
  164 +
  165 + @Autowired
  166 + CalcIntervalRepository calcIntervalRepository;
  167 +
  168 + @Override
  169 + public void run() {
  170 + loadAllData();
  171 + }
  172 +
  173 + /**
  174 + * @Title: loadAllData
  175 + * @Description: TODO(加载所有数据)
  176 + */
  177 + public int loadAllData() {
  178 + try {
  179 + logger.info("开始加载基础数据..,");
  180 + //设备信息
  181 + loadDeviceInfo();
  182 + //站点信息
  183 + loadStationInfo();
  184 + //线路信息
  185 + loadLineInfo();
  186 + //车辆和线路映射信息
  187 + loadNbbm2LineInfo();
  188 + loadLineCodeHistoryNbbmMapInfo();
  189 + //人员信息
  190 + loadPersonnelInfo();
  191 + //公司信息
  192 + loadBusinessInfo();
  193 + // 线路等级信息
  194 + loadLineLevel();
  195 +
  196 + logger.info("load geo cache..,");
  197 + geoCacheData.loadData();
  198 + station2ParkBuffer.saveAll();
  199 + logger.info("加载基础数据成功!,");
  200 + } catch (Exception e) {
  201 + logger.error("加载基础数据时出现异常,", e);
  202 + }
  203 + return 0;
  204 + }
  205 +
  206 + /**
  207 + * loadBusinessInfo
  208 + * (公司代码公司名对照)
  209 + */
  210 + public void loadBusinessInfo() {
  211 + Map<String, String> businessMap = new HashMap<String, String>();
  212 + Map<String, String> businessFgsMap = new HashMap<String, String>();
  213 + Iterator<Business> busIter = businessRepository.findAll().iterator();
  214 + Business t;
  215 + while (busIter.hasNext()) {
  216 + t = busIter.next();
  217 + businessMap.put(t.getBusinessCode(), t.getBusinessName());
  218 + businessFgsMap.put(t.getBusinessCode() + "_" + t.getUpCode(), t.getBusinessName());
  219 + }
  220 + businessCodeNameMap = businessMap;
  221 + businessFgsCodeNameMap = businessFgsMap;
  222 + }
  223 +
  224 + /**
  225 + * @Title: loadDeviceInfo
  226 + * @Description: TODO(加载设备相关信息)
  227 + */
  228 + public void loadDeviceInfo() {
  229 + BiMap<String, String> deviceId2Nbbm = HashBiMap.create();
  230 + //车辆和公司代码对照
  231 + Map<String, String> nbbm2CompanyCode = new HashMap<>();
  232 + //车辆和分公司代码对照
  233 + Map<String, String> nbbm2FgsCompanyCode = new HashMap<>();
  234 +
  235 + //车辆自编号和拍照号对照
  236 + BiMap<String, String> nbbmCompanyPlate = HashBiMap.create();
  237 +
  238 + Iterator<Cars> carIterator = carsRepository.findAll().iterator();
  239 + Cars car;
  240 + while (carIterator.hasNext()) {
  241 + car = carIterator.next();
  242 + deviceId2Nbbm.put(car.getEquipmentCode(), car.getInsideCode());
  243 + nbbm2CompanyCode.put(car.getInsideCode(), car.getBusinessCode());
  244 + nbbm2FgsCompanyCode.put(car.getInsideCode(), car.getBrancheCompanyCode() + "_" + car.getBusinessCode() );
  245 + nbbmCompanyPlate.put(car.getInsideCode(), car.getCarPlate());
  246 + }
  247 +
  248 + deviceId2NbbmMap = deviceId2Nbbm;
  249 + nbbm2CompanyCodeMap = nbbm2CompanyCode;
  250 + nbbm2FgsCompanyCodeMap = nbbm2FgsCompanyCode;
  251 + nbbmCompanyPlateMap =nbbmCompanyPlate;
  252 + }
  253 +
  254 + /**
  255 + * @Title: loadStationInfo
  256 + * @Description: TODO(加载站点信息)
  257 + */
  258 + public void loadStationInfo() {
  259 + Map<String, String> stationCode2Name = new HashMap<>();
  260 + Iterator<StationRoute> iterator = stationRouteRepository.findAll().iterator();
  261 + StationRoute sroute;
  262 + while (iterator.hasNext()) {
  263 + sroute = iterator.next();
  264 + stationCode2Name.put(sroute.getLineCode() + "_" + sroute.getDirections() + "_" + sroute.getStationCode(), sroute.getStationName());
  265 + }
  266 +
  267 + //停车场
  268 + Iterator<CarPark> iterator2 = carParkRepository.findAll().iterator();
  269 +
  270 + List<String> parkCodes = new ArrayList<>();
  271 +
  272 + CarPark carPark;
  273 + while (iterator2.hasNext()) {
  274 + carPark = iterator2.next();
  275 + stationCode2Name.put(carPark.getParkCode(), carPark.getParkName());
  276 +
  277 + parkCodes.add(carPark.getParkCode());
  278 + }
  279 + parkCodeList = parkCodes;
  280 + stationCode2NameMap = stationCode2Name;
  281 + }
  282 +
  283 + /**
  284 + * @Title: loadNbbm2LineInfo
  285 + * @Description: TODO(车辆和线路对照)
  286 + */
  287 + public void loadNbbm2LineInfo() {
  288 + Iterator<CarConfigInfo> allIterator = carConfigInfoRepository.findAll().iterator();
  289 + Map<String, Line> ccMap = new HashMap<>();
  290 +
  291 + CarConfigInfo cci;
  292 + while (allIterator.hasNext()) {
  293 + cci = allIterator.next();
  294 + if(cci.getIsCancel())
  295 + continue;//排除已经报废的
  296 + ccMap.put(cci.getCl().getInsideCode(), cci.getXl());
  297 + }
  298 + nbbm2LineMap = ccMap;
  299 + }
  300 +
  301 + /**
  302 + * @Title: loadLineCodeHistoryNbbmMapInfo
  303 + * @Description: TODO(线路历史配车)
  304 + */
  305 + public void loadLineCodeHistoryNbbmMapInfo() {
  306 + Iterator<CarConfigInfo> allIterator = carConfigInfoRepository.findAll().iterator();
  307 + Map<String, List<String>> ccMap = new HashMap<>(); //用list保持排序
  308 + Map<String, Set<String>> sMap = new HashMap<>(); //用Set去重
  309 +
  310 + CarConfigInfo cci;
  311 + while (allIterator.hasNext()) {
  312 + cci = allIterator.next();
  313 + String lineCode = cci.getXl().getLineCode();
  314 + if(!ccMap.containsKey(lineCode)){
  315 + ccMap.put(lineCode, new ArrayList<String>());
  316 + sMap.put(lineCode, new HashSet<String>());
  317 + }
  318 + if(sMap.get(lineCode).add(cci.getCl().getInsideCode())){
  319 + ccMap.get(lineCode).add(cci.getCl().getInsideCode());
  320 + }
  321 + }
  322 + lineCodeHistoryNbbmMap = ccMap;
  323 + }
  324 +
  325 + /**
  326 + * @Title: loadLineInfo
  327 + * @Description: TODO(加载线路相关信息)
  328 + */
  329 + public void loadLineInfo() {
  330 + Iterator<Line> iterator = lineRepository.findAllService().iterator();
  331 +
  332 + Line line;
  333 + BiMap<Integer, String> biMap = HashBiMap.create();
  334 + Map<String, String> code2name = new HashMap<>();
  335 + Map<Integer, String> id2SHcode = new HashMap<Integer, String>();
  336 + Map<String, String> code2SHcode = new HashMap<String, String>();
  337 + Map<String, Integer> tempStationName2YgcNumber = new HashMap<String, Integer>();
  338 +
  339 + /**
  340 + * 加载运管处的站点及序号
  341 + * 上行从1开始,下行顺序续编
  342 + */
  343 + List<Map<String, String>> ygcLines = stationRouteRepository.findAllLineWithYgc();
  344 + if(ygcLines != null && ygcLines.size() > 0){
  345 + int size = ygcLines.size();
  346 + Map<String, String> tempMap ;
  347 + int num = 1;
  348 + String key;
  349 + String lineCode = "";
  350 + for (int i = 0; i < size; i ++){
  351 + tempMap = ygcLines.get(i);
  352 + if(lineCode.equals("")){
  353 + lineCode = tempMap.get("lineCode");
  354 + }else if(!lineCode.equals(tempMap.get("lineCode"))){
  355 + num = 1;
  356 + lineCode = tempMap.get("lineCode");
  357 + }
  358 + key = tempMap.get("lineCode") + "_"+String.valueOf(tempMap.get("directions"))
  359 + + "_"+tempMap.get("stationCode")+ "_"+tempMap.get("stationMark");
  360 + tempStationName2YgcNumber.put(key,num++);
  361 + }
  362 + }
  363 +
  364 + while (iterator.hasNext()) {
  365 + line = iterator.next();
  366 + biMap.put(line.getId(), line.getLineCode());
  367 + code2name.put(line.getLineCode(), line.getName());
  368 + id2SHcode.put(line.getId(), line.getShanghaiLinecode());
  369 + code2SHcode.put(line.getLineCode(), line.getShanghaiLinecode());
  370 + }
  371 +
  372 + lineId2CodeMap = biMap;
  373 + lineCode2NameMap = code2name;
  374 + lineId2ShangHaiCodeMap = id2SHcode;
  375 + lineCode2ShangHaiCodeMap = code2SHcode;
  376 + stationName2YgcNumber = tempStationName2YgcNumber;
  377 +
  378 + Map<String, String> code2nameAll = new HashMap<>();
  379 + Iterator<Line> iteratorAll = lineRepository.findAll().iterator();
  380 + while (iteratorAll.hasNext()) {
  381 + line = iteratorAll.next();
  382 + code2nameAll.put(line.getLineCode(), line.getName());
  383 + }
  384 + lineCodeAllNameMap=code2nameAll;
  385 + }
  386 +
  387 + /**
  388 + * @Title: loadPersonnelInfo
  389 + * @Description: TODO(加载人员信息)
  390 + */
  391 + public void loadPersonnelInfo() {
  392 + Iterator<Personnel> iterator = personnelRepository.findAll().iterator();
  393 +
  394 + Map<String, Personnel> /*jsyTempMap = new HashMap<>(), spyTempMap = new HashMap<>(),*/perTempMap=new HashMap<>();
  395 + Map<String, String> allPersonMap = new HashMap<>();
  396 +
  397 + Personnel p;
  398 + String jobCode;
  399 + while (iterator.hasNext()) {
  400 + p = iterator.next();
  401 +
  402 + jobCode = p.getJobCode();
  403 + if (StringUtils.isEmpty(jobCode))
  404 + continue;
  405 +
  406 + /*if (p.getPosts() != null) {
  407 + if (p.getPosts().equals("1"))
  408 + jsyTempMap.put(jobCode, p);
  409 + else if (p.getPosts().equals("2"))
  410 + spyTempMap.put(jobCode, p);
  411 + }*/
  412 +
  413 + perTempMap.put(jobCode, p);
  414 +
  415 + allPersonMap.put(jobCode, p.getPersonnelName());
  416 + }
  417 +
  418 + //jsyMap = jsyTempMap;
  419 + //spyMap = spyTempMap;
  420 + allPerson = allPersonMap;
  421 + perMap = perTempMap;
  422 +
  423 + //人员拼音转换
  424 + persionPinYinBuffer.refresh();
  425 + }
  426 +
  427 + /**
  428 + * 加载线路级别信息 按当前日期取(当前+前后一天)的数据
  429 + */
  430 + public void loadLineLevel() {
  431 + List<String> dates = new ArrayList<>();
  432 + Map<String, String> result = new HashMap<>();
  433 + DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
  434 +
  435 + Calendar c = Calendar.getInstance();
  436 + c.setTime(new Date(System.currentTimeMillis() - 86400000));
  437 + dates.add(df.format(c.getTime()));
  438 +
  439 + for (int i = 0;i < 2;i++) {
  440 + c.add(Calendar.DATE, 1);
  441 + dates.add(df.format(c.getTime()));
  442 + }
  443 +
  444 + List<CalcInterval> l = calcIntervalRepository.selectByDates(dates);
  445 + for (CalcInterval ci : l) {
  446 + result.put(ci.getXlBm() + "_" + ci.getDate(), ci.getLevel());
  447 + }
  448 +
  449 + lineDate2Level = result;
  450 + }
  451 + }
  452 +}