Commit 4bbb49029219165ade2df19a44aa3ba577b2015a

Authored by 潘钊
2 parents 88a1c131 112c42c9

Merge branch 'minhang' into pudong

Showing 54 changed files with 2584 additions and 1107 deletions

Too many changes to show.

To preserve performance only 54 of 132 files are displayed.

src/main/java/com/bsth/controller/forms/ExportController.java
@@ -13,8 +13,10 @@ import org.springframework.web.bind.annotation.RequestMethod; @@ -13,8 +13,10 @@ import org.springframework.web.bind.annotation.RequestMethod;
13 import org.springframework.web.bind.annotation.RequestParam; 13 import org.springframework.web.bind.annotation.RequestParam;
14 import org.springframework.web.bind.annotation.RestController; 14 import org.springframework.web.bind.annotation.RestController;
15 15
  16 +import com.bsth.data.BasicData;
16 import com.bsth.entity.mcy_forms.Allline; 17 import com.bsth.entity.mcy_forms.Allline;
17 import com.bsth.entity.mcy_forms.Changetochange; 18 import com.bsth.entity.mcy_forms.Changetochange;
  19 +import com.bsth.entity.mcy_forms.Daily;
18 import com.bsth.entity.mcy_forms.Executionrate; 20 import com.bsth.entity.mcy_forms.Executionrate;
19 import com.bsth.entity.mcy_forms.Linepasswengerflow; 21 import com.bsth.entity.mcy_forms.Linepasswengerflow;
20 import com.bsth.entity.mcy_forms.Operationservice; 22 import com.bsth.entity.mcy_forms.Operationservice;
@@ -231,7 +233,7 @@ public class ExportController { @@ -231,7 +233,7 @@ public class ExportController {
231 listI.add(resList.iterator()); 233 listI.add(resList.iterator());
232 String path = this.getClass().getResource("/").getPath() + "static\\pages\\forms\\"; 234 String path = this.getClass().getResource("/").getPath() + "static\\pages\\forms\\";
233 ee.excelReplace(listI, new Object[] { map }, path + "mould\\vehicleloading.xls", 235 ee.excelReplace(listI, new Object[] { map }, path + "mould\\vehicleloading.xls",
234 - path + "export\\车辆加注" + sdfSimple.format(sdfMonth.parse(map.get("dat").toString())) + ".xls"); 236 + path + "export\\车辆加注" + sdfSimple.format(sdfMonth.parse(map.get("data").toString())) + ".xls");
235 } catch (Exception e) { 237 } catch (Exception e) {
236 e.printStackTrace(); 238 e.printStackTrace();
237 } 239 }
@@ -319,8 +321,31 @@ public class ExportController { @@ -319,8 +321,31 @@ public class ExportController {
319 List<Turnoutrate> turnoutrate = formsService.turnoutrate(map); 321 List<Turnoutrate> turnoutrate = formsService.turnoutrate(map);
320 Map<String, Object> map1 = new HashMap<String, Object>(); 322 Map<String, Object> map1 = new HashMap<String, Object>();
321 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;
  326 + Float sj=0f;
  327 + Float qz=0f;
  328 + Float ccl=0f;
  329 + Float bcjh=0f;
  330 + Float bcsj=0f;
  331 + Float bczxl=0f;
  332 + Float gs=0f;
  333 + Float zhgs=0f;*/
  334 +
322 for (Turnoutrate l : turnoutrate) { 335 for (Turnoutrate l : turnoutrate) {
323 Map<String, Object> m = new HashMap<String, Object>(); 336 Map<String, Object> m = new HashMap<String, Object>();
  337 +
  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());
  344 + 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());
  347 +
  348 + */
324 m.put("rq", l.getRq()); 349 m.put("rq", l.getRq());
325 m.put("gs", l.getGs()); 350 m.put("gs", l.getGs());
326 m.put("zhgs", l.getZhgs()); 351 m.put("zhgs", l.getZhgs());
@@ -334,6 +359,19 @@ public class ExportController { @@ -334,6 +359,19 @@ public class ExportController {
334 m.put("bbzxl", l.getBbzxl()); 359 m.put("bbzxl", l.getBbzxl());
335 m.put("sm", l.getSm()); 360 m.put("sm", l.getSm());
336 resList.add(m); 361 resList.add(m);
  362 +
  363 + /*m=new HashMap<String,Object>();
  364 + m.put("total_xlts", jh);
  365 + m.put("total_jh", jh);
  366 + 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);
  371 + m.put("total_bczxl", bczxl);
  372 + m.put("total_gs", gs);
  373 + m.put("total_zhgs", zhgs);
  374 + */
337 } 375 }
338 376
339 try { 377 try {
@@ -356,8 +394,29 @@ public class ExportController { @@ -356,8 +394,29 @@ public class ExportController {
356 List<Executionrate> executionrate = formsService.executionrate(map); 394 List<Executionrate> executionrate = formsService.executionrate(map);
357 Map<String, Object> map1 = new HashMap<String, Object>(); 395 Map<String, Object> map1 = new HashMap<String, Object>();
358 List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>(); 396 List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();
  397 + /* Float xlts=0f;
  398 + Float jh=0f;
  399 + Float sj=0f;
  400 + Float ccl=0f;
  401 + Float bcjh=0f;
  402 + Float bcsj=0f;
  403 + Float bczxl=0f;
  404 + Float gs=0f;
  405 + Float zhgs=0f;*/
  406 +
359 for (Executionrate l : executionrate) { 407 for (Executionrate l : executionrate) {
360 Map<String, Object> m = new HashMap<String, Object>(); 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());
  415 + 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());
  418 +
  419 + */
361 m.put("rq", l.getRq()); 420 m.put("rq", l.getRq());
362 m.put("gs", l.getGs()); 421 m.put("gs", l.getGs());
363 m.put("zhgs", l.getZhgs()); 422 m.put("zhgs", l.getZhgs());
@@ -370,6 +429,19 @@ public class ExportController { @@ -370,6 +429,19 @@ public class ExportController {
370 m.put("bbzxl", l.getBbzxl()); 429 m.put("bbzxl", l.getBbzxl());
371 m.put("sm", l.getSm()); 430 m.put("sm", l.getSm());
372 resList.add(m); 431 resList.add(m);
  432 +
  433 +
  434 + /* m=new HashMap<String,Object>();
  435 + 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);*/
  444 +
373 } 445 }
374 446
375 try { 447 try {
@@ -393,12 +465,31 @@ public class ExportController { @@ -393,12 +465,31 @@ public class ExportController {
393 List<Allline> allline = formsService.allline(map); 465 List<Allline> allline = formsService.allline(map);
394 Map<String, Object> map1 = new HashMap<String, Object>(); 466 Map<String, Object> map1 = new HashMap<String, Object>();
395 List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>(); 467 List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();
  468 + /* Integer jh=0;
  469 + Integer sj=0;
  470 + Integer ccl=0;
  471 + Integer bcjh=0;
  472 + Float bcsj=0f;
  473 + Integer bczxl=0;
  474 + Integer gs=0;
  475 + Float zhgs=0f;
  476 + */
396 for (Allline l : allline) { 477 for (Allline l : allline) {
397 Map<String, Object> m = new HashMap<String, Object>(); 478 Map<String, Object> m = new HashMap<String, Object>();
  479 +
  480 + /*jh +=l.getGsgs()=="" ? 0: Integer.valueOf(l.getGsgs());
  481 + sj +=l.getFgsgs()==""?0: Integer.valueOf(l.getFgsgs());
  482 + 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());
  485 + 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 + */
398 m.put("rq", l.getRq()); 489 m.put("rq", l.getRq());
399 - m.put("gs", l.getGs());  
400 - m.put("zhgs", l.getZhgs());  
401 - m.put("xl", l.getXl()); 490 + m.put("gs", l.getGsgs());
  491 + m.put("zhgs", l.getFgsgs());
  492 + //m.put("xl", l.getXl());
402 m.put("cchjh", l.getCchjh()); 493 m.put("cchjh", l.getCchjh());
403 m.put("cchsj", l.getCchsj()); 494 m.put("cchsj", l.getCchsj());
404 m.put("chl", l.getChl()); 495 m.put("chl", l.getChl());
@@ -407,6 +498,17 @@ public class ExportController { @@ -407,6 +498,17 @@ public class ExportController {
407 m.put("bbzxl", l.getBbzxl()); 498 m.put("bbzxl", l.getBbzxl());
408 m.put("sm", l.getSm()); 499 m.put("sm", l.getSm());
409 resList.add(m); 500 resList.add(m);
  501 +
  502 + /*m=new HashMap<String,Object>();
  503 + m.put("total_jh", jh);
  504 + m.put("total_sj", sj);
  505 + m.put("total_ccl", ccl);
  506 + m.put("total_bcjh", bcjh);
  507 + m.put("total_bcsj", bcsj);
  508 + m.put("total_bczxl", bczxl);
  509 + m.put("total_gs", gs);
  510 + m.put("total_zhgs", zhgs);
  511 + */
410 } 512 }
411 513
412 try { 514 try {
@@ -422,6 +524,56 @@ public class ExportController { @@ -422,6 +524,56 @@ public class ExportController {
422 524
423 525
424 526
  527 + //班次日报表
  528 + @RequestMapping(value = "/dailyExport", method = RequestMethod.POST)
  529 + public List<Map<String, Object>> dailyExport(@RequestParam Map<String, Object> map) {
  530 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"), sdfSimple = new SimpleDateFormat("yyyyMMdd");
  531 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  532 + ReportUtils ee = new ReportUtils();
  533 + List<Daily> allline = formsService.daily(map);
  534 +
  535 + List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();
  536 + Float zgl=0f;
  537 + Float ks=0f;
  538 + Float yh=0f;
  539 + Float bc=0f;
  540 + Map<String, Object> m ;
  541 + for (Daily d : allline) {
  542 + m = new HashMap<String, Object>();
  543 + zgl +=d.getZlc()==""?0f:Float.valueOf(d.getZlc());
  544 + ks +=d.getJzl1()==""?0f:Float.valueOf(d.getJzl1());
  545 + yh +=d.getYh()==""?0f:Float.valueOf(d.getYh());
  546 + bc +=d.getBc()==""?0f:Float.valueOf(d.getBc());
  547 + m.put("zbh", d.getZbh());
  548 + m.put("jgh",d.getJgh());
  549 + m.put("jName", d.getjName());
  550 + m.put("zlc", d.getZlc());
  551 + m.put("jzl1", d.getJzl1());
  552 + m.put("yh", d.getYh());
  553 + m.put("bc", d.getBc());
  554 +
  555 + resList.add(m);
  556 + }
  557 +
  558 + m=new HashMap<String,Object>();
  559 + m.put("total_zgl", zgl);
  560 + m.put("total_ks", ks);
  561 + m.put("total_yh", yh);
  562 + m.put("total_bc", bc);
  563 +
  564 + m.put("line", BasicData.lineCode2NameMap.get(map.get("line").toString()));
  565 + m.put("date", map.get("date").toString());
  566 + try {
  567 + listI.add(resList.iterator());
  568 + String path = this.getClass().getResource("/").getPath() + "static\\pages\\forms\\";
  569 + ee.excelReplace(listI, new Object[] { m }, path + "mould\\daily.xls", path + "export\\班次日报表"
  570 + + sdfSimple.format(sdfMonth.parse(map.get("date").toString())) + ".xls");
  571 + } catch (Exception e) {
  572 + e.printStackTrace();
  573 + }
  574 + return resList;
  575 + }
  576 +
425 577
426 578
427 } 579 }
src/main/java/com/bsth/controller/forms/MCY_FormsController.java
@@ -11,6 +11,7 @@ import org.springframework.web.bind.annotation.RestController; @@ -11,6 +11,7 @@ import org.springframework.web.bind.annotation.RestController;
11 11
12 import com.bsth.entity.mcy_forms.Allline; 12 import com.bsth.entity.mcy_forms.Allline;
13 import com.bsth.entity.mcy_forms.Changetochange; 13 import com.bsth.entity.mcy_forms.Changetochange;
  14 +import com.bsth.entity.mcy_forms.Daily;
14 import com.bsth.entity.mcy_forms.Executionrate; 15 import com.bsth.entity.mcy_forms.Executionrate;
15 import com.bsth.entity.mcy_forms.Linepasswengerflow; 16 import com.bsth.entity.mcy_forms.Linepasswengerflow;
16 import com.bsth.entity.mcy_forms.Operationservice; 17 import com.bsth.entity.mcy_forms.Operationservice;
@@ -112,4 +113,12 @@ public class MCY_FormsController { @@ -112,4 +113,12 @@ public class MCY_FormsController {
112 113
113 return formsService.allline(map); 114 return formsService.allline(map);
114 } 115 }
  116 +
  117 + // 营运线路名称统计表
  118 + @RequestMapping(value = "/daily", method = RequestMethod.POST)
  119 + public List<Daily> daily(@RequestParam Map<String, Object> map) {
  120 +
  121 + return formsService.daily(map);
  122 + }
  123 +
115 } 124 }
src/main/java/com/bsth/controller/realcontrol/SignalStateController.java 0 → 100644
  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/controller/report/ReportController.java
@@ -64,6 +64,11 @@ public class ReportController { @@ -64,6 +64,11 @@ public class ReportController {
64 return service.tbodyTime3(line, ttinfo); 64 return service.tbodyTime3(line, ttinfo);
65 } 65 }
66 66
  67 + @RequestMapping(value = "/tbodyTime4", method = RequestMethod.GET)
  68 + public List<Map<String, Object>> tbodyTime4(@RequestParam String line,@RequestParam String ttinfo) {
  69 + return service.tbodyTime4(line, ttinfo);
  70 + }
  71 +
67 @RequestMapping(value = "/tbodyTime5", method = RequestMethod.GET) 72 @RequestMapping(value = "/tbodyTime5", method = RequestMethod.GET)
68 public List<Map<String, Object>> tbodyTime5(@RequestParam String line,@RequestParam String ttinfo) { 73 public List<Map<String, Object>> tbodyTime5(@RequestParam String line,@RequestParam String ttinfo) {
69 return service.tbodyTime5(line, ttinfo); 74 return service.tbodyTime5(line, ttinfo);
src/main/java/com/bsth/data/BasicData.java
1 package com.bsth.data; 1 package com.bsth.data;
2 2
3 import com.bsth.Application; 3 import com.bsth.Application;
4 -import com.bsth.data.gpsdata.analyse.GeoCacheData; 4 +import com.bsth.data.gpsdata.arrival.GeoCacheData;
5 import com.bsth.entity.*; 5 import com.bsth.entity.*;
6 import com.bsth.entity.schedule.CarConfigInfo; 6 import com.bsth.entity.schedule.CarConfigInfo;
7 import com.bsth.repository.*; 7 import com.bsth.repository.*;
@@ -13,6 +13,7 @@ import org.slf4j.Logger; @@ -13,6 +13,7 @@ import org.slf4j.Logger;
13 import org.slf4j.LoggerFactory; 13 import org.slf4j.LoggerFactory;
14 import org.springframework.beans.factory.annotation.Autowired; 14 import org.springframework.beans.factory.annotation.Autowired;
15 import org.springframework.boot.CommandLineRunner; 15 import org.springframework.boot.CommandLineRunner;
  16 +import org.springframework.core.annotation.Order;
16 import org.springframework.stereotype.Component; 17 import org.springframework.stereotype.Component;
17 18
18 import java.util.*; 19 import java.util.*;
@@ -25,13 +26,14 @@ import java.util.concurrent.TimeUnit; @@ -25,13 +26,14 @@ import java.util.concurrent.TimeUnit;
25 * @date 2016年8月10日 下午3:27:45 26 * @date 2016年8月10日 下午3:27:45
26 */ 27 */
27 @Component 28 @Component
  29 +@Order(value = 1)
28 public class BasicData implements CommandLineRunner { 30 public class BasicData implements CommandLineRunner {
29 -  
30 - //公司代码和公司名对照(K: 公司编码,V:公司名)  
31 - public static Map<String, String> businessCodeNameMap;  
32 -  
33 - //分公司公司代码和分公司公司名对照(K: 公司编码+分公司编码,V:分公司公司名)  
34 - public static Map<String, String> businessFgsCodeNameMap; 31 +
  32 + //公司代码和公司名对照(K: 公司编码,V:公司名)
  33 + public static Map<String, String> businessCodeNameMap;
  34 +
  35 + //分公司公司代码和分公司公司名对照(K: 公司编码+分公司编码,V:分公司公司名)
  36 + public static Map<String, String> businessFgsCodeNameMap;
35 37
36 //设备号和车辆自编号 (K: 设备编码 ,V:车辆自编号) 38 //设备号和车辆自编号 (K: 设备编码 ,V:车辆自编号)
37 public static BiMap<String, String> deviceId2NbbmMap; 39 public static BiMap<String, String> deviceId2NbbmMap;
@@ -39,27 +41,21 @@ public class BasicData implements CommandLineRunner { @@ -39,27 +41,21 @@ public class BasicData implements CommandLineRunner {
39 //车辆自编号和公司代码对照 (K: 车辆自编号 ,V:公司代码) 41 //车辆自编号和公司代码对照 (K: 车辆自编号 ,V:公司代码)
40 public static Map<String, String> nbbm2CompanyCodeMap; 42 public static Map<String, String> nbbm2CompanyCodeMap;
41 43
42 - //站点编码和名称对照,包括停车场 (K: 站点编码 ,V:站点名称) 44 + //站点编码和名称对照,包括停车场 (K: lineCode_updown_stationCode ,V:站点名称)
43 public static Map<String, String> stationCode2NameMap; 45 public static Map<String, String> stationCode2NameMap;
44 46
45 //线路起终点对照(线路编码_上下行_起终点) 1024_0_B (1024上行起点) 47 //线路起终点对照(线路编码_上下行_起终点) 1024_0_B (1024上行起点)
46 - public static Map<String, String> lineSEPointMap; 48 + //public static Map<String, String> lineSEPointMap;
47 49
48 //车辆和线路对照 50 //车辆和线路对照
49 public static Map<String, Line> nbbm2LineMap; 51 public static Map<String, Line> nbbm2LineMap;
50 52
51 - //线路和用户对照 用于webSocket定向推送消息(用户进入线调时写入数据)  
52 - //public static TreeMultimap<String, String> lineCode2SocketUserMap = TreeMultimap.create();  
53 -  
54 //线路ID和code 对照 53 //线路ID和code 对照
55 public static BiMap<Integer, String> lineId2CodeMap; 54 public static BiMap<Integer, String> lineId2CodeMap;
56 55
57 //线路编码和名称对照 56 //线路编码和名称对照
58 public static Map<String, String> lineCode2NameMap; 57 public static Map<String, String> lineCode2NameMap;
59 58
60 - //线路编码_站点编码 == 0|1 上下行  
61 - //public static Map<String, Integer> lineStationUpDownMap;  
62 -  
63 //停车场 59 //停车场
64 public static List<String> parkCodeList; 60 public static List<String> parkCodeList;
65 61
@@ -77,7 +73,7 @@ public class BasicData implements CommandLineRunner { @@ -77,7 +73,7 @@ public class BasicData implements CommandLineRunner {
77 public static Map<String, String> allPerson; 73 public static Map<String, String> allPerson;
78 74
79 //站点名和运管处编号 对照 75 //站点名和运管处编号 对照
80 - public static Map<String,Integer> stationName2YgcNumber; 76 + public static Map<String, Integer> stationName2YgcNumber;
81 77
82 78
83 static Logger logger = LoggerFactory.getLogger(BasicData.class); 79 static Logger logger = LoggerFactory.getLogger(BasicData.class);
@@ -87,7 +83,7 @@ public class BasicData implements CommandLineRunner { @@ -87,7 +83,7 @@ public class BasicData implements CommandLineRunner {
87 83
88 @Override 84 @Override
89 public void run(String... arg0) throws Exception { 85 public void run(String... arg0) throws Exception {
90 - Application.mainServices.scheduleWithFixedDelay(dataLoader, 2, 2, TimeUnit.HOURS); 86 + Application.mainServices.scheduleWithFixedDelay(dataLoader, 0, 2, TimeUnit.HOURS);
91 } 87 }
92 88
93 89
@@ -114,7 +110,7 @@ public class BasicData implements CommandLineRunner { @@ -114,7 +110,7 @@ public class BasicData implements CommandLineRunner {
114 110
115 @Autowired 111 @Autowired
116 PersonnelRepository personnelRepository; 112 PersonnelRepository personnelRepository;
117 - 113 +
118 @Autowired 114 @Autowired
119 BusinessRepository businessRepository; 115 BusinessRepository businessRepository;
120 116
@@ -156,47 +152,24 @@ public class BasicData implements CommandLineRunner { @@ -156,47 +152,24 @@ public class BasicData implements CommandLineRunner {
156 return 0; 152 return 0;
157 } 153 }
158 154
159 -  
160 -/* private void loadStationRouteInfo() {  
161 - Iterator<StationRoute> iterator = stationRouteRepository.findAllEffective().iterator();  
162 -  
163 - Map<String, String> sePointMap = new HashMap<>();  
164 - //lineSEPointMap  
165 - Map<String, Integer> map = new HashMap<>();  
166 -  
167 - StationRoute route;  
168 - while (iterator.hasNext()) {  
169 - route = iterator.next();  
170 - map.put(route.getLineCode() + "_" + route.getStationCode(), route.getDirections());  
171 -  
172 - if (route.getStationMark() != null &&  
173 - (route.getStationMark().equals("B") || route.getStationMark().equals("E"))) {  
174 - sePointMap.put(route.getLineCode() + "_"  
175 - + route.getDirections()  
176 - + "_" + route.getStationMark(), route.getStationCode());  
177 - }  
178 - }  
179 - lineStationUpDownMap = map;  
180 - lineSEPointMap = sePointMap;  
181 - }*/  
182 -  
183 /** 155 /**
184 * loadBusinessInfo 156 * loadBusinessInfo
185 * (公司代码公司名对照) 157 * (公司代码公司名对照)
186 */ 158 */
187 - public void loadBusinessInfo(){  
188 - Map<String, String> businessMap=new HashMap<String,String>();  
189 - Map<String, String> businessFgsMap=new HashMap<String,String>();  
190 - Iterator<Business> busIter=businessRepository.findAll().iterator();  
191 - Business t;  
192 - while(busIter.hasNext()){  
193 - t=busIter.next();  
194 - businessMap.put(t.getBusinessCode(), t.getBusinessName());  
195 - businessFgsMap.put(t.getBusinessCode()+"_"+t.getUpCode(), t.getBusinessName());  
196 - }  
197 - businessCodeNameMap=businessMap;  
198 - businessFgsCodeNameMap=businessFgsMap; 159 + public void loadBusinessInfo() {
  160 + Map<String, String> businessMap = new HashMap<String, String>();
  161 + Map<String, String> businessFgsMap = new HashMap<String, String>();
  162 + Iterator<Business> busIter = businessRepository.findAll().iterator();
  163 + Business t;
  164 + while (busIter.hasNext()) {
  165 + t = busIter.next();
  166 + businessMap.put(t.getBusinessCode(), t.getBusinessName());
  167 + businessFgsMap.put(t.getBusinessCode() + "_" + t.getUpCode(), t.getBusinessName());
  168 + }
  169 + businessCodeNameMap = businessMap;
  170 + businessFgsCodeNameMap = businessFgsMap;
199 } 171 }
  172 +
200 /** 173 /**
201 * @Title: loadDeviceInfo 174 * @Title: loadDeviceInfo
202 * @Description: TODO(加载设备相关信息) 175 * @Description: TODO(加载设备相关信息)
@@ -223,13 +196,13 @@ public class BasicData implements CommandLineRunner { @@ -223,13 +196,13 @@ public class BasicData implements CommandLineRunner {
223 */ 196 */
224 public void loadStationInfo() { 197 public void loadStationInfo() {
225 Map<String, String> stationCode2Name = new HashMap<>(); 198 Map<String, String> stationCode2Name = new HashMap<>();
226 - Iterator<Station> iterator = stationRepository.findAll().iterator();  
227 - //站点  
228 - Station station; 199 + Iterator<StationRoute> iterator = stationRouteRepository.findAll().iterator();
  200 + StationRoute sroute;
229 while (iterator.hasNext()) { 201 while (iterator.hasNext()) {
230 - station = iterator.next();  
231 - stationCode2Name.put(station.getStationCod(), station.getStationName()); 202 + sroute = iterator.next();
  203 + stationCode2Name.put(sroute.getLineCode() + "_" + sroute.getDirections() + "_" + sroute.getStationCode(), sroute.getStationName());
232 } 204 }
  205 +
233 //停车场 206 //停车场
234 Iterator<CarPark> iterator2 = carParkRepository.findAll().iterator(); 207 Iterator<CarPark> iterator2 = carParkRepository.findAll().iterator();
235 208
@@ -266,7 +239,7 @@ public class BasicData implements CommandLineRunner { @@ -266,7 +239,7 @@ public class BasicData implements CommandLineRunner {
266 * @Title: loadLineInfo 239 * @Title: loadLineInfo
267 * @Description: TODO(加载线路相关信息) 240 * @Description: TODO(加载线路相关信息)
268 */ 241 */
269 - public void loadLineInfo(){ 242 + public void loadLineInfo() {
270 Iterator<Line> iterator = lineRepository.findAll().iterator(); 243 Iterator<Line> iterator = lineRepository.findAll().iterator();
271 244
272 Line line; 245 Line line;
@@ -276,36 +249,36 @@ public class BasicData implements CommandLineRunner { @@ -276,36 +249,36 @@ public class BasicData implements CommandLineRunner {
276 Map<String, String> code2SHcode = new HashMap<String, String>(); 249 Map<String, String> code2SHcode = new HashMap<String, String>();
277 Map<String, Integer> tempStationName2YgcNumber = new HashMap<String, Integer>(); 250 Map<String, Integer> tempStationName2YgcNumber = new HashMap<String, Integer>();
278 251
279 - while(iterator.hasNext()){ 252 + while (iterator.hasNext()) {
280 line = iterator.next(); 253 line = iterator.next();
281 biMap.put(line.getId(), line.getLineCode()); 254 biMap.put(line.getId(), line.getLineCode());
282 code2name.put(line.getLineCode(), line.getName()); 255 code2name.put(line.getLineCode(), line.getName());
283 - id2SHcode.put(line.getId(),line.getShanghaiLinecode()); 256 + id2SHcode.put(line.getId(), line.getShanghaiLinecode());
284 code2SHcode.put(line.getLineCode(), line.getShanghaiLinecode()); 257 code2SHcode.put(line.getLineCode(), line.getShanghaiLinecode());
285 258
286 /** 259 /**
287 * 加载运管处的站点及序号 260 * 加载运管处的站点及序号
288 * 上行从1开始,下行顺序续编 261 * 上行从1开始,下行顺序续编
289 262
290 - List<Object[]> ygcLines = stationRouteRepository.findAllLineWithYgc();  
291 - if(ygcLines != null && ygcLines.size() > 0){  
292 - int size = ygcLines.size();  
293 - Object[] tempArray ;  
294 - int num = 1;  
295 - String key;  
296 - String lineCode = "";  
297 - for (int i = 0; i < size; i ++){  
298 - tempArray = ygcLines.get(i);  
299 - if(lineCode.equals("")){  
300 - lineCode = tempArray[0]+"";  
301 - }else if(!lineCode.equals(tempArray[0]+"")){  
302 - num = 1;  
303 - lineCode = tempArray[0]+"";  
304 - }  
305 - key = tempArray[0] + "_"+tempArray[1] + "_"+tempArray[2];  
306 - tempStationName2YgcNumber.put(key,num++);  
307 - }  
308 - }*/ 263 + List<Object[]> ygcLines = stationRouteRepository.findAllLineWithYgc();
  264 + if(ygcLines != null && ygcLines.size() > 0){
  265 + int size = ygcLines.size();
  266 + Object[] tempArray ;
  267 + int num = 1;
  268 + String key;
  269 + String lineCode = "";
  270 + for (int i = 0; i < size; i ++){
  271 + tempArray = ygcLines.get(i);
  272 + if(lineCode.equals("")){
  273 + lineCode = tempArray[0]+"";
  274 + }else if(!lineCode.equals(tempArray[0]+"")){
  275 + num = 1;
  276 + lineCode = tempArray[0]+"";
  277 + }
  278 + key = tempArray[0] + "_"+tempArray[1] + "_"+tempArray[2];
  279 + tempStationName2YgcNumber.put(key,num++);
  280 + }
  281 + }*/
309 } 282 }
310 283
311 lineId2CodeMap = biMap; 284 lineId2CodeMap = biMap;
src/main/java/com/bsth/data/LineConfigData.java
@@ -10,6 +10,7 @@ import org.slf4j.Logger; @@ -10,6 +10,7 @@ import org.slf4j.Logger;
10 import org.slf4j.LoggerFactory; 10 import org.slf4j.LoggerFactory;
11 import org.springframework.beans.factory.annotation.Autowired; 11 import org.springframework.beans.factory.annotation.Autowired;
12 import org.springframework.boot.CommandLineRunner; 12 import org.springframework.boot.CommandLineRunner;
  13 +import org.springframework.core.annotation.Order;
13 import org.springframework.stereotype.Component; 14 import org.springframework.stereotype.Component;
14 15
15 import java.util.*; 16 import java.util.*;
@@ -23,6 +24,7 @@ import java.util.*; @@ -23,6 +24,7 @@ import java.util.*;
23 * 24 *
24 */ 25 */
25 @Component 26 @Component
  27 +@Order(value = 2)
26 public class LineConfigData implements CommandLineRunner { 28 public class LineConfigData implements CommandLineRunner {
27 29
28 Logger logger = LoggerFactory.getLogger(this.getClass()); 30 Logger logger = LoggerFactory.getLogger(this.getClass());
src/main/java/com/bsth/data/gpsdata/GpsEntity.java
1 package com.bsth.data.gpsdata; 1 package com.bsth.data.gpsdata;
2 2
3 -import com.bsth.data.gpsdata.analyse.StationRoute; 3 +import com.bsth.data.gpsdata.arrival.entity.StationRoute;
4 import com.fasterxml.jackson.annotation.JsonIgnore; 4 import com.fasterxml.jackson.annotation.JsonIgnore;
5 5
6 /** 6 /**
@@ -78,15 +78,15 @@ public class GpsEntity { @@ -78,15 +78,15 @@ public class GpsEntity {
78 private boolean sEPoint; 78 private boolean sEPoint;
79 */ 79 */
80 80
81 - /** 站内 */  
82 - private boolean instation; 81 + /** 0: 站外 1:站内 2:场内 */
  82 + private int instation;
83 83
84 /** 站点信息,站内时有值 */ 84 /** 站点信息,站内时有值 */
85 @JsonIgnore 85 @JsonIgnore
86 private StationRoute station; 86 private StationRoute station;
87 87
88 /** 状态 */ 88 /** 状态 */
89 - private String state2; 89 + private String signalState = "normal";
90 90
91 public Integer getCompanyCode() { 91 public Integer getCompanyCode() {
92 return companyCode; 92 return companyCode;
@@ -233,14 +233,6 @@ public class GpsEntity { @@ -233,14 +233,6 @@ public class GpsEntity {
233 this.version = version; 233 this.version = version;
234 } 234 }
235 235
236 - public boolean isInstation() {  
237 - return instation;  
238 - }  
239 -  
240 - public void setInstation(boolean instation) {  
241 - this.instation = instation;  
242 - }  
243 -  
244 public StationRoute getStation() { 236 public StationRoute getStation() {
245 return station; 237 return station;
246 } 238 }
@@ -257,11 +249,19 @@ public class GpsEntity { @@ -257,11 +249,19 @@ public class GpsEntity {
257 this.abnormal = abnormal; 249 this.abnormal = abnormal;
258 } 250 }
259 251
260 - public String getState2() {  
261 - return state2; 252 + public String getSignalState() {
  253 + return signalState;
262 } 254 }
263 255
264 - public void setState2(String state2) {  
265 - this.state2 = state2; 256 + public void setSignalState(String signalState) {
  257 + this.signalState = signalState;
  258 + }
  259 +
  260 + public int getInstation() {
  261 + return instation;
  262 + }
  263 +
  264 + public void setInstation(int instation) {
  265 + this.instation = instation;
266 } 266 }
267 } 267 }
src/main/java/com/bsth/data/gpsdata/GpsRealData.java
@@ -2,11 +2,9 @@ package com.bsth.data.gpsdata; @@ -2,11 +2,9 @@ package com.bsth.data.gpsdata;
2 2
3 import com.alibaba.fastjson.JSON; 3 import com.alibaba.fastjson.JSON;
4 import com.alibaba.fastjson.JSONObject; 4 import com.alibaba.fastjson.JSONObject;
5 -import com.bsth.Application;  
6 import com.bsth.data.BasicData; 5 import com.bsth.data.BasicData;
7 import com.bsth.data.forecast.ForecastRealServer; 6 import com.bsth.data.forecast.ForecastRealServer;
8 -import com.bsth.data.gpsdata.analyse.GeoCacheData;  
9 -import com.bsth.data.gpsdata.analyse.GpsAnalyse; 7 +import com.bsth.data.gpsdata.arrival.GpsRealAnalyse;
10 import com.bsth.data.gpsdata.recovery.GpsDataRecovery; 8 import com.bsth.data.gpsdata.recovery.GpsDataRecovery;
11 import com.bsth.data.schedule.DayOfSchedule; 9 import com.bsth.data.schedule.DayOfSchedule;
12 import com.bsth.entity.realcontrol.ScheduleRealInfo; 10 import com.bsth.entity.realcontrol.ScheduleRealInfo;
@@ -27,262 +25,202 @@ import org.springframework.stereotype.Component; @@ -27,262 +25,202 @@ import org.springframework.stereotype.Component;
27 import java.io.BufferedReader; 25 import java.io.BufferedReader;
28 import java.io.InputStreamReader; 26 import java.io.InputStreamReader;
29 import java.util.*; 27 import java.util.*;
30 -import java.util.concurrent.TimeUnit;  
31 28
32 /** 29 /**
33 - * 30 + * @author PanZhao
34 * @ClassName: GpsRealData 31 * @ClassName: GpsRealData
35 * @Description: TODO(实时GPS数据集合) 32 * @Description: TODO(实时GPS数据集合)
36 - * @author PanZhao  
37 * @date 2016年8月12日 下午2:04:41 33 * @date 2016年8月12日 下午2:04:41
38 - *  
39 */ 34 */
40 @Component 35 @Component
41 -public class GpsRealData implements CommandLineRunner{  
42 -  
43 - static Logger logger = LoggerFactory.getLogger(GpsRealData.class);  
44 -  
45 - private static Map<String, GpsEntity> gpsMap;  
46 -  
47 - //按线路分组设备号  
48 - private static TreeMultimap<String, String> lineCode2Devices;  
49 -  
50 - // 网关数据接口地址  
51 - private static String url;  
52 -  
53 - @Autowired  
54 - GpsDataLoader gpsDataLoader;  
55 -  
56 - @Autowired  
57 - DayOfSchedule dayOfSchedule;  
58 -  
59 - @Autowired  
60 - ForecastRealServer forecastRealServer;  
61 -  
62 - /**  
63 - * 构造函数  
64 - */  
65 - public GpsRealData(){  
66 - gpsMap = new HashMap<>();  
67 - lineCode2Devices = TreeMultimap.create();  
68 - url = ConfigUtil.get("http.gps.real.url");  
69 - }  
70 -  
71 - @Override  
72 - public void run(String... arg0) throws Exception {  
73 - logger.info("gpsDataLoader,20,6");  
74 - Application.mainServices.scheduleWithFixedDelay(gpsDataLoader, 40, 6, TimeUnit.SECONDS);  
75 - }  
76 -  
77 - static final long CLEAR_DIFF = 1000 * 60 * 60 * 2;  
78 - public GpsEntity add(GpsEntity gps) {  
79 - String device = gps.getDeviceId();  
80 - GpsEntity old = gpsMap.get(device);  
81 -  
82 - //断线2个小时,清除缓存数据  
83 - if(gps.getTimestamp() - old.getTimestamp() > CLEAR_DIFF && gps.getNbbm() != null)  
84 - GeoCacheData.clear(gps.getNbbm());  
85 -  
86 - //分析gps  
87 - if(isAvailable(gps) && (old == null || old.getTimestamp() != gps.getTimestamp()))  
88 - GpsAnalyse.start(gps);  
89 -  
90 - if(!StringUtils.isEmpty(gps.getStopNo())){  
91 - //定时定距数据附带站点编码改变  
92 - if(null == old || !gps.getStopNo().equals(old.getStopNo())){  
93 - gps.setArrTime(gps.getTimestamp());  
94 - //预测到达终点时间  
95 - forecastRealServer.forecast(gps.getNbbm(), gps);  
96 - }  
97 - else{  
98 - gps.setArrTime(old.getArrTime());  
99 - //不预测, 重新计算终点时间  
100 - gps.setExpectStopTime(forecastRealServer.expectStopTime(gps.getNbbm()));  
101 - }  
102 - }  
103 -  
104 - gpsMap.put(device, gps);  
105 - if(StringUtils.isNotBlank(gps.getLineId()))  
106 - lineCode2Devices.put(gps.getLineId(), device);  
107 - return gps;  
108 - }  
109 -  
110 - public boolean isAvailable(GpsEntity gps){  
111 - return StringUtils.isNotEmpty(gps.getLineId()) &&  
112 - dayOfSchedule.getCurrSchDate().containsKey(gps.getLineId());  
113 - }  
114 -  
115 - /**  
116 - *  
117 - * @Title: get @Description: TODO(设备号获取GPS)  
118 - */  
119 - public GpsEntity get(String deviceId) {  
120 - return gpsMap.get(deviceId);  
121 - }  
122 -  
123 - /**  
124 - *  
125 - * @Title: get @Description: TODO(线路编码获取GPS集合) @throws  
126 - */  
127 - public List<GpsEntity> getByLine(String lineCode) {  
128 - NavigableSet<String> set = lineCode2Devices.get(lineCode);  
129 -  
130 - List<GpsEntity> rs = new ArrayList<>();  
131 - GpsEntity gps;  
132 - ScheduleRealInfo sch;  
133 - for(String device : set){  
134 - gps = gpsMap.get(device);  
135 - //过滤异常GPS数据  
136 - if(gps.isAbnormal())  
137 - continue;  
138 -  
139 - sch = dayOfSchedule.execPlanMap().get(gps.getNbbm());  
140 - if(null != sch)  
141 - gps.setSchId(sch.getId());  
142 - rs.add(gps);  
143 - }  
144 -  
145 - return rs;  
146 - }  
147 -  
148 - public List<GpsEntity> get(List<String> pArray){  
149 - List<GpsEntity> list = new ArrayList<>();  
150 -  
151 - for(String code : pArray)  
152 - list.addAll(getByLine(code));  
153 - return list;  
154 - }  
155 -  
156 - public Set<String> allDevices(){  
157 - return gpsMap.keySet();  
158 - }  
159 -  
160 - public GpsEntity findByDeviceId(String deviceId) {  
161 - return gpsMap.get(deviceId);  
162 - }  
163 -  
164 - public Collection<GpsEntity> all(){  
165 - return gpsMap.values();  
166 - }  
167 -  
168 - public void remove(String device){  
169 - gpsMap.remove(device);  
170 - }  
171 - @Component  
172 - public static class GpsDataLoader extends Thread{  
173 -  
174 - Logger logger = LoggerFactory.getLogger(GpsDataLoader.class);  
175 -  
176 - @Autowired  
177 - GpsRealData gpsRealData;  
178 -  
179 - @Override  
180 - public void run() {  
181 - try{  
182 - //如果正在恢复数据  
183 - if(GpsDataRecovery.run){  
184 - return;  
185 - }  
186 -  
187 - load();  
188 - }catch(Exception e){  
189 - logger.error("", e);  
190 - }  
191 - }  
192 -  
193 - public void load() throws Exception {  
194 - List<GpsEntity> list = new ArrayList<>();  
195 - CloseableHttpClient httpClient = null;  
196 - CloseableHttpResponse response = null;  
197 - try {  
198 - httpClient = HttpClients.createDefault();  
199 - HttpGet get = new HttpGet(url);  
200 -  
201 - response = httpClient.execute(get);  
202 -  
203 - HttpEntity entity = response.getEntity();  
204 - if (null != entity) {  
205 - // 返回数据量比较大,建议以流的形式读取  
206 - BufferedReader br = new BufferedReader(new InputStreamReader(entity.getContent()));  
207 - StringBuffer stringBuffer = new StringBuffer();  
208 - String str = "";  
209 - while ((str = br.readLine()) != null)  
210 - stringBuffer.append(str);  
211 -  
212 - JSONObject jsonObj = JSON.parseObject(stringBuffer.toString());  
213 -  
214 - if (jsonObj != null)  
215 - list = JSON.parseArray(jsonObj.getString("data"), GpsEntity.class);  
216 -  
217 - String nbbm;  
218 - for(GpsEntity gps : list){  
219 - //没有设备号  
220 - if(StringUtils.isBlank(gps.getDeviceId()))  
221 - continue;  
222 -  
223 - nbbm = BasicData.deviceId2NbbmMap.get(gps.getDeviceId());  
224 - if(StringUtils.isBlank(nbbm))  
225 - gps.setAbnormal(true);//标记为异常数据  
226 - else  
227 - gps.setNbbm(nbbm);  
228 -  
229 - gps.setStationName(BasicData.stationCode2NameMap.get(gps.getStopNo()));  
230 - gpsRealData.add(gps);  
231 -  
232 - //纠正走向  
233 - //correctUpdown(gps);  
234 - }  
235 - } else  
236 - logger.error("result is null");  
237 - } catch(Exception e){  
238 - logger.error("", e);  
239 - }  
240 - finally {  
241 - if (null != httpClient)  
242 - httpClient.close();  
243 - if(null != response)  
244 - response.close();  
245 - }  
246 - }  
247 -  
248 - /**  
249 - * 是否是起终点  
250 - * @param gps  
251 - * @return  
252 -  
253 - public boolean isSEPoint(GpsEntity gps){  
254 - String key = gps.getLineId()+"_"+gps.getUpDown()+"_"  
255 - ,stationCode;  
256 -  
257 - if(BasicData.lineSEPointMap.containsKey(key+"B")){  
258 - stationCode = BasicData.lineSEPointMap.get(key+"B");  
259 - if(gps.getStopNo().equals(stationCode)){  
260 - gps.setsEPoint(true);  
261 - return true;  
262 - }  
263 - }  
264 -  
265 - if(BasicData.lineSEPointMap.containsKey(key+"E")){  
266 - stationCode = BasicData.lineSEPointMap.get(key+"E");  
267 - if(gps.getStopNo().equals(stationCode)){  
268 - gps.setsEPoint(true);  
269 - return true;  
270 - }  
271 - }  
272 - return false;  
273 - }*/  
274 -  
275 - /**  
276 - * 纠正上下行  
277 - * @param gps  
278 -  
279 - public void correctUpdown(GpsEntity gps){  
280 - Integer updown=BasicData.lineStationUpDownMap.get(gps.getLineId()+"_"+gps.getStopNo());  
281 - if(updown != null && !updown.equals(gps.getUpDown()))  
282 - gps.setUpDown(updown);  
283 -  
284 - if(isSEPoint(gps))  
285 - return;  
286 - }*/  
287 - } 36 +public class GpsRealData implements CommandLineRunner {
  37 +
  38 + static Logger logger = LoggerFactory.getLogger(GpsRealData.class);
  39 +
  40 + private static Map<String, GpsEntity> gpsMap;
  41 +
  42 + //按线路分组设备号
  43 + private static TreeMultimap<String, String> lineCode2Devices;
  44 +
  45 + // 网关数据接口地址
  46 + private static String url;
  47 +
  48 + @Autowired
  49 + GpsDataLoader gpsDataLoader;
  50 +
  51 + @Autowired
  52 + DayOfSchedule dayOfSchedule;
  53 +
  54 + @Autowired
  55 + ForecastRealServer forecastRealServer;
  56 +
  57 + /**
  58 + * 构造函数
  59 + */
  60 + public GpsRealData() {
  61 + gpsMap = new HashMap<>();
  62 + lineCode2Devices = TreeMultimap.create();
  63 + url = ConfigUtil.get("http.gps.real.url");
  64 + }
  65 +
  66 + @Override
  67 + public void run(String... arg0) throws Exception {
  68 + logger.info("gpsDataLoader,20,5");
  69 + //Application.mainServices.scheduleWithFixedDelay(gpsDataLoader, 20, 6, TimeUnit.SECONDS);
  70 + }
  71 +
  72 + public void put(GpsEntity gps) {
  73 + String device = gps.getDeviceId();
  74 + gpsMap.put(device, gps);
  75 +
  76 + if (StringUtils.isNotBlank(gps.getLineId())){
  77 + //站点名称
  78 + gps.setStationName(getStationName(gps));
  79 + lineCode2Devices.put(gps.getLineId(), device);
  80 + }
  81 + }
  82 +
  83 + public String getStationName(GpsEntity gps){
  84 + return BasicData.stationCode2NameMap.get(gps.getLineId() + "_" + gps.getUpDown() + gps.getStopNo());
  85 + }
  86 +
  87 + /**
  88 + * @Title: get @Description: TODO(设备号获取GPS)
  89 + */
  90 + public GpsEntity get(String deviceId) {
  91 + return gpsMap.get(deviceId);
  92 + }
  93 +
  94 + /**
  95 + * @Title: get @Description: TODO(线路编码获取GPS集合) @throws
  96 + */
  97 + public List<GpsEntity> getByLine(String lineCode) {
  98 + NavigableSet<String> set = lineCode2Devices.get(lineCode);
  99 +
  100 + List<GpsEntity> rs = new ArrayList<>();
  101 + GpsEntity gps;
  102 + ScheduleRealInfo sch;
  103 + for (String device : set) {
  104 + gps = gpsMap.get(device);
  105 + //过滤异常GPS数据
  106 + if (gps.isAbnormal())
  107 + continue;
  108 +
  109 + sch = dayOfSchedule.execPlanMap().get(gps.getNbbm());
  110 + if (null != sch)
  111 + gps.setSchId(sch.getId());
  112 + rs.add(gps);
  113 + }
  114 +
  115 + return rs;
  116 + }
  117 +
  118 + public List<GpsEntity> get(List<String> pArray) {
  119 + List<GpsEntity> list = new ArrayList<>();
  120 +
  121 + for (String code : pArray)
  122 + list.addAll(getByLine(code));
  123 + return list;
  124 + }
  125 +
  126 + public Set<String> allDevices() {
  127 + return gpsMap.keySet();
  128 + }
  129 +
  130 + public GpsEntity findByDeviceId(String deviceId) {
  131 + return gpsMap.get(deviceId);
  132 + }
  133 +
  134 + public Collection<GpsEntity> all() {
  135 + return gpsMap.values();
  136 + }
  137 +
  138 + public void remove(String device) {
  139 + gpsMap.remove(device);
  140 + }
  141 +
  142 + @Component
  143 + public static class GpsDataLoader extends Thread {
  144 +
  145 + Logger logger = LoggerFactory.getLogger(GpsDataLoader.class);
  146 +
  147 + @Autowired
  148 + GpsRealData gpsRealData;
  149 +
  150 + @Autowired
  151 + GpsRealAnalyse gpsRealAnalyse;
  152 +
  153 + @Override
  154 + public void run() {
  155 + try {
  156 + //如果正在恢复数据
  157 + if (GpsDataRecovery.run)
  158 + return;
  159 +
  160 + load();
  161 + } catch (Exception e) {
  162 + logger.error("", e);
  163 + }
  164 + }
  165 +
  166 + public void load() throws Exception {
  167 + List<GpsEntity> list = null;
  168 + List<GpsEntity> updateList = new ArrayList<>();
  169 + CloseableHttpClient httpClient = null;
  170 + CloseableHttpResponse response = null;
  171 + try {
  172 + httpClient = HttpClients.createDefault();
  173 + HttpGet get = new HttpGet(url);
  174 +
  175 + response = httpClient.execute(get);
  176 +
  177 + HttpEntity entity = response.getEntity();
  178 + if (null != entity) {
  179 + BufferedReader br = new BufferedReader(new InputStreamReader(entity.getContent()));
  180 + StringBuffer stringBuffer = new StringBuffer();
  181 + String str = "";
  182 + while ((str = br.readLine()) != null)
  183 + stringBuffer.append(str);
  184 +
  185 + JSONObject jsonObj = JSON.parseObject(stringBuffer.toString());
  186 +
  187 + if (jsonObj != null)
  188 + list = JSON.parseArray(jsonObj.getString("data"), GpsEntity.class);
  189 +
  190 + String nbbm;
  191 + GpsEntity old;
  192 + for (GpsEntity gps : list) {
  193 + //没有设备号
  194 + if (StringUtils.isBlank(gps.getDeviceId()))
  195 + continue;
  196 +
  197 + old = gpsMap.get(gps.getDeviceId());
  198 + if (old != null &&
  199 + old.getTimestamp() == gps.getTimestamp())
  200 + continue;
  201 +
  202 + nbbm = BasicData.deviceId2NbbmMap.get(gps.getDeviceId());
  203 + if (StringUtils.isBlank(nbbm))
  204 + gps.setAbnormal(true);//标记为异常数据
  205 + else
  206 + gps.setNbbm(nbbm);
  207 + //有更新的点位
  208 + updateList.add(gps);
  209 + //实时GPS数据集
  210 + gpsRealData.put(gps);
  211 + }
  212 + //分析数据
  213 + gpsRealAnalyse.analyse(updateList);
  214 + } else
  215 + logger.error("real gps result is null");
  216 + } catch (Exception e) {
  217 + logger.error("", e);
  218 + } finally {
  219 + if (null != httpClient)
  220 + httpClient.close();
  221 + if (null != response)
  222 + response.close();
  223 + }
  224 + }
  225 + }
288 } 226 }
289 \ No newline at end of file 227 \ No newline at end of file
src/main/java/com/bsth/data/gpsdata/SignalStateData.java 0 → 100644
  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/analyse/GpsAnalyse.java deleted 100644 → 0
1 -package com.bsth.data.gpsdata.analyse;  
2 -  
3 -import com.bsth.data.gpsdata.GpsEntity;  
4 -import com.bsth.data.gpsdata.analyse.components.GpsArrival;  
5 -import org.slf4j.Logger;  
6 -import org.slf4j.LoggerFactory;  
7 -  
8 -import java.util.concurrent.ExecutorService;  
9 -import java.util.concurrent.Executors;  
10 -  
11 -/**  
12 - * 分析gps状态信息  
13 - * Created by panzhao on 2016/12/23.  
14 - */  
15 -public class GpsAnalyse {  
16 -  
17 - static Logger logger = LoggerFactory.getLogger(GpsAnalyse.class);  
18 -  
19 - //线程池  
20 - static ExecutorService threadPool = Executors.newFixedThreadPool(50);  
21 -  
22 - public static void start(GpsEntity gps) {  
23 - threadPool.execute(new ArrivalMatchThread(gps));  
24 - }  
25 -  
26 - public static class ArrivalMatchThread implements Runnable {  
27 -  
28 - private GpsEntity gps;  
29 -  
30 - public ArrivalMatchThread(GpsEntity gps) {  
31 - this.gps = gps;  
32 - }  
33 -  
34 - @Override  
35 - public void run() {  
36 - GpsArrival.arrival(gps);  
37 - }  
38 - }  
39 -}  
40 \ No newline at end of file 0 \ No newline at end of file
src/main/java/com/bsth/data/gpsdata/analyse/components/GpsArrival.java deleted 100644 → 0
1 -package com.bsth.data.gpsdata.analyse.components;  
2 -  
3 -import com.bsth.data.LineConfigData;  
4 -import com.bsth.data.gpsdata.GpsEntity;  
5 -import com.bsth.data.gpsdata.analyse.CircleQueue;  
6 -import com.bsth.data.gpsdata.analyse.GeoCacheData;  
7 -import com.bsth.data.gpsdata.analyse.StationRoute;  
8 -import com.bsth.data.gpsdata.analyse.util.GeoUtils;  
9 -import com.bsth.data.schedule.DayOfSchedule;  
10 -import com.bsth.entity.realcontrol.LineConfig;  
11 -import com.bsth.entity.realcontrol.ScheduleRealInfo;  
12 -import com.bsth.service.directive.DirectiveService;  
13 -import com.bsth.websocket.handler.SendUtils;  
14 -import org.slf4j.Logger;  
15 -import org.slf4j.LoggerFactory;  
16 -import org.springframework.beans.BeansException;  
17 -import org.springframework.context.ApplicationContext;  
18 -import org.springframework.context.ApplicationContextAware;  
19 -import org.springframework.stereotype.Component;  
20 -  
21 -import java.util.List;  
22 -  
23 -/**  
24 - * gps 到离站判断  
25 - * Created by panzhao on 2016/12/24.  
26 - */  
27 -@Component  
28 -public class GpsArrival implements ApplicationContextAware {  
29 -  
30 - static Logger logger = LoggerFactory.getLogger(GpsArrival.class);  
31 -  
32 - static DayOfSchedule dayOfSchedule;  
33 - static LineConfigData lineConfigData;  
34 - static SendUtils sendUtils;  
35 - static DirectiveService directiveService;  
36 -  
37 - public static void arrival(GpsEntity gps) {  
38 -  
39 - if (gps.getLat() == 0 || gps.getLon() == 0) {  
40 - //logger.error("无效的gps");  
41 - return;  
42 - }  
43 -  
44 - Object task = DayOfSchedule.executeCurr(gps.getNbbm());  
45 - if (task == null)  
46 - return;  
47 - if (task.getClass().isAssignableFrom(ScheduleRealInfo.class)) {  
48 - ScheduleRealInfo sch = (ScheduleRealInfo) task;  
49 - //和班次同步走向  
50 - gps.setUpDown(Integer.parseInt(sch.getXlDir()));  
51 -  
52 - //出场  
53 - if (sch.getBcType().equals("out")) {  
54 - outCarpark(gps, sch);  
55 - } else if (sch.getBcType().equals("normal"))  
56 - normalInOut(gps, sch);  
57 - else if (sch.getBcType().equals("in")) {  
58 - inCarpark(gps, sch);  
59 - }  
60 - }  
61 -  
62 - GeoCacheData.putGps(gps);  
63 - }  
64 -  
65 - /**  
66 - * 正常班次  
67 - *  
68 - * @param gps  
69 - * @param sch  
70 - */  
71 - private static void normalInOut(GpsEntity gps, ScheduleRealInfo sch) {  
72 - CircleQueue<GpsEntity> queue = GeoCacheData.getGps(gps.getNbbm());  
73 - GpsEntity prev = null;  
74 - if (queue != null)  
75 - prev = queue.getTail();  
76 -  
77 - List<StationRoute> srs = GeoCacheData.getStationRoute(sch.getXlBm(), gps.getUpDown());  
78 - StationRoute station = GeoUtils.gpsInStation(gps, srs);  
79 -  
80 - if (station != null) {  
81 - //站内  
82 - gps.setStopNo(station.getCode());  
83 - gps.setInstation(true);  
84 - stationInside(gps, prev, sch);  
85 - } else {  
86 - //站外  
87 - stationOutside(gps, prev, sch);  
88 - }  
89 - }  
90 -  
91 - /**  
92 - * GPS在站点内  
93 - *  
94 - * @param gps  
95 - * @param prev  
96 - * @param sch  
97 - */  
98 - private static void stationInside(GpsEntity gps, GpsEntity prev, ScheduleRealInfo sch) {  
99 - if (prev == null)  
100 - return;  
101 -  
102 - if (gps.getStopNo().equals(sch.getZdzCode()) && sch.getZdsjActual() == null) {  
103 - //到终点站  
104 - arriveEnd(sch, gps);  
105 - return;  
106 - }  
107 -  
108 - //上一个点在站外  
109 - if (!prev.isInstation())  
110 - return;  
111 - //超过 (待发时间 + 90%的单程运送时间) 并且超过下一个班次的待发时间,还在起点站。默认烂一圈  
112 - if (prev.getStopNo().equals(gps.getStopNo())) {  
113 - if (gps.getStopNo().equals(sch.getQdzCode())  
114 - && gps.getTimestamp() > sch.getDfsjT() + (sch.getBcsj() * 60 * 1000 * 0.9)) {  
115 -  
116 - ScheduleRealInfo next = dayOfSchedule.next(sch);  
117 - if(gps.getTimestamp() > next.getDfsjT())  
118 - dayOfSchedule.addExecPlan(dayOfSchedule.next(next));  
119 - }  
120 - return;  
121 - }  
122 -  
123 - //发车  
124 - if (prev.getStopNo().equals(sch.getQdzCode())) {  
125 - busWillDepart(sch, gps);  
126 - return;  
127 - }  
128 -  
129 - if (gps.getUpDown() != prev.getUpDown())  
130 - return;  
131 -  
132 - //中途站  
133 - StationRoute prevStation = GeoCacheData.getStation(prev.getLineId(), prev.getUpDown(), prev.getStopNo());  
134 - StationRoute currStation = GeoCacheData.getStation(gps.getLineId(), gps.getUpDown(), gps.getStopNo());  
135 - if (currStation.getRouteSort() < prevStation.getRouteSort()) {  
136 - //开始下一个班次  
137 - finishPlan(sch);  
138 -  
139 - logger.info("路由反向。。。。。。:" + gps.getTimestamp());  
140 - //为班次补上实际时间  
141 - }  
142 - }  
143 -  
144 - /**  
145 - * GPS在站点外  
146 - *  
147 - * @param gps  
148 - * @param prev  
149 - * @param sch  
150 - */  
151 - private static void stationOutside(GpsEntity gps, GpsEntity prev, ScheduleRealInfo sch) {  
152 - if (prev == null)  
153 - return;  
154 -  
155 - gps.setStopNo(prev.getStopNo());  
156 - if (prev.isInstation() && prev.getStopNo().equals(sch.getQdzCode())) {  
157 - //发车  
158 - busWillDepart(sch, gps);  
159 - return;  
160 - }  
161 - }  
162 -  
163 - /**  
164 - * 公交车起点发出  
165 - */  
166 - final static long DRIFT_VAL_TIME = 1000 * 60 * 10;  
167 - //班次最大差值2小时  
168 - final static long MAX_DIFF = 1000 * 60 * 60 * 2;  
169 -  
170 - private static void busWillDepart(ScheduleRealInfo sch, GpsEntity gps) {  
171 - //实发时间不覆盖  
172 - if (sch.getFcsjActual() == null && Math.abs(gps.getTimestamp() - sch.getDfsjT()) < MAX_DIFF) {  
173 -  
174 - //提前10分钟以上发出,判断一下是否是漂移  
175 - /*if (sch.getDfsjT() - gps.getTimestamp() > DRIFT_VAL_TIME) {  
176 - ScheduleRealInfo schPrev = dayOfSchedule.prev(sch);  
177 - if (schPrev != null && schPrev.getZdsjActual() != null) {  
178 - //计划停站时间  
179 - long stopTimeJH = sch.getDfsjT() - schPrev.getZdsjT();  
180 - //实际停站时间  
181 - long actualStopTime = gps.getTimestamp() - schPrev.getZdsjActualTime();  
182 - *//*  
183 - 没停够计划百分之30的,算漂移  
184 - (这里出现的误判,由程序在车辆到中途站的时候进行补偿)  
185 - *//*  
186 - if (stopTimeJH * 0.3 > actualStopTime) {  
187 - logger.info("漂移.... 车辆:" + gps.getNbbm() + " ts: " + gps.getTimestamp());  
188 - return;  
189 - }  
190 - }  
191 - }*/  
192 -  
193 - LineConfig config = lineConfigData.get(sch.getXlBm());  
194 - if (config != null && config.getOutConfig() == 2) {  
195 - //出站既出场  
196 - ScheduleRealInfo schPrev = dayOfSchedule.prev(sch);  
197 - if (schPrev.getBcType().equals("out")) {  
198 - schPrev.setFcsjActualAll(gps.getTimestamp());  
199 - schPrev.setZdsjActualAll(gps.getTimestamp());  
200 - }  
201 - }  
202 -  
203 - sch.setFcsjActualAll(gps.getTimestamp());  
204 - //通知客户端  
205 - sendUtils.sendFcsj(sch);  
206 - //持久化  
207 - dayOfSchedule.save(sch);  
208 - logger.info("(站外)班次:" + sch.getDfsj() + "发车, 时间:" + sch.getFcsjActual());  
209 - }  
210 - }  
211 -  
212 - /**  
213 - * 公交车到达终点  
214 - *  
215 - * @param sch  
216 - * @param gps  
217 - */  
218 - private static void arriveEnd(ScheduleRealInfo sch, GpsEntity gps) {  
219 - if(Math.abs(gps.getTimestamp() - sch.getZdsjT()) >= MAX_DIFF)  
220 - return;  
221 -  
222 - sch.setZdsjActualAll(gps.getTimestamp());  
223 - ScheduleRealInfo next = finishPlan(sch);  
224 - //已完成班次数  
225 - int doneSum = dayOfSchedule.doneSum(sch.getClZbh());  
226 - //通知客户端  
227 - sendUtils.sendZdsj(sch, next, doneSum);  
228 - //持久化  
229 - dayOfSchedule.save(sch);  
230 - logger.info("班次:" + sch.getDfsj() + "到达终点, 时间:" + sch.getZdsjActual());  
231 -  
232 - if (next == null)  
233 - return;  
234 -  
235 - LineConfig config = lineConfigData.get(sch.getXlBm());  
236 - //进站既进场  
237 - if (next.getBcType().equals("in") &&  
238 - config != null && config.getOutConfig() == 2) {  
239 - next.setFcsjActualAll(gps.getTimestamp());  
240 - next.setZdsjActualAll(gps.getTimestamp());  
241 -  
242 - finishPlan(next);  
243 - } else {  
244 - //下发调度指令  
245 - directiveService.send60Dispatch(next, doneSum, "到站@系统");  
246 -  
247 - //套跑 -下发线路切换指令  
248 - /* if (!next.getXlBm().equals(sch.getXlBm()))  
249 - directiveService.lineChange(sch.getClZbh(), next.getXlBm(), "套跑@系统");*/  
250 - }  
251 -  
252 - //将gps转换为下一个班次走向的站内信号  
253 - int updown = Integer.parseInt(next.getXlDir());  
254 - List<StationRoute> srs = GeoCacheData.getStationRoute(next.getXlBm(), updown);  
255 - StationRoute station = GeoUtils.gpsInStation(gps, srs);  
256 - if (station != null) {  
257 - gps.setUpDown(updown);  
258 - gps.setStopNo(station.getCode());  
259 - }  
260 - }  
261 -  
262 - /**  
263 - * 出场班次  
264 - *  
265 - * @param gps  
266 - * @param sch  
267 - */  
268 - private static void outCarpark(GpsEntity gps, ScheduleRealInfo sch) {  
269 - CircleQueue<GpsEntity> queue = GeoCacheData.getGps(gps.getNbbm());  
270 - GpsEntity prev = null;  
271 - if (queue != null)  
272 - prev = queue.getTail();  
273 -  
274 - //是否在停车场内  
275 - String carpark = GeoUtils.gpsInCarpark(gps);  
276 - if (carpark != null && carpark.equals(sch.getQdzCode())) {  
277 - gps.setInstation(true);  
278 - gps.setStopNo(carpark);  
279 - return; // 还在场内  
280 - }  
281 -  
282 - List<StationRoute> srs = GeoCacheData.getStationRoute(sch.getXlBm(), gps.getUpDown());  
283 - StationRoute station = GeoUtils.gpsInStation(gps, srs);  
284 - //线路上 站点内  
285 - if (station != null) {  
286 - gps.setInstation(true);  
287 - gps.setStopNo(station.getCode());  
288 -  
289 - //上一个点附带的站点站标记  
290 - if (prev != null && prev.getStopNo() != null  
291 - && prev.getStopNo().equals(sch.getZdzCode()))  
292 - return;  
293 -  
294 - //到达终点  
295 - if (station.getCode().equals(sch.getZdzCode()))  
296 - arriveEnd(sch, gps);  
297 - }  
298 -  
299 - //上一个点在场内  
300 - if (prev != null && prev.isInstation() && prev.getStopNo().equals(sch.getQdzCode())) {  
301 - //当前点在场外  
302 - if (carpark == null) {  
303 - gps.setStopNo(prev.getStopNo());  
304 - //停车场发出  
305 - busWillDepart(sch, gps);  
306 - return;  
307 - }  
308 - }  
309 - }  
310 -  
311 -  
312 - /**  
313 - * 进场班次  
314 - *  
315 - * @param gps  
316 - * @param sch  
317 - */  
318 - private static void inCarpark(GpsEntity gps, ScheduleRealInfo sch) {  
319 - String carpark = GeoUtils.gpsInCarpark(gps);  
320 - if (carpark != null && carpark.equals(sch.getZdzCode())) {  
321 - //进场班次取第一个实际进场时间  
322 - if (sch.getZdsjActual() != null)  
323 - return;  
324 -  
325 - //进场  
326 - arriveEnd(sch, gps);  
327 - return;  
328 - }  
329 -  
330 - CircleQueue<GpsEntity> queue = GeoCacheData.getGps(gps.getNbbm());  
331 - if (queue == null)  
332 - return;  
333 - //上一个gps  
334 - GpsEntity prev = queue.getTail();  
335 -  
336 - if (carpark == null && prev.isInstation() && prev.getStopNo().equals(sch.getQdzCode())) {  
337 - gps.setStopNo(prev.getStopNo());  
338 - //进场班次发出  
339 - busWillDepart(sch, gps);  
340 - return;  
341 - }  
342 - }  
343 -  
344 - /**  
345 - * 完成班次 -返回下一个班次  
346 - *  
347 - * @param sch  
348 - */  
349 - private static ScheduleRealInfo finishPlan(ScheduleRealInfo sch) {  
350 - ScheduleRealInfo next = dayOfSchedule.next(sch);  
351 - if (next != null) {  
352 - next.setQdzArrDatesj(sch.getZdsjActual());  
353 - dayOfSchedule.addExecPlan(next);  
354 - }  
355 - return next;  
356 - }  
357 -  
358 - @Override  
359 - public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {  
360 - dayOfSchedule = applicationContext.getBean(DayOfSchedule.class);  
361 - lineConfigData = applicationContext.getBean(LineConfigData.class);  
362 - sendUtils = applicationContext.getBean(SendUtils.class);  
363 - directiveService = applicationContext.getBean(DirectiveService.class);  
364 - }  
365 -}  
src/main/java/com/bsth/data/gpsdata/analyse/components/GpsStateCorrective.java deleted 100644 → 0
1 -package com.bsth.data.gpsdata.analyse.components;  
2 -  
3 -import com.bsth.data.gpsdata.GpsEntity;  
4 -import com.bsth.data.schedule.DayOfSchedule;  
5 -import com.bsth.entity.realcontrol.ScheduleRealInfo;  
6 -import com.vividsolutions.jts.geom.GeometryFactory;  
7 -import org.joda.time.format.DateTimeFormat;  
8 -import org.joda.time.format.DateTimeFormatter;  
9 -import org.slf4j.Logger;  
10 -import org.slf4j.LoggerFactory;  
11 -import org.springframework.beans.BeansException;  
12 -import org.springframework.context.ApplicationContext;  
13 -import org.springframework.context.ApplicationContextAware;  
14 -import org.springframework.stereotype.Component;  
15 -  
16 -/**  
17 - * GPS状态纠正  
18 - * Created by panzhao on 2016/12/23.  
19 - */  
20 -@Component  
21 -public class GpsStateCorrective implements ApplicationContextAware {  
22 -  
23 - static Logger logger = LoggerFactory.getLogger(GpsStateCorrective.class);  
24 -  
25 - static DayOfSchedule dayOfSchedule;  
26 -  
27 - private static GeometryFactory geometryFactory = new GeometryFactory();  
28 -  
29 - public static void correct(GpsEntity gps, ScheduleRealInfo sch){  
30 -/* int upDown = Integer.parseInt(sch.getXlDir());  
31 - gps.setUpDown(upDown);  
32 - List<StationRoute> srs = GeoCacheData.getStationRoute(sch.getXlBm(), upDown);  
33 -  
34 - Point point = geometryFactory.createPoint(new Coordinate(gps.getLat(), gps.getLon()));  
35 -  
36 - //之前的点位  
37 - CircleQueue<GpsEntity> queue = GeoCacheData.getGps(gps.getNbbm());  
38 - GpsEntity prev = null;  
39 - if(queue != null)  
40 - prev = queue.getTail();  
41 -  
42 - //线路上,站点间  
43 - StationRoute station = GeoUtils.pointInStation(point, srs);  
44 - //在站内  
45 - if(station != null){  
46 - gps.setStopNo(station.getCode());  
47 - gps.setInstation(true);  
48 - gps.setStation(station);  
49 -  
50 - if(prev != null && prev.getUpDown() == upDown){  
51 - StationRoute prevStation = GeoCacheData.getStation(prev.getLineId(), upDown, prev.getStopNo());  
52 -  
53 - //倒着开??  
54 - if(prevStation.getRouteSort() > station.getRouteSort()){  
55 - reversalHandle(gps, prev, sch);  
56 - }  
57 - }  
58 - }  
59 - else{  
60 - if(prev != null)  
61 - gps.setStopNo(prev.getStopNo());  
62 - }  
63 -  
64 - //是否在停车场内  
65 - Map<String, Polygon> carparkMap = GeoCacheData.tccMap;  
66 - Set<String> codes = carparkMap.keySet();  
67 - Polygon p;  
68 - for(String code : codes){  
69 - p = carparkMap.get(code);  
70 - //场内  
71 - if(p.contains(point)){  
72 - gps.setCarparkNo(code);  
73 - if(sch.getBcType().equals("out")){  
74 - gps.setInstation(true);  
75 - gps.setStopNo(code);  
76 - }  
77 - }  
78 - }*/  
79 - }  
80 -  
81 - private static DateTimeFormatter fmt = DateTimeFormat.forPattern("HH:mm");  
82 -  
83 - private static void reversalHandle(GpsEntity gps, GpsEntity prev, ScheduleRealInfo sch){  
84 - /*if(sch.getBcType().equals("out") && gps.getTimestamp() < sch.getZdsjT())  
85 - return;  
86 -  
87 - //先假设没到终点,直接开始了下一个班次  
88 - ScheduleRealInfo next = dayOfSchedule.next(sch);  
89 - String log = "倒着开??? nbbm: " + gps.getNbbm() + " 当前:" + gps.getStopNo() + " 上一站:" + prev.getStopNo() + " 当前班次:" + sch.getDfsj();  
90 - if(next != null){  
91 - dayOfSchedule.addExecPlan(next);  
92 -  
93 - log += (" 下一个班次:" + next.getDfsj());  
94 - }  
95 -  
96 - log += (" GPS时间:" + fmt.print(gps.getTimestamp()));  
97 -  
98 - logger.info(log);*/  
99 - }  
100 -  
101 - @Override  
102 - public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {  
103 - dayOfSchedule = applicationContext.getBean(DayOfSchedule.class);  
104 - }  
105 -}  
src/main/java/com/bsth/data/gpsdata/analyse/GeoCacheData.java renamed to src/main/java/com/bsth/data/gpsdata/arrival/GeoCacheData.java
1 -package com.bsth.data.gpsdata.analyse; 1 +package com.bsth.data.gpsdata.arrival;
2 2
3 import com.bsth.data.gpsdata.GpsEntity; 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;
4 import com.google.common.collect.ArrayListMultimap; 7 import com.google.common.collect.ArrayListMultimap;
5 import com.vividsolutions.jts.geom.Coordinate; 8 import com.vividsolutions.jts.geom.Coordinate;
6 import com.vividsolutions.jts.geom.GeometryFactory; 9 import com.vividsolutions.jts.geom.GeometryFactory;
@@ -26,8 +29,8 @@ public class GeoCacheData { @@ -26,8 +29,8 @@ public class GeoCacheData {
26 29
27 static Logger logger = LoggerFactory.getLogger(GeoCacheData.class); 30 static Logger logger = LoggerFactory.getLogger(GeoCacheData.class);
28 31
29 - //每辆车缓存最后200条gps  
30 - private static final int CACHE_SIZE = 200; 32 + //每辆车缓存最后1000条gps
  33 + private static final int CACHE_SIZE = 1000;
31 private static Map<String, CircleQueue<GpsEntity>> gpsCacheMap = new HashMap<>(); 34 private static Map<String, CircleQueue<GpsEntity>> gpsCacheMap = new HashMap<>();
32 35
33 //线路路段走向 36 //线路路段走向
@@ -36,6 +39,9 @@ public class GeoCacheData { @@ -36,6 +39,9 @@ public class GeoCacheData {
36 //线路站点路由 39 //线路站点路由
37 private static ArrayListMultimap<String, StationRoute> stationCacheMap; 40 private static ArrayListMultimap<String, StationRoute> stationCacheMap;
38 41
  42 + //线路_上下行_站点编码 ——> 站点
  43 + private static Map<String, StationRoute> routeCodeMap;
  44 +
39 //停车场 45 //停车场
40 public static Map<String, Polygon> tccMap; 46 public static Map<String, Polygon> tccMap;
41 47
@@ -49,9 +55,9 @@ public class GeoCacheData { @@ -49,9 +55,9 @@ public class GeoCacheData {
49 public static void putGps(GpsEntity gps) { 55 public static void putGps(GpsEntity gps) {
50 CircleQueue<GpsEntity> queue = gpsCacheMap.get(gps.getNbbm()); 56 CircleQueue<GpsEntity> queue = gpsCacheMap.get(gps.getNbbm());
51 if (queue == null) { 57 if (queue == null) {
52 - //第一个点从站内开始  
53 - if (!gps.isInstation())  
54 - return; 58 + /*//第一个点从站内开始
  59 + if (gps.getInstation() == 0)
  60 + return;*/
55 61
56 queue = new CircleQueue<>(CACHE_SIZE); 62 queue = new CircleQueue<>(CACHE_SIZE);
57 gpsCacheMap.put(gps.getNbbm(), queue); 63 gpsCacheMap.put(gps.getNbbm(), queue);
@@ -69,6 +75,10 @@ public class GeoCacheData { @@ -69,6 +75,10 @@ public class GeoCacheData {
69 } 75 }
70 } 76 }
71 77
  78 + public static StationRoute getRouteCode(GpsEntity gps) {
  79 + return routeCodeMap.get(gps.getLineId() + "_" + gps.getUpDown() + "_" + gps.getStopNo());
  80 + }
  81 +
72 public static List<StationRoute> getStationRoute(String lineCode, int directions) { 82 public static List<StationRoute> getStationRoute(String lineCode, int directions) {
73 return stationCacheMap.get(lineCode + "_" + directions); 83 return stationCacheMap.get(lineCode + "_" + directions);
74 } 84 }
@@ -84,6 +94,21 @@ public class GeoCacheData { @@ -84,6 +94,21 @@ public class GeoCacheData {
84 return null; 94 return null;
85 } 95 }
86 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 +
87 public static Polygon getTccPolygon(String code) { 112 public static Polygon getTccPolygon(String code) {
88 return tccMap.get(code); 113 return tccMap.get(code);
89 } 114 }
@@ -91,7 +116,7 @@ public class GeoCacheData { @@ -91,7 +116,7 @@ public class GeoCacheData {
91 public void loadData() { 116 public void loadData() {
92 final GeometryFactory geometryFactory = new GeometryFactory(); 117 final GeometryFactory geometryFactory = new GeometryFactory();
93 //加载站点路由 118 //加载站点路由
94 - 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 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"; 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";
95 List<StationRoute> routeList = jdbcTemplate.query(sql, new RowMapper<StationRoute>() { 120 List<StationRoute> routeList = jdbcTemplate.query(sql, new RowMapper<StationRoute>() {
96 @Override 121 @Override
97 public StationRoute mapRow(ResultSet rs, int rowNum) throws SQLException { 122 public StationRoute mapRow(ResultSet rs, int rowNum) throws SQLException {
@@ -103,6 +128,7 @@ public class GeoCacheData { @@ -103,6 +128,7 @@ public class GeoCacheData {
103 sRoute.setRadius(rs.getFloat("RADIUS")); 128 sRoute.setRadius(rs.getFloat("RADIUS"));
104 sRoute.setRouteSort(rs.getInt("STATION_ROUTE_CODE")); 129 sRoute.setRouteSort(rs.getInt("STATION_ROUTE_CODE"));
105 sRoute.setMark(rs.getString("STATION_MARK")); 130 sRoute.setMark(rs.getString("STATION_MARK"));
  131 + sRoute.setName(rs.getString("STATION_NAME"));
106 132
107 String shapesType = rs.getString("SHAPES_TYPE"); 133 String shapesType = rs.getString("SHAPES_TYPE");
108 //多边形电子围栏 134 //多边形电子围栏
@@ -115,8 +141,11 @@ public class GeoCacheData { @@ -115,8 +141,11 @@ public class GeoCacheData {
115 //按线路和走向分组 141 //按线路和走向分组
116 if (routeList.size() > 0) { 142 if (routeList.size() > 0) {
117 ArrayListMultimap<String, StationRoute> tempMap = ArrayListMultimap.create(); 143 ArrayListMultimap<String, StationRoute> tempMap = ArrayListMultimap.create();
  144 + Map<String, StationRoute> codeMap = new HashMap<>(routeList.size());
118 for (StationRoute sr : routeList) { 145 for (StationRoute sr : routeList) {
119 tempMap.put(sr.getLineCode() + "_" + sr.getDirections(), sr); 146 tempMap.put(sr.getLineCode() + "_" + sr.getDirections(), sr);
  147 + //站点编码 ——> 和路由顺序对照
  148 + codeMap.put(sr.getLineCode() + "_" + sr.getDirections() + "_" + sr.getCode(), sr);
120 } 149 }
121 150
122 StationRouteComp srCom = new StationRouteComp(); 151 StationRouteComp srCom = new StationRouteComp();
@@ -128,6 +157,7 @@ public class GeoCacheData { @@ -128,6 +157,7 @@ public class GeoCacheData {
128 } 157 }
129 158
130 stationCacheMap = tempMap; 159 stationCacheMap = tempMap;
  160 + routeCodeMap = codeMap;
131 } 161 }
132 162
133 //加载停车场数据 163 //加载停车场数据
@@ -176,4 +206,16 @@ public class GeoCacheData { @@ -176,4 +206,16 @@ public class GeoCacheData {
176 } 206 }
177 return cds; 207 return cds;
178 } 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 + }
179 } 221 }
180 \ No newline at end of file 222 \ No newline at end of file
src/main/java/com/bsth/data/gpsdata/arrival/GpsRealAnalyse.java 0 → 100644
  1 +package com.bsth.data.gpsdata.arrival;
  2 +
  3 +import com.bsth.data.gpsdata.GpsEntity;
  4 +import com.bsth.data.gpsdata.arrival.handlers.*;
  5 +import com.bsth.data.gpsdata.arrival.utils.CircleQueue;
  6 +import org.slf4j.Logger;
  7 +import org.slf4j.LoggerFactory;
  8 +import org.springframework.beans.factory.annotation.Autowired;
  9 +import org.springframework.stereotype.Component;
  10 +
  11 +import java.util.List;
  12 +import java.util.concurrent.CountDownLatch;
  13 +import java.util.concurrent.ExecutorService;
  14 +import java.util.concurrent.Executors;
  15 +
  16 +/**
  17 + * gps 实时数据分析
  18 + * Created by panzhao on 2016/12/27.
  19 + */
  20 +@Component
  21 +public class GpsRealAnalyse {
  22 +
  23 + Logger logger = LoggerFactory.getLogger(this.getClass());
  24 +
  25 + @Autowired
  26 + OfflineSignalHandle offlineSignalHandle;
  27 + @Autowired
  28 + CorrectSignalHandle correctSignalHandle;
  29 + @Autowired
  30 + StationInsideHandle stationInsideHandle;
  31 + @Autowired
  32 + InOutStationSignalHandle inOutStationSignalHandle;
  33 + @Autowired
  34 + ReverseSignalHandle reverseSignalHandle;
  35 +
  36 + //50个线程
  37 + static ExecutorService threadPool = Executors.newFixedThreadPool(50);
  38 +
  39 + public void analyse(List<GpsEntity> list) {
  40 + CountDownLatch count = new CountDownLatch(list.size());
  41 +
  42 + for(GpsEntity gps : list)
  43 + threadPool.execute(new SignalHandleThread(gps, count));
  44 +
  45 + try {
  46 + //等待子线程结束
  47 + count.await();
  48 + } catch (InterruptedException e) {
  49 + logger.error("", e);
  50 + }
  51 + }
  52 +
  53 + public class SignalHandleThread implements Runnable {
  54 +
  55 + GpsEntity gps;
  56 + CountDownLatch count;
  57 +
  58 + SignalHandleThread(GpsEntity gps, CountDownLatch count) {
  59 + this.gps = gps;
  60 + this.count = count;
  61 + }
  62 +
  63 + @Override
  64 + public void run() {
  65 +
  66 + try {
  67 + CircleQueue<GpsEntity> prevs = GeoCacheData.getGps(gps.getNbbm());
  68 + //掉线处理
  69 + offlineSignalHandle.handle(gps, prevs);
  70 + //状态处理
  71 + if(!correctSignalHandle.handle(gps, prevs))
  72 + return;
  73 + //场,站内外判断
  74 + stationInsideHandle.handle(gps, prevs);
  75 + //反向处理
  76 + reverseSignalHandle.handle(gps, prevs);
  77 + //进出站动作处理
  78 + inOutStationSignalHandle.handle(gps, prevs);
  79 + GeoCacheData.putGps(gps);
  80 +
  81 + } catch (Exception e) {
  82 + logger.error("", e);
  83 + } finally {
  84 + count.countDown();
  85 + }
  86 + }
  87 + }
  88 +}
src/main/java/com/bsth/data/gpsdata/arrival/SignalHandle.java 0 → 100644
  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 +}
0 \ No newline at end of file 90 \ No newline at end of file
src/main/java/com/bsth/data/gpsdata/arrival/entity/RouteReverse.java 0 → 100644
  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 +}
0 \ No newline at end of file 94 \ No newline at end of file
src/main/java/com/bsth/data/gpsdata/arrival/entity/SignalAbnormal.java 0 → 100644
  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 0 → 100644
  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/analyse/StationRoute.java renamed to src/main/java/com/bsth/data/gpsdata/arrival/entity/StationRoute.java
1 -package com.bsth.data.gpsdata.analyse; 1 +package com.bsth.data.gpsdata.arrival.entity;
2 2
3 import com.vividsolutions.jts.geom.Point; 3 import com.vividsolutions.jts.geom.Point;
4 import com.vividsolutions.jts.geom.Polygon; 4 import com.vividsolutions.jts.geom.Polygon;
@@ -58,6 +58,8 @@ public class StationRoute { @@ -58,6 +58,8 @@ public class StationRoute {
58 */ 58 */
59 private StationRoute prve; 59 private StationRoute prve;
60 60
  61 + private String name;
  62 +
61 public String getCode() { 63 public String getCode() {
62 return code; 64 return code;
63 } 65 }
@@ -137,5 +139,13 @@ public class StationRoute { @@ -137,5 +139,13 @@ public class StationRoute {
137 public void setMark(String mark) { 139 public void setMark(String mark) {
138 this.mark = mark; 140 this.mark = mark;
139 } 141 }
  142 +
  143 + public String getName() {
  144 + return name;
  145 + }
  146 +
  147 + public void setName(String name) {
  148 + this.name = name;
  149 + }
140 } 150 }
141 151
src/main/java/com/bsth/data/gpsdata/arrival/handlers/CorrectSignalHandle.java 0 → 100644
  1 +package com.bsth.data.gpsdata.arrival.handlers;
  2 +
  3 +import com.bsth.data.gpsdata.GpsEntity;
  4 +import com.bsth.data.gpsdata.arrival.SignalHandle;
  5 +import com.bsth.data.gpsdata.arrival.utils.CircleQueue;
  6 +import com.bsth.data.schedule.DayOfSchedule;
  7 +import com.bsth.entity.realcontrol.ChildTaskPlan;
  8 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  9 +import org.springframework.beans.factory.annotation.Autowired;
  10 +import org.springframework.stereotype.Component;
  11 +
  12 +/**
  13 + * 信号状态纠正
  14 + * Created by panzhao on 2016/12/27.
  15 + */
  16 +@Component
  17 +public class CorrectSignalHandle extends SignalHandle {
  18 +
  19 + @Autowired
  20 + DayOfSchedule dayOfSchedule;
  21 +
  22 + @Override
  23 + public boolean handle(GpsEntity gps, CircleQueue<GpsEntity> prevs) {
  24 + Object task = dayOfSchedule.executeCurr(gps.getNbbm());
  25 + if(task == null)
  26 + return false;
  27 + ScheduleRealInfo sch;
  28 +
  29 + //子任务
  30 + if(task.getClass().isAssignableFrom(ChildTaskPlan.class)){
  31 + ChildTaskPlan childTask = (ChildTaskPlan) task;
  32 + sch = childTask.getSchedule();
  33 + }
  34 + else
  35 + sch = (ScheduleRealInfo) task;
  36 +
  37 + int updown = Integer.parseInt(sch.getXlDir());
  38 + //走向
  39 + if(gps.getUpDown() != updown){
  40 + gps.setUpDown(updown);
  41 + gps.setState(0);
  42 + }
  43 +
  44 +
  45 + return true;
  46 + }
  47 +}
src/main/java/com/bsth/data/gpsdata/arrival/handlers/InOutStationSignalHandle.java 0 → 100644
  1 +package com.bsth.data.gpsdata.arrival.handlers;
  2 +
  3 +import com.bsth.data.LineConfigData;
  4 +import com.bsth.data.gpsdata.GpsEntity;
  5 +import com.bsth.data.gpsdata.arrival.SignalHandle;
  6 +import com.bsth.data.gpsdata.arrival.utils.CircleQueue;
  7 +import com.bsth.data.gpsdata.arrival.utils.ScheduleSignalState;
  8 +import com.bsth.data.gpsdata.arrival.utils.SignalSchPlanMatcher;
  9 +import com.bsth.data.schedule.DayOfSchedule;
  10 +import com.bsth.entity.realcontrol.LineConfig;
  11 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  12 +import com.bsth.service.directive.DirectiveService;
  13 +import com.bsth.websocket.handler.SendUtils;
  14 +import org.apache.commons.lang3.StringUtils;
  15 +import org.slf4j.Logger;
  16 +import org.slf4j.LoggerFactory;
  17 +import org.springframework.beans.factory.annotation.Autowired;
  18 +import org.springframework.stereotype.Component;
  19 +
  20 +/**
  21 + * 进出站动作处理
  22 + * Created by panzhao on 2016/12/27.
  23 + */
  24 +@Component
  25 +public class InOutStationSignalHandle extends SignalHandle{
  26 +
  27 + Logger logger = LoggerFactory.getLogger(this.getClass());
  28 +
  29 + @Autowired
  30 + DayOfSchedule dayOfSchedule;
  31 +
  32 + @Autowired
  33 + LineConfigData lineConfigData;
  34 +
  35 + @Autowired
  36 + SendUtils sendUtils;
  37 +
  38 + @Autowired
  39 + DirectiveService directiveService;
  40 +
  41 + @Autowired
  42 + ScheduleSignalState scheduleSignalState;
  43 +
  44 + @Autowired
  45 + SignalSchPlanMatcher signalSchPlanMatcher;
  46 +
  47 + private final static int MAX_BEFORE_TIME = 1000 * 60 * 72;
  48 +
  49 + @Override
  50 + public boolean handle(GpsEntity gps, CircleQueue<GpsEntity> prevs) {
  51 + //忽略漂移信号
  52 + if(isDriftSignal(gps))
  53 + return false;
  54 +
  55 + //从异常状态恢复的第一个信号
  56 + if(abnormalRecovery(gps, prevs)){
  57 + //回溯一下之前的轨迹
  58 + scheduleSignalState.signalRetrospect(gps);
  59 + }
  60 +
  61 + if(isNotEmpty(prevs)){
  62 + GpsEntity prev = prevs.getTail();
  63 + if(isOutStation(gps, prev))
  64 + outStation(gps, prev);
  65 +
  66 +
  67 + if(isInStation(gps, prev))
  68 + inStation(gps, prev);
  69 + }
  70 +
  71 + return true;
  72 + }
  73 +
  74 + private boolean isOutStation(GpsEntity gps, GpsEntity prev){
  75 + //从站内到站外
  76 + if(prev.getInstation() > 0 && gps.getInstation() == 0)
  77 + return true;
  78 +
  79 + //从站内到另一个站内
  80 + if(prev.getInstation() > 0 && gps.getInstation() > 0
  81 + && !prev.getStopNo().equals(gps.getStopNo()))
  82 + return true;
  83 + return false;
  84 + }
  85 +
  86 + private boolean isInStation(GpsEntity gps, GpsEntity prev){
  87 + //从站外到站内
  88 + if(prev.getInstation() == 0 && gps.getInstation() > 0
  89 + /*&& !prev.getStopNo().equals(gps.getStopNo())*/){
  90 + return true;
  91 + }
  92 +
  93 + //从站内到另一个站内
  94 + if(prev.getInstation() > 0 && gps.getInstation() > 0
  95 + && !prev.getStopNo().equals(gps.getStopNo()))
  96 + return true;
  97 + return false;
  98 + }
  99 +
  100 + /**
  101 + * 出站
  102 + * @param gps 当前点
  103 + * @param prev 上一个点
  104 + */
  105 + private void outStation(GpsEntity gps, GpsEntity prev) {
  106 + ScheduleRealInfo sch = dayOfSchedule.executeCurr(gps.getNbbm());
  107 + String qdzCode = sch.getQdzCode();
  108 +
  109 + //首班出场最多提前1.2小时
  110 + if(dayOfSchedule.isFirstOut(sch) && sch.getDfsjT() - gps.getTimestamp() > MAX_BEFORE_TIME)
  111 + return;
  112 +
  113 + //起点发车
  114 + if(qdzCode != null && prev.getStopNo().equals(qdzCode)
  115 + && !willDepart(gps, prev, sch)){
  116 +
  117 + //发车班次匹配
  118 + signalSchPlanMatcher.outMatch(gps, sch);
  119 + sch = dayOfSchedule.executeCurr(gps.getNbbm());
  120 +
  121 + //实发时间不覆盖
  122 + if(StringUtils.isNotEmpty(sch.getFcsjActual()))
  123 + return;
  124 +
  125 + //实发时间
  126 + sch.setFcsjActualAll(gps.getTimestamp());
  127 + //通知客户端
  128 + sendUtils.sendFcsj(sch);
  129 + //持久化
  130 + dayOfSchedule.save(sch);
  131 +
  132 + //出站既出场
  133 + outStationAndOutPark(sch);
  134 + logger.info("班次:" + sch.getDfsj() + "发车, 时间:" + sch.getFcsjActual());
  135 + }
  136 + else if(sch.getBcType().equals("out")){
  137 + ScheduleRealInfo next = dayOfSchedule.nextSame(sch);
  138 + if(prev.getStopNo().equals(next.getQdzCode())){
  139 + //发下一个班次
  140 + dayOfSchedule.addExecPlan(next);
  141 + outStation(gps, prev);
  142 + }
  143 + }
  144 + }
  145 +
  146 +
  147 + private void outStationAndOutPark(ScheduleRealInfo sch){
  148 + LineConfig config = lineConfigData.get(sch.getXlBm());
  149 + if (config != null && config.getOutConfig() == 2) {
  150 + //出站既出场
  151 + ScheduleRealInfo schPrev = dayOfSchedule.prev(sch);
  152 + if (schPrev != null && schPrev.getBcType().equals("out")) {
  153 + schPrev.setFcsjActualAll(sch.getFcsjActualTime());
  154 + schPrev.setZdsjActualAll(sch.getFcsjActualTime());
  155 +
  156 + sendUtils.refreshSch(schPrev);
  157 + }
  158 + }
  159 + }
  160 +
  161 + /**
  162 + * 进站
  163 + * @param gps 当前点
  164 + * @param prev 上一个点
  165 + */
  166 + private void inStation(GpsEntity gps, GpsEntity prev){
  167 + ScheduleRealInfo sch = dayOfSchedule.executeCurr(gps.getNbbm());
  168 +
  169 + if(gps.getStopNo().equals(sch.getZdzCode())){
  170 +
  171 + //实达时间不覆盖
  172 + if(StringUtils.isNotEmpty(sch.getZdsjActual()))
  173 + return;
  174 +
  175 + sch.setZdsjActualAll(gps.getTimestamp());
  176 + //已完成班次数
  177 + int doneSum = dayOfSchedule.doneSum(sch.getClZbh());
  178 + ScheduleRealInfo next = dayOfSchedule.next(sch);
  179 + //通知客户端
  180 + sendUtils.sendZdsj(sch, next, doneSum);
  181 + //持久化
  182 + dayOfSchedule.save(sch);
  183 + //下发调度指令
  184 + directiveService.send60Dispatch(next, doneSum, "到站@系统");
  185 +
  186 + //准备执行下一个班次
  187 + if (next != null) {
  188 + next.setQdzArrDatesj(sch.getZdsjActual());
  189 + dayOfSchedule.addExecPlan(next);
  190 + //进站既进场
  191 + inStationAndInPark(sch, next);
  192 + //将gps转换为下一个班次走向的站内信号
  193 + transformUpdown(gps, sch);
  194 + }
  195 + }
  196 + else if(sch.getFcsjActual() == null){
  197 + //有进站,但班次没有实发,向前追溯一下信号
  198 + scheduleSignalState.signalRetrospect(gps, sch);
  199 + }
  200 + }
  201 +
  202 + /**
  203 + * 进站既进场
  204 + * @param sch
  205 + */
  206 + private void inStationAndInPark(ScheduleRealInfo sch, ScheduleRealInfo next){
  207 + LineConfig config = lineConfigData.get(sch.getXlBm());
  208 + if (next.getBcType().equals("in") &&
  209 + config != null && config.getOutConfig() == 2) {
  210 + next.setFcsjActualAll(sch.getZdsjActualTime());
  211 + next.setZdsjActualAll(sch.getZdsjActualTime());
  212 +
  213 + sendUtils.refreshSch(next);
  214 + }
  215 + }
  216 +
  217 + /**
  218 + * 发车漂移判定(这里出现的误判,由车辆到达中途站的时候补偿)
  219 + * @param gps
  220 + * @param prev
  221 + * @param task
  222 + * @return
  223 + */
  224 + private boolean willDepart(GpsEntity gps, GpsEntity prev, Object task){
  225 +
  226 + /*ScheduleRealInfo sch = (ScheduleRealInfo) task;
  227 + ScheduleRealInfo prevTask = dayOfSchedule.prev(sch);
  228 + if(prevTask == null || prevTask.getBcType().equals("out"))
  229 + return false;
  230 +
  231 + //计划停站时间
  232 + int stopTimePlan = (int) (sch.getDfsjT() - prevTask.getZdsjT());
  233 +
  234 + if(stopTimePlan < 1000 * 60 * 10)
  235 + return false;
  236 +
  237 + //实际停站时间
  238 + if(prevTask.getZdsjActual() != null){
  239 + int actualTime = (int) (gps.getTimestamp() - prevTask.getZdsjActualTime());
  240 +
  241 + if(actualTime < stopTimePlan * 0.8){
  242 + logger.info("漂移判定");
  243 +
  244 + return true;
  245 + }
  246 + }*/
  247 + return false;
  248 + }
  249 +}
src/main/java/com/bsth/data/gpsdata/arrival/handlers/OfflineSignalHandle.java 0 → 100644
  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 +}
0 \ No newline at end of file 44 \ No newline at end of file
src/main/java/com/bsth/data/gpsdata/arrival/handlers/ReverseSignalHandle.java 0 → 100644
  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 +}
0 \ No newline at end of file 138 \ No newline at end of file
src/main/java/com/bsth/data/gpsdata/arrival/handlers/StationInsideHandle.java 0 → 100644
  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.StationRoute;
  7 +import com.bsth.data.gpsdata.arrival.utils.CircleQueue;
  8 +import com.bsth.data.gpsdata.arrival.utils.GeoUtils;
  9 +import org.springframework.stereotype.Component;
  10 +
  11 +import java.util.List;
  12 +
  13 +/**
  14 + * 站内站外判定
  15 + * Created by panzhao on 2016/12/27.
  16 + */
  17 +@Component
  18 +public class StationInsideHandle extends SignalHandle {
  19 +
  20 +
  21 + @Override
  22 + public boolean handle(GpsEntity gps, CircleQueue<GpsEntity> prevs) {
  23 + //是否在场内
  24 + String parkCode = GeoUtils.gpsInCarpark(gps);
  25 + if (parkCode != null) {
  26 + gps.setInstation(2);
  27 + gps.setStopNo(parkCode);
  28 + }
  29 +
  30 + //是否在站内
  31 + List<StationRoute> srs = GeoCacheData.getStationRoute(gps.getLineId(), gps.getUpDown());
  32 + StationRoute station = GeoUtils.gpsInStation(gps, srs);
  33 + if (station != null) {
  34 + gps.setInstation(1);
  35 + gps.setStopNo(station.getCode());
  36 + gps.setStation(station);
  37 + }
  38 +
  39 + //在场,站外
  40 + if(gps.getInstation() == 0 && isNotEmpty(prevs)){
  41 + //继承上一个点的站点编码
  42 + GpsEntity prev = prevs.getTail();
  43 + gps.setStopNo(prev.getStopNo());
  44 + }
  45 +
  46 + return true;
  47 + }
  48 +}
src/main/java/com/bsth/data/gpsdata/analyse/CircleQueue.java renamed to src/main/java/com/bsth/data/gpsdata/arrival/utils/CircleQueue.java
1 -package com.bsth.data.gpsdata.analyse; 1 +package com.bsth.data.gpsdata.arrival.utils;
2 2
3 import java.util.Arrays; 3 import java.util.Arrays;
4 4
@@ -19,12 +19,12 @@ public class CircleQueue&lt;T&gt; { @@ -19,12 +19,12 @@ public class CircleQueue&lt;T&gt; {
19 public Object[] elementData; 19 public Object[] elementData;
20 20
21 /** 21 /**
22 - * 队头(先进先出) 22 + *
23 */ 23 */
24 public int head = 0; 24 public int head = 0;
25 25
26 /** 26 /**
27 - * 27 + *
28 */ 28 */
29 public int tail = 0; 29 public int tail = 0;
30 30
@@ -39,7 +39,7 @@ public class CircleQueue&lt;T&gt; { @@ -39,7 +39,7 @@ public class CircleQueue&lt;T&gt; {
39 } 39 }
40 40
41 /** 41 /**
42 - * 获取循环队列的大小(包含元素的个数) 42 + * 获取循环队列的大小
43 */ 43 */
44 public int size() { 44 public int size() {
45 if (isEmpty()) { 45 if (isEmpty()) {
@@ -87,10 +87,12 @@ public class CircleQueue&lt;T&gt; { @@ -87,10 +87,12 @@ public class CircleQueue&lt;T&gt; {
87 * @return 取 循环队列里的值(先进的index=0) 87 * @return 取 循环队列里的值(先进的index=0)
88 */ 88 */
89 public Object[] getQueue() { 89 public Object[] getQueue() {
90 - final Object[] elementDataSort = new Object[capacity]; 90 + final Object[] elementDataSort;
91 final Object[] elementDataCopy = elementData.clone(); 91 final Object[] elementDataCopy = elementData.clone();
92 if (isEmpty()) { 92 if (isEmpty()) {
  93 + elementDataSort = new Object[0];
93 } else if (isFull()) { 94 } else if (isFull()) {
  95 + elementDataSort = new Object[capacity];
94 int indexMax = capacity; 96 int indexMax = capacity;
95 int indexSort = 0; 97 int indexSort = 0;
96 for (int i = head; i < indexMax;) { 98 for (int i = head; i < indexMax;) {
@@ -103,13 +105,18 @@ public class CircleQueue&lt;T&gt; { @@ -103,13 +105,18 @@ public class CircleQueue&lt;T&gt; {
103 } 105 }
104 } 106 }
105 } else { 107 } else {
106 - for (int i = 0; i < tail; i++) { 108 + elementDataSort = new Object[tail + 1];
  109 + for (int i = 0; i <= tail; i++) {
107 elementDataSort[i] = elementDataCopy[i]; 110 elementDataSort[i] = elementDataCopy[i];
108 } 111 }
109 } 112 }
110 return elementDataSort; 113 return elementDataSort;
111 } 114 }
112 115
  116 + /**
  117 + * 取最后一个值
  118 + * @return
  119 + */
113 public T getTail(){ 120 public T getTail(){
114 return elementData[tail] == null?null:(T)elementData[tail]; 121 return elementData[tail] == null?null:(T)elementData[tail];
115 } 122 }
src/main/java/com/bsth/data/gpsdata/analyse/util/GeoUtils.java renamed to src/main/java/com/bsth/data/gpsdata/arrival/utils/GeoUtils.java
1 -package com.bsth.data.gpsdata.analyse.util; 1 +package com.bsth.data.gpsdata.arrival.utils;
2 2
3 import com.bsth.data.gpsdata.GpsEntity; 3 import com.bsth.data.gpsdata.GpsEntity;
4 -import com.bsth.data.gpsdata.analyse.GeoCacheData;  
5 -import com.bsth.data.gpsdata.analyse.StationRoute; 4 +import com.bsth.data.gpsdata.arrival.GeoCacheData;
  5 +import com.bsth.data.gpsdata.arrival.entity.StationRoute;
6 import com.vividsolutions.jts.geom.Coordinate; 6 import com.vividsolutions.jts.geom.Coordinate;
7 import com.vividsolutions.jts.geom.GeometryFactory; 7 import com.vividsolutions.jts.geom.GeometryFactory;
8 import com.vividsolutions.jts.geom.Point; 8 import com.vividsolutions.jts.geom.Point;
src/main/java/com/bsth/data/gpsdata/arrival/utils/ScheduleSignalState.java 0 → 100644
  1 +package com.bsth.data.gpsdata.arrival.utils;
  2 +
  3 +import com.bsth.data.LineConfigData;
  4 +import com.bsth.data.gpsdata.GpsEntity;
  5 +import com.bsth.data.gpsdata.SignalStateData;
  6 +import com.bsth.data.gpsdata.arrival.GeoCacheData;
  7 +import com.bsth.data.gpsdata.arrival.entity.RouteReverse;
  8 +import com.bsth.data.gpsdata.arrival.entity.SignalAbnormal;
  9 +import com.bsth.data.gpsdata.arrival.entity.SignalState;
  10 +import com.bsth.data.schedule.DayOfSchedule;
  11 +import com.bsth.entity.realcontrol.LineConfig;
  12 +import com.bsth.entity.realcontrol.ScheduleRealInfo;
  13 +import org.slf4j.Logger;
  14 +import org.slf4j.LoggerFactory;
  15 +import org.springframework.beans.factory.annotation.Autowired;
  16 +import org.springframework.stereotype.Component;
  17 +
  18 +/**
  19 + * 班次信号状态分析
  20 + * Created by panzhao on 2016/12/29.
  21 + */
  22 +@Component
  23 +public class ScheduleSignalState {
  24 +
  25 + @Autowired
  26 + DayOfSchedule dayOfSchedule;
  27 +
  28 + Logger logger = LoggerFactory.getLogger(this.getClass());
  29 +
  30 + @Autowired
  31 + LineConfigData lineConfigData;
  32 +
  33 + @Autowired
  34 + SignalStateData signalStateData;
  35 +
  36 + /**
  37 + * 路由反向分析
  38 + */
  39 + public void reverseAnalyse(RouteReverse reverse) {
  40 + ScheduleRealInfo sch = dayOfSchedule.executeCurr(reverse.getNbbm());
  41 +
  42 + String bcType = sch.getBcType();
  43 +
  44 + switch (bcType) {
  45 + case "out":
  46 + outReverseAnalyse(sch, reverse);
  47 + break;
  48 + case "normal":
  49 + normalReverseAnalyse(sch, reverse);
  50 + break;
  51 + }
  52 + }
  53 +
  54 + /**
  55 + * 出场班次路由反向分析
  56 + *
  57 + * @param sch
  58 + */
  59 + private void outReverseAnalyse(ScheduleRealInfo sch, RouteReverse reverse) {
  60 + long t = reverse.getCt();
  61 + //出场班次终点时间前,允许反向轨迹
  62 + if (sch.getZdsjT() != null && sch.getZdsjT() > t) {
  63 + return;
  64 + }
  65 +
  66 + int rt;
  67 + //从实发 到 当前时间 < 计划运送时间 * 0.9
  68 + if (sch.getFcsjActual() != null && sch.getBcsj() != null) {
  69 + rt = (int) (t - sch.getFcsjActualTime());
  70 + if (rt < sch.getBcsj() * 0.9)
  71 + return;
  72 + }
  73 +
  74 + ScheduleRealInfo next = dayOfSchedule.next(sch);
  75 + if (next.getXlDir().equals(sch.getXlDir()))
  76 + return;
  77 +
  78 + //时间足够下一个班次待发时间运行到当前站
  79 + int runTime = reverse.getCount() * 1500 * 60;
  80 + if (next.getDfsjT() + runTime < t) {
  81 + //跳到下一个班次
  82 + dayOfSchedule.addExecPlan(next);
  83 + }
  84 + }
  85 +
  86 + /**
  87 + * 正常班次路由反向分析
  88 + *
  89 + * @param sch
  90 + * @param reverse
  91 + */
  92 + private void normalReverseAnalyse(ScheduleRealInfo sch, RouteReverse reverse) {
  93 + LineConfig conf = lineConfigData.get(sch.getXlBm());
  94 +
  95 + if (conf.isReadReverse()) {
  96 + //跳下一个班次
  97 + ScheduleRealInfo next = dayOfSchedule.next(sch);
  98 + if (next != null)
  99 + dayOfSchedule.addExecPlan(next);
  100 +
  101 + //记录信号状态
  102 + SignalState signalState = SignalState.reverseSignalSTate(sch, reverse);
  103 + signalStateData.put(signalState);
  104 + }
  105 + }
  106 +
  107 + public void signalRetrospect(GpsEntity gps) {
  108 + signalRetrospect(gps, dayOfSchedule.executeCurr(gps.getNbbm()));
  109 + }
  110 +
  111 + /**
  112 + * 信号追溯
  113 + *
  114 + * @param gps
  115 + * @param sch
  116 + */
  117 + public void signalRetrospect(GpsEntity gps, ScheduleRealInfo sch) {
  118 + //回放数据,是否有掉线或者漂移
  119 + CircleQueue<GpsEntity> queue = GeoCacheData.getGps(gps.getNbbm());
  120 + if (queue == null || queue.size() == 0 /*|| gps.getInstation() == 0*/)
  121 + return;
  122 +
  123 + //起始时间点
  124 + long st = 0;
  125 + ScheduleRealInfo prev = dayOfSchedule.prev(sch);
  126 +
  127 + if (prev != null) {
  128 + if (prev.getZdsjActual() != null)
  129 + st = prev.getZdsjActualTime();
  130 + else
  131 + st = (GeoCacheData.midwayStation(gps.getLineId(), gps.getUpDown(), sch.getQdzCode(), gps.getStopNo()).size() + 1) * (1000 * 60 * 5);
  132 + }
  133 +
  134 + Object[] tempArray = queue.getQueue();
  135 + int len = tempArray.length;
  136 +
  137 + Object[] array = new Object[len + 1];
  138 + System.arraycopy(tempArray, 0, array, 0, len);
  139 + array[len] = gps;
  140 +
  141 + String gpsState = "";
  142 + GpsEntity tempGps, nearGps = null;
  143 + int i = len - 1;
  144 + for (; i >= 0; i--) {
  145 + tempGps = (GpsEntity) array[i];
  146 +
  147 + gpsState = tempGps.getSignalState();
  148 + if (gpsState.equals("truncation"))
  149 + break;
  150 + else if (gpsState.equals("drift")) {
  151 + nearGps = (GpsEntity) array[i + 1];
  152 + break;
  153 + } else if (gpsState.equals("reconnection")) {
  154 + nearGps = tempGps;
  155 + break;
  156 + }
  157 +
  158 + if (tempGps.getTimestamp() < st)
  159 + break;
  160 + }
  161 +
  162 + if (nearGps != null && i > 0) {
  163 + createSignalAbnormal(gpsState, nearGps, i, array, sch);
  164 + }
  165 + }
  166 +
  167 + private void createSignalAbnormal(String gpsState, GpsEntity nearGps, int i, Object[] array, ScheduleRealInfo sch) {
  168 + switch (gpsState) {
  169 + case "drift":
  170 + driftSignalAbnormal(nearGps, i, array, sch);
  171 + break;
  172 + case "reconnection":
  173 + offlineSignalAbnormal(nearGps, ((GpsEntity) array[i - 1]), sch);
  174 + break;
  175 + }
  176 + }
  177 +
  178 + /**
  179 + * 掉线异常状态记录
  180 + *
  181 + * @param e
  182 + * @param s
  183 + */
  184 + private void offlineSignalAbnormal(GpsEntity e, GpsEntity s, ScheduleRealInfo sch) {
  185 + long st = s.getTimestamp(), et = e.getTimestamp();
  186 +
  187 + //掉线超过10分钟才记录
  188 + if (et - st < (1000 * 60 * 10))
  189 + return;
  190 +
  191 + SignalAbnormal signalAbnormal = new SignalAbnormal();
  192 + signalAbnormal.setSt(st);
  193 + signalAbnormal.setEt(et);
  194 + signalAbnormal.setAbnormalType("reconnection");
  195 + signalAbnormal.setDestCode(sch.getQdzCode());
  196 + signalAbnormal.setOutOrIn(0);
  197 +
  198 + //截断GPS
  199 + e.setSignalState("truncation");
  200 +
  201 + //记录信号状态
  202 + SignalState signalState = SignalState.abnormalSignalSTate(sch, signalAbnormal);
  203 + signalStateData.put(signalState);
  204 + }
  205 +
  206 + /**
  207 + * 漂移异常状态记录
  208 + *
  209 + * @param nearGps
  210 + * @param i
  211 + * @param array
  212 + */
  213 + private void driftSignalAbnormal(GpsEntity nearGps, int i, Object[] array, ScheduleRealInfo sch) {
  214 + GpsEntity gps, s = null;
  215 + //找到漂移开始时间
  216 + for (; i >= 0; i--) {
  217 + gps = (GpsEntity) array[i];
  218 +
  219 + if (!gps.getSignalState().equals("drift") || i == 0
  220 + || gps.getSignalState().equals("truncation")) {
  221 + s = gps;
  222 + break;
  223 + }
  224 + }
  225 +
  226 + long st = s.getTimestamp(), et = nearGps.getTimestamp();
  227 + if (et - st < (1000 * 60 * 3))
  228 + return;
  229 + /*if (s != null){
  230 + st = s.getTimestamp();
  231 + //漂移小于3分钟
  232 + if(et - st < (1000 * 60 * 3))
  233 + return;
  234 + }*/
  235 +
  236 +
  237 + SignalAbnormal signalAbnormal = new SignalAbnormal();
  238 + signalAbnormal.setSt(st);
  239 + signalAbnormal.setEt(et);
  240 + signalAbnormal.setAbnormalType("drift");
  241 + signalAbnormal.setDestCode(sch.getQdzCode());
  242 + signalAbnormal.setOutOrIn(0);
  243 +
  244 + //截断GPS
  245 + nearGps.setSignalState("truncation");
  246 +
  247 + //记录信号状态
  248 + SignalState signalState = SignalState.abnormalSignalSTate(sch, signalAbnormal);
  249 + signalStateData.put(signalState);
  250 + }
  251 +}
src/main/java/com/bsth/data/gpsdata/arrival/utils/SignalSchPlanMatcher.java 0 → 100644
  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/analyse/StationRouteComp.java renamed to src/main/java/com/bsth/data/gpsdata/arrival/utils/StationRouteComp.java
1 -package com.bsth.data.gpsdata.analyse; 1 +package com.bsth.data.gpsdata.arrival.utils;
  2 +
  3 +import com.bsth.data.gpsdata.arrival.entity.StationRoute;
2 4
3 import java.util.Comparator; 5 import java.util.Comparator;
4 6
src/main/java/com/bsth/data/gpsdata/recovery/GpsDataRecovery.java
@@ -2,13 +2,19 @@ package com.bsth.data.gpsdata.recovery; @@ -2,13 +2,19 @@ package com.bsth.data.gpsdata.recovery;
2 2
3 import com.bsth.data.BasicData; 3 import com.bsth.data.BasicData;
4 import com.bsth.data.gpsdata.GpsEntity; 4 import com.bsth.data.gpsdata.GpsEntity;
5 -import com.bsth.data.gpsdata.analyse.components.GpsArrival; 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;
6 import com.bsth.util.db.DBUtils_MS; 8 import com.bsth.util.db.DBUtils_MS;
7 import com.google.common.collect.ArrayListMultimap; 9 import com.google.common.collect.ArrayListMultimap;
8 import org.slf4j.Logger; 10 import org.slf4j.Logger;
9 import org.slf4j.LoggerFactory; 11 import org.slf4j.LoggerFactory;
  12 +import org.springframework.beans.BeansException;
  13 +import org.springframework.context.ApplicationContext;
  14 +import org.springframework.context.ApplicationContextAware;
10 import org.springframework.jdbc.core.JdbcTemplate; 15 import org.springframework.jdbc.core.JdbcTemplate;
11 import org.springframework.jdbc.core.RowMapper; 16 import org.springframework.jdbc.core.RowMapper;
  17 +import org.springframework.stereotype.Component;
12 18
13 import java.sql.ResultSet; 19 import java.sql.ResultSet;
14 import java.sql.SQLException; 20 import java.sql.SQLException;
@@ -18,42 +24,50 @@ import java.util.concurrent.ExecutorService; @@ -18,42 +24,50 @@ import java.util.concurrent.ExecutorService;
18 import java.util.concurrent.Executors; 24 import java.util.concurrent.Executors;
19 25
20 /** 26 /**
21 - * 数据恢复 27 + * gps数据恢复
22 * Created by panzhao on 2016/12/24. 28 * Created by panzhao on 2016/12/24.
23 */ 29 */
24 -public class GpsDataRecovery { 30 +@Component
  31 +public class GpsDataRecovery implements ApplicationContextAware {
25 32
26 static Logger logger = LoggerFactory.getLogger(GpsDataRecovery.class); 33 static Logger logger = LoggerFactory.getLogger(GpsDataRecovery.class);
27 34
28 public static boolean run; 35 public static boolean run;
29 36
30 - static ExecutorService threadPool = Executors.newFixedThreadPool(50); 37 + static ExecutorService threadPool = Executors.newFixedThreadPool(10);
31 38
32 - private static CountDownLatch count; 39 + static OfflineSignalHandle offlineSignalHandle;
  40 + static CorrectSignalHandle correctSignalHandle;
  41 + static StationInsideHandle stationInsideHandle;
  42 + static InOutStationSignalHandle inOutStationSignalHandle;
  43 + static ReverseSignalHandle reverseSignalHandle;
33 44
34 - public static void recovery() { 45 + public void recovery() {
35 List<GpsEntity> list = loadData(); 46 List<GpsEntity> list = loadData();
36 47
37 //按车辆分组数据 48 //按车辆分组数据
38 ArrayListMultimap<String, GpsEntity> listMap = ArrayListMultimap.create(); 49 ArrayListMultimap<String, GpsEntity> listMap = ArrayListMultimap.create();
39 for (GpsEntity gps : list) { 50 for (GpsEntity gps : list) {
40 - if(gps.getNbbm() != null) 51 + if (gps.getNbbm() != null)
41 listMap.put(gps.getNbbm(), gps); 52 listMap.put(gps.getNbbm(), gps);
42 } 53 }
43 54
44 - count = new CountDownLatch(listMap.keySet().size());  
45 55
46 Set<String> keys = listMap.keySet(); 56 Set<String> keys = listMap.keySet();
  57 +
  58 + CountDownLatch count = new CountDownLatch(keys.size());
  59 + GpsComp comp = new GpsComp();
47 for (String nbbm : keys) { 60 for (String nbbm : keys) {
48 - threadPool.execute(new RecoveryDataThread(listMap.get(nbbm), count));  
49 - /*if(nbbm.equals("W9H-003"))  
50 - new RecoveryDataThread(listMap.get(nbbm), count).run();*/ 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();*/
51 } 65 }
  66 +
52 try { 67 try {
53 - //等待子线程结束  
54 count.await(); 68 count.await();
55 - logger.info("GPS 数据恢复完成....");  
56 run = false; 69 run = false;
  70 + logger.info("数据恢复完成....");
57 } catch (InterruptedException e) { 71 } catch (InterruptedException e) {
58 logger.error("", e); 72 logger.error("", e);
59 } 73 }
@@ -64,7 +78,7 @@ public class GpsDataRecovery { @@ -64,7 +78,7 @@ public class GpsDataRecovery {
64 * 78 *
65 * @return 79 * @return
66 */ 80 */
67 - public static List<GpsEntity> loadData() { 81 + public List<GpsEntity> loadData() {
68 Calendar calendar = Calendar.getInstance(); 82 Calendar calendar = Calendar.getInstance();
69 int dayOfYear = calendar.get(Calendar.DAY_OF_YEAR); 83 int dayOfYear = calendar.get(Calendar.DAY_OF_YEAR);
70 84
@@ -103,12 +117,28 @@ public class GpsDataRecovery { @@ -103,12 +117,28 @@ public class GpsDataRecovery {
103 return (((serviceState & 0x10000000) == 0x10000000) ? 1 : 0); 117 return (((serviceState & 0x10000000) == 0x10000000) ? 1 : 0);
104 } 118 }
105 119
106 - public static class RecoveryDataThread implements Runnable { 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 + }
107 136
  137 + public static class RecoveryThread implements Runnable {
108 List<GpsEntity> list; 138 List<GpsEntity> list;
109 CountDownLatch count; 139 CountDownLatch count;
110 140
111 - public RecoveryDataThread(List<GpsEntity> list, CountDownLatch count) { 141 + RecoveryThread(List<GpsEntity> list, CountDownLatch count) {
112 this.list = list; 142 this.list = list;
113 this.count = count; 143 this.count = count;
114 } 144 }
@@ -116,19 +146,26 @@ public class GpsDataRecovery { @@ -116,19 +146,26 @@ public class GpsDataRecovery {
116 @Override 146 @Override
117 public void run() { 147 public void run() {
118 try { 148 try {
119 - //排序  
120 - Collections.sort(list, new GpsComp());  
121 - //依次跑完gps  
122 - //int i = 0;  
123 - for(GpsEntity gps : list){  
124 - /* i++;  
125 - if(i == 4527){  
126 - System.out.println("aaa");  
127 - }  
128 -  
129 - if(gps.getTimestamp() == 1482726071000L)  
130 - System.out.println("bbb");*/  
131 - GpsArrival.arrival(gps); 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);
132 } 169 }
133 } catch (Exception e) { 170 } catch (Exception e) {
134 logger.error("", e); 171 logger.error("", e);
@@ -137,12 +174,4 @@ public class GpsDataRecovery { @@ -137,12 +174,4 @@ public class GpsDataRecovery {
137 } 174 }
138 } 175 }
139 } 176 }
140 -  
141 - public static class GpsComp implements Comparator<GpsEntity>{  
142 -  
143 - @Override  
144 - public int compare(GpsEntity g1, GpsEntity g2) {  
145 - return (int) (g1.getTimestamp() - g2.getTimestamp());  
146 - }  
147 - }  
148 } 177 }
149 \ No newline at end of file 178 \ No newline at end of file
src/main/java/com/bsth/data/schedule/DayOfSchedule.java
@@ -2,8 +2,6 @@ package com.bsth.data.schedule; @@ -2,8 +2,6 @@ package com.bsth.data.schedule;
2 2
3 import com.alibaba.fastjson.JSON; 3 import com.alibaba.fastjson.JSON;
4 import com.alibaba.fastjson.JSONArray; 4 import com.alibaba.fastjson.JSONArray;
5 -import com.bsth.Application;  
6 -import com.bsth.data.BasicData;  
7 import com.bsth.data.LineConfigData; 5 import com.bsth.data.LineConfigData;
8 import com.bsth.data.directive.FirstScheduleCheckThread; 6 import com.bsth.data.directive.FirstScheduleCheckThread;
9 import com.bsth.data.gpsdata.GpsRealData; 7 import com.bsth.data.gpsdata.GpsRealData;
@@ -29,12 +27,12 @@ import org.slf4j.Logger; @@ -29,12 +27,12 @@ import org.slf4j.Logger;
29 import org.slf4j.LoggerFactory; 27 import org.slf4j.LoggerFactory;
30 import org.springframework.beans.factory.annotation.Autowired; 28 import org.springframework.beans.factory.annotation.Autowired;
31 import org.springframework.boot.CommandLineRunner; 29 import org.springframework.boot.CommandLineRunner;
  30 +import org.springframework.core.annotation.Order;
32 import org.springframework.stereotype.Component; 31 import org.springframework.stereotype.Component;
33 32
34 import java.text.ParseException; 33 import java.text.ParseException;
35 import java.text.SimpleDateFormat; 34 import java.text.SimpleDateFormat;
36 import java.util.*; 35 import java.util.*;
37 -import java.util.concurrent.TimeUnit;  
38 36
39 /** 37 /**
40 * @author PanZhao 38 * @author PanZhao
@@ -43,6 +41,7 @@ import java.util.concurrent.TimeUnit; @@ -43,6 +41,7 @@ import java.util.concurrent.TimeUnit;
43 * @date 2016年8月15日 上午10:16:12 41 * @date 2016年8月15日 上午10:16:12
44 */ 42 */
45 @Component 43 @Component
  44 +@Order(value = 3)
46 public class DayOfSchedule implements CommandLineRunner { 45 public class DayOfSchedule implements CommandLineRunner {
47 46
48 Logger logger = LoggerFactory.getLogger(this.getClass()); 47 Logger logger = LoggerFactory.getLogger(this.getClass());
@@ -117,25 +116,23 @@ public class DayOfSchedule implements CommandLineRunner { @@ -117,25 +116,23 @@ public class DayOfSchedule implements CommandLineRunner {
117 LineConfigData lineConfigs; 116 LineConfigData lineConfigs;
118 117
119 @Autowired 118 @Autowired
120 - BasicData.BasicDataLoader dataLoader; 119 + GpsDataRecovery gpsDataRecovery;
121 120
122 private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyy-MM-dd"), fmtHHmm = DateTimeFormat.forPattern("HH:mm"); 121 private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyy-MM-dd"), fmtHHmm = DateTimeFormat.forPattern("HH:mm");
123 122
124 @Override 123 @Override
125 public void run(String... arg0) throws Exception { 124 public void run(String... arg0) throws Exception {
126 - //加载基础数据  
127 - dataLoader.loadAllData();  
128 //从数据库恢复排班 125 //从数据库恢复排班
129 //dataRecovery(); 126 //dataRecovery();
130 127
131 //翻班线程 128 //翻班线程
132 - Application.mainServices.scheduleWithFixedDelay(scheduleRefreshThread, 15, 240, TimeUnit.SECONDS); 129 +// Application.mainServices.scheduleWithFixedDelay(scheduleRefreshThread, 15, 240, TimeUnit.SECONDS);
133 //入库 130 //入库
134 - Application.mainServices.scheduleWithFixedDelay(schedulePstThread, 60, 60, TimeUnit.SECONDS); 131 +// Application.mainServices.scheduleWithFixedDelay(schedulePstThread, 60, 60, TimeUnit.SECONDS);
135 //首班出场指令补发器 132 //首班出场指令补发器
136 // Application.mainServices.scheduleWithFixedDelay(firstScheduleCheckThread, 30, 240, TimeUnit.SECONDS); 133 // Application.mainServices.scheduleWithFixedDelay(firstScheduleCheckThread, 30, 240, TimeUnit.SECONDS);
137 //班次误点扫描 134 //班次误点扫描
138 - Application.mainServices.scheduleWithFixedDelay(scheduleLateThread, 60, 60, TimeUnit.SECONDS); 135 +// Application.mainServices.scheduleWithFixedDelay(scheduleLateThread, 60, 60, TimeUnit.SECONDS);
139 136
140 //每天凌晨2点20提交数据到运管处 137 //每天凌晨2点20提交数据到运管处
141 long diff = (DateUtils.getTimestamp() + 1000 * 60 * 140) - System.currentTimeMillis(); 138 long diff = (DateUtils.getTimestamp() + 1000 * 60 * 140) - System.currentTimeMillis();
@@ -160,7 +157,7 @@ public class DayOfSchedule implements CommandLineRunner { @@ -160,7 +157,7 @@ public class DayOfSchedule implements CommandLineRunner {
160 } 157 }
161 158
162 //恢复gps数据 159 //恢复gps数据
163 - GpsDataRecovery.recovery(); 160 + gpsDataRecovery.recovery();
164 } 161 }
165 162
166 public Map<String, String> getCurrSchDate() { 163 public Map<String, String> getCurrSchDate() {
@@ -221,15 +218,8 @@ public class DayOfSchedule implements CommandLineRunner { @@ -221,15 +218,8 @@ public class DayOfSchedule implements CommandLineRunner {
221 reCalcExecPlan(nbbm); 218 reCalcExecPlan(nbbm);
222 } 219 }
223 220
224 - //是否是出站即出场  
225 - LineConfig conf = lineConfigData.get(lineCode);  
226 - if (conf.getOutConfig() == 2) {  
227 - for (String nbbm : cars)  
228 - schAttrCalculator.connectOutSchedule(nbbmScheduleMap.get(nbbm));  
229 - }  
230 -  
231 // 页面 翻班通知 221 // 页面 翻班通知
232 - sendUtils.shiftSchedule(lineCode); 222 + //sendUtils.shiftSchedule(lineCode);
233 } catch (Exception e) { 223 } catch (Exception e) {
234 logger.error("", e); 224 logger.error("", e);
235 return -1; 225 return -1;
@@ -500,6 +490,41 @@ public class DayOfSchedule implements CommandLineRunner { @@ -500,6 +490,41 @@ public class DayOfSchedule implements CommandLineRunner {
500 } 490 }
501 491
502 /** 492 /**
  493 + * 下一个相同走向的班次
  494 + * @param sch
  495 + * @return
  496 + */
  497 + public ScheduleRealInfo nextSame(ScheduleRealInfo sch){
  498 + List<ScheduleRealInfo> list = nbbmScheduleMap.get(sch.getClZbh());
  499 + int outConfig = -1;
  500 + LineConfig config = lineConfigData.get(sch.getXlBm());
  501 + if (config != null)
  502 + outConfig = config.getOutConfig();
  503 +
  504 + boolean flag = false;
  505 + ScheduleRealInfo next = null;
  506 + for (ScheduleRealInfo temp : list) {
  507 + if (temp.getId() == sch.getId()) {
  508 + flag = true;
  509 + continue;
  510 + }
  511 + //忽略烂班
  512 + if (temp.isDestroy())
  513 + continue;
  514 +
  515 + //出站既出场,忽略出场班次
  516 + if (outConfig == 2 && temp.getBcType().equals("out"))
  517 + continue;
  518 +
  519 + if (flag && temp.getXlDir().equals(sch.getXlDir())) {
  520 + next = temp;
  521 + break;
  522 + }
  523 + }
  524 + return next;
  525 + }
  526 +
  527 + /**
503 * 上一个班次 528 * 上一个班次
504 * 529 *
505 * @param sch 530 * @param sch
@@ -524,6 +549,18 @@ public class DayOfSchedule implements CommandLineRunner { @@ -524,6 +549,18 @@ public class DayOfSchedule implements CommandLineRunner {
524 return prev; 549 return prev;
525 } 550 }
526 551
  552 + /**
  553 + * 是否是首班出场
  554 + * @param sch
  555 + * @return
  556 + */
  557 + public boolean isFirstOut(ScheduleRealInfo sch){
  558 + List<ScheduleRealInfo> list = nbbmScheduleMap.get(sch.getClZbh());
  559 + if(list.get(0).equals(sch) && sch.getBcType().equals("out"))
  560 + return true;
  561 + return false;
  562 + }
  563 +
527 public void put(ScheduleRealInfo sch) { 564 public void put(ScheduleRealInfo sch) {
528 schAttrCalculator 565 schAttrCalculator
529 .calcRealDate(sch) 566 .calcRealDate(sch)
@@ -706,7 +743,8 @@ public class DayOfSchedule implements CommandLineRunner { @@ -706,7 +743,8 @@ public class DayOfSchedule implements CommandLineRunner {
706 } 743 }
707 744
708 public void addExecPlan(ScheduleRealInfo sch) { 745 public void addExecPlan(ScheduleRealInfo sch) {
709 - carExecutePlanMap.put(sch.getClZbh(), sch); 746 + if(sch != null)
  747 + carExecutePlanMap.put(sch.getClZbh(), sch);
710 } 748 }
711 749
712 public void removeExecPlan(String clzbh) { 750 public void removeExecPlan(String clzbh) {
@@ -723,7 +761,7 @@ public class DayOfSchedule implements CommandLineRunner { @@ -723,7 +761,7 @@ public class DayOfSchedule implements CommandLineRunner {
723 * @param nbbm 761 * @param nbbm
724 * @return 762 * @return
725 */ 763 */
726 - public static ScheduleRealInfo executeCurr(String nbbm) { 764 + public ScheduleRealInfo executeCurr(String nbbm) {
727 return carExecutePlanMap.get(nbbm); 765 return carExecutePlanMap.get(nbbm);
728 } 766 }
729 767
@@ -763,6 +801,41 @@ public class DayOfSchedule implements CommandLineRunner { @@ -763,6 +801,41 @@ public class DayOfSchedule implements CommandLineRunner {
763 } 801 }
764 802
765 /** 803 /**
  804 + * 是否在执行首班出场
  805 + * @param nbbm
  806 + * @return
  807 + */
  808 + public boolean isExecFirstOut(String nbbm, long time){
  809 + try {
  810 + List<ScheduleRealInfo> list = nbbmScheduleMap.get(nbbm);
  811 + ScheduleRealInfo second = list.get(2),
  812 + first = executeCurr(nbbm);
  813 +
  814 + if(first.getBcType().equals("out")
  815 + && first.getDfsjT() < second.getDfsjT()
  816 + && doneSum(nbbm) == 0 && second.getDfsjT() > time)
  817 + return true;
  818 + } catch (Exception e) {
  819 + logger.error("", e);
  820 + }
  821 +
  822 + return false;
  823 + }
  824 +
  825 + /**
  826 + * 获取班次的计划停站时间
  827 + * @param sch
  828 + * @return
  829 +
  830 + public int stopTimePlan(Object task) {
  831 +
  832 + ScheduleRealInfo sch = prev((ScheduleRealInfo) task);
  833 +
  834 + sch.getzdsj
  835 + return -1;
  836 + }*/
  837 +
  838 + /**
766 * 839 *
767 * @Title: linkToSchPlan 840 * @Title: linkToSchPlan
768 * @Description: TODO(车辆关联到班次) 841 * @Description: TODO(车辆关联到班次)
src/main/java/com/bsth/data/schedule/SchAttrCalculator.java
@@ -62,13 +62,13 @@ public class SchAttrCalculator { @@ -62,13 +62,13 @@ public class SchAttrCalculator {
62 sch.setDfsjAll(fmtyyyyMMddHHmm.parseMillis(sch.getScheduleDateStr()+sch.getDfsj())); 62 sch.setDfsjAll(fmtyyyyMMddHHmm.parseMillis(sch.getScheduleDateStr()+sch.getDfsj()));
63 63
64 //實發時間 64 //實發時間
65 - if(sch.getFcsjActual() != null && 65 + if(StringUtils.isNotEmpty(sch.getFcsjActual()) &&
66 sch.getFcsjActual().compareTo(conf.getStartOpt()) < 0){ 66 sch.getFcsjActual().compareTo(conf.getStartOpt()) < 0){
67 sch.setFcsjActualAll(fmtyyyyMMddHHmm.parseMillis(sch.getScheduleDateStr()+sch.getFcsjActual()) + DAY_TIME); 67 sch.setFcsjActualAll(fmtyyyyMMddHHmm.parseMillis(sch.getScheduleDateStr()+sch.getFcsjActual()) + DAY_TIME);
68 } 68 }
69 69
70 //實際終點時間 70 //實際終點時間
71 - if(sch.getZdsjActual() != null && 71 + if(StringUtils.isNotEmpty(sch.getZdsjActual()) &&
72 sch.getZdsjActual().compareTo(conf.getStartOpt()) < 0){ 72 sch.getZdsjActual().compareTo(conf.getStartOpt()) < 0){
73 sch.setZdsjActualAll(fmtyyyyMMddHHmm.parseMillis(sch.getScheduleDateStr()+sch.getZdsjActual()) + DAY_TIME); 73 sch.setZdsjActualAll(fmtyyyyMMddHHmm.parseMillis(sch.getScheduleDateStr()+sch.getZdsjActual()) + DAY_TIME);
74 } 74 }
@@ -162,34 +162,6 @@ public class SchAttrCalculator { @@ -162,34 +162,6 @@ public class SchAttrCalculator {
162 162
163 return updateList; 163 return updateList;
164 } 164 }
165 -  
166 - /**  
167 - *  
168 - * @Title: connectOutSchedule  
169 - * @Description: TODO(关联出场班次)  
170 - */  
171 - public void connectOutSchedule(List<ScheduleRealInfo> list){  
172 - Collections.sort(list, new ScheduleComparator.FCSJ());  
173 -  
174 - int len = list.size();  
175 - if(len == 0)  
176 - return;  
177 -  
178 - ScheduleRealInfo prve = list.get(0), curr;  
179 - for(int i = 1; i < len; i ++){  
180 - curr = list.get(i);  
181 -  
182 - //出站即出场关联  
183 - if(prve.getBcType().equals("out") && prve.getJhlc() == null)  
184 - curr.setTwinsSch(prve);  
185 -  
186 - //进站即进场关联  
187 - if(curr.getBcType().equals("in") && curr.getJhlc() == null)  
188 - prve.setTwinsSch(curr);  
189 -  
190 - prve = curr;  
191 - }  
192 - }  
193 165
194 public SchAttrCalculator calcFcsjTime(ScheduleRealInfo sch) throws ParseException { 166 public SchAttrCalculator calcFcsjTime(ScheduleRealInfo sch) throws ParseException {
195 sch.setFcsjT(fmtyyyyMMddHHmm.parseMillis(sch.getRealExecDate() + sch.getFcsj())); 167 sch.setFcsjT(fmtyyyyMMddHHmm.parseMillis(sch.getRealExecDate() + sch.getFcsj()));
src/main/java/com/bsth/entity/Cars.java
@@ -23,7 +23,7 @@ import java.util.Date; @@ -23,7 +23,7 @@ import java.util.Date;
23 23
24 @Entity 24 @Entity
25 @Table(name = "bsth_c_cars") 25 @Table(name = "bsth_c_cars")
26 -@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"}) 26 +@JsonIgnoreProperties(value={"hibernateLazyInitializer","handlers","fieldHandler"})
27 public class Cars extends BEntity implements Serializable { 27 public class Cars extends BEntity implements Serializable {
28 28
29 /** 主键Id */ 29 /** 主键Id */
src/main/java/com/bsth/entity/Line.java
@@ -24,7 +24,7 @@ import java.util.Date; @@ -24,7 +24,7 @@ import java.util.Date;
24 24
25 @Entity 25 @Entity
26 @Table(name = "bsth_c_line") 26 @Table(name = "bsth_c_line")
27 -@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"}) 27 +@JsonIgnoreProperties(value={"hibernateLazyInitializer","handlers","fieldHandler"})
28 public class Line implements Serializable { 28 public class Line implements Serializable {
29 29
30 @Id 30 @Id
src/main/java/com/bsth/entity/Personnel.java
@@ -21,7 +21,7 @@ import javax.persistence.*; @@ -21,7 +21,7 @@ import javax.persistence.*;
21 21
22 @Entity 22 @Entity
23 @Table(name = "bsth_c_personnel") 23 @Table(name = "bsth_c_personnel")
24 -@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"}) 24 +@JsonIgnoreProperties(value={"hibernateLazyInitializer","handlers","fieldHandler"})
25 public class Personnel extends BEntity { 25 public class Personnel extends BEntity {
26 26
27 /** 主键Id */ 27 /** 主键Id */
src/main/java/com/bsth/entity/mcy_forms/Daily.java 0 → 100644
  1 +package com.bsth.entity.mcy_forms;
  2 +
  3 +public class Daily {
  4 +
  5 + private String rq;//日期
  6 +
  7 + public String getRq() {
  8 + return rq;
  9 + }
  10 +
  11 + public void setRq(String rq) {
  12 + this.rq = rq;
  13 + }
  14 +
  15 + private String zbh;//车牌号
  16 +
  17 + private String jgh;//员工号
  18 +
  19 + private String jName;//驾驶员
  20 +
  21 + private String zlc;//里程
  22 +
  23 + private String jzl1;//空驶公里
  24 +
  25 + private String yh;//油耗
  26 +
  27 + private String bc;//班次
  28 +
  29 + public String getZbh() {
  30 + return zbh;
  31 + }
  32 +
  33 + public void setZbh(String zbh) {
  34 + this.zbh = zbh;
  35 + }
  36 +
  37 + public String getJgh() {
  38 + return jgh;
  39 + }
  40 +
  41 + public void setJgh(String jgh) {
  42 + this.jgh = jgh;
  43 + }
  44 +
  45 + public String getjName() {
  46 + return jName;
  47 + }
  48 +
  49 + public void setjName(String jName) {
  50 + this.jName = jName;
  51 + }
  52 +
  53 + public String getZlc() {
  54 + return zlc;
  55 + }
  56 +
  57 + public void setZlc(String zlc) {
  58 + this.zlc = zlc;
  59 + }
  60 +
  61 + public String getJzl1() {
  62 + return jzl1;
  63 + }
  64 +
  65 + public void setJzl1(String jzl1) {
  66 + this.jzl1 = jzl1;
  67 + }
  68 +
  69 + public String getYh() {
  70 + return yh;
  71 + }
  72 +
  73 + public void setYh(String yh) {
  74 + this.yh = yh;
  75 + }
  76 +
  77 + public String getBc() {
  78 + return bc;
  79 + }
  80 +
  81 + public void setBc(String bc) {
  82 + this.bc = bc;
  83 + }
  84 +
  85 +
  86 +
  87 +
  88 +
  89 +}
src/main/java/com/bsth/entity/realcontrol/LineConfig.java
@@ -53,6 +53,9 @@ public class LineConfig { @@ -53,6 +53,9 @@ public class LineConfig {
53 /** 调度指令模板 */ 53 /** 调度指令模板 */
54 private String schDirectiveTemp; 54 private String schDirectiveTemp;
55 55
  56 + /** 识别区间调头 */
  57 + private boolean readReverse;
  58 +
56 @OneToMany(cascade = CascadeType.ALL) 59 @OneToMany(cascade = CascadeType.ALL)
57 private Set<D80ReplyTemp> d80Temps = new HashSet<>(); 60 private Set<D80ReplyTemp> d80Temps = new HashSet<>();
58 61
@@ -140,4 +143,12 @@ public class LineConfig { @@ -140,4 +143,12 @@ public class LineConfig {
140 public void setD80Temps(Set<D80ReplyTemp> d80Temps) { 143 public void setD80Temps(Set<D80ReplyTemp> d80Temps) {
141 this.d80Temps = d80Temps; 144 this.d80Temps = d80Temps;
142 } 145 }
  146 +
  147 + public boolean isReadReverse() {
  148 + return readReverse;
  149 + }
  150 +
  151 + public void setReadReverse(boolean readReverse) {
  152 + this.readReverse = readReverse;
  153 + }
143 } 154 }
src/main/java/com/bsth/entity/realcontrol/ScheduleRealInfo.java
@@ -94,11 +94,6 @@ public class ScheduleRealInfo { @@ -94,11 +94,6 @@ public class ScheduleRealInfo {
94 * 班次类型 TODO:正常班次、出场、进场、加油、区间班次、放空班次、放大站班次、两点间空驶 94 * 班次类型 TODO:正常班次、出场、进场、加油、区间班次、放空班次、放大站班次、两点间空驶
95 */ 95 */
96 private String bcType; 96 private String bcType;
97 -  
98 - /** 出站即出场 , 关联的进出场班次 */  
99 - @JsonIgnore  
100 - @Transient  
101 - private ScheduleRealInfo twinsSch;  
102 97
103 /** 创建人 */ 98 /** 创建人 */
104 @JsonIgnore 99 @JsonIgnore
@@ -258,21 +253,6 @@ public class ScheduleRealInfo { @@ -258,21 +253,6 @@ public class ScheduleRealInfo {
258 this.ccno = ccno; 253 this.ccno = ccno;
259 } 254 }
260 255
261 - public static DateTimeFormatter getFmtHHmm() {  
262 - return fmtHHmm;  
263 - }  
264 -  
265 - public static void setFmtHHmm(DateTimeFormatter fmtHHmm) {  
266 - ScheduleRealInfo.fmtHHmm = fmtHHmm;  
267 - }  
268 -  
269 - public static DateTimeFormatter getFmtyyyyMMddHHmm() {  
270 - return fmtyyyyMMddHHmm;  
271 - }  
272 -  
273 - public static void setFmtyyyyMMddHHmm(DateTimeFormatter fmtyyyyMMddHHmm) {  
274 - ScheduleRealInfo.fmtyyyyMMddHHmm = fmtyyyyMMddHHmm;  
275 - }  
276 256
277 /** ---------------- 257 /** ----------------
278 @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) 258 @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@@ -804,13 +784,13 @@ public class ScheduleRealInfo { @@ -804,13 +784,13 @@ public class ScheduleRealInfo {
804 this.opDirectiveState = opDirectiveState; 784 this.opDirectiveState = opDirectiveState;
805 } 785 }
806 786
807 - public ScheduleRealInfo getTwinsSch() { 787 +/* public ScheduleRealInfo getTwinsSch() {
808 return twinsSch; 788 return twinsSch;
809 } 789 }
810 790
811 public void setTwinsSch(ScheduleRealInfo twinsSch) { 791 public void setTwinsSch(ScheduleRealInfo twinsSch) {
812 this.twinsSch = twinsSch; 792 this.twinsSch = twinsSch;
813 - } 793 + }*/
814 794
815 public boolean isLate() { 795 public boolean isLate() {
816 return late; 796 return late;
src/main/java/com/bsth/entity/schedule/CarConfigInfo.java
@@ -19,7 +19,7 @@ import java.util.Date; @@ -19,7 +19,7 @@ import java.util.Date;
19 @NamedAttributeNode("cl") 19 @NamedAttributeNode("cl")
20 }) 20 })
21 }) 21 })
22 -@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"}) 22 +@JsonIgnoreProperties(value={"hibernateLazyInitializer","handlers","fieldHandler"})
23 public class CarConfigInfo extends BEntity implements Serializable { 23 public class CarConfigInfo extends BEntity implements Serializable {
24 24
25 /** 主健Id */ 25 /** 主健Id */
src/main/java/com/bsth/entity/schedule/EmployeeConfigInfo.java
@@ -22,7 +22,7 @@ import java.io.Serializable; @@ -22,7 +22,7 @@ import java.io.Serializable;
22 @NamedAttributeNode("xl") 22 @NamedAttributeNode("xl")
23 }) 23 })
24 }) 24 })
25 -@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"}) 25 +@JsonIgnoreProperties(value={"hibernateLazyInitializer","handlers","fieldHandler"})
26 public class EmployeeConfigInfo extends BEntity implements Serializable { 26 public class EmployeeConfigInfo extends BEntity implements Serializable {
27 27
28 /** 主键Id */ 28 /** 主键Id */
src/main/java/com/bsth/entity/schedule/GuideboardInfo.java
@@ -15,7 +15,7 @@ import javax.persistence.*; @@ -15,7 +15,7 @@ import javax.persistence.*;
15 @NamedAttributeNode("xl") 15 @NamedAttributeNode("xl")
16 }) 16 })
17 }) 17 })
18 -@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"}) 18 +@JsonIgnoreProperties(value={"hibernateLazyInitializer","handlers","fieldHandler"})
19 public class GuideboardInfo extends BEntity { 19 public class GuideboardInfo extends BEntity {
20 20
21 /** 主键Id */ 21 /** 主键Id */
src/main/java/com/bsth/entity/sys/SysUser.java
@@ -9,7 +9,7 @@ import java.util.Set; @@ -9,7 +9,7 @@ import java.util.Set;
9 9
10 @Entity 10 @Entity
11 @Table(name = "bsth_c_sys_user") 11 @Table(name = "bsth_c_sys_user")
12 -@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"}) 12 +@JsonIgnoreProperties(value={"hibernateLazyInitializer","handlers","fieldHandler"})
13 public class SysUser { 13 public class SysUser {
14 14
15 @Id 15 @Id
src/main/java/com/bsth/repository/realcontrol/ScheduleRealInfoRepository.java
@@ -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') 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) 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)
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 -} 128 +}
129 \ No newline at end of file 129 \ No newline at end of file
src/main/java/com/bsth/service/excep/impl/OfflineServiceImpl.java
@@ -46,23 +46,33 @@ public class OfflineServiceImpl implements OfflineService { @@ -46,23 +46,33 @@ public class OfflineServiceImpl implements OfflineService {
46 Object line=map.get("line"); 46 Object line=map.get("line");
47 Object nbbm=map.get("nbbm"); 47 Object nbbm=map.get("nbbm");
48 Object updown=map.get("updown"); 48 Object updown=map.get("updown");
49 - 49 + Object date=map.get("date");
50 50
51 if(line!=null){ 51 if(line!=null){
52 - if(line.toString()!="")  
53 - sql +=" and line="+line; 52 + sql +=" and line like'%"+line.toString()+"%'";
54 } 53 }
55 54
56 if(nbbm!=null){ 55 if(nbbm!=null){
57 - if(nbbm.toString()!="")  
58 - sql +=" and vehicle like '%"+nbbm+"%'"; 56 + sql +=" and vehicle like '%"+nbbm.toString()+"%'";
59 } 57 }
60 58
61 if(updown!=null){ 59 if(updown!=null){
62 - if(updown.toString() !="")  
63 - sql +="and up_down ="+updown; 60 + sql +="and up_down like '%"+updown.toString()+"%'";
  61 + }
  62 + if(date!=null){
  63 + if (date.toString().length()>0) {
  64 + SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:MM:SS");
  65 + try {
  66 + Long t1=sdf.parse(date.toString()+" 00:00:00").getTime();
  67 + Long t2=sdf.parse(date.toString()+" 23:59:59").getTime();
  68 + sql += " and timestamp >="+t1 +" and timestamp <="+t2;
  69 + } catch (ParseException e) {
  70 + // TODO Auto-generated catch block
  71 + e.printStackTrace();
  72 + }
  73 + }
  74 +
64 } 75 }
65 -  
66 sql +=" order by id limit ?,?"; 76 sql +=" order by id limit ?,?";
67 77
68 try { 78 try {
@@ -118,19 +128,32 @@ public class OfflineServiceImpl implements OfflineService { @@ -118,19 +128,32 @@ public class OfflineServiceImpl implements OfflineService {
118 Object nbbm=map.get("nbbm"); 128 Object nbbm=map.get("nbbm");
119 Object updown=map.get("updown"); 129 Object updown=map.get("updown");
120 130
  131 + Object date=map.get("date");
  132 +
121 if(line!=null){ 133 if(line!=null){
122 - if(line.toString()!="")  
123 - sql +=" and line="+line; 134 + sql +=" and line like'%"+line.toString()+"%'";
124 } 135 }
125 136
126 if(nbbm!=null){ 137 if(nbbm!=null){
127 - if(nbbm.toString()!="")  
128 - sql +=" and vehicle like '%"+nbbm+"%'"; 138 + sql +=" and vehicle like '%"+nbbm.toString()+"%'";
129 } 139 }
130 140
131 if(updown!=null){ 141 if(updown!=null){
132 - if(updown.toString() !="")  
133 - sql +="and up_down ="+updown; 142 + sql +="and up_down like '%"+updown.toString()+"%'";
  143 + }
  144 + if(date!=null){
  145 + if (date.toString().length()>0) {
  146 + SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:MM:SS");
  147 + try {
  148 + Long t1=sdf.parse(date.toString()+" 00:00:00").getTime();
  149 + Long t2=sdf.parse(date.toString()+" 23:59:59").getTime();
  150 + sql += " and timestamp >="+t1 +" and timestamp <="+t2;
  151 + } catch (ParseException e) {
  152 + // TODO Auto-generated catch block
  153 + e.printStackTrace();
  154 + }
  155 + }
  156 +
134 } 157 }
135 158
136 Connection conn = null; 159 Connection conn = null;
src/main/java/com/bsth/service/excep/impl/OutboundServiceImpl.java
@@ -36,23 +36,33 @@ public class OutboundServiceImpl implements OutboundService{ @@ -36,23 +36,33 @@ public class OutboundServiceImpl implements OutboundService{
36 Object line=map.get("line"); 36 Object line=map.get("line");
37 Object nbbm=map.get("nbbm"); 37 Object nbbm=map.get("nbbm");
38 Object updown=map.get("updown"); 38 Object updown=map.get("updown");
  39 + Object date=map.get("date");
39 40
40 -  
41 if(line!=null){ 41 if(line!=null){
42 - if(line.toString()!="")  
43 - sql +=" and line="+line; 42 + sql +=" and line like'%"+line.toString()+"%'";
44 } 43 }
45 44
46 if(nbbm!=null){ 45 if(nbbm!=null){
47 - if(nbbm.toString()!="")  
48 - sql +=" and vehicle like '%"+nbbm+"%'"; 46 + sql +=" and vehicle like '%"+nbbm.toString()+"%'";
49 } 47 }
50 48
51 if(updown!=null){ 49 if(updown!=null){
52 - if(updown.toString() !="")  
53 - sql +="and up_down ="+updown; 50 + sql +="and up_down like '%"+updown.toString()+"%'";
  51 + }
  52 + if(date!=null){
  53 + if (date.toString().length()>0) {
  54 + SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:MM:SS");
  55 + try {
  56 + Long t1=sdf.parse(date.toString()+" 00:00:00").getTime();
  57 + Long t2=sdf.parse(date.toString()+" 23:59:59").getTime();
  58 + sql += " and timestamp >="+t1 +" and timestamp <="+t2;
  59 + } catch (ParseException e) {
  60 + // TODO Auto-generated catch block
  61 + e.printStackTrace();
  62 + }
  63 + }
  64 +
54 } 65 }
55 -  
56 sql +=" order by id limit ?,?"; 66 sql +=" order by id limit ?,?";
57 67
58 68
@@ -102,20 +112,32 @@ public class OutboundServiceImpl implements OutboundService{ @@ -102,20 +112,32 @@ public class OutboundServiceImpl implements OutboundService{
102 Object line=map.get("line"); 112 Object line=map.get("line");
103 Object nbbm=map.get("nbbm"); 113 Object nbbm=map.get("nbbm");
104 Object updown=map.get("updown"); 114 Object updown=map.get("updown");
105 - 115 + Object date=map.get("date");
106 if(line!=null){ 116 if(line!=null){
107 - if(line.toString()!="")  
108 - sql +=" and line="+line; 117 + sql +=" and line like '%"+line.toString()+"%'";
  118 +
109 } 119 }
110 120
111 if(nbbm!=null){ 121 if(nbbm!=null){
112 - if(nbbm.toString()!="")  
113 - sql +=" and vehicle like '%"+nbbm+"%'"; 122 + sql +=" and vehicle like '%"+nbbm.toString()+"%'";
114 } 123 }
115 124
116 if(updown!=null){ 125 if(updown!=null){
117 - if(updown.toString() !="")  
118 - sql +="and up_down ="+updown; 126 + sql +=" and up_down like '%"+updown.toString()+"%'";
  127 + }
  128 + if(date!=null){
  129 + if (date.toString().length()>0) {
  130 + SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  131 + try {
  132 + Long t1=sdf.parse(date.toString()+" 00:00:00").getTime();
  133 + Long t2=sdf.parse(date.toString()+" 23:59:59").getTime();
  134 + sql += " and timestamp >="+t1 +" and timestamp <="+t2;
  135 + } catch (ParseException e) {
  136 + // TODO Auto-generated catch block
  137 + e.printStackTrace();
  138 + }
  139 + }
  140 +
119 } 141 }
120 Connection conn = null; 142 Connection conn = null;
121 PreparedStatement ps = null; 143 PreparedStatement ps = null;
@@ -214,7 +236,7 @@ public class OutboundServiceImpl implements OutboundService{ @@ -214,7 +236,7 @@ public class OutboundServiceImpl implements OutboundService{
214 times=sdf.format(new Date()); 236 times=sdf.format(new Date());
215 } 237 }
216 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 238 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
217 - String times1=times+" 00:00:01"; 239 + String times1=times+" 00:00:00";
218 String times2=times+" 23:59:59"; 240 String times2=times+" 23:59:59";
219 241
220 Connection conn = null; 242 Connection conn = null;
src/main/java/com/bsth/service/excep/impl/SpeedingServiceImpl.java
@@ -38,22 +38,34 @@ public class SpeedingServiceImpl implements SpeedingService { @@ -38,22 +38,34 @@ public class SpeedingServiceImpl implements SpeedingService {
38 Object line=map.get("line"); 38 Object line=map.get("line");
39 Object nbbm=map.get("nbbm"); 39 Object nbbm=map.get("nbbm");
40 Object updown=map.get("updown"); 40 Object updown=map.get("updown");
41 - 41 + Object date=map.get("date");
42 42
43 if(line!=null){ 43 if(line!=null){
44 - if(line.toString()!="")  
45 - sql +=" and line="+line; 44 + sql +=" and line like'%"+line.toString()+"%'";
46 } 45 }
47 46
48 if(nbbm!=null){ 47 if(nbbm!=null){
49 - if(nbbm.toString()!="")  
50 - sql +=" and vehicle like '%"+nbbm+"%'"; 48 + sql +=" and vehicle like '%"+nbbm.toString()+"%'";
51 } 49 }
52 50
53 if(updown!=null){ 51 if(updown!=null){
54 - if(updown.toString() !="")  
55 - sql +="and up_down ="+updown; 52 + sql +="and up_down like '%"+updown.toString()+"%'";
  53 + }
  54 + if(date!=null){
  55 + if (date.toString().length()>0) {
  56 + SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:MM:SS");
  57 + try {
  58 + Long t1=sdf.parse(date.toString()+" 00:00:00").getTime();
  59 + Long t2=sdf.parse(date.toString()+" 23:59:59").getTime();
  60 + sql += " and timestamp >="+t1 +" and timestamp <="+t2;
  61 + } catch (ParseException e) {
  62 + // TODO Auto-generated catch block
  63 + e.printStackTrace();
  64 + }
  65 + }
  66 +
56 } 67 }
  68 +
57 69
58 sql +=" order by id limit ?,?"; 70 sql +=" order by id limit ?,?";
59 71
@@ -103,19 +115,32 @@ public class SpeedingServiceImpl implements SpeedingService { @@ -103,19 +115,32 @@ public class SpeedingServiceImpl implements SpeedingService {
103 Object nbbm=map.get("nbbm"); 115 Object nbbm=map.get("nbbm");
104 Object updown=map.get("updown"); 116 Object updown=map.get("updown");
105 117
  118 + Object date=map.get("date");
  119 +
106 if(line!=null){ 120 if(line!=null){
107 - if(line.toString()!="")  
108 - sql +=" and line="+line; 121 + sql +=" and line like'%"+line.toString()+"%'";
109 } 122 }
110 123
111 if(nbbm!=null){ 124 if(nbbm!=null){
112 - if(nbbm.toString()!="")  
113 - sql +=" and vehicle like '%"+nbbm+"%'"; 125 + sql +=" and vehicle like '%"+nbbm.toString()+"%'";
114 } 126 }
115 127
116 if(updown!=null){ 128 if(updown!=null){
117 - if(updown.toString() !="")  
118 - sql +="and up_down ="+updown; 129 + sql +="and up_down like '%"+updown.toString()+"%'";
  130 + }
  131 + if(date!=null){
  132 + if (date.toString().length()>0) {
  133 + SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:MM:SS");
  134 + try {
  135 + Long t1=sdf.parse(date.toString()+" 00:00:00").getTime();
  136 + Long t2=sdf.parse(date.toString()+" 23:59:59").getTime();
  137 + sql += " and timestamp >="+t1 +" and timestamp <="+t2;
  138 + } catch (ParseException e) {
  139 + // TODO Auto-generated catch block
  140 + e.printStackTrace();
  141 + }
  142 + }
  143 +
119 } 144 }
120 Connection conn = null; 145 Connection conn = null;
121 PreparedStatement ps = null; 146 PreparedStatement ps = null;
src/main/java/com/bsth/service/forms/ExportService.java
@@ -2,6 +2,7 @@ package com.bsth.service.forms; @@ -2,6 +2,7 @@ package com.bsth.service.forms;
2 2
3 import java.util.List; 3 import java.util.List;
4 4
  5 +import com.bsth.entity.mcy_forms.Daily;
5 import com.bsth.entity.mcy_forms.Linepasswengerflow; 6 import com.bsth.entity.mcy_forms.Linepasswengerflow;
6 import com.bsth.entity.mcy_forms.Operationservice; 7 import com.bsth.entity.mcy_forms.Operationservice;
7 import com.bsth.entity.mcy_forms.Shifday; 8 import com.bsth.entity.mcy_forms.Shifday;
@@ -28,6 +29,6 @@ public interface ExportService { @@ -28,6 +29,6 @@ public interface ExportService {
28 public void operationservice(String startDate, String endDate, String lpName, 29 public void operationservice(String startDate, String endDate, String lpName,
29 List<Operationservice> resList); 30 List<Operationservice> resList);
30 31
31 - 32 +
32 33
33 } 34 }
src/main/java/com/bsth/service/forms/FormsService.java
@@ -5,6 +5,7 @@ import java.util.Map; @@ -5,6 +5,7 @@ import java.util.Map;
5 5
6 import com.bsth.entity.mcy_forms.Allline; 6 import com.bsth.entity.mcy_forms.Allline;
7 import com.bsth.entity.mcy_forms.Changetochange; 7 import com.bsth.entity.mcy_forms.Changetochange;
  8 +import com.bsth.entity.mcy_forms.Daily;
8 import com.bsth.entity.mcy_forms.Executionrate; 9 import com.bsth.entity.mcy_forms.Executionrate;
9 import com.bsth.entity.mcy_forms.Linepasswengerflow; 10 import com.bsth.entity.mcy_forms.Linepasswengerflow;
10 import com.bsth.entity.mcy_forms.Operationservice; 11 import com.bsth.entity.mcy_forms.Operationservice;
@@ -39,4 +40,6 @@ public interface FormsService { @@ -39,4 +40,6 @@ public interface FormsService {
39 public List<Executionrate> executionrate(Map<String, Object> map); 40 public List<Executionrate> executionrate(Map<String, Object> map);
40 41
41 public List<Allline> allline(Map<String, Object> map); 42 public List<Allline> allline(Map<String, Object> map);
  43 +
  44 + public List<Daily> daily(Map<String, Object> map);
42 } 45 }
src/main/java/com/bsth/service/forms/impl/FormsServiceImpl.java
@@ -25,6 +25,7 @@ import com.bsth.entity.mcy_forms.Vehicleloading; @@ -25,6 +25,7 @@ import com.bsth.entity.mcy_forms.Vehicleloading;
25 import com.bsth.entity.mcy_forms.Waybillday; 25 import com.bsth.entity.mcy_forms.Waybillday;
26 import com.bsth.entity.mcy_forms.Allline; 26 import com.bsth.entity.mcy_forms.Allline;
27 import com.bsth.entity.mcy_forms.Changetochange; 27 import com.bsth.entity.mcy_forms.Changetochange;
  28 +import com.bsth.entity.mcy_forms.Daily;
28 import com.bsth.entity.mcy_forms.Executionrate; 29 import com.bsth.entity.mcy_forms.Executionrate;
29 import com.bsth.service.forms.CommonService; 30 import com.bsth.service.forms.CommonService;
30 import com.bsth.service.forms.FormsService; 31 import com.bsth.service.forms.FormsService;
@@ -290,6 +291,7 @@ public class FormsServiceImpl implements FormsService { @@ -290,6 +291,7 @@ public class FormsServiceImpl implements FormsService {
290 291
291 List<Changetochange> list = jdbcTemplate.query(sql, new RowMapper<Changetochange>() { 292 List<Changetochange> list = jdbcTemplate.query(sql, new RowMapper<Changetochange>() {
292 293
  294 +
293 @Override 295 @Override
294 public Changetochange mapRow(ResultSet arg0, int arg1) throws SQLException { 296 public Changetochange mapRow(ResultSet arg0, int arg1) throws SQLException {
295 Changetochange chan = new Changetochange(); 297 Changetochange chan = new Changetochange();
@@ -314,6 +316,7 @@ public class FormsServiceImpl implements FormsService { @@ -314,6 +316,7 @@ public class FormsServiceImpl implements FormsService {
314 return list; 316 return list;
315 } 317 }
316 318
  319 +
317 // 路单数据 320 // 路单数据
318 @Override 321 @Override
319 public List<Singledata> singledata(Map<String, Object> map) { 322 public List<Singledata> singledata(Map<String, Object> map) {
@@ -706,4 +709,46 @@ public class FormsServiceImpl implements FormsService { @@ -706,4 +709,46 @@ public class FormsServiceImpl implements FormsService {
706 709
707 return list; 710 return list;
708 } 711 }
  712 +
  713 + @Override
  714 + public List<Daily> daily(Map<String, Object> map) {
  715 +
  716 + String sql ="select r.schedule_date_str,r.xl_bm,r.xl_name,r.cl_zbh,r.j_gh,r.j_name,y.YH,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name "
  717 + + " from bsth_c_s_sp_info_real r LEFT JOIN bsth_c_ylb y ON r.cl_zbh = y.nbbm "
  718 + + " WHERE 1 = 1"
  719 + + " and r.xl_bm='" + map.get("line").toString() + "'"
  720 + + " and to_days(r.schedule_date)=to_days('"+map.get("date").toString()+"')"
  721 + + " AND r.gs_bm is not null";
  722 +
  723 + if(map.get("gsdmDaily").toString()!=""){
  724 + sql+=" and r.gs_bm='"+map.get("gsdmDaily").toString()+"'";
  725 + }
  726 + if(map.get("fgsdmDaily").toString()!=""){
  727 + sql+=" and r.fgs_bm='"+map.get("fgsdmDaily").toString()+"'";
  728 + }
  729 + sql += " GROUP BY r.schedule_date_str,r.xl_bm,r.xl_name,r.cl_zbh,r.j_gh,r.j_name,y.YH,r.gs_bm,r.gs_name,r.fgs_bm,r.fgs_name ";
  730 +
  731 + List<Daily> list = jdbcTemplate.query(sql, new RowMapper<Daily>() {
  732 + @Override
  733 + public Daily mapRow(ResultSet arg0, int arg1) throws SQLException {
  734 + Daily daily = new Daily();
  735 + daily.setRq(arg0.getString("schedule_date_str"));
  736 + daily.setZbh(arg0.getString("cl_zbh"));
  737 + daily.setJgh(arg0.getString("j_gh"));
  738 + daily.setjName(arg0.getString("j_name"));
  739 + daily.setYh(arg0.getString("YH"));
  740 + return daily;
  741 + }
  742 + });
  743 +
  744 + for(int i=0;i<list.size();i++){
  745 + Daily d=list.get(i);
  746 + Map<String, Object> maps = new HashMap<>();
  747 + maps = commonService.findKMBC2(d.getJgh(),d.getZbh(),d.getRq());
  748 + d.setJzl1(maps.get("ksgl").toString());
  749 + d.setZlc(maps.get("realMileage").toString());
  750 + d.setBc(maps.get("sjbc").toString());
  751 + }
  752 + return list;
  753 + }
709 } 754 }
src/main/java/com/bsth/service/impl/BusIntervalServiceImpl.java
@@ -1102,7 +1102,7 @@ public class BusIntervalServiceImpl implements BusIntervalService { @@ -1102,7 +1102,7 @@ public class BusIntervalServiceImpl implements BusIntervalService {
1102 } 1102 }
1103 for(String key : keyMap.keySet()){ 1103 for(String key : keyMap.keySet()){
1104 Map<String, Object> tempMap = new HashMap<String, Object>(); 1104 Map<String, Object> tempMap = new HashMap<String, Object>();
1105 - int jhbc = 0, sjbc = 0, kbc = 0, mbc = 0; 1105 + int jhbc = 0, sjbc = 0, wdfz = 0;
1106 long jhdf = 0l, sjdf = 0l, wddf1 = 0l, wddf2 = 0l; 1106 long jhdf = 0l, sjdf = 0l, wddf1 = 0l, wddf2 = 0l;
1107 long jhfc = 0l, sjfc = 0l, wdfc1 = 0l, wdfc2 = 0l; 1107 long jhfc = 0l, sjfc = 0l, wdfc1 = 0l, wdfc2 = 0l;
1108 long jhys = 0l, sjys = 0l, yssjMax = 0l, yssjMin = 0l; 1108 long jhys = 0l, sjys = 0l, yssjMax = 0l, yssjMin = 0l;
@@ -1127,10 +1127,10 @@ public class BusIntervalServiceImpl implements BusIntervalService { @@ -1127,10 +1127,10 @@ public class BusIntervalServiceImpl implements BusIntervalService {
1127 yssj += schedule.getZdsjActualTime() - schedule.getFcsjActualTime(); 1127 yssj += schedule.getZdsjActualTime() - schedule.getFcsjActualTime();
1128 if(schedule.getFcsjActualTime() - schedule.getFcsjT() < 0){ 1128 if(schedule.getFcsjActualTime() - schedule.getFcsjT() < 0){
1129 wdfc1 += schedule.getFcsjT() - schedule.getFcsjActualTime(); 1129 wdfc1 += schedule.getFcsjT() - schedule.getFcsjActualTime();
1130 - kbc++; 1130 +// kbc++;
1131 } else if(schedule.getFcsjActualTime() - schedule.getFcsjT() > 0){ 1131 } else if(schedule.getFcsjActualTime() - schedule.getFcsjT() > 0){
1132 wdfc2 += schedule.getFcsjActualTime() - schedule.getFcsjT(); 1132 wdfc2 += schedule.getFcsjActualTime() - schedule.getFcsjT();
1133 - mbc++; 1133 +// mbc++;
1134 } 1134 }
1135 1135
1136 if(schedule.getDfsj() != null){ 1136 if(schedule.getDfsj() != null){
@@ -1197,8 +1197,16 @@ public class BusIntervalServiceImpl implements BusIntervalService { @@ -1197,8 +1197,16 @@ public class BusIntervalServiceImpl implements BusIntervalService {
1197 tempMap.put("pjys", "0分"); 1197 tempMap.put("pjys", "0分");
1198 tempMap.put("pjtz", "0分"); 1198 tempMap.put("pjtz", "0分");
1199 } 1199 }
1200 - tempMap.put("kbc", kbc);  
1201 - tempMap.put("mbc", mbc); 1200 +// tempMap.put("kbc", kbc);
  1201 +// tempMap.put("mbc", mbc);
  1202 + if(!tempMap.get("jhfc").toString().equals("/") && !tempMap.get("sjfc").toString().equals("/")){
  1203 + String[] temp1 = tempMap.get("jhfc").toString().split(":");
  1204 + String[] temp2 = tempMap.get("sjfc").toString().split(":");
  1205 + tempMap.put("wdfz", (Integer.valueOf(temp2[0])*60 + Integer.valueOf(temp2[1]))
  1206 + - (Integer.valueOf(temp1[0])*60 + Integer.valueOf(temp1[1])));
  1207 + }else{
  1208 + tempMap.put("wdfz", "/");
  1209 + }
1202 tempMap.put("jhys", jhys); 1210 tempMap.put("jhys", jhys);
1203 tempMap.put("sjys", sjys); 1211 tempMap.put("sjys", sjys);
1204 tempMap.put("yssjMin", yssjMin); 1212 tempMap.put("yssjMin", yssjMin);
src/main/java/com/bsth/service/realcontrol/buffer/GetSchedulePlanThread.java
@@ -20,7 +20,7 @@ @@ -20,7 +20,7 @@
20 //import com.bsth.repository.realcontrol.ScheduleRealInfoRepository; 20 //import com.bsth.repository.realcontrol.ScheduleRealInfoRepository;
21 //import com.bsth.repository.schedule.SchedulePlanInfoRepository; 21 //import com.bsth.repository.schedule.SchedulePlanInfoRepository;
22 //import com.bsth.util.BatchSaveUtils; 22 //import com.bsth.util.BatchSaveUtils;
23 -//import com.bsth.websocket.handler.RealControlSocketHandler; 23 +//import com.bsth.websocket.handlers.RealControlSocketHandler;
24 // 24 //
25 ///** 25 ///**
26 // * 26 // *
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
@@ -1212,7 +1212,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -1212,7 +1212,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1212 map.put("ljbc", ljbc); 1212 map.put("ljbc", ljbc);
1213 map.put("sjbc", jhbc-cjbc+ljbc); 1213 map.put("sjbc", jhbc-cjbc+ljbc);
1214 map.put("jcclc", jcclc); 1214 map.put("jcclc", jcclc);
1215 - map.put("zkslc", ksgl+jcclc); 1215 + map.put("zkslc", format.format(ksgl+jcclc));
1216 return map; 1216 return map;
1217 } 1217 }
1218 1218
@@ -1226,7 +1226,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -1226,7 +1226,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1226 if(obj != null){ 1226 if(obj != null){
1227 map = new HashMap<String,Object>(); 1227 map = new HashMap<String,Object>();
1228 map.put("xlName", xlName); 1228 map.put("xlName", xlName);
1229 - map.put("clZbh", code); 1229 + map.put("clZbh", obj[3]);
1230 map.put("company", obj[0]); 1230 map.put("company", obj[0]);
1231 map.put("requestType", "0x" + Integer.toHexString(Integer.parseInt(obj[1]+"")).toUpperCase()); 1231 map.put("requestType", "0x" + Integer.toHexString(Integer.parseInt(obj[1]+"")).toUpperCase());
1232 map.put("requestTime", obj[2]); 1232 map.put("requestTime", obj[2]);
src/main/java/com/bsth/service/report/ReportService.java
@@ -24,6 +24,8 @@ public interface ReportService { @@ -24,6 +24,8 @@ public interface ReportService {
24 Map<String, Object> tbodyTime2(String line ,String ttinfo); 24 Map<String, Object> tbodyTime2(String line ,String ttinfo);
25 25
26 List<Map<String, Object>> tbodyTime3(String line ,String ttinfo); 26 List<Map<String, Object>> tbodyTime3(String line ,String ttinfo);
  27 +
  28 + List<Map<String, Object>> tbodyTime4(String line ,String ttinfo);
27 List<Map<String, Object>> tbodyTime5(String line ,String ttinfo); 29 List<Map<String, Object>> tbodyTime5(String line ,String ttinfo);
28 30
29 List<Map<String, Object>> getTtinfo(Map<String, Object> map); 31 List<Map<String, Object>> getTtinfo(Map<String, Object> map);
src/main/java/com/bsth/service/report/impl/ReportServiceImpl.java
@@ -451,21 +451,36 @@ public class ReportServiceImpl implements ReportService{ @@ -451,21 +451,36 @@ public class ReportServiceImpl implements ReportService{
451 System.out.println(609360%60); 451 System.out.println(609360%60);
452 } 452 }
453 @Override 453 @Override
454 - public List<Map<String, Object>> tbodyTime3(String line, String date) { 454 + public List<Map<String, Object>> tbodyTime3(String line, String ttinfo) {
455 // TODO Auto-generated method stub 455 // TODO Auto-generated method stub
456 List<Map<String, Object>> list=new ArrayList<Map<String,Object>>(); 456 List<Map<String, Object>> list=new ArrayList<Map<String,Object>>();
457 - String sqlZd=" select qdz_name, count(cl_zbh) as cls , 'zqc' as lx from bsth_c_s_sp_info where "  
458 - + " DATE_FORMAT(schedule_date,'%Y-%m-%d') ='"+date+"' and xl_bm='"+line+"' and bc_type='normal' "  
459 - + " and fcsj>'06:31' and fcsj<'08:00' group by qdz_name union "  
460 - + " select qdz_name, count(cl_zbh) as cls , 'wqc' as lx from bsth_c_s_sp_info "  
461 - + " where DATE_FORMAT(schedule_date,'%Y-%m-%d') ='"+date+"' and xl_bm='"+line+"' "  
462 - + " and bc_type='normal' and fcsj>'16:01' and fcsj<'18:00' group by qdz_name union "  
463 - + " select qdz_name, count(cl_zbh) as cls , 'zqj' as lx from bsth_c_s_sp_info "  
464 - + " where DATE_FORMAT(schedule_date,'%Y-%m-%d') ='"+date+"' and xl_bm='"+line+"' "  
465 - + " and bc_type='region' and fcsj>'06:31' and fcsj<'08:00' group by qdz_name union "  
466 - + " select qdz_name, count(cl_zbh) as cls , 'wqj' as lx from bsth_c_s_sp_info "  
467 - + " where DATE_FORMAT(schedule_date,'%Y-%m-%d') ='"+date+"' and xl_bm='"+line+"' "  
468 - + " and bc_type='region' and fcsj>'16:01' and fcsj<'18:00'group by qdz_name"; 457 +
  458 +
  459 +
  460 + String sqlZd=" select t.*,x.station_name as qdz_name from ("
  461 + + " select qdz,count(lp) as cls,lx from ( select qdz,lp, 'zqc' as lx "
  462 + + " from bsth_c_s_ttinfo_detail where "
  463 + + " bc_type='normal' and ttinfo ='"+ttinfo+"' "
  464 + + " and fcsj>'06:31' and fcsj<'08:00' group by qdz,lp) t1"
  465 + + " group by qdz "
  466 + + " union "
  467 + + " select qdz,count(lp) as cls,lx from ( select qdz,lp, 'wqc' as lx "
  468 + + " from bsth_c_s_ttinfo_detail where "
  469 + + " bc_type='normal' and ttinfo ='"+ttinfo+"' "
  470 + + " and fcsj>'16:01' and fcsj<'18:00' group by qdz,lp) t2"
  471 + + " group by qdz "
  472 + + " union "
  473 + + " select qdz,count(lp) as cls,lx from ( select qdz,lp, 'zqj' as lx "
  474 + + " from bsth_c_s_ttinfo_detail where "
  475 + + " bc_type='region' and ttinfo ='"+ttinfo+"' "
  476 + + " and fcsj>'06:31' and fcsj<'08:00' group by qdz,lp) t3"
  477 + + " group by qdz "
  478 + + " union "
  479 + + " select qdz,count(lp) as cls,lx from ( select qdz,lp, 'wqj' as lx "
  480 + + " from bsth_c_s_ttinfo_detail where "
  481 + + " bc_type='region' and ttinfo ='"+ttinfo+"' "
  482 + + " and fcsj>'16:01' and fcsj<'18:00' group by qdz,lp) t4"
  483 + + " group by qdz ) t left join bsth_c_station x on t.qdz=x.id";
469 484
470 List<Map<String, Object>> lists= jdbcTemplate.query(sqlZd, 485 List<Map<String, Object>> lists= jdbcTemplate.query(sqlZd,
471 new RowMapper<Map<String, Object>>(){ 486 new RowMapper<Map<String, Object>>(){
@@ -526,55 +541,238 @@ public class ReportServiceImpl implements ReportService{ @@ -526,55 +541,238 @@ public class ReportServiceImpl implements ReportService{
526 } 541 }
527 return list; 542 return list;
528 } 543 }
  544 +
529 @Override 545 @Override
530 - public List<Map<String, Object>> tbodyTime5(String line, String date) { 546 + public List<Map<String, Object>> tbodyTime4(String line, String ttinfo) {
  547 + List<Map<String, Object>> list =new ArrayList<>();
531 // TODO Auto-generated method stub 548 // TODO Auto-generated method stub
532 - String sql="select min(fcsj) as fcsj,'lx0' as lx from bsth_c_s_sp_info where "  
533 - + " DATE_FORMAT(schedule_date,'%Y-%m-%d') ='"+date+"' and xl_bm='"+line+"'"  
534 - + " and bc_type='out' and xl_dir=0 union "  
535 - + " select min(fcsj) as fcsj,'lx1' as lx from bsth_c_s_sp_info where "  
536 - + " DATE_FORMAT(schedule_date,'%Y-%m-%d') ='"+date+"' and xl_bm='"+line+"'"  
537 - + " and bc_type='out' and xl_dir=1";  
538 - List<Map<String, Object>> lists= jdbcTemplate.query(sql,  
539 - new RowMapper<Map<String, Object>>(){ 549 + //最早营运时间 区分夜宵线
  550 + String sqlMinYysj="select start_opt from bsth_c_line_config where line = '"+BasicData.lineId2CodeMap.inverse().get(line) +"'";
  551 + String minfcsj=jdbcTemplate.queryForObject(sqlMinYysj, String.class);
  552 +
  553 + //查询全程
  554 + String sqlqc="select t.*,x.station_name as qdz_name from ( "
  555 + + "(SELECT fcsj,qdz,2 as xh,xl_dir FROM bsth_c_s_ttinfo_detail "
  556 + + " where ttinfo ='"+ttinfo+"' and bc_type='normal' and fcsj <='"+minfcsj+"' ) "
  557 + + " union "
  558 + + " (SELECT fcsj,qdz,1 as xh,xl_dir FROM bsth_c_s_ttinfo_detail "
  559 + + " where ttinfo ='"+ttinfo+"' and bc_type='normal' and fcsj > '"+minfcsj+"') "
  560 + + "order by xl_dir,xh,fcsj ) t left join bsth_c_station x on t.qdz=x.id";
  561 + List<Map<String, String>> qclist= jdbcTemplate.query(sqlqc,
  562 + new RowMapper<Map<String, String>>(){
540 @Override 563 @Override
541 - public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException {  
542 - Map<String, Object> m=new HashMap<String,Object>();  
543 - m.put("lx", rs.getString("lx")); 564 + public Map<String, String> mapRow(ResultSet rs, int rowNum) throws SQLException {
  565 + Map<String, String> m=new HashMap<String,String>();
  566 + m.put("qdz_name", rs.getString("qdz_name"));
544 m.put("fcsj", rs.getString("fcsj")); 567 m.put("fcsj", rs.getString("fcsj"));
  568 + m.put("xl", rs.getString("xl_dir"));
545 return m; 569 return m;
546 } 570 }
  571 +
547 }); 572 });
  573 +
  574 + Map<String, Object> qcMap=new HashMap<String,Object>();
  575 + int num=0;
  576 + String sxfcsj="";
  577 + String xxfcsj="";
  578 + String sxzd="";
  579 + String xxzd="";
  580 + for (int i = 0; i < qclist.size(); i++) {
  581 + Map<String, String> map=qclist.get(i);
  582 + if(map.get("xl").equals("0")){
  583 + if(sxzd.equals("")){
  584 + sxzd=map.get("qdz_name").toString();
  585 + qcMap.put("sxzm", sxzd);
  586 + sxfcsj +=map.get("fcsj").toString()+"-";
  587 + }
  588 + if(!(qclist.get(i+1).get("xl").equals("0"))){
  589 + sxfcsj +=map.get("fcsj").toString();
  590 + qcMap.put("sxsj",sxfcsj);
  591 + qcMap.put("sxbc", i+1);
  592 + num=i+1;
  593 + }
  594 + }
  595 + if(map.get("xl").equals("1")){
  596 + if(xxzd.equals("")){
  597 + xxzd=map.get("qdz_name").toString();
  598 + xxfcsj+=map.get("fcsj").toString()+"-";
  599 + qcMap.put("xxzm", xxzd);
  600 + }
  601 + }
  602 + }
  603 + xxfcsj +=qclist.get(qclist.size()-1).get("fcsj").toString();
  604 + qcMap.put("xxsj", xxfcsj);
  605 + qcMap.put("xxbc", qclist.size()-num);
  606 + list.add(qcMap);
548 607
549 - String sqlList="select * from bsth_c_s_sp_info where "  
550 - + "DATE_FORMAT(schedule_date,'%Y-%m-%d') ='"+date+"' and xl_bm='"+line+"'"  
551 - + " and bc_type='normal' order by fcsj";  
552 - List<SchedulePlanInfo> list= jdbcTemplate.query(sqlList,  
553 - new RowMapper<SchedulePlanInfo>(){ 608 +
  609 + //查询区间
  610 + String sqlqj="select t.*,x.station_name as qdz_name from ( "
  611 + + "(SELECT fcsj,qdz,'1' as gf,xl_dir FROM bsth_c_s_ttinfo_detail "
  612 + + "where ttinfo ='"+ttinfo+"' and bc_type='region' and fcsj >='06:31'"
  613 + + "and fcsj <'08:30')"
  614 + + " union ( SELECT fcsj,qdz,'2' as gf,xl_dir FROM bsth_c_s_ttinfo_detail "
  615 + + "where ttinfo ='"+ttinfo+"' and bc_type='region' "
  616 + + "and fcsj > '16:01' and fcsj < '18:00') order by xl_dir,gf,fcsj ) t "
  617 + + "left join bsth_c_station x on t.qdz=x.id";
  618 +
  619 + List<Map<String, String>> qjlist= jdbcTemplate.query(sqlqj,
  620 + new RowMapper<Map<String, String>>(){
554 @Override 621 @Override
555 - public SchedulePlanInfo mapRow(ResultSet rs, int rowNum) throws SQLException {  
556 - SchedulePlanInfo m=new SchedulePlanInfo();  
557 - m.setBcsj(rs.getInt("bcsj"));  
558 - m.setXlDir(rs.getString("xl_dir"));  
559 - m.setFcsj(rs.getString("fcsj")); 622 + public Map<String, String> mapRow(ResultSet rs, int rowNum) throws SQLException {
  623 + Map<String, String> m=new HashMap<String,String>();
  624 + m.put("qdz_name", rs.getString("qdz_name"));
  625 + m.put("fcsj", rs.getString("fcsj"));
  626 + m.put("xl", rs.getString("xl_dir"));
  627 + m.put("gf", rs.getString("gf"));
560 return m; 628 return m;
561 } 629 }
562 }); 630 });
563 - //上下行最早发车时间 (用于与夜班线 跨零点的班次进行比较)  
564 - String lx0="";  
565 - String lx1="";  
566 - for (int x = 0; x < lists.size(); x++) {  
567 - if(lists.get(x).get("lx").equals("lx0")){  
568 - lx0=lists.get(x).get("fcsj")==null?"0:0":lists.get(x).get("fcsj").toString(); 631 +
  632 + Map<String, Object> qjzMap=new HashMap<String,Object>();
  633 + Map<String, Object> qjwMap=new HashMap<String,Object>();
  634 + int numqj=0;
  635 + String sxfcsjqj="";
  636 + String xxfcsjqj="";
  637 + String sxzdqj="";
  638 + String xxzdqj="";
  639 + for(int i=0;i<qjlist.size();i++){
  640 + Map<String, String> map=qjlist.get(i);
  641 + if(map.get("xl").toString().equals("0")){
  642 + if(map.get("gf").toString().equals("1")){
  643 + if(sxzdqj.equals("")){
  644 + sxzdqj =map.get("qdz_name").toString();
  645 + qjzMap.put("sxzm", sxzdqj);
  646 + sxfcsjqj +=map.get("fcsj").toString()+"-";
  647 + }
  648 + if(i<qjlist.size()-1){
  649 + if(!(qjlist.get(i+1).get("gf").equals("1"))){
  650 + sxfcsjqj +=map.get("fcsj").toString();
  651 + qjzMap.put("sxsj",sxfcsjqj);
  652 + qjzMap.put("sxbc", i+1);
  653 + numqj=i+1;
  654 + sxzdqj ="";
  655 + sxfcsjqj="";
  656 + }
  657 + }else{
  658 + qjzMap.put("sxsj",sxfcsjqj+"-"+map.get("fcsj").toString());
  659 + qjzMap.put("sxbc", i+1);
  660 + numqj=i+1;
  661 + sxzdqj ="";
  662 + sxfcsjqj="";
  663 + }
  664 + }
  665 + if(map.get("gf").toString().equals("2")){
  666 + if(sxzdqj.equals("")){
  667 + sxzdqj =map.get("qdz_name").toString();
  668 + qjwMap.put("sxzm", sxzdqj);
  669 + sxfcsjqj +=map.get("fcsj").toString()+"-";
  670 + }
  671 + if(i<qjlist.size()-1){
  672 + if(!(qjlist.get(i+1).get("xl").equals("0"))){
  673 + sxfcsjqj +=map.get("fcsj").toString();
  674 + qjwMap.put("sxsj",sxfcsjqj);
  675 + qjwMap.put("sxbc", i+1-numqj);
  676 + numqj=i+1;
  677 + }
  678 + }else{
  679 + qjwMap.put("sxsj",sxfcsjqj+"-"+map.get("fcsj").toString());
  680 + qjwMap.put("sxbc", i+1-numqj);
  681 + numqj=i+1;
  682 + }
  683 + }
  684 +
569 }else{ 685 }else{
570 - lx1=lists.get(x).get("fcsj")==null?"0:0":lists.get(x).get("fcsj").toString(); 686 + if(map.get("gf").toString().equals("1")){
  687 + if(xxzdqj.equals("")){
  688 + xxzdqj =map.get("qdz_name").toString();
  689 + qjzMap.put("xxzm", xxzdqj);
  690 + xxfcsjqj +=map.get("fcsj").toString()+"-";
  691 + }
  692 + if(i<qjlist.size()-1){
  693 + if(!(qjlist.get(i+1).get("gf").equals("1"))){
  694 + xxfcsjqj +=map.get("fcsj").toString();
  695 + qjzMap.put("xxsj",xxfcsjqj);
  696 + qjzMap.put("xxbc", i+1-numqj);
  697 + numqj=i+1;
  698 + xxzdqj ="";
  699 + xxfcsjqj="";
  700 + }
  701 + }else{
  702 + qjzMap.put("xxsj",xxfcsjqj+"-"+map.get("fcsj").toString());
  703 + qjzMap.put("xxbc", i+1-numqj);
  704 + numqj=i+1;
  705 + xxzdqj ="";
  706 + xxfcsjqj="";
  707 + }
  708 + }
  709 + if(map.get("gf").toString().equals("2")){
  710 + if(xxzdqj.equals("")){
  711 + xxzdqj =map.get("qdz_name").toString();
  712 + qjwMap.put("xxzm", xxzdqj);
  713 + xxfcsjqj +=map.get("fcsj").toString()+"-";
  714 + }
  715 + if(i<qjlist.size()){
  716 + if(i==qjlist.size()-1){
  717 + xxfcsjqj +=map.get("fcsj").toString();
  718 + qjwMap.put("xxsj",xxfcsjqj);
  719 + qjwMap.put("xxbc", i+1-numqj);
  720 + numqj=i+1;
  721 + }
  722 + }else{
  723 + qjwMap.put("xxsj",xxfcsjqj+"-"+xxfcsjqj);
  724 + qjwMap.put("xxbc", i+1-numqj);
  725 + numqj=i+1;
  726 + }
  727 + }
  728 +
  729 +
571 } 730 }
572 } 731 }
573 732
574 - String[] lx0sj = lx0.split(":");  
575 - int sxFc=Integer.parseInt(lx0sj[0])*60+Integer.parseInt(lx0sj[1]);  
576 - String[] lx1sj = lx1.split(":");  
577 - int xxFc=Integer.parseInt(lx1sj[0])*60+Integer.parseInt(lx1sj[1]); 733 + if(!qjzMap.isEmpty()){
  734 + list.add(qjzMap);
  735 + }
  736 + if(!qjwMap.isEmpty()){
  737 + list.add(qjwMap);
  738 +
  739 + }
  740 + return list;
  741 + }
  742 + @Override
  743 + public List<Map<String, Object>> tbodyTime5(String line, String ttinfo) {
  744 + // TODO Auto-generated method stub
  745 + //最早营运时间 区分夜宵线
  746 + String sqlMinYysj="select start_opt from bsth_c_line_config where line = '"+BasicData.lineId2CodeMap.inverse().get(line) +"'";
  747 + String minfcsj=jdbcTemplate.queryForObject(sqlMinYysj, String.class);
  748 + String[] minSjs = minfcsj.split(":");
  749 + int minSj=Integer.parseInt(minSjs[0])*60+Integer.parseInt(minSjs[1]);
  750 + //查询时间里程
  751 + String sqlPc=" (SELECT jhlc,fcsj,bcsj,bc_type,lp,xl_dir,2 as xh FROM "
  752 + + " bsth_c_s_ttinfo_detail where ttinfo ='"+ttinfo+"' and "
  753 + + " fcsj <='"+minfcsj+"' and bc_type = 'normal') "
  754 + + " union "
  755 + + " (SELECT jhlc,fcsj,bcsj,bc_type,lp,xl_dir,1 as xh FROM "
  756 + + " bsth_c_s_ttinfo_detail where ttinfo ='"+ttinfo+"' and "
  757 + + " fcsj >'"+minfcsj+"' and bc_type ='normal') "
  758 + + " order by xl_dir, xh,fcsj";
  759 +
  760 + Map<String, Object> map=new HashMap<String,Object>();
  761 + List<Map<String, Object>> list= jdbcTemplate.query(sqlPc,
  762 + new RowMapper<Map<String, Object>>(){
  763 + @Override
  764 + public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException {
  765 + Map<String, Object> m=new HashMap<String,Object>();
  766 + m.put("fcsj", rs.getString("fcsj"));
  767 + m.put("yygl", rs.getString("jhlc")==null?"0":rs.getString("jhlc"));
  768 + m.put("bcsj", rs.getString("bcsj"));
  769 + m.put("bcType", rs.getString("bc_type"));
  770 + m.put("lp", rs.getString("lp"));
  771 + m.put("dir", rs.getString("xl_dir"));
  772 + return m;
  773 + }
  774 + });
  775 +
578 //班次 776 //班次
579 int sj_0 = 6*60+31,sj_1 = 8*60+30,sj_2 = 16*60+1,sj_3 = 18*60; 777 int sj_0 = 6*60+31,sj_1 = 8*60+30,sj_2 = 16*60+1,sj_3 = 18*60;
580 778
@@ -587,17 +785,17 @@ public class ReportServiceImpl implements ReportService{ @@ -587,17 +785,17 @@ public class ReportServiceImpl implements ReportService{
587 //车距 (发车时间的间距) i--MIN a--MAX 785 //车距 (发车时间的间距) i--MIN a--MAX
588 int iC=999,aC=-1,iZg=999,aZg=-1,iZw=999,aZw=-1,iWg=999,aWg=-1,iJcZ=999,aJcZ=-1,iJcW=999,aJcW=-1; 786 int iC=999,aC=-1,iZg=999,aZg=-1,iZw=999,aZw=-1,iWg=999,aWg=-1,iJcZ=999,aJcZ=-1,iJcW=999,aJcW=-1;
589 int iC1=999,aC1=-1,iZg1=999,aZg1=-1,iZw1=999,aZw1=-1,iWg1=999,aWg1=-1,iJc1Z=999,aJc1Z=-1,iJc1W=999,aJc1W=-1; 787 int iC1=999,aC1=-1,iZg1=999,aZg1=-1,iZw1=999,aZw1=-1,iWg1=999,aWg1=-1,iJc1Z=999,aJc1Z=-1,iJc1W=999,aJc1W=-1;
590 -// List<ScheduleRealInfo> list = scheduleRealInfoRepository.scheduleByDateAndLine(line, date); 788 +
591 for(int i=0;i<list.size();i++){ 789 for(int i=0;i<list.size();i++){
592 - SchedulePlanInfo t=list.get(i);  
593 - String xlDir=t.getXlDir();  
594 - int bcsj=t.getBcsj();  
595 - String fcsj=t.getFcsj(); 790 + Map<String, Object> ttMap=list.get(i);
  791 + String xlDir=ttMap.get("dir").toString();
  792 + int bcsj=Integer.parseInt(ttMap.get("bcsj").toString());
  793 + String fcsj=ttMap.get("fcsj").toString();
596 String[] fcsjs=fcsj.split(":"); 794 String[] fcsjs=fcsj.split(":");
597 int fcsjNum=Integer.parseInt(fcsjs[0])*60+Integer.parseInt(fcsjs[1]); 795 int fcsjNum=Integer.parseInt(fcsjs[0])*60+Integer.parseInt(fcsjs[1]);
598 796
599 if(xlDir.equals("0")){ 797 if(xlDir.equals("0")){
600 - if(fcsjNum>=sxFc && fcsjNum<sj_0){ 798 + if(fcsjNum>=minSj && fcsjNum<sj_0){
601 ccsj0 +=bcsj; 799 ccsj0 +=bcsj;
602 if(aC<0){ 800 if(aC<0){
603 cfc0 =fcsjNum; 801 cfc0 =fcsjNum;
@@ -672,7 +870,7 @@ public class ReportServiceImpl implements ReportService{ @@ -672,7 +870,7 @@ public class ReportServiceImpl implements ReportService{
672 } 870 }
673 jcfc0W=fcsjNum; 871 jcfc0W=fcsjNum;
674 } 872 }
675 - }else if(fcsjNum<sxFc){ 873 + }else if(fcsjNum<minSj){
676 jcsj0 +=bcsj; 874 jcsj0 +=bcsj;
677 if(aJcZ<0){ 875 if(aJcZ<0){
678 jcfc0Z=fcsjNum; 876 jcfc0Z=fcsjNum;
@@ -690,7 +888,7 @@ public class ReportServiceImpl implements ReportService{ @@ -690,7 +888,7 @@ public class ReportServiceImpl implements ReportService{
690 888
691 889
692 }else{ 890 }else{
693 - if(fcsjNum>=xxFc && fcsjNum<sj_0){ 891 + if(fcsjNum>=minSj && fcsjNum<sj_0){
694 ccsj1 +=bcsj; 892 ccsj1 +=bcsj;
695 if(aC1<0){ 893 if(aC1<0){
696 cfc1=fcsjNum; 894 cfc1=fcsjNum;
@@ -762,7 +960,7 @@ public class ReportServiceImpl implements ReportService{ @@ -762,7 +960,7 @@ public class ReportServiceImpl implements ReportService{
762 960
763 jcfc1W=fcsjNum; 961 jcfc1W=fcsjNum;
764 } 962 }
765 - }else if(fcsjNum<xxFc){ 963 + }else if(fcsjNum<minSj){
766 jcsj1 +=bcsj; 964 jcsj1 +=bcsj;
767 if(aJc1Z<0){ 965 if(aJc1Z<0){
768 jcfc1Z=fcsjNum; 966 jcfc1Z=fcsjNum;
@@ -860,4 +1058,5 @@ public class ReportServiceImpl implements ReportService{ @@ -860,4 +1058,5 @@ public class ReportServiceImpl implements ReportService{
860 } 1058 }
861 return list; 1059 return list;
862 } 1060 }
  1061 +
863 } 1062 }