Commit cad38b2c6241b3f2531f800d6929c8ca9ba3ea4a

Authored by 潘钊
2 parents 0e0673d2 112c42c9

Merge branch 'minhang' into qingpu

Showing 90 changed files with 2954 additions and 1253 deletions
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
@@ -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
@@ -86,7 +86,7 @@ public class GpsEntity { @@ -86,7 +86,7 @@ public class GpsEntity {
86 private StationRoute station; 86 private StationRoute station;
87 87
88 /** 状态 */ 88 /** 状态 */
89 - private String signalState; 89 + private String signalState = "normal";
90 90
91 public Integer getCompanyCode() { 91 public Integer getCompanyCode() {
92 return companyCode; 92 return companyCode;
src/main/java/com/bsth/data/gpsdata/GpsRealData.java
@@ -2,7 +2,6 @@ package com.bsth.data.gpsdata; @@ -2,7 +2,6 @@ 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.arrival.GpsRealAnalyse; 7 import com.bsth.data.gpsdata.arrival.GpsRealAnalyse;
@@ -26,7 +25,6 @@ import org.springframework.stereotype.Component; @@ -26,7 +25,6 @@ import org.springframework.stereotype.Component;
26 import java.io.BufferedReader; 25 import java.io.BufferedReader;
27 import java.io.InputStreamReader; 26 import java.io.InputStreamReader;
28 import java.util.*; 27 import java.util.*;
29 -import java.util.concurrent.TimeUnit;  
30 28
31 /** 29 /**
32 * @author PanZhao 30 * @author PanZhao
@@ -67,12 +65,23 @@ public class GpsRealData implements CommandLineRunner { @@ -67,12 +65,23 @@ public class GpsRealData implements CommandLineRunner {
67 65
68 @Override 66 @Override
69 public void run(String... arg0) throws Exception { 67 public void run(String... arg0) throws Exception {
70 - logger.info("gpsDataLoader,40,6");  
71 - Application.mainServices.scheduleWithFixedDelay(gpsDataLoader, 40, 6, TimeUnit.SECONDS); 68 + logger.info("gpsDataLoader,20,5");
  69 + //Application.mainServices.scheduleWithFixedDelay(gpsDataLoader, 20, 6, TimeUnit.SECONDS);
72 } 70 }
73 71
74 public void put(GpsEntity gps) { 72 public void put(GpsEntity gps) {
75 - gpsMap.put(gps.getDeviceId(), 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());
76 } 85 }
77 86
78 /** 87 /**
@@ -197,6 +206,8 @@ public class GpsRealData implements CommandLineRunner { @@ -197,6 +206,8 @@ public class GpsRealData implements CommandLineRunner {
197 gps.setNbbm(nbbm); 206 gps.setNbbm(nbbm);
198 //有更新的点位 207 //有更新的点位
199 updateList.add(gps); 208 updateList.add(gps);
  209 + //实时GPS数据集
  210 + gpsRealData.put(gps);
200 } 211 }
201 //分析数据 212 //分析数据
202 gpsRealAnalyse.analyse(updateList); 213 gpsRealAnalyse.analyse(updateList);
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/arrival/GeoCacheData.java
@@ -29,8 +29,8 @@ public class GeoCacheData { @@ -29,8 +29,8 @@ public class GeoCacheData {
29 29
30 static Logger logger = LoggerFactory.getLogger(GeoCacheData.class); 30 static Logger logger = LoggerFactory.getLogger(GeoCacheData.class);
31 31
32 - //每辆车缓存最后500条gps  
33 - private static final int CACHE_SIZE = 500; 32 + //每辆车缓存最后1000条gps
  33 + private static final int CACHE_SIZE = 1000;
34 private static Map<String, CircleQueue<GpsEntity>> gpsCacheMap = new HashMap<>(); 34 private static Map<String, CircleQueue<GpsEntity>> gpsCacheMap = new HashMap<>();
35 35
36 //线路路段走向 36 //线路路段走向
@@ -75,7 +75,7 @@ public class GeoCacheData { @@ -75,7 +75,7 @@ public class GeoCacheData {
75 } 75 }
76 } 76 }
77 77
78 - public static StationRoute getRouteCode(GpsEntity gps){ 78 + public static StationRoute getRouteCode(GpsEntity gps) {
79 return routeCodeMap.get(gps.getLineId() + "_" + gps.getUpDown() + "_" + gps.getStopNo()); 79 return routeCodeMap.get(gps.getLineId() + "_" + gps.getUpDown() + "_" + gps.getStopNo());
80 } 80 }
81 81
@@ -94,6 +94,21 @@ public class GeoCacheData { @@ -94,6 +94,21 @@ public class GeoCacheData {
94 return null; 94 return null;
95 } 95 }
96 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 +
97 public static Polygon getTccPolygon(String code) { 112 public static Polygon getTccPolygon(String code) {
98 return tccMap.get(code); 113 return tccMap.get(code);
99 } 114 }
@@ -191,4 +206,16 @@ public class GeoCacheData { @@ -191,4 +206,16 @@ public class GeoCacheData {
191 } 206 }
192 return cds; 207 return cds;
193 } 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 + }
194 } 221 }
195 \ No newline at end of file 222 \ No newline at end of file
src/main/java/com/bsth/data/gpsdata/arrival/GpsRealAnalyse.java
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 -} 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
1 package com.bsth.data.gpsdata.arrival; 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;
4 import com.bsth.data.gpsdata.arrival.utils.CircleQueue; 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;
5 10
6 /** 11 /**
7 * Created by panzhao on 2016/12/27. 12 * Created by panzhao on 2016/12/27.
@@ -14,64 +19,71 @@ public abstract class SignalHandle { @@ -14,64 +19,71 @@ public abstract class SignalHandle {
14 return prevs != null && prevs.size() > 0 && prevs.getTail() != null; 19 return prevs != null && prevs.size() > 0 && prevs.getTail() != null;
15 } 20 }
16 21
  22 + protected boolean isDriftSignal(GpsEntity gps) {
  23 + return gps.getLat() == 0 || gps.getLon() == 0;
  24 + }
  25 +
17 /** 26 /**
18 * 是不是异常信号 27 * 是不是异常信号
19 * 28 *
20 * @param gps 29 * @param gps
21 - * @return  
22 - */  
23 - protected boolean isAbnormal(GpsEntity gps) {  
24 - return gps.getLat() == 0 || gps.getLon() == 0;  
25 - } 30 + * @return protected boolean isAbnormal(GpsEntity gps) {
  31 + return gps.getLat() == 0 || gps.getLon() == 0;
  32 + }*/
26 33
27 /** 34 /**
28 * 连续异常信号个数统计 35 * 连续异常信号个数统计
29 * 36 *
30 * @param prevs 37 * @param prevs
31 - * @return 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 + * }
32 */ 57 */
33 - protected int abnormalCount(CircleQueue<GpsEntity> prevs) {  
34 - int count = 0;  
35 58
36 - if (!isNotEmpty(prevs))  
37 - return count;  
38 -  
39 - GpsEntity[] array = (GpsEntity[]) prevs.getQueue();  
40 - GpsEntity gps;  
41 - for (int i = array.length - 1; i > 0; i--) {  
42 - gps = array[i];  
43 -  
44 - if (isAbnormal(gps))  
45 - count++;  
46 - else  
47 - break; 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());
48 } 66 }
49 -  
50 - return count;  
51 } 67 }
52 68
53 /** 69 /**
54 - * 车辆运行轨迹(最近20分钟)  
55 - * 0:上行 1:下行 -1:未知 70 + * 是否是从异常状态恢复的第一个信号
56 * 71 *
57 * @param gps 72 * @param gps
  73 + * @param prevs
58 * @return 74 * @return
59 */ 75 */
60 - protected int runTrack(GpsEntity gps, CircleQueue<GpsEntity> prevs) {  
61 - int rs = -1, count = 0;  
62 -  
63 - long et = gps.getTimestamp() - (1000 * 60 * 20);  
64 - Object[] array = prevs.getQueue();  
65 - GpsEntity prev;  
66 - for(Object obj : array){  
67 - prev = (GpsEntity) obj;  
68 - if(prev.getTimestamp() < et)  
69 - break;  
70 - 76 + protected boolean abnormalRecovery(GpsEntity gps, CircleQueue<GpsEntity> prevs) {
  77 + if (prevs == null || prevs.size() == 0)
  78 + return false;
71 79
  80 + GpsEntity prev = prevs.getTail();
  81 + //从漂移状态恢复
  82 + if (isDriftSignal(prev)
  83 + && !isDriftSignal(gps)) {
  84 + return true;
72 } 85 }
73 - //for()  
74 - return 0;  
75 - }  
76 86
77 -} 87 + return false;
  88 + }
  89 +}
78 \ No newline at end of file 90 \ No newline at end of file
src/main/java/com/bsth/data/gpsdata/arrival/entity/RouteReverse.java
@@ -5,6 +5,7 @@ package com.bsth.data.gpsdata.arrival.entity; @@ -5,6 +5,7 @@ package com.bsth.data.gpsdata.arrival.entity;
5 */ 5 */
6 public class RouteReverse { 6 public class RouteReverse {
7 7
  8 + private String nbbm;
8 //反转个数 9 //反转个数
9 private int count; 10 private int count;
10 11
@@ -14,18 +15,18 @@ public class RouteReverse { @@ -14,18 +15,18 @@ public class RouteReverse {
14 //掉头站点 15 //掉头站点
15 private String turned; 16 private String turned;
16 17
17 - //开始时间  
18 - private long st;  
19 -  
20 //掉头时间 18 //掉头时间
21 private long zt; 19 private long zt;
22 20
23 - //结束时间  
24 - private long et; 21 + //检测时间
  22 + private long ct;
25 23
26 //是否闭合 24 //是否闭合
27 private boolean close; 25 private boolean close;
28 26
  27 + //信号不明确
  28 + private boolean vague;
  29 +
29 public int getCount() { 30 public int getCount() {
30 return count; 31 return count;
31 } 32 }
@@ -50,22 +51,6 @@ public class RouteReverse { @@ -50,22 +51,6 @@ public class RouteReverse {
50 this.turned = turned; 51 this.turned = turned;
51 } 52 }
52 53
53 - public long getSt() {  
54 - return st;  
55 - }  
56 -  
57 - public void setSt(long st) {  
58 - this.st = st;  
59 - }  
60 -  
61 - public long getEt() {  
62 - return et;  
63 - }  
64 -  
65 - public void setEt(long et) {  
66 - this.et = et;  
67 - }  
68 -  
69 public boolean isClose() { 54 public boolean isClose() {
70 return close; 55 return close;
71 } 56 }
@@ -81,4 +66,28 @@ public class RouteReverse { @@ -81,4 +66,28 @@ public class RouteReverse {
81 public void setZt(long zt) { 66 public void setZt(long zt) {
82 this.zt = zt; 67 this.zt = zt;
83 } 68 }
84 -} 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 +}
85 \ 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/arrival/entity/StationRoute.java
1 -package com.bsth.data.gpsdata.arrival.entity;  
2 -  
3 -import com.vividsolutions.jts.geom.Point;  
4 -import com.vividsolutions.jts.geom.Polygon;  
5 -  
6 -/**  
7 - * Created by panzhao on 2016/12/23.  
8 - */  
9 -public class StationRoute {  
10 -  
11 - /**  
12 - * 线路编码  
13 - */  
14 - private String lineCode;  
15 -  
16 - /**  
17 - * 上下行  
18 - */  
19 - private int directions;  
20 -  
21 - /**  
22 - * 站点编码  
23 - */  
24 - private String code;  
25 -  
26 - /**  
27 - * 路由顺序  
28 - */  
29 - private int routeSort;  
30 -  
31 - /**  
32 - * 站点位置  
33 - */  
34 - private Point point;  
35 -  
36 - /**  
37 - * 圆形半径  
38 - */  
39 - private Float radius;  
40 -  
41 - /**  
42 - * 多边形电子围栏  
43 - */  
44 - private Polygon polygon;  
45 -  
46 - /**  
47 - * 站点标记  
48 - */  
49 - private String mark;  
50 -  
51 - /**  
52 - * 下一站  
53 - */  
54 - private StationRoute next;  
55 -  
56 - /**  
57 - * 上一站  
58 - */  
59 - private StationRoute prve;  
60 -  
61 - private String name;  
62 -  
63 - public String getCode() {  
64 - return code;  
65 - }  
66 -  
67 - public void setCode(String code) {  
68 - this.code = code;  
69 - }  
70 -  
71 - public int getRouteSort() {  
72 - return routeSort;  
73 - }  
74 -  
75 - public void setRouteSort(int routeSort) {  
76 - this.routeSort = routeSort;  
77 - }  
78 -  
79 - public Point getPoint() {  
80 - return point;  
81 - }  
82 -  
83 - public void setPoint(Point point) {  
84 - this.point = point;  
85 - }  
86 -  
87 - public Float getRadius() {  
88 - return radius;  
89 - }  
90 -  
91 - public void setRadius(Float radius) {  
92 - this.radius = radius;  
93 - }  
94 -  
95 - public Polygon getPolygon() {  
96 - return polygon;  
97 - }  
98 -  
99 - public void setPolygon(Polygon polygon) {  
100 - this.polygon = polygon;  
101 - }  
102 -  
103 - public String getLineCode() {  
104 - return lineCode;  
105 - }  
106 -  
107 - public void setLineCode(String lineCode) {  
108 - this.lineCode = lineCode;  
109 - }  
110 -  
111 - public int getDirections() {  
112 - return directions;  
113 - }  
114 -  
115 - public void setDirections(int directions) {  
116 - this.directions = directions;  
117 - }  
118 -  
119 - public StationRoute getNext() {  
120 - return next;  
121 - }  
122 -  
123 - public void setNext(StationRoute next) {  
124 - this.next = next;  
125 - }  
126 -  
127 - public StationRoute getPrve() {  
128 - return prve;  
129 - }  
130 -  
131 - public void setPrve(StationRoute prve) {  
132 - this.prve = prve;  
133 - }  
134 -  
135 - public String getMark() {  
136 - return mark;  
137 - }  
138 -  
139 - public void setMark(String mark) {  
140 - this.mark = mark;  
141 - }  
142 -  
143 - public String getName() {  
144 - return name;  
145 - }  
146 -  
147 - public void setName(String name) {  
148 - this.name = name;  
149 - }  
150 -}  
151 - 1 +package com.bsth.data.gpsdata.arrival.entity;
  2 +
  3 +import com.vividsolutions.jts.geom.Point;
  4 +import com.vividsolutions.jts.geom.Polygon;
  5 +
  6 +/**
  7 + * Created by panzhao on 2016/12/23.
  8 + */
  9 +public class StationRoute {
  10 +
  11 + /**
  12 + * 线路编码
  13 + */
  14 + private String lineCode;
  15 +
  16 + /**
  17 + * 上下行
  18 + */
  19 + private int directions;
  20 +
  21 + /**
  22 + * 站点编码
  23 + */
  24 + private String code;
  25 +
  26 + /**
  27 + * 路由顺序
  28 + */
  29 + private int routeSort;
  30 +
  31 + /**
  32 + * 站点位置
  33 + */
  34 + private Point point;
  35 +
  36 + /**
  37 + * 圆形半径
  38 + */
  39 + private Float radius;
  40 +
  41 + /**
  42 + * 多边形电子围栏
  43 + */
  44 + private Polygon polygon;
  45 +
  46 + /**
  47 + * 站点标记
  48 + */
  49 + private String mark;
  50 +
  51 + /**
  52 + * 下一站
  53 + */
  54 + private StationRoute next;
  55 +
  56 + /**
  57 + * 上一站
  58 + */
  59 + private StationRoute prve;
  60 +
  61 + private String name;
  62 +
  63 + public String getCode() {
  64 + return code;
  65 + }
  66 +
  67 + public void setCode(String code) {
  68 + this.code = code;
  69 + }
  70 +
  71 + public int getRouteSort() {
  72 + return routeSort;
  73 + }
  74 +
  75 + public void setRouteSort(int routeSort) {
  76 + this.routeSort = routeSort;
  77 + }
  78 +
  79 + public Point getPoint() {
  80 + return point;
  81 + }
  82 +
  83 + public void setPoint(Point point) {
  84 + this.point = point;
  85 + }
  86 +
  87 + public Float getRadius() {
  88 + return radius;
  89 + }
  90 +
  91 + public void setRadius(Float radius) {
  92 + this.radius = radius;
  93 + }
  94 +
  95 + public Polygon getPolygon() {
  96 + return polygon;
  97 + }
  98 +
  99 + public void setPolygon(Polygon polygon) {
  100 + this.polygon = polygon;
  101 + }
  102 +
  103 + public String getLineCode() {
  104 + return lineCode;
  105 + }
  106 +
  107 + public void setLineCode(String lineCode) {
  108 + this.lineCode = lineCode;
  109 + }
  110 +
  111 + public int getDirections() {
  112 + return directions;
  113 + }
  114 +
  115 + public void setDirections(int directions) {
  116 + this.directions = directions;
  117 + }
  118 +
  119 + public StationRoute getNext() {
  120 + return next;
  121 + }
  122 +
  123 + public void setNext(StationRoute next) {
  124 + this.next = next;
  125 + }
  126 +
  127 + public StationRoute getPrve() {
  128 + return prve;
  129 + }
  130 +
  131 + public void setPrve(StationRoute prve) {
  132 + this.prve = prve;
  133 + }
  134 +
  135 + public String getMark() {
  136 + return mark;
  137 + }
  138 +
  139 + public void setMark(String mark) {
  140 + this.mark = mark;
  141 + }
  142 +
  143 + public String getName() {
  144 + return name;
  145 + }
  146 +
  147 + public void setName(String name) {
  148 + this.name = name;
  149 + }
  150 +}
  151 +
src/main/java/com/bsth/data/gpsdata/arrival/handlers/CorrectSignalHandle.java
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 -} 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
@@ -2,23 +2,21 @@ package com.bsth.data.gpsdata.arrival.handlers; @@ -2,23 +2,21 @@ package com.bsth.data.gpsdata.arrival.handlers;
2 2
3 import com.bsth.data.LineConfigData; 3 import com.bsth.data.LineConfigData;
4 import com.bsth.data.gpsdata.GpsEntity; 4 import com.bsth.data.gpsdata.GpsEntity;
5 -import com.bsth.data.gpsdata.arrival.GeoCacheData;  
6 import com.bsth.data.gpsdata.arrival.SignalHandle; 5 import com.bsth.data.gpsdata.arrival.SignalHandle;
7 -import com.bsth.data.gpsdata.arrival.entity.StationRoute;  
8 import com.bsth.data.gpsdata.arrival.utils.CircleQueue; 6 import com.bsth.data.gpsdata.arrival.utils.CircleQueue;
9 -import com.bsth.data.gpsdata.arrival.utils.GeoUtils; 7 +import com.bsth.data.gpsdata.arrival.utils.ScheduleSignalState;
  8 +import com.bsth.data.gpsdata.arrival.utils.SignalSchPlanMatcher;
10 import com.bsth.data.schedule.DayOfSchedule; 9 import com.bsth.data.schedule.DayOfSchedule;
11 import com.bsth.entity.realcontrol.LineConfig; 10 import com.bsth.entity.realcontrol.LineConfig;
12 import com.bsth.entity.realcontrol.ScheduleRealInfo; 11 import com.bsth.entity.realcontrol.ScheduleRealInfo;
13 import com.bsth.service.directive.DirectiveService; 12 import com.bsth.service.directive.DirectiveService;
14 import com.bsth.websocket.handler.SendUtils; 13 import com.bsth.websocket.handler.SendUtils;
  14 +import org.apache.commons.lang3.StringUtils;
15 import org.slf4j.Logger; 15 import org.slf4j.Logger;
16 import org.slf4j.LoggerFactory; 16 import org.slf4j.LoggerFactory;
17 import org.springframework.beans.factory.annotation.Autowired; 17 import org.springframework.beans.factory.annotation.Autowired;
18 import org.springframework.stereotype.Component; 18 import org.springframework.stereotype.Component;
19 19
20 -import java.util.List;  
21 -  
22 /** 20 /**
23 * 进出站动作处理 21 * 进出站动作处理
24 * Created by panzhao on 2016/12/27. 22 * Created by panzhao on 2016/12/27.
@@ -40,8 +38,25 @@ public class InOutStationSignalHandle extends SignalHandle{ @@ -40,8 +38,25 @@ public class InOutStationSignalHandle extends SignalHandle{
40 @Autowired 38 @Autowired
41 DirectiveService directiveService; 39 DirectiveService directiveService;
42 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 +
43 @Override 49 @Override
44 public boolean handle(GpsEntity gps, CircleQueue<GpsEntity> prevs) { 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 + }
45 60
46 if(isNotEmpty(prevs)){ 61 if(isNotEmpty(prevs)){
47 GpsEntity prev = prevs.getTail(); 62 GpsEntity prev = prevs.getTail();
@@ -91,13 +106,23 @@ public class InOutStationSignalHandle extends SignalHandle{ @@ -91,13 +106,23 @@ public class InOutStationSignalHandle extends SignalHandle{
91 ScheduleRealInfo sch = dayOfSchedule.executeCurr(gps.getNbbm()); 106 ScheduleRealInfo sch = dayOfSchedule.executeCurr(gps.getNbbm());
92 String qdzCode = sch.getQdzCode(); 107 String qdzCode = sch.getQdzCode();
93 108
94 -  
95 - //if(sch.getFcsjActual() != ) 109 + //首班出场最多提前1.2小时
  110 + if(dayOfSchedule.isFirstOut(sch) && sch.getDfsjT() - gps.getTimestamp() > MAX_BEFORE_TIME)
  111 + return;
96 112
97 //起点发车 113 //起点发车
98 if(qdzCode != null && prev.getStopNo().equals(qdzCode) 114 if(qdzCode != null && prev.getStopNo().equals(qdzCode)
99 && !willDepart(gps, prev, sch)){ 115 && !willDepart(gps, prev, sch)){
100 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 + //实发时间
101 sch.setFcsjActualAll(gps.getTimestamp()); 126 sch.setFcsjActualAll(gps.getTimestamp());
102 //通知客户端 127 //通知客户端
103 sendUtils.sendFcsj(sch); 128 sendUtils.sendFcsj(sch);
@@ -108,16 +133,27 @@ public class InOutStationSignalHandle extends SignalHandle{ @@ -108,16 +133,27 @@ public class InOutStationSignalHandle extends SignalHandle{
108 outStationAndOutPark(sch); 133 outStationAndOutPark(sch);
109 logger.info("班次:" + sch.getDfsj() + "发车, 时间:" + sch.getFcsjActual()); 134 logger.info("班次:" + sch.getDfsj() + "发车, 时间:" + sch.getFcsjActual());
110 } 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 + }
111 } 144 }
112 145
  146 +
113 private void outStationAndOutPark(ScheduleRealInfo sch){ 147 private void outStationAndOutPark(ScheduleRealInfo sch){
114 LineConfig config = lineConfigData.get(sch.getXlBm()); 148 LineConfig config = lineConfigData.get(sch.getXlBm());
115 if (config != null && config.getOutConfig() == 2) { 149 if (config != null && config.getOutConfig() == 2) {
116 //出站既出场 150 //出站既出场
117 ScheduleRealInfo schPrev = dayOfSchedule.prev(sch); 151 ScheduleRealInfo schPrev = dayOfSchedule.prev(sch);
118 if (schPrev != null && schPrev.getBcType().equals("out")) { 152 if (schPrev != null && schPrev.getBcType().equals("out")) {
119 - schPrev.setFcsjActualAll(sch.getFcsjActual());  
120 - schPrev.setZdsjActualAll(sch.getFcsjActual()); 153 + schPrev.setFcsjActualAll(sch.getFcsjActualTime());
  154 + schPrev.setZdsjActualAll(sch.getFcsjActualTime());
  155 +
  156 + sendUtils.refreshSch(schPrev);
121 } 157 }
122 } 158 }
123 } 159 }
@@ -129,9 +165,12 @@ public class InOutStationSignalHandle extends SignalHandle{ @@ -129,9 +165,12 @@ public class InOutStationSignalHandle extends SignalHandle{
129 */ 165 */
130 private void inStation(GpsEntity gps, GpsEntity prev){ 166 private void inStation(GpsEntity gps, GpsEntity prev){
131 ScheduleRealInfo sch = dayOfSchedule.executeCurr(gps.getNbbm()); 167 ScheduleRealInfo sch = dayOfSchedule.executeCurr(gps.getNbbm());
132 - String zdzCode = sch.getZdzCode();  
133 168
134 - if(zdzCode != null && gps.getStopNo().equals(zdzCode)){ 169 + if(gps.getStopNo().equals(sch.getZdzCode())){
  170 +
  171 + //实达时间不覆盖
  172 + if(StringUtils.isNotEmpty(sch.getZdsjActual()))
  173 + return;
135 174
136 sch.setZdsjActualAll(gps.getTimestamp()); 175 sch.setZdsjActualAll(gps.getTimestamp());
137 //已完成班次数 176 //已完成班次数
@@ -142,33 +181,22 @@ public class InOutStationSignalHandle extends SignalHandle{ @@ -142,33 +181,22 @@ public class InOutStationSignalHandle extends SignalHandle{
142 //持久化 181 //持久化
143 dayOfSchedule.save(sch); 182 dayOfSchedule.save(sch);
144 //下发调度指令 183 //下发调度指令
145 - //directiveService.send60Dispatch(next, doneSum, "到站@系统"); 184 + directiveService.send60Dispatch(next, doneSum, "到站@系统");
146 185
147 //准备执行下一个班次 186 //准备执行下一个班次
148 if (next != null) { 187 if (next != null) {
149 next.setQdzArrDatesj(sch.getZdsjActual()); 188 next.setQdzArrDatesj(sch.getZdsjActual());
150 dayOfSchedule.addExecPlan(next); 189 dayOfSchedule.addExecPlan(next);
151 -  
152 //进站既进场 190 //进站既进场
153 inStationAndInPark(sch, next); 191 inStationAndInPark(sch, next);
154 -  
155 //将gps转换为下一个班次走向的站内信号 192 //将gps转换为下一个班次走向的站内信号
156 - int updown = Integer.parseInt(next.getXlDir());  
157 - List<StationRoute> srs = GeoCacheData.getStationRoute(next.getXlBm(), updown);  
158 - StationRoute station = GeoUtils.gpsInStation(gps, srs);  
159 - if (station != null) {  
160 - gps.setUpDown(updown);  
161 - gps.setStopNo(station.getCode());  
162 - } 193 + transformUpdown(gps, sch);
163 } 194 }
164 } 195 }
165 - /* //如果出场班次计划终点时间5分钟后还未完成,检查一下车辆轨迹,是否已经在执行线路上班次  
166 - else if(sch.getBcType().equals("out")  
167 - && sch.getZdsj() != null  
168 - && gps.getTimestamp() - sch.getZdsjT() >= 1000 * 60 * 5){  
169 - logger.info("出场班次计划终点时间5分钟后还未完成");  
170 -  
171 - }*/ 196 + else if(sch.getFcsjActual() == null){
  197 + //有进站,但班次没有实发,向前追溯一下信号
  198 + scheduleSignalState.signalRetrospect(gps, sch);
  199 + }
172 } 200 }
173 201
174 /** 202 /**
@@ -179,8 +207,10 @@ public class InOutStationSignalHandle extends SignalHandle{ @@ -179,8 +207,10 @@ public class InOutStationSignalHandle extends SignalHandle{
179 LineConfig config = lineConfigData.get(sch.getXlBm()); 207 LineConfig config = lineConfigData.get(sch.getXlBm());
180 if (next.getBcType().equals("in") && 208 if (next.getBcType().equals("in") &&
181 config != null && config.getOutConfig() == 2) { 209 config != null && config.getOutConfig() == 2) {
182 - next.setFcsjActualAll(sch.getZdsjActual());  
183 - next.setZdsjActualAll(sch.getZdsjActual()); 210 + next.setFcsjActualAll(sch.getZdsjActualTime());
  211 + next.setZdsjActualAll(sch.getZdsjActualTime());
  212 +
  213 + sendUtils.refreshSch(next);
184 } 214 }
185 } 215 }
186 216
@@ -193,7 +223,7 @@ public class InOutStationSignalHandle extends SignalHandle{ @@ -193,7 +223,7 @@ public class InOutStationSignalHandle extends SignalHandle{
193 */ 223 */
194 private boolean willDepart(GpsEntity gps, GpsEntity prev, Object task){ 224 private boolean willDepart(GpsEntity gps, GpsEntity prev, Object task){
195 225
196 -/* ScheduleRealInfo sch = (ScheduleRealInfo) task; 226 + /*ScheduleRealInfo sch = (ScheduleRealInfo) task;
197 ScheduleRealInfo prevTask = dayOfSchedule.prev(sch); 227 ScheduleRealInfo prevTask = dayOfSchedule.prev(sch);
198 if(prevTask == null || prevTask.getBcType().equals("out")) 228 if(prevTask == null || prevTask.getBcType().equals("out"))
199 return false; 229 return false;
src/main/java/com/bsth/data/gpsdata/arrival/handlers/OfflineSignalHandle.java
@@ -13,16 +13,17 @@ import org.springframework.stereotype.Component; @@ -13,16 +13,17 @@ import org.springframework.stereotype.Component;
13 @Component 13 @Component
14 public class OfflineSignalHandle extends SignalHandle{ 14 public class OfflineSignalHandle extends SignalHandle{
15 15
16 - //断开3分钟,标记为重连信号  
17 - private final static int OFFLINE_TIME = 1000 * 60 * 3; 16 + //断开2分钟,标记为重连信号
  17 + private final static int OFFLINE_TIME = 1000 * 60 * 2;
18 18
19 //断开70分钟,之前的信号不再有参考价值 19 //断开70分钟,之前的信号不再有参考价值
20 private final static int CLEAR_TIME = 1000 * 60 * 70; 20 private final static int CLEAR_TIME = 1000 * 60 * 70;
21 21
22 @Override 22 @Override
23 public boolean handle(GpsEntity gps, CircleQueue<GpsEntity> prevs) { 23 public boolean handle(GpsEntity gps, CircleQueue<GpsEntity> prevs) {
24 - //异常信号不管  
25 - if(isAbnormal(gps)){ 24 + //漂移信号不管
  25 + if(isDriftSignal(gps)){
  26 + gps.setSignalState("drift");
26 return true; 27 return true;
27 } 28 }
28 29
@@ -39,4 +40,4 @@ public class OfflineSignalHandle extends SignalHandle{ @@ -39,4 +40,4 @@ public class OfflineSignalHandle extends SignalHandle{
39 } 40 }
40 return true; 41 return true;
41 } 42 }
42 -} 43 -}
  44 +}
43 \ No newline at end of file 45 \ No newline at end of file
src/main/java/com/bsth/data/gpsdata/arrival/handlers/ReverseSignalHandle.java
1 package com.bsth.data.gpsdata.arrival.handlers; 1 package com.bsth.data.gpsdata.arrival.handlers;
2 2
3 -import com.alibaba.fastjson.JSON;  
4 import com.bsth.data.gpsdata.GpsEntity; 3 import com.bsth.data.gpsdata.GpsEntity;
5 import com.bsth.data.gpsdata.arrival.GeoCacheData; 4 import com.bsth.data.gpsdata.arrival.GeoCacheData;
6 import com.bsth.data.gpsdata.arrival.SignalHandle; 5 import com.bsth.data.gpsdata.arrival.SignalHandle;
7 import com.bsth.data.gpsdata.arrival.entity.RouteReverse; 6 import com.bsth.data.gpsdata.arrival.entity.RouteReverse;
8 import com.bsth.data.gpsdata.arrival.entity.StationRoute; 7 import com.bsth.data.gpsdata.arrival.entity.StationRoute;
9 import com.bsth.data.gpsdata.arrival.utils.CircleQueue; 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; 10 import com.bsth.data.schedule.DayOfSchedule;
11 -import com.bsth.entity.realcontrol.ScheduleRealInfo;  
12 import org.slf4j.Logger; 11 import org.slf4j.Logger;
13 import org.slf4j.LoggerFactory; 12 import org.slf4j.LoggerFactory;
14 import org.springframework.beans.factory.annotation.Autowired; 13 import org.springframework.beans.factory.annotation.Autowired;
@@ -26,6 +25,9 @@ public class ReverseSignalHandle extends SignalHandle { @@ -26,6 +25,9 @@ public class ReverseSignalHandle extends SignalHandle {
26 @Autowired 25 @Autowired
27 DayOfSchedule dayOfSchedule; 26 DayOfSchedule dayOfSchedule;
28 27
  28 + @Autowired
  29 + ScheduleSignalState scheduleSignalState;
  30 +
29 @Override 31 @Override
30 public boolean handle(GpsEntity gps, CircleQueue<GpsEntity> prevs) { 32 public boolean handle(GpsEntity gps, CircleQueue<GpsEntity> prevs) {
31 if (!isNotEmpty(prevs)) 33 if (!isNotEmpty(prevs))
@@ -36,17 +38,10 @@ public class ReverseSignalHandle extends SignalHandle { @@ -36,17 +38,10 @@ public class ReverseSignalHandle extends SignalHandle {
36 if (isReverse(gps, prev)) { 38 if (isReverse(gps, prev)) {
37 RouteReverse reverse = reverseSearch(prevs, gps); 39 RouteReverse reverse = reverseSearch(prevs, gps);
38 40
39 - if (reverse.getCount() >= 2) {  
40 - //切换到下一个班次  
41 - ScheduleRealInfo sch = dayOfSchedule.executeCurr(gps.getNbbm());  
42 - if (sch.getBcType().equals("out") && sch.getZdsjT() != null && sch.getZdsjT() > gps.getTimestamp()) {  
43 - return false;  
44 - }  
45 - dayOfSchedule.addExecPlan(dayOfSchedule.next(sch));  
46 -  
47 - if (reverse.isClose()) {  
48 - logger.info("区间掉头,车辆:" + gps.getNbbm() + " -" + JSON.toJSONString(reverse));  
49 - } 41 + if (reverse.getCount() >= 4
  42 + && reverse.isClose()
  43 + && !GeoCacheData.isEndStation(gps.getLineId(), gps.getUpDown(), reverse.getTurned())) {
  44 + scheduleSignalState.reverseAnalyse(reverse);
50 } 45 }
51 } 46 }
52 return false; 47 return false;
@@ -63,7 +58,8 @@ public class ReverseSignalHandle extends SignalHandle { @@ -63,7 +58,8 @@ public class ReverseSignalHandle extends SignalHandle {
63 RouteReverse routeReverse = new RouteReverse(); 58 RouteReverse routeReverse = new RouteReverse();
64 int count = 0; 59 int count = 0;
65 String path = ""; 60 String path = "";
66 - String turned = null; 61 + long zt = 0L;
  62 + boolean half = false;
67 63
68 //当前站点 64 //当前站点
69 StationRoute curr = GeoCacheData.getRouteCode(gps), sr; 65 StationRoute curr = GeoCacheData.getRouteCode(gps), sr;
@@ -72,22 +68,29 @@ public class ReverseSignalHandle extends SignalHandle { @@ -72,22 +68,29 @@ public class ReverseSignalHandle extends SignalHandle {
72 for (int i = array.length - 1; i > 0; i--) { 68 for (int i = array.length - 1; i > 0; i--) {
73 prev = (GpsEntity) array[i]; 69 prev = (GpsEntity) array[i];
74 70
75 - if(!prev.getUpDown().equals(gps.getUpDown())) 71 + if (!prev.getUpDown().equals(gps.getUpDown())
  72 + || prev.getSignalState().equals("reconnection"))
76 break; 73 break;
77 74
78 if (prev.getInstation() == 1) { 75 if (prev.getInstation() == 1) {
79 sr = GeoCacheData.getRouteCode(prev); 76 sr = GeoCacheData.getRouteCode(prev);
80 77
81 if (sr.getRouteSort() > curr.getRouteSort()) { 78 if (sr.getRouteSort() > curr.getRouteSort()) {
  79 + if(half){
  80 + routeReverse.setVague(true);
  81 + }
  82 +
82 path += (curr.getCode() + ","); 83 path += (curr.getCode() + ",");
83 count++; 84 count++;
  85 + zt = prev.getTimestamp();
84 } else if (sr.getRouteSort() < curr.getRouteSort()) { 86 } else if (sr.getRouteSort() < curr.getRouteSort()) {
85 - path += (curr.getCode() + ",");  
86 - //掉头点  
87 - if (turned == null)  
88 - turned = prev.getStopNo(); 87 + if (routeReverse.getTurned() == null) {
  88 + routeReverse.setTurned(curr.getCode());
  89 + half = true;
  90 + }
89 91
90 - //路径闭合 92 + path += (curr.getCode() + ",");
  93 + //掉头前当前站
91 if (sr.getCode().equals(gps.getStopNo())) { 94 if (sr.getCode().equals(gps.getStopNo())) {
92 routeReverse.setClose(true); 95 routeReverse.setClose(true);
93 path += sr.getCode(); 96 path += sr.getCode();
@@ -99,9 +102,11 @@ public class ReverseSignalHandle extends SignalHandle { @@ -99,9 +102,11 @@ public class ReverseSignalHandle extends SignalHandle {
99 } 102 }
100 } 103 }
101 104
  105 + routeReverse.setZt(zt);
102 routeReverse.setCount(count); 106 routeReverse.setCount(count);
103 routeReverse.setDetail(path); 107 routeReverse.setDetail(path);
104 - routeReverse.setTurned(turned); 108 + routeReverse.setCt(gps.getTimestamp());
  109 + routeReverse.setNbbm(gps.getNbbm());
105 return routeReverse; 110 return routeReverse;
106 } 111 }
107 112
@@ -129,4 +134,4 @@ public class ReverseSignalHandle extends SignalHandle { @@ -129,4 +134,4 @@ public class ReverseSignalHandle extends SignalHandle {
129 } 134 }
130 return false; 135 return false;
131 } 136 }
132 -} 137 -}
  138 +}
133 \ No newline at end of file 139 \ No newline at end of file
src/main/java/com/bsth/data/gpsdata/arrival/handlers/StationInsideHandle.java
1 -package com.bsth.data.gpsdata.arrival.handlers;  
2 -  
3 -import com.bsth.data.gpsdata.GpsEntity;  
4 -import com.bsth.data.gpsdata.arrival.GeoCacheData;  
5 -import com.bsth.data.gpsdata.arrival.SignalHandle;  
6 -import com.bsth.data.gpsdata.arrival.entity.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 -} 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/arrival/utils/CircleQueue.java
1 -package com.bsth.data.gpsdata.arrival.utils;  
2 -  
3 -import java.util.Arrays;  
4 -  
5 -/**  
6 - * 循环队列  
7 - * Created by panzhao on 2016/12/23.  
8 - */  
9 -public class CircleQueue<T> {  
10 -  
11 - /**  
12 - * (循环队列)数组的容量  
13 - */  
14 - public int capacity;  
15 -  
16 - /**  
17 - * 数组:保存循环队列的元素  
18 - */  
19 - public Object[] elementData;  
20 -  
21 - /**  
22 - * 头  
23 - */  
24 - public int head = 0;  
25 -  
26 - /**  
27 - * 尾  
28 - */  
29 - public int tail = 0;  
30 -  
31 - /**  
32 - * 以指定长度的数组来创建循环队列  
33 - *  
34 - * @param initSize  
35 - */  
36 - public CircleQueue(final int initSize) {  
37 - capacity = initSize;  
38 - elementData = new Object[capacity];  
39 - }  
40 -  
41 - /**  
42 - * 获取循环队列的大小  
43 - */  
44 - public int size() {  
45 - if (isEmpty()) {  
46 - return 0;  
47 - } else if (isFull()) {  
48 - return capacity;  
49 - } else {  
50 - return tail + 1;  
51 - }  
52 - }  
53 -  
54 - /**  
55 - * 插入队尾一个元素  
56 - */  
57 - public void add(final T element) {  
58 - if (isEmpty()) {  
59 - elementData[0] = element;  
60 - } else if (isFull()) {  
61 - elementData[head] = element;  
62 - head++;  
63 - tail++;  
64 - head = head == capacity ? 0 : head;  
65 - tail = tail == capacity ? 0 : tail;  
66 - } else {  
67 - elementData[tail + 1] = element;  
68 - tail++;  
69 - }  
70 - }  
71 -  
72 - public boolean isEmpty() {  
73 - return tail == head && tail == 0 && elementData[tail] == null;  
74 - }  
75 -  
76 - public boolean isFull() {  
77 - return head != 0 && head - tail == 1 || head == 0 && tail == capacity - 1;  
78 - }  
79 -  
80 - public void clear() {  
81 - Arrays.fill(elementData, null);  
82 - head = 0;  
83 - tail = 0;  
84 - }  
85 -  
86 - /**  
87 - * @return 取 循环队列里的值(先进的index=0)  
88 - */  
89 - public Object[] getQueue() {  
90 - final Object[] elementDataSort;  
91 - final Object[] elementDataCopy = elementData.clone();  
92 - if (isEmpty()) {  
93 - elementDataSort = new Object[0];  
94 - } else if (isFull()) {  
95 - elementDataSort = new Object[capacity];  
96 - int indexMax = capacity;  
97 - int indexSort = 0;  
98 - for (int i = head; i < indexMax;) {  
99 - elementDataSort[indexSort] = elementDataCopy[i];  
100 - indexSort++;  
101 - i++;  
102 - if (i == capacity) {  
103 - i = 0;  
104 - indexMax = head;  
105 - }  
106 - }  
107 - } else {  
108 - elementDataSort = new Object[tail];  
109 - for (int i = 0; i < tail; i++) {  
110 - elementDataSort[i] = elementDataCopy[i];  
111 - }  
112 - }  
113 - return elementDataSort;  
114 - }  
115 -  
116 - /**  
117 - * 取最后一个值  
118 - * @return  
119 - */  
120 - public T getTail(){  
121 - return elementData[tail] == null?null:(T)elementData[tail];  
122 - } 1 +package com.bsth.data.gpsdata.arrival.utils;
  2 +
  3 +import java.util.Arrays;
  4 +
  5 +/**
  6 + * 循环队列
  7 + * Created by panzhao on 2016/12/23.
  8 + */
  9 +public class CircleQueue<T> {
  10 +
  11 + /**
  12 + * (循环队列)数组的容量
  13 + */
  14 + public int capacity;
  15 +
  16 + /**
  17 + * 数组:保存循环队列的元素
  18 + */
  19 + public Object[] elementData;
  20 +
  21 + /**
  22 + * 头
  23 + */
  24 + public int head = 0;
  25 +
  26 + /**
  27 + * 尾
  28 + */
  29 + public int tail = 0;
  30 +
  31 + /**
  32 + * 以指定长度的数组来创建循环队列
  33 + *
  34 + * @param initSize
  35 + */
  36 + public CircleQueue(final int initSize) {
  37 + capacity = initSize;
  38 + elementData = new Object[capacity];
  39 + }
  40 +
  41 + /**
  42 + * 获取循环队列的大小
  43 + */
  44 + public int size() {
  45 + if (isEmpty()) {
  46 + return 0;
  47 + } else if (isFull()) {
  48 + return capacity;
  49 + } else {
  50 + return tail + 1;
  51 + }
  52 + }
  53 +
  54 + /**
  55 + * 插入队尾一个元素
  56 + */
  57 + public void add(final T element) {
  58 + if (isEmpty()) {
  59 + elementData[0] = element;
  60 + } else if (isFull()) {
  61 + elementData[head] = element;
  62 + head++;
  63 + tail++;
  64 + head = head == capacity ? 0 : head;
  65 + tail = tail == capacity ? 0 : tail;
  66 + } else {
  67 + elementData[tail + 1] = element;
  68 + tail++;
  69 + }
  70 + }
  71 +
  72 + public boolean isEmpty() {
  73 + return tail == head && tail == 0 && elementData[tail] == null;
  74 + }
  75 +
  76 + public boolean isFull() {
  77 + return head != 0 && head - tail == 1 || head == 0 && tail == capacity - 1;
  78 + }
  79 +
  80 + public void clear() {
  81 + Arrays.fill(elementData, null);
  82 + head = 0;
  83 + tail = 0;
  84 + }
  85 +
  86 + /**
  87 + * @return 取 循环队列里的值(先进的index=0)
  88 + */
  89 + public Object[] getQueue() {
  90 + final Object[] elementDataSort;
  91 + final Object[] elementDataCopy = elementData.clone();
  92 + if (isEmpty()) {
  93 + elementDataSort = new Object[0];
  94 + } else if (isFull()) {
  95 + elementDataSort = new Object[capacity];
  96 + int indexMax = capacity;
  97 + int indexSort = 0;
  98 + for (int i = head; i < indexMax;) {
  99 + elementDataSort[indexSort] = elementDataCopy[i];
  100 + indexSort++;
  101 + i++;
  102 + if (i == capacity) {
  103 + i = 0;
  104 + indexMax = head;
  105 + }
  106 + }
  107 + } else {
  108 + elementDataSort = new Object[tail + 1];
  109 + for (int i = 0; i <= tail; i++) {
  110 + elementDataSort[i] = elementDataCopy[i];
  111 + }
  112 + }
  113 + return elementDataSort;
  114 + }
  115 +
  116 + /**
  117 + * 取最后一个值
  118 + * @return
  119 + */
  120 + public T getTail(){
  121 + return elementData[tail] == null?null:(T)elementData[tail];
  122 + }
123 } 123 }
124 \ No newline at end of file 124 \ No newline at end of file
src/main/java/com/bsth/data/gpsdata/arrival/utils/GeoUtils.java
1 -package com.bsth.data.gpsdata.arrival.utils;  
2 -  
3 -import com.bsth.data.gpsdata.GpsEntity;  
4 -import com.bsth.data.gpsdata.arrival.GeoCacheData;  
5 -import com.bsth.data.gpsdata.arrival.entity.StationRoute;  
6 -import com.vividsolutions.jts.geom.Coordinate;  
7 -import com.vividsolutions.jts.geom.GeometryFactory;  
8 -import com.vividsolutions.jts.geom.Point;  
9 -import com.vividsolutions.jts.geom.Polygon;  
10 -  
11 -import java.util.List;  
12 -import java.util.Map;  
13 -import java.util.Set;  
14 -  
15 -/**  
16 - * Created by panzhao on 2016/12/23.  
17 - */  
18 -public class GeoUtils {  
19 -  
20 - private final static double EARTHRADIUS = 6378137;  
21 -  
22 - private static GeometryFactory geometryFactory = new GeometryFactory();  
23 - /**  
24 - * gps是否在路由上的某个站内  
25 - *  
26 - * @param gps  
27 - * @param srs  
28 - * @return  
29 - */  
30 - public static StationRoute gpsInStation(GpsEntity gps, List<StationRoute> srs) {  
31 - Point point = geometryFactory.createPoint(new Coordinate(gps.getLat(), gps.getLon()));  
32 - double min = -1, distance, distance2;  
33 - StationRoute stationRoute = null;  
34 -  
35 - for (StationRoute sr : srs) {  
36 - if (sr.getPolygon() == null) {  
37 - //圆形  
38 - distance = getDistance(sr.getPoint(), point);//sr.getPoint().distance(point);  
39 -  
40 - if (distance > sr.getRadius())  
41 - continue;  
42 -  
43 - if (min > distance || min == -1) {  
44 - min = distance;  
45 - stationRoute = sr;  
46 - }  
47 - } else {  
48 - //多边形  
49 - if (sr.getPolygon().contains(point)) {  
50 - stationRoute = sr;  
51 - break;  
52 - }  
53 - }  
54 - }  
55 - return stationRoute;  
56 - }  
57 -  
58 - public static double getDistance(Point p1, Point p2) {  
59 - double lng1 = getLoop(p1.getY(), -180, 180), lat1 = getRange(  
60 - p1.getX(), -74, 74);  
61 - double lng2 = getLoop(p2.getY(), -180, 180), lat2 = getRange(  
62 - p2.getX(), -74, 74);  
63 -  
64 - double x1, x2, y1, y2;  
65 - x1 = degreeToRad(lng1);  
66 - y1 = degreeToRad(lat1);  
67 - x2 = degreeToRad(lng2);  
68 - y2 = degreeToRad(lat2);  
69 - return EARTHRADIUS  
70 - * Math.acos((Math.sin(y1) * Math.sin(y2) + Math.cos(y1)  
71 - * Math.cos(y2) * Math.cos(x2 - x1)));  
72 - }  
73 -  
74 - private static double getLoop(double v, double a, double b) {  
75 - while (v > b) {  
76 - v -= b - a;  
77 - }  
78 - while (v < a) {  
79 - v += b - a;  
80 - }  
81 - return v;  
82 - }  
83 -  
84 - private static double getRange(double v, double a, double b) {  
85 - v = Math.min(Math.max(v, a), b);  
86 - return v;  
87 - }  
88 -  
89 - private static double degreeToRad(double degree) {  
90 - return Math.PI * degree / 180;  
91 - }  
92 -  
93 -  
94 - /**  
95 - * gps 是否在某个停车场内  
96 - * @param gps  
97 - * @return  
98 - */  
99 - public static String gpsInCarpark(GpsEntity gps){  
100 - Point point = geometryFactory.createPoint(new Coordinate(gps.getLat(), gps.getLon()));  
101 -  
102 - Map<String, Polygon> carparkMap = GeoCacheData.tccMap;  
103 - Set<String> codes = carparkMap.keySet();  
104 - Polygon polygon;  
105 - for(String code : codes){  
106 - polygon = carparkMap.get(code);  
107 - if(point.within(polygon)){  
108 - return code;  
109 - }  
110 - }  
111 - return null;  
112 - }  
113 -  
114 - /**  
115 - * 是否是有效的连续点  
116 - * @param prevGps  
117 - * @param gps  
118 - * @return  
119 - */  
120 - public static boolean overdue(GpsEntity prevGps, GpsEntity gps) {  
121 - return gps.getTimestamp() - prevGps.getTimestamp() < 120000;  
122 - }  
123 -} 1 +package com.bsth.data.gpsdata.arrival.utils;
  2 +
  3 +import com.bsth.data.gpsdata.GpsEntity;
  4 +import com.bsth.data.gpsdata.arrival.GeoCacheData;
  5 +import com.bsth.data.gpsdata.arrival.entity.StationRoute;
  6 +import com.vividsolutions.jts.geom.Coordinate;
  7 +import com.vividsolutions.jts.geom.GeometryFactory;
  8 +import com.vividsolutions.jts.geom.Point;
  9 +import com.vividsolutions.jts.geom.Polygon;
  10 +
  11 +import java.util.List;
  12 +import java.util.Map;
  13 +import java.util.Set;
  14 +
  15 +/**
  16 + * Created by panzhao on 2016/12/23.
  17 + */
  18 +public class GeoUtils {
  19 +
  20 + private final static double EARTHRADIUS = 6378137;
  21 +
  22 + private static GeometryFactory geometryFactory = new GeometryFactory();
  23 + /**
  24 + * gps是否在路由上的某个站内
  25 + *
  26 + * @param gps
  27 + * @param srs
  28 + * @return
  29 + */
  30 + public static StationRoute gpsInStation(GpsEntity gps, List<StationRoute> srs) {
  31 + Point point = geometryFactory.createPoint(new Coordinate(gps.getLat(), gps.getLon()));
  32 + double min = -1, distance, distance2;
  33 + StationRoute stationRoute = null;
  34 +
  35 + for (StationRoute sr : srs) {
  36 + if (sr.getPolygon() == null) {
  37 + //圆形
  38 + distance = getDistance(sr.getPoint(), point);//sr.getPoint().distance(point);
  39 +
  40 + if (distance > sr.getRadius())
  41 + continue;
  42 +
  43 + if (min > distance || min == -1) {
  44 + min = distance;
  45 + stationRoute = sr;
  46 + }
  47 + } else {
  48 + //多边形
  49 + if (sr.getPolygon().contains(point)) {
  50 + stationRoute = sr;
  51 + break;
  52 + }
  53 + }
  54 + }
  55 + return stationRoute;
  56 + }
  57 +
  58 + public static double getDistance(Point p1, Point p2) {
  59 + double lng1 = getLoop(p1.getY(), -180, 180), lat1 = getRange(
  60 + p1.getX(), -74, 74);
  61 + double lng2 = getLoop(p2.getY(), -180, 180), lat2 = getRange(
  62 + p2.getX(), -74, 74);
  63 +
  64 + double x1, x2, y1, y2;
  65 + x1 = degreeToRad(lng1);
  66 + y1 = degreeToRad(lat1);
  67 + x2 = degreeToRad(lng2);
  68 + y2 = degreeToRad(lat2);
  69 + return EARTHRADIUS
  70 + * Math.acos((Math.sin(y1) * Math.sin(y2) + Math.cos(y1)
  71 + * Math.cos(y2) * Math.cos(x2 - x1)));
  72 + }
  73 +
  74 + private static double getLoop(double v, double a, double b) {
  75 + while (v > b) {
  76 + v -= b - a;
  77 + }
  78 + while (v < a) {
  79 + v += b - a;
  80 + }
  81 + return v;
  82 + }
  83 +
  84 + private static double getRange(double v, double a, double b) {
  85 + v = Math.min(Math.max(v, a), b);
  86 + return v;
  87 + }
  88 +
  89 + private static double degreeToRad(double degree) {
  90 + return Math.PI * degree / 180;
  91 + }
  92 +
  93 +
  94 + /**
  95 + * gps 是否在某个停车场内
  96 + * @param gps
  97 + * @return
  98 + */
  99 + public static String gpsInCarpark(GpsEntity gps){
  100 + Point point = geometryFactory.createPoint(new Coordinate(gps.getLat(), gps.getLon()));
  101 +
  102 + Map<String, Polygon> carparkMap = GeoCacheData.tccMap;
  103 + Set<String> codes = carparkMap.keySet();
  104 + Polygon polygon;
  105 + for(String code : codes){
  106 + polygon = carparkMap.get(code);
  107 + if(point.within(polygon)){
  108 + return code;
  109 + }
  110 + }
  111 + return null;
  112 + }
  113 +
  114 + /**
  115 + * 是否是有效的连续点
  116 + * @param prevGps
  117 + * @param gps
  118 + * @return
  119 + */
  120 + public static boolean overdue(GpsEntity prevGps, GpsEntity gps) {
  121 + return gps.getTimestamp() - prevGps.getTimestamp() < 120000;
  122 + }
  123 +}
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/arrival/utils/StationRouteComp.java
1 -package com.bsth.data.gpsdata.arrival.utils;  
2 -  
3 -import com.bsth.data.gpsdata.arrival.entity.StationRoute;  
4 -  
5 -import java.util.Comparator;  
6 -  
7 -/**  
8 - * Created by panzhao on 2016/12/24.  
9 - */  
10 -public class StationRouteComp implements Comparator<StationRoute>{  
11 - @Override  
12 - public int compare(StationRoute s1, StationRoute s2) {  
13 - return s1.getRouteSort() - s2.getRouteSort();  
14 - }  
15 -} 1 +package com.bsth.data.gpsdata.arrival.utils;
  2 +
  3 +import com.bsth.data.gpsdata.arrival.entity.StationRoute;
  4 +
  5 +import java.util.Comparator;
  6 +
  7 +/**
  8 + * Created by panzhao on 2016/12/24.
  9 + */
  10 +public class StationRouteComp implements Comparator<StationRoute>{
  11 + @Override
  12 + public int compare(StationRoute s1, StationRoute s2) {
  13 + return s1.getRouteSort() - s2.getRouteSort();
  14 + }
  15 +}
src/main/java/com/bsth/data/gpsdata/recovery/GpsDataRecovery.java
@@ -28,7 +28,7 @@ import java.util.concurrent.Executors; @@ -28,7 +28,7 @@ import java.util.concurrent.Executors;
28 * Created by panzhao on 2016/12/24. 28 * Created by panzhao on 2016/12/24.
29 */ 29 */
30 @Component 30 @Component
31 -public class GpsDataRecovery implements ApplicationContextAware{ 31 +public class GpsDataRecovery implements ApplicationContextAware {
32 32
33 static Logger logger = LoggerFactory.getLogger(GpsDataRecovery.class); 33 static Logger logger = LoggerFactory.getLogger(GpsDataRecovery.class);
34 34
@@ -48,7 +48,7 @@ public class GpsDataRecovery implements ApplicationContextAware{ @@ -48,7 +48,7 @@ public class GpsDataRecovery implements ApplicationContextAware{
48 //按车辆分组数据 48 //按车辆分组数据
49 ArrayListMultimap<String, GpsEntity> listMap = ArrayListMultimap.create(); 49 ArrayListMultimap<String, GpsEntity> listMap = ArrayListMultimap.create();
50 for (GpsEntity gps : list) { 50 for (GpsEntity gps : list) {
51 - if(gps.getNbbm() != null) 51 + if (gps.getNbbm() != null)
52 listMap.put(gps.getNbbm(), gps); 52 listMap.put(gps.getNbbm(), gps);
53 } 53 }
54 54
@@ -60,6 +60,8 @@ public class GpsDataRecovery implements ApplicationContextAware{ @@ -60,6 +60,8 @@ public class GpsDataRecovery implements ApplicationContextAware{
60 for (String nbbm : keys) { 60 for (String nbbm : keys) {
61 Collections.sort(listMap.get(nbbm), comp); 61 Collections.sort(listMap.get(nbbm), comp);
62 threadPool.execute(new RecoveryThread(listMap.get(nbbm), count)); 62 threadPool.execute(new RecoveryThread(listMap.get(nbbm), count));
  63 + /*if(nbbm.equals("YT-CD008"))
  64 + new RecoveryThread(listMap.get(nbbm), count).run();*/
63 } 65 }
64 66
65 try { 67 try {
@@ -124,7 +126,7 @@ public class GpsDataRecovery implements ApplicationContextAware{ @@ -124,7 +126,7 @@ public class GpsDataRecovery implements ApplicationContextAware{
124 reverseSignalHandle = applicationContext.getBean(ReverseSignalHandle.class); 126 reverseSignalHandle = applicationContext.getBean(ReverseSignalHandle.class);
125 } 127 }
126 128
127 - public static class GpsComp implements Comparator<GpsEntity>{ 129 + public static class GpsComp implements Comparator<GpsEntity> {
128 130
129 @Override 131 @Override
130 public int compare(GpsEntity g1, GpsEntity g2) { 132 public int compare(GpsEntity g1, GpsEntity g2) {
@@ -132,26 +134,28 @@ public class GpsDataRecovery implements ApplicationContextAware{ @@ -132,26 +134,28 @@ public class GpsDataRecovery implements ApplicationContextAware{
132 } 134 }
133 } 135 }
134 136
135 - public static class RecoveryThread implements Runnable{ 137 + public static class RecoveryThread implements Runnable {
136 List<GpsEntity> list; 138 List<GpsEntity> list;
137 CountDownLatch count; 139 CountDownLatch count;
138 140
139 - RecoveryThread(List<GpsEntity> list, CountDownLatch count){ 141 + RecoveryThread(List<GpsEntity> list, CountDownLatch count) {
140 this.list = list; 142 this.list = list;
141 this.count = count; 143 this.count = count;
142 } 144 }
  145 +
143 @Override 146 @Override
144 public void run() { 147 public void run() {
145 try { 148 try {
146 //循环gps恢复数据 149 //循环gps恢复数据
147 CircleQueue<GpsEntity> prevs; 150 CircleQueue<GpsEntity> prevs;
148 151
149 - for(GpsEntity gps : list){ 152 + for (GpsEntity gps : list) {
  153 +
150 prevs = GeoCacheData.getGps(gps.getNbbm()); 154 prevs = GeoCacheData.getGps(gps.getNbbm());
151 //掉线处理 155 //掉线处理
152 offlineSignalHandle.handle(gps, prevs); 156 offlineSignalHandle.handle(gps, prevs);
153 //状态处理 157 //状态处理
154 - if(!correctSignalHandle.handle(gps, prevs)) 158 + if (!correctSignalHandle.handle(gps, prevs))
155 continue; 159 continue;
156 //场,站内外判断 160 //场,站内外判断
157 stationInsideHandle.handle(gps, prevs); 161 stationInsideHandle.handle(gps, prevs);
@@ -160,11 +164,12 @@ public class GpsDataRecovery implements ApplicationContextAware{ @@ -160,11 +164,12 @@ public class GpsDataRecovery implements ApplicationContextAware{
160 //进出站动作处理 164 //进出站动作处理
161 inOutStationSignalHandle.handle(gps, prevs); 165 inOutStationSignalHandle.handle(gps, prevs);
162 GeoCacheData.putGps(gps); 166 GeoCacheData.putGps(gps);
  167 +
  168 + //Thread.sleep(50);
163 } 169 }
164 - }catch (Exception e){ 170 + } catch (Exception e) {
165 logger.error("", e); 171 logger.error("", e);
166 - }  
167 - finally { 172 + } finally {
168 count.countDown(); 173 count.countDown();
169 } 174 }
170 } 175 }
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,19 +116,14 @@ public class DayOfSchedule implements CommandLineRunner { @@ -117,19 +116,14 @@ public class DayOfSchedule implements CommandLineRunner {
117 LineConfigData lineConfigs; 116 LineConfigData lineConfigs;
118 117
119 @Autowired 118 @Autowired
120 - BasicData.BasicDataLoader dataLoader;  
121 -  
122 - @Autowired  
123 GpsDataRecovery gpsDataRecovery; 119 GpsDataRecovery gpsDataRecovery;
124 120
125 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");
126 122
127 @Override 123 @Override
128 public void run(String... arg0) throws Exception { 124 public void run(String... arg0) throws Exception {
129 - //加载基础数据  
130 - dataLoader.loadAllData();  
131 //从数据库恢复排班 125 //从数据库恢复排班
132 - dataRecovery(); 126 + //dataRecovery();
133 127
134 //翻班线程 128 //翻班线程
135 // Application.mainServices.scheduleWithFixedDelay(scheduleRefreshThread, 15, 240, TimeUnit.SECONDS); 129 // Application.mainServices.scheduleWithFixedDelay(scheduleRefreshThread, 15, 240, TimeUnit.SECONDS);
@@ -138,7 +132,7 @@ public class DayOfSchedule implements CommandLineRunner { @@ -138,7 +132,7 @@ public class DayOfSchedule implements CommandLineRunner {
138 //首班出场指令补发器 132 //首班出场指令补发器
139 // Application.mainServices.scheduleWithFixedDelay(firstScheduleCheckThread, 30, 240, TimeUnit.SECONDS); 133 // Application.mainServices.scheduleWithFixedDelay(firstScheduleCheckThread, 30, 240, TimeUnit.SECONDS);
140 //班次误点扫描 134 //班次误点扫描
141 - Application.mainServices.scheduleWithFixedDelay(scheduleLateThread, 60, 60, TimeUnit.SECONDS); 135 +// Application.mainServices.scheduleWithFixedDelay(scheduleLateThread, 60, 60, TimeUnit.SECONDS);
142 136
143 //每天凌晨2点20提交数据到运管处 137 //每天凌晨2点20提交数据到运管处
144 long diff = (DateUtils.getTimestamp() + 1000 * 60 * 140) - System.currentTimeMillis(); 138 long diff = (DateUtils.getTimestamp() + 1000 * 60 * 140) - System.currentTimeMillis();
@@ -224,15 +218,8 @@ public class DayOfSchedule implements CommandLineRunner { @@ -224,15 +218,8 @@ public class DayOfSchedule implements CommandLineRunner {
224 reCalcExecPlan(nbbm); 218 reCalcExecPlan(nbbm);
225 } 219 }
226 220
227 - //是否是出站即出场  
228 - LineConfig conf = lineConfigData.get(lineCode);  
229 - if (conf.getOutConfig() == 2) {  
230 - for (String nbbm : cars)  
231 - schAttrCalculator.connectOutSchedule(nbbmScheduleMap.get(nbbm));  
232 - }  
233 -  
234 // 页面 翻班通知 221 // 页面 翻班通知
235 - sendUtils.shiftSchedule(lineCode); 222 + //sendUtils.shiftSchedule(lineCode);
236 } catch (Exception e) { 223 } catch (Exception e) {
237 logger.error("", e); 224 logger.error("", e);
238 return -1; 225 return -1;
@@ -503,6 +490,41 @@ public class DayOfSchedule implements CommandLineRunner { @@ -503,6 +490,41 @@ public class DayOfSchedule implements CommandLineRunner {
503 } 490 }
504 491
505 /** 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 + /**
506 * 上一个班次 528 * 上一个班次
507 * 529 *
508 * @param sch 530 * @param sch
@@ -527,6 +549,18 @@ public class DayOfSchedule implements CommandLineRunner { @@ -527,6 +549,18 @@ public class DayOfSchedule implements CommandLineRunner {
527 return prev; 549 return prev;
528 } 550 }
529 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 +
530 public void put(ScheduleRealInfo sch) { 564 public void put(ScheduleRealInfo sch) {
531 schAttrCalculator 565 schAttrCalculator
532 .calcRealDate(sch) 566 .calcRealDate(sch)
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/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/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/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 }
src/main/java/com/bsth/service/schedule/PeopleCarPlanServiceImpl.java
@@ -180,6 +180,7 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService { @@ -180,6 +180,7 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService {
180 180
181 181
182 } catch (Exception e) { 182 } catch (Exception e) {
  183 +
183 // TODO Auto-generated catch block 184 // TODO Auto-generated catch block
184 e.printStackTrace(); 185 e.printStackTrace();
185 } 186 }
@@ -313,6 +314,8 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService { @@ -313,6 +314,8 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService {
313 // TODO Auto-generated catch block 314 // TODO Auto-generated catch block
314 e.printStackTrace(); 315 e.printStackTrace();
315 } 316 }
  317 + String companyName = "", subCompanyName = "";
  318 +
316 for(String key : keyMap.keySet()){ 319 for(String key : keyMap.keySet()){
317 Map<String, Object> tempMap = new HashMap<String, Object>(); 320 Map<String, Object> tempMap = new HashMap<String, Object>();
318 Map<String, List <ScheduleRealInfo>> listMap = new HashMap<String, List <ScheduleRealInfo>>(); 321 Map<String, List <ScheduleRealInfo>> listMap = new HashMap<String, List <ScheduleRealInfo>>();
@@ -323,6 +326,10 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService { @@ -323,6 +326,10 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService {
323 int jhzgf = 0, sjzgf = 0, jhwgf = 0, sjwgf = 0; 326 int jhzgf = 0, sjzgf = 0, jhwgf = 0, sjwgf = 0;
324 for(ScheduleRealInfo schedule : keyMap.get(key)){ 327 for(ScheduleRealInfo schedule : keyMap.get(key)){
325 // schedule.setFcsjAll(schedule.getFcsj()); 328 // schedule.setFcsjAll(schedule.getFcsj());
  329 + if(companyName.length() == 0 && schedule.getGsName() != null)
  330 + companyName = schedule.getGsName();
  331 + if(subCompanyName.length() == 0 && schedule.getFgsName() != null)
  332 + subCompanyName = schedule.getFgsName();
326 333
327 //早晚高峰时段执行率 334 //早晚高峰时段执行率
328 if(schedule.getFcsjT() >= zgfBegin && schedule.getFcsjT() <= zgfEnd){ 335 if(schedule.getFcsjT() >= zgfBegin && schedule.getFcsjT() <= zgfEnd){
@@ -424,6 +431,8 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService { @@ -424,6 +431,8 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService {
424 431
425 } 432 }
426 433
  434 + tempMap.put("company", companyName);
  435 + tempMap.put("subCompany", subCompanyName);
427 tempMap.put("date", date); 436 tempMap.put("date", date);
428 tempMap.put("line", key); 437 tempMap.put("line", key);
429 tempMap.put("jhbc", jhbc); 438 tempMap.put("jhbc", jhbc);
@@ -509,6 +518,8 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService { @@ -509,6 +518,8 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService {
509 schedule.setScheduleDateStr(rs.getString("schedule_date_Str")); 518 schedule.setScheduleDateStr(rs.getString("schedule_date_Str"));
510 schedule.setXlName(rs.getString("xl_name")); 519 schedule.setXlName(rs.getString("xl_name"));
511 schedule.setBcType(rs.getString("bc_type")); 520 schedule.setBcType(rs.getString("bc_type"));
  521 + schedule.setGsName(rs.getString("gs_name"));
  522 + schedule.setFgsName(rs.getString("fgs_name"));
512 schedule.setBcs(rs.getInt("bcs")); 523 schedule.setBcs(rs.getInt("bcs"));
513 schedule.setFcno(rs.getInt("fcno")); 524 schedule.setFcno(rs.getInt("fcno"));
514 schedule.setFcsj(rs.getString("fcsj")); 525 schedule.setFcsj(rs.getString("fcsj"));
@@ -588,6 +599,7 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService { @@ -588,6 +599,7 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService {
588 } 599 }
589 } 600 }
590 } 601 }
  602 + String companyName = "", subCompanyName = "";
591 for(String key : keyMap.keySet()){ 603 for(String key : keyMap.keySet()){
592 Map<String, Object> tempMap = new HashMap<String, Object>(); 604 Map<String, Object> tempMap = new HashMap<String, Object>();
593 List<Integer> fcsj = new ArrayList<Integer>(); 605 List<Integer> fcsj = new ArrayList<Integer>();
@@ -595,6 +607,11 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService { @@ -595,6 +607,11 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService {
595 int jhbc = 0; 607 int jhbc = 0;
596 int sjbc = 0; 608 int sjbc = 0;
597 for(ScheduleRealInfo schedule : keyMap.get(key)){ 609 for(ScheduleRealInfo schedule : keyMap.get(key)){
  610 + if(companyName.length() == 0 && schedule.getGsName() != null)
  611 + companyName = schedule.getGsName();
  612 + if(subCompanyName.length() == 0 && schedule.getFgsName() != null)
  613 + subCompanyName = schedule.getFgsName();
  614 +
598 tempMap.put("date", schedule.getScheduleDateStr()); 615 tempMap.put("date", schedule.getScheduleDateStr());
599 tempMap.put("bcsj", schedule.getBcsj()); 616 tempMap.put("bcsj", schedule.getBcsj());
600 if(schedule.getFcsjActual() != null){ 617 if(schedule.getFcsjActual() != null){
@@ -654,6 +671,8 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService { @@ -654,6 +671,8 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService {
654 tempMap.put("zmys", "/"); 671 tempMap.put("zmys", "/");
655 tempMap.put("pjys", "/"); 672 tempMap.put("pjys", "/");
656 } 673 }
  674 + tempMap.put("company", companyName);
  675 + tempMap.put("subCompany", subCompanyName);
657 String[] split = key.split("/"); 676 String[] split = key.split("/");
658 tempMap.put("line", split[0]); 677 tempMap.put("line", split[0]);
659 tempMap.put("qdz", split[1]); 678 tempMap.put("qdz", split[1]);
src/main/java/com/bsth/websocket/handler/SendUtils.java
1 package com.bsth.websocket.handler; 1 package com.bsth.websocket.handler;
2 2
3 -import java.text.SimpleDateFormat;  
4 -import java.util.ArrayList;  
5 -import java.util.Date;  
6 -import java.util.HashMap;  
7 -import java.util.List;  
8 -import java.util.Map;  
9 -  
10 -import org.slf4j.Logger;  
11 -import org.slf4j.LoggerFactory;  
12 -import org.springframework.beans.factory.annotation.Autowired;  
13 -import org.springframework.stereotype.Component;  
14 -  
15 import com.alibaba.fastjson.JSONObject; 3 import com.alibaba.fastjson.JSONObject;
16 import com.bsth.data.BasicData; 4 import com.bsth.data.BasicData;
17 import com.bsth.data.LineConfigData; 5 import com.bsth.data.LineConfigData;
18 -import com.bsth.data.schedule.DayOfSchedule; 6 +import com.bsth.data.gpsdata.arrival.entity.SignalState;
19 import com.bsth.entity.directive.D80; 7 import com.bsth.entity.directive.D80;
20 import com.bsth.entity.realcontrol.ScheduleRealInfo; 8 import com.bsth.entity.realcontrol.ScheduleRealInfo;
21 import com.fasterxml.jackson.core.JsonProcessingException; 9 import com.fasterxml.jackson.core.JsonProcessingException;
22 import com.fasterxml.jackson.databind.ObjectMapper; 10 import com.fasterxml.jackson.databind.ObjectMapper;
  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 +import java.text.SimpleDateFormat;
  17 +import java.util.*;
23 18
24 @Component 19 @Component
25 public class SendUtils{ 20 public class SendUtils{
@@ -40,7 +35,7 @@ public class SendUtils{ @@ -40,7 +35,7 @@ public class SendUtils{
40 */ 35 */
41 public void sendFcsj(ScheduleRealInfo sch) { 36 public void sendFcsj(ScheduleRealInfo sch) {
42 //处理出站即出场的班次 37 //处理出站即出场的班次
43 - connectOutSchTime(sch); 38 + //connectOutSchTime(sch);
44 39
45 Map<String, Object> map = new HashMap<>(); 40 Map<String, Object> map = new HashMap<>();
46 map.put("fn", "faChe"); 41 map.put("fn", "faChe");
@@ -86,7 +81,7 @@ public class SendUtils{ @@ -86,7 +81,7 @@ public class SendUtils{
86 */ 81 */
87 public void sendZdsj(ScheduleRealInfo sch, ScheduleRealInfo nextSch, int finish) { 82 public void sendZdsj(ScheduleRealInfo sch, ScheduleRealInfo nextSch, int finish) {
88 //处理进站即进场的班次 83 //处理进站即进场的班次
89 - connectInSchTime(sch); 84 + //connectInSchTime(sch);
90 85
91 Map<String, Object> map = new HashMap<>(); 86 Map<String, Object> map = new HashMap<>();
92 map.put("fn", "zhongDian"); 87 map.put("fn", "zhongDian");
@@ -103,12 +98,30 @@ public class SendUtils{ @@ -103,12 +98,30 @@ public class SendUtils{
103 logger.error("", e); 98 logger.error("", e);
104 } 99 }
105 } 100 }
  101 +
  102 + /**
  103 + * 推送班次信号状态
  104 + * @param state
  105 + */
  106 + public void sendSignalState(SignalState state){
  107 + Map<String, Object> map = new HashMap<>();
  108 + map.put("fn", "signal_state");
  109 + map.put("data", state);
  110 +
  111 + ObjectMapper mapper = new ObjectMapper();
  112 +
  113 + try {
  114 + socketHandler.sendMessageToLine(state.getLineCode(), mapper.writeValueAsString(map));
  115 + } catch (Exception e) {
  116 + logger.error("", e);
  117 + }
  118 + }
106 119
107 /** 120 /**
108 * 121 *
109 * @Title: shiftSchedule 122 * @Title: shiftSchedule
110 * @Description: TODO(线路翻班通知) 123 * @Description: TODO(线路翻班通知)
111 - */ 124 +
112 public void shiftSchedule(String lineCode){ 125 public void shiftSchedule(String lineCode){
113 Map<String, Object> map = new HashMap<>(); 126 Map<String, Object> map = new HashMap<>();
114 map.put("fn", "systemNotice"); 127 map.put("fn", "systemNotice");
@@ -124,7 +137,7 @@ public class SendUtils{ @@ -124,7 +137,7 @@ public class SendUtils{
124 logger.error("", e); 137 logger.error("", e);
125 } 138 }
126 } 139 }
127 - 140 + */
128 /** 141 /**
129 * 142 *
130 * @Title: sendDirectiveToPage 143 * @Title: sendDirectiveToPage
@@ -157,39 +170,4 @@ public class SendUtils{ @@ -157,39 +170,4 @@ public class SendUtils{
157 list.add(sch); 170 list.add(sch);
158 refreshSch(list); 171 refreshSch(list);
159 } 172 }
160 -  
161 -  
162 - //出站即出场  
163 - public void connectOutSchTime(ScheduleRealInfo sch){  
164 - try{  
165 - ScheduleRealInfo twins = sch.getTwinsSch();  
166 - if(twins != null  
167 - && lineConfigData.get(sch.getXlBm()).getOutConfig() == 2  
168 - && twins.getBcType().equals("out")){  
169 -  
170 - twins.setFcsjActualAll(sch.getFcsjActualTime());  
171 - //刷新关联的出场班次  
172 - //refreshSch(twins);  
173 - }  
174 - }catch(Exception e){  
175 - logger.error("", e);  
176 - }  
177 - }  
178 -  
179 - //进站即出场  
180 - public void connectInSchTime(ScheduleRealInfo sch){  
181 - try{  
182 - ScheduleRealInfo twins = sch.getTwinsSch();  
183 - if(twins != null  
184 - && lineConfigData.get(sch.getXlBm()).getOutConfig() == 2  
185 - && twins.getBcType().equals("in")){  
186 -  
187 - twins.setZdsjActualAll(sch.getZdsjActualTime());  
188 - //刷新关联的出场班次  
189 - //refreshSch(twins);  
190 - }  
191 - }catch(Exception e){  
192 - logger.error("", e);  
193 - }  
194 - }  
195 } 173 }
src/main/resources/static/pages/excep/boundList.html
@@ -82,7 +82,9 @@ @@ -82,7 +82,9 @@
82 <option value="-1">无效</option> 82 <option value="-1">无效</option>
83 </select> 83 </select>
84 </td> 84 </td>
85 - <td></td> 85 + <td>
  86 + <input class="form-control" type="date" name="date" />
  87 + </td>
86 <td> 88 <td>
87 <button class="btn btn-sm green btn-outline filter-submit margin-bottom" > 89 <button class="btn btn-sm green btn-outline filter-submit margin-bottom" >
88 <i class="fa fa-search"></i> 搜索</button> 90 <i class="fa fa-search"></i> 搜索</button>
@@ -237,8 +239,20 @@ $(function(){ @@ -237,8 +239,20 @@ $(function(){
237 initPagination = false; 239 initPagination = false;
238 return; 240 return;
239 } 241 }
  242 + var cells = $('tr.filter')[0].cells
  243 + ,params = {}
  244 + ,name;
  245 + $.each(cells, function(i, cell){
  246 + var items = $('input,select', cell);
  247 + for(var j = 0, item; item = items[j++];){
  248 + name = $(item).attr('name');
  249 + if(name){
  250 + params[name] = $(item).val();
  251 + }
  252 + }
  253 + });
240 page = num - 1; 254 page = num - 1;
241 - jsDoQuery(null, false); 255 + jsDoQuery(params, false);
242 } 256 }
243 }); 257 });
244 } 258 }
src/main/resources/static/pages/excep/offlineList.html
@@ -82,7 +82,9 @@ @@ -82,7 +82,9 @@
82 <option value="-1">无效</option> 82 <option value="-1">无效</option>
83 </select> 83 </select>
84 </td> 84 </td>
85 - <td></td> 85 + <td>
  86 + <input class="form-control" type="date" name="date" />
  87 + </td>
86 <td> 88 <td>
87 <button class="btn btn-sm green btn-outline filter-submit margin-bottom" > 89 <button class="btn btn-sm green btn-outline filter-submit margin-bottom" >
88 <i class="fa fa-search"></i> 搜索</button> 90 <i class="fa fa-search"></i> 搜索</button>
@@ -242,7 +244,20 @@ $(function(){ @@ -242,7 +244,20 @@ $(function(){
242 244
243 245
244 page = num - 1; 246 page = num - 1;
245 - jsDoQuery(null, false); 247 +
  248 + var cells = $('tr.filter')[0].cells
  249 + ,params = {}
  250 + ,name;
  251 + $.each(cells, function(i, cell){
  252 + var items = $('input,select', cell);
  253 + for(var j = 0, item; item = items[j++];){
  254 + name = $(item).attr('name');
  255 + if(name){
  256 + params[name] = $(item).val();
  257 + }
  258 + }
  259 + });
  260 + jsDoQuery(params, false);
246 } 261 }
247 }); 262 });
248 } 263 }
src/main/resources/static/pages/excep/speedingList.html
@@ -72,6 +72,7 @@ @@ -72,6 +72,7 @@
72 <input type="text" class="form-control form-filter input-sm" name="nbbm"> 72 <input type="text" class="form-control form-filter input-sm" name="nbbm">
73 </td> 73 </td>
74 <td> 74 <td>
  75 + <input class="form-control" type="date" name="date" />
75 </td> 76 </td>
76 <td></td> 77 <td></td>
77 <td> 78 <td>
@@ -238,7 +239,19 @@ $(function(){ @@ -238,7 +239,19 @@ $(function(){
238 return; 239 return;
239 } 240 }
240 page = num - 1; 241 page = num - 1;
241 - jsDoQuery(null, false); 242 + var cells = $('tr.filter')[0].cells
  243 + ,params = {}
  244 + ,name;
  245 + $.each(cells, function(i, cell){
  246 + var items = $('input,select', cell);
  247 + for(var j = 0, item; item = items[j++];){
  248 + name = $(item).attr('name');
  249 + if(name){
  250 + params[name] = $(item).val();
  251 + }
  252 + }
  253 + });
  254 + jsDoQuery(params, false);
242 } 255 }
243 }); 256 });
244 } 257 }
src/main/resources/static/pages/forms/mould/allline.xls
No preview for this file type
src/main/resources/static/pages/forms/mould/daily.xls
No preview for this file type
src/main/resources/static/pages/forms/mould/peoCarPlan.xls
No preview for this file type
src/main/resources/static/pages/forms/mould/scheduleAnaly.xls
No preview for this file type
src/main/resources/static/pages/forms/mould/workDaily.xls
No preview for this file type
src/main/resources/static/pages/forms/statement/account.html
@@ -133,7 +133,7 @@ @@ -133,7 +133,7 @@
133 133
134 $("#query").on("click",function(){ 134 $("#query").on("click",function(){
135 var line = $("#line").val(); 135 var line = $("#line").val();
136 - var xlName = $("#line").text(); 136 + var xlName = $("#select2-line-container").html();
137 var date = $("#date").val(); 137 var date = $("#date").val();
138 var code = $("#code").val(); 138 var code = $("#code").val();
139 $(".hidden").removeClass("hidden"); 139 $(".hidden").removeClass("hidden");
src/main/resources/static/pages/forms/statement/correctForm.html
@@ -49,7 +49,7 @@ @@ -49,7 +49,7 @@
49 </div> 49 </div>
50 <div class="form-group"> 50 <div class="form-group">
51 <input class="btn btn-default" type="button" id="query" value="筛选"/> 51 <input class="btn btn-default" type="button" id="query" value="筛选"/>
52 - <input class="btn btn-default" type="button" id="export" value="导出"/> 52 +<!-- <input class="btn btn-default" type="button" id="export" value="导出"/> -->
53 </div> 53 </div>
54 </form> 54 </form>
55 </div> 55 </div>
src/main/resources/static/pages/forms/statement/daily.html
@@ -26,7 +26,15 @@ @@ -26,7 +26,15 @@
26 <div class="col-md-12"> 26 <div class="col-md-12">
27 <div class="portlet light porttlet-fit bordered"> 27 <div class="portlet light porttlet-fit bordered">
28 <div class="portlet-title"> 28 <div class="portlet-title">
29 - <form class="form-inline" action=""> 29 + <form class="form-inline" action="">
  30 + <div style="display: inline-block; margin-left: 33px;" id="gsdmDiv_daily">
  31 + <span class="item-label" style="width: 80px;">公司: </span>
  32 + <select class="form-control" name="company" id="gsdmDaily" style="width: 140px;"></select>
  33 + </div>
  34 + <div style="display: inline-block; margin-left: 24px;" id="fgsdmDiv_daily">
  35 + <span class="item-label" style="width: 80px;">分公司: </span>
  36 + <select class="form-control" name="subCompany" id="fgsdmDaily" style="width: 140px;"></select>
  37 + </div>
30 <div style="display: inline-block;"> 38 <div style="display: inline-block;">
31 <span class="item-label" style="width: 80px;">线路: </span> 39 <span class="item-label" style="width: 80px;">线路: </span>
32 <select class="form-control" name="line" id="line" style="width: 180px;"></select> 40 <select class="form-control" name="line" id="line" style="width: 180px;"></select>
@@ -64,15 +72,15 @@ @@ -64,15 +72,15 @@
64 <td>班次</td> 72 <td>班次</td>
65 </tr> 73 </tr>
66 </thead> 74 </thead>
67 - <tbody class="dailyInfo"> 75 + <tbody id="tbody">
68 76
69 </tbody> 77 </tbody>
70 <tr> 78 <tr>
71 <td colspan="3">小计</td> 79 <td colspan="3">小计</td>
72 <td><span id="total_zgl">&nbsp;</span></td> 80 <td><span id="total_zgl">&nbsp;</span></td>
73 - <td><span id="total_ksgl">&nbsp;</span></td> 81 + <td><span id="total_ks">&nbsp;</span></td>
74 <td><span id="total_yh">&nbsp;</span></td> 82 <td><span id="total_yh">&nbsp;</span></td>
75 - <td><span id="total_bcs">&nbsp;</span></td> 83 + <td><span id="total_bc">&nbsp;</span></td>
76 </tr> 84 </tr>
77 </table> 85 </table>
78 </div> 86 </div>
@@ -82,7 +90,9 @@ @@ -82,7 +90,9 @@
82 </div> 90 </div>
83 91
84 <script> 92 <script>
85 - $(function(){ 93 + $(function(){
  94 + var reqCodeMap = {"0xA1": '请求恢复运营', "0xA2": '申请调档', "0xA3": '出场请求', "0xA5": '进场请求', "0xA7": '加油请求', "0x50": '车辆故障', "0x70": '路阻报告', "0x60": '事故报告', "0x11": '扣证纠纷', "0x12" : '报警'};
  95 +
86 // 关闭左侧栏 96 // 关闭左侧栏
87 if (!$('body').hasClass('page-sidebar-closed')) 97 if (!$('body').hasClass('page-sidebar-closed'))
88 $('.menu-toggler.sidebar-toggler').click(); 98 $('.menu-toggler.sidebar-toggler').click();
@@ -92,6 +102,42 @@ @@ -92,6 +102,42 @@
92 locale : 'zh-cn' 102 locale : 'zh-cn'
93 }); 103 });
94 104
  105 + var obj = [];
  106 + $.get('/user/companyData', function(result){
  107 + obj = result;
  108 + var options = '';
  109 + for(var i = 0; i < obj.length; i++){
  110 + options += '<option value="'+obj[i].companyCode+'">'+obj[i].companyName+'</option>';
  111 + }
  112 +
  113 + if(obj.length ==0){
  114 + $("#gsdmDiv_daily").css('display','none');
  115 + $('#gsdmDiv_daily').css('display','none');
  116 + }else if(obj.length ==1){
  117 + $("#fgsdmDiv_daily").css('display','none');
  118 + if(obj[0].children.length == 1 || obj[0].children.length ==0)
  119 + $('#fgsdmDiv_daily').css('display','none');
  120 + }
  121 + $('#gsdmDaily').html(options);
  122 + updateCompany();
  123 + });
  124 +
  125 + $("#gsdmDaily").on("change",updateCompany);
  126 + function updateCompany(){
  127 + var company = $('#gsdmDaily').val();
  128 + var options = '';
  129 + for(var i = 0; i < obj.length; i++){
  130 + if(obj[i].companyCode == company){
  131 + var children = obj[i].children;
  132 + for(var j = 0; j < children.length; j++){
  133 + options += '<option value="'+children[j].code+'">'+children[j].name+'</option>';
  134 + }
  135 + }
  136 + }
  137 + $('#fgsdmDaily').html(options);
  138 + }
  139 +
  140 +
95 $.get('/basic/lineCode2Name',function(result){ 141 $.get('/basic/lineCode2Name',function(result){
96 var data=[]; 142 var data=[];
97 143
@@ -101,50 +147,82 @@ @@ -101,50 +147,82 @@
101 initPinYinSelect2('#line',data,''); 147 initPinYinSelect2('#line',data,'');
102 148
103 }) 149 })
104 - var line;  
105 - var date;  
106 - $("#query").on("click",function(){  
107 - line = $("#line").val();  
108 - var lineName=$("#select2-line-container").html();  
109 - date = $("#date").val();  
110 - $get('/realSchedule/dailyInfo',{line:line,date:date,type:'query'},function(result){  
111 - $("#form_line").text(lineName);  
112 - $("#form_date").text(date);  
113 - var total_zgl = 0,total_ksgl = 0,total_yh = 0,total_bcs = 0;  
114 - $.each(result, function(i, obj) {  
115 - total_zgl = Number(obj.zgl)+Number(total_zgl);  
116 - total_ksgl = Number(obj.ksgl)+Number(total_ksgl);  
117 - total_yh = Number(0)+Number(total_yh);  
118 - total_bcs = Number(obj.bcs)+Number(total_bcs);  
119 - });  
120 - $("#total_zgl").text(total_zgl.toFixed(2));  
121 - $("#total_ksgl").text(total_ksgl.toFixed(2));  
122 - $("#total_yh").text(total_yh.toFixed(2));  
123 - $("#total_bcs").text(total_bcs);  
124 -  
125 - // 把数据填充到模版中  
126 - var tbodyHtml = template('dailyInfo',{list:result});  
127 - // 把渲染好的模版html文本追加到表格中  
128 - $('#forms .dailyInfo').html(tbodyHtml);  
129 - }); 150 +
  151 + var line;
  152 + var date;
  153 + var gsdmDaily;
  154 + var fgsdmDaily;
  155 + $("#query").on("click",function(){
  156 +
  157 + line = $("#line").val();
  158 + var lineName=$("#select2-line-container").html();
  159 + date = $("#date").val();
  160 + gsdmDaily=$("#gsdmDaily").val();
  161 + fgsdmDaily = $("#fgsdmDaily").val();
  162 +
  163 + $post('/mcy_forms/daily',{gsdmDaily:gsdmDaily,fgsdmDaily:fgsdmDaily, line:line,date:date,type:'query'},function(result){
  164 + $("#form_line").text(lineName);
  165 + $("#form_date").text(date);
  166 + // 把数据填充到模版中
  167 + var tbodyHtml = template('dailyInfo',{list:result});
  168 + // 把渲染好的模版html文本追加到表格中
  169 + $('#tbody').html(tbodyHtml);
  170 + line = $("#line").val();
  171 +
  172 + startDate = $("#startDate").val();
  173 + endDate = $("#endDate").val();
  174 + $("#sDate").text(startDate);
  175 + $("#eDate").text(endDate);
  176 +
  177 + var total_zgl = 0,total_ks = 0;
  178 + var total_yh = 0,total_bc = 0;
  179 +
  180 + $.each(result, function(i, obj) {
  181 + total_zgl +=Number(obj.zlc);
  182 + total_ks +=Number(obj.jzl1);
  183 + total_yh += Number(obj.yh);
  184 + total_bc += Number(obj.bc);
  185 +
  186 + });
  187 + $("#total_zgl").text(total_zgl.toFixed(2));
  188 + $("#total_ks").text(total_ks.toFixed(2));
  189 + $("#total_yh").text(total_yh.toFixed(2));
  190 + $("#total_bc").text(total_bc.toFixed(2));
  191 +
  192 + var temp = {};
  193 + var today_account = 0;
  194 +
  195 + temp["line"] = $("#line").text();
  196 + $.each(result, function(i, obj) {
  197 + if(moment(obj.schedule_date_str).format("YYYY-MM-DD") == moment(obj.startDate).format("YYYY-MM-DD")){
  198 + today_account++;
  199 + }
  200 + obj.updateDate = moment(obj.startDate).format("YYYY-MM-DD HH:mm:ss");
  201 + });
  202 + })
  203 + });
  204 +
  205 + $("#export").on("click",function(){
  206 + line = $("#line").val();
  207 + date = $("#date").val();
  208 + gsdmDaily=$("#gsdmDaily").val();
  209 + fgsdmDaily = $("#fgsdmDaily").val();
  210 + $post('/mcy_export/dailyExport',{gsdmDaily:gsdmDaily,fgsdmDaily:fgsdmDaily,line:line,date:date,type:'export'},function(result){
  211 + window.open("/downloadFile/download?fileName=班次日报表"+moment(date).format("YYYYMMDD"));
130 }); 212 });
131 - $("#export").on("click",function(){  
132 - $get('/realSchedule/dailyInfo',{line:line,date:date,type:'export'},function(result){  
133 - window.open("/downloadFile/download?fileName=班次日报"+moment(date).format("YYYYMMDD"));  
134 - });  
135 - });  
136 - }); 213 + });
  214 +});
137 </script> 215 </script>
138 <script type="text/html" id="dailyInfo"> 216 <script type="text/html" id="dailyInfo">
139 {{each list as obj i}} 217 {{each list as obj i}}
140 <tr> 218 <tr>
141 - <td>{{obj.clZbh}}</td>  
142 - <td>{{obj.jGh}}</td> 219 + <td>{{obj.zbh}}</td>
  220 + <td>{{obj.jgh}}</td>
143 <td>{{obj.jName}}</td> 221 <td>{{obj.jName}}</td>
144 - <td>{{obj.zgl}}</td>  
145 - <td>{{obj.ksgl}}</td>  
146 - <td>0</td>  
147 - <td>{{obj.bcs}}</td> 222 + <td>{{obj.zlc}}</td>
  223 + <td>{{obj.jzl1}}</td>
  224 + <td>{{obj.yh}}</td>
  225 + <td>{{obj.bc}}</td>
148 </tr> 226 </tr>
149 {{/each}} 227 {{/each}}
150 {{if list.length == 0}} 228 {{if list.length == 0}}
src/main/resources/static/pages/forms/statement/firstAndLastBus.html
@@ -97,6 +97,7 @@ @@ -97,6 +97,7 @@
97 97
98 <script> 98 <script>
99 $(function(){ 99 $(function(){
  100 + $('#export').attr('disabled', "true");
100 101
101 // 关闭左侧栏 102 // 关闭左侧栏
102 if (!$('body').hasClass('page-sidebar-closed')) 103 if (!$('body').hasClass('page-sidebar-closed'))
@@ -186,11 +187,22 @@ @@ -186,11 +187,22 @@
186 // 把渲染好的模版html文本追加到表格中 187 // 把渲染好的模版html文本追加到表格中
187 $('#forms tbody').html(tbodyHtml); 188 $('#forms tbody').html(tbodyHtml);
188 189
  190 + if(result.length == 0)
  191 + $("#export").attr('disabled',"true");
  192 + else
  193 + $("#export").removeAttr("disabled");
189 }); 194 });
190 } 195 }
191 196
192 $("#export").on("click",function(){ 197 $("#export").on("click",function(){
193 - $get('/pcpc/firstAndLastBus',{line:line,date:date,type:'export'},function(result){ 198 + var params = {};
  199 + params['company'] = company;
  200 + params['subCompany'] = subCompany;
  201 + params['line'] = line;
  202 + params['line'] = line;
  203 + params['date'] = date;
  204 + params['type'] = "export";
  205 + $get('/pcpc/firstAndLastBus', params, function(result){
194 window.open("/downloadFile/download?fileName=线路首末班"+moment(date).format("YYYYMMDD")); 206 window.open("/downloadFile/download?fileName=线路首末班"+moment(date).format("YYYYMMDD"));
195 }); 207 });
196 }); 208 });
src/main/resources/static/pages/forms/statement/historyMessage.html
@@ -41,7 +41,7 @@ @@ -41,7 +41,7 @@
41 </div> 41 </div>
42 <div class="form-group"> 42 <div class="form-group">
43 <input class="btn btn-default" type="button" id="query" value="筛选"/> 43 <input class="btn btn-default" type="button" id="query" value="筛选"/>
44 - <input class="btn btn-default" type="button" id="export" value="导出"/> 44 +<!-- <input class="btn btn-default" type="button" id="export" value="导出"/> -->
45 </div> 45 </div>
46 </form> 46 </form>
47 </div> 47 </div>
src/main/resources/static/pages/forms/statement/peopleCarPlan.html
@@ -80,6 +80,7 @@ @@ -80,6 +80,7 @@
80 80
81 <script> 81 <script>
82 $(function(){ 82 $(function(){
  83 + $('#export').attr('disabled', "true");
83 84
84 // 关闭左侧栏 85 // 关闭左侧栏
85 if (!$('body').hasClass('page-sidebar-closed')) 86 if (!$('body').hasClass('page-sidebar-closed'))
@@ -168,11 +169,21 @@ @@ -168,11 +169,21 @@
168 // 把渲染好的模版html文本追加到表格中 169 // 把渲染好的模版html文本追加到表格中
169 $('#forms tbody').html(tbodyHtml); 170 $('#forms tbody').html(tbodyHtml);
170 171
  172 + if(result.length == 0)
  173 + $("#export").attr('disabled',"true");
  174 + else
  175 + $("#export").removeAttr("disabled");
171 }); 176 });
172 } 177 }
173 178
174 $("#export").on("click",function(){ 179 $("#export").on("click",function(){
175 - $get('/pcpc/queryPeopleCar',{line:line,date:date,type:'export'},function(result){ 180 + var params = {};
  181 + params['company'] = company;
  182 + params['subCompany'] = subCompany;
  183 + params['line'] = line;
  184 + params['date'] = date;
  185 + params['type'] = "export";
  186 + $get('/pcpc/queryPeopleCar', params, function(result){
176 window.open("/downloadFile/download?fileName=计划车辆班次人员"+moment(date).format("YYYYMMDD")); 187 window.open("/downloadFile/download?fileName=计划车辆班次人员"+moment(date).format("YYYYMMDD"));
177 }); 188 });
178 }); 189 });
src/main/resources/static/pages/forms/statement/scheduleAnaly.html
@@ -65,18 +65,21 @@ @@ -65,18 +65,21 @@
65 <table class="table table-bordered table-hover table-checkable" id="forms"> 65 <table class="table table-bordered table-hover table-checkable" id="forms">
66 <thead> 66 <thead>
67 <tr class="hidden"> 67 <tr class="hidden">
68 - <th width="10%">线路</th>  
69 - <th width="10%">起点站名</th>  
70 - <th width="8%">计发时间</th>  
71 - <th width="8%">计划运送时间(分)</th>  
72 - <th width="8%">计划完成次数</th>  
73 - <th width="8%">完成次数</th>  
74 - <th width="8%">最早发车时间</th>  
75 - <th width="8%">最晚发车时间</th>  
76 - <th width="8%">平均发车时间</th>  
77 - <th width="8%">最慢运送时间(分)</th>  
78 - <th width="8%">最快运送时间(分)</th>  
79 - <th width="8%">平均运送时间(分)</th> 68 + <th style="display: none;"></th>
  69 + <th width="8%">公司</th>
  70 + <th width="8%">分公司</th>
  71 + <th width="8%">线路</th>
  72 + <th width="8%">起点站名</th>
  73 + <th width="6%">计发时间</th>
  74 + <th width="6%">计划运送时间(分)</th>
  75 + <th width="6%">计划完成次数</th>
  76 + <th width="6%">完成次数</th>
  77 + <th width="6%">最早发车时间</th>
  78 + <th width="6%">最晚发车时间</th>
  79 + <th width="6%">平均发车时间</th>
  80 + <th width="6%">最慢运送时间(分)</th>
  81 + <th width="6%">最快运送时间(分)</th>
  82 + <th width="6%">平均运送时间(分)</th>
80 </tr> 83 </tr>
81 </thead> 84 </thead>
82 <tbody> 85 <tbody>
@@ -95,6 +98,7 @@ @@ -95,6 +98,7 @@
95 <script> 98 <script>
96 $(function(){ 99 $(function(){
97 var page = 0, initPagination; 100 var page = 0, initPagination;
  101 + $('#export').attr('disabled', "true");
98 102
99 // 关闭左侧栏 103 // 关闭左侧栏
100 if (!$('body').hasClass('page-sidebar-closed')) 104 if (!$('body').hasClass('page-sidebar-closed'))
@@ -200,6 +204,11 @@ @@ -200,6 +204,11 @@
200 // 把渲染好的模版html文本追加到表格中 204 // 把渲染好的模版html文本追加到表格中
201 $('#forms tbody').html(tbodyHtml); 205 $('#forms tbody').html(tbodyHtml);
202 206
  207 + if(result.dataList.length == 0)
  208 + $("#export").attr('disabled',"true");
  209 + else
  210 + $("#export").removeAttr("disabled");
  211 +
203 if(pagination && result.dataList.length > 0){ 212 if(pagination && result.dataList.length > 0){
204 //重新分页 213 //重新分页
205 initPagination = true; 214 initPagination = true;
@@ -213,7 +222,16 @@ @@ -213,7 +222,16 @@
213 } 222 }
214 223
215 $("#export").on("click",function(){ 224 $("#export").on("click",function(){
216 - $get('/pcpc/scheduleAnaly',{page:'',line:line,startDate:startDate,endDate:endDate,model:model,type:'export'},function(result){ 225 + var params = {};
  226 + params['page'] = page;
  227 + params['line'] = line;
  228 + params['startDate'] = startDate;
  229 + params['endDate'] = endDate;
  230 + params['model'] = model;
  231 + params['company'] = company;
  232 + params['subCompany'] = subCompany;
  233 + params['type'] = "export";
  234 + $get('/pcpc/scheduleAnaly', params, function(result){
217 window.open("/downloadFile/download?fileName=时刻表分析"+moment(startDate).format("YYYYMMDD")+"-"+moment(endDate).format("YYYYMMDD")); 235 window.open("/downloadFile/download?fileName=时刻表分析"+moment(startDate).format("YYYYMMDD")+"-"+moment(endDate).format("YYYYMMDD"));
218 }); 236 });
219 }); 237 });
@@ -289,6 +307,9 @@ @@ -289,6 +307,9 @@
289 <script type="text/html" id="list_scheduleAnaly"> 307 <script type="text/html" id="list_scheduleAnaly">
290 {{each list as obj i}} 308 {{each list as obj i}}
291 <tr> 309 <tr>
  310 + <th style="display: none;"></th>
  311 + <td>{{obj.company}}</td>
  312 + <td>{{obj.subCompany}}</td>
292 <td>{{obj.line}}</td> 313 <td>{{obj.line}}</td>
293 <td>{{obj.qdz}}</td> 314 <td>{{obj.qdz}}</td>
294 <td>{{obj.jhfc}}</td> 315 <td>{{obj.jhfc}}</td>
@@ -305,7 +326,7 @@ @@ -305,7 +326,7 @@
305 {{/each}} 326 {{/each}}
306 {{if list.length == 0}} 327 {{if list.length == 0}}
307 <tr> 328 <tr>
308 - <td colspan="12"><h6 class="muted">没有找到相关数据</h6></td> 329 + <td colspan="14"><h6 class="muted">没有找到相关数据</h6></td>
309 </tr> 330 </tr>
310 {{/if}} 331 {{/if}}
311 </script> 332 </script>
312 \ No newline at end of file 333 \ No newline at end of file
src/main/resources/static/pages/forms/statement/scheduleDaily.html
@@ -37,7 +37,7 @@ @@ -37,7 +37,7 @@
37 </div> 37 </div>
38 <div class="form-group"> 38 <div class="form-group">
39 <input class="btn btn-default" type="button" id="query" value="查询"/> 39 <input class="btn btn-default" type="button" id="query" value="查询"/>
40 - <input class="btn btn-default" type="button" id="export" value="导出"/> 40 +<!-- <input class="btn btn-default" type="button" id="export" value="导出"/> -->
41 </div> 41 </div>
42 </form> 42 </form>
43 </div> 43 </div>
src/main/resources/static/pages/forms/statement/scheduleDailyQp.html
@@ -61,20 +61,20 @@ @@ -61,20 +61,20 @@
61 <th colspan="3" style="text-align:center;vertical-align:middle;">驾驶员</th> 61 <th colspan="3" style="text-align:center;vertical-align:middle;">驾驶员</th>
62 <th colspan="3" style="text-align:center;vertical-align:middle;">售票员</th> 62 <th colspan="3" style="text-align:center;vertical-align:middle;">售票员</th>
63 <th rowspan="3" style="text-align:center;vertical-align:middle;">路牌</th> 63 <th rowspan="3" style="text-align:center;vertical-align:middle;">路牌</th>
64 - <th rowspan="3" style="text-align:center;vertical-align:middle;">记录项目</th>  
65 - <th colspan="3" style="text-align:center;vertical-align:middle;">1</th>  
66 - <th colspan="3" style="text-align:center;vertical-align:middle;">2</th>  
67 - <th colspan="3" style="text-align:center;vertical-align:middle;">3</th>  
68 - <th colspan="3" style="text-align:center;vertical-align:middle;">4</th>  
69 - <th colspan="3" style="text-align:center;vertical-align:middle;">5</th>  
70 - <th colspan="3" style="text-align:center;vertical-align:middle;">6</th>  
71 - <th colspan="3" style="text-align:center;vertical-align:middle;">7</th>  
72 - <th colspan="3" style="text-align:center;vertical-align:middle;">8</th>  
73 - <th colspan="3" style="text-align:center;vertical-align:middle;">9</th>  
74 - <th colspan="3" style="text-align:center;vertical-align:middle;">10</th>  
75 - <th colspan="3" style="text-align:center;vertical-align:middle;">11</th>  
76 - <th colspan="3" style="text-align:center;vertical-align:middle;">12</th>  
77 - <th colspan="3" style="text-align:center;vertical-align:middle;">13</th> 64 + <th rowspan="4" style="text-align:center;vertical-align:middle;">记录项目</th>
  65 + <th colspan="4" style="text-align:center;vertical-align:middle;">1</th>
  66 + <th colspan="4" style="text-align:center;vertical-align:middle;">2</th>
  67 + <th colspan="4" style="text-align:center;vertical-align:middle;">3</th>
  68 + <th colspan="4" style="text-align:center;vertical-align:middle;">4</th>
  69 + <th colspan="4" style="text-align:center;vertical-align:middle;">5</th>
  70 + <th colspan="4" style="text-align:center;vertical-align:middle;">6</th>
  71 + <th colspan="4" style="text-align:center;vertical-align:middle;">7</th>
  72 + <th colspan="4" style="text-align:center;vertical-align:middle;">8</th>
  73 + <th colspan="4" style="text-align:center;vertical-align:middle;">9</th>
  74 + <th colspan="4" style="text-align:center;vertical-align:middle;">10</th>
  75 + <th colspan="4" style="text-align:center;vertical-align:middle;">11</th>
  76 + <th colspan="4" style="text-align:center;vertical-align:middle;">12</th>
  77 + <th colspan="4" style="text-align:center;vertical-align:middle;">13</th>
78 78
79 </tr> 79 </tr>
80 <tr> 80 <tr>
@@ -86,42 +86,55 @@ @@ -86,42 +86,55 @@
86 <th rowspan="2">到达</th> 86 <th rowspan="2">到达</th>
87 <th rowspan="2">早/迟</th> 87 <th rowspan="2">早/迟</th>
88 <th rowspan="2">开出</th> 88 <th rowspan="2">开出</th>
  89 + <th rowspan="2">备注</th>
89 <th rowspan="2">到达</th> 90 <th rowspan="2">到达</th>
90 <th rowspan="2">早/迟</th> 91 <th rowspan="2">早/迟</th>
91 <th rowspan="2">开出</th> 92 <th rowspan="2">开出</th>
  93 + <th rowspan="2">备注</th>
92 <th rowspan="2">到达</th> 94 <th rowspan="2">到达</th>
93 <th rowspan="2">早/迟</th> 95 <th rowspan="2">早/迟</th>
94 <th rowspan="2">开出</th> 96 <th rowspan="2">开出</th>
  97 + <th rowspan="2">备注</th>
95 <th rowspan="2">到达</th> 98 <th rowspan="2">到达</th>
96 <th rowspan="2">早/迟</th> 99 <th rowspan="2">早/迟</th>
97 <th rowspan="2">开出</th> 100 <th rowspan="2">开出</th>
  101 + <th rowspan="2">备注</th>
98 <th rowspan="2">到达</th> 102 <th rowspan="2">到达</th>
99 <th rowspan="2">早/迟</th> 103 <th rowspan="2">早/迟</th>
100 <th rowspan="2">开出</th> 104 <th rowspan="2">开出</th>
  105 + <th rowspan="2">备注</th>
101 <th rowspan="2">到达</th> 106 <th rowspan="2">到达</th>
102 <th rowspan="2">早/迟</th> 107 <th rowspan="2">早/迟</th>
103 <th rowspan="2">开出</th> 108 <th rowspan="2">开出</th>
  109 + <th rowspan="2">备注</th>
104 <th rowspan="2">到达</th> 110 <th rowspan="2">到达</th>
105 <th rowspan="2">早/迟</th> 111 <th rowspan="2">早/迟</th>
106 <th rowspan="2">开出</th> 112 <th rowspan="2">开出</th>
  113 + <th rowspan="2">备注</th>
107 <th rowspan="2">到达</th> 114 <th rowspan="2">到达</th>
108 <th rowspan="2">早/迟</th> 115 <th rowspan="2">早/迟</th>
109 <th rowspan="2">开出</th> 116 <th rowspan="2">开出</th>
  117 + <th rowspan="2">备注</th>
110 <th rowspan="2">到达</th> 118 <th rowspan="2">到达</th>
111 <th rowspan="2">早/迟</th> 119 <th rowspan="2">早/迟</th>
112 <th rowspan="2">开出</th> 120 <th rowspan="2">开出</th>
  121 + <th rowspan="2">备注</th>
113 <th rowspan="2">到达</th> 122 <th rowspan="2">到达</th>
114 <th rowspan="2">早/迟</th> 123 <th rowspan="2">早/迟</th>
115 <th rowspan="2">开出</th> 124 <th rowspan="2">开出</th>
  125 + <th rowspan="2">备注</th>
116 <th rowspan="2">到达</th> 126 <th rowspan="2">到达</th>
117 <th rowspan="2">早/迟</th> 127 <th rowspan="2">早/迟</th>
118 <th rowspan="2">开出</th> 128 <th rowspan="2">开出</th>
  129 + <th rowspan="2">备注</th>
119 <th rowspan="2">到达</th> 130 <th rowspan="2">到达</th>
120 <th rowspan="2">早/迟</th> 131 <th rowspan="2">早/迟</th>
121 <th rowspan="2">开出</th> 132 <th rowspan="2">开出</th>
  133 + <th rowspan="2">备注</th>
122 <th rowspan="2">到达</th> 134 <th rowspan="2">到达</th>
123 <th rowspan="2">早/迟</th> 135 <th rowspan="2">早/迟</th>
124 <th rowspan="2">开出</th> 136 <th rowspan="2">开出</th>
  137 + <th rowspan="2">备注</th>
125 </tr> 138 </tr>
126 <tr> 139 <tr>
127 <th>出场</th> 140 <th>出场</th>
@@ -134,17 +147,80 @@ @@ -134,17 +147,80 @@
134 </thead> 147 </thead>
135 <tbody> 148 <tbody>
136 <tr > 149 <tr >
137 - <td></td> 150 + <td>1</td>
138 <td> 151 <td>
  152 + YT-CD001
139 </td> 153 </td>
140 - <td></td>  
141 - <td></td>  
142 - <td></td>  
143 - <td colspan="46">  
144 - <div>  
145 -  
146 - </div> 154 + <td>
  155 +
  156 + </td>
  157 + <td>
  158 + 1
  159 + </td>
  160 + <td>
  161 + 00001
  162 + </td>
  163 + <td >
  164 + 04:30
147 </td> 165 </td>
  166 + <td></td>
  167 + <td></td>
  168 + <td></td>
  169 + <td></td>
  170 + <td>1</td>
  171 + <td></td>
  172 + <td>06:50</td>
  173 + <td>1</td>
  174 + <td>06:00</td>
  175 + <td></td>
  176 + <td>08:02</td>
  177 + <td>-2</td>
  178 + <td>07:10</td>
  179 + <td></td>
  180 + <td></td>
  181 + <td></td>
  182 + <td></td>
  183 + <td></td>
  184 + <td></td>
  185 + <td></td>
  186 + <td></td>
  187 + <td></td>
  188 + <td></td>
  189 + <td></td>
  190 + <td></td>
  191 + <td></td>
  192 + <td></td>
  193 + <td></td>
  194 + <td></td>
  195 + <td></td>
  196 + <td></td>
  197 + <td></td>
  198 + <td></td>
  199 + <td></td>
  200 + <td></td>
  201 + <td></td>
  202 + <td></td>
  203 + <td></td>
  204 + <td></td>
  205 + <td></td>
  206 + <td></td>
  207 + <td></td>
  208 + <td></td>
  209 + <td></td>
  210 + <td></td>
  211 + <td></td>
  212 + <td></td>
  213 + <td></td>
  214 + <td></td>
  215 + <td></td>
  216 + <td></td>
  217 + <td></td>
  218 + <td></td>
  219 + <td></td>
  220 + <td></td>
  221 + <td></td>
  222 + <td></td>
  223 + <td></td>
148 </tr> 224 </tr>
149 225
150 </tbody> 226 </tbody>
src/main/resources/static/pages/forms/statement/statisticsDaily .html
@@ -37,7 +37,7 @@ @@ -37,7 +37,7 @@
37 </div> 37 </div>
38 <div class="form-group"> 38 <div class="form-group">
39 <input class="btn btn-default" type="button" id="query" value="查询"/> 39 <input class="btn btn-default" type="button" id="query" value="查询"/>
40 - <input class="btn btn-default" type="button" id="export" value="导出"/> 40 +<!-- <input class="btn btn-default" type="button" id="export" value="导出"/> -->
41 </div> 41 </div>
42 </form> 42 </form>
43 </div> 43 </div>
src/main/resources/static/pages/forms/statement/waybill.html
@@ -39,7 +39,7 @@ @@ -39,7 +39,7 @@
39 <input class="btn btn-default" type="button" id="query" value="查询"/> 39 <input class="btn btn-default" type="button" id="query" value="查询"/>
40 <input class="btn btn-default" type="button" id="export" value="导出"/> 40 <input class="btn btn-default" type="button" id="export" value="导出"/>
41 <input class="btn btn-default" type="button" id="print" value="打印"/> 41 <input class="btn btn-default" type="button" id="print" value="打印"/>
42 - <input class="btn btn-default" type="button" id="exportMore" value="批量导出"/> 42 +<!-- <input class="btn btn-default" type="button" id="exportMore" value="批量导出"/> -->
43 </div> 43 </div>
44 </form> 44 </form>
45 </div> 45 </div>
src/main/resources/static/pages/forms/statement/workDaily.html
@@ -55,11 +55,13 @@ @@ -55,11 +55,13 @@
55 <thead> 55 <thead>
56 <tr class="hidden"> 56 <tr class="hidden">
57 <th width="80px">日期</th> 57 <th width="80px">日期</th>
58 - <th width="100px">线路</th> 58 + <th>公司</th>
  59 + <th>分公司</th>
  60 + <th>线路</th>
59 <th>计划班次</th> 61 <th>计划班次</th>
60 <th>待发调整</th> 62 <th>待发调整</th>
61 - <th>待发调整比率</th>  
62 - <th>出场率</th> 63 + <th width="60px">待发调整比率</th>
  64 + <th width="60px">出场率</th>
63 <th width="46px">上行发快</th> 65 <th width="46px">上行发快</th>
64 <th width="46px">上行到快</th> 66 <th width="46px">上行到快</th>
65 <th width="46px">下行发快</th> 67 <th width="46px">下行发快</th>
@@ -68,9 +70,9 @@ @@ -68,9 +70,9 @@
68 <th width="46px">上行到慢</th> 70 <th width="46px">上行到慢</th>
69 <th width="46px">下行发慢</th> 71 <th width="46px">下行发慢</th>
70 <th width="46px">下行到慢</th> 72 <th width="46px">下行到慢</th>
71 - <th>误点总数(快/慢)</th>  
72 - <th>首末班准点率</th>  
73 - <th>高峰班次执行率(早/晚)</th> 73 + <th width="75px">误点总数(快/慢)</th>
  74 + <th width="100px">首末班准点率</th>
  75 + <th width="100px">高峰班次执行率(早/晚)</th>
74 </tr> 76 </tr>
75 </thead> 77 </thead>
76 <tbody> 78 <tbody>
@@ -88,6 +90,7 @@ @@ -88,6 +90,7 @@
88 90
89 <script> 91 <script>
90 $(function(){ 92 $(function(){
  93 + $('#export').attr('disabled', "true");
91 94
92 // 关闭左侧栏 95 // 关闭左侧栏
93 if (!$('body').hasClass('page-sidebar-closed')) 96 if (!$('body').hasClass('page-sidebar-closed'))
@@ -176,11 +179,21 @@ @@ -176,11 +179,21 @@
176 // 把渲染好的模版html文本追加到表格中 179 // 把渲染好的模版html文本追加到表格中
177 $('#forms tbody').html(tbodyHtml); 180 $('#forms tbody').html(tbodyHtml);
178 181
  182 + if(result.length == 0)
  183 + $("#export").attr('disabled',"true");
  184 + else
  185 + $("#export").removeAttr("disabled");
179 }); 186 });
180 } 187 }
181 188
182 $("#export").on("click",function(){ 189 $("#export").on("click",function(){
183 - $get('/pcpc/workDaily',{line:line,date:date,type:'export'},function(result){ 190 + var params = {};
  191 + params['line'] = line;
  192 + params['date'] = date;
  193 + params['type'] = "export";
  194 + params['company'] = company;
  195 + params['subCompany'] = subCompany;
  196 + $get('/pcpc/workDaily', params, function(result){
184 window.open("/downloadFile/download?fileName=营运服务日报表"+moment(date).format("YYYYMMDD")); 197 window.open("/downloadFile/download?fileName=营运服务日报表"+moment(date).format("YYYYMMDD"));
185 }); 198 });
186 }); 199 });
@@ -193,6 +206,8 @@ @@ -193,6 +206,8 @@
193 {{each list as obj i}} 206 {{each list as obj i}}
194 <tr> 207 <tr>
195 <td>{{obj.date}}</td> 208 <td>{{obj.date}}</td>
  209 + <td>{{obj.company}}</td>
  210 + <td>{{obj.subCompany}}</td>
196 <td>{{obj.line}}</td> 211 <td>{{obj.line}}</td>
197 <td>{{obj.jhbc}}</td> 212 <td>{{obj.jhbc}}</td>
198 <td>{{obj.dftz}}</td> 213 <td>{{obj.dftz}}</td>
@@ -213,7 +228,7 @@ @@ -213,7 +228,7 @@
213 {{/each}} 228 {{/each}}
214 {{if list.length == 0}} 229 {{if list.length == 0}}
215 <tr> 230 <tr>
216 - <td colspan="17"><h6 class="muted">没有找到相关数据</h6></td> 231 + <td colspan="19"><h6 class="muted">没有找到相关数据</h6></td>
217 </tr> 232 </tr>
218 {{/if}} 233 {{/if}}
219 </script> 234 </script>
220 \ No newline at end of file 235 \ No newline at end of file
src/main/resources/static/pages/forms/statement/allline.html renamed to src/main/resources/static/pages/mforms/alllines/allline.html
@@ -230,8 +230,7 @@ @@ -230,8 +230,7 @@
230 var total_bcjh = 0, total_bcsj = 0, total_bczxl = 0; 230 var total_bcjh = 0, total_bcsj = 0, total_bczxl = 0;
231 var total_gs = 0; 231 var total_gs = 0;
232 var total_zhgs = 0; 232 var total_zhgs = 0;
233 - $  
234 - .each( 233 + $.each(
235 result, 234 result,
236 function(i, obj) { 235 function(i, obj) {
237 total_gs += Number(obj.gsgs); 236 total_gs += Number(obj.gsgs);
src/main/resources/static/pages/forms/statement/changetochange.html renamed to src/main/resources/static/pages/mforms/changetochanges/changetochange.html
src/main/resources/static/pages/forms/statement/executionrate.html renamed to src/main/resources/static/pages/mforms/executionrates/executionrate.html
src/main/resources/static/pages/forms/statement/linepassengerflow.html renamed to src/main/resources/static/pages/mforms/linepassengerflows/linepassengerflow.html
src/main/resources/static/pages/forms/statement/operationservice.html renamed to src/main/resources/static/pages/mforms/operationservices/operationservice.html
src/main/resources/static/pages/forms/statement/shifday.html renamed to src/main/resources/static/pages/mforms/shifdays/shifday.html
src/main/resources/static/pages/forms/statement/shiftuehiclemanth.html renamed to src/main/resources/static/pages/mforms/shiftuehiclemanths/shiftuehiclemanth.html
src/main/resources/static/pages/forms/statement/singledata.html renamed to src/main/resources/static/pages/mforms/singledatas/singledata.html
src/main/resources/static/pages/forms/statement/turnoutrate.html renamed to src/main/resources/static/pages/mforms/turnoutrates/turnoutrate.html
src/main/resources/static/pages/forms/statement/vehicleloading.html renamed to src/main/resources/static/pages/mforms/vehicleloadings/vehicleloading.html
src/main/resources/static/pages/forms/statement/waybillday.html renamed to src/main/resources/static/pages/mforms/waybilldays/waybillday.html
src/main/resources/static/pages/report/inoutstation.html
@@ -294,17 +294,18 @@ @@ -294,17 +294,18 @@
294 var id=params[0].split("\\")[0]; 294 var id=params[0].split("\\")[0];
295 var fcsj = $('.in_carpark_fcsj[data-id='+id+']', '#forms').html(); 295 var fcsj = $('.in_carpark_fcsj[data-id='+id+']', '#forms').html();
296 var ddsj= $('.in_carpark_zdsj[data-id='+id+']', '#forms').html(); 296 var ddsj= $('.in_carpark_zdsj[data-id='+id+']', '#forms').html();
297 -  
298 - $post('/report/queryListZdxx',{clzbh:nbbm,date:rq,line:line,fcsj:fcsj,ddsj:ddsj},function(result){  
299 - var xlmc="线路: "+$("#select2-line-container").html();  
300 - var clmc="车辆: "+nbbm;  
301 - var rqmc="日期: "+rq;  
302 - var bcmc="班次: "+fcsj+"-"+ddsj;  
303 - $("#dlzmx").html("到离站详细 "+xlmc+" "+clmc+" "+rqmc+" "+bcmc);  
304 - var ludan_ll_1 = template('ludan_ll_1',{list:result});  
305 - // 把渲染好的模版html文本追加到表格中  
306 - $('#forms1 .ludan_ll_1').html(ludan_ll_1);  
307 - }); 297 + if(!(typeof(fcsj)=='undefined'|| typeof(ddsj)=='undefined')){
  298 + $post('/report/queryListZdxx',{clzbh:nbbm,date:rq,line:line,fcsj:fcsj,ddsj:ddsj},function(result){
  299 + var xlmc="线路: "+$("#select2-line-container").html();
  300 + var clmc="车辆: "+nbbm;
  301 + var rqmc="日期: "+rq;
  302 + var bcmc="班次: "+fcsj+"-"+ddsj;
  303 + $("#dlzmx").html("到离站详细 "+xlmc+" "+clmc+" "+rqmc+" "+bcmc);
  304 + var ludan_ll_1 = template('ludan_ll_1',{list:result});
  305 + // 把渲染好的模版html文本追加到表格中
  306 + $('#forms1 .ludan_ll_1').html(ludan_ll_1);
  307 + });
  308 + }
308 }) 309 })
309 310
310 $("#query2").click(function(){ 311 $("#query2").click(function(){
src/main/resources/static/pages/report/message/message.html
@@ -18,7 +18,7 @@ @@ -18,7 +18,7 @@
18 18
19 <div class="page-head"> 19 <div class="page-head">
20 <div class="page-title"> 20 <div class="page-title">
21 - <h1>行车路单</h1> 21 + <h1>调度消息分析</h1>
22 </div> 22 </div>
23 </div> 23 </div>
24 24
@@ -41,9 +41,9 @@ @@ -41,9 +41,9 @@
41 </div> 41 </div>
42 <div class="form-group" style="display: inline-block;margin-left: 15px;"> 42 <div class="form-group" style="display: inline-block;margin-left: 15px;">
43 <input class="btn btn-default" type="button" id="query" value="查询"/> 43 <input class="btn btn-default" type="button" id="query" value="查询"/>
44 - <input class="btn btn-default" type="button" id="export" value="导出"/> 44 +<!-- <input class="btn btn-default" type="button" id="export" value="导出"/> -->
45 <input class="btn btn-default" type="button" id="print" value="打印"/> 45 <input class="btn btn-default" type="button" id="print" value="打印"/>
46 - <input class="btn btn-default" type="button" id="exportMore" value="批量导出"/> 46 +<!-- <input class="btn btn-default" type="button" id="exportMore" value="批量导出"/> -->
47 </div> 47 </div>
48 </form> 48 </form>
49 </div> 49 </div>
@@ -235,12 +235,12 @@ @@ -235,12 +235,12 @@
235 {{each list as obj i}} 235 {{each list as obj i}}
236 <tr> 236 <tr>
237 <td>{{i+1}}</td> 237 <td>{{i+1}}</td>
  238 + <td>{{obj[4]}}</td>
  239 + <td>{{obj[6]}}</td>
238 <td>{{obj[0]}}</td> 240 <td>{{obj[0]}}</td>
239 <td>{{obj[1]}}</td> 241 <td>{{obj[1]}}</td>
240 - <td>{{obj[2]}}</td>  
241 <td>{{obj[3]}}</td> 242 <td>{{obj[3]}}</td>
242 - <td>{{obj[4]}}</td>  
243 - <td>{{obj[5]}}</td> 243 + <td>{{obj[2]}}</td>
244 </tr> 244 </tr>
245 {{/each}} 245 {{/each}}
246 {{if list.length == 0}} 246 {{if list.length == 0}}
src/main/resources/static/pages/report/timetable/timetable.html
@@ -141,21 +141,21 @@ @@ -141,21 +141,21 @@
141 <div class="portlet-body"> 141 <div class="portlet-body">
142 <div class="row"> 142 <div class="row">
143 <div class="col-md-6" > 143 <div class="col-md-6" >
144 - <table class="table table-bordered table-checkable"> 144 + <table class="table table-bordered table-checkable" id="formsTime4">
145 <tr> 145 <tr>
146 <td colspan="6">调度形式</td> 146 <td colspan="6">调度形式</td>
147 </tr> 147 </tr>
148 <tr> 148 <tr>
149 - <td colspan="3" align="center">上行向()站</td>  
150 - <td colspan="3" align="center">下行向()站</td> 149 + <td colspan="3" align="center">上行向(<span id="skb_sxzd"></span>)站</td>
  150 + <td colspan="3" align="center">下行向(<span id="skb_xxzd"></span>)站</td>
151 </tr> 151 </tr>
152 <tr> 152 <tr>
153 - <td>起讫站</td>  
154 - <td>起讫时间</td>  
155 - <td>班次</td>  
156 - <td>起讫站</td>  
157 - <td>起讫时间</td>  
158 - <td>班次</td> 153 + <td width="22%">起讫站</td>
  154 + <td width="20%">起讫时间</td>
  155 + <td width="8%">班次</td>
  156 + <td width="22%">起讫站</td>
  157 + <td width="20%">起讫时间</td>
  158 + <td width="8%">班次</td>
159 </tr> 159 </tr>
160 <tbody class="tbody_time_4"> 160 <tbody class="tbody_time_4">
161 161
@@ -283,26 +283,25 @@ @@ -283,26 +283,25 @@
283 $.get('/report/tbodyTime2',{line:line,ttinfo:ttinfo},function(result){ 283 $.get('/report/tbodyTime2',{line:line,ttinfo:ttinfo},function(result){
284 var tbodyTime2 = template('tbodyTime2',{map:result}); 284 var tbodyTime2 = template('tbodyTime2',{map:result});
285 $('#formsTime2 .tbody_time_2').html(tbodyTime2); 285 $('#formsTime2 .tbody_time_2').html(tbodyTime2);
286 - });/* 286 + });
287 $.get('/report/tbodyTime3',{line:line,ttinfo:ttinfo},function(result){ 287 $.get('/report/tbodyTime3',{line:line,ttinfo:ttinfo},function(result){
288 -  
289 var tbodyTime3 = template('tbodyTime3',{list:result}); 288 var tbodyTime3 = template('tbodyTime3',{list:result});
290 $('#formsTime3 .tbody_time_3').html(tbodyTime3); 289 $('#formsTime3 .tbody_time_3').html(tbodyTime3);
291 var divTime3 = window.document.getElementById('formsTime3'); 290 var divTime3 = window.document.getElementById('formsTime3');
292 var divTime2 = window.document.getElementById('formsTime2'); 291 var divTime2 = window.document.getElementById('formsTime2');
293 - console.log(divTime3.offsetHeight);  
294 divTime2.style.height=divTime3.offsetHeight+"px"; 292 divTime2.style.height=divTime3.offsetHeight+"px";
295 - }); */ 293 + });
296 294
297 - /*  
298 - $.get('/report/tbodyTime4',{line:line,date:date},function(result){  
299 - var scheduleDaily_3 = template('scheduleDaily_3',{list:result});  
300 - $('#forms .scheduleDaily_3').html(scheduleDaily_3);  
301 - });*/  
302 - /* $.get('/report/tbodyTime5',{line:line,ttinfo:ttinfo},function(result){ 295 + $.get('/report/tbodyTime4',{line:line,ttinfo:ttinfo},function(result){
  296 + $("#skb_sxzd").html(result[0].sxzm);
  297 + $("#skb_xxzd").html(result[0].xxzm);
  298 + var tbodyTime4 = template('tbodyTime4',{list:result});
  299 + $('#formsTime4 .tbody_time_4').html(tbodyTime4);
  300 + });
  301 + $.get('/report/tbodyTime5',{line:line,ttinfo:ttinfo},function(result){
303 var tbodyTime5 = template('tbodyTime5',{list:result}); 302 var tbodyTime5 = template('tbodyTime5',{list:result});
304 $('#formsTime5 .tbody_time_5').html(tbodyTime5); 303 $('#formsTime5 .tbody_time_5').html(tbodyTime5);
305 - }); */ 304 + });
306 } 305 }
307 306
308 307
@@ -352,6 +351,27 @@ @@ -352,6 +351,27 @@
352 </script> 351 </script>
353 352
354 353
  354 +
  355 +
  356 +<script type="text/html" id="tbodyTime4">
  357 +{{each list as result i}}
  358 +
  359 + <tr>
  360 + <td align="center">{{result.sxzm}}</td>
  361 + <td align="center">{{result.sxsj}}</td>
  362 + <td align="center">{{result.sxbc}}</td>
  363 + <td align="center">{{result.xxzm}}</td>
  364 + <td align="center">{{result.xxsj}}</td>
  365 + <td align="center">{{result.xxbc}}</td>
  366 + </tr>
  367 +{{/each}}
  368 +{{if list.length == 0}}
  369 + <tr>
  370 + <td colspan="5"><h6 class="muted">没有找到相关数据</h6></td>
  371 + </tr>
  372 + {{/if}}
  373 +</script>
  374 +
355 <script type="text/html" id="tbodyTime5"> 375 <script type="text/html" id="tbodyTime5">
356 {{each list as result i}} 376 {{each list as result i}}
357 <tr> 377 <tr>
src/main/resources/static/real_control_v2/css/line_schedule.css
@@ -55,7 +55,7 @@ @@ -55,7 +55,7 @@
55 padding: 0; 55 padding: 0;
56 } 56 }
57 57
58 -.line_schedule .schedule-wrap i.uk-icon-question-circle{ 58 +.line_schedule .schedule-wrap .header-title i.uk-icon-question-circle{
59 cursor: pointer; 59 cursor: pointer;
60 font-size: 14px; 60 font-size: 14px;
61 color: #cccaca; 61 color: #cccaca;
@@ -528,6 +528,7 @@ div.drop-rail[data-type=&quot;car&quot;]:before { @@ -528,6 +528,7 @@ div.drop-rail[data-type=&quot;car&quot;]:before {
528 528
529 dl.relevance-active dd:nth-child(n+2) { 529 dl.relevance-active dd:nth-child(n+2) {
530 background: #f1efef !important; 530 background: #f1efef !important;
  531 + color: #333;
531 } 532 }
532 533
533 dl.relevance-active.intimity dd:nth-child(n+2) { 534 dl.relevance-active.intimity dd:nth-child(n+2) {
@@ -1022,4 +1023,27 @@ dd.fcsjActualCell div.last-sch-sunken span._badge{ @@ -1022,4 +1023,27 @@ dd.fcsjActualCell div.last-sch-sunken span._badge{
1022 .ct_table>.ct_table_body dl.dl-last-sch:hover div.last-sch-sunken, 1023 .ct_table>.ct_table_body dl.dl-last-sch:hover div.last-sch-sunken,
1023 .ct_table>.ct_table_body dl.dl-last-sch.context-menu-active div.last-sch-sunken{ 1024 .ct_table>.ct_table_body dl.dl-last-sch.context-menu-active div.last-sch-sunken{
1024 background: #f5fbff; 1025 background: #f5fbff;
  1026 +}
  1027 +
  1028 +dd.fcsjActualCell{
  1029 + position: relative;
  1030 +}
  1031 +
  1032 +i.signal_state_icon{
  1033 + position: absolute;
  1034 + right: 5px;
  1035 + top: 7px;
  1036 + box-shadow: 0px 0px 11px 0 rgba(0, 0, 0, 0.2), -1px 3px 8px 0 rgba(0, 0, 0, 0.19);
  1037 + text-indent: 0;
  1038 + border-radius: 15px;
  1039 + cursor: pointer;
  1040 +}
  1041 +
  1042 +i.signal_state_icon.uk-icon-question-circle{
  1043 + color: #e85252 !important;
  1044 +}
  1045 +
  1046 +i.signal_state_icon.uk-icon-reply{
  1047 + color: #4134e3 !important;
  1048 + box-shadow: none;
1025 } 1049 }
1026 \ No newline at end of file 1050 \ No newline at end of file
src/main/resources/static/real_control_v2/fragments/line_schedule/sch_table.html
@@ -83,7 +83,7 @@ @@ -83,7 +83,7 @@
83 <dd data-sort-val={{sch.dfsjT}} dbclick dbclick-type="dfsj" dbclick-val="{{sch.dfsj}}"> 83 <dd data-sort-val={{sch.dfsjT}} dbclick dbclick-type="dfsj" dbclick-val="{{sch.dfsj}}">
84 {{sch.dfsj}} 84 {{sch.dfsj}}
85 </dd> 85 </dd>
86 - <dd class=" 86 + <dd data-uk-observe class="
87 {{if sch.status==-1}} 87 {{if sch.status==-1}}
88 tl-qrlb 88 tl-qrlb
89 {{else if sch.status==2}} 89 {{else if sch.status==2}}
@@ -130,7 +130,7 @@ @@ -130,7 +130,7 @@
130 </script> 130 </script>
131 131
132 <script id="line-schedule-sfsj-temp" type="text/html"> 132 <script id="line-schedule-sfsj-temp" type="text/html">
133 - <dd class=" 133 + <dd data-uk-observe class="
134 {{if status==-1}} 134 {{if status==-1}}
135 tl-qrlb 135 tl-qrlb
136 {{else if status==2}} 136 {{else if status==2}}
src/main/resources/static/real_control_v2/fragments/north/nav/signal_state_config.html 0 → 100644
  1 +<div class="uk-modal ct-form-modal" id="signal_state_config-modal">
  2 + <div class="uk-modal-dialog" style="width: 530px;">
  3 + <a href="" class="uk-modal-close uk-close"></a>
  4 + <div class="uk-modal-header">
  5 + <h2>信号标记设置</h2></div>
  6 +
  7 + <p style="border-bottom: 1px solid #efefef;color: grey;padding-bottom: 9px;">
  8 + <small>
  9 + <i class="uk-icon-question-circle"> </i>
  10 + 设置项将会保存在本地客户端,清理缓存和更换电脑会重置.</small>
  11 + </p>
  12 + <form class="uk-form uk-form-horizontal">
  13 + <div class="uk-grid">
  14 + <div class="uk-width-2-3 uk-container-center">
  15 + <div class="uk-form-row">
  16 + <label class="uk-form-label">是否启用</label>
  17 + <div class="uk-form-controls">
  18 + <select name="enable">
  19 + <option value="1">启用</option>
  20 + <option value="0">禁用</option>
  21 + </select>
  22 + </div>
  23 + </div>
  24 + </div>
  25 + </div>
  26 +
  27 + <div class="uk-modal-footer uk-text-right" style="margin-bottom: -20px;">
  28 + <button type="button" class="uk-button uk-modal-close">取消</button>
  29 + <button type="submit" class="uk-button uk-button-primary"><i class="uk-icon-check"></i> &nbsp;保存</button>
  30 + </div>
  31 + </form>
  32 + </div>
  33 +
  34 + <script>
  35 + (function() {
  36 + var modal = '#signal_state_config-modal';
  37 + var f = $('form', modal);
  38 +
  39 + $(modal).on('init', function(e, data) {
  40 + var val = gb_signal_state.isEnable()?1:0;
  41 + $('[name=enable]', f).val(val);
  42 + });
  43 +
  44 + f.formValidation(gb_form_validation_opts);
  45 + f.on('success.form.fv', function(e) {
  46 + e.preventDefault();
  47 + var data = $(this).serializeJSON();
  48 +
  49 + if(data.enable=='1')
  50 + gb_signal_state.enable();
  51 + else
  52 + gb_signal_state.disable();
  53 +
  54 + UIkit.modal(modal).hide();
  55 + });
  56 +
  57 + })();
  58 + </script>
  59 +</div>
0 \ No newline at end of file 60 \ No newline at end of file
src/main/resources/static/real_control_v2/js/data/json/north_toolbar.json
@@ -93,6 +93,11 @@ @@ -93,6 +93,11 @@
93 "id": 3.1, 93 "id": 3.1,
94 "text": "TTS", 94 "text": "TTS",
95 "event": "tts_config" 95 "event": "tts_config"
  96 + },
  97 + {
  98 + "id": 3.2,
  99 + "text": "信号标记",
  100 + "event": "signal_state"
96 } 101 }
97 ] 102 ]
98 } 103 }
src/main/resources/static/real_control_v2/js/line_schedule/layout.js
@@ -22,7 +22,7 @@ var gb_line_layout = (function() { @@ -22,7 +22,7 @@ var gb_line_layout = (function() {
22 }; 22 };
23 23
24 //图例icon tootip 24 //图例icon tootip
25 - $(document).on('mouseenter', '.schedule-wrap i.uk-icon-question-circle', function() { 25 + $(document).on('mouseenter', '.schedule-wrap .header-title i.uk-icon-question-circle', function() {
26 $(this).qtip({ 26 $(this).qtip({
27 show: { 27 show: {
28 ready: true, 28 ready: true,
src/main/resources/static/real_control_v2/js/line_schedule/sch_table.js
@@ -236,6 +236,8 @@ var gb_schedule_table = (function () { @@ -236,6 +236,8 @@ var gb_schedule_table = (function () {
236 else 236 else
237 $(dds[8]).html(''); 237 $(dds[8]).html('');
238 238
  239 + //信号状态标记
  240 + gb_signal_state.marker_sch(sch);
239 //班次是车辆的最后一班 241 //班次是车辆的最后一班
240 if(dl.hasClass('dl-last-sch')) 242 if(dl.hasClass('dl-last-sch'))
241 markerLastSch([sch]); 243 markerLastSch([sch]);
@@ -446,6 +448,7 @@ var gb_schedule_table = (function () { @@ -446,6 +448,7 @@ var gb_schedule_table = (function () {
446 return car_yfwf_map[lineCode]; 448 return car_yfwf_map[lineCode];
447 }, 449 },
448 scroToDl: scroToDl, 450 scroToDl: scroToDl,
449 - reset_drag_active_all: reset_drag_active_all 451 + reset_drag_active_all: reset_drag_active_all,
  452 + getDl: getDl
450 }; 453 };
451 })(); 454 })();
src/main/resources/static/real_control_v2/js/main.js
1 //主调和监控模式 1 //主调和监控模式
2 var operationMode = window.localStorage.getItem('operationMode'); 2 var operationMode = window.localStorage.getItem('operationMode');
3 -if(operationMode == 0){ 3 +if (operationMode == 0) {
4 $('body>.north').addClass('monitor'); 4 $('body>.north').addClass('monitor');
5 $(document).on('ajaxSend', interceptPOST); 5 $(document).on('ajaxSend', interceptPOST);
6 } 6 }
@@ -8,8 +8,8 @@ else @@ -8,8 +8,8 @@ else
8 $('body>.north').addClass('main'); 8 $('body>.north').addClass('main');
9 9
10 //拦截POST请求 10 //拦截POST请求
11 -function interceptPOST(e, xhr, t){  
12 - if(t && (t.method == 'POST' || t.type == 'POST')){ 11 +function interceptPOST(e, xhr, t) {
  12 + if (t && (t.method == 'POST' || t.type == 'POST')) {
13 console.log(e, xhr, t); 13 console.log(e, xhr, t);
14 xhr.abort(); 14 xhr.abort();
15 notify_err('监控模式!'); 15 notify_err('监控模式!');
@@ -18,54 +18,56 @@ function interceptPOST(e, xhr, t){ @@ -18,54 +18,56 @@ function interceptPOST(e, xhr, t){
18 18
19 /* main js */ 19 /* main js */
20 var gb_main_ep = new EventProxy(), 20 var gb_main_ep = new EventProxy(),
21 - res_load_ep = EventProxy.create('load_data_basic', 'load_tab', 'load_home_layout', 'load_home_line_panel', function() { 21 + res_load_ep = EventProxy.create('load_data_basic', 'load_tab', 'load_home_layout', 'load_home_line_panel', function () {
22 var eq = gb_main_ep; 22 var eq = gb_main_ep;
23 // basic data end 23 // basic data end
24 eq.once('data-basic', g_emit('tab')); 24 eq.once('data-basic', g_emit('tab'));
25 // tabs 25 // tabs
26 - eq.once('tab', function() { 26 + eq.once('tab', function () {
27 gb_tabs.init( 27 gb_tabs.init(
28 g_emit('home-layout') 28 g_emit('home-layout')
29 ); 29 );
30 }); 30 });
31 //home layout 31 //home layout
32 - eq.once('home-layout', function() { 32 + eq.once('home-layout', function () {
33 gb_home_layout.layout( 33 gb_home_layout.layout(
34 g_emit('home-line-panel') 34 g_emit('home-line-panel')
35 ); 35 );
36 }); 36 });
37 //home line panel 37 //home line panel
38 - eq.once('home-line-panel', function() { 38 + eq.once('home-line-panel', function () {
39 gb_home_line_panel.init(g_emit('gps-time-refresh')); 39 gb_home_line_panel.init(g_emit('gps-time-refresh'));
40 }); 40 });
41 41
42 //start fixed time refresh gps 42 //start fixed time refresh gps
43 - eq.once('gps-time-refresh', function() { 43 + eq.once('gps-time-refresh', function () {
44 gb_data_gps.fixedTimeRefresh(); 44 gb_data_gps.fixedTimeRefresh();
45 g_emit('line-schedule-layout')(); 45 g_emit('line-schedule-layout')();
46 }); 46 });
47 47
48 //line schedule layout 48 //line schedule layout
49 - eq.once('line-schedule-layout', function() { 49 + eq.once('line-schedule-layout', function () {
50 gb_line_layout.layout(g_emit('render-sch-table')); 50 gb_line_layout.layout(g_emit('render-sch-table'));
51 }); 51 });
52 52
53 //render schedule table 53 //render schedule table
54 - eq.once('render-sch-table', function() {  
55 - gb_schedule_table.show(function(){  
56 - //搜索框  
57 - gb_sch_search.init(); 54 + eq.once('render-sch-table', function () {
  55 + gb_schedule_table.show(function () {
  56 + //搜索框
  57 + gb_sch_search.init();
  58 + //加载信号状态
  59 + gb_signal_state.init();
58 }); 60 });
59 61
60 //嵌入地图页面 62 //嵌入地图页面
61 - $('li.map-panel','#main-tab-content').load('/real_control_v2/mapmonitor/real.html');  
62 - 63 + $('li.map-panel', '#main-tab-content').load('/real_control_v2/mapmonitor/real.html');
  64 + //弹出更新说明
63 showUpdateDescription(); 65 showUpdateDescription();
64 }); 66 });
65 67
66 function g_emit(id) { 68 function g_emit(id) {
67 console.log('g_emit [' + id + ']'); 69 console.log('g_emit [' + id + ']');
68 - return function() { 70 + return function () {
69 console.log('eq.emitLater(' + id + ')'); 71 console.log('eq.emitLater(' + id + ')');
70 return eq.emitLater(id); 72 return eq.emitLater(id);
71 }; 73 };
@@ -73,17 +75,17 @@ var gb_main_ep = new EventProxy(), @@ -73,17 +75,17 @@ var gb_main_ep = new EventProxy(),
73 }); 75 });
74 76
75 //modal hide remove dom 77 //modal hide remove dom
76 -$(document).on('hide.uk.modal', '.uk-modal', function() { 78 +$(document).on('hide.uk.modal', '.uk-modal', function () {
77 $(this).remove(); 79 $(this).remove();
78 }); 80 });
79 81
80 $(document).on('click', '.ct-bottom-drawer-close', function () { 82 $(document).on('click', '.ct-bottom-drawer-close', function () {
81 - $(this).parents('.ct-bottom-drawer').removeClass('open'); 83 + $(this).parents('.ct-bottom-drawer').removeClass('open');
82 }); 84 });
83 85
84 function connectArr(arr, separator, transFun) { 86 function connectArr(arr, separator, transFun) {
85 var rs = ''; 87 var rs = '';
86 - $.each(arr, function(i, item) { 88 + $.each(arr, function (i, item) {
87 if (transFun) 89 if (transFun)
88 item = transFun(item); 90 item = transFun(item);
89 rs += (separator + item); 91 rs += (separator + item);
@@ -102,26 +104,26 @@ var gb_form_validation_opts = { @@ -102,26 +104,26 @@ var gb_form_validation_opts = {
102 }; 104 };
103 105
104 106
105 -var notify_wait = function(t) { 107 +var notify_wait = function (t) {
106 UIkit.notify("<i class='uk-icon-spinner uk-icon-spin'></i> " + t, { 108 UIkit.notify("<i class='uk-icon-spinner uk-icon-spin'></i> " + t, {
107 status: 'info' 109 status: 'info'
108 }); 110 });
109 }; 111 };
110 112
111 -var notify_succ = function(t) { 113 +var notify_succ = function (t) {
112 UIkit.notify("<i class='uk-icon-check'></i> " + t, { 114 UIkit.notify("<i class='uk-icon-check'></i> " + t, {
113 status: 'success' 115 status: 'success'
114 }); 116 });
115 }; 117 };
116 118
117 -var notify_err = function(t) { 119 +var notify_err = function (t) {
118 UIkit.notify("<i class='uk-icon-times'></i> " + t, { 120 UIkit.notify("<i class='uk-icon-times'></i> " + t, {
119 status: 'danger' 121 status: 'danger'
120 }); 122 });
121 }; 123 };
122 124
123 -var alt_confirm = function(content, succ, okBtn) {  
124 - var modalEl = UIkit.modal.confirm(content, function() { 125 +var alt_confirm = function (content, succ, okBtn) {
  126 + var modalEl = UIkit.modal.confirm(content, function () {
125 succ && succ(); 127 succ && succ();
126 modalEl.hide(); 128 modalEl.hide();
127 }, { 129 }, {
@@ -129,15 +131,15 @@ var alt_confirm = function(content, succ, okBtn) { @@ -129,15 +131,15 @@ var alt_confirm = function(content, succ, okBtn) {
129 Ok: okBtn, 131 Ok: okBtn,
130 Cancel: '取消' 132 Cancel: '取消'
131 } 133 }
132 - ,center: true 134 + , center: true
133 }); 135 });
134 }; 136 };
135 137
136 -var isArray = function(obj) { 138 +var isArray = function (obj) {
137 return Object.prototype.toString.call(obj) === '[object Array]'; 139 return Object.prototype.toString.call(obj) === '[object Array]';
138 }; 140 };
139 141
140 -var notify_err_form = function(t, form) { 142 +var notify_err_form = function (t, form) {
141 $('.uk-alert-danger', form).remove(); 143 $('.uk-alert-danger', form).remove();
142 $('.uk-modal-footer', form).before('<div class="uk-alert uk-alert-danger" data-uk-alert="">' + 144 $('.uk-modal-footer', form).before('<div class="uk-alert uk-alert-danger" data-uk-alert="">' +
143 '<a href="" class="uk-alert-close uk-close"></a>' + 145 '<a href="" class="uk-alert-close uk-close"></a>' +
@@ -147,29 +149,29 @@ var notify_err_form = function(t, form) { @@ -147,29 +149,29 @@ var notify_err_form = function(t, form) {
147 enable_submit_btn(form); 149 enable_submit_btn(form);
148 }; 150 };
149 151
150 -var enable_submit_btn = function(form) { 152 +var enable_submit_btn = function (form) {
151 var subBtn = $('button[type=submit]', form); 153 var subBtn = $('button[type=submit]', form);
152 if (subBtn) { 154 if (subBtn) {
153 subBtn.removeClass('disabled').removeAttr('disabled'); 155 subBtn.removeClass('disabled').removeAttr('disabled');
154 } 156 }
155 } 157 }
156 158
157 -var disabled_submit_btn = function(form) { 159 +var disabled_submit_btn = function (form) {
158 var subBtn = $('button[type=submit]', form); 160 var subBtn = $('button[type=submit]', form);
159 if (subBtn) { 161 if (subBtn) {
160 - subBtn.addClass('disabled').attr('disabled','disabled'); 162 + subBtn.addClass('disabled').attr('disabled', 'disabled');
161 } 163 }
162 }; 164 };
163 165
164 -var show_modal = function(id, dom) { 166 +var show_modal = function (id, dom) {
165 $(document.body).append(dom); 167 $(document.body).append(dom);
166 return UIkit.modal(id, { 168 return UIkit.modal(id, {
167 bgclose: false 169 bgclose: false
168 }).show(); 170 }).show();
169 }; 171 };
170 172
171 -var open_modal = function(pageUrl, data, opt) {  
172 - $.get(pageUrl, function(dom) { 173 +var open_modal = function (pageUrl, data, opt) {
  174 + $.get(pageUrl, function (dom) {
173 if (!$(dom).hasClass('uk-modal')) { 175 if (!$(dom).hasClass('uk-modal')) {
174 alert('无效的dom片段!'); 176 alert('无效的dom片段!');
175 return; 177 return;
@@ -188,20 +190,20 @@ var open_modal = function(pageUrl, data, opt) { @@ -188,20 +190,20 @@ var open_modal = function(pageUrl, data, opt) {
188 190
189 function showUpdateDescription() { 191 function showUpdateDescription() {
190 //更新说明 192 //更新说明
191 - var updateDescription={ 193 + var updateDescription = {
192 date: '2016-12-20', 194 date: '2016-12-20',
193 text: '<h5>1、回场子任务开放使用。</h5>' 195 text: '<h5>1、回场子任务开放使用。</h5>'
194 }; 196 };
195 197
196 var storage = window.localStorage 198 var storage = window.localStorage
197 - ,key = 'update_' + updateDescription.date; 199 + , key = 'update_' + updateDescription.date;
198 var text = storage.getItem(key); 200 var text = storage.getItem(key);
199 - if(!text){  
200 - var modal = '<div class="uk-modal" id="update-description-modal">'+  
201 - ' <div class="uk-modal-dialog">'+  
202 - ' <a class="uk-modal-close uk-close"></a>'+  
203 - ' <div class="uk-modal-header">'+  
204 - ' <h2>'+updateDescription.date+' 更新说明</h2></div>'+updateDescription.text+ 201 + if (!text) {
  202 + var modal = '<div class="uk-modal" id="update-description-modal">' +
  203 + ' <div class="uk-modal-dialog">' +
  204 + ' <a class="uk-modal-close uk-close"></a>' +
  205 + ' <div class="uk-modal-header">' +
  206 + ' <h2>' + updateDescription.date + ' 更新说明</h2></div>' + updateDescription.text +
205 ' </div>'; 207 ' </div>';
206 208
207 show_modal('#update-description-modal', modal); 209 show_modal('#update-description-modal', modal);
src/main/resources/static/real_control_v2/js/north/toolbar.js
@@ -71,6 +71,9 @@ var gb_northToolbar = (function() { @@ -71,6 +71,9 @@ var gb_northToolbar = (function() {
71 }, 71 },
72 gps_play_back: function () { 72 gps_play_back: function () {
73 gb_map_play_back.initParams(); 73 gb_map_play_back.initParams();
  74 + },
  75 + signal_state: function () {
  76 + open_modal('/real_control_v2/fragments/north/nav/signal_state_config.html', {}, modal_opts);
74 } 77 }
75 } 78 }
76 })(); 79 })();
src/main/resources/static/real_control_v2/js/signal_state/signal_state.js 0 → 100644
  1 +/**
  2 + * GPS信号状态
  3 + * @type {{}}
  4 + */
  5 +var gb_signal_state = (function () {
  6 + var storage = window.localStorage;
  7 +
  8 + $(document).on('click', 'i.signal_state_icon', function (e) {
  9 + e.stopPropagation();
  10 + });
  11 +
  12 + var signal_state_data = {};
  13 + var enable = true;
  14 + //读取本地状态
  15 + var locStatus = storage.getItem("signal_state_enable");
  16 + if (locStatus && locStatus=='0')
  17 + enable = false;
  18 +
  19 + var init = function () {
  20 + $.get('/signalState/multi', {idx: gb_data_basic.line_idx}, function (rs) {
  21 + //按班次ID分组
  22 + signal_state_data = gb_common.groupBy(rs, 'schId');
  23 +
  24 + for (var schId in signal_state_data) {
  25 + multi_render(signal_state_data[schId]);
  26 + }
  27 + });
  28 + };
  29 +
  30 + var multi_render = function (list) {
  31 + if (!enable)
  32 + return;
  33 +
  34 + if (!list || list.length == 0)
  35 + return;
  36 + var line = list[0].lineCode
  37 + , schId = list[0].schId;
  38 +
  39 + var sch = gb_schedule_table.findScheduleByLine(line)[schId];
  40 + var dl = gb_schedule_table.getDl(sch);
  41 + var icon = 'question-circle';
  42 + var t = '';
  43 + $.each(list, function () {
  44 + t += (this.text + '<br>');
  45 + });
  46 +
  47 + if (list.length == 1 && list[0].type == 'route_reverse')
  48 + icon = 'reply';
  49 +
  50 + var dd = $('dd.fcsjActualCell', dl);
  51 + var se = $('i.signal_state_icon', dd);
  52 + if (se && se.length > 0)
  53 + se.remove();
  54 +
  55 + dd.append('<i data-uk-tooltip title="' + t + '" class="uk-icon-' + icon + ' signal_state_icon"></i>');
  56 + };
  57 +
  58 + var put = function (obj) {
  59 + if (!signal_state_data[obj.schId]) {
  60 + signal_state_data[obj.schId] = [];
  61 + }
  62 +
  63 + signal_state_data[obj.schId].push(obj);
  64 + multi_render(signal_state_data[obj.schId]);
  65 + };
  66 +
  67 + var marker_sch = function (sch) {
  68 + var list = signal_state_data[sch.id];
  69 + if (list) {
  70 + multi_render(list);
  71 + }
  72 + };
  73 +
  74 + var clearAll = function () {
  75 + $('.signal_state_icon').remove();
  76 + };
  77 +
  78 + return {
  79 + init: init,
  80 + put: put,
  81 + marker_sch: marker_sch,
  82 + isEnable: function () {
  83 + return enable;
  84 + },
  85 + disable: function () {
  86 + enable = false;
  87 + storage.setItem("signal_state_enable", 0);
  88 +
  89 + clearAll();
  90 + },
  91 + enable: function () {
  92 + enable = true;
  93 + storage.setItem("signal_state_enable", 1);
  94 + for (var schId in signal_state_data) {
  95 + multi_render(signal_state_data[schId]);
  96 + }
  97 + }
  98 + };
  99 +})();
0 \ No newline at end of file 100 \ No newline at end of file
src/main/resources/static/real_control_v2/js/websocket/sch_websocket.js
@@ -26,7 +26,7 @@ var gb_sch_websocket = (function () { @@ -26,7 +26,7 @@ var gb_sch_websocket = (function () {
26 var data = { 26 var data = {
27 operCode: 'register_line', 27 operCode: 'register_line',
28 idx: gb_data_basic.line_idx 28 idx: gb_data_basic.line_idx
29 - } 29 + };
30 schSock.send(JSON.stringify(data)); 30 schSock.send(JSON.stringify(data));
31 console.log('regListen....', data); 31 console.log('regListen....', data);
32 } 32 }
@@ -45,21 +45,21 @@ var gb_sch_websocket = (function () { @@ -45,21 +45,21 @@ var gb_sch_websocket = (function () {
45 var calcUntreated = function (lineCode) { 45 var calcUntreated = function (lineCode) {
46 var size = $('li.line_schedule[data-id=' + lineCode + '] .sys-mailbox .sys-mail-item').length; 46 var size = $('li.line_schedule[data-id=' + lineCode + '] .sys-mailbox .sys-mail-item').length;
47 $('#badge_untreated_num_' + lineCode).text(size); 47 $('#badge_untreated_num_' + lineCode).text(size);
48 - } 48 + };
49 49
50 var calcUntreatedAll = function () { 50 var calcUntreatedAll = function () {
51 $('#main-tab-content li.line_schedule').each(function () { 51 $('#main-tab-content li.line_schedule').each(function () {
52 calcUntreated($(this).data('id')); 52 calcUntreated($(this).data('id'));
53 }); 53 });
54 - } 54 + };
55 55
56 56
57 //80协议上报 57 //80协议上报
58 var report80 = function (msg) { 58 var report80 = function (msg) {
59 msg.dateStr = moment(msg.timestamp).format('HH:mm'); 59 msg.dateStr = moment(msg.timestamp).format('HH:mm');
60 msg.text = gb_common.reqCode80[msg.data.requestCode]; 60 msg.text = gb_common.reqCode80[msg.data.requestCode];
61 - if(!msg.text)  
62 - msg.text='(未知的请求码 '+msg.data.requestCode+')'; 61 + if (!msg.text)
  62 + msg.text = '(未知的请求码 ' + msg.data.requestCode + ')';
63 63
64 var $item = $(temps['sys-note-80-temp'](msg)); 64 var $item = $(temps['sys-note-80-temp'](msg));
65 findMailBox(msg.data.lineId).prepend($item); 65 findMailBox(msg.data.lineId).prepend($item);
@@ -68,7 +68,7 @@ var gb_sch_websocket = (function () { @@ -68,7 +68,7 @@ var gb_sch_websocket = (function () {
68 gb_tts.speak(ttsMsg, msg.data.lineId); 68 gb_tts.speak(ttsMsg, msg.data.lineId);
69 69
70 calcUntreated(msg.data.lineId); 70 calcUntreated(msg.data.lineId);
71 - } 71 + };
72 72
73 var waitRemoves = []; 73 var waitRemoves = [];
74 //车辆发出 74 //车辆发出
@@ -89,7 +89,7 @@ var gb_sch_websocket = (function () { @@ -89,7 +89,7 @@ var gb_sch_websocket = (function () {
89 gb_schedule_table.calc_yfwf_num(msg.t.xlBm); 89 gb_schedule_table.calc_yfwf_num(msg.t.xlBm);
90 90
91 calcUntreated(msg.t.xlBm); 91 calcUntreated(msg.t.xlBm);
92 - } 92 + };
93 93
94 //到达终点 94 //到达终点
95 var zhongDian = function (msg) { 95 var zhongDian = function (msg) {
@@ -107,20 +107,20 @@ var gb_sch_websocket = (function () { @@ -107,20 +107,20 @@ var gb_sch_websocket = (function () {
107 gb_tts.speak(ttsMsg, msg.t.xlBm); 107 gb_tts.speak(ttsMsg, msg.t.xlBm);
108 108
109 calcUntreated(msg.t.xlBm); 109 calcUntreated(msg.t.xlBm);
110 - } 110 + };
111 111
112 //服务器通知刷新班次 112 //服务器通知刷新班次
113 var refreshSch = function (msg) { 113 var refreshSch = function (msg) {
114 gb_schedule_table.updateSchedule(msg.ts); 114 gb_schedule_table.updateSchedule(msg.ts);
115 /*//重新计算应发未发 115 /*//重新计算应发未发
116 - var idx={};  
117 - $.each(msg.ts, function(i, t){  
118 - if(idx[t.xlBm])  
119 - return true;  
120 - gb_schedule_table.calc_yfwf_num(t.xlBm);  
121 - idx[t.xlBm]=1;  
122 - });*/  
123 - } 116 + var idx={};
  117 + $.each(msg.ts, function(i, t){
  118 + if(idx[t.xlBm])
  119 + return true;
  120 + gb_schedule_table.calc_yfwf_num(t.xlBm);
  121 + idx[t.xlBm]=1;
  122 + });*/
  123 + };
124 124
125 //80消息确认 125 //80消息确认
126 var d80Confirm = function (msg) { 126 var d80Confirm = function (msg) {
@@ -129,12 +129,17 @@ var gb_sch_websocket = (function () { @@ -129,12 +129,17 @@ var gb_sch_websocket = (function () {
129 calcUntreated(msg.lineId); 129 calcUntreated(msg.lineId);
130 //重新计算应发未发 130 //重新计算应发未发
131 gb_schedule_table.calc_yfwf_num(msg.lineId); 131 gb_schedule_table.calc_yfwf_num(msg.lineId);
132 - } 132 + };
133 133
134 //指令状态改变 134 //指令状态改变
135 - var directiveStatus = function(msg){ 135 + var directiveStatus = function (msg) {
136 gb_schedule_table.updateSchedule(msg.t); 136 gb_schedule_table.updateSchedule(msg.t);
137 - } 137 + };
  138 +
  139 + //班次信号状态
  140 + var signalState = function (msg) {
  141 + gb_signal_state.put(msg.data);
  142 + };
138 143
139 var msgHandle = { 144 var msgHandle = {
140 report80: report80, 145 report80: report80,
@@ -142,8 +147,9 @@ var gb_sch_websocket = (function () { @@ -142,8 +147,9 @@ var gb_sch_websocket = (function () {
142 zhongDian: zhongDian, 147 zhongDian: zhongDian,
143 refreshSch: refreshSch, 148 refreshSch: refreshSch,
144 d80Confirm: d80Confirm, 149 d80Confirm: d80Confirm,
145 - directive: directiveStatus  
146 - } 150 + directive: directiveStatus,
  151 + signal_state: signalState
  152 + };
147 153
148 function currentSecond() { 154 function currentSecond() {
149 return Date.parse(new Date()) / 1000; 155 return Date.parse(new Date()) / 1000;
@@ -167,15 +173,15 @@ var gb_sch_websocket = (function () { @@ -167,15 +173,15 @@ var gb_sch_websocket = (function () {
167 $(this).parents('.sys-note-42').remove(); 173 $(this).parents('.sys-note-42').remove();
168 174
169 var size = $(this).parents('.sys-mailbox').find('.sys-mail-item').length 175 var size = $(this).parents('.sys-mailbox').find('.sys-mail-item').length
170 - ,lineCode = $(this).parents('li.line_schedule').data('id'); 176 + , lineCode = $(this).parents('li.line_schedule').data('id');
171 177
172 $('#badge_untreated_num_' + lineCode).text(size); 178 $('#badge_untreated_num_' + lineCode).text(size);
173 }); 179 });
174 180
175 //42消息点击 181 //42消息点击
176 $(document).on('click', '.sys-mailbox .sys-note-42', function () { 182 $(document).on('click', '.sys-mailbox .sys-note-42', function () {
177 - var lineCode=$(this).parents('li.line_schedule').data('id')  
178 - ,id=$(this).data('id'); 183 + var lineCode = $(this).parents('li.line_schedule').data('id')
  184 + , id = $(this).data('id');
179 var sch = gb_schedule_table.findScheduleByLine(lineCode)[id]; 185 var sch = gb_schedule_table.findScheduleByLine(lineCode)[id];
180 var dl = gb_schedule_table.scroToDl(sch); 186 var dl = gb_schedule_table.scroToDl(sch);
181 //高亮 187 //高亮
@@ -205,7 +211,7 @@ var gb_sch_websocket = (function () { @@ -205,7 +211,7 @@ var gb_sch_websocket = (function () {
205 notify_succ(rs.msg); 211 notify_succ(rs.msg);
206 cb && cb(); 212 cb && cb();
207 }); 213 });
208 - } 214 + };
209 215
210 216
211 //定时到离站信使清理掉 217 //定时到离站信使清理掉
src/main/resources/static/real_control_v2/main.html
@@ -142,6 +142,8 @@ @@ -142,6 +142,8 @@
142 <script src="/real_control_v2/assets/echarts-3/echarts.js"></script> 142 <script src="/real_control_v2/assets/echarts-3/echarts.js"></script>
143 <!-- Geolib --> 143 <!-- Geolib -->
144 <script src="/real_control_v2/geolib/geolib.js"></script> 144 <script src="/real_control_v2/geolib/geolib.js"></script>
  145 +
  146 + <script src="/real_control_v2/js/signal_state/signal_state.js"></script>
145 </body> 147 </body>
146 148
147 </html> 149 </html>
src/main/resources/static/real_control_v2/mapmonitor/fragments/playback/run.html
@@ -148,10 +148,14 @@ @@ -148,10 +148,14 @@
148 var logs = []; 148 var logs = [];
149 for (var i = 0; i <= ei; i++) { 149 for (var i = 0; i <= ei; i++) {
150 trailArray.push(new BMap.Point(gpsArray[i].bd_lon, gpsArray[i].bd_lat)); 150 trailArray.push(new BMap.Point(gpsArray[i].bd_lon, gpsArray[i].bd_lat));
151 - if(i > 0 && logs[logs.length - 1].road.ROAD_CODE == gpsArray[i].road.ROAD_CODE)  
152 - logs.pop();  
153 -  
154 - logs.push(gpsArray[i]); 151 + try {
  152 + if(i > 0 && logs[logs.length - 1].road.ROAD_CODE == gpsArray[i].road.ROAD_CODE)
  153 + logs.pop();
  154 + }
  155 + catch (e){}
  156 +
  157 + if(gpsArray[i].road)
  158 + logs.push(gpsArray[i]);
155 } 159 }
156 trailPolyline.setPath(trailArray); 160 trailPolyline.setPath(trailArray);
157 161
@@ -302,6 +306,9 @@ @@ -302,6 +306,9 @@
302 gb_ct_table.fixedHead(logWrap); 306 gb_ct_table.fixedHead(logWrap);
303 307
304 function logWrite(gps, prve) { 308 function logWrite(gps, prve) {
  309 + if(!gps.road || !gps.road.ROAD_CODE)
  310 + return;
  311 +
305 var code = gps.road.ROAD_CODE; 312 var code = gps.road.ROAD_CODE;
306 if (!prve || code != prve.road.ROAD_CODE) { 313 if (!prve || code != prve.road.ROAD_CODE) {
307 logPanel.append('<dl data-code="' + code + '" ><dd>' + gps.timeStr + '</dd><dd>' + gps.speed + '</dd><dd>' + gps.road.ROAD_NAME + '</dd><dd>正常</dd></dl>'); 314 logPanel.append('<dl data-code="' + code + '" ><dd>' + gps.timeStr + '</dd><dd>' + gps.speed + '</dd><dd>' + gps.road.ROAD_NAME + '</dd><dd>正常</dd></dl>');