Commit c8d5078df1f4d65ac13e6e02deb6d645cd31d90b

Authored by 潘钊
2 parents 922a65c0 0734f5ef

Merge branch 'minhang' of http://222.66.0.204:8090/panzhaov5/bsth_control into minhang

# Conflicts:
#	src/main/java/com/bsth/data/gpsdata/arrival/handlers/InOutStationSignalHandle.java
#	src/main/java/com/bsth/data/gpsdata/arrival/utils/ScheduleSignalState.java
Showing 23 changed files with 1327 additions and 1311 deletions
src/main/java/com/bsth/controller/forms/ExportController.java
@@ -321,31 +321,34 @@ public class ExportController { @@ -321,31 +321,34 @@ public class ExportController {
321 List<Turnoutrate> turnoutrate = formsService.turnoutrate(map); 321 List<Turnoutrate> turnoutrate = formsService.turnoutrate(map);
322 Map<String, Object> map1 = new HashMap<String, Object>(); 322 Map<String, Object> map1 = new HashMap<String, Object>();
323 List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>(); 323 List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();
324 - /*Float xlts=0f;  
325 - Float jh=0f; 324 + String xlts="";
  325 + String zsgs="";
  326 + String jh="";
  327 + Float j=0f;
326 Float sj=0f; 328 Float sj=0f;
327 Float qz=0f; 329 Float qz=0f;
328 Float ccl=0f; 330 Float ccl=0f;
329 Float bcjh=0f; 331 Float bcjh=0f;
330 - Float bcsj=0f; 332 + String bcsj="";
331 Float bczxl=0f; 333 Float bczxl=0f;
332 - Float gs=0f;  
333 - Float zhgs=0f;*/ 334 + String gs="";
  335 + String zhgs="";
334 336
335 for (Turnoutrate l : turnoutrate) { 337 for (Turnoutrate l : turnoutrate) {
336 Map<String, Object> m = new HashMap<String, Object>(); 338 Map<String, Object> m = new HashMap<String, Object>();
337 339
338 - /* xlts +=l.getGs()==""?0f:Float.valueOf(l.getGs());  
339 - jh +=l.getZhgs()==""?0f:Float.valueOf(l.getZhgs());  
340 - sj +=l.getXl()==""?0f:Float.valueOf(l.getXl());  
341 - ccl +=l.getCchjh()==""?0f:Float.valueOf(l.getCchjh());  
342 - bcjh +=l.getCchsj()==""?0f:Float.valueOf(l.getCchsj());  
343 - bcsj +=l.getChl()==""?0f:Float.valueOf(l.getChl()); 340 + xlts +=l.getGsgs()==""?0:String.valueOf(l.getGsgs());
  341 + zsgs +=l.getFgsgs()==""?0:String.valueOf(l.getFgsgs());
  342 + jh +=l.getXl()==""?0:String.valueOf(l.getXl());
  343 + sj +=l.getCchjh()==""?0f:Float.valueOf(l.getCchjh());
  344 + ccl +=l.getCchsj()==""?0f:Float.valueOf(l.getCchsj());
  345 + bcjh +=l.getCchqz()==""?0f:Float.valueOf(l.getCchqz());
  346 + bcsj +=l.getChl()==""?0:String.valueOf(l.getChl());
344 bczxl +=l.getBcjh()==""?0f:Float.valueOf(l.getBcjh()); 347 bczxl +=l.getBcjh()==""?0f:Float.valueOf(l.getBcjh());
345 - gs +=l.getBbzxl()==""?0f:Float.valueOf(l.getBbzxl());  
346 - zhgs +=l.getBbzxl()==""?0f:Float.valueOf(l.getBbzxl()); 348 + gs +=l.getBcsj()==""?0:String.valueOf(l.getBcsj());
  349 + zhgs +=l.getBbzxl()==""?0:String.valueOf(l.getBbzxl());
  350 +
347 351
348 - */  
349 m.put("rq", l.getRq()); 352 m.put("rq", l.getRq());
350 m.put("gs", l.getGs()); 353 m.put("gs", l.getGs());
351 m.put("zhgs", l.getZhgs()); 354 m.put("zhgs", l.getZhgs());
@@ -355,23 +358,27 @@ public class ExportController { @@ -355,23 +358,27 @@ public class ExportController {
355 m.put("cchqz", l.getCchqz()); 358 m.put("cchqz", l.getCchqz());
356 m.put("chl", l.getChl()); 359 m.put("chl", l.getChl());
357 m.put("bcjh", l.getBcjh()); 360 m.put("bcjh", l.getBcjh());
358 - m.put("bcsj", l.getBbzxl()); 361 + m.put("bcsj", l.getBcsj());
359 m.put("bbzxl", l.getBbzxl()); 362 m.put("bbzxl", l.getBbzxl());
360 m.put("sm", l.getSm()); 363 m.put("sm", l.getSm());
361 resList.add(m); 364 resList.add(m);
362 365
363 - /*m=new HashMap<String,Object>();  
364 - m.put("total_xlts", jh); 366 +
  367 +
  368 + m=new HashMap<String,Object>();
  369 + m.put("total_xlts", xlts);
  370 + m.put("total_zhgs", zsgs);
365 m.put("total_jh", jh); 371 m.put("total_jh", jh);
366 m.put("total_sj", sj); 372 m.put("total_sj", sj);
367 - m.put("total_qz", qz);  
368 - m.put("total_ccl", ccl);  
369 - m.put("total_bcjh", bcjh);  
370 - m.put("total_bcsj", bcsj); 373 + m.put("total_qz", ccl);
  374 + m.put("total_ccl", bcjh);
  375 + m.put("total_bcjh",bcsj);
  376 + m.put("total_bcsj", bczxl);
371 m.put("total_bczxl", bczxl); 377 m.put("total_bczxl", bczxl);
372 - m.put("total_gs", gs);  
373 - m.put("total_zhgs", zhgs);  
374 - */ 378 + m.put("total_gs", zhgs);
  379 +
  380 +
  381 + map1 = m;
375 } 382 }
376 383
377 try { 384 try {
@@ -385,7 +392,7 @@ public class ExportController { @@ -385,7 +392,7 @@ public class ExportController {
385 return resList; 392 return resList;
386 } 393 }
387 394
388 - //营运线路出车率统计表 395 + //班次执行率统计表
389 @RequestMapping(value = "/executionrateExport", method = RequestMethod.POST) 396 @RequestMapping(value = "/executionrateExport", method = RequestMethod.POST)
390 public List<Map<String, Object>> executionrateExport(@RequestParam Map<String, Object> map) { 397 public List<Map<String, Object>> executionrateExport(@RequestParam Map<String, Object> map) {
391 SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"), sdfSimple = new SimpleDateFormat("yyyyMMdd"); 398 SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"), sdfSimple = new SimpleDateFormat("yyyyMMdd");
@@ -394,29 +401,33 @@ public class ExportController { @@ -394,29 +401,33 @@ public class ExportController {
394 List<Executionrate> executionrate = formsService.executionrate(map); 401 List<Executionrate> executionrate = formsService.executionrate(map);
395 Map<String, Object> map1 = new HashMap<String, Object>(); 402 Map<String, Object> map1 = new HashMap<String, Object>();
396 List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>(); 403 List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();
397 - /* Float xlts=0f;  
398 - Float jh=0f; 404 + String xlts="";
  405 + String zsgs="";
  406 + String jh="";
399 Float sj=0f; 407 Float sj=0f;
400 Float ccl=0f; 408 Float ccl=0f;
401 Float bcjh=0f; 409 Float bcjh=0f;
402 - Float bcsj=0f; 410 + String bcsj="";
403 Float bczxl=0f; 411 Float bczxl=0f;
404 - Float gs=0f;  
405 - Float zhgs=0f;*/ 412 + String gs="";
  413 + String zhgs="";
406 414
  415 + Map<String, Object> m = new HashMap<String, Object>();
  416 +
407 for (Executionrate l : executionrate) { 417 for (Executionrate l : executionrate) {
408 - Map<String, Object> m = new HashMap<String, Object>();  
409 - /* xlts +=l.getGs()==""?0f:Float.valueOf(l.getGs());  
410 - jh +=l.getZhgs()==""?0f:Float.valueOf(l.getZhgs());  
411 - sj +=l.getXl()==""?0f:Float.valueOf(l.getXl());  
412 - ccl +=l.getCchjh()==""?0f:Float.valueOf(l.getCchjh());  
413 - bcjh +=l.getCchsj()==""?0f:Float.valueOf(l.getCchsj());  
414 - bcsj +=l.getChl()==""?0f:Float.valueOf(l.getChl()); 418 +
  419 + xlts +=l.getGsgs()==""?0:String.valueOf(l.getGsgs());
  420 + zsgs +=l.getFgsgs()==""?0:String.valueOf(l.getFgsgs());
  421 + jh +=l.getXl()==""?0:String.valueOf(l.getXl());
  422 + sj +=l.getCchjh()==""?0f:Float.valueOf(l.getCchjh());
  423 + ccl +=l.getCchsj()==""?0f:Float.valueOf(l.getCchsj());
  424 + bcsj +=l.getChl()==""?0:String.valueOf(l.getChl());
415 bczxl +=l.getBcjh()==""?0f:Float.valueOf(l.getBcjh()); 425 bczxl +=l.getBcjh()==""?0f:Float.valueOf(l.getBcjh());
416 - gs +=l.getBbzxl()==""?0f:Float.valueOf(l.getBbzxl());  
417 - zhgs +=l.getBbzxl()==""?0f:Float.valueOf(l.getBbzxl()); 426 + gs +=l.getBcsj()==""?0:String.valueOf(l.getBcsj());
  427 + zhgs +=l.getBbzxl()==""?0:String.valueOf(l.getBbzxl());
  428 +
  429 +
418 430
419 - */  
420 m.put("rq", l.getRq()); 431 m.put("rq", l.getRq());
421 m.put("gs", l.getGs()); 432 m.put("gs", l.getGs());
422 m.put("zhgs", l.getZhgs()); 433 m.put("zhgs", l.getZhgs());
@@ -425,23 +436,24 @@ public class ExportController { @@ -425,23 +436,24 @@ public class ExportController {
425 m.put("cchsj", l.getCchsj()); 436 m.put("cchsj", l.getCchsj());
426 m.put("chl", l.getChl()); 437 m.put("chl", l.getChl());
427 m.put("bcjh", l.getBcjh()); 438 m.put("bcjh", l.getBcjh());
428 - m.put("bcsj", l.getBbzxl()); 439 + m.put("bcsj", l.getBcsj());
429 m.put("bbzxl", l.getBbzxl()); 440 m.put("bbzxl", l.getBbzxl());
430 m.put("sm", l.getSm()); 441 m.put("sm", l.getSm());
431 resList.add(m); 442 resList.add(m);
432 443
433 444
434 - /* m=new HashMap<String,Object>(); 445 + m=new HashMap<String,Object>();
  446 + m.put("total_gs", xlts);
  447 + m.put("total_zhgs", zsgs);
435 m.put("total_xlts", jh); 448 m.put("total_xlts", jh);
436 - m.put("total_jh", jh);  
437 - m.put("total_sj", sj);  
438 - m.put("total_ccl", ccl);  
439 - m.put("total_bcjh", bcjh);  
440 - m.put("total_bcsj", bcsj);  
441 - m.put("total_bczxl", bczxl);  
442 - m.put("total_gs", gs);  
443 - m.put("total_zhgs", zhgs);*/ 449 + m.put("total_jh", sj);
  450 + m.put("total_sj", ccl);
  451 + m.put("total_ccl",bcsj);
  452 + m.put("total_bcjh", bczxl);
  453 + m.put("total_bcsj", gs);
  454 + m.put("total_bczxl", zhgs);
444 455
  456 + map1 = m;
445 } 457 }
446 458
447 try { 459 try {
@@ -465,41 +477,42 @@ public class ExportController { @@ -465,41 +477,42 @@ public class ExportController {
465 List<Allline> allline = formsService.allline(map); 477 List<Allline> allline = formsService.allline(map);
466 Map<String, Object> map1 = new HashMap<String, Object>(); 478 Map<String, Object> map1 = new HashMap<String, Object>();
467 List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>(); 479 List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();
468 - /* Integer jh=0; 480 + Integer jh=0;
469 Integer sj=0; 481 Integer sj=0;
470 Integer ccl=0; 482 Integer ccl=0;
471 - Integer bcjh=0;  
472 - Float bcsj=0f; 483 + Double bcjh=0.0;
  484 + String bcsj="";
473 Integer bczxl=0; 485 Integer bczxl=0;
474 - Integer gs=0;  
475 - Float zhgs=0f;  
476 - */ 486 + String gs="";
  487 + String zhgs="";
  488 + Map<String, Object> m ;
477 for (Allline l : allline) { 489 for (Allline l : allline) {
478 - Map<String, Object> m = new HashMap<String, Object>(); 490 + m = new HashMap<String, Object>();
479 491
480 - /*jh +=l.getGsgs()=="" ? 0: Integer.valueOf(l.getGsgs()); 492 + jh +=l.getGsgs()=="" ? 0: Integer.valueOf(l.getGsgs());
481 sj +=l.getFgsgs()==""?0: Integer.valueOf(l.getFgsgs()); 493 sj +=l.getFgsgs()==""?0: Integer.valueOf(l.getFgsgs());
482 ccl +=l.getCchjh()==""?0: Integer.valueOf(l.getCchjh()); 494 ccl +=l.getCchjh()==""?0: Integer.valueOf(l.getCchjh());
483 - bcjh +=l.getCchsj()==""?0: Integer.valueOf(l.getCchsj());  
484 - bcsj +=l.getChl()==""?0f:Float.valueOf(l.getChl()); 495 + bcjh +=l.getCchsj()==""?0: Double.valueOf(l.getCchsj());
  496 +
  497 + bcsj +=l.getChl()==""? 0:String.valueOf(l.getChl());
485 bczxl +=l.getBcjh()==""?0: Integer.valueOf(l.getBcjh()); 498 bczxl +=l.getBcjh()==""?0: Integer.valueOf(l.getBcjh());
486 - gs +=l.getBbzxl()==""?0: Integer.valueOf(l.getBbzxl());  
487 - zhgs +=l.getBbzxl()==""?0f:Float.valueOf(l.getBbzxl());  
488 - */ 499 + gs +=l.getBcsj()==""?0: String.valueOf(l.getBcsj());
  500 + zhgs +=l.getBbzxl()==""?0:String.valueOf(l.getBbzxl());
  501 +
489 m.put("rq", l.getRq()); 502 m.put("rq", l.getRq());
490 - m.put("gs", l.getGsgs());  
491 - m.put("zhgs", l.getFgsgs());  
492 - //m.put("xl", l.getXl()); 503 + m.put("gs", l.getGs());
  504 + m.put("zhgs", l.getZhgs());
  505 + m.put("xl", l.getXl());
493 m.put("cchjh", l.getCchjh()); 506 m.put("cchjh", l.getCchjh());
494 m.put("cchsj", l.getCchsj()); 507 m.put("cchsj", l.getCchsj());
495 m.put("chl", l.getChl()); 508 m.put("chl", l.getChl());
496 m.put("bcjh", l.getBcjh()); 509 m.put("bcjh", l.getBcjh());
497 - m.put("bcsj", l.getBbzxl()); 510 + m.put("bcsj", l.getBcsj());
498 m.put("bbzxl", l.getBbzxl()); 511 m.put("bbzxl", l.getBbzxl());
499 m.put("sm", l.getSm()); 512 m.put("sm", l.getSm());
500 resList.add(m); 513 resList.add(m);
501 514
502 - /*m=new HashMap<String,Object>(); 515 + m=new HashMap<String,Object>();
503 m.put("total_jh", jh); 516 m.put("total_jh", jh);
504 m.put("total_sj", sj); 517 m.put("total_sj", sj);
505 m.put("total_ccl", ccl); 518 m.put("total_ccl", ccl);
@@ -508,7 +521,8 @@ public class ExportController { @@ -508,7 +521,8 @@ public class ExportController {
508 m.put("total_bczxl", bczxl); 521 m.put("total_bczxl", bczxl);
509 m.put("total_gs", gs); 522 m.put("total_gs", gs);
510 m.put("total_zhgs", zhgs); 523 m.put("total_zhgs", zhgs);
511 - */ 524 + map1 = m;
  525 +
512 } 526 }
513 527
514 try { 528 try {
src/main/java/com/bsth/controller/realcontrol/SignalStateController.java
1 -package com.bsth.controller.realcontrol;  
2 -  
3 -import com.bsth.data.gpsdata.SignalStateData;  
4 -import com.bsth.data.gpsdata.arrival.entity.SignalState;  
5 -import org.springframework.beans.factory.annotation.Autowired;  
6 -import org.springframework.web.bind.annotation.RequestMapping;  
7 -import org.springframework.web.bind.annotation.RequestParam;  
8 -import org.springframework.web.bind.annotation.RestController;  
9 -  
10 -import java.util.List;  
11 -  
12 -/**  
13 - * Created by panzhao on 2016/12/30.  
14 - */  
15 -@RestController  
16 -@RequestMapping("signalState")  
17 -public class SignalStateController {  
18 -  
19 - @Autowired  
20 - SignalStateData signalStateData;  
21 -  
22 - @RequestMapping("/multi")  
23 - public List<SignalState> findByMultiLine(@RequestParam String idx){  
24 - return signalStateData.get(idx);  
25 - }  
26 -} 1 +package com.bsth.controller.realcontrol;
  2 +
  3 +import com.bsth.data.gpsdata.SignalStateData;
  4 +import com.bsth.data.gpsdata.arrival.entity.SignalState;
  5 +import org.springframework.beans.factory.annotation.Autowired;
  6 +import org.springframework.web.bind.annotation.RequestMapping;
  7 +import org.springframework.web.bind.annotation.RequestParam;
  8 +import org.springframework.web.bind.annotation.RestController;
  9 +
  10 +import java.util.List;
  11 +
  12 +/**
  13 + * Created by panzhao on 2016/12/30.
  14 + */
  15 +@RestController
  16 +@RequestMapping("signalState")
  17 +public class SignalStateController {
  18 +
  19 + @Autowired
  20 + SignalStateData signalStateData;
  21 +
  22 + @RequestMapping("/multi")
  23 + public List<SignalState> findByMultiLine(@RequestParam String idx){
  24 + return signalStateData.get(idx);
  25 + }
  26 +}
src/main/java/com/bsth/data/gpsdata/SignalStateData.java
1 -package com.bsth.data.gpsdata;  
2 -  
3 -import com.bsth.data.gpsdata.arrival.entity.SignalState;  
4 -import com.bsth.websocket.handler.SendUtils;  
5 -import com.google.common.base.Splitter;  
6 -import com.google.common.collect.ArrayListMultimap;  
7 -import org.springframework.beans.factory.annotation.Autowired;  
8 -import org.springframework.stereotype.Component;  
9 -  
10 -import java.util.ArrayList;  
11 -import java.util.List;  
12 -  
13 -/**  
14 - * 信号状态数据  
15 - * Created by panzhao on 2016/12/30.  
16 - */  
17 -@Component  
18 -public class SignalStateData {  
19 -  
20 - @Autowired  
21 - SendUtils sendUtils;  
22 -  
23 - private static ArrayListMultimap<String, SignalState> listMultimap = ArrayListMultimap.create();  
24 -  
25 - public void put(SignalState state){  
26 - listMultimap.put(state.getLineCode(), state);  
27 - //推送到客户端  
28 - sendUtils.sendSignalState(state);  
29 - }  
30 -  
31 - public List<SignalState> get(String idx){  
32 - List<SignalState> rs = new ArrayList<>();  
33 - List<String> ids = Splitter.on(",").splitToList(idx);  
34 -  
35 - for(String lineCode : ids){  
36 - rs.addAll(listMultimap.get(lineCode));  
37 - }  
38 - return rs;  
39 - }  
40 -} 1 +package com.bsth.data.gpsdata;
  2 +
  3 +import com.bsth.data.gpsdata.arrival.entity.SignalState;
  4 +import com.bsth.websocket.handler.SendUtils;
  5 +import com.google.common.base.Splitter;
  6 +import com.google.common.collect.ArrayListMultimap;
  7 +import org.springframework.beans.factory.annotation.Autowired;
  8 +import org.springframework.stereotype.Component;
  9 +
  10 +import java.util.ArrayList;
  11 +import java.util.List;
  12 +
  13 +/**
  14 + * 信号状态数据
  15 + * Created by panzhao on 2016/12/30.
  16 + */
  17 +@Component
  18 +public class SignalStateData {
  19 +
  20 + @Autowired
  21 + SendUtils sendUtils;
  22 +
  23 + private static ArrayListMultimap<String, SignalState> listMultimap = ArrayListMultimap.create();
  24 +
  25 + public void put(SignalState state){
  26 + listMultimap.put(state.getLineCode(), state);
  27 + //推送到客户端
  28 + sendUtils.sendSignalState(state);
  29 + }
  30 +
  31 + public List<SignalState> get(String idx){
  32 + List<SignalState> rs = new ArrayList<>();
  33 + List<String> ids = Splitter.on(",").splitToList(idx);
  34 +
  35 + for(String lineCode : ids){
  36 + rs.addAll(listMultimap.get(lineCode));
  37 + }
  38 + return rs;
  39 + }
  40 +}
src/main/java/com/bsth/data/gpsdata/arrival/GeoCacheData.java
1 -package com.bsth.data.gpsdata.arrival;  
2 -  
3 -import com.bsth.data.gpsdata.GpsEntity;  
4 -import com.bsth.data.gpsdata.arrival.entity.StationRoute;  
5 -import com.bsth.data.gpsdata.arrival.utils.CircleQueue;  
6 -import com.bsth.data.gpsdata.arrival.utils.StationRouteComp;  
7 -import com.google.common.collect.ArrayListMultimap;  
8 -import com.vividsolutions.jts.geom.Coordinate;  
9 -import com.vividsolutions.jts.geom.GeometryFactory;  
10 -import com.vividsolutions.jts.geom.LineString;  
11 -import com.vividsolutions.jts.geom.Polygon;  
12 -import org.apache.commons.lang3.StringUtils;  
13 -import org.slf4j.Logger;  
14 -import org.slf4j.LoggerFactory;  
15 -import org.springframework.beans.factory.annotation.Autowired;  
16 -import org.springframework.jdbc.core.JdbcTemplate;  
17 -import org.springframework.jdbc.core.RowMapper;  
18 -import org.springframework.stereotype.Component;  
19 -  
20 -import java.sql.ResultSet;  
21 -import java.sql.SQLException;  
22 -import java.util.*;  
23 -  
24 -/**  
25 - * Created by panzhao on 2016/12/23.  
26 - */  
27 -@Component  
28 -public class GeoCacheData {  
29 -  
30 - static Logger logger = LoggerFactory.getLogger(GeoCacheData.class);  
31 -  
32 - //每辆车缓存最后1000条gps  
33 - private static final int CACHE_SIZE = 1000;  
34 - private static Map<String, CircleQueue<GpsEntity>> gpsCacheMap = new HashMap<>();  
35 -  
36 - //线路路段走向  
37 - private static ArrayListMultimap<String, LineString> sectionCacheMap;  
38 -  
39 - //线路站点路由  
40 - private static ArrayListMultimap<String, StationRoute> stationCacheMap;  
41 -  
42 - //线路_上下行_站点编码 ——> 站点  
43 - private static Map<String, StationRoute> routeCodeMap;  
44 -  
45 - //停车场  
46 - public static Map<String, Polygon> tccMap;  
47 -  
48 - @Autowired  
49 - JdbcTemplate jdbcTemplate;  
50 -  
51 - public static CircleQueue<GpsEntity> getGps(String nbbm) {  
52 - return gpsCacheMap.get(nbbm);  
53 - }  
54 -  
55 - public static void putGps(GpsEntity gps) {  
56 - CircleQueue<GpsEntity> queue = gpsCacheMap.get(gps.getNbbm());  
57 - if (queue == null) {  
58 - /*//第一个点从站内开始  
59 - if (gps.getInstation() == 0)  
60 - return;*/  
61 -  
62 - queue = new CircleQueue<>(CACHE_SIZE);  
63 - gpsCacheMap.put(gps.getNbbm(), queue);  
64 - }  
65 - queue.add(gps);  
66 - }  
67 -  
68 - public static void clear(String nbbm) {  
69 - try {  
70 - CircleQueue<GpsEntity> queue = gpsCacheMap.get(nbbm);  
71 - if (queue != null)  
72 - queue.clear();  
73 - } catch (Exception e) {  
74 - logger.error("", e);  
75 - }  
76 - }  
77 -  
78 - public static StationRoute getRouteCode(GpsEntity gps) {  
79 - return routeCodeMap.get(gps.getLineId() + "_" + gps.getUpDown() + "_" + gps.getStopNo());  
80 - }  
81 -  
82 - public static List<StationRoute> getStationRoute(String lineCode, int directions) {  
83 - return stationCacheMap.get(lineCode + "_" + directions);  
84 - }  
85 -  
86 - public static StationRoute getStation(String lineCode, int directions, String code) {  
87 - List<StationRoute> list = getStationRoute(lineCode, directions);  
88 -  
89 - for (StationRoute sr : list) {  
90 - if (sr.getCode().equals(code)) {  
91 - return sr;  
92 - }  
93 - }  
94 - return null;  
95 - }  
96 -  
97 - public static List<StationRoute> midwayStation(String lineCode, int directions, String sCode, String eCode) {  
98 - List<StationRoute> list = getStationRoute(lineCode, directions), rs = new ArrayList<>();  
99 -  
100 - boolean flag = false;  
101 - for (StationRoute sr : list) {  
102 - if (flag)  
103 - rs.add(sr);  
104 - if (sr.getCode().equals(sCode))  
105 - flag = true;  
106 - else if (sr.getCode().equals(eCode))  
107 - break;  
108 - }  
109 - return rs;  
110 - }  
111 -  
112 - public static Polygon getTccPolygon(String code) {  
113 - return tccMap.get(code);  
114 - }  
115 -  
116 - public void loadData() {  
117 - final GeometryFactory geometryFactory = new GeometryFactory();  
118 - //加载站点路由  
119 - String sql = "select r.LINE_CODE,r.DIRECTIONS,r.STATION_CODE,r.STATION_MARK,s.SHAPES_TYPE,s.G_LONX,s.G_LATY,ST_AsText(s.G_POLYGON_GRID) as G_POLYGON_GRID,s.RADIUS, r.STATION_ROUTE_CODE,s.STATION_NAME from bsth_c_stationroute r left join bsth_c_station s on r.station=s.id where r.destroy=0 order by r.station_route_code";  
120 - List<StationRoute> routeList = jdbcTemplate.query(sql, new RowMapper<StationRoute>() {  
121 - @Override  
122 - public StationRoute mapRow(ResultSet rs, int rowNum) throws SQLException {  
123 - StationRoute sRoute = new StationRoute();  
124 - sRoute.setCode(rs.getString("STATION_CODE"));  
125 - sRoute.setLineCode(rs.getString("LINE_CODE"));  
126 - sRoute.setDirections(rs.getInt("DIRECTIONS"));  
127 - sRoute.setPoint(geometryFactory.createPoint(new Coordinate(rs.getFloat("G_LATY"), rs.getFloat("G_LONX"))));  
128 - sRoute.setRadius(rs.getFloat("RADIUS"));  
129 - sRoute.setRouteSort(rs.getInt("STATION_ROUTE_CODE"));  
130 - sRoute.setMark(rs.getString("STATION_MARK"));  
131 - sRoute.setName(rs.getString("STATION_NAME"));  
132 -  
133 - String shapesType = rs.getString("SHAPES_TYPE");  
134 - //多边形电子围栏  
135 - if (StringUtils.isNotEmpty(shapesType) && shapesType.equals("d")) {  
136 - sRoute.setPolygon(geometryFactory.createPolygon(parsePolygon(rs.getString("G_POLYGON_GRID"))));  
137 - }  
138 - return sRoute;  
139 - }  
140 - });  
141 - //按线路和走向分组  
142 - if (routeList.size() > 0) {  
143 - ArrayListMultimap<String, StationRoute> tempMap = ArrayListMultimap.create();  
144 - Map<String, StationRoute> codeMap = new HashMap<>(routeList.size());  
145 - for (StationRoute sr : routeList) {  
146 - tempMap.put(sr.getLineCode() + "_" + sr.getDirections(), sr);  
147 - //站点编码 ——> 和路由顺序对照  
148 - codeMap.put(sr.getLineCode() + "_" + sr.getDirections() + "_" + sr.getCode(), sr);  
149 - }  
150 -  
151 - StationRouteComp srCom = new StationRouteComp();  
152 - //连接路由  
153 - Set<String> set = tempMap.keySet();  
154 - for (String key : set) {  
155 - Collections.sort(tempMap.get(key), srCom);  
156 - connectStationRoute(tempMap.get(key));  
157 - }  
158 -  
159 - stationCacheMap = tempMap;  
160 - routeCodeMap = codeMap;  
161 - }  
162 -  
163 - //加载停车场数据  
164 - sql = "select PARK_CODE, ST_AsText(G_PARK_POINT) as G_PARK_POINT from bsth_c_car_park where park_code is not null and b_park_point is not null";  
165 - List<Map<String, Object>> tccList = jdbcTemplate.queryForList(sql);  
166 - Map<String, Polygon> tccTempMap = new HashMap<>();  
167 -  
168 - Polygon polygon;  
169 - for (Map<String, Object> tMap : tccList) {  
170 -  
171 - try {  
172 - polygon = geometryFactory.createPolygon(parsePolygon(tMap.get("G_PARK_POINT").toString()));  
173 - tccTempMap.put(tMap.get("PARK_CODE").toString()  
174 - , polygon);  
175 - } catch (Exception e) {  
176 - logger.error("停车场:" + tMap.get("PARK_CODE"), e);  
177 - }  
178 - }  
179 -  
180 - if (tccTempMap.size() > 0)  
181 - tccMap = tccTempMap;  
182 - }  
183 -  
184 - private void connectStationRoute(List<StationRoute> list) {  
185 - int size = list.size();  
186 - StationRoute sr = null;  
187 - for (int i = 0; i < size; i++) {  
188 - sr = list.get(i);  
189 - //上一个  
190 - if (i > 0)  
191 - sr.setPrve(list.get(i - 1));  
192 - //下一个  
193 - if (i < size - 1)  
194 - sr.setNext(list.get(i + 1));  
195 - }  
196 - }  
197 -  
198 - public Coordinate[] parsePolygon(String polygonStr) {  
199 - String[] coords = polygonStr.substring(9, polygonStr.length() - 2).split(","), temps;  
200 -  
201 - Coordinate[] cds = new Coordinate[coords.length];  
202 - int len = coords.length;  
203 - for (int i = 0; i < len; i++) {  
204 - temps = coords[i].split(" ");  
205 - cds[i] = new Coordinate(Float.parseFloat(temps[1]), Float.parseFloat(temps[0]));  
206 - }  
207 - return cds;  
208 - }  
209 -  
210 - /**  
211 - * 是不是终点站  
212 - * @param lineId  
213 - * @param upDown  
214 - * @param stationCode  
215 - * @return  
216 - */  
217 - public static boolean isEndStation(String lineId, Integer upDown, String stationCode) {  
218 - StationRoute station = routeCodeMap.get(lineId + "_" + upDown + "_" + stationCode);  
219 - return station != null && station.getMark().equals("E");  
220 - } 1 +package com.bsth.data.gpsdata.arrival;
  2 +
  3 +import com.bsth.data.gpsdata.GpsEntity;
  4 +import com.bsth.data.gpsdata.arrival.entity.StationRoute;
  5 +import com.bsth.data.gpsdata.arrival.utils.CircleQueue;
  6 +import com.bsth.data.gpsdata.arrival.utils.StationRouteComp;
  7 +import com.google.common.collect.ArrayListMultimap;
  8 +import com.vividsolutions.jts.geom.Coordinate;
  9 +import com.vividsolutions.jts.geom.GeometryFactory;
  10 +import com.vividsolutions.jts.geom.LineString;
  11 +import com.vividsolutions.jts.geom.Polygon;
  12 +import org.apache.commons.lang3.StringUtils;
  13 +import org.slf4j.Logger;
  14 +import org.slf4j.LoggerFactory;
  15 +import org.springframework.beans.factory.annotation.Autowired;
  16 +import org.springframework.jdbc.core.JdbcTemplate;
  17 +import org.springframework.jdbc.core.RowMapper;
  18 +import org.springframework.stereotype.Component;
  19 +
  20 +import java.sql.ResultSet;
  21 +import java.sql.SQLException;
  22 +import java.util.*;
  23 +
  24 +/**
  25 + * Created by panzhao on 2016/12/23.
  26 + */
  27 +@Component
  28 +public class GeoCacheData {
  29 +
  30 + static Logger logger = LoggerFactory.getLogger(GeoCacheData.class);
  31 +
  32 + //每辆车缓存最后1000条gps
  33 + private static final int CACHE_SIZE = 1000;
  34 + private static Map<String, CircleQueue<GpsEntity>> gpsCacheMap = new HashMap<>();
  35 +
  36 + //线路路段走向
  37 + private static ArrayListMultimap<String, LineString> sectionCacheMap;
  38 +
  39 + //线路站点路由
  40 + private static ArrayListMultimap<String, StationRoute> stationCacheMap;
  41 +
  42 + //线路_上下行_站点编码 ——> 站点
  43 + private static Map<String, StationRoute> routeCodeMap;
  44 +
  45 + //停车场
  46 + public static Map<String, Polygon> tccMap;
  47 +
  48 + @Autowired
  49 + JdbcTemplate jdbcTemplate;
  50 +
  51 + public static CircleQueue<GpsEntity> getGps(String nbbm) {
  52 + return gpsCacheMap.get(nbbm);
  53 + }
  54 +
  55 + public static void putGps(GpsEntity gps) {
  56 + CircleQueue<GpsEntity> queue = gpsCacheMap.get(gps.getNbbm());
  57 + if (queue == null) {
  58 + /*//第一个点从站内开始
  59 + if (gps.getInstation() == 0)
  60 + return;*/
  61 +
  62 + queue = new CircleQueue<>(CACHE_SIZE);
  63 + gpsCacheMap.put(gps.getNbbm(), queue);
  64 + }
  65 + queue.add(gps);
  66 + }
  67 +
  68 + public static void clear(String nbbm) {
  69 + try {
  70 + CircleQueue<GpsEntity> queue = gpsCacheMap.get(nbbm);
  71 + if (queue != null)
  72 + queue.clear();
  73 + } catch (Exception e) {
  74 + logger.error("", e);
  75 + }
  76 + }
  77 +
  78 + public static StationRoute getRouteCode(GpsEntity gps) {
  79 + return routeCodeMap.get(gps.getLineId() + "_" + gps.getUpDown() + "_" + gps.getStopNo());
  80 + }
  81 +
  82 + public static List<StationRoute> getStationRoute(String lineCode, int directions) {
  83 + return stationCacheMap.get(lineCode + "_" + directions);
  84 + }
  85 +
  86 + public static StationRoute getStation(String lineCode, int directions, String code) {
  87 + List<StationRoute> list = getStationRoute(lineCode, directions);
  88 +
  89 + for (StationRoute sr : list) {
  90 + if (sr.getCode().equals(code)) {
  91 + return sr;
  92 + }
  93 + }
  94 + return null;
  95 + }
  96 +
  97 + public static List<StationRoute> midwayStation(String lineCode, int directions, String sCode, String eCode) {
  98 + List<StationRoute> list = getStationRoute(lineCode, directions), rs = new ArrayList<>();
  99 +
  100 + boolean flag = false;
  101 + for (StationRoute sr : list) {
  102 + if (flag)
  103 + rs.add(sr);
  104 + if (sr.getCode().equals(sCode))
  105 + flag = true;
  106 + else if (sr.getCode().equals(eCode))
  107 + break;
  108 + }
  109 + return rs;
  110 + }
  111 +
  112 + public static Polygon getTccPolygon(String code) {
  113 + return tccMap.get(code);
  114 + }
  115 +
  116 + public void loadData() {
  117 + final GeometryFactory geometryFactory = new GeometryFactory();
  118 + //加载站点路由
  119 + String sql = "select r.LINE_CODE,r.DIRECTIONS,r.STATION_CODE,r.STATION_MARK,s.SHAPES_TYPE,s.G_LONX,s.G_LATY,ST_AsText(s.G_POLYGON_GRID) as G_POLYGON_GRID,s.RADIUS, r.STATION_ROUTE_CODE,s.STATION_NAME from bsth_c_stationroute r left join bsth_c_station s on r.station=s.id where r.destroy=0 order by r.station_route_code";
  120 + List<StationRoute> routeList = jdbcTemplate.query(sql, new RowMapper<StationRoute>() {
  121 + @Override
  122 + public StationRoute mapRow(ResultSet rs, int rowNum) throws SQLException {
  123 + StationRoute sRoute = new StationRoute();
  124 + sRoute.setCode(rs.getString("STATION_CODE"));
  125 + sRoute.setLineCode(rs.getString("LINE_CODE"));
  126 + sRoute.setDirections(rs.getInt("DIRECTIONS"));
  127 + sRoute.setPoint(geometryFactory.createPoint(new Coordinate(rs.getFloat("G_LATY"), rs.getFloat("G_LONX"))));
  128 + sRoute.setRadius(rs.getFloat("RADIUS"));
  129 + sRoute.setRouteSort(rs.getInt("STATION_ROUTE_CODE"));
  130 + sRoute.setMark(rs.getString("STATION_MARK"));
  131 + sRoute.setName(rs.getString("STATION_NAME"));
  132 +
  133 + String shapesType = rs.getString("SHAPES_TYPE");
  134 + //多边形电子围栏
  135 + if (StringUtils.isNotEmpty(shapesType) && shapesType.equals("d")) {
  136 + sRoute.setPolygon(geometryFactory.createPolygon(parsePolygon(rs.getString("G_POLYGON_GRID"))));
  137 + }
  138 + return sRoute;
  139 + }
  140 + });
  141 + //按线路和走向分组
  142 + if (routeList.size() > 0) {
  143 + ArrayListMultimap<String, StationRoute> tempMap = ArrayListMultimap.create();
  144 + Map<String, StationRoute> codeMap = new HashMap<>(routeList.size());
  145 + for (StationRoute sr : routeList) {
  146 + tempMap.put(sr.getLineCode() + "_" + sr.getDirections(), sr);
  147 + //站点编码 ——> 和路由顺序对照
  148 + codeMap.put(sr.getLineCode() + "_" + sr.getDirections() + "_" + sr.getCode(), sr);
  149 + }
  150 +
  151 + StationRouteComp srCom = new StationRouteComp();
  152 + //连接路由
  153 + Set<String> set = tempMap.keySet();
  154 + for (String key : set) {
  155 + Collections.sort(tempMap.get(key), srCom);
  156 + connectStationRoute(tempMap.get(key));
  157 + }
  158 +
  159 + stationCacheMap = tempMap;
  160 + routeCodeMap = codeMap;
  161 + }
  162 +
  163 + //加载停车场数据
  164 + sql = "select PARK_CODE, ST_AsText(G_PARK_POINT) as G_PARK_POINT from bsth_c_car_park where park_code is not null and b_park_point is not null";
  165 + List<Map<String, Object>> tccList = jdbcTemplate.queryForList(sql);
  166 + Map<String, Polygon> tccTempMap = new HashMap<>();
  167 +
  168 + Polygon polygon;
  169 + for (Map<String, Object> tMap : tccList) {
  170 +
  171 + try {
  172 + polygon = geometryFactory.createPolygon(parsePolygon(tMap.get("G_PARK_POINT").toString()));
  173 + tccTempMap.put(tMap.get("PARK_CODE").toString()
  174 + , polygon);
  175 + } catch (Exception e) {
  176 + logger.error("停车场:" + tMap.get("PARK_CODE"), e);
  177 + }
  178 + }
  179 +
  180 + if (tccTempMap.size() > 0)
  181 + tccMap = tccTempMap;
  182 + }
  183 +
  184 + private void connectStationRoute(List<StationRoute> list) {
  185 + int size = list.size();
  186 + StationRoute sr = null;
  187 + for (int i = 0; i < size; i++) {
  188 + sr = list.get(i);
  189 + //上一个
  190 + if (i > 0)
  191 + sr.setPrve(list.get(i - 1));
  192 + //下一个
  193 + if (i < size - 1)
  194 + sr.setNext(list.get(i + 1));
  195 + }
  196 + }
  197 +
  198 + public Coordinate[] parsePolygon(String polygonStr) {
  199 + String[] coords = polygonStr.substring(9, polygonStr.length() - 2).split(","), temps;
  200 +
  201 + Coordinate[] cds = new Coordinate[coords.length];
  202 + int len = coords.length;
  203 + for (int i = 0; i < len; i++) {
  204 + temps = coords[i].split(" ");
  205 + cds[i] = new Coordinate(Float.parseFloat(temps[1]), Float.parseFloat(temps[0]));
  206 + }
  207 + return cds;
  208 + }
  209 +
  210 + /**
  211 + * 是不是终点站
  212 + * @param lineId
  213 + * @param upDown
  214 + * @param stationCode
  215 + * @return
  216 + */
  217 + public static boolean isEndStation(String lineId, Integer upDown, String stationCode) {
  218 + StationRoute station = routeCodeMap.get(lineId + "_" + upDown + "_" + stationCode);
  219 + return station != null && station.getMark().equals("E");
  220 + }
221 } 221 }
222 \ No newline at end of file 222 \ No newline at end of file
src/main/java/com/bsth/data/gpsdata/arrival/SignalHandle.java
1 -package com.bsth.data.gpsdata.arrival;  
2 -  
3 -import com.bsth.data.gpsdata.GpsEntity;  
4 -import com.bsth.data.gpsdata.arrival.entity.StationRoute;  
5 -import com.bsth.data.gpsdata.arrival.utils.CircleQueue;  
6 -import com.bsth.data.gpsdata.arrival.utils.GeoUtils;  
7 -import com.bsth.entity.realcontrol.ScheduleRealInfo;  
8 -  
9 -import java.util.List;  
10 -  
11 -/**  
12 - * Created by panzhao on 2016/12/27.  
13 - */  
14 -public abstract class SignalHandle {  
15 -  
16 - public abstract boolean handle(GpsEntity gps, CircleQueue<GpsEntity> prevs);  
17 -  
18 - protected boolean isNotEmpty(CircleQueue<GpsEntity> prevs) {  
19 - return prevs != null && prevs.size() > 0 && prevs.getTail() != null;  
20 - }  
21 -  
22 - protected boolean isDriftSignal(GpsEntity gps) {  
23 - return gps.getLat() == 0 || gps.getLon() == 0;  
24 - }  
25 -  
26 - /**  
27 - * 是不是异常信号  
28 - *  
29 - * @param gps  
30 - * @return protected boolean isAbnormal(GpsEntity gps) {  
31 - return gps.getLat() == 0 || gps.getLon() == 0;  
32 - }*/  
33 -  
34 - /**  
35 - * 连续异常信号个数统计  
36 - *  
37 - * @param prevs  
38 - * @return protected int abnormalCount(CircleQueue<GpsEntity> prevs) {  
39 - * int count = 0;  
40 - * <p>  
41 - * if (!isNotEmpty(prevs))  
42 - * return count;  
43 - * <p>  
44 - * GpsEntity[] array = (GpsEntity[]) prevs.getQueue();  
45 - * GpsEntity gps;  
46 - * for (int i = array.length - 1; i > 0; i--) {  
47 - * gps = array[i];  
48 - * <p>  
49 - * if (isAbnormal(gps))  
50 - * count++;  
51 - * else  
52 - * break;  
53 - * }  
54 - * <p>  
55 - * return count;  
56 - * }  
57 - */  
58 -  
59 - protected void transformUpdown(GpsEntity gps, ScheduleRealInfo sch) {  
60 - int updown = Integer.parseInt(sch.getXlDir());  
61 - List<StationRoute> srs = GeoCacheData.getStationRoute(sch.getXlBm(), updown);  
62 - StationRoute station = GeoUtils.gpsInStation(gps, srs);  
63 - if (station != null) {  
64 - gps.setUpDown(updown);  
65 - gps.setStopNo(station.getCode());  
66 - }  
67 - }  
68 -  
69 - /**  
70 - * 是否是从异常状态恢复的第一个信号  
71 - *  
72 - * @param gps  
73 - * @param prevs  
74 - * @return  
75 - */  
76 - protected boolean abnormalRecovery(GpsEntity gps, CircleQueue<GpsEntity> prevs) {  
77 - if (prevs == null || prevs.size() == 0)  
78 - return false;  
79 -  
80 - GpsEntity prev = prevs.getTail();  
81 - //从漂移状态恢复  
82 - if (isDriftSignal(prev)  
83 - && !isDriftSignal(gps)) {  
84 - return true;  
85 - }  
86 -  
87 - return false;  
88 - } 1 +package com.bsth.data.gpsdata.arrival;
  2 +
  3 +import com.bsth.data.gpsdata.GpsEntity;
  4 +import com.bsth.data.gpsdata.arrival.entity.StationRoute;
  5 +import com.bsth.data.gpsdata.arrival.utils.CircleQueue;
  6 +import com.bsth.data.gpsdata.arrival.utils.GeoUtils;
  7 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  8 +
  9 +import java.util.List;
  10 +
  11 +/**
  12 + * Created by panzhao on 2016/12/27.
  13 + */
  14 +public abstract class SignalHandle {
  15 +
  16 + public abstract boolean handle(GpsEntity gps, CircleQueue<GpsEntity> prevs);
  17 +
  18 + protected boolean isNotEmpty(CircleQueue<GpsEntity> prevs) {
  19 + return prevs != null && prevs.size() > 0 && prevs.getTail() != null;
  20 + }
  21 +
  22 + protected boolean isDriftSignal(GpsEntity gps) {
  23 + return gps.getLat() == 0 || gps.getLon() == 0;
  24 + }
  25 +
  26 + /**
  27 + * 是不是异常信号
  28 + *
  29 + * @param gps
  30 + * @return protected boolean isAbnormal(GpsEntity gps) {
  31 + return gps.getLat() == 0 || gps.getLon() == 0;
  32 + }*/
  33 +
  34 + /**
  35 + * 连续异常信号个数统计
  36 + *
  37 + * @param prevs
  38 + * @return protected int abnormalCount(CircleQueue<GpsEntity> prevs) {
  39 + * int count = 0;
  40 + * <p>
  41 + * if (!isNotEmpty(prevs))
  42 + * return count;
  43 + * <p>
  44 + * GpsEntity[] array = (GpsEntity[]) prevs.getQueue();
  45 + * GpsEntity gps;
  46 + * for (int i = array.length - 1; i > 0; i--) {
  47 + * gps = array[i];
  48 + * <p>
  49 + * if (isAbnormal(gps))
  50 + * count++;
  51 + * else
  52 + * break;
  53 + * }
  54 + * <p>
  55 + * return count;
  56 + * }
  57 + */
  58 +
  59 + protected void transformUpdown(GpsEntity gps, ScheduleRealInfo sch) {
  60 + int updown = Integer.parseInt(sch.getXlDir());
  61 + List<StationRoute> srs = GeoCacheData.getStationRoute(sch.getXlBm(), updown);
  62 + StationRoute station = GeoUtils.gpsInStation(gps, srs);
  63 + if (station != null) {
  64 + gps.setUpDown(updown);
  65 + gps.setStopNo(station.getCode());
  66 + }
  67 + }
  68 +
  69 + /**
  70 + * 是否是从异常状态恢复的第一个信号
  71 + *
  72 + * @param gps
  73 + * @param prevs
  74 + * @return
  75 + */
  76 + protected boolean abnormalRecovery(GpsEntity gps, CircleQueue<GpsEntity> prevs) {
  77 + if (prevs == null || prevs.size() == 0)
  78 + return false;
  79 +
  80 + GpsEntity prev = prevs.getTail();
  81 + //从漂移状态恢复
  82 + if (isDriftSignal(prev)
  83 + && !isDriftSignal(gps)) {
  84 + return true;
  85 + }
  86 +
  87 + return false;
  88 + }
89 } 89 }
90 \ No newline at end of file 90 \ No newline at end of file
src/main/java/com/bsth/data/gpsdata/arrival/entity/RouteReverse.java
1 -package com.bsth.data.gpsdata.arrival.entity;  
2 -  
3 -/** 路由反转  
4 - * Created by panzhao on 2016/12/28.  
5 - */  
6 -public class RouteReverse {  
7 -  
8 - private String nbbm;  
9 - //反转个数  
10 - private int count;  
11 -  
12 - //详细 1,2,3,2,1  
13 - private String detail;  
14 -  
15 - //掉头站点  
16 - private String turned;  
17 -  
18 - //掉头时间  
19 - private long zt;  
20 -  
21 - //检测时间  
22 - private long ct;  
23 -  
24 - //是否闭合  
25 - private boolean close;  
26 -  
27 - //信号不明确  
28 - private boolean vague;  
29 -  
30 - public int getCount() {  
31 - return count;  
32 - }  
33 -  
34 - public void setCount(int count) {  
35 - this.count = count;  
36 - }  
37 -  
38 - public String getDetail() {  
39 - return detail;  
40 - }  
41 -  
42 - public void setDetail(String detail) {  
43 - this.detail = detail;  
44 - }  
45 -  
46 - public String getTurned() {  
47 - return turned;  
48 - }  
49 -  
50 - public void setTurned(String turned) {  
51 - this.turned = turned;  
52 - }  
53 -  
54 - public boolean isClose() {  
55 - return close;  
56 - }  
57 -  
58 - public void setClose(boolean close) {  
59 - this.close = close;  
60 - }  
61 -  
62 - public long getZt() {  
63 - return zt;  
64 - }  
65 -  
66 - public void setZt(long zt) {  
67 - this.zt = zt;  
68 - }  
69 -  
70 - public long getCt() {  
71 - return ct;  
72 - }  
73 -  
74 - public void setCt(long ct) {  
75 - this.ct = ct;  
76 - }  
77 -  
78 - public String getNbbm() {  
79 - return nbbm;  
80 - }  
81 -  
82 - public void setNbbm(String nbbm) {  
83 - this.nbbm = nbbm;  
84 - }  
85 -  
86 - public boolean isVague() {  
87 - return vague;  
88 - }  
89 -  
90 - public void setVague(boolean vague) {  
91 - this.vague = vague;  
92 - } 1 +package com.bsth.data.gpsdata.arrival.entity;
  2 +
  3 +/** 路由反转
  4 + * Created by panzhao on 2016/12/28.
  5 + */
  6 +public class RouteReverse {
  7 +
  8 + private String nbbm;
  9 + //反转个数
  10 + private int count;
  11 +
  12 + //详细 1,2,3,2,1
  13 + private String detail;
  14 +
  15 + //掉头站点
  16 + private String turned;
  17 +
  18 + //掉头时间
  19 + private long zt;
  20 +
  21 + //检测时间
  22 + private long ct;
  23 +
  24 + //是否闭合
  25 + private boolean close;
  26 +
  27 + //信号不明确
  28 + private boolean vague;
  29 +
  30 + public int getCount() {
  31 + return count;
  32 + }
  33 +
  34 + public void setCount(int count) {
  35 + this.count = count;
  36 + }
  37 +
  38 + public String getDetail() {
  39 + return detail;
  40 + }
  41 +
  42 + public void setDetail(String detail) {
  43 + this.detail = detail;
  44 + }
  45 +
  46 + public String getTurned() {
  47 + return turned;
  48 + }
  49 +
  50 + public void setTurned(String turned) {
  51 + this.turned = turned;
  52 + }
  53 +
  54 + public boolean isClose() {
  55 + return close;
  56 + }
  57 +
  58 + public void setClose(boolean close) {
  59 + this.close = close;
  60 + }
  61 +
  62 + public long getZt() {
  63 + return zt;
  64 + }
  65 +
  66 + public void setZt(long zt) {
  67 + this.zt = zt;
  68 + }
  69 +
  70 + public long getCt() {
  71 + return ct;
  72 + }
  73 +
  74 + public void setCt(long ct) {
  75 + this.ct = ct;
  76 + }
  77 +
  78 + public String getNbbm() {
  79 + return nbbm;
  80 + }
  81 +
  82 + public void setNbbm(String nbbm) {
  83 + this.nbbm = nbbm;
  84 + }
  85 +
  86 + public boolean isVague() {
  87 + return vague;
  88 + }
  89 +
  90 + public void setVague(boolean vague) {
  91 + this.vague = vague;
  92 + }
93 } 93 }
94 \ No newline at end of file 94 \ No newline at end of file
src/main/java/com/bsth/data/gpsdata/arrival/entity/SignalAbnormal.java
1 -package com.bsth.data.gpsdata.arrival.entity;  
2 -  
3 -/**  
4 - * 班次信号异常(漂移 或 断线)  
5 - * Created by panzhao on 2016/12/31.  
6 - */  
7 -public class SignalAbnormal {  
8 -  
9 - private Long et;  
10 -  
11 - /** drift or reconnection */  
12 - private String abnormalType;  
13 -  
14 - private Long st;  
15 -  
16 - private String nearPoint;  
17 -  
18 - private String destCode;  
19 -  
20 - private Long ct;  
21 -  
22 - //0: 发车 1:到站  
23 - private int outOrIn;  
24 -  
25 - public Long getEt() {  
26 - return et;  
27 - }  
28 -  
29 - public void setEt(Long et) {  
30 - this.et = et;  
31 - }  
32 -  
33 - public String getAbnormalType() {  
34 - return abnormalType;  
35 - }  
36 -  
37 - public void setAbnormalType(String abnormalType) {  
38 - this.abnormalType = abnormalType;  
39 - }  
40 -  
41 - public Long getSt() {  
42 - return st;  
43 - }  
44 -  
45 - public void setSt(Long st) {  
46 - this.st = st;  
47 - }  
48 -  
49 - public String getNearPoint() {  
50 - return nearPoint;  
51 - }  
52 -  
53 - public void setNearPoint(String nearPoint) {  
54 - this.nearPoint = nearPoint;  
55 - }  
56 -  
57 - public Long getCt() {  
58 - return ct;  
59 - }  
60 -  
61 - public void setCt(Long ct) {  
62 - this.ct = ct;  
63 - }  
64 -  
65 - public int getOutOrIn() {  
66 - return outOrIn;  
67 - }  
68 -  
69 - public void setOutOrIn(int outOrIn) {  
70 - this.outOrIn = outOrIn;  
71 - }  
72 -  
73 - public String getDestCode() {  
74 - return destCode;  
75 - }  
76 -  
77 - public void setDestCode(String destCode) {  
78 - this.destCode = destCode;  
79 - }  
80 -} 1 +package com.bsth.data.gpsdata.arrival.entity;
  2 +
  3 +/**
  4 + * 班次信号异常(漂移 或 断线)
  5 + * Created by panzhao on 2016/12/31.
  6 + */
  7 +public class SignalAbnormal {
  8 +
  9 + private Long et;
  10 +
  11 + /** drift or reconnection */
  12 + private String abnormalType;
  13 +
  14 + private Long st;
  15 +
  16 + private String nearPoint;
  17 +
  18 + private String destCode;
  19 +
  20 + private Long ct;
  21 +
  22 + //0: 发车 1:到站
  23 + private int outOrIn;
  24 +
  25 + public Long getEt() {
  26 + return et;
  27 + }
  28 +
  29 + public void setEt(Long et) {
  30 + this.et = et;
  31 + }
  32 +
  33 + public String getAbnormalType() {
  34 + return abnormalType;
  35 + }
  36 +
  37 + public void setAbnormalType(String abnormalType) {
  38 + this.abnormalType = abnormalType;
  39 + }
  40 +
  41 + public Long getSt() {
  42 + return st;
  43 + }
  44 +
  45 + public void setSt(Long st) {
  46 + this.st = st;
  47 + }
  48 +
  49 + public String getNearPoint() {
  50 + return nearPoint;
  51 + }
  52 +
  53 + public void setNearPoint(String nearPoint) {
  54 + this.nearPoint = nearPoint;
  55 + }
  56 +
  57 + public Long getCt() {
  58 + return ct;
  59 + }
  60 +
  61 + public void setCt(Long ct) {
  62 + this.ct = ct;
  63 + }
  64 +
  65 + public int getOutOrIn() {
  66 + return outOrIn;
  67 + }
  68 +
  69 + public void setOutOrIn(int outOrIn) {
  70 + this.outOrIn = outOrIn;
  71 + }
  72 +
  73 + public String getDestCode() {
  74 + return destCode;
  75 + }
  76 +
  77 + public void setDestCode(String destCode) {
  78 + this.destCode = destCode;
  79 + }
  80 +}
src/main/java/com/bsth/data/gpsdata/arrival/entity/SignalState.java
1 -package com.bsth.data.gpsdata.arrival.entity;  
2 -  
3 -import com.bsth.data.BasicData;  
4 -import com.bsth.entity.realcontrol.ScheduleRealInfo;  
5 -import org.joda.time.format.DateTimeFormat;  
6 -import org.joda.time.format.DateTimeFormatter;  
7 -  
8 -/**  
9 - * 信号状态  
10 - * Created by panzhao on 2016/12/30.  
11 - */  
12 -public class SignalState {  
13 -  
14 - private String type;  
15 -  
16 - private Long st;  
17 -  
18 - //private Long checkTime;  
19 -  
20 - private Long schId;  
21 -  
22 - private String lineCode;  
23 -  
24 - private String text;  
25 -  
26 - private RouteReverse reverse;  
27 -  
28 - private SignalAbnormal signalAbnormal;  
29 -  
30 - private static DateTimeFormatter fmtHHmm = DateTimeFormat.forPattern("HH:mm");  
31 -  
32 - /**  
33 - * 记录区间调头  
34 - *  
35 - * @param sch  
36 - * @param reverse  
37 - * @return  
38 - */  
39 - public static SignalState reverseSignalSTate(ScheduleRealInfo sch, RouteReverse reverse) {  
40 - if(reverse.isVague())  
41 - return null;  
42 -  
43 - SignalState state = new SignalState();  
44 - state.setSchId(sch.getId());  
45 - state.setType("route_reverse");  
46 - //state.setCheckTime(System.currentTimeMillis());  
47 -  
48 - String stationName = BasicData.stationCode2NameMap.get(sch.getXlBm() + "_" + sch.getXlDir() + "_" + reverse.getTurned());  
49 - state.setText(fmtHHmm.print(reverse.getZt()) + " 从 " + stationName + " 站掉头");  
50 - state.setSt(sch.getFcsjActualTime());  
51 - state.setLineCode(sch.getXlBm());  
52 - state.setReverse(reverse);  
53 - return state;  
54 - }  
55 -  
56 - public static SignalState abnormalSignalSTate(ScheduleRealInfo sch, SignalAbnormal signalAbnormal) {  
57 - SignalState state = new SignalState();  
58 - state.setSchId(sch.getId());  
59 - state.setType("abnormal_signal");  
60 - //state.setCheckTime(signalAbnormal.getCt());  
61 - state.setLineCode(sch.getXlBm());  
62 -  
63 - String text = (fmtHHmm.print(signalAbnormal.getSt()) + " ~ " + fmtHHmm.print(signalAbnormal.getEt()));  
64 - String abnormType = signalAbnormal.getAbnormalType();  
65 - if (abnormType.equals("drift"))  
66 - text += "(GPS无效)";  
67 - else if (abnormType.equals("reconnection"))  
68 - text += "(信号丢失)";  
69 -  
70 - state.setText(text);  
71 - state.setSignalAbnormal(signalAbnormal);  
72 - return state;  
73 - }  
74 -  
75 - public String getType() {  
76 - return type;  
77 - }  
78 -  
79 - public void setType(String type) {  
80 - this.type = type;  
81 - }  
82 -  
83 - public long getSchId() {  
84 - return schId;  
85 - }  
86 -  
87 - public void setSchId(long schId) {  
88 - this.schId = schId;  
89 - }  
90 -  
91 - public String getLineCode() {  
92 - return lineCode;  
93 - }  
94 -  
95 - public void setLineCode(String lineCode) {  
96 - this.lineCode = lineCode;  
97 - }  
98 -  
99 - public Long getSt() {  
100 - return st;  
101 - }  
102 -  
103 - public void setSt(Long st) {  
104 - this.st = st;  
105 - }  
106 -  
107 - public String getText() {  
108 - return text;  
109 - }  
110 -  
111 - public void setText(String text) {  
112 - this.text = text;  
113 - }  
114 -  
115 - public RouteReverse getReverse() {  
116 - return reverse;  
117 - }  
118 -  
119 - public void setReverse(RouteReverse reverse) {  
120 - this.reverse = reverse;  
121 - }  
122 -  
123 - public SignalAbnormal getSignalAbnormal() {  
124 - return signalAbnormal;  
125 - }  
126 -  
127 - public void setSignalAbnormal(SignalAbnormal signalAbnormal) {  
128 - this.signalAbnormal = signalAbnormal;  
129 - }  
130 -} 1 +package com.bsth.data.gpsdata.arrival.entity;
  2 +
  3 +import com.bsth.data.BasicData;
  4 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  5 +import org.joda.time.format.DateTimeFormat;
  6 +import org.joda.time.format.DateTimeFormatter;
  7 +
  8 +/**
  9 + * 信号状态
  10 + * Created by panzhao on 2016/12/30.
  11 + */
  12 +public class SignalState {
  13 +
  14 + private String type;
  15 +
  16 + private Long st;
  17 +
  18 + //private Long checkTime;
  19 +
  20 + private Long schId;
  21 +
  22 + private String lineCode;
  23 +
  24 + private String text;
  25 +
  26 + private RouteReverse reverse;
  27 +
  28 + private SignalAbnormal signalAbnormal;
  29 +
  30 + private static DateTimeFormatter fmtHHmm = DateTimeFormat.forPattern("HH:mm");
  31 +
  32 + /**
  33 + * 记录区间调头
  34 + *
  35 + * @param sch
  36 + * @param reverse
  37 + * @return
  38 + */
  39 + public static SignalState reverseSignalSTate(ScheduleRealInfo sch, RouteReverse reverse) {
  40 + if(reverse.isVague())
  41 + return null;
  42 +
  43 + SignalState state = new SignalState();
  44 + state.setSchId(sch.getId());
  45 + state.setType("route_reverse");
  46 + //state.setCheckTime(System.currentTimeMillis());
  47 +
  48 + String stationName = BasicData.stationCode2NameMap.get(sch.getXlBm() + "_" + sch.getXlDir() + "_" + reverse.getTurned());
  49 + state.setText(fmtHHmm.print(reverse.getZt()) + " 从 " + stationName + " 站掉头");
  50 + state.setSt(sch.getFcsjActualTime());
  51 + state.setLineCode(sch.getXlBm());
  52 + state.setReverse(reverse);
  53 + return state;
  54 + }
  55 +
  56 + public static SignalState abnormalSignalSTate(ScheduleRealInfo sch, SignalAbnormal signalAbnormal) {
  57 + SignalState state = new SignalState();
  58 + state.setSchId(sch.getId());
  59 + state.setType("abnormal_signal");
  60 + //state.setCheckTime(signalAbnormal.getCt());
  61 + state.setLineCode(sch.getXlBm());
  62 +
  63 + String text = (fmtHHmm.print(signalAbnormal.getSt()) + " ~ " + fmtHHmm.print(signalAbnormal.getEt()));
  64 + String abnormType = signalAbnormal.getAbnormalType();
  65 + if (abnormType.equals("drift"))
  66 + text += "(GPS无效)";
  67 + else if (abnormType.equals("reconnection"))
  68 + text += "(信号丢失)";
  69 +
  70 + state.setText(text);
  71 + state.setSignalAbnormal(signalAbnormal);
  72 + return state;
  73 + }
  74 +
  75 + public String getType() {
  76 + return type;
  77 + }
  78 +
  79 + public void setType(String type) {
  80 + this.type = type;
  81 + }
  82 +
  83 + public long getSchId() {
  84 + return schId;
  85 + }
  86 +
  87 + public void setSchId(long schId) {
  88 + this.schId = schId;
  89 + }
  90 +
  91 + public String getLineCode() {
  92 + return lineCode;
  93 + }
  94 +
  95 + public void setLineCode(String lineCode) {
  96 + this.lineCode = lineCode;
  97 + }
  98 +
  99 + public Long getSt() {
  100 + return st;
  101 + }
  102 +
  103 + public void setSt(Long st) {
  104 + this.st = st;
  105 + }
  106 +
  107 + public String getText() {
  108 + return text;
  109 + }
  110 +
  111 + public void setText(String text) {
  112 + this.text = text;
  113 + }
  114 +
  115 + public RouteReverse getReverse() {
  116 + return reverse;
  117 + }
  118 +
  119 + public void setReverse(RouteReverse reverse) {
  120 + this.reverse = reverse;
  121 + }
  122 +
  123 + public SignalAbnormal getSignalAbnormal() {
  124 + return signalAbnormal;
  125 + }
  126 +
  127 + public void setSignalAbnormal(SignalAbnormal signalAbnormal) {
  128 + this.signalAbnormal = signalAbnormal;
  129 + }
  130 +}
src/main/java/com/bsth/data/gpsdata/arrival/handlers/InOutStationSignalHandle.java
@@ -246,4 +246,4 @@ public class InOutStationSignalHandle extends SignalHandle{ @@ -246,4 +246,4 @@ public class InOutStationSignalHandle extends SignalHandle{
246 }*/ 246 }*/
247 return false; 247 return false;
248 } 248 }
249 -} 249 -}
  250 +}
250 \ No newline at end of file 251 \ No newline at end of file
src/main/java/com/bsth/data/gpsdata/arrival/handlers/OfflineSignalHandle.java
1 -package com.bsth.data.gpsdata.arrival.handlers;  
2 -  
3 -import com.bsth.data.gpsdata.GpsEntity;  
4 -import com.bsth.data.gpsdata.arrival.GeoCacheData;  
5 -import com.bsth.data.gpsdata.arrival.SignalHandle;  
6 -import com.bsth.data.gpsdata.arrival.utils.CircleQueue;  
7 -import org.springframework.stereotype.Component;  
8 -  
9 -/**  
10 - * 信号断线重连处理  
11 - * Created by panzhao on 2016/12/27.  
12 - */  
13 -@Component  
14 -public class OfflineSignalHandle extends SignalHandle{  
15 -  
16 - //断开2分钟,标记为重连信号  
17 - private final static int OFFLINE_TIME = 1000 * 60 * 2;  
18 -  
19 - //断开70分钟,之前的信号不再有参考价值  
20 - private final static int CLEAR_TIME = 1000 * 60 * 70;  
21 -  
22 - @Override  
23 - public boolean handle(GpsEntity gps, CircleQueue<GpsEntity> prevs) {  
24 - //漂移信号不管  
25 - if(isDriftSignal(gps)){  
26 - gps.setSignalState("drift");  
27 - return true;  
28 - }  
29 -  
30 - if(isNotEmpty(prevs)){  
31 - GpsEntity prev = prevs.getTail();  
32 - int space = (int) (gps.getTimestamp() - prev.getTimestamp());  
33 - if(space > OFFLINE_TIME)  
34 - gps.setSignalState("reconnection");  
35 -  
36 - if(space > CLEAR_TIME){  
37 - //清理缓存的信号  
38 - GeoCacheData.clear(gps.getNbbm());  
39 - }  
40 - }  
41 - return true;  
42 - } 1 +package com.bsth.data.gpsdata.arrival.handlers;
  2 +
  3 +import com.bsth.data.gpsdata.GpsEntity;
  4 +import com.bsth.data.gpsdata.arrival.GeoCacheData;
  5 +import com.bsth.data.gpsdata.arrival.SignalHandle;
  6 +import com.bsth.data.gpsdata.arrival.utils.CircleQueue;
  7 +import org.springframework.stereotype.Component;
  8 +
  9 +/**
  10 + * 信号断线重连处理
  11 + * Created by panzhao on 2016/12/27.
  12 + */
  13 +@Component
  14 +public class OfflineSignalHandle extends SignalHandle{
  15 +
  16 + //断开2分钟,标记为重连信号
  17 + private final static int OFFLINE_TIME = 1000 * 60 * 2;
  18 +
  19 + //断开70分钟,之前的信号不再有参考价值
  20 + private final static int CLEAR_TIME = 1000 * 60 * 70;
  21 +
  22 + @Override
  23 + public boolean handle(GpsEntity gps, CircleQueue<GpsEntity> prevs) {
  24 + //漂移信号不管
  25 + if(isDriftSignal(gps)){
  26 + gps.setSignalState("drift");
  27 + return true;
  28 + }
  29 +
  30 + if(isNotEmpty(prevs)){
  31 + GpsEntity prev = prevs.getTail();
  32 + int space = (int) (gps.getTimestamp() - prev.getTimestamp());
  33 + if(space > OFFLINE_TIME)
  34 + gps.setSignalState("reconnection");
  35 +
  36 + if(space > CLEAR_TIME){
  37 + //清理缓存的信号
  38 + GeoCacheData.clear(gps.getNbbm());
  39 + }
  40 + }
  41 + return true;
  42 + }
43 } 43 }
44 \ No newline at end of file 44 \ No newline at end of file
src/main/java/com/bsth/data/gpsdata/arrival/handlers/ReverseSignalHandle.java
1 -package com.bsth.data.gpsdata.arrival.handlers;  
2 -  
3 -import com.bsth.data.gpsdata.GpsEntity;  
4 -import com.bsth.data.gpsdata.arrival.GeoCacheData;  
5 -import com.bsth.data.gpsdata.arrival.SignalHandle;  
6 -import com.bsth.data.gpsdata.arrival.entity.RouteReverse;  
7 -import com.bsth.data.gpsdata.arrival.entity.StationRoute;  
8 -import com.bsth.data.gpsdata.arrival.utils.CircleQueue;  
9 -import com.bsth.data.gpsdata.arrival.utils.ScheduleSignalState;  
10 -import com.bsth.data.schedule.DayOfSchedule;  
11 -import org.slf4j.Logger;  
12 -import org.slf4j.LoggerFactory;  
13 -import org.springframework.beans.factory.annotation.Autowired;  
14 -import org.springframework.stereotype.Component;  
15 -  
16 -/**  
17 - * 路由反向信号处理  
18 - * Created by panzhao on 2016/12/28.  
19 - */  
20 -@Component  
21 -public class ReverseSignalHandle extends SignalHandle {  
22 -  
23 - Logger logger = LoggerFactory.getLogger(this.getClass());  
24 -  
25 - @Autowired  
26 - DayOfSchedule dayOfSchedule;  
27 -  
28 - @Autowired  
29 - ScheduleSignalState scheduleSignalState;  
30 -  
31 - @Override  
32 - public boolean handle(GpsEntity gps, CircleQueue<GpsEntity> prevs) {  
33 - if (!isNotEmpty(prevs))  
34 - return false;  
35 -  
36 - GpsEntity prev = prevs.getTail();  
37 -  
38 - if (isReverse(gps, prev)) {  
39 - RouteReverse reverse = reverseSearch(prevs, gps);  
40 -  
41 - if (reverse.getCount() >= 4  
42 - && reverse.isClose()  
43 - && !GeoCacheData.isEndStation(gps.getLineId(), gps.getUpDown(), reverse.getTurned())) {  
44 - scheduleSignalState.reverseAnalyse(reverse);  
45 - }  
46 - }  
47 - return false;  
48 - }  
49 -  
50 - /**  
51 - * 搜索路由反向详细  
52 - *  
53 - * @param prevs  
54 - * @param gps  
55 - * @return  
56 - */  
57 - public RouteReverse reverseSearch(CircleQueue<GpsEntity> prevs, GpsEntity gps) {  
58 - RouteReverse routeReverse = new RouteReverse();  
59 - int count = 0;  
60 - String path = "";  
61 - long zt = 0L;  
62 - boolean half = false;  
63 -  
64 - //当前站点  
65 - StationRoute curr = GeoCacheData.getRouteCode(gps), sr;  
66 - GpsEntity prev;  
67 - Object[] array = prevs.getQueue();  
68 - for (int i = array.length - 1; i > 0; i--) {  
69 - prev = (GpsEntity) array[i];  
70 -  
71 - if (!prev.getUpDown().equals(gps.getUpDown())  
72 - || prev.getSignalState().equals("reconnection"))  
73 - break;  
74 -  
75 - if (prev.getInstation() == 1) {  
76 - sr = GeoCacheData.getRouteCode(prev);  
77 -  
78 - if (sr.getRouteSort() > curr.getRouteSort()) {  
79 - if(half){  
80 - routeReverse.setVague(true);  
81 - }  
82 -  
83 - path += (curr.getCode() + ",");  
84 - count++;  
85 - zt = prev.getTimestamp();  
86 - } else if (sr.getRouteSort() < curr.getRouteSort()) {  
87 - if (routeReverse.getTurned() == null) {  
88 - routeReverse.setTurned(curr.getCode());  
89 - half = true;  
90 - }  
91 -  
92 - path += (curr.getCode() + ",");  
93 - //掉头前当前站  
94 - if (sr.getCode().equals(gps.getStopNo())) {  
95 - routeReverse.setClose(true);  
96 - path += sr.getCode();  
97 - break;  
98 - }  
99 - }  
100 -  
101 - curr = sr;  
102 - }  
103 - }  
104 -  
105 - routeReverse.setZt(zt);  
106 - routeReverse.setCount(count);  
107 - routeReverse.setDetail(path);  
108 - routeReverse.setCt(gps.getTimestamp());  
109 - routeReverse.setNbbm(gps.getNbbm());  
110 - return routeReverse;  
111 - }  
112 -  
113 - /**  
114 - * 是否反向  
115 - *  
116 - * @param gps  
117 - * @param prev  
118 - * @return  
119 - */  
120 - public boolean isReverse(GpsEntity gps, GpsEntity prev) {  
121 - if (gps.getInstation() == 1  
122 - &&  
123 - gps.getUpDown().equals(prev.getUpDown())  
124 - && !gps.getStopNo().equals(prev.getStopNo())) {  
125 -  
126 - StationRoute currStation = GeoCacheData.getRouteCode(gps);  
127 - StationRoute prevStation = GeoCacheData.getRouteCode(prev);  
128 -  
129 - if (currStation == null || prevStation == null)  
130 - return false;  
131 -  
132 - if (currStation.getRouteSort() < prevStation.getRouteSort())  
133 - return true;  
134 - }  
135 - return false;  
136 - } 1 +package com.bsth.data.gpsdata.arrival.handlers;
  2 +
  3 +import com.bsth.data.gpsdata.GpsEntity;
  4 +import com.bsth.data.gpsdata.arrival.GeoCacheData;
  5 +import com.bsth.data.gpsdata.arrival.SignalHandle;
  6 +import com.bsth.data.gpsdata.arrival.entity.RouteReverse;
  7 +import com.bsth.data.gpsdata.arrival.entity.StationRoute;
  8 +import com.bsth.data.gpsdata.arrival.utils.CircleQueue;
  9 +import com.bsth.data.gpsdata.arrival.utils.ScheduleSignalState;
  10 +import com.bsth.data.schedule.DayOfSchedule;
  11 +import org.slf4j.Logger;
  12 +import org.slf4j.LoggerFactory;
  13 +import org.springframework.beans.factory.annotation.Autowired;
  14 +import org.springframework.stereotype.Component;
  15 +
  16 +/**
  17 + * 路由反向信号处理
  18 + * Created by panzhao on 2016/12/28.
  19 + */
  20 +@Component
  21 +public class ReverseSignalHandle extends SignalHandle {
  22 +
  23 + Logger logger = LoggerFactory.getLogger(this.getClass());
  24 +
  25 + @Autowired
  26 + DayOfSchedule dayOfSchedule;
  27 +
  28 + @Autowired
  29 + ScheduleSignalState scheduleSignalState;
  30 +
  31 + @Override
  32 + public boolean handle(GpsEntity gps, CircleQueue<GpsEntity> prevs) {
  33 + if (!isNotEmpty(prevs))
  34 + return false;
  35 +
  36 + GpsEntity prev = prevs.getTail();
  37 +
  38 + if (isReverse(gps, prev)) {
  39 + RouteReverse reverse = reverseSearch(prevs, gps);
  40 +
  41 + if (reverse.getCount() >= 4
  42 + && reverse.isClose()
  43 + && !GeoCacheData.isEndStation(gps.getLineId(), gps.getUpDown(), reverse.getTurned())) {
  44 + scheduleSignalState.reverseAnalyse(reverse);
  45 + }
  46 + }
  47 + return false;
  48 + }
  49 +
  50 + /**
  51 + * 搜索路由反向详细
  52 + *
  53 + * @param prevs
  54 + * @param gps
  55 + * @return
  56 + */
  57 + public RouteReverse reverseSearch(CircleQueue<GpsEntity> prevs, GpsEntity gps) {
  58 + RouteReverse routeReverse = new RouteReverse();
  59 + int count = 0;
  60 + String path = "";
  61 + long zt = 0L;
  62 + boolean half = false;
  63 +
  64 + //当前站点
  65 + StationRoute curr = GeoCacheData.getRouteCode(gps), sr;
  66 + GpsEntity prev;
  67 + Object[] array = prevs.getQueue();
  68 + for (int i = array.length - 1; i > 0; i--) {
  69 + prev = (GpsEntity) array[i];
  70 +
  71 + if (!prev.getUpDown().equals(gps.getUpDown())
  72 + || prev.getSignalState().equals("reconnection"))
  73 + break;
  74 +
  75 + if (prev.getInstation() == 1) {
  76 + sr = GeoCacheData.getRouteCode(prev);
  77 +
  78 + if (sr.getRouteSort() > curr.getRouteSort()) {
  79 + if(half){
  80 + routeReverse.setVague(true);
  81 + }
  82 +
  83 + path += (curr.getCode() + ",");
  84 + count++;
  85 + zt = prev.getTimestamp();
  86 + } else if (sr.getRouteSort() < curr.getRouteSort()) {
  87 + if (routeReverse.getTurned() == null) {
  88 + routeReverse.setTurned(curr.getCode());
  89 + half = true;
  90 + }
  91 +
  92 + path += (curr.getCode() + ",");
  93 + //掉头前当前站
  94 + if (sr.getCode().equals(gps.getStopNo())) {
  95 + routeReverse.setClose(true);
  96 + path += sr.getCode();
  97 + break;
  98 + }
  99 + }
  100 +
  101 + curr = sr;
  102 + }
  103 + }
  104 +
  105 + routeReverse.setZt(zt);
  106 + routeReverse.setCount(count);
  107 + routeReverse.setDetail(path);
  108 + routeReverse.setCt(gps.getTimestamp());
  109 + routeReverse.setNbbm(gps.getNbbm());
  110 + return routeReverse;
  111 + }
  112 +
  113 + /**
  114 + * 是否反向
  115 + *
  116 + * @param gps
  117 + * @param prev
  118 + * @return
  119 + */
  120 + public boolean isReverse(GpsEntity gps, GpsEntity prev) {
  121 + if (gps.getInstation() == 1
  122 + &&
  123 + gps.getUpDown().equals(prev.getUpDown())
  124 + && !gps.getStopNo().equals(prev.getStopNo())) {
  125 +
  126 + StationRoute currStation = GeoCacheData.getRouteCode(gps);
  127 + StationRoute prevStation = GeoCacheData.getRouteCode(prev);
  128 +
  129 + if (currStation == null || prevStation == null)
  130 + return false;
  131 +
  132 + if (currStation.getRouteSort() < prevStation.getRouteSort())
  133 + return true;
  134 + }
  135 + return false;
  136 + }
137 } 137 }
138 \ No newline at end of file 138 \ No newline at end of file
src/main/java/com/bsth/data/gpsdata/arrival/utils/ScheduleSignalState.java
@@ -249,4 +249,4 @@ public class ScheduleSignalState { @@ -249,4 +249,4 @@ public class ScheduleSignalState {
249 SignalState signalState = SignalState.abnormalSignalSTate(sch, signalAbnormal); 249 SignalState signalState = SignalState.abnormalSignalSTate(sch, signalAbnormal);
250 signalStateData.put(signalState); 250 signalStateData.put(signalState);
251 } 251 }
252 -} 252 -}
  253 +}
253 \ No newline at end of file 254 \ No newline at end of file
src/main/java/com/bsth/data/gpsdata/arrival/utils/SignalSchPlanMatcher.java
1 -package com.bsth.data.gpsdata.arrival.utils;  
2 -  
3 -import com.bsth.data.gpsdata.GpsEntity;  
4 -import com.bsth.data.schedule.DayOfSchedule;  
5 -import com.bsth.entity.realcontrol.ScheduleRealInfo;  
6 -import org.springframework.beans.factory.annotation.Autowired;  
7 -import org.springframework.stereotype.Component;  
8 -  
9 -/**  
10 - * 班次匹配器  
11 - * Created by panzhao on 2016/12/31.  
12 - */  
13 -@Component  
14 -public class SignalSchPlanMatcher {  
15 -  
16 - @Autowired  
17 - DayOfSchedule dayOfSchedule;  
18 -  
19 - /**  
20 - * 发车信号匹配  
21 - * @param outSigal  
22 - * @param sch  
23 - * @return  
24 - */  
25 - public void outMatch(GpsEntity outSigal, ScheduleRealInfo sch){  
26 - long t = outSigal.getTimestamp();  
27 - if(t < sch.getDfsjT())  
28 - return;  
29 -  
30 - //下一个相同走向的班次  
31 - ScheduleRealInfo next = dayOfSchedule.nextSame(sch);  
32 - if(next == null || !next.getQdzCode().equals(sch.getQdzCode()))  
33 - return;  
34 -  
35 - //晚于班次间隔百分之70,跳下一个班次  
36 - double s = (int) (next.getDfsjT() - sch.getDfsjT());  
37 - double r = (int) (t - sch.getDfsjT());  
38 - if(r / s > 0.7){  
39 - dayOfSchedule.addExecPlan(next);  
40 - outMatch(outSigal, next);  
41 - }  
42 - }  
43 -} 1 +package com.bsth.data.gpsdata.arrival.utils;
  2 +
  3 +import com.bsth.data.gpsdata.GpsEntity;
  4 +import com.bsth.data.schedule.DayOfSchedule;
  5 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  6 +import org.springframework.beans.factory.annotation.Autowired;
  7 +import org.springframework.stereotype.Component;
  8 +
  9 +/**
  10 + * 班次匹配器
  11 + * Created by panzhao on 2016/12/31.
  12 + */
  13 +@Component
  14 +public class SignalSchPlanMatcher {
  15 +
  16 + @Autowired
  17 + DayOfSchedule dayOfSchedule;
  18 +
  19 + /**
  20 + * 发车信号匹配
  21 + * @param outSigal
  22 + * @param sch
  23 + * @return
  24 + */
  25 + public void outMatch(GpsEntity outSigal, ScheduleRealInfo sch){
  26 + long t = outSigal.getTimestamp();
  27 + if(t < sch.getDfsjT())
  28 + return;
  29 +
  30 + //下一个相同走向的班次
  31 + ScheduleRealInfo next = dayOfSchedule.nextSame(sch);
  32 + if(next == null || !next.getQdzCode().equals(sch.getQdzCode()))
  33 + return;
  34 +
  35 + //晚于班次间隔百分之70,跳下一个班次
  36 + double s = (int) (next.getDfsjT() - sch.getDfsjT());
  37 + double r = (int) (t - sch.getDfsjT());
  38 + if(r / s > 0.7){
  39 + dayOfSchedule.addExecPlan(next);
  40 + outMatch(outSigal, next);
  41 + }
  42 + }
  43 +}
src/main/java/com/bsth/data/gpsdata/recovery/GpsDataRecovery.java
1 -package com.bsth.data.gpsdata.recovery;  
2 -  
3 -import com.bsth.data.BasicData;  
4 -import com.bsth.data.gpsdata.GpsEntity;  
5 -import com.bsth.data.gpsdata.arrival.GeoCacheData;  
6 -import com.bsth.data.gpsdata.arrival.handlers.*;  
7 -import com.bsth.data.gpsdata.arrival.utils.CircleQueue;  
8 -import com.bsth.util.db.DBUtils_MS;  
9 -import com.google.common.collect.ArrayListMultimap;  
10 -import org.slf4j.Logger;  
11 -import org.slf4j.LoggerFactory;  
12 -import org.springframework.beans.BeansException;  
13 -import org.springframework.context.ApplicationContext;  
14 -import org.springframework.context.ApplicationContextAware;  
15 -import org.springframework.jdbc.core.JdbcTemplate;  
16 -import org.springframework.jdbc.core.RowMapper;  
17 -import org.springframework.stereotype.Component;  
18 -  
19 -import java.sql.ResultSet;  
20 -import java.sql.SQLException;  
21 -import java.util.*;  
22 -import java.util.concurrent.CountDownLatch;  
23 -import java.util.concurrent.ExecutorService;  
24 -import java.util.concurrent.Executors;  
25 -  
26 -/**  
27 - * gps数据恢复  
28 - * Created by panzhao on 2016/12/24.  
29 - */  
30 -@Component  
31 -public class GpsDataRecovery implements ApplicationContextAware {  
32 -  
33 - static Logger logger = LoggerFactory.getLogger(GpsDataRecovery.class);  
34 -  
35 - public static boolean run;  
36 -  
37 - static ExecutorService threadPool = Executors.newFixedThreadPool(10);  
38 -  
39 - static OfflineSignalHandle offlineSignalHandle;  
40 - static CorrectSignalHandle correctSignalHandle;  
41 - static StationInsideHandle stationInsideHandle;  
42 - static InOutStationSignalHandle inOutStationSignalHandle;  
43 - static ReverseSignalHandle reverseSignalHandle;  
44 -  
45 - public void recovery() {  
46 - List<GpsEntity> list = loadData();  
47 -  
48 - //按车辆分组数据  
49 - ArrayListMultimap<String, GpsEntity> listMap = ArrayListMultimap.create();  
50 - for (GpsEntity gps : list) {  
51 - if (gps.getNbbm() != null)  
52 - listMap.put(gps.getNbbm(), gps);  
53 - }  
54 -  
55 -  
56 - Set<String> keys = listMap.keySet();  
57 -  
58 - CountDownLatch count = new CountDownLatch(keys.size());  
59 - GpsComp comp = new GpsComp();  
60 - for (String nbbm : keys) {  
61 - Collections.sort(listMap.get(nbbm), comp);  
62 - threadPool.execute(new RecoveryThread(listMap.get(nbbm), count));  
63 - /*if(nbbm.equals("YT-CD008"))  
64 - new RecoveryThread(listMap.get(nbbm), count).run();*/  
65 - }  
66 -  
67 - try {  
68 - count.await();  
69 - run = false;  
70 - logger.info("数据恢复完成....");  
71 - } catch (InterruptedException e) {  
72 - logger.error("", e);  
73 - }  
74 - }  
75 -  
76 - /**  
77 - * 加载当天的gps数据  
78 - *  
79 - * @return  
80 - */  
81 - public List<GpsEntity> loadData() {  
82 - Calendar calendar = Calendar.getInstance();  
83 - int dayOfYear = calendar.get(Calendar.DAY_OF_YEAR);  
84 -  
85 - String sql = "select DEVICE_ID,LAT,LON,TS,SPEED_GPS,LINE_ID,SERVICE_STATE from bsth_c_gps_info where days_year=" + dayOfYear;  
86 - JdbcTemplate jdbcTemplate = new JdbcTemplate(DBUtils_MS.getDataSource());  
87 -  
88 - List<GpsEntity> list =  
89 - jdbcTemplate.query(sql, new RowMapper<GpsEntity>() {  
90 - @Override  
91 - public GpsEntity mapRow(ResultSet rs, int rowNum) throws SQLException {  
92 - GpsEntity gps = new GpsEntity();  
93 -  
94 - gps.setDeviceId(rs.getString("DEVICE_ID"));  
95 - gps.setNbbm(BasicData.deviceId2NbbmMap.get(gps.getDeviceId()));  
96 - gps.setSpeed(rs.getFloat("SPEED_GPS"));  
97 - gps.setLat(rs.getFloat("LAT"));  
98 - gps.setLon(rs.getFloat("LON"));  
99 - gps.setLineId(rs.getString("LINE_ID"));  
100 - gps.setTimestamp(rs.getLong("TS"));  
101 - gps.setUpDown(getUpOrDown(rs.getLong("SERVICE_STATE")));  
102 - return gps;  
103 - }  
104 - });  
105 - return list;  
106 - }  
107 -  
108 - /**  
109 - * 王通 2016/6/29 9:23:24 获取车辆线路上下行  
110 - *  
111 - * @return -1无效 0上行 1下行  
112 - */  
113 - public static int getUpOrDown(long serviceState) {  
114 - if ((serviceState & 0x00020000) == 0x00020000 || (serviceState & 0x80000000) == 0x80000000  
115 - || (serviceState & 0x01000000) == 0x01000000 || (serviceState & 0x08000000) == 0x08000000)  
116 - return -1;  
117 - return (((serviceState & 0x10000000) == 0x10000000) ? 1 : 0);  
118 - }  
119 -  
120 - @Override  
121 - public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {  
122 - offlineSignalHandle = applicationContext.getBean(OfflineSignalHandle.class);  
123 - correctSignalHandle = applicationContext.getBean(CorrectSignalHandle.class);  
124 - stationInsideHandle = applicationContext.getBean(StationInsideHandle.class);  
125 - inOutStationSignalHandle = applicationContext.getBean(InOutStationSignalHandle.class);  
126 - reverseSignalHandle = applicationContext.getBean(ReverseSignalHandle.class);  
127 - }  
128 -  
129 - public static class GpsComp implements Comparator<GpsEntity> {  
130 -  
131 - @Override  
132 - public int compare(GpsEntity g1, GpsEntity g2) {  
133 - return g1.getTimestamp().compareTo(g2.getTimestamp());  
134 - }  
135 - }  
136 -  
137 - public static class RecoveryThread implements Runnable {  
138 - List<GpsEntity> list;  
139 - CountDownLatch count;  
140 -  
141 - RecoveryThread(List<GpsEntity> list, CountDownLatch count) {  
142 - this.list = list;  
143 - this.count = count;  
144 - }  
145 -  
146 - @Override  
147 - public void run() {  
148 - try {  
149 - //循环gps恢复数据  
150 - CircleQueue<GpsEntity> prevs;  
151 -  
152 - for (GpsEntity gps : list) {  
153 -  
154 - prevs = GeoCacheData.getGps(gps.getNbbm());  
155 - //掉线处理  
156 - offlineSignalHandle.handle(gps, prevs);  
157 - //状态处理  
158 - if (!correctSignalHandle.handle(gps, prevs))  
159 - continue;  
160 - //场,站内外判断  
161 - stationInsideHandle.handle(gps, prevs);  
162 - //反向处理  
163 - reverseSignalHandle.handle(gps, prevs);  
164 - //进出站动作处理  
165 - inOutStationSignalHandle.handle(gps, prevs);  
166 - GeoCacheData.putGps(gps);  
167 -  
168 - //Thread.sleep(50);  
169 - }  
170 - } catch (Exception e) {  
171 - logger.error("", e);  
172 - } finally {  
173 - count.countDown();  
174 - }  
175 - }  
176 - } 1 +package com.bsth.data.gpsdata.recovery;
  2 +
  3 +import com.bsth.data.BasicData;
  4 +import com.bsth.data.gpsdata.GpsEntity;
  5 +import com.bsth.data.gpsdata.arrival.GeoCacheData;
  6 +import com.bsth.data.gpsdata.arrival.handlers.*;
  7 +import com.bsth.data.gpsdata.arrival.utils.CircleQueue;
  8 +import com.bsth.util.db.DBUtils_MS;
  9 +import com.google.common.collect.ArrayListMultimap;
  10 +import org.slf4j.Logger;
  11 +import org.slf4j.LoggerFactory;
  12 +import org.springframework.beans.BeansException;
  13 +import org.springframework.context.ApplicationContext;
  14 +import org.springframework.context.ApplicationContextAware;
  15 +import org.springframework.jdbc.core.JdbcTemplate;
  16 +import org.springframework.jdbc.core.RowMapper;
  17 +import org.springframework.stereotype.Component;
  18 +
  19 +import java.sql.ResultSet;
  20 +import java.sql.SQLException;
  21 +import java.util.*;
  22 +import java.util.concurrent.CountDownLatch;
  23 +import java.util.concurrent.ExecutorService;
  24 +import java.util.concurrent.Executors;
  25 +
  26 +/**
  27 + * gps数据恢复
  28 + * Created by panzhao on 2016/12/24.
  29 + */
  30 +@Component
  31 +public class GpsDataRecovery implements ApplicationContextAware {
  32 +
  33 + static Logger logger = LoggerFactory.getLogger(GpsDataRecovery.class);
  34 +
  35 + public static boolean run;
  36 +
  37 + static ExecutorService threadPool = Executors.newFixedThreadPool(10);
  38 +
  39 + static OfflineSignalHandle offlineSignalHandle;
  40 + static CorrectSignalHandle correctSignalHandle;
  41 + static StationInsideHandle stationInsideHandle;
  42 + static InOutStationSignalHandle inOutStationSignalHandle;
  43 + static ReverseSignalHandle reverseSignalHandle;
  44 +
  45 + public void recovery() {
  46 + List<GpsEntity> list = loadData();
  47 +
  48 + //按车辆分组数据
  49 + ArrayListMultimap<String, GpsEntity> listMap = ArrayListMultimap.create();
  50 + for (GpsEntity gps : list) {
  51 + if (gps.getNbbm() != null)
  52 + listMap.put(gps.getNbbm(), gps);
  53 + }
  54 +
  55 +
  56 + Set<String> keys = listMap.keySet();
  57 +
  58 + CountDownLatch count = new CountDownLatch(keys.size());
  59 + GpsComp comp = new GpsComp();
  60 + for (String nbbm : keys) {
  61 + Collections.sort(listMap.get(nbbm), comp);
  62 + threadPool.execute(new RecoveryThread(listMap.get(nbbm), count));
  63 + /*if(nbbm.equals("YT-CD008"))
  64 + new RecoveryThread(listMap.get(nbbm), count).run();*/
  65 + }
  66 +
  67 + try {
  68 + count.await();
  69 + run = false;
  70 + logger.info("数据恢复完成....");
  71 + } catch (InterruptedException e) {
  72 + logger.error("", e);
  73 + }
  74 + }
  75 +
  76 + /**
  77 + * 加载当天的gps数据
  78 + *
  79 + * @return
  80 + */
  81 + public List<GpsEntity> loadData() {
  82 + Calendar calendar = Calendar.getInstance();
  83 + int dayOfYear = calendar.get(Calendar.DAY_OF_YEAR);
  84 +
  85 + String sql = "select DEVICE_ID,LAT,LON,TS,SPEED_GPS,LINE_ID,SERVICE_STATE from bsth_c_gps_info where days_year=" + dayOfYear;
  86 + JdbcTemplate jdbcTemplate = new JdbcTemplate(DBUtils_MS.getDataSource());
  87 +
  88 + List<GpsEntity> list =
  89 + jdbcTemplate.query(sql, new RowMapper<GpsEntity>() {
  90 + @Override
  91 + public GpsEntity mapRow(ResultSet rs, int rowNum) throws SQLException {
  92 + GpsEntity gps = new GpsEntity();
  93 +
  94 + gps.setDeviceId(rs.getString("DEVICE_ID"));
  95 + gps.setNbbm(BasicData.deviceId2NbbmMap.get(gps.getDeviceId()));
  96 + gps.setSpeed(rs.getFloat("SPEED_GPS"));
  97 + gps.setLat(rs.getFloat("LAT"));
  98 + gps.setLon(rs.getFloat("LON"));
  99 + gps.setLineId(rs.getString("LINE_ID"));
  100 + gps.setTimestamp(rs.getLong("TS"));
  101 + gps.setUpDown(getUpOrDown(rs.getLong("SERVICE_STATE")));
  102 + return gps;
  103 + }
  104 + });
  105 + return list;
  106 + }
  107 +
  108 + /**
  109 + * 王通 2016/6/29 9:23:24 获取车辆线路上下行
  110 + *
  111 + * @return -1无效 0上行 1下行
  112 + */
  113 + public static int getUpOrDown(long serviceState) {
  114 + if ((serviceState & 0x00020000) == 0x00020000 || (serviceState & 0x80000000) == 0x80000000
  115 + || (serviceState & 0x01000000) == 0x01000000 || (serviceState & 0x08000000) == 0x08000000)
  116 + return -1;
  117 + return (((serviceState & 0x10000000) == 0x10000000) ? 1 : 0);
  118 + }
  119 +
  120 + @Override
  121 + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
  122 + offlineSignalHandle = applicationContext.getBean(OfflineSignalHandle.class);
  123 + correctSignalHandle = applicationContext.getBean(CorrectSignalHandle.class);
  124 + stationInsideHandle = applicationContext.getBean(StationInsideHandle.class);
  125 + inOutStationSignalHandle = applicationContext.getBean(InOutStationSignalHandle.class);
  126 + reverseSignalHandle = applicationContext.getBean(ReverseSignalHandle.class);
  127 + }
  128 +
  129 + public static class GpsComp implements Comparator<GpsEntity> {
  130 +
  131 + @Override
  132 + public int compare(GpsEntity g1, GpsEntity g2) {
  133 + return g1.getTimestamp().compareTo(g2.getTimestamp());
  134 + }
  135 + }
  136 +
  137 + public static class RecoveryThread implements Runnable {
  138 + List<GpsEntity> list;
  139 + CountDownLatch count;
  140 +
  141 + RecoveryThread(List<GpsEntity> list, CountDownLatch count) {
  142 + this.list = list;
  143 + this.count = count;
  144 + }
  145 +
  146 + @Override
  147 + public void run() {
  148 + try {
  149 + //循环gps恢复数据
  150 + CircleQueue<GpsEntity> prevs;
  151 +
  152 + for (GpsEntity gps : list) {
  153 +
  154 + prevs = GeoCacheData.getGps(gps.getNbbm());
  155 + //掉线处理
  156 + offlineSignalHandle.handle(gps, prevs);
  157 + //状态处理
  158 + if (!correctSignalHandle.handle(gps, prevs))
  159 + continue;
  160 + //场,站内外判断
  161 + stationInsideHandle.handle(gps, prevs);
  162 + //反向处理
  163 + reverseSignalHandle.handle(gps, prevs);
  164 + //进出站动作处理
  165 + inOutStationSignalHandle.handle(gps, prevs);
  166 + GeoCacheData.putGps(gps);
  167 +
  168 + //Thread.sleep(50);
  169 + }
  170 + } catch (Exception e) {
  171 + logger.error("", e);
  172 + } finally {
  173 + count.countDown();
  174 + }
  175 + }
  176 + }
177 } 177 }
178 \ No newline at end of file 178 \ No newline at end of file
src/main/java/com/bsth/repository/realcontrol/ScheduleRealInfoRepository.java
@@ -32,7 +32,7 @@ public interface ScheduleRealInfoRepository extends BaseRepository&lt;ScheduleRealI @@ -32,7 +32,7 @@ public interface ScheduleRealInfoRepository extends BaseRepository&lt;ScheduleRealI
32 32
33 //把sum(addMileage) 替换为0 数据表去掉了 add_mileage 字段 33 //把sum(addMileage) 替换为0 数据表去掉了 add_mileage 字段
34 @Query(value="select new map(clZbh as clZbh,jGh as jGh,jName as jName,sum(jhlc) as zgl," 34 @Query(value="select new map(clZbh as clZbh,jGh as jGh,jName as jName,sum(jhlc) as zgl,"
35 - + " 0 as ksgl,count(jName) as bcs) from ScheduleRealInfo s where" 35 + + "0 as ksgl,count(jName) as bcs) from ScheduleRealInfo s where"
36 + " s.xlBm = ?1 and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 group by clZbh,jGh,jName") 36 + " s.xlBm = ?1 and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 group by clZbh,jGh,jName")
37 List<Map<String, Object>> dailyInfo(String line,String date); 37 List<Map<String, Object>> dailyInfo(String line,String date);
38 38
@@ -71,7 +71,7 @@ public interface ScheduleRealInfoRepository extends BaseRepository&lt;ScheduleRealI @@ -71,7 +71,7 @@ public interface ScheduleRealInfoRepository extends BaseRepository&lt;ScheduleRealI
71 @Query(value="select count(jName) from ScheduleRealInfo s where s.jName = ?1 and s.clZbh = ?2 and s.lpName = ?3 and sflj != 0") 71 @Query(value="select count(jName) from ScheduleRealInfo s where s.jName = ?1 and s.clZbh = ?2 and s.lpName = ?3 and sflj != 0")
72 int findLjbc(String jName,String clZbh,String lpName); 72 int findLjbc(String jName,String clZbh,String lpName);
73 73
74 - @Query(value="SELECT c.company,r.request_code,FROM_UNIXTIME(r.timestamp/1000,'%Y-%m-%d %T'),c.inside_code FROM bsth_v_report_80 r LEFT JOIN bsth_c_cars c ON c.equipment_code = r.device_id where FROM_UNIXTIME(r.timestamp/1000,'%Y-%m-%d') = ?2 and r.line_id like %?1% and c.inside_code like %?3%",nativeQuery=true) 74 + @Query(value="SELECT c.company,r.request_code,FROM_UNIXTIME(r.timestamp/1000,'%Y-%m-%d %T') FROM bsth_v_report_80 r LEFT JOIN bsth_c_cars c ON c.equipment_code = r.device_id where FROM_UNIXTIME(r.timestamp/1000,'%Y-%m-%d') = ?2 and r.line_id = ?1 and c.inside_code = ?3",nativeQuery=true)
75 List<Object[]> account(String line,String date,String code); 75 List<Object[]> account(String line,String date,String code);
76 76
77 @Query(value="select s from ScheduleRealInfo s where s.xlBm = ?1 and s.scheduleDate >= str_to_date(?2,'%Y-%m-%d') " 77 @Query(value="select s from ScheduleRealInfo s where s.xlBm = ?1 and s.scheduleDate >= str_to_date(?2,'%Y-%m-%d') "
@@ -125,4 +125,4 @@ public interface ScheduleRealInfoRepository extends BaseRepository&lt;ScheduleRealI @@ -125,4 +125,4 @@ public interface ScheduleRealInfoRepository extends BaseRepository&lt;ScheduleRealI
125 @Query(value="select new map(xlBm as xlBm) from ScheduleRealInfo s where DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?1 GROUP BY xlBm ORDER BY xlBm") 125 @Query(value="select new map(xlBm as xlBm) from ScheduleRealInfo s where DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?1 GROUP BY xlBm ORDER BY xlBm")
126 List<Map<String,Object>> setDDRBGroup(String date); 126 List<Map<String,Object>> setDDRBGroup(String date);
127 127
128 -}  
129 \ No newline at end of file 128 \ No newline at end of file
  129 +}
src/main/java/com/bsth/service/forms/impl/FormsServiceImpl.java
@@ -616,8 +616,8 @@ public class FormsServiceImpl implements FormsService { @@ -616,8 +616,8 @@ public class FormsServiceImpl implements FormsService {
616 tu.setRq(rq); 616 tu.setRq(rq);
617 tu.setGs(arg0.getString("gs_name").toString()); 617 tu.setGs(arg0.getString("gs_name").toString());
618 tu.setZhgs(arg0.getString("fgs_name").toString()); 618 tu.setZhgs(arg0.getString("fgs_name").toString());
619 - //tu.setXl(arg0.getString("xlgs"));这个是根据公司判断线路有几条  
620 - tu.setXl(arg0.getString("sxl")); 619 + tu.setXl(arg0.getString("xlgs"));//这个是根据公司判断线路有几条
  620 + //tu.setXl(arg0.getString("sxl"));
621 tu.setXlmc(arg0.getString("sxl")); 621 tu.setXlmc(arg0.getString("sxl"));
622 tu.setCchjh(arg0.getString("jcl").toString()); 622 tu.setCchjh(arg0.getString("jcl").toString());
623 tu.setCchsj(arg0.getString("scl").toString()); 623 tu.setCchsj(arg0.getString("scl").toString());
src/main/resources/application-dev.properties
@@ -7,13 +7,13 @@ spring.jpa.hibernate.naming_strategy= org.hibernate.cfg.ImprovedNamingStrategy @@ -7,13 +7,13 @@ spring.jpa.hibernate.naming_strategy= org.hibernate.cfg.ImprovedNamingStrategy
7 #DATABASE 7 #DATABASE
8 spring.jpa.database= MYSQL 8 spring.jpa.database= MYSQL
9 spring.jpa.show-sql= true 9 spring.jpa.show-sql= true
10 -spring.datasource.driver-class-name= com.mysql.jdbc.Driver  
11 -spring.datasource.url= jdbc:mysql://127.0.0.1/qp_control?useUnicode=true&characterEncoding=utf-8&useSSL=false  
12 -spring.datasource.username= root  
13 -spring.datasource.password=  
14 -#spring.datasource.url= jdbc:mysql://192.168.168.117/pd_control?useUnicode=true&characterEncoding=utf-8&useSSL=false 10 +#spring.datasource.driver-class-name= com.mysql.jdbc.Driver
  11 +#spring.datasource.url= jdbc:mysql://192.168.168.201/mh_control?useUnicode=true&characterEncoding=utf-8&useSSL=false
15 #spring.datasource.username= root 12 #spring.datasource.username= root
16 -#spring.datasource.password= root 13 +#spring.datasource.password= 123456
  14 +spring.datasource.url= jdbc:mysql://localhost/mh_control?useUnicode=true&characterEncoding=utf-8&useSSL=false
  15 +spring.datasource.username= root
  16 +spring.datasource.password= root
17 #DATASOURCE 17 #DATASOURCE
18 spring.datasource.max-active=100 18 spring.datasource.max-active=100
19 spring.datasource.max-idle=8 19 spring.datasource.max-idle=8
src/main/resources/ms-jdbc.properties
@@ -4,6 +4,6 @@ @@ -4,6 +4,6 @@
4 #ms.mysql.password= 123456 4 #ms.mysql.password= 123456
5 5
6 ms.mysql.driver= com.mysql.jdbc.Driver 6 ms.mysql.driver= com.mysql.jdbc.Driver
7 -ms.mysql.url= jdbc:mysql://192.168.168.171:3306/ms?useUnicode=true&characterEncoding=utf-8 7 +ms.mysql.url= jdbc:mysql://192.168.168.117:3306/ms?useUnicode=true&characterEncoding=utf-8
8 ms.mysql.username= root 8 ms.mysql.username= root
9 -ms.mysql.password= root2jsp  
10 \ No newline at end of file 9 \ No newline at end of file
  10 +ms.mysql.password= root
11 \ No newline at end of file 11 \ No newline at end of file
src/main/resources/static/pages/forms/mould/allline.xls
No preview for this file type
src/main/resources/static/pages/forms/mould/executionrate.xls
No preview for this file type
src/main/resources/static/pages/forms/mould/turnoutrate.xls
No preview for this file type
src/main/resources/static/real_control_v2/fragments/north/nav/signal_state_config.html
1 -<div class="uk-modal ct-form-modal" id="signal_state_config-modal">  
2 - <div class="uk-modal-dialog" style="width: 530px;">  
3 - <a href="" class="uk-modal-close uk-close"></a>  
4 - <div class="uk-modal-header">  
5 - <h2>信号标记设置</h2></div>  
6 -  
7 - <p style="border-bottom: 1px solid #efefef;color: grey;padding-bottom: 9px;">  
8 - <small>  
9 - <i class="uk-icon-question-circle"> </i>  
10 - 设置项将会保存在本地客户端,清理缓存和更换电脑会重置.</small>  
11 - </p>  
12 - <form class="uk-form uk-form-horizontal">  
13 - <div class="uk-grid">  
14 - <div class="uk-width-2-3 uk-container-center">  
15 - <div class="uk-form-row">  
16 - <label class="uk-form-label">是否启用</label>  
17 - <div class="uk-form-controls">  
18 - <select name="enable">  
19 - <option value="1">启用</option>  
20 - <option value="0">禁用</option>  
21 - </select>  
22 - </div>  
23 - </div>  
24 - </div>  
25 - </div>  
26 -  
27 - <div class="uk-modal-footer uk-text-right" style="margin-bottom: -20px;">  
28 - <button type="button" class="uk-button uk-modal-close">取消</button>  
29 - <button type="submit" class="uk-button uk-button-primary"><i class="uk-icon-check"></i> &nbsp;保存</button>  
30 - </div>  
31 - </form>  
32 - </div>  
33 -  
34 - <script>  
35 - (function() {  
36 - var modal = '#signal_state_config-modal';  
37 - var f = $('form', modal);  
38 -  
39 - $(modal).on('init', function(e, data) {  
40 - var val = gb_signal_state.isEnable()?1:0;  
41 - $('[name=enable]', f).val(val);  
42 - });  
43 -  
44 - f.formValidation(gb_form_validation_opts);  
45 - f.on('success.form.fv', function(e) {  
46 - e.preventDefault();  
47 - var data = $(this).serializeJSON();  
48 -  
49 - if(data.enable=='1')  
50 - gb_signal_state.enable();  
51 - else  
52 - gb_signal_state.disable();  
53 -  
54 - UIkit.modal(modal).hide();  
55 - });  
56 -  
57 - })();  
58 - </script> 1 +<div class="uk-modal ct-form-modal" id="signal_state_config-modal">
  2 + <div class="uk-modal-dialog" style="width: 530px;">
  3 + <a href="" class="uk-modal-close uk-close"></a>
  4 + <div class="uk-modal-header">
  5 + <h2>信号标记设置</h2></div>
  6 +
  7 + <p style="border-bottom: 1px solid #efefef;color: grey;padding-bottom: 9px;">
  8 + <small>
  9 + <i class="uk-icon-question-circle"> </i>
  10 + 设置项将会保存在本地客户端,清理缓存和更换电脑会重置.</small>
  11 + </p>
  12 + <form class="uk-form uk-form-horizontal">
  13 + <div class="uk-grid">
  14 + <div class="uk-width-2-3 uk-container-center">
  15 + <div class="uk-form-row">
  16 + <label class="uk-form-label">是否启用</label>
  17 + <div class="uk-form-controls">
  18 + <select name="enable">
  19 + <option value="1">启用</option>
  20 + <option value="0">禁用</option>
  21 + </select>
  22 + </div>
  23 + </div>
  24 + </div>
  25 + </div>
  26 +
  27 + <div class="uk-modal-footer uk-text-right" style="margin-bottom: -20px;">
  28 + <button type="button" class="uk-button uk-modal-close">取消</button>
  29 + <button type="submit" class="uk-button uk-button-primary"><i class="uk-icon-check"></i> &nbsp;保存</button>
  30 + </div>
  31 + </form>
  32 + </div>
  33 +
  34 + <script>
  35 + (function() {
  36 + var modal = '#signal_state_config-modal';
  37 + var f = $('form', modal);
  38 +
  39 + $(modal).on('init', function(e, data) {
  40 + var val = gb_signal_state.isEnable()?1:0;
  41 + $('[name=enable]', f).val(val);
  42 + });
  43 +
  44 + f.formValidation(gb_form_validation_opts);
  45 + f.on('success.form.fv', function(e) {
  46 + e.preventDefault();
  47 + var data = $(this).serializeJSON();
  48 +
  49 + if(data.enable=='1')
  50 + gb_signal_state.enable();
  51 + else
  52 + gb_signal_state.disable();
  53 +
  54 + UIkit.modal(modal).hide();
  55 + });
  56 +
  57 + })();
  58 + </script>
59 </div> 59 </div>
60 \ No newline at end of file 60 \ No newline at end of file
src/main/resources/static/real_control_v2/js/signal_state/signal_state.js
1 -/**  
2 - * GPS信号状态  
3 - * @type {{}}  
4 - */  
5 -var gb_signal_state = (function () {  
6 - var storage = window.localStorage;  
7 -  
8 - $(document).on('click', 'i.signal_state_icon', function (e) {  
9 - e.stopPropagation();  
10 - });  
11 -  
12 - var signal_state_data = {};  
13 - var enable = true;  
14 - //读取本地状态  
15 - var locStatus = storage.getItem("signal_state_enable");  
16 - if (locStatus && locStatus=='0')  
17 - enable = false;  
18 -  
19 - var init = function () {  
20 - $.get('/signalState/multi', {idx: gb_data_basic.line_idx}, function (rs) {  
21 - //按班次ID分组  
22 - signal_state_data = gb_common.groupBy(rs, 'schId');  
23 -  
24 - for (var schId in signal_state_data) {  
25 - multi_render(signal_state_data[schId]);  
26 - }  
27 - });  
28 - };  
29 -  
30 - var multi_render = function (list) {  
31 - if (!enable)  
32 - return;  
33 -  
34 - if (!list || list.length == 0)  
35 - return;  
36 - var line = list[0].lineCode  
37 - , schId = list[0].schId;  
38 -  
39 - var sch = gb_schedule_table.findScheduleByLine(line)[schId];  
40 - var dl = gb_schedule_table.getDl(sch);  
41 - var icon = 'question-circle';  
42 - var t = '';  
43 - $.each(list, function () {  
44 - t += (this.text + '<br>');  
45 - });  
46 -  
47 - if (list.length == 1 && list[0].type == 'route_reverse')  
48 - icon = 'reply';  
49 -  
50 - var dd = $('dd.fcsjActualCell', dl);  
51 - var se = $('i.signal_state_icon', dd);  
52 - if (se && se.length > 0)  
53 - se.remove();  
54 -  
55 - dd.append('<i data-uk-tooltip title="' + t + '" class="uk-icon-' + icon + ' signal_state_icon"></i>');  
56 - };  
57 -  
58 - var put = function (obj) {  
59 - if (!signal_state_data[obj.schId]) {  
60 - signal_state_data[obj.schId] = [];  
61 - }  
62 -  
63 - signal_state_data[obj.schId].push(obj);  
64 - multi_render(signal_state_data[obj.schId]);  
65 - };  
66 -  
67 - var marker_sch = function (sch) {  
68 - var list = signal_state_data[sch.id];  
69 - if (list) {  
70 - multi_render(list);  
71 - }  
72 - };  
73 -  
74 - var clearAll = function () {  
75 - $('.signal_state_icon').remove();  
76 - };  
77 -  
78 - return {  
79 - init: init,  
80 - put: put,  
81 - marker_sch: marker_sch,  
82 - isEnable: function () {  
83 - return enable;  
84 - },  
85 - disable: function () {  
86 - enable = false;  
87 - storage.setItem("signal_state_enable", 0);  
88 -  
89 - clearAll();  
90 - },  
91 - enable: function () {  
92 - enable = true;  
93 - storage.setItem("signal_state_enable", 1);  
94 - for (var schId in signal_state_data) {  
95 - multi_render(signal_state_data[schId]);  
96 - }  
97 - }  
98 - }; 1 +/**
  2 + * GPS信号状态
  3 + * @type {{}}
  4 + */
  5 +var gb_signal_state = (function () {
  6 + var storage = window.localStorage;
  7 +
  8 + $(document).on('click', 'i.signal_state_icon', function (e) {
  9 + e.stopPropagation();
  10 + });
  11 +
  12 + var signal_state_data = {};
  13 + var enable = true;
  14 + //读取本地状态
  15 + var locStatus = storage.getItem("signal_state_enable");
  16 + if (locStatus && locStatus=='0')
  17 + enable = false;
  18 +
  19 + var init = function () {
  20 + $.get('/signalState/multi', {idx: gb_data_basic.line_idx}, function (rs) {
  21 + //按班次ID分组
  22 + signal_state_data = gb_common.groupBy(rs, 'schId');
  23 +
  24 + for (var schId in signal_state_data) {
  25 + multi_render(signal_state_data[schId]);
  26 + }
  27 + });
  28 + };
  29 +
  30 + var multi_render = function (list) {
  31 + if (!enable)
  32 + return;
  33 +
  34 + if (!list || list.length == 0)
  35 + return;
  36 + var line = list[0].lineCode
  37 + , schId = list[0].schId;
  38 +
  39 + var sch = gb_schedule_table.findScheduleByLine(line)[schId];
  40 + var dl = gb_schedule_table.getDl(sch);
  41 + var icon = 'question-circle';
  42 + var t = '';
  43 + $.each(list, function () {
  44 + t += (this.text + '<br>');
  45 + });
  46 +
  47 + if (list.length == 1 && list[0].type == 'route_reverse')
  48 + icon = 'reply';
  49 +
  50 + var dd = $('dd.fcsjActualCell', dl);
  51 + var se = $('i.signal_state_icon', dd);
  52 + if (se && se.length > 0)
  53 + se.remove();
  54 +
  55 + dd.append('<i data-uk-tooltip title="' + t + '" class="uk-icon-' + icon + ' signal_state_icon"></i>');
  56 + };
  57 +
  58 + var put = function (obj) {
  59 + if (!signal_state_data[obj.schId]) {
  60 + signal_state_data[obj.schId] = [];
  61 + }
  62 +
  63 + signal_state_data[obj.schId].push(obj);
  64 + multi_render(signal_state_data[obj.schId]);
  65 + };
  66 +
  67 + var marker_sch = function (sch) {
  68 + var list = signal_state_data[sch.id];
  69 + if (list) {
  70 + multi_render(list);
  71 + }
  72 + };
  73 +
  74 + var clearAll = function () {
  75 + $('.signal_state_icon').remove();
  76 + };
  77 +
  78 + return {
  79 + init: init,
  80 + put: put,
  81 + marker_sch: marker_sch,
  82 + isEnable: function () {
  83 + return enable;
  84 + },
  85 + disable: function () {
  86 + enable = false;
  87 + storage.setItem("signal_state_enable", 0);
  88 +
  89 + clearAll();
  90 + },
  91 + enable: function () {
  92 + enable = true;
  93 + storage.setItem("signal_state_enable", 1);
  94 + for (var schId in signal_state_data) {
  95 + multi_render(signal_state_data[schId]);
  96 + }
  97 + }
  98 + };
99 })(); 99 })();
100 \ No newline at end of file 100 \ No newline at end of file