Commit f02cd88a6dc691b69ac3adef50ac330b1c3b4cd5

Authored by 廖磊
2 parents 3556aca1 bb7d840d

Merge branch 'minhang' of 192.168.168.201:panzhaov5/bsth_control into

minhang
Showing 89 changed files with 2038 additions and 1278 deletions

Too many changes to show.

To preserve performance only 89 of 167 files are displayed.

@@ -155,6 +155,12 @@ @@ -155,6 +155,12 @@
155 <version>2.1.8</version> 155 <version>2.1.8</version>
156 </dependency> 156 </dependency>
157 157
  158 + <dependency>
  159 + <groupId>org.apache.tika</groupId>
  160 + <artifactId>tika-core</artifactId>
  161 + <version>1.7</version>
  162 + </dependency>
  163 +
158 <!-- pentaho kettle 依赖 --> 164 <!-- pentaho kettle 依赖 -->
159 <dependency> 165 <dependency>
160 <groupId>com.pentaho.kettle</groupId> 166 <groupId>com.pentaho.kettle</groupId>
src/main/java/com/bsth/controller/DownloadController.java
@@ -2,6 +2,7 @@ package com.bsth.controller; @@ -2,6 +2,7 @@ package com.bsth.controller;
2 2
3 import java.io.File; 3 import java.io.File;
4 import java.io.IOException; 4 import java.io.IOException;
  5 +import java.net.URLDecoder;
5 6
6 import org.apache.commons.io.FileUtils; 7 import org.apache.commons.io.FileUtils;
7 import org.springframework.context.annotation.Scope; 8 import org.springframework.context.annotation.Scope;
@@ -35,7 +36,7 @@ public class DownloadController @@ -35,7 +36,7 @@ public class DownloadController
35 File file=new File(moudelPath); 36 File file=new File(moudelPath);
36 HttpHeaders headers = new HttpHeaders(); 37 HttpHeaders headers = new HttpHeaders();
37 String realFileName=new String(fileName.getBytes("UTF-8"),"iso-8859-1");//为了解决中文名称乱码问题 38 String realFileName=new String(fileName.getBytes("UTF-8"),"iso-8859-1");//为了解决中文名称乱码问题
38 - headers.setContentDispositionFormData("attachment", realFileName); 39 + headers.setContentDispositionFormData("attachment", URLDecoder.decode(realFileName,"utf-8"));
39 headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); 40 headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
40 return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), 41 return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),
41 headers, HttpStatus.CREATED); 42 headers, HttpStatus.CREATED);
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;
@@ -319,8 +321,34 @@ public class ExportController { @@ -319,8 +321,34 @@ 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 + String xlts="";
  325 + String zsgs="";
  326 + String jh="";
  327 + Float j=0f;
  328 + Float sj=0f;
  329 + Float qz=0f;
  330 + Float ccl=0f;
  331 + Float bcjh=0f;
  332 + String bcsj="";
  333 + Float bczxl=0f;
  334 + String gs="";
  335 + String zhgs="";
  336 +
322 for (Turnoutrate l : turnoutrate) { 337 for (Turnoutrate l : turnoutrate) {
323 Map<String, Object> m = new HashMap<String, Object>(); 338 Map<String, Object> m = new HashMap<String, Object>();
  339 +
  340 + xlts +=l.getGsgs()==""?0:String.valueOf(l.getGsgs());
  341 + zsgs +=l.getFgsgs()==""?0:String.valueOf(l.getFgsgs());
  342 + jh +=l.getXl()==""?0:String.valueOf(l.getXl());
  343 + sj +=l.getCchjh()==""?0f:Float.valueOf(l.getCchjh());
  344 + ccl +=l.getCchsj()==""?0f:Float.valueOf(l.getCchsj());
  345 + bcjh +=l.getCchqz()==""?0f:Float.valueOf(l.getCchqz());
  346 + bcsj +=l.getChl()==""?0:String.valueOf(l.getChl());
  347 + bczxl +=l.getBcjh()==""?0f:Float.valueOf(l.getBcjh());
  348 + gs +=l.getBcsj()==""?0:String.valueOf(l.getBcsj());
  349 + zhgs +=l.getBbzxl()==""?0:String.valueOf(l.getBbzxl());
  350 +
  351 +
324 m.put("rq", l.getRq()); 352 m.put("rq", l.getRq());
325 m.put("gs", l.getGs()); 353 m.put("gs", l.getGs());
326 m.put("zhgs", l.getZhgs()); 354 m.put("zhgs", l.getZhgs());
@@ -330,10 +358,27 @@ public class ExportController { @@ -330,10 +358,27 @@ public class ExportController {
330 m.put("cchqz", l.getCchqz()); 358 m.put("cchqz", l.getCchqz());
331 m.put("chl", l.getChl()); 359 m.put("chl", l.getChl());
332 m.put("bcjh", l.getBcjh()); 360 m.put("bcjh", l.getBcjh());
333 - m.put("bcsj", l.getBbzxl()); 361 + m.put("bcsj", l.getBcsj());
334 m.put("bbzxl", l.getBbzxl()); 362 m.put("bbzxl", l.getBbzxl());
335 m.put("sm", l.getSm()); 363 m.put("sm", l.getSm());
336 resList.add(m); 364 resList.add(m);
  365 +
  366 +
  367 +
  368 + m=new HashMap<String,Object>();
  369 + m.put("total_xlts", xlts);
  370 + m.put("total_zhgs", zsgs);
  371 + m.put("total_jh", jh);
  372 + m.put("total_sj", sj);
  373 + m.put("total_qz", ccl);
  374 + m.put("total_ccl", bcjh);
  375 + m.put("total_bcjh",bcsj);
  376 + m.put("total_bcsj", bczxl);
  377 + m.put("total_bczxl", bczxl);
  378 + m.put("total_gs", zhgs);
  379 +
  380 +
  381 + map1 = m;
337 } 382 }
338 383
339 try { 384 try {
@@ -347,7 +392,7 @@ public class ExportController { @@ -347,7 +392,7 @@ public class ExportController {
347 return resList; 392 return resList;
348 } 393 }
349 394
350 - //营运线路出车率统计表 395 + //班次执行率统计表
351 @RequestMapping(value = "/executionrateExport", method = RequestMethod.POST) 396 @RequestMapping(value = "/executionrateExport", method = RequestMethod.POST)
352 public List<Map<String, Object>> executionrateExport(@RequestParam Map<String, Object> map) { 397 public List<Map<String, Object>> executionrateExport(@RequestParam Map<String, Object> map) {
353 SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"), sdfSimple = new SimpleDateFormat("yyyyMMdd"); 398 SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"), sdfSimple = new SimpleDateFormat("yyyyMMdd");
@@ -356,8 +401,33 @@ public class ExportController { @@ -356,8 +401,33 @@ public class ExportController {
356 List<Executionrate> executionrate = formsService.executionrate(map); 401 List<Executionrate> executionrate = formsService.executionrate(map);
357 Map<String, Object> map1 = new HashMap<String, Object>(); 402 Map<String, Object> map1 = new HashMap<String, Object>();
358 List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>(); 403 List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();
  404 + String xlts="";
  405 + String zsgs="";
  406 + String jh="";
  407 + Float sj=0f;
  408 + Float ccl=0f;
  409 + Float bcjh=0f;
  410 + String bcsj="";
  411 + Float bczxl=0f;
  412 + String gs="";
  413 + String zhgs="";
  414 +
  415 + Map<String, Object> m = new HashMap<String, Object>();
  416 +
359 for (Executionrate l : executionrate) { 417 for (Executionrate l : executionrate) {
360 - Map<String, Object> m = new HashMap<String, Object>(); 418 +
  419 + xlts +=l.getGsgs()==""?0:String.valueOf(l.getGsgs());
  420 + zsgs +=l.getFgsgs()==""?0:String.valueOf(l.getFgsgs());
  421 + jh +=l.getXl()==""?0:String.valueOf(l.getXl());
  422 + sj +=l.getCchjh()==""?0f:Float.valueOf(l.getCchjh());
  423 + ccl +=l.getCchsj()==""?0f:Float.valueOf(l.getCchsj());
  424 + bcsj +=l.getChl()==""?0:String.valueOf(l.getChl());
  425 + bczxl +=l.getBcjh()==""?0f:Float.valueOf(l.getBcjh());
  426 + gs +=l.getBcsj()==""?0:String.valueOf(l.getBcsj());
  427 + zhgs +=l.getBbzxl()==""?0:String.valueOf(l.getBbzxl());
  428 +
  429 +
  430 +
361 m.put("rq", l.getRq()); 431 m.put("rq", l.getRq());
362 m.put("gs", l.getGs()); 432 m.put("gs", l.getGs());
363 m.put("zhgs", l.getZhgs()); 433 m.put("zhgs", l.getZhgs());
@@ -366,10 +436,24 @@ public class ExportController { @@ -366,10 +436,24 @@ public class ExportController {
366 m.put("cchsj", l.getCchsj()); 436 m.put("cchsj", l.getCchsj());
367 m.put("chl", l.getChl()); 437 m.put("chl", l.getChl());
368 m.put("bcjh", l.getBcjh()); 438 m.put("bcjh", l.getBcjh());
369 - m.put("bcsj", l.getBbzxl()); 439 + m.put("bcsj", l.getBcsj());
370 m.put("bbzxl", l.getBbzxl()); 440 m.put("bbzxl", l.getBbzxl());
371 m.put("sm", l.getSm()); 441 m.put("sm", l.getSm());
372 resList.add(m); 442 resList.add(m);
  443 +
  444 +
  445 + m=new HashMap<String,Object>();
  446 + m.put("total_gs", xlts);
  447 + m.put("total_zhgs", zsgs);
  448 + m.put("total_xlts", jh);
  449 + m.put("total_jh", sj);
  450 + m.put("total_sj", ccl);
  451 + m.put("total_ccl",bcsj);
  452 + m.put("total_bcjh", bczxl);
  453 + m.put("total_bcsj", gs);
  454 + m.put("total_bczxl", zhgs);
  455 +
  456 + map1 = m;
373 } 457 }
374 458
375 try { 459 try {
@@ -393,8 +477,28 @@ public class ExportController { @@ -393,8 +477,28 @@ public class ExportController {
393 List<Allline> allline = formsService.allline(map); 477 List<Allline> allline = formsService.allline(map);
394 Map<String, Object> map1 = new HashMap<String, Object>(); 478 Map<String, Object> map1 = new HashMap<String, Object>();
395 List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>(); 479 List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();
  480 + Integer jh=0;
  481 + Integer sj=0;
  482 + Integer ccl=0;
  483 + Double bcjh=0.0;
  484 + String bcsj="";
  485 + Integer bczxl=0;
  486 + String gs="";
  487 + String zhgs="";
  488 + Map<String, Object> m ;
396 for (Allline l : allline) { 489 for (Allline l : allline) {
397 - Map<String, Object> m = new HashMap<String, Object>(); 490 + m = new HashMap<String, Object>();
  491 +
  492 + jh +=l.getGsgs()=="" ? 0: Integer.valueOf(l.getGsgs());
  493 + sj +=l.getFgsgs()==""?0: Integer.valueOf(l.getFgsgs());
  494 + ccl +=l.getCchjh()==""?0: Integer.valueOf(l.getCchjh());
  495 + bcjh +=l.getCchsj()==""?0: Double.valueOf(l.getCchsj());
  496 +
  497 + bcsj +=l.getChl()==""? 0:String.valueOf(l.getChl());
  498 + bczxl +=l.getBcjh()==""?0: Integer.valueOf(l.getBcjh());
  499 + gs +=l.getBcsj()==""?0: String.valueOf(l.getBcsj());
  500 + zhgs +=l.getBbzxl()==""?0:String.valueOf(l.getBbzxl());
  501 +
398 m.put("rq", l.getRq()); 502 m.put("rq", l.getRq());
399 m.put("gs", l.getGs()); 503 m.put("gs", l.getGs());
400 m.put("zhgs", l.getZhgs()); 504 m.put("zhgs", l.getZhgs());
@@ -403,10 +507,22 @@ public class ExportController { @@ -403,10 +507,22 @@ public class ExportController {
403 m.put("cchsj", l.getCchsj()); 507 m.put("cchsj", l.getCchsj());
404 m.put("chl", l.getChl()); 508 m.put("chl", l.getChl());
405 m.put("bcjh", l.getBcjh()); 509 m.put("bcjh", l.getBcjh());
406 - m.put("bcsj", l.getBbzxl()); 510 + m.put("bcsj", l.getBcsj());
407 m.put("bbzxl", l.getBbzxl()); 511 m.put("bbzxl", l.getBbzxl());
408 m.put("sm", l.getSm()); 512 m.put("sm", l.getSm());
409 resList.add(m); 513 resList.add(m);
  514 +
  515 + m=new HashMap<String,Object>();
  516 + m.put("total_jh", jh);
  517 + m.put("total_sj", sj);
  518 + m.put("total_ccl", ccl);
  519 + m.put("total_bcjh", bcjh);
  520 + m.put("total_bcsj", bcsj);
  521 + m.put("total_bczxl", bczxl);
  522 + m.put("total_gs", gs);
  523 + m.put("total_zhgs", zhgs);
  524 + map1 = m;
  525 +
410 } 526 }
411 527
412 try { 528 try {
@@ -422,6 +538,56 @@ public class ExportController { @@ -422,6 +538,56 @@ public class ExportController {
422 538
423 539
424 540
  541 + //班次日报表
  542 + @RequestMapping(value = "/dailyExport", method = RequestMethod.POST)
  543 + public List<Map<String, Object>> dailyExport(@RequestParam Map<String, Object> map) {
  544 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"), sdfSimple = new SimpleDateFormat("yyyyMMdd");
  545 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  546 + ReportUtils ee = new ReportUtils();
  547 + List<Daily> allline = formsService.daily(map);
  548 +
  549 + List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();
  550 + Float zgl=0f;
  551 + Float ks=0f;
  552 + Float yh=0f;
  553 + Float bc=0f;
  554 + Map<String, Object> m ;
  555 + for (Daily d : allline) {
  556 + m = new HashMap<String, Object>();
  557 + zgl +=d.getZlc()==""?0f:Float.valueOf(d.getZlc());
  558 + ks +=d.getJzl1()==""?0f:Float.valueOf(d.getJzl1());
  559 + yh +=d.getYh()==""?0f:Float.valueOf(d.getYh());
  560 + bc +=d.getBc()==""?0f:Float.valueOf(d.getBc());
  561 + m.put("zbh", d.getZbh());
  562 + m.put("jgh",d.getJgh());
  563 + m.put("jName", d.getjName());
  564 + m.put("zlc", d.getZlc());
  565 + m.put("jzl1", d.getJzl1());
  566 + m.put("yh", d.getYh());
  567 + m.put("bc", d.getBc());
  568 +
  569 + resList.add(m);
  570 + }
  571 +
  572 + m=new HashMap<String,Object>();
  573 + m.put("total_zgl", zgl);
  574 + m.put("total_ks", ks);
  575 + m.put("total_yh", yh);
  576 + m.put("total_bc", bc);
  577 +
  578 + m.put("line", BasicData.lineCode2NameMap.get(map.get("line").toString()));
  579 + m.put("date", map.get("date").toString());
  580 + try {
  581 + listI.add(resList.iterator());
  582 + String path = this.getClass().getResource("/").getPath() + "static\\pages\\forms\\";
  583 + ee.excelReplace(listI, new Object[] { m }, path + "mould\\daily.xls", path + "export\\班次日报表"
  584 + + sdfSimple.format(sdfMonth.parse(map.get("date").toString())) + ".xls");
  585 + } catch (Exception e) {
  586 + e.printStackTrace();
  587 + }
  588 + return resList;
  589 + }
  590 +
425 591
426 592
427 } 593 }
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/RealMapController.java
@@ -59,4 +59,14 @@ public class RealMapController { @@ -59,4 +59,14 @@ public class RealMapController {
59 public Map<String, Object> findRouteAndStationByLine(@RequestParam String lineCode){ 59 public Map<String, Object> findRouteAndStationByLine(@RequestParam String lineCode){
60 return realMapService.findRouteAndStationByLine(lineCode); 60 return realMapService.findRouteAndStationByLine(lineCode);
61 } 61 }
  62 +
  63 + /**
  64 + * 获取多个线路的路段信息(为前端越界计算提供数据)
  65 + * @param codeIdx
  66 + * @return
  67 + */
  68 + @RequestMapping(value = "/multiSectionRoute")
  69 + public Map<String, Object> multiSectionRoute(@RequestParam String codeIdx){
  70 + return realMapService.multiSectionRoute(codeIdx);
  71 + }
62 } 72 }
src/main/java/com/bsth/controller/realcontrol/ScheduleRealInfoController.java
@@ -310,8 +310,8 @@ public class ScheduleRealInfoController extends BaseController&lt;ScheduleRealInfo, @@ -310,8 +310,8 @@ public class ScheduleRealInfoController extends BaseController&lt;ScheduleRealInfo,
310 310
311 @RequestMapping(value = "/historyMessage") 311 @RequestMapping(value = "/historyMessage")
312 public List<Object[]> historyMessage(@RequestParam String line, @RequestParam String date, 312 public List<Object[]> historyMessage(@RequestParam String line, @RequestParam String date,
313 - @RequestParam String code) {  
314 - return scheduleRealInfoService.historyMessage(line, date, code); 313 + @RequestParam String code, @RequestParam String type) {
  314 + return scheduleRealInfoService.historyMessage(line, date, code, type);
315 } 315 }
316 316
317 @RequestMapping(value="/findLine") 317 @RequestMapping(value="/findLine")
@@ -332,14 +332,14 @@ public class ScheduleRealInfoController extends BaseController&lt;ScheduleRealInfo, @@ -332,14 +332,14 @@ public class ScheduleRealInfoController extends BaseController&lt;ScheduleRealInfo,
332 332
333 @RequestMapping(value = "/account") 333 @RequestMapping(value = "/account")
334 public List<Map<String,Object>> account(@RequestParam String line, @RequestParam String date, 334 public List<Map<String,Object>> account(@RequestParam String line, @RequestParam String date,
335 - @RequestParam String code,@RequestParam String xlName) {  
336 - return scheduleRealInfoService.account(line, date, code,xlName); 335 + @RequestParam String code,@RequestParam String xlName, @RequestParam String type) {
  336 + return scheduleRealInfoService.account(line, date, code, xlName, type);
337 } 337 }
338 338
339 @RequestMapping(value = "/correctForm") 339 @RequestMapping(value = "/correctForm")
340 public List<ScheduleRealInfo> correctForm(@RequestParam String line, @RequestParam String startDate, 340 public List<ScheduleRealInfo> correctForm(@RequestParam String line, @RequestParam String startDate,
341 - @RequestParam String endDate,@RequestParam String lpName,@RequestParam String code) {  
342 - return scheduleRealInfoService.correctForm(line, startDate, endDate, lpName, code); 341 + @RequestParam String endDate, @RequestParam String lpName, @RequestParam String code, @RequestParam String type) {
  342 + return scheduleRealInfoService.correctForm(line, startDate, endDate, lpName, code, type);
343 } 343 }
344 /** 344 /**
345 * @Title queryListWaybill 345 * @Title queryListWaybill
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/schedule/BController.java
@@ -5,16 +5,21 @@ import com.bsth.common.ResponseCode; @@ -5,16 +5,21 @@ import com.bsth.common.ResponseCode;
5 import com.bsth.entity.schedule.BEntity; 5 import com.bsth.entity.schedule.BEntity;
6 import com.bsth.entity.sys.SysUser; 6 import com.bsth.entity.sys.SysUser;
7 import com.bsth.service.schedule.BService; 7 import com.bsth.service.schedule.BService;
8 -import com.bsth.service.schedule.ScheduleException; 8 +import com.bsth.service.schedule.exception.ScheduleException;
9 import com.bsth.service.sys.SysUserService; 9 import com.bsth.service.sys.SysUserService;
10 import com.google.common.base.Splitter; 10 import com.google.common.base.Splitter;
  11 +import jxl.Sheet;
  12 +import jxl.Workbook;
  13 +import org.apache.commons.lang3.StringUtils;
11 import org.springframework.beans.factory.annotation.Autowired; 14 import org.springframework.beans.factory.annotation.Autowired;
12 import org.springframework.data.domain.PageRequest; 15 import org.springframework.data.domain.PageRequest;
13 import org.springframework.data.domain.Sort; 16 import org.springframework.data.domain.Sort;
14 import org.springframework.web.bind.annotation.*; 17 import org.springframework.web.bind.annotation.*;
  18 +import org.springframework.web.multipart.MultipartFile;
15 19
  20 +import javax.servlet.http.HttpServletResponse;
16 import javax.servlet.http.HttpSession; 21 import javax.servlet.http.HttpSession;
17 -import java.io.Serializable; 22 +import java.io.*;
18 import java.util.*; 23 import java.util.*;
19 24
20 /** 25 /**
@@ -26,7 +31,7 @@ public class BController&lt;T, ID extends Serializable&gt; { @@ -26,7 +31,7 @@ public class BController&lt;T, ID extends Serializable&gt; {
26 @Autowired 31 @Autowired
27 private SysUserService sysUserService; 32 private SysUserService sysUserService;
28 33
29 - // CRUD 操作 34 + //---------------- CRUD 操作 ----------------//
30 // Create操作 35 // Create操作
31 @RequestMapping(method = RequestMethod.POST) 36 @RequestMapping(method = RequestMethod.POST)
32 public Map<String, Object> save(@RequestBody T t, HttpSession httpSession) { 37 public Map<String, Object> save(@RequestBody T t, HttpSession httpSession) {
@@ -73,6 +78,7 @@ public class BController&lt;T, ID extends Serializable&gt; { @@ -73,6 +78,7 @@ public class BController&lt;T, ID extends Serializable&gt; {
73 rtn.put("data", t); 78 rtn.put("data", t);
74 return rtn; 79 return rtn;
75 } 80 }
  81 + // 查询所有操作
76 @RequestMapping(value = "/all", method = RequestMethod.GET) 82 @RequestMapping(value = "/all", method = RequestMethod.GET)
77 public Map<String, Object> list(@RequestParam Map<String, Object> param) { 83 public Map<String, Object> list(@RequestParam Map<String, Object> param) {
78 List<T> tList = bService.list(param); 84 List<T> tList = bService.list(param);
@@ -81,6 +87,7 @@ public class BController&lt;T, ID extends Serializable&gt; { @@ -81,6 +87,7 @@ public class BController&lt;T, ID extends Serializable&gt; {
81 rtn.put("data", tList); 87 rtn.put("data", tList);
82 return rtn; 88 return rtn;
83 } 89 }
  90 + // 分页查询操作
84 @RequestMapping(method = RequestMethod.GET) 91 @RequestMapping(method = RequestMethod.GET)
85 public Map<String, Object> list( 92 public Map<String, Object> list(
86 @RequestParam Map<String, Object> map, 93 @RequestParam Map<String, Object> map,
@@ -138,4 +145,99 @@ public class BController&lt;T, ID extends Serializable&gt; { @@ -138,4 +145,99 @@ public class BController&lt;T, ID extends Serializable&gt; {
138 return rtn; 145 return rtn;
139 } 146 }
140 147
  148 + //---------------- 数据服务操作 ----------------//
  149 + // 上传excel文件
  150 + @RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
  151 + public Map<String, Object> uploadFile(MultipartFile file) {
  152 + Map<String, Object> rtn = new HashMap<>();
  153 + try {
  154 + File file1 = bService.uploadFile(file.getOriginalFilename(), file.getBytes());
  155 + // excel文件名
  156 + String fileName = file1.getAbsolutePath();
  157 + // excel文件sheet
  158 + List<String> sheetnames = new ArrayList<>();
  159 + Workbook book = Workbook.getWorkbook(file1);
  160 + for (Sheet sheet : book.getSheets()) {
  161 + sheetnames.add(sheet.getName());
  162 + }
  163 +
  164 + rtn.put("status", ResponseCode.SUCCESS);
  165 + rtn.put("filename", fileName);
  166 + rtn.put("sheetnames", StringUtils.join(sheetnames, ","));
  167 + } catch (Exception exp) {
  168 + rtn.put("status", ResponseCode.ERROR);
  169 + rtn.put("msg", exp.getMessage());
  170 + }
  171 + return rtn;
  172 + }
  173 +
  174 + // 导入excel文件
  175 + @RequestMapping(value = "/importFile", method = RequestMethod.POST)
  176 + public Map<String, Object> importFile(@RequestParam Map<String, Object> params) {
  177 + Map<String, Object> rtn = new HashMap<>();
  178 +
  179 + try {
  180 + File file = new File(String.valueOf(params.get("filename")));
  181 + if (!file.exists()) {
  182 + throw new Exception("导入文件不存在!");
  183 + }
  184 + bService.importData(file, params);
  185 +
  186 + rtn.put("status", ResponseCode.SUCCESS);
  187 + rtn.put("msg", "导入文件成功");
  188 + } catch (Exception exp) {
  189 + rtn.put("status", ResponseCode.ERROR);
  190 + rtn.put("msg", exp.getMessage());
  191 + }
  192 +
  193 + return rtn;
  194 + }
  195 +
  196 + // 上传并导入excel文件
  197 + @RequestMapping(value = "/uploadAndImportFile", method = RequestMethod.POST)
  198 + public Map<String, Object> uploadAndImportFile(MultipartFile file) {
  199 + Map<String, Object> rtn = new HashMap<>();
  200 +
  201 + try {
  202 + File file1 = bService.uploadFile(file.getOriginalFilename(), file.getBytes());
  203 + Map<String, Object> params = new HashMap<>();
  204 + bService.importData(file1, params);
  205 +
  206 + rtn.put("status", ResponseCode.SUCCESS);
  207 + rtn.put("msg", "上传&导入文件成功");
  208 + } catch (Exception exp) {
  209 + rtn.put("status", ResponseCode.ERROR);
  210 + rtn.put("msg", exp.getMessage());
  211 + }
  212 +
  213 + return rtn;
  214 + }
  215 +
  216 + // 导出数据到xls文件
  217 + @RequestMapping(value = "/exportFile", method = RequestMethod.GET)
  218 + public void exportFile(HttpServletResponse response,
  219 + @RequestParam Map<String, Object> params) throws Exception {
  220 + File file = bService.exportData(params);
  221 + // 流输出导出文件
  222 + response.setHeader("content-type", "application/octet-stream");
  223 + response.setHeader("Content-Disposition", "attachment; filename=" + file.getName());
  224 + response.setContentType("application/octet-stream");
  225 +
  226 + OutputStream os = response.getOutputStream();
  227 + BufferedOutputStream bos = new BufferedOutputStream(os);
  228 +
  229 + InputStream is = new FileInputStream(file);
  230 + BufferedInputStream bis = new BufferedInputStream(is);
  231 +
  232 + int length = 0;
  233 + byte[] temp = new byte[1 * 1024 * 10];
  234 + while ((length = bis.read(temp)) != -1) {
  235 + bos.write(temp, 0, length);
  236 + }
  237 + bos.flush();
  238 + bis.close();
  239 + bos.close();
  240 + is.close();
  241 + }
  242 +
141 } 243 }
src/main/java/com/bsth/controller/schedule/TTInfoDetailController.java deleted 100644 → 0
1 -package com.bsth.controller.schedule;  
2 -  
3 -import com.bsth.common.ResponseCode;  
4 -import com.bsth.controller.BaseController2;  
5 -import com.bsth.entity.CarPark;  
6 -import com.bsth.entity.LineInformation;  
7 -import com.bsth.entity.StationRoute;  
8 -import com.bsth.entity.schedule.GuideboardInfo;  
9 -import com.bsth.entity.schedule.TTInfoDetail;  
10 -import com.bsth.repository.schedule.TTInfoDetailRepository;  
11 -import com.bsth.service.CarParkService;  
12 -import com.bsth.service.LineInformationService;  
13 -import com.bsth.service.StationRouteService;  
14 -import com.bsth.service.schedule.GuideboardInfoService;  
15 -import com.bsth.service.schedule.TTInfoDetailService;  
16 -import com.bsth.service.schedule.utils.DataImportExportService;  
17 -import com.bsth.service.schedule.utils.DataToolsProperties;  
18 -import jxl.Cell;  
19 -import jxl.Sheet;  
20 -import jxl.Workbook;  
21 -import jxl.write.Label;  
22 -import jxl.write.WritableSheet;  
23 -import jxl.write.WritableWorkbook;  
24 -import org.apache.commons.lang3.StringUtils;  
25 -import org.springframework.beans.factory.annotation.Autowired;  
26 -import org.springframework.util.CollectionUtils;  
27 -import org.springframework.web.bind.annotation.*;  
28 -import org.springframework.web.multipart.MultipartFile;  
29 -  
30 -import javax.servlet.http.HttpServletResponse;  
31 -import java.io.File;  
32 -import java.util.*;  
33 -import java.util.regex.Matcher;  
34 -import java.util.regex.Pattern;  
35 -  
36 -/**  
37 - * Created by xu on 16/7/2.  
38 - */  
39 -@RestController  
40 -@RequestMapping("tidc")  
41 -public class TTInfoDetailController extends BaseController2<TTInfoDetail, Long> {  
42 - @Autowired  
43 - private TTInfoDetailService ttInfoDetailService;  
44 - @Autowired  
45 - private CarParkService carParkService;  
46 - @Autowired  
47 - private LineInformationService lineInformationService;  
48 - @Autowired  
49 - private TTInfoDetailRepository ttInfoDetailRepository;  
50 - @Autowired  
51 - private DataImportExportService dataImportExportService;  
52 - @Autowired  
53 - private StationRouteService stationRouteService;  
54 - @Autowired  
55 - private GuideboardInfoService guideboardInfoService;  
56 - @Autowired  
57 - private DataToolsProperties dataToolsProperties;  
58 -  
59 - /**  
60 - * 1、上传Excel文件,返回文件全路径名,工作区名称列表。  
61 - * @param file  
62 - * @return  
63 - * @throws Exception  
64 - */  
65 -  
66 -  
67 - /**  
68 - * 2、验证sheet(以后放到规则引擎里去做)。  
69 - * @param filename excel文件全路径名  
70 - * @param sheetname sheet名字  
71 - * @param lineid 线路id  
72 - * @param linename 线路名称  
73 - * @return  
74 - */  
75 - @RequestMapping(value = "/validate/sheet", method = RequestMethod.POST)  
76 - public Map<String, Object> validateSheet(String filename, String sheetname, Integer lineid, String linename) throws Exception {  
77 - Map<String, Object> rtn = new HashMap<>();  
78 - Workbook book = Workbook.getWorkbook(new File(filename));  
79 - Sheet sheet = book.getSheet(sheetname);  
80 - if (sheet.getRows() == 0 || sheet.getColumns() == 0) { // 工作区是否为空  
81 - rtn.put("status", ResponseCode.ERROR);  
82 - rtn.put("msg", String.format("%s 工作区没有数据!", sheetname));  
83 - return rtn;  
84 - } else {  
85 - if (sheet.getRows() <= 1 || sheet.getColumns() <= 1) {  
86 - rtn.put("status", ResponseCode.ERROR);  
87 - rtn.put("msg", String.format("工作区至少包含2行2列的数据"));  
88 - return rtn;  
89 - } else {  
90 - Cell[] cells = sheet.getRow(0); // 获取第一行数据列  
91 - for (int i = 0; i < cells.length; i++) {  
92 - String cell_con = cells[i].getContents();  
93 -  
94 - if (StringUtils.isEmpty(cell_con)) {  
95 - rtn.put("status", ResponseCode.ERROR);  
96 - rtn.put("msg", String.format("第1行,第%d列数据不能为空", i + 1));  
97 - return rtn;  
98 - } else {  
99 - // 正则表达式去除数字  
100 - cell_con = cell_con.replaceAll("[\\d+]", "");  
101 -  
102 - if (i == 0) { // 第一列必须是路牌2个字  
103 - if (!"路牌".equals(cell_con.trim())) {  
104 - rtn.put("status", ResponseCode.ERROR);  
105 - rtn.put("msg", "第1行,第1列数据必须是路牌2个字");  
106 - return rtn;  
107 - }  
108 - } else { // 排除出场,进场,其余内容到站点路由里查询,以各个方向的起点站为查询依据  
109 - if ((!"出场".equals(cell_con.trim())) &&  
110 - (!"进场".equals(cell_con.trim()))) {  
111 - Map<String, Object> p1 = new HashMap<>();  
112 - p1.put("line.id_eq", lineid);  
113 - p1.put("stationName_eq", cell_con.trim());  
114 - p1.put("stationMark_eq", "B");  
115 -  
116 -  
117 - // TODO:这里要修改(起点站有启用撤销的标志的)  
118 -  
119 - List<StationRoute> stationRouteList = (List<StationRoute>) stationRouteService.list(p1);  
120 - if (CollectionUtils.isEmpty(stationRouteList)) {  
121 - rtn.put("status", ResponseCode.ERROR);  
122 - rtn.put("msg", String.format("第1行,第%d列数据%s在%s站点路由中不是起点站", i + 1, cell_con.trim(), linename));  
123 - return rtn;  
124 - } else if (stationRouteList.size() > 1) {  
125 - rtn.put("status", ResponseCode.ERROR);  
126 - rtn.put("msg", String.format("第1行,第%d列数据%s在%s站点路由中上下行都是起点站", i + 1, cell_con.trim(), linename));  
127 - return rtn;  
128 - }  
129 - }  
130 -  
131 - }  
132 - }  
133 - }  
134 -  
135 - // 验证路牌内容  
136 - Map<String, Integer> gbindexmap = new HashMap<>(); // 记录每个路牌在第几行  
137 - for (int i = 1; i < sheet.getRows(); i++) { // 从第2行开始验证数据  
138 - Cell bcell = sheet.getRow(i)[0]; // 获取第1列  
139 - String bcell_con = bcell.getContents();  
140 - if (StringUtils.isEmpty(bcell_con)) {  
141 - rtn.put("status", ResponseCode.ERROR);  
142 - rtn.put("msg", String.format("第%d行,第1列路牌无数据", i + 1));  
143 - return rtn;  
144 - } else if (gbindexmap.get(bcell_con.trim()) != null) {  
145 - rtn.put("status", ResponseCode.ERROR);  
146 - rtn.put("msg", String.format("第%d行,第1列的路牌数据与第%d行,第1列数据重复",  
147 - i + 1,  
148 - gbindexmap.get(bcell_con.trim())));  
149 - return rtn;  
150 - } else {  
151 - Map<String, Object> p2 = new HashMap<>();  
152 - p2.put("xl.id_eq", lineid);  
153 - p2.put("lpName_eq", bcell_con.trim());  
154 - List<GuideboardInfo> guideboardInfoList = (List<GuideboardInfo>) guideboardInfoService.list(p2);  
155 - if (CollectionUtils.isEmpty(guideboardInfoList)) {  
156 - rtn.put("status", ResponseCode.ERROR);  
157 - rtn.put("msg", String.format("第%d行,第1列的路牌在%s中不存在", i + 1, linename));  
158 - return rtn;  
159 - } else if (guideboardInfoList.size() > 1) {  
160 - rtn.put("status", ResponseCode.ERROR);  
161 - rtn.put("msg", String.format("第%d行,第1列的路牌在%s中重复", i + 1, linename));  
162 - return rtn;  
163 - } else {  
164 - gbindexmap.put(bcell_con.trim(), i + 1);  
165 - }  
166 - }  
167 - }  
168 -  
169 - // 班次时间验证,正则表达式,格式hh:mm或者hhmm  
170 - String el = "^(([0-1]\\d)|(2[0-4])):[0-5]\\d$"; // hh:mm格式  
171 - String el2 = "^(([0-1]\\d)|(2[0-4]))[0-5]\\d$"; // hhmm格式  
172 - Pattern p = Pattern.compile(el);  
173 - Pattern p2 = Pattern.compile(el2);  
174 -  
175 - for (int i = 1; i < sheet.getRows(); i++) { // 从第2行开始验证数据  
176 - Cell[] bcells = sheet.getRow(i);  
177 - for (int j = 1; j < bcells.length; j++) { // 从第2列开始  
178 - String bcell_con = bcells[j].getContents();  
179 - if (StringUtils.isNotEmpty(bcell_con)) {  
180 - Matcher m = p.matcher(bcell_con.trim());  
181 - Matcher m2 = p2.matcher(bcell_con.trim());  
182 - if ((!m.matches()) && (!m2.matches())) {  
183 - rtn.put("status", ResponseCode.ERROR);  
184 - rtn.put("msg", String.format("第%d行,第%d列的发车时间格式不正确,格式应为hh:mm或hhmm", i + 1, j + 1));  
185 - return rtn;  
186 - }  
187 - }  
188 - }  
189 - }  
190 - }  
191 -  
192 - }  
193 -  
194 - rtn.put("status", ResponseCode.SUCCESS);  
195 - return rtn;  
196 - }  
197 -  
198 - /**  
199 - * 3、验证关联的线路标准信息(以后放到规则引擎里去做)。  
200 - * @param lineinfoid  
201 - * @return  
202 - */  
203 - @RequestMapping(value = "/validate/lineinfo", method = RequestMethod.GET)  
204 - public Map<String, Object> validateAssoLineInfo(Integer lineinfoid) {  
205 - Map<String, Object> rtn = new HashMap<>();  
206 - LineInformation lineInformation = lineInformationService.findById(lineinfoid);  
207 - if (lineInformation.getUpInMileage() == null) {  
208 - rtn.put("status", ResponseCode.ERROR);  
209 - rtn.put("msg", "上行进场里程为空");  
210 - return rtn;  
211 - } else if (lineInformation.getUpInTimer() == null) {  
212 - rtn.put("status", ResponseCode.ERROR);  
213 - rtn.put("msg", "上行进场时间为空");  
214 - return rtn;  
215 - } else if (lineInformation.getUpOutMileage() == null) {  
216 - rtn.put("status", ResponseCode.ERROR);  
217 - rtn.put("msg", "上行出场里程为空");  
218 - return rtn;  
219 - } else if (lineInformation.getUpOutTimer() == null) {  
220 - rtn.put("status", ResponseCode.ERROR);  
221 - rtn.put("msg", "上行出场时间为空");  
222 - return rtn;  
223 - } else if (lineInformation.getUpMileage() == null) {  
224 - rtn.put("status", ResponseCode.ERROR);  
225 - rtn.put("msg", "上行班次里程为空");  
226 - return rtn;  
227 - } else if (lineInformation.getUpTravelTime() == null) {  
228 - rtn.put("status", ResponseCode.ERROR);  
229 - rtn.put("msg", "上行班次时间为空");  
230 - return rtn;  
231 - } else if (lineInformation.getDownInMileage() == null) {  
232 - rtn.put("status", ResponseCode.ERROR);  
233 - rtn.put("msg", "下行进场里程为空");  
234 - return rtn;  
235 - } else if (lineInformation.getDownInTimer() == null) {  
236 - rtn.put("status", ResponseCode.ERROR);  
237 - rtn.put("msg", "下行进场时间为空");  
238 - return rtn;  
239 - } else if (lineInformation.getDownOutMileage() == null) {  
240 - rtn.put("status", ResponseCode.ERROR);  
241 - rtn.put("msg", "下行出场里程为空");  
242 - return rtn;  
243 - } else if (lineInformation.getDownOutTimer() == null) {  
244 - rtn.put("status", ResponseCode.ERROR);  
245 - rtn.put("msg", "下行出场时间为空");  
246 - return rtn;  
247 - } else if (lineInformation.getDownMileage() == null) {  
248 - rtn.put("status", ResponseCode.ERROR);  
249 - rtn.put("msg", "下行班次里程为空");  
250 - return rtn;  
251 - } else if (lineInformation.getDownTravelTime() == null) {  
252 - rtn.put("status", ResponseCode.ERROR);  
253 - rtn.put("msg", "下行班次时间为空");  
254 - return rtn;  
255 - } else if (StringUtils.isEmpty(lineInformation.getCarPark())) {  
256 - rtn.put("status", ResponseCode.ERROR);  
257 - rtn.put("msg", "停车场必须选择");  
258 - return rtn;  
259 - }  
260 -  
261 - // 单独验证停车场信息  
262 - String tcccode = lineInformation.getCarPark();  
263 - Map<String, Object> p1 = new HashMap<>();  
264 - p1.put("parkCode_eq", tcccode);  
265 - List<CarPark> carParkList = (List<CarPark>) carParkService.list(p1);  
266 - if (CollectionUtils.isEmpty(carParkList)) {  
267 - rtn.put("status", ResponseCode.ERROR);  
268 - rtn.put("msg", String.format("线路标准里的停车场code=%s,在停车场信息中未找到", tcccode));  
269 - return rtn;  
270 - } else if (carParkList.size() > 1) {  
271 - rtn.put("status", ResponseCode.ERROR);  
272 - rtn.put("msg", String.format("线路标准里的停车场code=%s,在停车场信息中有重复数据", tcccode));  
273 - return rtn;  
274 - } else {  
275 - CarPark carPark = carParkList.get(0);  
276 - if (StringUtils.isEmpty(carPark.getParkName())) {  
277 - rtn.put("status", ResponseCode.ERROR);  
278 - rtn.put("msg", String.format("线路标准里的停车场code=%s,在停车场信息中没有停车场名字", tcccode));  
279 - return rtn;  
280 - }  
281 - }  
282 -  
283 - rtn.put("status", ResponseCode.SUCCESS);  
284 - return rtn;  
285 - }  
286 -  
287 - /**  
288 - * 4、导入时刻表明细数据。  
289 - * @param form  
290 - * @return  
291 - */  
292 - @RequestMapping(value = "/importfile", method = RequestMethod.POST)  
293 - public Map<String, Object> importTTinfo(@RequestParam Map<String, Object> form) throws Exception {  
294 - Map<String, Object> rtn = new HashMap<>();  
295 -  
296 - // 1、修改已经上传的excel文件,在每个起点站后标示数字,表示第几个班次  
297 - // 2、由于格式问题,需要把内容都转换成字符串  
298 - String filename = (String) form.get("filename");  
299 - List<String> colList = new ArrayList<>();  
300 - Workbook workbook = Workbook.getWorkbook(new File(filename));  
301 - Sheet sheet = workbook.getSheet((String) form.get("sheetname"));  
302 - Cell[] cells = sheet.getRow(0);  
303 - for (int i = 0; i < cells.length; i++) {  
304 - if (i == 0) {  
305 - colList.add(cells[i].getContents().trim());  
306 - } else {  
307 - colList.add(cells[i].getContents() + i);  
308 - }  
309 - }  
310 -  
311 - WritableWorkbook writableWorkbook = Workbook.createWorkbook(new File(filename + "_temp.xls"), workbook);  
312 - WritableSheet sheet1 = writableWorkbook.getSheet((String) form.get("sheetname"));  
313 - for (int i = 0; i < sheet1.getColumns(); i++) { // 第一行数据  
314 - sheet1.addCell(new Label(i, 0, colList.get(i)));  
315 - }  
316 - for (int i = 1; i < sheet1.getRows(); i++) { // 第二行开始  
317 - Cell[] cells1 = sheet.getRow(i);  
318 - for (int j = 0; j < cells1.length; j++) {  
319 - sheet1.addCell(new Label(j, i, cells1[j].getContents()));  
320 - }  
321 - }  
322 - writableWorkbook.write();  
323 - writableWorkbook.close();  
324 -  
325 - // 2、删除原有数据  
326 - ttInfoDetailService.deleteByTtinfo(Long.valueOf(form.get("ttid").toString()));  
327 -  
328 - // 3、导入时刻表  
329 - // 获取停车场名字  
330 - LineInformation lineInformation = lineInformationService.findById(Integer.valueOf(form.get("lineinfo").toString()));  
331 - Map<String, Object> p1 = new HashMap<>();  
332 - p1.put("parkCode_eq", lineInformation.getCarPark());  
333 - List<CarPark> carParkList = (List<CarPark>) carParkService.list(p1);  
334 - String tccname = carParkList.get(0).getParkName();  
335 -  
336 - ttInfoDetailService.fileDataImport(  
337 - new File(filename + "_temp.xls"),  
338 - (String) form.get("sheetname"),  
339 - (String) form.get("xlname"),  
340 - (String) form.get("ttname"),  
341 - tccname  
342 - );  
343 -  
344 - return rtn;  
345 - }  
346 -  
347 - //------------- 旧版本 --------------//  
348 - @RequestMapping(value = "/dataImportExtend", method = RequestMethod.POST)  
349 - public Map<String, Object> uploadDataAndImport(  
350 - MultipartFile file, String xlmc, String ttinfoname) throws Exception {  
351 - Map<String, Object> resultMap = new HashMap<>();  
352 -  
353 - try {  
354 - // 查找lineinformation对象,没有报错  
355 - Map<String, Object> param = new HashMap<>();  
356 - param.put("line.name_eq", xlmc);  
357 - Iterator<LineInformation> lineInformationIterator = lineInformationService.list(param).iterator();  
358 - if (!lineInformationIterator.hasNext()) {  
359 - // 没有lineinformation,报错  
360 - resultMap.put("status", ResponseCode.ERROR);  
361 - resultMap.put("msg", "没有lineinfomation,线路名称=" + xlmc);  
362 - } else {  
363 - String tcccode = lineInformationIterator.next().getCarPark();  
364 - if (StringUtils.isEmpty(tcccode)) {  
365 - // 没有停车场code,报错  
366 - resultMap.put("status", ResponseCode.ERROR);  
367 - resultMap.put("msg", "线路lineinfomation没有停车场code信息,线路名称=" + xlmc);  
368 - } else {  
369 - // 使用停车场code查找停车场  
370 - param.clear();;  
371 - param.put("parkCode_eq", tcccode);  
372 - Iterator<CarPark> carParkIterator = carParkService.list(param).iterator();  
373 - if (!carParkIterator.hasNext()) {  
374 - // 指定的停车场code没有找到停车场信息,报错  
375 - resultMap.put("status", ResponseCode.ERROR);  
376 - resultMap.put("msg", "没有找到停车场信息,停车场code=" + tcccode);  
377 - } else {  
378 - String tccname = carParkIterator.next().getParkName();  
379 - if (StringUtils.isEmpty(tccname)) {  
380 - // 没有停车场名字,报错  
381 - resultMap.put("status", ResponseCode.ERROR);  
382 - resultMap.put("msg", "停车场信息没有停车场名字,停车场code=" + tcccode);  
383 - } else {  
384 - ttInfoDetailService.fileDataImport(file, xlmc, ttinfoname, tccname);  
385 - resultMap.put("status", ResponseCode.SUCCESS);  
386 - resultMap.put("msg", "导入成功");  
387 - }  
388 - }  
389 - }  
390 - }  
391 - } catch (Exception exp) {  
392 - exp.printStackTrace();  
393 - throw exp;  
394 - }  
395 -  
396 - return resultMap;  
397 - }  
398 -  
399 - @RequestMapping(value = "/edit/{xlid}/{ttid}", method = RequestMethod.GET)  
400 - public Object getEditInfo(  
401 - @PathVariable("xlid") Integer xlid,  
402 - @PathVariable("ttid") Long ttid) throws Exception {  
403 - // TODO:返回类型需要修正  
404 - return ttInfoDetailService.getEditInfo(xlid, ttid);  
405 - }  
406 -  
407 - @Override  
408 - public TTInfoDetail findById(@PathVariable("id") Long aLong) {  
409 - return ttInfoDetailRepository.findOneExtend(aLong);  
410 - }  
411 -  
412 - @RequestMapping(value = "/bcdetail", method = RequestMethod.GET)  
413 - public List<TTInfoDetail> findBcdetails(Integer xlId, Long ttinfoId, Long lpId) {  
414 - return ttInfoDetailRepository.findBcdetails(xlId, ttinfoId, lpId);  
415 - }  
416 -  
417 - @Override  
418 - public void dataExport(HttpServletResponse response, @RequestParam Map<String, Object> param) throws Exception {  
419 - // 获取injectktr  
420 - File ktrFile2 = new File(this.getClass().getResource(  
421 - dataToolsProperties.getTtinfodetailOutput()).toURI());  
422 - param.put("injectktrfile", ktrFile2.getAbsolutePath());  
423 - param.put("ttinfoid", param.get("ttinfoid"));  
424 -  
425 - super.dataExport(response, param);  
426 - }  
427 -  
428 - @Override  
429 - protected String getDataExportKtrClasspath() {  
430 - return dataToolsProperties.getTtinfodetailMetaoutput();  
431 - }  
432 -  
433 - @Override  
434 - protected String getDataExportFilename() {  
435 - return "时刻表";  
436 - }  
437 -}  
src/main/java/com/bsth/controller/schedule/basicinfo/CarDeviceController.java
@@ -4,7 +4,7 @@ import com.bsth.common.ResponseCode; @@ -4,7 +4,7 @@ import com.bsth.common.ResponseCode;
4 import com.bsth.controller.schedule.BController; 4 import com.bsth.controller.schedule.BController;
5 import com.bsth.entity.CarDevice; 5 import com.bsth.entity.CarDevice;
6 import com.bsth.service.schedule.CarDeviceService; 6 import com.bsth.service.schedule.CarDeviceService;
7 -import com.bsth.service.schedule.ScheduleException; 7 +import com.bsth.service.schedule.exception.ScheduleException;
8 import org.springframework.beans.factory.annotation.Autowired; 8 import org.springframework.beans.factory.annotation.Autowired;
9 import org.springframework.web.bind.annotation.RequestMapping; 9 import org.springframework.web.bind.annotation.RequestMapping;
10 import org.springframework.web.bind.annotation.RequestMethod; 10 import org.springframework.web.bind.annotation.RequestMethod;
src/main/java/com/bsth/controller/schedule/basicinfo/CarsController.java
@@ -4,7 +4,7 @@ import com.bsth.common.ResponseCode; @@ -4,7 +4,7 @@ import com.bsth.common.ResponseCode;
4 import com.bsth.controller.schedule.BController; 4 import com.bsth.controller.schedule.BController;
5 import com.bsth.entity.Cars; 5 import com.bsth.entity.Cars;
6 import com.bsth.service.schedule.CarsService; 6 import com.bsth.service.schedule.CarsService;
7 -import com.bsth.service.schedule.ScheduleException; 7 +import com.bsth.service.schedule.exception.ScheduleException;
8 import org.springframework.beans.factory.annotation.Autowired; 8 import org.springframework.beans.factory.annotation.Autowired;
9 import org.springframework.web.bind.annotation.RequestMapping; 9 import org.springframework.web.bind.annotation.RequestMapping;
10 import org.springframework.web.bind.annotation.RequestMethod; 10 import org.springframework.web.bind.annotation.RequestMethod;
src/main/java/com/bsth/controller/schedule/basicinfo/EmployeeController.java
@@ -4,7 +4,7 @@ import com.bsth.common.ResponseCode; @@ -4,7 +4,7 @@ import com.bsth.common.ResponseCode;
4 import com.bsth.controller.schedule.BController; 4 import com.bsth.controller.schedule.BController;
5 import com.bsth.entity.Personnel; 5 import com.bsth.entity.Personnel;
6 import com.bsth.service.schedule.EmployeeService; 6 import com.bsth.service.schedule.EmployeeService;
7 -import com.bsth.service.schedule.ScheduleException; 7 +import com.bsth.service.schedule.exception.ScheduleException;
8 import org.springframework.beans.factory.annotation.Autowired; 8 import org.springframework.beans.factory.annotation.Autowired;
9 import org.springframework.web.bind.annotation.RequestMapping; 9 import org.springframework.web.bind.annotation.RequestMapping;
10 import org.springframework.web.bind.annotation.RequestMethod; 10 import org.springframework.web.bind.annotation.RequestMethod;
src/main/java/com/bsth/controller/schedule/core/CarConfigInfoController.java
@@ -5,7 +5,7 @@ import com.bsth.controller.schedule.BController; @@ -5,7 +5,7 @@ import com.bsth.controller.schedule.BController;
5 import com.bsth.entity.schedule.CarConfigInfo; 5 import com.bsth.entity.schedule.CarConfigInfo;
6 import com.bsth.repository.schedule.CarConfigInfoRepository; 6 import com.bsth.repository.schedule.CarConfigInfoRepository;
7 import com.bsth.service.schedule.CarConfigInfoService; 7 import com.bsth.service.schedule.CarConfigInfoService;
8 -import com.bsth.service.schedule.ScheduleException; 8 +import com.bsth.service.schedule.exception.ScheduleException;
9 import org.springframework.beans.factory.annotation.Autowired; 9 import org.springframework.beans.factory.annotation.Autowired;
10 import org.springframework.web.bind.annotation.RequestMapping; 10 import org.springframework.web.bind.annotation.RequestMapping;
11 import org.springframework.web.bind.annotation.RequestMethod; 11 import org.springframework.web.bind.annotation.RequestMethod;
src/main/java/com/bsth/controller/schedule/core/EmployeeConfigInfoController.java
@@ -5,7 +5,7 @@ import com.bsth.controller.schedule.BController; @@ -5,7 +5,7 @@ import com.bsth.controller.schedule.BController;
5 import com.bsth.entity.schedule.EmployeeConfigInfo; 5 import com.bsth.entity.schedule.EmployeeConfigInfo;
6 import com.bsth.repository.schedule.EmployeeConfigInfoRepository; 6 import com.bsth.repository.schedule.EmployeeConfigInfoRepository;
7 import com.bsth.service.schedule.EmployeeConfigInfoService; 7 import com.bsth.service.schedule.EmployeeConfigInfoService;
8 -import com.bsth.service.schedule.ScheduleException; 8 +import com.bsth.service.schedule.exception.ScheduleException;
9 import org.springframework.beans.factory.annotation.Autowired; 9 import org.springframework.beans.factory.annotation.Autowired;
10 import org.springframework.web.bind.annotation.RequestMapping; 10 import org.springframework.web.bind.annotation.RequestMapping;
11 import org.springframework.web.bind.annotation.RequestMethod; 11 import org.springframework.web.bind.annotation.RequestMethod;
src/main/java/com/bsth/controller/schedule/core/GuideboardInfoController.java
@@ -5,7 +5,7 @@ import com.bsth.controller.schedule.BController; @@ -5,7 +5,7 @@ import com.bsth.controller.schedule.BController;
5 import com.bsth.entity.schedule.GuideboardInfo; 5 import com.bsth.entity.schedule.GuideboardInfo;
6 import com.bsth.repository.schedule.GuideboardInfoRepository; 6 import com.bsth.repository.schedule.GuideboardInfoRepository;
7 import com.bsth.service.schedule.GuideboardInfoService; 7 import com.bsth.service.schedule.GuideboardInfoService;
8 -import com.bsth.service.schedule.ScheduleException; 8 +import com.bsth.service.schedule.exception.ScheduleException;
9 import com.bsth.service.schedule.utils.DataToolsProperties; 9 import com.bsth.service.schedule.utils.DataToolsProperties;
10 import org.springframework.beans.factory.annotation.Autowired; 10 import org.springframework.beans.factory.annotation.Autowired;
11 import org.springframework.boot.context.properties.EnableConfigurationProperties; 11 import org.springframework.boot.context.properties.EnableConfigurationProperties;
src/main/java/com/bsth/controller/schedule/core/TTInfoController.java
@@ -3,7 +3,7 @@ package com.bsth.controller.schedule.core; @@ -3,7 +3,7 @@ package com.bsth.controller.schedule.core;
3 import com.bsth.common.ResponseCode; 3 import com.bsth.common.ResponseCode;
4 import com.bsth.controller.schedule.BController; 4 import com.bsth.controller.schedule.BController;
5 import com.bsth.entity.schedule.TTInfo; 5 import com.bsth.entity.schedule.TTInfo;
6 -import com.bsth.service.schedule.ScheduleException; 6 +import com.bsth.service.schedule.exception.ScheduleException;
7 import com.bsth.service.schedule.TTInfoService; 7 import com.bsth.service.schedule.TTInfoService;
8 import org.springframework.beans.factory.annotation.Autowired; 8 import org.springframework.beans.factory.annotation.Autowired;
9 import org.springframework.web.bind.annotation.RequestMapping; 9 import org.springframework.web.bind.annotation.RequestMapping;
src/main/java/com/bsth/controller/schedule/core/TTInfoDetailController.java 0 → 100644
  1 +package com.bsth.controller.schedule.core;
  2 +
  3 +import com.bsth.common.ResponseCode;
  4 +import com.bsth.controller.schedule.BController;
  5 +import com.bsth.entity.schedule.TTInfoDetail;
  6 +import com.bsth.service.schedule.TTInfoDetailService;
  7 +import org.springframework.beans.factory.annotation.Autowired;
  8 +import org.springframework.web.bind.annotation.PathVariable;
  9 +import org.springframework.web.bind.annotation.RequestMapping;
  10 +import org.springframework.web.bind.annotation.RequestMethod;
  11 +import org.springframework.web.bind.annotation.RestController;
  12 +
  13 +import java.util.HashMap;
  14 +import java.util.List;
  15 +import java.util.Map;
  16 +
  17 +/**
  18 + * Created by xu on 17/1/4.
  19 + */
  20 +@RestController
  21 +@RequestMapping("tidc")
  22 +public class TTInfoDetailController extends BController<TTInfoDetail, Long> {
  23 + @Autowired
  24 + private TTInfoDetailService ttInfoDetailService;
  25 +
  26 + @RequestMapping(value = "/bcdetail", method = RequestMethod.GET)
  27 + public List<TTInfoDetail> findBcdetails(Integer xlId, Long ttinfoId, Long lpId) {
  28 + return ttInfoDetailService.findBcdetails(xlId, ttinfoId, lpId);
  29 + }
  30 +
  31 + /**
  32 + * 验证sheet(以后放到规则引擎里去做)。
  33 + * @param filename excel文件全路径名
  34 + * @param sheetname sheet名字
  35 + * @param lineid 线路id
  36 + * @param linename 线路名称
  37 + * @return
  38 + */
  39 + @RequestMapping(value = "/validate/sheet", method = RequestMethod.POST)
  40 + public Map<String, Object> validate_sheet(String filename, String sheetname, Integer lineid, String linename) {
  41 + Map<String, Object> rtn = new HashMap<>();
  42 + try {
  43 + ttInfoDetailService.validateExcelSheet(filename, sheetname, lineid, linename);
  44 + rtn.put("status", ResponseCode.SUCCESS);
  45 + } catch (Exception exp) {
  46 + rtn.put("status", ResponseCode.ERROR);
  47 + rtn.put("msg", exp.getMessage());
  48 + }
  49 + return rtn;
  50 + }
  51 +
  52 + /**
  53 + * 验证关联的线路标准信息(以后放到规则引擎里去做)。
  54 + * @param lineinfoid
  55 + * @return
  56 + */
  57 + @RequestMapping(value = "/validate/lineinfo", method = RequestMethod.GET)
  58 + public Map<String, Object> validate_lineInfo(Integer lineinfoid) {
  59 + Map<String, Object> rtn = new HashMap<>();
  60 + try {
  61 + ttInfoDetailService.validateAssoLineInfo(lineinfoid);
  62 + rtn.put("status", ResponseCode.SUCCESS);
  63 + } catch (Exception exp) {
  64 + rtn.put("status", ResponseCode.ERROR);
  65 + rtn.put("msg", exp.getMessage());
  66 + }
  67 + return rtn;
  68 + }
  69 +
  70 + /**
  71 + * 获取时刻表明细编辑信息。
  72 + * @param xlid 线路id
  73 + * @param ttid 时刻表id
  74 + * @return
  75 + */
  76 + @RequestMapping(value = "/edit/{xlid}/{ttid}", method = RequestMethod.GET)
  77 + public Map<String, Object> getEditInfo(@PathVariable("xlid") Integer xlid,
  78 + @PathVariable("ttid") Long ttid) {
  79 + Map<String, Object> rtn = new HashMap<>();
  80 + try {
  81 + TTInfoDetailService.EditInfo editInfo = ttInfoDetailService.getEditInfo(xlid, ttid);
  82 + rtn.put("status", ResponseCode.SUCCESS);
  83 + rtn.put("data", editInfo);
  84 + } catch (Exception exp) {
  85 + rtn.put("status", ResponseCode.ERROR);
  86 + rtn.put("msg", exp.getMessage());
  87 + }
  88 + return rtn;
  89 + }
  90 +
  91 +}
src/main/java/com/bsth/controller/sys/DutyEmployeeController.java 0 → 100644
  1 +package com.bsth.controller.sys;
  2 +
  3 +import com.bsth.controller.BaseController;
  4 +import com.bsth.entity.sys.DutyEmployee;
  5 +import com.bsth.service.sys.DutyEmployeeService;
  6 +import org.springframework.beans.factory.annotation.Autowired;
  7 +import org.springframework.web.bind.annotation.RequestMapping;
  8 +import org.springframework.web.bind.annotation.RequestParam;
  9 +import org.springframework.web.bind.annotation.RestController;
  10 +
  11 +import java.util.List;
  12 +
  13 +/**
  14 + * Created by panzhao on 2017/1/5.
  15 + */
  16 +@RestController
  17 +@RequestMapping("dutyEmployee")
  18 +public class DutyEmployeeController extends BaseController<DutyEmployee, Long> {
  19 +
  20 + @Autowired
  21 + DutyEmployeeService dutyEmployeeService;
  22 +
  23 + @RequestMapping(value = "queryByLineAndTime")
  24 + public List<DutyEmployee> getDutyEmployee(@RequestParam String lineCode, @RequestParam String startTime, @RequestParam String endTime) {
  25 + return dutyEmployeeService.getDutyEmployee(lineCode, startTime, endTime);
  26 + }
  27 +}
src/main/java/com/bsth/data/BasicData.java
@@ -26,12 +26,12 @@ import java.util.concurrent.TimeUnit; @@ -26,12 +26,12 @@ import java.util.concurrent.TimeUnit;
26 */ 26 */
27 @Component 27 @Component
28 public class BasicData implements CommandLineRunner { 28 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; 29 +
  30 + //公司代码和公司名对照(K: 公司编码,V:公司名)
  31 + public static Map<String, String> businessCodeNameMap;
  32 +
  33 + //分公司公司代码和分公司公司名对照(K: 公司编码+分公司编码,V:分公司公司名)
  34 + public static Map<String, String> businessFgsCodeNameMap;
35 35
36 //设备号和车辆自编号 (K: 设备编码 ,V:车辆自编号) 36 //设备号和车辆自编号 (K: 设备编码 ,V:车辆自编号)
37 public static BiMap<String, String> deviceId2NbbmMap; 37 public static BiMap<String, String> deviceId2NbbmMap;
@@ -39,27 +39,21 @@ public class BasicData implements CommandLineRunner { @@ -39,27 +39,21 @@ public class BasicData implements CommandLineRunner {
39 //车辆自编号和公司代码对照 (K: 车辆自编号 ,V:公司代码) 39 //车辆自编号和公司代码对照 (K: 车辆自编号 ,V:公司代码)
40 public static Map<String, String> nbbm2CompanyCodeMap; 40 public static Map<String, String> nbbm2CompanyCodeMap;
41 41
42 - //站点编码和名称对照,包括停车场 (K: 站点编码 ,V:站点名称) 42 + //站点编码和名称对照,包括停车场 (K: lineCode_updown_stationCode ,V:站点名称)
43 public static Map<String, String> stationCode2NameMap; 43 public static Map<String, String> stationCode2NameMap;
44 44
45 //线路起终点对照(线路编码_上下行_起终点) 1024_0_B (1024上行起点) 45 //线路起终点对照(线路编码_上下行_起终点) 1024_0_B (1024上行起点)
46 - public static Map<String, String> lineSEPointMap; 46 + //public static Map<String, String> lineSEPointMap;
47 47
48 //车辆和线路对照 48 //车辆和线路对照
49 public static Map<String, Line> nbbm2LineMap; 49 public static Map<String, Line> nbbm2LineMap;
50 50
51 - //线路和用户对照 用于webSocket定向推送消息(用户进入线调时写入数据)  
52 - //public static TreeMultimap<String, String> lineCode2SocketUserMap = TreeMultimap.create();  
53 -  
54 //线路ID和code 对照 51 //线路ID和code 对照
55 public static BiMap<Integer, String> lineId2CodeMap; 52 public static BiMap<Integer, String> lineId2CodeMap;
56 53
57 //线路编码和名称对照 54 //线路编码和名称对照
58 public static Map<String, String> lineCode2NameMap; 55 public static Map<String, String> lineCode2NameMap;
59 56
60 - //线路编码_站点编码 == 0|1 上下行  
61 - //public static Map<String, Integer> lineStationUpDownMap;  
62 -  
63 //停车场 57 //停车场
64 public static List<String> parkCodeList; 58 public static List<String> parkCodeList;
65 59
@@ -77,7 +71,7 @@ public class BasicData implements CommandLineRunner { @@ -77,7 +71,7 @@ public class BasicData implements CommandLineRunner {
77 public static Map<String, String> allPerson; 71 public static Map<String, String> allPerson;
78 72
79 //站点名和运管处编号 对照 73 //站点名和运管处编号 对照
80 - public static Map<String,Integer> stationName2YgcNumber; 74 + public static Map<String, Integer> stationName2YgcNumber;
81 75
82 76
83 static Logger logger = LoggerFactory.getLogger(BasicData.class); 77 static Logger logger = LoggerFactory.getLogger(BasicData.class);
@@ -90,6 +84,10 @@ public class BasicData implements CommandLineRunner { @@ -90,6 +84,10 @@ public class BasicData implements CommandLineRunner {
90 Application.mainServices.scheduleWithFixedDelay(dataLoader, 2, 2, TimeUnit.HOURS); 84 Application.mainServices.scheduleWithFixedDelay(dataLoader, 2, 2, TimeUnit.HOURS);
91 } 85 }
92 86
  87 + public static String getStationNameByCode(String code, String prefix){
  88 + String name = stationCode2NameMap.get(code);
  89 + return name != null? name: stationCode2NameMap.get(prefix + code);
  90 + }
93 91
94 @Component 92 @Component
95 public static class BasicDataLoader extends Thread { 93 public static class BasicDataLoader extends Thread {
@@ -114,7 +112,7 @@ public class BasicData implements CommandLineRunner { @@ -114,7 +112,7 @@ public class BasicData implements CommandLineRunner {
114 112
115 @Autowired 113 @Autowired
116 PersonnelRepository personnelRepository; 114 PersonnelRepository personnelRepository;
117 - 115 +
118 @Autowired 116 @Autowired
119 BusinessRepository businessRepository; 117 BusinessRepository businessRepository;
120 118
@@ -156,47 +154,24 @@ public class BasicData implements CommandLineRunner { @@ -156,47 +154,24 @@ public class BasicData implements CommandLineRunner {
156 return 0; 154 return 0;
157 } 155 }
158 156
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 /** 157 /**
184 * loadBusinessInfo 158 * loadBusinessInfo
185 * (公司代码公司名对照) 159 * (公司代码公司名对照)
186 */ 160 */
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; 161 + public void loadBusinessInfo() {
  162 + Map<String, String> businessMap = new HashMap<String, String>();
  163 + Map<String, String> businessFgsMap = new HashMap<String, String>();
  164 + Iterator<Business> busIter = businessRepository.findAll().iterator();
  165 + Business t;
  166 + while (busIter.hasNext()) {
  167 + t = busIter.next();
  168 + businessMap.put(t.getBusinessCode(), t.getBusinessName());
  169 + businessFgsMap.put(t.getBusinessCode() + "_" + t.getUpCode(), t.getBusinessName());
  170 + }
  171 + businessCodeNameMap = businessMap;
  172 + businessFgsCodeNameMap = businessFgsMap;
199 } 173 }
  174 +
200 /** 175 /**
201 * @Title: loadDeviceInfo 176 * @Title: loadDeviceInfo
202 * @Description: TODO(加载设备相关信息) 177 * @Description: TODO(加载设备相关信息)
@@ -223,13 +198,13 @@ public class BasicData implements CommandLineRunner { @@ -223,13 +198,13 @@ public class BasicData implements CommandLineRunner {
223 */ 198 */
224 public void loadStationInfo() { 199 public void loadStationInfo() {
225 Map<String, String> stationCode2Name = new HashMap<>(); 200 Map<String, String> stationCode2Name = new HashMap<>();
226 - Iterator<Station> iterator = stationRepository.findAll().iterator();  
227 - //站点  
228 - Station station; 201 + Iterator<StationRoute> iterator = stationRouteRepository.findAll().iterator();
  202 + StationRoute sroute;
229 while (iterator.hasNext()) { 203 while (iterator.hasNext()) {
230 - station = iterator.next();  
231 - stationCode2Name.put(station.getStationCod(), station.getStationName()); 204 + sroute = iterator.next();
  205 + stationCode2Name.put(sroute.getLineCode() + "_" + sroute.getDirections() + "_" + sroute.getStationCode(), sroute.getStationName());
232 } 206 }
  207 +
233 //停车场 208 //停车场
234 Iterator<CarPark> iterator2 = carParkRepository.findAll().iterator(); 209 Iterator<CarPark> iterator2 = carParkRepository.findAll().iterator();
235 210
@@ -266,7 +241,7 @@ public class BasicData implements CommandLineRunner { @@ -266,7 +241,7 @@ public class BasicData implements CommandLineRunner {
266 * @Title: loadLineInfo 241 * @Title: loadLineInfo
267 * @Description: TODO(加载线路相关信息) 242 * @Description: TODO(加载线路相关信息)
268 */ 243 */
269 - public void loadLineInfo(){ 244 + public void loadLineInfo() {
270 Iterator<Line> iterator = lineRepository.findAll().iterator(); 245 Iterator<Line> iterator = lineRepository.findAll().iterator();
271 246
272 Line line; 247 Line line;
@@ -276,36 +251,36 @@ public class BasicData implements CommandLineRunner { @@ -276,36 +251,36 @@ public class BasicData implements CommandLineRunner {
276 Map<String, String> code2SHcode = new HashMap<String, String>(); 251 Map<String, String> code2SHcode = new HashMap<String, String>();
277 Map<String, Integer> tempStationName2YgcNumber = new HashMap<String, Integer>(); 252 Map<String, Integer> tempStationName2YgcNumber = new HashMap<String, Integer>();
278 253
279 - while(iterator.hasNext()){ 254 + while (iterator.hasNext()) {
280 line = iterator.next(); 255 line = iterator.next();
281 biMap.put(line.getId(), line.getLineCode()); 256 biMap.put(line.getId(), line.getLineCode());
282 code2name.put(line.getLineCode(), line.getName()); 257 code2name.put(line.getLineCode(), line.getName());
283 - id2SHcode.put(line.getId(),line.getShanghaiLinecode()); 258 + id2SHcode.put(line.getId(), line.getShanghaiLinecode());
284 code2SHcode.put(line.getLineCode(), line.getShanghaiLinecode()); 259 code2SHcode.put(line.getLineCode(), line.getShanghaiLinecode());
285 260
286 /** 261 /**
287 * 加载运管处的站点及序号 262 * 加载运管处的站点及序号
288 * 上行从1开始,下行顺序续编 263 * 上行从1开始,下行顺序续编
289 264
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 - }*/ 265 + List<Object[]> ygcLines = stationRouteRepository.findAllLineWithYgc();
  266 + if(ygcLines != null && ygcLines.size() > 0){
  267 + int size = ygcLines.size();
  268 + Object[] tempArray ;
  269 + int num = 1;
  270 + String key;
  271 + String lineCode = "";
  272 + for (int i = 0; i < size; i ++){
  273 + tempArray = ygcLines.get(i);
  274 + if(lineCode.equals("")){
  275 + lineCode = tempArray[0]+"";
  276 + }else if(!lineCode.equals(tempArray[0]+"")){
  277 + num = 1;
  278 + lineCode = tempArray[0]+"";
  279 + }
  280 + key = tempArray[0] + "_"+tempArray[1] + "_"+tempArray[2];
  281 + tempStationName2YgcNumber.put(key,num++);
  282 + }
  283 + }*/
309 } 284 }
310 285
311 lineId2CodeMap = biMap; 286 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/arrival/ArrivalData_GPS.java
1 package com.bsth.data.arrival; 1 package com.bsth.data.arrival;
2 2
3 -import com.bsth.data.match.Arrival2Schedule;  
4 import com.bsth.data.schedule.DayOfSchedule; 3 import com.bsth.data.schedule.DayOfSchedule;
5 import com.google.common.collect.ArrayListMultimap; 4 import com.google.common.collect.ArrayListMultimap;
6 import com.google.common.collect.ListMultimap; 5 import com.google.common.collect.ListMultimap;
@@ -59,7 +58,7 @@ public class ArrivalData_GPS implements CommandLineRunner{ @@ -59,7 +58,7 @@ public class ArrivalData_GPS implements CommandLineRunner{
59 58
60 @Override 59 @Override
61 public void run() { 60 public void run() {
62 - try{ 61 + /*try{
63 logger.info("开始加载到离站数据, " + System.currentTimeMillis()); 62 logger.info("开始加载到离站数据, " + System.currentTimeMillis());
64 List<ArrivalEntity> arrSets = dataLoader.load(); 63 List<ArrivalEntity> arrSets = dataLoader.load();
65 if(null == arrSets || arrSets.size() == 0) 64 if(null == arrSets || arrSets.size() == 0)
@@ -86,7 +85,7 @@ public class ArrivalData_GPS implements CommandLineRunner{ @@ -86,7 +85,7 @@ public class ArrivalData_GPS implements CommandLineRunner{
86 Arrival2Schedule.start(carSet); 85 Arrival2Schedule.start(carSet);
87 }catch(Exception e){ 86 }catch(Exception e){
88 logger.error("", e); 87 logger.error("", e);
89 - } 88 + }*/
90 } 89 }
91 } 90 }
92 91
src/main/java/com/bsth/data/forecast/ForecastRealServer.java
1 package com.bsth.data.forecast; 1 package com.bsth.data.forecast;
2 2
  3 +import com.bsth.Application;
3 import com.bsth.data.forecast.entity.ForecastResult; 4 import com.bsth.data.forecast.entity.ForecastResult;
4 import com.bsth.data.forecast.entity.ForecastResult.ForecastResultItem; 5 import com.bsth.data.forecast.entity.ForecastResult.ForecastResultItem;
5 import com.bsth.data.forecast.entity.SimpleRoute; 6 import com.bsth.data.forecast.entity.SimpleRoute;
@@ -20,6 +21,7 @@ import java.util.ArrayList; @@ -20,6 +21,7 @@ import java.util.ArrayList;
20 import java.util.HashMap; 21 import java.util.HashMap;
21 import java.util.List; 22 import java.util.List;
22 import java.util.Map; 23 import java.util.Map;
  24 +import java.util.concurrent.TimeUnit;
23 25
24 /** 26 /**
25 * 27 *
@@ -58,7 +60,7 @@ public class ForecastRealServer implements CommandLineRunner { @@ -58,7 +60,7 @@ public class ForecastRealServer implements CommandLineRunner {
58 @Override 60 @Override
59 public void run(String... arg0) throws Exception { 61 public void run(String... arg0) throws Exception {
60 //2小时更新一次站点间耗时数据 62 //2小时更新一次站点间耗时数据
61 - //Application.mainServices.scheduleWithFixedDelay(dataLoader, 12, 120 * 60, TimeUnit.SECONDS); 63 + Application.mainServices.scheduleWithFixedDelay(dataLoader, 12, 120 * 60, TimeUnit.SECONDS);
62 } 64 }
63 65
64 /** 66 /**
@@ -86,7 +88,7 @@ public class ForecastRealServer implements CommandLineRunner { @@ -86,7 +88,7 @@ public class ForecastRealServer implements CommandLineRunner {
86 //终点站 88 //终点站
87 String eStation = null; 89 String eStation = null;
88 //当前执行班次 90 //当前执行班次
89 - ScheduleRealInfo sch = dayOfSchedule.execPlanMap().get(nbbm); 91 + ScheduleRealInfo sch = dayOfSchedule.executeCurr(nbbm);
90 if(null != sch) 92 if(null != sch)
91 eStation = sch.getZdzCode(); 93 eStation = sch.getZdzCode();
92 94
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,42 @@ public class GpsRealData implements CommandLineRunner { @@ -67,12 +65,42 @@ 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, 5, 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 + GpsEntity old = gpsMap.get(device);
  75 +
  76 + try {
  77 + if (!StringUtils.isEmpty(gps.getStopNo())) {
  78 + //站点编码改变
  79 + if (null == old || !gps.getStopNo().equals(old.getStopNo())) {
  80 + gps.setArrTime(gps.getTimestamp());
  81 + //预测到达终点时间
  82 + forecastRealServer.forecast(gps.getNbbm(), gps);
  83 + } else {
  84 + gps.setArrTime(old.getArrTime());
  85 + //不预测, 重新计算终点时间
  86 + gps.setExpectStopTime(forecastRealServer.expectStopTime(gps.getNbbm()));
  87 + }
  88 + }
  89 + } catch (Exception e) {
  90 + logger.error("", e);
  91 + }
  92 +
  93 + //刷新对照
  94 + gpsMap.put(device, gps);
  95 + if (StringUtils.isNotBlank(gps.getLineId())) {
  96 + //站点名称
  97 + gps.setStationName(getStationName(gps));
  98 + lineCode2Devices.put(gps.getLineId(), device);
  99 + }
  100 + }
  101 +
  102 + public String getStationName(GpsEntity gps) {
  103 + return BasicData.getStationNameByCode(gps.getStopNo(), gps.getLineId() + "_" + gps.getUpDown() + "_");
76 } 104 }
77 105
78 /** 106 /**
@@ -94,7 +122,7 @@ public class GpsRealData implements CommandLineRunner { @@ -94,7 +122,7 @@ public class GpsRealData implements CommandLineRunner {
94 for (String device : set) { 122 for (String device : set) {
95 gps = gpsMap.get(device); 123 gps = gpsMap.get(device);
96 //过滤异常GPS数据 124 //过滤异常GPS数据
97 - if (gps.isAbnormal()) 125 + if (gps == null || gps.isAbnormal())
98 continue; 126 continue;
99 127
100 sch = dayOfSchedule.execPlanMap().get(gps.getNbbm()); 128 sch = dayOfSchedule.execPlanMap().get(gps.getNbbm());
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; 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.GpsRealData;
4 import com.bsth.data.gpsdata.arrival.handlers.*; 5 import com.bsth.data.gpsdata.arrival.handlers.*;
5 import com.bsth.data.gpsdata.arrival.utils.CircleQueue; 6 import com.bsth.data.gpsdata.arrival.utils.CircleQueue;
6 import org.slf4j.Logger; 7 import org.slf4j.Logger;
@@ -33,6 +34,9 @@ public class GpsRealAnalyse { @@ -33,6 +34,9 @@ public class GpsRealAnalyse {
33 @Autowired 34 @Autowired
34 ReverseSignalHandle reverseSignalHandle; 35 ReverseSignalHandle reverseSignalHandle;
35 36
  37 + @Autowired
  38 + GpsRealData gpsRealData;
  39 +
36 //50个线程 40 //50个线程
37 static ExecutorService threadPool = Executors.newFixedThreadPool(50); 41 static ExecutorService threadPool = Executors.newFixedThreadPool(50);
38 42
@@ -45,6 +49,10 @@ public class GpsRealAnalyse { @@ -45,6 +49,10 @@ public class GpsRealAnalyse {
45 try { 49 try {
46 //等待子线程结束 50 //等待子线程结束
47 count.await(); 51 count.await();
  52 +
  53 + //加入实时gps对照
  54 + for(GpsEntity gps: list)
  55 + gpsRealData.put(gps);
48 } catch (InterruptedException e) { 56 } catch (InterruptedException e) {
49 logger.error("", e); 57 logger.error("", e);
50 } 58 }
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/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,28 @@ public class InOutStationSignalHandle extends SignalHandle{ @@ -108,16 +133,28 @@ 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);
  157 + dayOfSchedule.save(schPrev);
121 } 158 }
122 } 159 }
123 } 160 }
@@ -129,9 +166,12 @@ public class InOutStationSignalHandle extends SignalHandle{ @@ -129,9 +166,12 @@ public class InOutStationSignalHandle extends SignalHandle{
129 */ 166 */
130 private void inStation(GpsEntity gps, GpsEntity prev){ 167 private void inStation(GpsEntity gps, GpsEntity prev){
131 ScheduleRealInfo sch = dayOfSchedule.executeCurr(gps.getNbbm()); 168 ScheduleRealInfo sch = dayOfSchedule.executeCurr(gps.getNbbm());
132 - String zdzCode = sch.getZdzCode();  
133 169
134 - if(zdzCode != null && gps.getStopNo().equals(zdzCode)){ 170 + if(gps.getStopNo().equals(sch.getZdzCode())){
  171 +
  172 + //实达时间不覆盖
  173 + if(StringUtils.isNotEmpty(sch.getZdsjActual()))
  174 + return;
135 175
136 sch.setZdsjActualAll(gps.getTimestamp()); 176 sch.setZdsjActualAll(gps.getTimestamp());
137 //已完成班次数 177 //已完成班次数
@@ -142,33 +182,22 @@ public class InOutStationSignalHandle extends SignalHandle{ @@ -142,33 +182,22 @@ public class InOutStationSignalHandle extends SignalHandle{
142 //持久化 182 //持久化
143 dayOfSchedule.save(sch); 183 dayOfSchedule.save(sch);
144 //下发调度指令 184 //下发调度指令
145 - //directiveService.send60Dispatch(next, doneSum, "到站@系统"); 185 + directiveService.send60Dispatch(next, doneSum, "到站@系统");
146 186
147 //准备执行下一个班次 187 //准备执行下一个班次
148 if (next != null) { 188 if (next != null) {
149 next.setQdzArrDatesj(sch.getZdsjActual()); 189 next.setQdzArrDatesj(sch.getZdsjActual());
150 dayOfSchedule.addExecPlan(next); 190 dayOfSchedule.addExecPlan(next);
151 -  
152 //进站既进场 191 //进站既进场
153 inStationAndInPark(sch, next); 192 inStationAndInPark(sch, next);
154 -  
155 //将gps转换为下一个班次走向的站内信号 193 //将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 - } 194 + transformUpdown(gps, sch);
163 } 195 }
164 } 196 }
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 - }*/ 197 + else if(sch.getFcsjActual() == null){
  198 + //有进站,但班次没有实发,向前追溯一下信号
  199 + scheduleSignalState.signalRetrospect(gps, sch);
  200 + }
172 } 201 }
173 202
174 /** 203 /**
@@ -179,8 +208,11 @@ public class InOutStationSignalHandle extends SignalHandle{ @@ -179,8 +208,11 @@ public class InOutStationSignalHandle extends SignalHandle{
179 LineConfig config = lineConfigData.get(sch.getXlBm()); 208 LineConfig config = lineConfigData.get(sch.getXlBm());
180 if (next.getBcType().equals("in") && 209 if (next.getBcType().equals("in") &&
181 config != null && config.getOutConfig() == 2) { 210 config != null && config.getOutConfig() == 2) {
182 - next.setFcsjActualAll(sch.getZdsjActual());  
183 - next.setZdsjActualAll(sch.getZdsjActual()); 211 + next.setFcsjActualAll(sch.getZdsjActualTime());
  212 + next.setZdsjActualAll(sch.getZdsjActualTime());
  213 +
  214 + sendUtils.refreshSch(next);
  215 + dayOfSchedule.save(next);
184 } 216 }
185 } 217 }
186 218
@@ -193,7 +225,7 @@ public class InOutStationSignalHandle extends SignalHandle{ @@ -193,7 +225,7 @@ public class InOutStationSignalHandle extends SignalHandle{
193 */ 225 */
194 private boolean willDepart(GpsEntity gps, GpsEntity prev, Object task){ 226 private boolean willDepart(GpsEntity gps, GpsEntity prev, Object task){
195 227
196 -/* ScheduleRealInfo sch = (ScheduleRealInfo) task; 228 + /*ScheduleRealInfo sch = (ScheduleRealInfo) task;
197 ScheduleRealInfo prevTask = dayOfSchedule.prev(sch); 229 ScheduleRealInfo prevTask = dayOfSchedule.prev(sch);
198 if(prevTask == null || prevTask.getBcType().equals("out")) 230 if(prevTask == null || prevTask.getBcType().equals("out"))
199 return false; 231 return false;
@@ -216,4 +248,4 @@ public class InOutStationSignalHandle extends SignalHandle{ @@ -216,4 +248,4 @@ public class InOutStationSignalHandle extends SignalHandle{
216 }*/ 248 }*/
217 return false; 249 return false;
218 } 250 }
219 -} 251 +}
220 \ No newline at end of file 252 \ No newline at end of file
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 +}
43 \ No newline at end of file 44 \ No newline at end of file
src/main/java/com/bsth/data/gpsdata/arrival/handlers/ReverseSignalHandle.java
1 package com.bsth.data.gpsdata.arrival.handlers; 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() >= 3
  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 +}
133 \ No newline at end of file 138 \ No newline at end of file
src/main/java/com/bsth/data/gpsdata/arrival/utils/CircleQueue.java
@@ -105,8 +105,8 @@ public class CircleQueue&lt;T&gt; { @@ -105,8 +105,8 @@ public class CircleQueue&lt;T&gt; {
105 } 105 }
106 } 106 }
107 } else { 107 } else {
108 - elementDataSort = new Object[tail];  
109 - for (int i = 0; i < tail; i++) { 108 + elementDataSort = new Object[tail + 1];
  109 + for (int i = 0; i <= tail; i++) {
110 elementDataSort[i] = elementDataCopy[i]; 110 elementDataSort[i] = elementDataCopy[i];
111 } 111 }
112 } 112 }
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 + if(signalState != null)
  104 + signalStateData.put(signalState);
  105 + }
  106 + }
  107 +
  108 + public void signalRetrospect(GpsEntity gps) {
  109 + signalRetrospect(gps, dayOfSchedule.executeCurr(gps.getNbbm()));
  110 + }
  111 +
  112 + /**
  113 + * 信号追溯
  114 + *
  115 + * @param gps
  116 + * @param sch
  117 + */
  118 + public void signalRetrospect(GpsEntity gps, ScheduleRealInfo sch) {
  119 + //回放数据,是否有掉线或者漂移
  120 + CircleQueue<GpsEntity> queue = GeoCacheData.getGps(gps.getNbbm());
  121 + if (queue == null || queue.size() == 0 /*|| gps.getInstation() == 0*/)
  122 + return;
  123 +
  124 + //起始时间点
  125 + long st = 0;
  126 + ScheduleRealInfo prev = dayOfSchedule.prev(sch);
  127 +
  128 + if (prev != null) {
  129 + if (prev.getZdsjActual() != null)
  130 + st = prev.getZdsjActualTime();
  131 + else
  132 + st = (GeoCacheData.midwayStation(gps.getLineId(), gps.getUpDown(), sch.getQdzCode(), gps.getStopNo()).size() + 1) * (1000 * 60 * 5);
  133 + }
  134 +
  135 + Object[] tempArray = queue.getQueue();
  136 + int len = tempArray.length;
  137 +
  138 + Object[] array = new Object[len + 1];
  139 + System.arraycopy(tempArray, 0, array, 0, len);
  140 + array[len] = gps;
  141 +
  142 + String gpsState = "";
  143 + GpsEntity tempGps, nearGps = null;
  144 + int i = len - 1;
  145 + for (; i >= 0; i--) {
  146 + tempGps = (GpsEntity) array[i];
  147 +
  148 + gpsState = tempGps.getSignalState();
  149 + if (gpsState.equals("truncation"))
  150 + break;
  151 + else if (gpsState.equals("drift")) {
  152 + nearGps = (GpsEntity) array[i + 1];
  153 + break;
  154 + } else if (gpsState.equals("reconnection")) {
  155 + nearGps = tempGps;
  156 + break;
  157 + }
  158 +
  159 + if (tempGps.getTimestamp() < st)
  160 + break;
  161 + }
  162 +
  163 + if (nearGps != null && i > 0) {
  164 + createSignalAbnormal(gpsState, nearGps, i, array, sch);
  165 + }
  166 + }
  167 +
  168 + private void createSignalAbnormal(String gpsState, GpsEntity nearGps, int i, Object[] array, ScheduleRealInfo sch) {
  169 + switch (gpsState) {
  170 + case "drift":
  171 + driftSignalAbnormal(nearGps, i, array, sch);
  172 + break;
  173 + case "reconnection":
  174 + offlineSignalAbnormal(nearGps, ((GpsEntity) array[i - 1]), sch);
  175 + break;
  176 + }
  177 + }
  178 +
  179 + /**
  180 + * 掉线异常状态记录
  181 + *
  182 + * @param e
  183 + * @param s
  184 + */
  185 + private void offlineSignalAbnormal(GpsEntity e, GpsEntity s, ScheduleRealInfo sch) {
  186 + long st = s.getTimestamp(), et = e.getTimestamp();
  187 +
  188 + //掉线超过10分钟才记录
  189 + if (et - st < (1000 * 60 * 10))
  190 + return;
  191 +
  192 + SignalAbnormal signalAbnormal = new SignalAbnormal();
  193 + signalAbnormal.setSt(st);
  194 + signalAbnormal.setEt(et);
  195 + signalAbnormal.setAbnormalType("reconnection");
  196 + signalAbnormal.setDestCode(sch.getQdzCode());
  197 + signalAbnormal.setOutOrIn(0);
  198 +
  199 + //截断GPS
  200 + e.setSignalState("truncation");
  201 +
  202 + //记录信号状态
  203 + SignalState signalState = SignalState.abnormalSignalSTate(sch, signalAbnormal);
  204 + signalStateData.put(signalState);
  205 + }
  206 +
  207 + /**
  208 + * 漂移异常状态记录
  209 + *
  210 + * @param nearGps
  211 + * @param i
  212 + * @param array
  213 + */
  214 + private void driftSignalAbnormal(GpsEntity nearGps, int i, Object[] array, ScheduleRealInfo sch) {
  215 + GpsEntity gps, s = null;
  216 + //找到漂移开始时间
  217 + for (; i >= 0; i--) {
  218 + gps = (GpsEntity) array[i];
  219 +
  220 + if (!gps.getSignalState().equals("drift") || i == 0
  221 + || gps.getSignalState().equals("truncation")) {
  222 + s = gps;
  223 + break;
  224 + }
  225 + }
  226 +
  227 + long st = s.getTimestamp(), et = nearGps.getTimestamp();
  228 + if (et - st < (1000 * 60 * 3))
  229 + return;
  230 + /*if (s != null){
  231 + st = s.getTimestamp();
  232 + //漂移小于3分钟
  233 + if(et - st < (1000 * 60 * 3))
  234 + return;
  235 + }*/
  236 +
  237 +
  238 + SignalAbnormal signalAbnormal = new SignalAbnormal();
  239 + signalAbnormal.setSt(st);
  240 + signalAbnormal.setEt(et);
  241 + signalAbnormal.setAbnormalType("drift");
  242 + signalAbnormal.setDestCode(sch.getQdzCode());
  243 + signalAbnormal.setOutOrIn(0);
  244 +
  245 + //截断GPS
  246 + nearGps.setSignalState("truncation");
  247 +
  248 + //记录信号状态
  249 + SignalState signalState = SignalState.abnormalSignalSTate(sch, signalAbnormal);
  250 + signalStateData.put(signalState);
  251 + }
  252 +}
0 \ No newline at end of file 253 \ No newline at end of file
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/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("W9H-003"))
  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/pilot80/PilotReport.java
@@ -84,6 +84,8 @@ public class PilotReport { @@ -84,6 +84,8 @@ public class PilotReport {
84 84
85 //下发调度指令 85 //下发调度指令
86 directiveService.send60Dispatch(outSch, dayOfSchedule.doneSum(nbbm), "请出@系统"); 86 directiveService.send60Dispatch(outSch, dayOfSchedule.doneSum(nbbm), "请出@系统");
  87 + //下发线路切换指令
  88 + directiveService.lineChange(outSch.getClZbh(), outSch.getXlBm(), "请出@系统");
87 /* d80.setRemarks("计划出场时间:" + outSch.getDfsj()); 89 /* d80.setRemarks("计划出场时间:" + outSch.getDfsj());
88 //当前GPS位置 90 //当前GPS位置
89 GpsEntity gps = gpsRealData.get(d80.getDeviceId()); 91 GpsEntity gps = gpsRealData.get(d80.getDeviceId());
src/main/java/com/bsth/data/schedule/DayOfSchedule.java
@@ -29,6 +29,7 @@ import org.slf4j.Logger; @@ -29,6 +29,7 @@ import org.slf4j.Logger;
29 import org.slf4j.LoggerFactory; 29 import org.slf4j.LoggerFactory;
30 import org.springframework.beans.factory.annotation.Autowired; 30 import org.springframework.beans.factory.annotation.Autowired;
31 import org.springframework.boot.CommandLineRunner; 31 import org.springframework.boot.CommandLineRunner;
  32 +import org.springframework.core.annotation.Order;
32 import org.springframework.stereotype.Component; 33 import org.springframework.stereotype.Component;
33 34
34 import java.text.ParseException; 35 import java.text.ParseException;
@@ -43,6 +44,7 @@ import java.util.concurrent.TimeUnit; @@ -43,6 +44,7 @@ import java.util.concurrent.TimeUnit;
43 * @date 2016年8月15日 上午10:16:12 44 * @date 2016年8月15日 上午10:16:12
44 */ 45 */
45 @Component 46 @Component
  47 +@Order(value = 3)
46 public class DayOfSchedule implements CommandLineRunner { 48 public class DayOfSchedule implements CommandLineRunner {
47 49
48 Logger logger = LoggerFactory.getLogger(this.getClass()); 50 Logger logger = LoggerFactory.getLogger(this.getClass());
@@ -83,6 +85,9 @@ public class DayOfSchedule implements CommandLineRunner { @@ -83,6 +85,9 @@ public class DayOfSchedule implements CommandLineRunner {
83 @Autowired 85 @Autowired
84 GpsRealData gpsRealData; 86 GpsRealData gpsRealData;
85 87
  88 + @Autowired
  89 + BasicData.BasicDataLoader basicDataLoader;
  90 +
86 /** 91 /**
87 * 线路当前使用的排班的日期 92 * 线路当前使用的排班的日期
88 */ 93 */
@@ -117,28 +122,24 @@ public class DayOfSchedule implements CommandLineRunner { @@ -117,28 +122,24 @@ public class DayOfSchedule implements CommandLineRunner {
117 LineConfigData lineConfigs; 122 LineConfigData lineConfigs;
118 123
119 @Autowired 124 @Autowired
120 - BasicData.BasicDataLoader dataLoader;  
121 -  
122 - @Autowired  
123 GpsDataRecovery gpsDataRecovery; 125 GpsDataRecovery gpsDataRecovery;
124 126
125 private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyy-MM-dd"), fmtHHmm = DateTimeFormat.forPattern("HH:mm"); 127 private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyy-MM-dd"), fmtHHmm = DateTimeFormat.forPattern("HH:mm");
126 128
127 @Override 129 @Override
128 public void run(String... arg0) throws Exception { 130 public void run(String... arg0) throws Exception {
129 - //加载基础数据  
130 - dataLoader.loadAllData(); 131 + basicDataLoader.loadAllData();
131 //从数据库恢复排班 132 //从数据库恢复排班
132 - dataRecovery(); 133 + //dataRecovery();
133 134
134 //翻班线程 135 //翻班线程
135 -// Application.mainServices.scheduleWithFixedDelay(scheduleRefreshThread, 15, 240, TimeUnit.SECONDS); 136 + Application.mainServices.scheduleWithFixedDelay(scheduleRefreshThread, 15, 240, TimeUnit.SECONDS);
136 //入库 137 //入库
137 // Application.mainServices.scheduleWithFixedDelay(schedulePstThread, 60, 60, TimeUnit.SECONDS); 138 // Application.mainServices.scheduleWithFixedDelay(schedulePstThread, 60, 60, TimeUnit.SECONDS);
138 //首班出场指令补发器 139 //首班出场指令补发器
139 // Application.mainServices.scheduleWithFixedDelay(firstScheduleCheckThread, 30, 240, TimeUnit.SECONDS); 140 // Application.mainServices.scheduleWithFixedDelay(firstScheduleCheckThread, 30, 240, TimeUnit.SECONDS);
140 //班次误点扫描 141 //班次误点扫描
141 - Application.mainServices.scheduleWithFixedDelay(scheduleLateThread, 60, 60, TimeUnit.SECONDS); 142 +// Application.mainServices.scheduleWithFixedDelay(scheduleLateThread, 60, 60, TimeUnit.SECONDS);
142 143
143 //每天凌晨2点20提交数据到运管处 144 //每天凌晨2点20提交数据到运管处
144 long diff = (DateUtils.getTimestamp() + 1000 * 60 * 140) - System.currentTimeMillis(); 145 long diff = (DateUtils.getTimestamp() + 1000 * 60 * 140) - System.currentTimeMillis();
@@ -224,15 +225,8 @@ public class DayOfSchedule implements CommandLineRunner { @@ -224,15 +225,8 @@ public class DayOfSchedule implements CommandLineRunner {
224 reCalcExecPlan(nbbm); 225 reCalcExecPlan(nbbm);
225 } 226 }
226 227
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 // 页面 翻班通知 228 // 页面 翻班通知
235 - sendUtils.shiftSchedule(lineCode); 229 + //sendUtils.shiftSchedule(lineCode);
236 } catch (Exception e) { 230 } catch (Exception e) {
237 logger.error("", e); 231 logger.error("", e);
238 return -1; 232 return -1;
@@ -503,6 +497,41 @@ public class DayOfSchedule implements CommandLineRunner { @@ -503,6 +497,41 @@ public class DayOfSchedule implements CommandLineRunner {
503 } 497 }
504 498
505 /** 499 /**
  500 + * 下一个相同走向的班次
  501 + * @param sch
  502 + * @return
  503 + */
  504 + public ScheduleRealInfo nextSame(ScheduleRealInfo sch){
  505 + List<ScheduleRealInfo> list = nbbmScheduleMap.get(sch.getClZbh());
  506 + int outConfig = -1;
  507 + LineConfig config = lineConfigData.get(sch.getXlBm());
  508 + if (config != null)
  509 + outConfig = config.getOutConfig();
  510 +
  511 + boolean flag = false;
  512 + ScheduleRealInfo next = null;
  513 + for (ScheduleRealInfo temp : list) {
  514 + if (temp.getId() == sch.getId()) {
  515 + flag = true;
  516 + continue;
  517 + }
  518 + //忽略烂班
  519 + if (temp.isDestroy())
  520 + continue;
  521 +
  522 + //出站既出场,忽略出场班次
  523 + if (outConfig == 2 && temp.getBcType().equals("out"))
  524 + continue;
  525 +
  526 + if (flag && temp.getXlDir().equals(sch.getXlDir())) {
  527 + next = temp;
  528 + break;
  529 + }
  530 + }
  531 + return next;
  532 + }
  533 +
  534 + /**
506 * 上一个班次 535 * 上一个班次
507 * 536 *
508 * @param sch 537 * @param sch
@@ -527,6 +556,18 @@ public class DayOfSchedule implements CommandLineRunner { @@ -527,6 +556,18 @@ public class DayOfSchedule implements CommandLineRunner {
527 return prev; 556 return prev;
528 } 557 }
529 558
  559 + /**
  560 + * 是否是首班出场
  561 + * @param sch
  562 + * @return
  563 + */
  564 + public boolean isFirstOut(ScheduleRealInfo sch){
  565 + List<ScheduleRealInfo> list = nbbmScheduleMap.get(sch.getClZbh());
  566 + if(list.get(0) == sch && sch.getBcType().equals("out"))
  567 + return true;
  568 + return false;
  569 + }
  570 +
530 public void put(ScheduleRealInfo sch) { 571 public void put(ScheduleRealInfo sch) {
531 schAttrCalculator 572 schAttrCalculator
532 .calcRealDate(sch) 573 .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/CarPark.java
1 package com.bsth.entity; 1 package com.bsth.entity;
2 2
3 -import java.util.Date; 3 +import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
4 4
5 -import javax.persistence.Column;  
6 -import javax.persistence.Entity;  
7 -import javax.persistence.GeneratedValue;  
8 -import javax.persistence.Id;  
9 -import javax.persistence.Table; 5 +import javax.persistence.*;
  6 +import java.util.Date;
10 7
11 8
12 /** 9 /**
@@ -25,6 +22,7 @@ import javax.persistence.Table; @@ -25,6 +22,7 @@ import javax.persistence.Table;
25 22
26 @Entity 23 @Entity
27 @Table(name = "bsth_c_car_park") 24 @Table(name = "bsth_c_car_park")
  25 +@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"})
28 public class CarPark { 26 public class CarPark {
29 27
30 @Id 28 @Id
src/main/java/com/bsth/entity/Cars.java
@@ -23,7 +23,7 @@ import java.util.Date; @@ -23,7 +23,7 @@ import java.util.Date;
23 23
24 @Entity 24 @Entity
25 @Table(name = "bsth_c_cars") 25 @Table(name = "bsth_c_cars")
26 -@JsonIgnoreProperties(value={"hibernateLazyInitializer","handlers","fieldHandler"}) 26 +@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"})
27 public class Cars extends BEntity implements Serializable { 27 public class Cars extends BEntity implements Serializable {
28 28
29 /** 主键Id */ 29 /** 主键Id */
src/main/java/com/bsth/entity/Line.java
@@ -24,7 +24,7 @@ import java.util.Date; @@ -24,7 +24,7 @@ import java.util.Date;
24 24
25 @Entity 25 @Entity
26 @Table(name = "bsth_c_line") 26 @Table(name = "bsth_c_line")
27 -@JsonIgnoreProperties(value={"hibernateLazyInitializer","handlers","fieldHandler"}) 27 +@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"})
28 public class Line implements Serializable { 28 public class Line implements Serializable {
29 29
30 @Id 30 @Id
src/main/java/com/bsth/entity/Personnel.java
@@ -21,7 +21,7 @@ import javax.persistence.*; @@ -21,7 +21,7 @@ import javax.persistence.*;
21 21
22 @Entity 22 @Entity
23 @Table(name = "bsth_c_personnel") 23 @Table(name = "bsth_c_personnel")
24 -@JsonIgnoreProperties(value={"hibernateLazyInitializer","handlers","fieldHandler"}) 24 +@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"})
25 public class Personnel extends BEntity { 25 public class Personnel extends BEntity {
26 26
27 /** 主键Id */ 27 /** 主键Id */
src/main/java/com/bsth/entity/Station.java
1 package com.bsth.entity; 1 package com.bsth.entity;
2 2
3 -import java.util.Date; 3 +import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
4 4
5 import javax.persistence.Column; 5 import javax.persistence.Column;
6 import javax.persistence.Entity; 6 import javax.persistence.Entity;
7 -import javax.persistence.GeneratedValue;  
8 -import javax.persistence.GenerationType;  
9 import javax.persistence.Id; 7 import javax.persistence.Id;
10 import javax.persistence.Table; 8 import javax.persistence.Table;
  9 +import java.util.Date;
11 10
12 11
13 /** 12 /**
@@ -26,6 +25,7 @@ import javax.persistence.Table; @@ -26,6 +25,7 @@ import javax.persistence.Table;
26 25
27 @Entity 26 @Entity
28 @Table(name = "bsth_c_station") 27 @Table(name = "bsth_c_station")
  28 +@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"})
29 public class Station { 29 public class Station {
30 30
31 @Id 31 @Id
src/main/java/com/bsth/entity/mcy_forms/Daily.java 0 → 100644
  1 +package com.bsth.entity.mcy_forms;
  2 +
  3 +public class Daily {
  4 +
  5 + private String rq;//日期
  6 +
  7 + public String getRq() {
  8 + return rq;
  9 + }
  10 +
  11 + public void setRq(String rq) {
  12 + this.rq = rq;
  13 + }
  14 +
  15 + private String zbh;//车牌号
  16 +
  17 + private String jgh;//员工号
  18 +
  19 + private String jName;//驾驶员
  20 +
  21 + private String zlc;//里程
  22 +
  23 + private String jzl1;//空驶公里
  24 +
  25 + private String yh;//油耗
  26 +
  27 + private String bc;//班次
  28 +
  29 + public String getZbh() {
  30 + return zbh;
  31 + }
  32 +
  33 + public void setZbh(String zbh) {
  34 + this.zbh = zbh;
  35 + }
  36 +
  37 + public String getJgh() {
  38 + return jgh;
  39 + }
  40 +
  41 + public void setJgh(String jgh) {
  42 + this.jgh = jgh;
  43 + }
  44 +
  45 + public String getjName() {
  46 + return jName;
  47 + }
  48 +
  49 + public void setjName(String jName) {
  50 + this.jName = jName;
  51 + }
  52 +
  53 + public String getZlc() {
  54 + return zlc;
  55 + }
  56 +
  57 + public void setZlc(String zlc) {
  58 + this.zlc = zlc;
  59 + }
  60 +
  61 + public String getJzl1() {
  62 + return jzl1;
  63 + }
  64 +
  65 + public void setJzl1(String jzl1) {
  66 + this.jzl1 = jzl1;
  67 + }
  68 +
  69 + public String getYh() {
  70 + return yh;
  71 + }
  72 +
  73 + public void setYh(String yh) {
  74 + this.yh = yh;
  75 + }
  76 +
  77 + public String getBc() {
  78 + return bc;
  79 + }
  80 +
  81 + public void setBc(String bc) {
  82 + this.bc = bc;
  83 + }
  84 +
  85 +
  86 +
  87 +
  88 +
  89 +}
src/main/java/com/bsth/entity/realcontrol/LineConfig.java
@@ -53,6 +53,9 @@ public class LineConfig { @@ -53,6 +53,9 @@ public class LineConfig {
53 /** 调度指令模板 */ 53 /** 调度指令模板 */
54 private String schDirectiveTemp; 54 private String schDirectiveTemp;
55 55
  56 + /** 识别区间调头 */
  57 + private boolean readReverse;
  58 +
56 @OneToMany(cascade = CascadeType.ALL) 59 @OneToMany(cascade = CascadeType.ALL)
57 private Set<D80ReplyTemp> d80Temps = new HashSet<>(); 60 private Set<D80ReplyTemp> d80Temps = new HashSet<>();
58 61
@@ -140,4 +143,12 @@ public class LineConfig { @@ -140,4 +143,12 @@ public class LineConfig {
140 public void setD80Temps(Set<D80ReplyTemp> d80Temps) { 143 public void setD80Temps(Set<D80ReplyTemp> d80Temps) {
141 this.d80Temps = d80Temps; 144 this.d80Temps = d80Temps;
142 } 145 }
  146 +
  147 + public boolean isReadReverse() {
  148 + return readReverse;
  149 + }
  150 +
  151 + public void setReadReverse(boolean readReverse) {
  152 + this.readReverse = readReverse;
  153 + }
143 } 154 }
src/main/java/com/bsth/entity/realcontrol/ScheduleRealInfo.java
@@ -94,11 +94,6 @@ public class ScheduleRealInfo { @@ -94,11 +94,6 @@ public class ScheduleRealInfo {
94 * 班次类型 TODO:正常班次、出场、进场、加油、区间班次、放空班次、放大站班次、两点间空驶 94 * 班次类型 TODO:正常班次、出场、进场、加油、区间班次、放空班次、放大站班次、两点间空驶
95 */ 95 */
96 private String bcType; 96 private String bcType;
97 -  
98 - /** 出站即出场 , 关联的进出场班次 */  
99 - @JsonIgnore  
100 - @Transient  
101 - private ScheduleRealInfo twinsSch;  
102 97
103 /** 创建人 */ 98 /** 创建人 */
104 @JsonIgnore 99 @JsonIgnore
@@ -258,21 +253,6 @@ public class ScheduleRealInfo { @@ -258,21 +253,6 @@ public class ScheduleRealInfo {
258 this.ccno = ccno; 253 this.ccno = ccno;
259 } 254 }
260 255
261 - public static DateTimeFormatter getFmtHHmm() {  
262 - return fmtHHmm;  
263 - }  
264 -  
265 - public static void setFmtHHmm(DateTimeFormatter fmtHHmm) {  
266 - ScheduleRealInfo.fmtHHmm = fmtHHmm;  
267 - }  
268 -  
269 - public static DateTimeFormatter getFmtyyyyMMddHHmm() {  
270 - return fmtyyyyMMddHHmm;  
271 - }  
272 -  
273 - public static void setFmtyyyyMMddHHmm(DateTimeFormatter fmtyyyyMMddHHmm) {  
274 - ScheduleRealInfo.fmtyyyyMMddHHmm = fmtyyyyMMddHHmm;  
275 - }  
276 256
277 /** ---------------- 257 /** ----------------
278 @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) 258 @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@@ -804,13 +784,13 @@ public class ScheduleRealInfo { @@ -804,13 +784,13 @@ public class ScheduleRealInfo {
804 this.opDirectiveState = opDirectiveState; 784 this.opDirectiveState = opDirectiveState;
805 } 785 }
806 786
807 - public ScheduleRealInfo getTwinsSch() { 787 +/* public ScheduleRealInfo getTwinsSch() {
808 return twinsSch; 788 return twinsSch;
809 } 789 }
810 790
811 public void setTwinsSch(ScheduleRealInfo twinsSch) { 791 public void setTwinsSch(ScheduleRealInfo twinsSch) {
812 this.twinsSch = twinsSch; 792 this.twinsSch = twinsSch;
813 - } 793 + }*/
814 794
815 public boolean isLate() { 795 public boolean isLate() {
816 return late; 796 return late;
src/main/java/com/bsth/entity/schedule/CarConfigInfo.java
@@ -19,7 +19,7 @@ import java.util.Date; @@ -19,7 +19,7 @@ import java.util.Date;
19 @NamedAttributeNode("cl") 19 @NamedAttributeNode("cl")
20 }) 20 })
21 }) 21 })
22 -@JsonIgnoreProperties(value={"hibernateLazyInitializer","handlers","fieldHandler"}) 22 +@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"})
23 public class CarConfigInfo extends BEntity implements Serializable { 23 public class CarConfigInfo extends BEntity implements Serializable {
24 24
25 /** 主健Id */ 25 /** 主健Id */
src/main/java/com/bsth/entity/schedule/EmployeeConfigInfo.java
@@ -22,7 +22,7 @@ import java.io.Serializable; @@ -22,7 +22,7 @@ import java.io.Serializable;
22 @NamedAttributeNode("xl") 22 @NamedAttributeNode("xl")
23 }) 23 })
24 }) 24 })
25 -@JsonIgnoreProperties(value={"hibernateLazyInitializer","handlers","fieldHandler"}) 25 +@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"})
26 public class EmployeeConfigInfo extends BEntity implements Serializable { 26 public class EmployeeConfigInfo extends BEntity implements Serializable {
27 27
28 /** 主键Id */ 28 /** 主键Id */
src/main/java/com/bsth/entity/schedule/GuideboardInfo.java
@@ -15,7 +15,7 @@ import javax.persistence.*; @@ -15,7 +15,7 @@ import javax.persistence.*;
15 @NamedAttributeNode("xl") 15 @NamedAttributeNode("xl")
16 }) 16 })
17 }) 17 })
18 -@JsonIgnoreProperties(value={"hibernateLazyInitializer","handlers","fieldHandler"}) 18 +@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"})
19 public class GuideboardInfo extends BEntity { 19 public class GuideboardInfo extends BEntity {
20 20
21 /** 主键Id */ 21 /** 主键Id */
src/main/java/com/bsth/entity/schedule/TTInfo.java
1 package com.bsth.entity.schedule; 1 package com.bsth.entity.schedule;
2 2
3 import com.bsth.entity.Line; 3 import com.bsth.entity.Line;
  4 +import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
4 5
5 import javax.persistence.*; 6 import javax.persistence.*;
6 import java.util.Date; 7 import java.util.Date;
@@ -17,6 +18,7 @@ import java.util.Date; @@ -17,6 +18,7 @@ import java.util.Date;
17 @NamedAttributeNode("updateBy") 18 @NamedAttributeNode("updateBy")
18 }) 19 })
19 }) 20 })
  21 +@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"})
20 public class TTInfo extends BEntity { 22 public class TTInfo extends BEntity {
21 23
22 /** 主键Id */ 24 /** 主键Id */
src/main/java/com/bsth/entity/schedule/TTInfoDetail.java
@@ -3,6 +3,7 @@ package com.bsth.entity.schedule; @@ -3,6 +3,7 @@ package com.bsth.entity.schedule;
3 import com.bsth.entity.CarPark; 3 import com.bsth.entity.CarPark;
4 import com.bsth.entity.Line; 4 import com.bsth.entity.Line;
5 import com.bsth.entity.Station; 5 import com.bsth.entity.Station;
  6 +import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
6 7
7 import javax.persistence.*; 8 import javax.persistence.*;
8 9
@@ -21,6 +22,7 @@ import javax.persistence.*; @@ -21,6 +22,7 @@ import javax.persistence.*;
21 @NamedAttributeNode("tcc") 22 @NamedAttributeNode("tcc")
22 }) 23 })
23 }) 24 })
  25 +@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"})
24 public class TTInfoDetail extends BEntity { 26 public class TTInfoDetail extends BEntity {
25 27
26 /** 主健Id */ 28 /** 主健Id */
src/main/java/com/bsth/entity/sys/DutyEmployee.java 0 → 100644
  1 +package com.bsth.entity.sys;
  2 +
  3 +import javax.persistence.*;
  4 +
  5 +/**
  6 + * 当班调度员
  7 + * Created by panzhao on 2017/1/5.
  8 + */
  9 +@Entity
  10 +@Table(name = "bsth_c_sys_duty_employee")
  11 +public class DutyEmployee {
  12 +
  13 + @Id
  14 + @GeneratedValue
  15 + private Long id;
  16 +
  17 + /**
  18 + * 员工ID
  19 + */
  20 + private Integer uId;
  21 +
  22 + /**
  23 + * 员工姓名
  24 + */
  25 + private String uName;
  26 +
  27 + /**
  28 + * 线路编码 ,号分割多个
  29 + */
  30 + private String codeIdx;
  31 +
  32 + /**
  33 + * 登入线调时间
  34 + */
  35 + private Long ts;
  36 +
  37 + /**
  38 + * 是否主调模式进入
  39 + */
  40 + private boolean main;
  41 +
  42 + public Integer getuId() {
  43 + return uId;
  44 + }
  45 +
  46 + public void setuId(Integer uId) {
  47 + this.uId = uId;
  48 + }
  49 +
  50 + public String getuName() {
  51 + return uName;
  52 + }
  53 +
  54 + public void setuName(String uName) {
  55 + this.uName = uName;
  56 + }
  57 +
  58 + public String getCodeIdx() {
  59 + return codeIdx;
  60 + }
  61 +
  62 + public void setCodeIdx(String codeIdx) {
  63 + this.codeIdx = codeIdx;
  64 + }
  65 +
  66 + public Long getTs() {
  67 + return ts;
  68 + }
  69 +
  70 + public void setTs(Long ts) {
  71 + this.ts = ts;
  72 + }
  73 +
  74 + public boolean isMain() {
  75 + return main;
  76 + }
  77 +
  78 + public void setMain(boolean main) {
  79 + this.main = main;
  80 + }
  81 +
  82 + public Long getId() {
  83 + return id;
  84 + }
  85 +
  86 + public void setId(Long id) {
  87 + this.id = id;
  88 + }
  89 +}
src/main/java/com/bsth/entity/sys/SessionLog.java deleted 100644 → 0
1 -package com.bsth.entity.sys;  
2 -  
3 -import java.util.Date;  
4 -  
5 -import javax.persistence.Column;  
6 -import javax.persistence.Entity;  
7 -import javax.persistence.GeneratedValue;  
8 -import javax.persistence.GenerationType;  
9 -import javax.persistence.Id;  
10 -import javax.persistence.ManyToOne;  
11 -import javax.persistence.Table;  
12 -  
13 -/**  
14 - *  
15 - * @ClassName: SessionLog  
16 - * @Description: TODO(session日志)  
17 - * @author PanZhao  
18 - * @date 2016年7月20日 下午4:46:27  
19 - *  
20 - */  
21 -@Entity  
22 -@Table(name = "bsth_c_sys_sessionlog")  
23 -public class SessionLog {  
24 -  
25 - @Id  
26 - @GeneratedValue(strategy = GenerationType.IDENTITY)  
27 - private Integer id;  
28 -  
29 - @ManyToOne  
30 - private SysUser user;  
31 -  
32 - /** 登录时间 */  
33 - private Date loginDate;  
34 -  
35 - @Column(updatable = false, name = "create_date", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")  
36 - private Date createDate;  
37 -  
38 - /** 登出时间 */  
39 - private Date logoutDate;  
40 -  
41 - /** 登出方式 0:主动登出, -1:其他 */  
42 - private int logoutType;  
43 -  
44 - /** 登录IP */  
45 - private String ip;  
46 -  
47 - public Integer getId() {  
48 - return id;  
49 - }  
50 -  
51 - public void setId(Integer id) {  
52 - this.id = id;  
53 - }  
54 -  
55 - public SysUser getUser() {  
56 - return user;  
57 - }  
58 -  
59 - public void setUser(SysUser user) {  
60 - this.user = user;  
61 - }  
62 -  
63 - public Date getLoginDate() {  
64 - return loginDate;  
65 - }  
66 -  
67 - public void setLoginDate(Date loginDate) {  
68 - this.loginDate = loginDate;  
69 - }  
70 -  
71 - public Date getCreateDate() {  
72 - return createDate;  
73 - }  
74 -  
75 - public void setCreateDate(Date createDate) {  
76 - this.createDate = createDate;  
77 - }  
78 -  
79 - public Date getLogoutDate() {  
80 - return logoutDate;  
81 - }  
82 -  
83 - public void setLogoutDate(Date logoutDate) {  
84 - this.logoutDate = logoutDate;  
85 - }  
86 -  
87 - public int getLogoutType() {  
88 - return logoutType;  
89 - }  
90 -  
91 - public void setLogoutType(int logoutType) {  
92 - this.logoutType = logoutType;  
93 - }  
94 -  
95 - public String getIp() {  
96 - return ip;  
97 - }  
98 -  
99 - public void setIp(String ip) {  
100 - this.ip = ip;  
101 - }  
102 -}  
src/main/java/com/bsth/entity/sys/SignControl.java deleted 100644 → 0
1 -package com.bsth.entity.sys;  
2 -  
3 -import java.util.Date;  
4 -  
5 -import javax.persistence.Entity;  
6 -import javax.persistence.GeneratedValue;  
7 -import javax.persistence.GenerationType;  
8 -import javax.persistence.Id;  
9 -import javax.persistence.ManyToOne;  
10 -import javax.persistence.Table;  
11 -  
12 -/**  
13 - *  
14 - * @ClassName: SignControl  
15 - * @Description: TODO(进出线调记录)  
16 - * @author PanZhao  
17 - * @date 2016年7月20日 下午4:50:50  
18 - *  
19 - */  
20 -@Entity  
21 -@Table(name = "bsth_c_sys_sign")  
22 -public class SignControl {  
23 -  
24 - @Id  
25 - @GeneratedValue(strategy = GenerationType.IDENTITY)  
26 - private Integer id;  
27 -  
28 - @ManyToOne  
29 - private SessionLog session;  
30 -  
31 - /** 登出线调时间 */  
32 - private Date outDate;  
33 -  
34 - /** 在线时长 */  
35 - private Long onLineTimel;  
36 -  
37 - /** 0: 主调模式, 1:监控模式 */  
38 - private int signType;  
39 -  
40 - /** 用户名 */  
41 - private String userName;  
42 -  
43 - public Integer getId() {  
44 - return id;  
45 - }  
46 -  
47 - public void setId(Integer id) {  
48 - this.id = id;  
49 - }  
50 -  
51 - public SessionLog getSession() {  
52 - return session;  
53 - }  
54 -  
55 - public void setSession(SessionLog session) {  
56 - this.session = session;  
57 - }  
58 -  
59 - public Date getOutDate() {  
60 - return outDate;  
61 - }  
62 -  
63 - public void setOutDate(Date outDate) {  
64 - this.outDate = outDate;  
65 - }  
66 -  
67 - public Long getOnLineTimel() {  
68 - return onLineTimel;  
69 - }  
70 -  
71 - public void setOnLineTimel(Long onLineTimel) {  
72 - this.onLineTimel = onLineTimel;  
73 - }  
74 -  
75 - public int getSignType() {  
76 - return signType;  
77 - }  
78 -  
79 - public void setSignType(int signType) {  
80 - this.signType = signType;  
81 - }  
82 -  
83 - public String getUserName() {  
84 - return userName;  
85 - }  
86 -  
87 - public void setUserName(String userName) {  
88 - this.userName = userName;  
89 - }  
90 -}  
src/main/java/com/bsth/entity/sys/SysUser.java
@@ -9,7 +9,8 @@ import java.util.Set; @@ -9,7 +9,8 @@ import java.util.Set;
9 9
10 @Entity 10 @Entity
11 @Table(name = "bsth_c_sys_user") 11 @Table(name = "bsth_c_sys_user")
12 -@JsonIgnoreProperties(value={"hibernateLazyInitializer","handlers","fieldHandler"}) 12 +//@JsonIgnoreProperties(value={"hibernateLazyInitializer","handlers","fieldHandler"})
  13 +@JsonIgnoreProperties(ignoreUnknown = true)
13 public class SysUser { 14 public class SysUser {
14 15
15 @Id 16 @Id
src/main/java/com/bsth/repository/realcontrol/ScheduleRealInfoRepository.java
@@ -32,7 +32,7 @@ public interface ScheduleRealInfoRepository extends BaseRepository&lt;ScheduleRealI @@ -32,7 +32,7 @@ public interface ScheduleRealInfoRepository extends BaseRepository&lt;ScheduleRealI
32 32
33 //把sum(addMileage) 替换为0 数据表去掉了 add_mileage 字段 33 //把sum(addMileage) 替换为0 数据表去掉了 add_mileage 字段
34 @Query(value="select new map(clZbh as clZbh,jGh as jGh,jName as jName,sum(jhlc) as zgl," 34 @Query(value="select new map(clZbh as clZbh,jGh as jGh,jName as jName,sum(jhlc) as zgl,"
35 - + " 0 as ksgl,count(jName) as bcs) from ScheduleRealInfo s where" 35 + + "0 as ksgl,count(jName) as bcs) from ScheduleRealInfo s where"
36 + " s.xlBm = ?1 and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 group by clZbh,jGh,jName") 36 + " s.xlBm = ?1 and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 group by clZbh,jGh,jName")
37 List<Map<String, Object>> dailyInfo(String line,String date); 37 List<Map<String, Object>> dailyInfo(String line,String date);
38 38
@@ -71,7 +71,7 @@ public interface ScheduleRealInfoRepository extends BaseRepository&lt;ScheduleRealI @@ -71,7 +71,7 @@ public interface ScheduleRealInfoRepository extends BaseRepository&lt;ScheduleRealI
71 @Query(value="select count(jName) from ScheduleRealInfo s where s.jName = ?1 and s.clZbh = ?2 and s.lpName = ?3 and sflj != 0") 71 @Query(value="select count(jName) from ScheduleRealInfo s where s.jName = ?1 and s.clZbh = ?2 and s.lpName = ?3 and sflj != 0")
72 int findLjbc(String jName,String clZbh,String lpName); 72 int findLjbc(String jName,String clZbh,String lpName);
73 73
74 - @Query(value="SELECT c.company,r.request_code,FROM_UNIXTIME(r.timestamp/1000,'%Y-%m-%d %T'),c.inside_code FROM bsth_v_report_80 r LEFT JOIN bsth_c_cars c ON c.equipment_code = r.device_id where FROM_UNIXTIME(r.timestamp/1000,'%Y-%m-%d') = ?2 and r.line_id like %?1% and c.inside_code like %?3%",nativeQuery=true) 74 + @Query(value="SELECT c.company,r.request_code,FROM_UNIXTIME(r.timestamp/1000,'%Y-%m-%d %T'),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 = ?1 and c.inside_code = ?3",nativeQuery=true)
75 List<Object[]> account(String line,String date,String code); 75 List<Object[]> account(String line,String date,String code);
76 76
77 @Query(value="select s from ScheduleRealInfo s where s.xlBm = ?1 and s.scheduleDate >= str_to_date(?2,'%Y-%m-%d') " 77 @Query(value="select s from ScheduleRealInfo s where s.xlBm = ?1 and s.scheduleDate >= str_to_date(?2,'%Y-%m-%d') "
src/main/java/com/bsth/repository/schedule/TTInfoDetailRepository.java
@@ -34,7 +34,10 @@ public interface TTInfoDetailRepository extends BaseRepository&lt;TTInfoDetail, Lon @@ -34,7 +34,10 @@ public interface TTInfoDetailRepository extends BaseRepository&lt;TTInfoDetail, Lon
34 @Query("select cc from TTInfoDetail cc where cc.id=?1") 34 @Query("select cc from TTInfoDetail cc where cc.id=?1")
35 TTInfoDetail findOneExtend(Long aLong); 35 TTInfoDetail findOneExtend(Long aLong);
36 36
37 - void deleteByTtinfoId(Long ttid); 37 +// TODO:在findOne中 @EntityGraph 无效
  38 +// @EntityGraph(value = "tTInfoDetail_xl_lp_qdz_zdz_tcc", type = EntityGraph.EntityGraphType.FETCH)
  39 +// @Override
  40 +// TTInfoDetail findOne(Long aLong);
38 41
39 @Query(value = "select max(tt.fcno) as mx from bsth_c_s_ttinfo_detail tt where tt.xl =?1 and tt.ttinfo =?2", nativeQuery = true) 42 @Query(value = "select max(tt.fcno) as mx from bsth_c_s_ttinfo_detail tt where tt.xl =?1 and tt.ttinfo =?2", nativeQuery = true)
40 Long findMaxFcno(Integer xlid, Long ttinfoid); 43 Long findMaxFcno(Integer xlid, Long ttinfoid);
@@ -44,6 +47,6 @@ public interface TTInfoDetailRepository extends BaseRepository&lt;TTInfoDetail, Lon @@ -44,6 +47,6 @@ public interface TTInfoDetailRepository extends BaseRepository&lt;TTInfoDetail, Lon
44 47
45 @Modifying 48 @Modifying
46 @Query(value = "delete from TTInfoDetail t where t.ttinfo.id = ?1") 49 @Query(value = "delete from TTInfoDetail t where t.ttinfo.id = ?1")
47 - void deleteByTtinfo(Long ttinfoid); 50 + void deleteByTtinfoIdWithModify(Long ttinfoid);
48 51
49 } 52 }
src/main/java/com/bsth/repository/sys/DutyEmployeeRepository.java 0 → 100644
  1 +package com.bsth.repository.sys;
  2 +
  3 +import com.bsth.entity.sys.DutyEmployee;
  4 +import com.bsth.repository.BaseRepository;
  5 +import org.springframework.data.jpa.repository.Query;
  6 +import org.springframework.stereotype.Repository;
  7 +
  8 +import java.util.List;
  9 +
  10 +/**
  11 + * Created by panzhao on 2017/1/5.
  12 + */
  13 +@Repository
  14 +public interface DutyEmployeeRepository extends BaseRepository<DutyEmployee, Long>{
  15 +
  16 + @Query("select t from DutyEmployee t where t.codeIdx like %?1% and t.ts > ?2 and t.ts < ?3")
  17 + List<DutyEmployee> findByLineAndTime(String lineCode, long st, long et);
  18 +}
src/main/java/com/bsth/repository/sys/SessionLogRepository.java deleted 100644 → 0
1 -package com.bsth.repository.sys;  
2 -  
3 -import org.springframework.stereotype.Repository;  
4 -  
5 -import com.bsth.entity.sys.SessionLog;  
6 -import com.bsth.repository.BaseRepository;  
7 -  
8 -@Repository  
9 -public interface SessionLogRepository extends BaseRepository<SessionLog, Integer>{  
10 -  
11 -}  
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;
@@ -615,8 +616,8 @@ public class FormsServiceImpl implements FormsService { @@ -615,8 +616,8 @@ public class FormsServiceImpl implements FormsService {
615 tu.setRq(rq); 616 tu.setRq(rq);
616 tu.setGs(arg0.getString("gs_name").toString()); 617 tu.setGs(arg0.getString("gs_name").toString());
617 tu.setZhgs(arg0.getString("fgs_name").toString()); 618 tu.setZhgs(arg0.getString("fgs_name").toString());
618 - //tu.setXl(arg0.getString("xlgs"));这个是根据公司判断线路有几条  
619 - tu.setXl(arg0.getString("sxl")); 619 + tu.setXl(arg0.getString("xlgs"));//这个是根据公司判断线路有几条
  620 + //tu.setXl(arg0.getString("sxl"));
620 tu.setXlmc(arg0.getString("sxl")); 621 tu.setXlmc(arg0.getString("sxl"));
621 tu.setCchjh(arg0.getString("jcl").toString()); 622 tu.setCchjh(arg0.getString("jcl").toString());
622 tu.setCchsj(arg0.getString("scl").toString()); 623 tu.setCchsj(arg0.getString("scl").toString());
@@ -708,4 +709,46 @@ public class FormsServiceImpl implements FormsService { @@ -708,4 +709,46 @@ public class FormsServiceImpl implements FormsService {
708 709
709 return list; 710 return list;
710 } 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 + }
711 } 754 }
src/main/java/com/bsth/service/gps/GpsServiceImpl.java
@@ -58,7 +58,7 @@ public class GpsServiceImpl implements GpsService { @@ -58,7 +58,7 @@ public class GpsServiceImpl implements GpsService {
58 58
59 int dayOfYear = sCal.get(Calendar.DAY_OF_YEAR); 59 int dayOfYear = sCal.get(Calendar.DAY_OF_YEAR);
60 /* 60 /*
61 - * if(dayOfYear != eCal.get(Calendar.DAY_OF_YEAR)){ 61 + * if(dayOfYear != eCal.get(Calendar.DAY_OF_YEAR)){
62 * System.out.println("暂时不支持跨天查询..."); return null; } 62 * System.out.println("暂时不支持跨天查询..."); return null; }
63 */ 63 */
64 64
@@ -195,7 +195,7 @@ public class GpsServiceImpl implements GpsService { @@ -195,7 +195,7 @@ public class GpsServiceImpl implements GpsService {
195 inv = inv.substring(0, inv.length() - 1); 195 inv = inv.substring(0, inv.length() - 1);
196 196
197 // 查询到离站数据 197 // 查询到离站数据
198 - //Map<String, ArrivalEntity> arrivalMap = findArrivalByTs(weekOfYear/* 30 */, st, et, inv); 198 + Map<String, ArrivalEntity> arrivalMap = findArrivalByTs(weekOfYear/* 30 */, st, et, inv);
199 199
200 String sql = "select DEVICE_ID,LON,LAT,TS,INOUT_STOP,SERVICE_STATE ,STOP_NO,DIRECTION,LINE_ID,SPEED_GPS from bsth_c_gps_info where days_year=? and device_id in (" 200 String sql = "select DEVICE_ID,LON,LAT,TS,INOUT_STOP,SERVICE_STATE ,STOP_NO,DIRECTION,LINE_ID,SPEED_GPS from bsth_c_gps_info where days_year=? and device_id in ("
201 + inv + ") and ts > ? and ts < ?"; 201 + inv + ") and ts > ? and ts < ?";
@@ -239,11 +239,12 @@ public class GpsServiceImpl implements GpsService { @@ -239,11 +239,12 @@ public class GpsServiceImpl implements GpsService {
239 inOutStop = rs.getInt("INOUT_STOP"); 239 inOutStop = rs.getInt("INOUT_STOP");
240 map.put("inout_stop", inOutStop); 240 map.put("inout_stop", inOutStop);
241 241
242 - /*analyse = arrivalMap.get(rs.getString("DEVICE_ID") + "_" + rs.getLong("TS"));  
243 - if (analyse != null) {  
244 - map.put("inout_stop_info", analyse);  
245 - map.put("inout_stop", analyse.getInOut());  
246 - }*/ 242 + arrival = arrivalMap.get(rs.getString("DEVICE_ID") + "_" + rs.getLong("TS"));
  243 + if (arrival != null) {
  244 + map.put("inout_stop_info", arrival);
  245 + map.put("inout_stop", arrival.getInOut());
  246 + }
  247 +
247 map.put("nbbm", BasicData.deviceId2NbbmMap.get(rs.getString("DEVICE_ID"))); 248 map.put("nbbm", BasicData.deviceId2NbbmMap.get(rs.getString("DEVICE_ID")));
248 map.put("state", 0); 249 map.put("state", 0);
249 // 上下行 250 // 上下行
@@ -272,11 +273,17 @@ public class GpsServiceImpl implements GpsService { @@ -272,11 +273,17 @@ public class GpsServiceImpl implements GpsService {
272 273
273 rs = ps.executeQuery(); 274 rs = ps.executeQuery();
274 ArrivalEntity arr; 275 ArrivalEntity arr;
275 - int inOut; 276 + int inOut, updown;
  277 + String prefix, stationName, lineId;
276 while (rs.next()) { 278 while (rs.next()) {
277 - arr = new ArrivalEntity(rs.getString("DEVICE_ID"), rs.getLong("TS"), rs.getString("LINE_ID"),  
278 - rs.getInt("UP_DOWN"), rs.getString("STOP_NO"), rs.getInt("IN_OUT"), rs.getLong("CREATE_DATE"),  
279 - rs.getInt("WEEKS_YEAR"), BasicData.stationCode2NameMap.get(rs.getString("STOP_NO"))); 279 + lineId = rs.getString("LINE_ID");
  280 + updown = rs.getInt("UP_DOWN");
  281 + prefix = lineId + "_" + updown + "_";
  282 + stationName = BasicData.getStationNameByCode(rs.getString("STOP_NO"), prefix);
  283 +
  284 + arr = new ArrivalEntity(rs.getString("DEVICE_ID"), rs.getLong("TS"), lineId,
  285 + updown, rs.getString("STOP_NO"), rs.getInt("IN_OUT"), rs.getLong("CREATE_DATE"),
  286 + rs.getInt("WEEKS_YEAR"), stationName);
280 287
281 // 设备号_时间戳_进出状态 为key 288 // 设备号_时间戳_进出状态 为key
282 // 反转进出状态 289 // 反转进出状态
@@ -382,7 +389,7 @@ public class GpsServiceImpl implements GpsService { @@ -382,7 +389,7 @@ public class GpsServiceImpl implements GpsService {
382 389
383 gpsRealData.remove(device); 390 gpsRealData.remove(device);
384 rs.put("status", ResponseCode.SUCCESS); 391 rs.put("status", ResponseCode.SUCCESS);
385 - }catch (Exception e){ 392 + } catch (Exception e) {
386 rs.put("status", ResponseCode.ERROR); 393 rs.put("status", ResponseCode.ERROR);
387 } 394 }
388 return rs; 395 return rs;
src/main/java/com/bsth/service/impl/TrafficManageServiceImpl.java
@@ -14,7 +14,6 @@ import com.bsth.repository.schedule.*; @@ -14,7 +14,6 @@ import com.bsth.repository.schedule.*;
14 import com.bsth.service.TrafficManageService; 14 import com.bsth.service.TrafficManageService;
15 import com.bsth.util.TimeUtils; 15 import com.bsth.util.TimeUtils;
16 import com.bsth.util.db.DBUtils_MS; 16 import com.bsth.util.db.DBUtils_MS;
17 -import com.bsth.webService.trafficManage.geotool.services.Internal;  
18 import com.bsth.webService.trafficManage.geotool.services.InternalPortType; 17 import com.bsth.webService.trafficManage.geotool.services.InternalPortType;
19 import com.bsth.webService.trafficManage.org.tempuri.WebServiceLocator; 18 import com.bsth.webService.trafficManage.org.tempuri.WebServiceLocator;
20 import com.bsth.webService.trafficManage.org.tempuri.WebServiceSoap; 19 import com.bsth.webService.trafficManage.org.tempuri.WebServiceSoap;
@@ -105,7 +104,7 @@ public class TrafficManageServiceImpl implements TrafficManageService{ @@ -105,7 +104,7 @@ public class TrafficManageServiceImpl implements TrafficManageService{
105 104
106 105
107 // 运管处接口 106 // 运管处接口
108 - private InternalPortType portType = new Internal().getInternalHttpSoap11Endpoint(); 107 + private InternalPortType portType = null;//new Internal().getInternalHttpSoap11Endpoint();
109 private WebServiceSoap ssop ; 108 private WebServiceSoap ssop ;
110 { 109 {
111 try { 110 try {
src/main/java/com/bsth/service/realcontrol/RealMapService.java
@@ -13,4 +13,6 @@ public interface RealMapService { @@ -13,4 +13,6 @@ public interface RealMapService {
13 Map<String,Object> findRouteByLine(String lineCode); 13 Map<String,Object> findRouteByLine(String lineCode);
14 14
15 Map<String,Object> findRouteAndStationByLine(String lineCode); 15 Map<String,Object> findRouteAndStationByLine(String lineCode);
  16 +
  17 + Map<String,Object> multiSectionRoute(String codeIdx);
16 } 18 }
src/main/java/com/bsth/service/realcontrol/ScheduleRealInfoService.java
@@ -65,7 +65,7 @@ public interface ScheduleRealInfoService extends BaseService&lt;ScheduleRealInfo, L @@ -65,7 +65,7 @@ public interface ScheduleRealInfoService extends BaseService&lt;ScheduleRealInfo, L
65 65
66 List<Map<String,Object>> dailyInfo(String line,String date,String type); 66 List<Map<String,Object>> dailyInfo(String line,String date,String type);
67 67
68 - List<Object[]> historyMessage(String line,String date,String code); 68 + List<Object[]> historyMessage(String line,String date,String code, String type);
69 69
70 Map<Integer, Integer> trustStatus(String lineCodes); 70 Map<Integer, Integer> trustStatus(String lineCodes);
71 71
@@ -93,9 +93,9 @@ public interface ScheduleRealInfoService extends BaseService&lt;ScheduleRealInfo, L @@ -93,9 +93,9 @@ public interface ScheduleRealInfoService extends BaseService&lt;ScheduleRealInfo, L
93 93
94 List<Map<String,String>> findLpName(String lpName); 94 List<Map<String,String>> findLpName(String lpName);
95 95
96 - List<Map<String,Object>> account(String line,String date,String code,String xlName); 96 + List<Map<String,Object>> account(String line,String date,String code,String xlName, String type);
97 97
98 - List<ScheduleRealInfo> correctForm(String line,String startDate,String endDate,String lpName,String code); 98 + List<ScheduleRealInfo> correctForm(String line,String startDate,String endDate,String lpName,String code, String type);
99 99
100 List<ScheduleRealInfo> queryListWaybill(String jName,String clZbh,String lpName,String date,String type); 100 List<ScheduleRealInfo> queryListWaybill(String jName,String clZbh,String lpName,String date,String type);
101 101
src/main/java/com/bsth/service/realcontrol/impl/ChildTaskPlanServiceImpl.java
@@ -17,65 +17,65 @@ import javax.transaction.Transactional; @@ -17,65 +17,65 @@ import javax.transaction.Transactional;
17 import java.util.Map; 17 import java.util.Map;
18 18
19 @Service 19 @Service
20 -public class ChildTaskPlanServiceImpl extends BaseServiceImpl<ChildTaskPlan, Long> implements ChildTaskPlanService{ 20 +public class ChildTaskPlanServiceImpl extends BaseServiceImpl<ChildTaskPlan, Long> implements ChildTaskPlanService {
21 21
22 /*@Autowired 22 /*@Autowired
23 - ScheduleRealInfoServiceImpl scheduleRealInfoService;*/  
24 -  
25 - @Autowired  
26 - ScheduleRealInfoRepository scheduleRealInfoRepository;  
27 -  
28 - @Autowired  
29 - ChildTaskPlanRepository childTaskPlanRepository;  
30 -  
31 - @Autowired  
32 - DayOfSchedule dayOfSchedule;  
33 -  
34 - @Autowired  
35 - Arrival2Schedule arrival2Schedule;  
36 -  
37 - @Autowired  
38 - JdbcTemplate jdbcTemplate;  
39 -  
40 - @Transactional  
41 - @Override  
42 - public Map<String, Object> save(ChildTaskPlan t) {  
43 - Map<String, Object> rs;  
44 - //保存起终点名称  
45 - Map<String, String> map = BasicData.stationCode2NameMap;  
46 -  
47 - t.setStartStationName(map.get(t.getStartStation()));  
48 - t.setEndStationName(map.get(t.getEndStation()));  
49 - //先持久化子任务  
50 - rs = super.save(t);  
51 - //再关联主任务  
52 - ScheduleRealInfo sch = dayOfSchedule.get(t.getSchedule().getId());  
53 - sch.getcTasks().add(t);  
54 - dayOfSchedule.save(sch);  
55 -  
56 - rs.put("t", sch);  
57 -  
58 - if(sch.getZdsjActual() == null)  
59 - arrival2Schedule.removeExpect(sch.getClZbh());  
60 - return rs;  
61 - }  
62 -  
63 - @Override  
64 - public Map<String, Object> delete(Long id) {  
65 - Map<String, Object> rs;  
66 -  
67 - ChildTaskPlan cPlan = childTaskPlanRepository.findOne(id);  
68 - //解除和主任务关联  
69 - ScheduleRealInfo sch = dayOfSchedule.get(cPlan.getSchedule().getId());  
70 - sch.getcTasks().remove(cPlan);  
71 - //删除关联表数据  
72 - jdbcTemplate.execute("delete from bsth_c_s_sp_info_real_c_tasks where bsth_c_s_sp_info_real="+sch.getId()+" and c_tasks="+cPlan.getId());  
73 -  
74 - //删除子任务  
75 - rs = super.delete(id);  
76 - dayOfSchedule.save(sch);  
77 -  
78 - rs.put("t", sch);  
79 - return rs;  
80 - } 23 + ScheduleRealInfoServiceImpl scheduleRealInfoService;*/
  24 +
  25 + @Autowired
  26 + ScheduleRealInfoRepository scheduleRealInfoRepository;
  27 +
  28 + @Autowired
  29 + ChildTaskPlanRepository childTaskPlanRepository;
  30 +
  31 + @Autowired
  32 + DayOfSchedule dayOfSchedule;
  33 +
  34 + @Autowired
  35 + Arrival2Schedule arrival2Schedule;
  36 +
  37 + @Autowired
  38 + JdbcTemplate jdbcTemplate;
  39 +
  40 + @Transactional
  41 + @Override
  42 + public Map<String, Object> save(ChildTaskPlan t) {
  43 + ScheduleRealInfo sch = dayOfSchedule.get(t.getSchedule().getId());
  44 + Map<String, Object> rs;
  45 + //保存起终点名称
  46 + String prefix = sch.getXlBm() + "_" + sch.getXlDir() + "_";
  47 +
  48 + t.setStartStationName(BasicData.getStationNameByCode(t.getStartStation(), prefix));
  49 + t.setEndStationName(BasicData.getStationNameByCode(t.getEndStation(), prefix));
  50 + //先持久化子任务
  51 + rs = super.save(t);
  52 + //再关联主任务
  53 + sch.getcTasks().add(t);
  54 + dayOfSchedule.save(sch);
  55 +
  56 + rs.put("t", sch);
  57 +
  58 + if (sch.getZdsjActual() == null)
  59 + arrival2Schedule.removeExpect(sch.getClZbh());
  60 + return rs;
  61 + }
  62 +
  63 + @Override
  64 + public Map<String, Object> delete(Long id) {
  65 + Map<String, Object> rs;
  66 +
  67 + ChildTaskPlan cPlan = childTaskPlanRepository.findOne(id);
  68 + //解除和主任务关联
  69 + ScheduleRealInfo sch = dayOfSchedule.get(cPlan.getSchedule().getId());
  70 + sch.getcTasks().remove(cPlan);
  71 + //删除关联表数据
  72 + jdbcTemplate.execute("delete from bsth_c_s_sp_info_real_c_tasks where bsth_c_s_sp_info_real=" + sch.getId() + " and c_tasks=" + cPlan.getId());
  73 +
  74 + //删除子任务
  75 + rs = super.delete(id);
  76 + dayOfSchedule.save(sch);
  77 +
  78 + rs.put("t", sch);
  79 + return rs;
  80 + }
81 } 81 }
src/main/java/com/bsth/service/realcontrol/impl/RealMapServiceImpl.java
@@ -122,7 +122,7 @@ public class RealMapServiceImpl implements RealMapService { @@ -122,7 +122,7 @@ public class RealMapServiceImpl implements RealMapService {
122 rs.put("section", secList); 122 rs.put("section", secList);
123 123
124 //查询站点信息 124 //查询站点信息
125 - sql="select r.STATION_NAME,r.STATION_ROUTE_CODE,r.LINE_CODE,r.STATION_CODE,r.STATION_MARK,s.G_LONX,s.G_LATY, r.DIRECTIONS from bsth_c_stationroute r INNER JOIN bsth_c_station s on r.station=s.id and r.line_code=? and r.destroy=0"; 125 + sql = "select r.STATION_NAME,r.STATION_ROUTE_CODE,r.LINE_CODE,r.STATION_CODE,r.STATION_MARK,s.G_LONX,s.G_LATY, r.DIRECTIONS from bsth_c_stationroute r INNER JOIN bsth_c_station s on r.station=s.id and r.line_code=? and r.destroy=0";
126 List<Map<String, Object>> stationList = jdbcTemplate.queryForList(sql, lineCode); 126 List<Map<String, Object>> stationList = jdbcTemplate.queryForList(sql, lineCode);
127 rs.put("station", stationList); 127 rs.put("station", stationList);
128 128
@@ -134,6 +134,31 @@ public class RealMapServiceImpl implements RealMapService { @@ -134,6 +134,31 @@ public class RealMapServiceImpl implements RealMapService {
134 return rs; 134 return rs;
135 } 135 }
136 136
  137 + @Override
  138 + public Map<String, Object> multiSectionRoute(String codeIdx) {
  139 + Map<String, Object> rs = new HashMap<>();
  140 + try {
  141 + List<String> idArray = Splitter.on(",").splitToList(codeIdx);
  142 + //拼接in语句
  143 + String inStr = "";
  144 + for (String code : idArray) {
  145 + inStr += (",'" + code + "'");
  146 + }
  147 + inStr = " (" + inStr.substring(1) + ")";
  148 +
  149 + String sql = "SELECT r.LINE_CODE,r.SECTION_CODE,r.SECTIONROUTE_CODE,s.SECTION_NAME,ST_AsText (s.GSECTION_VECTOR) AS GSECTION_VECTOR,r.DIRECTIONS FROM bsth_c_sectionroute r INNER JOIN bsth_c_section s ON r.section = s.id WHERE r.line_code in " + inStr + " AND r.destroy = 0 order by r.line_code, r.directions,r.sectionroute_code";
  150 +
  151 + List<Map<String, Object>> secList = jdbcTemplate.queryForList(sql);
  152 + rs.put("section", secList);
  153 + rs.put("status", ResponseCode.SUCCESS);
  154 + } catch (DataAccessException e) {
  155 + logger.error("", e);
  156 + rs.put("status", ResponseCode.ERROR);
  157 + }
  158 +
  159 + return rs;
  160 + }
  161 +
137 /** 162 /**
138 * wgs 坐标数组转 百度 163 * wgs 坐标数组转 百度
139 * 164 *
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
@@ -46,6 +46,7 @@ import org.slf4j.LoggerFactory; @@ -46,6 +46,7 @@ import org.slf4j.LoggerFactory;
46 import org.springframework.beans.factory.annotation.Autowired; 46 import org.springframework.beans.factory.annotation.Autowired;
47 import org.springframework.stereotype.Service; 47 import org.springframework.stereotype.Service;
48 48
  49 +import java.net.URLEncoder;
49 import java.text.DecimalFormat; 50 import java.text.DecimalFormat;
50 import java.text.ParseException; 51 import java.text.ParseException;
51 import java.text.SimpleDateFormat; 52 import java.text.SimpleDateFormat;
@@ -286,6 +287,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -286,6 +287,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
286 t.setCreateBy(user); 287 t.setCreateBy(user);
287 t.setSflj(true); 288 t.setSflj(true);
288 t.setLate(false); 289 t.setLate(false);
  290 + t.setDfsj(t.getFcsj());
289 t.setZdsjT(sdfyyyyMMddHHmm.parse(schDate + t.getZdsj()).getTime()); 291 t.setZdsjT(sdfyyyyMMddHHmm.parse(schDate + t.getZdsj()).getTime());
290 292
291 293
@@ -293,8 +295,9 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -293,8 +295,9 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
293 t.setBcsj(DateUtils.calcHHmmDiff(t.getFcsj(), t.getZdsj()) / 1000 / 60); 295 t.setBcsj(DateUtils.calcHHmmDiff(t.getFcsj(), t.getZdsj()) / 1000 / 60);
294 296
295 //起终点名称 297 //起终点名称
296 - t.setQdzName(BasicData.stationCode2NameMap.get(t.getQdzCode()));  
297 - t.setZdzName(BasicData.stationCode2NameMap.get(t.getZdzCode())); 298 + String prefix = t.getXlBm() + "_" + t.getXlDir() + "_";
  299 + t.setQdzName(BasicData.getStationNameByCode(t.getQdzCode(), prefix));
  300 + t.setZdzName(BasicData.getStationNameByCode(t.getZdzCode(), prefix));
298 301
299 //计算班次实际时间 302 //计算班次实际时间
300 schAttrCalculator.calcRealDate(t).calcAllTimeByFcsj(t); 303 schAttrCalculator.calcRealDate(t).calcAllTimeByFcsj(t);
@@ -617,7 +620,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -617,7 +620,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
617 } 620 }
618 621
619 @Override 622 @Override
620 - public List<Object[]> historyMessage(String line, String date, String code) { 623 + public List<Object[]> historyMessage(String line, String date, String code, String type) {
621 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 624 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
622 long d= 0; 625 long d= 0;
623 long t=0; 626 long t=0;
@@ -639,6 +642,36 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -639,6 +642,36 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
639 obj[4] = BasicData.lineCode2NameMap.get(line); 642 obj[4] = BasicData.lineCode2NameMap.get(line);
640 } 643 }
641 } 644 }
  645 +
  646 + if(type != null && type.length() != 0 && type.equals("export")){
  647 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  648 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  649 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  650 + Map<String,Object> m = new HashMap<String, Object>();
  651 + ReportUtils ee = new ReportUtils();
  652 + List<Map<String, Object>> newList = new ArrayList<Map<String, Object>>();
  653 + for(int i = 0; i < list.size(); i++){
  654 + Map<String, Object> map = new HashMap<String, Object>();
  655 + Object[] obj = list.get(i);
  656 + map.put("num", i + 1);
  657 + map.put("line", obj[4]);
  658 + map.put("clZbh", obj[0]);
  659 + map.put("sender", obj[1]);
  660 + map.put("date", obj[3]);
  661 + map.put("text", obj[2]);
  662 + newList.add(map);
  663 + }
  664 + try {
  665 + listI.add(newList.iterator());
  666 + String path = this.getClass().getResource("/").getPath()+"static\\pages\\forms\\";
  667 + ee.excelReplace(listI, new Object[] { m }, path+"mould\\historyMessage.xls",
  668 + path+"export\\调度历史消息" + sdfSimple.format(sdfMonth.parse(date)) + ".xls");
  669 + } catch (Exception e) {
  670 + // TODO: handle exception
  671 + e.printStackTrace();
  672 + }
  673 + }
  674 +
642 return list; 675 return list;
643 } 676 }
644 677
@@ -1218,13 +1251,15 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -1218,13 +1251,15 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1218 1251
1219 @Override 1252 @Override
1220 public List<Map<String, Object>> account(String line, String date, 1253 public List<Map<String, Object>> account(String line, String date,
1221 - String code,String xlName) { 1254 + String code,String xlName, String type) {
1222 List<Object[]> lsitObj = scheduleRealInfoRepository.account(line,date,code); 1255 List<Object[]> lsitObj = scheduleRealInfoRepository.account(line,date,code);
1223 List<Map<String,Object>> listMap = new ArrayList<Map<String,Object>>(); 1256 List<Map<String,Object>> listMap = new ArrayList<Map<String,Object>>();
1224 Map<String,Object> map; 1257 Map<String,Object> map;
  1258 + int i = 1;
1225 for(Object[] obj : lsitObj){ 1259 for(Object[] obj : lsitObj){
1226 if(obj != null){ 1260 if(obj != null){
1227 map = new HashMap<String,Object>(); 1261 map = new HashMap<String,Object>();
  1262 + map.put("num", i++);
1228 map.put("xlName", xlName); 1263 map.put("xlName", xlName);
1229 map.put("clZbh", obj[3]); 1264 map.put("clZbh", obj[3]);
1230 map.put("company", obj[0]); 1265 map.put("company", obj[0]);
@@ -1233,13 +1268,65 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf @@ -1233,13 +1268,65 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
1233 listMap.add(map); 1268 listMap.add(map);
1234 } 1269 }
1235 } 1270 }
  1271 +
  1272 + if(type != null && type.length() != 0 && type.equals("export")){
  1273 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  1274 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  1275 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  1276 + Map<String,Object> m = new HashMap<String, Object>();
  1277 + ReportUtils ee = new ReportUtils();
  1278 + Map<String, Object> typeMap = new HashMap<String, Object>();
  1279 + typeMap.put("0xA1", "请求恢复运营");
  1280 + typeMap.put("0xA2", "申请调档");
  1281 + typeMap.put("0xA3", "出场请求");
  1282 + typeMap.put("0xA5", "进场请求");
  1283 + typeMap.put("0xA7", "加油请求");
  1284 + typeMap.put("0x50", "车辆故障");
  1285 + typeMap.put("0x70", "路阻报告");
  1286 + typeMap.put("0x60", "事故报告");
  1287 + typeMap.put("0x11", "扣证纠纷");
  1288 + typeMap.put("0x12", "报警");
  1289 + for(Map<String, Object> map1 : listMap){
  1290 + map1.put("requestText", typeMap.get(map1.get("requestType")));
  1291 + }
  1292 + try {
  1293 + listI.add(listMap.iterator());
  1294 + String path = this.getClass().getResource("/").getPath()+"static\\pages\\forms\\";
  1295 + ee.excelReplace(listI, new Object[] { m }, path+"mould\\account.xls",
  1296 + path+"export\\驾驶员请求台账" + sdfSimple.format(sdfMonth.parse(date)) + ".xls");
  1297 + } catch (Exception e) {
  1298 + // TODO: handle exception
  1299 + e.printStackTrace();
  1300 + }
  1301 + }
  1302 +
1236 return listMap; 1303 return listMap;
1237 } 1304 }
1238 1305
1239 @Override 1306 @Override
1240 public List<ScheduleRealInfo> correctForm(String line, String startDate, 1307 public List<ScheduleRealInfo> correctForm(String line, String startDate,
1241 - String endDate, String lpName, String code) { 1308 + String endDate, String lpName, String code, String type) {
1242 List<ScheduleRealInfo> list = scheduleRealInfoRepository.correctForm(line,startDate,endDate,lpName,code); 1309 List<ScheduleRealInfo> list = scheduleRealInfoRepository.correctForm(line,startDate,endDate,lpName,code);
  1310 +
  1311 + if(type != null && type.length() != 0 && type.equals("export")){
  1312 + SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"),
  1313 + sdfSimple = new SimpleDateFormat("yyyyMMdd");
  1314 + List<Iterator<?>> listI = new ArrayList<Iterator<?>>();
  1315 + Map<String,Object> m = new HashMap<String, Object>();
  1316 + ReportUtils ee = new ReportUtils();
  1317 + m.put("startDate", startDate);
  1318 + m.put("endDate", endDate);
  1319 + try {
  1320 + listI.add(list.iterator());
  1321 + String path = this.getClass().getResource("/").getPath()+"static\\pages\\forms\\";
  1322 + ee.excelReplace(listI, new Object[] { m }, path+"mould\\correctForm.xls",
  1323 + path+"export\\" + URLEncoder.encode("修正报表", "UTF-8") + sdfSimple.format(sdfMonth.parse(startDate)) + "-" + sdfSimple.format(sdfMonth.parse(endDate)) + ".xls");
  1324 + } catch (Exception e) {
  1325 + // TODO: handle exception
  1326 + e.printStackTrace();
  1327 + }
  1328 + }
  1329 +
1243 return list; 1330 return list;
1244 } 1331 }
1245 1332
src/main/java/com/bsth/service/schedule/BService.java
1 package com.bsth.service.schedule; 1 package com.bsth.service.schedule;
2 2
  3 +import com.bsth.service.schedule.exception.ScheduleException;
  4 +import com.bsth.service.schedule.utils.DataToolsService;
3 import org.springframework.data.domain.Page; 5 import org.springframework.data.domain.Page;
4 import org.springframework.data.domain.Pageable; 6 import org.springframework.data.domain.Pageable;
5 7
@@ -10,8 +12,8 @@ import java.util.Map; @@ -10,8 +12,8 @@ import java.util.Map;
10 /** 12 /**
11 * 基础service接口。 13 * 基础service接口。
12 */ 14 */
13 -public interface BService<T, ID extends Serializable> {  
14 - // CRUD 操作 15 +public interface BService<T, ID extends Serializable> extends DataToolsService {
  16 + //---------------- CRUD 操作 ----------------//
15 // Create,Update操作 17 // Create,Update操作
16 T save(T t); 18 T save(T t);
17 <S extends T> List<S> bulkSave(List<S> entities); // 批量保存(TODO:待测试) 19 <S extends T> List<S> bulkSave(List<S> entities); // 批量保存(TODO:待测试)
@@ -22,4 +24,5 @@ public interface BService&lt;T, ID extends Serializable&gt; { @@ -22,4 +24,5 @@ public interface BService&lt;T, ID extends Serializable&gt; {
22 List<T> list(Map<String, Object> param); 24 List<T> list(Map<String, Object> param);
23 // Delete操作 25 // Delete操作
24 void delete(ID id) throws ScheduleException; 26 void delete(ID id) throws ScheduleException;
  27 +
25 } 28 }
src/main/java/com/bsth/service/schedule/CarConfigInfoService.java
1 package com.bsth.service.schedule; 1 package com.bsth.service.schedule;
2 2
3 import com.bsth.entity.schedule.CarConfigInfo; 3 import com.bsth.entity.schedule.CarConfigInfo;
  4 +import com.bsth.service.schedule.exception.ScheduleException;
4 5
5 /** 6 /**
6 * Created by xu on 16/5/9. 7 * Created by xu on 16/5/9.
src/main/java/com/bsth/service/schedule/CarDeviceService.java
1 package com.bsth.service.schedule; 1 package com.bsth.service.schedule;
2 2
3 import com.bsth.entity.CarDevice; 3 import com.bsth.entity.CarDevice;
  4 +import com.bsth.service.schedule.exception.ScheduleException;
4 5
5 /** 6 /**
6 * Created by xu on 16/12/15. 7 * Created by xu on 16/12/15.
src/main/java/com/bsth/service/schedule/CarsService.java
1 package com.bsth.service.schedule; 1 package com.bsth.service.schedule;
2 2
3 import com.bsth.entity.Cars; 3 import com.bsth.entity.Cars;
  4 +import com.bsth.service.schedule.exception.ScheduleException;
4 5
5 /** 6 /**
6 * Created by xu on 16/12/8. 7 * Created by xu on 16/12/8.
src/main/java/com/bsth/service/schedule/EmployeeConfigInfoService.java
1 package com.bsth.service.schedule; 1 package com.bsth.service.schedule;
2 2
3 import com.bsth.entity.schedule.EmployeeConfigInfo; 3 import com.bsth.entity.schedule.EmployeeConfigInfo;
  4 +import com.bsth.service.schedule.exception.ScheduleException;
4 5
5 /** 6 /**
6 * Created by xu on 16/5/10. 7 * Created by xu on 16/5/10.
src/main/java/com/bsth/service/schedule/EmployeeService.java
1 package com.bsth.service.schedule; 1 package com.bsth.service.schedule;
2 2
3 import com.bsth.entity.Personnel; 3 import com.bsth.entity.Personnel;
  4 +import com.bsth.service.schedule.exception.ScheduleException;
4 5
5 /** 6 /**
6 * Created by xu on 16/12/15. 7 * Created by xu on 16/12/15.
src/main/java/com/bsth/service/schedule/GuideboardInfoService.java
1 package com.bsth.service.schedule; 1 package com.bsth.service.schedule;
2 2
3 import com.bsth.entity.schedule.GuideboardInfo; 3 import com.bsth.entity.schedule.GuideboardInfo;
  4 +import com.bsth.service.schedule.exception.ScheduleException;
4 5
5 /** 6 /**
6 * Created by xu on 16/5/11. 7 * Created by xu on 16/5/11.
src/main/java/com/bsth/service/schedule/PeopleCarPlanServiceImpl.java
1 package com.bsth.service.schedule; 1 package com.bsth.service.schedule;
2 2
3 import java.math.BigDecimal; 3 import java.math.BigDecimal;
  4 +import java.net.URLEncoder;
4 import java.sql.ResultSet; 5 import java.sql.ResultSet;
5 import java.sql.SQLException; 6 import java.sql.SQLException;
6 import java.text.DecimalFormat; 7 import java.text.DecimalFormat;
@@ -463,7 +464,7 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService { @@ -463,7 +464,7 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService {
463 listI.add(resList.iterator()); 464 listI.add(resList.iterator());
464 String path = this.getClass().getResource("/").getPath()+"static\\pages\\forms\\"; 465 String path = this.getClass().getResource("/").getPath()+"static\\pages\\forms\\";
465 ee.excelReplace(listI, new Object[] { m }, path+"mould\\workDaily.xls", 466 ee.excelReplace(listI, new Object[] { m }, path+"mould\\workDaily.xls",
466 - path+"export\\营运服务日报表" + sdfSimple.format(sdfMonth.parse(date)) + ".xls"); 467 + path+"export\\营运服务日报表"+ sdfSimple.format(sdfMonth.parse(date))+".xls");
467 } catch (Exception e) { 468 } catch (Exception e) {
468 // TODO: handle exception 469 // TODO: handle exception
469 e.printStackTrace(); 470 e.printStackTrace();
@@ -937,7 +938,7 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService { @@ -937,7 +938,7 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService {
937 tempMap.put("sjfcFirst0", "/"); 938 tempMap.put("sjfcFirst0", "/");
938 tempMap.put("delayFirst0", "/"); 939 tempMap.put("delayFirst0", "/");
939 } 940 }
940 - if(moban0.getZdsjActual() != null){ 941 + if(moban0.getFcsjActual() != null){
941 String[] split = moban0.getFcsjActual().split(":"); 942 String[] split = moban0.getFcsjActual().split(":");
942 long min = Integer.valueOf(split[0])*60 + Integer.valueOf(split[1]); 943 long min = Integer.valueOf(split[0])*60 + Integer.valueOf(split[1]);
943 long delay = moban0.getFcsjT() - min; 944 long delay = moban0.getFcsjT() - min;
@@ -963,7 +964,7 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService { @@ -963,7 +964,7 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService {
963 tempMap.put("sjfcFirst1", "/"); 964 tempMap.put("sjfcFirst1", "/");
964 tempMap.put("delayFirst1", "/"); 965 tempMap.put("delayFirst1", "/");
965 } 966 }
966 - if(moban1.getZdsjActual() != null){ 967 + if(moban1.getFcsjActual() != null){
967 String[] split = moban1.getFcsjActual().split(":"); 968 String[] split = moban1.getFcsjActual().split(":");
968 long min = Integer.valueOf(split[0])*60 + Integer.valueOf(split[1]); 969 long min = Integer.valueOf(split[0])*60 + Integer.valueOf(split[1]);
969 long delay = moban1.getFcsjT() - min; 970 long delay = moban1.getFcsjT() - min;
src/main/java/com/bsth/service/schedule/TTInfoDetailService.java
1 package com.bsth.service.schedule; 1 package com.bsth.service.schedule;
2 2
3 import com.bsth.entity.schedule.TTInfoDetail; 3 import com.bsth.entity.schedule.TTInfoDetail;
4 -import com.bsth.service.BaseService; 4 +import com.bsth.service.schedule.exception.ScheduleException;
5 import org.apache.commons.lang3.StringUtils; 5 import org.apache.commons.lang3.StringUtils;
6 -import org.springframework.web.multipart.MultipartFile;  
7 6
8 -import java.io.File;  
9 import java.util.ArrayList; 7 import java.util.ArrayList;
10 import java.util.List; 8 import java.util.List;
11 9
12 /** 10 /**
13 * Created by xu on 16/7/2. 11 * Created by xu on 16/7/2.
14 */ 12 */
15 -public interface TTInfoDetailService extends BaseService<TTInfoDetail, Long> {  
16 -  
17 - void deleteByTtinfo(Long ttinfoid); 13 +public interface TTInfoDetailService extends BService<TTInfoDetail, Long> {
18 14
19 /** 15 /**
20 * 发车信息内部类。 16 * 发车信息内部类。
@@ -34,7 +30,12 @@ public interface TTInfoDetailService extends BaseService&lt;TTInfoDetail, Long&gt; { @@ -34,7 +30,12 @@ public interface TTInfoDetailService extends BaseService&lt;TTInfoDetail, Long&gt; {
34 public FcInfo() { 30 public FcInfo() {
35 } 31 }
36 32
37 - public FcInfo(String ttdid_str, String bc_type, String fcsj, String xldir, String isfb) { 33 + public FcInfo(
  34 + String ttdid_str,
  35 + String bc_type,
  36 + String fcsj,
  37 + String xldir,
  38 + String isfb) {
38 this.ttdid = StringUtils.isEmpty(ttdid_str) ? null : Long.valueOf(ttdid_str); 39 this.ttdid = StringUtils.isEmpty(ttdid_str) ? null : Long.valueOf(ttdid_str);
39 this.bc_type = bc_type; 40 this.bc_type = bc_type;
40 this.fcsj = fcsj; 41 this.fcsj = fcsj;
@@ -98,6 +99,9 @@ public interface TTInfoDetailService extends BaseService&lt;TTInfoDetail, Long&gt; { @@ -98,6 +99,9 @@ public interface TTInfoDetailService extends BaseService&lt;TTInfoDetail, Long&gt; {
98 /** 内容数据 */ 99 /** 内容数据 */
99 private List<List<FcInfo>> contents = new ArrayList<>(); 100 private List<List<FcInfo>> contents = new ArrayList<>();
100 101
  102 + /** 营运描述 */
  103 + private String yy_desc;
  104 +
101 public List<String> getHeader() { 105 public List<String> getHeader() {
102 return header; 106 return header;
103 } 107 }
@@ -113,6 +117,14 @@ public interface TTInfoDetailService extends BaseService&lt;TTInfoDetail, Long&gt; { @@ -113,6 +117,14 @@ public interface TTInfoDetailService extends BaseService&lt;TTInfoDetail, Long&gt; {
113 public void setContents(List<List<FcInfo>> contents) { 117 public void setContents(List<List<FcInfo>> contents) {
114 this.contents = contents; 118 this.contents = contents;
115 } 119 }
  120 +
  121 + public String getYy_desc() {
  122 + return yy_desc;
  123 + }
  124 +
  125 + public void setYy_desc(String yy_desc) {
  126 + this.yy_desc = yy_desc;
  127 + }
116 } 128 }
117 129
118 /** 130 /**
@@ -121,22 +133,28 @@ public interface TTInfoDetailService extends BaseService&lt;TTInfoDetail, Long&gt; { @@ -121,22 +133,28 @@ public interface TTInfoDetailService extends BaseService&lt;TTInfoDetail, Long&gt; {
121 * @param ttid 时刻表id 133 * @param ttid 时刻表id
122 * @return 134 * @return
123 */ 135 */
124 - EditInfo getEditInfo(Integer xlid, Long ttid) throws Exception; 136 + EditInfo getEditInfo(Integer xlid, Long ttid) throws ScheduleException;
  137 +
  138 + /**
  139 + * 验证sheet(以后放到规则引擎里去做)。
  140 + * @param filename excel文件全路径名
  141 + * @param sheetname sheet名字
  142 + * @param lineid 线路id
  143 + */
  144 + void validateExcelSheet(
  145 + String filename,
  146 + String sheetname,
  147 + Integer lineid,
  148 + String linename) throws ScheduleException;
125 149
126 /** 150 /**
127 - * 上传并导入数据,和DataImportExportService的同名方法有差别。  
128 - * @param datafile form上传文件  
129 - * @param xlmc 线路名称  
130 - * @param ttinfoname 时刻表名字  
131 - * @param tccname 停车场名字  
132 - * @throws Exception 151 + * 验证关联的线路标准信息(以后放到规则引擎里去做)。
  152 + * @param lineinfoid 线路id
133 */ 153 */
134 - void fileDataImport(MultipartFile datafile,  
135 - String xlmc,  
136 - String ttinfoname,  
137 - String tccname) throws Exception; 154 + void validateAssoLineInfo(Integer lineinfoid) throws ScheduleException;
138 155
139 - void fileDataImport(File file, String sheetname, String xlmc, String ttinfoname, String tccname) throws Exception; 156 + // TODO:这个方法可以用通用方法解决,以后改
  157 + List<TTInfoDetail> findBcdetails(Integer xlId, Long ttinfoId, Long lpId);
140 158
141 159
142 } 160 }
src/main/java/com/bsth/service/schedule/TTInfoDetailServiceImpl.java deleted 100644 → 0
1 -package com.bsth.service.schedule;  
2 -  
3 -import com.bsth.entity.schedule.TTInfoDetail;  
4 -import com.bsth.repository.schedule.TTInfoDetailRepository;  
5 -import com.bsth.service.impl.BaseServiceImpl;  
6 -import com.bsth.service.schedule.utils.DataImportExportService;  
7 -import com.bsth.service.schedule.utils.DataToolsProperties;  
8 -import jxl.Sheet;  
9 -import jxl.Workbook;  
10 -import org.apache.commons.lang3.StringUtils;  
11 -import org.joda.time.DateTime;  
12 -import org.pentaho.di.trans.Trans;  
13 -import org.pentaho.di.trans.TransMeta;  
14 -import org.springframework.beans.factory.annotation.Autowired;  
15 -import org.springframework.boot.context.properties.EnableConfigurationProperties;  
16 -import org.springframework.stereotype.Service;  
17 -import org.springframework.transaction.annotation.Isolation;  
18 -import org.springframework.transaction.annotation.Propagation;  
19 -import org.springframework.transaction.annotation.Transactional;  
20 -import org.springframework.web.multipart.MultipartFile;  
21 -  
22 -import java.io.File;  
23 -import java.util.ArrayList;  
24 -import java.util.Arrays;  
25 -import java.util.List;  
26 -  
27 -/**  
28 - * Created by xu on 16/7/2.  
29 - */  
30 -@Service  
31 -@EnableConfigurationProperties(DataToolsProperties.class)  
32 -public class TTInfoDetailServiceImpl extends BaseServiceImpl<TTInfoDetail, Long> implements TTInfoDetailService {  
33 - @Autowired  
34 - private DataImportExportService dataImportExportService;  
35 - @Autowired  
36 - private DataToolsProperties dataToolsProperties;  
37 - @Autowired  
38 - private TTInfoDetailRepository ttInfoDetailRepository;  
39 -  
40 - @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED)  
41 - @Override  
42 - public void deleteByTtinfo(Long ttinfoid) {  
43 - ttInfoDetailRepository.deleteByTtinfo(ttinfoid);  
44 - }  
45 -  
46 - /**  
47 - * 获取待编辑的数据。  
48 - * @param xlid 线路id  
49 - * @param ttid 时刻表id  
50 - * @return  
51 - */  
52 - @Override  
53 - public EditInfo getEditInfo(Integer xlid, Long ttid) throws Exception {  
54 - // 1、使用ktr转换获取输出文件  
55 - // 1.1、获取转换用ktr  
56 - File ktrFile = new File(this.getClass().getResource(  
57 - dataToolsProperties.getTtinfodetailForeditktr()).toURI());  
58 - TransMeta transMeta = new TransMeta(ktrFile.getAbsolutePath());  
59 - Trans trans = new Trans(transMeta);  
60 -// trans.setLogLevel(LogLevel.DEBUG);  
61 - // 1.2、设定命名参数,TODO:之后还要添加其他命名参数  
62 - String outputFilePath = "ttinfodetail_" + new DateTime().toString("yyyy-MM-dd_HH-mm-ss");  
63 - trans.setParameterValue("tempfilepath", dataToolsProperties.getTransTempdir() + File.separator + outputFilePath); // 数据输出文件路径  
64 - trans.setParameterValue("xlid", String.valueOf(xlid));  
65 - trans.setParameterValue("ttid", String.valueOf(ttid));  
66 - // 1.3、执行转换  
67 - trans.execute(null);  
68 - // 1.4、等待转换结束  
69 - trans.waitUntilFinished();  
70 -  
71 - // 1.5、判定ktr错误数,注意这种错误代表部分数据错误,不会终止转换执行,一般设计ktr的时候,会有错误输出文件,TODO:以后考虑使用日志实时输出  
72 - if (trans.getErrors() > 0) {  
73 - throw new Exception("转换数据部分错误,请查看相关错误输出文件!");  
74 - }  
75 -  
76 - // 1.6、获取最大的发车数,用于输出数据的数量  
77 - Long maxfcno = ttInfoDetailRepository.findMaxFcno(xlid, ttid);  
78 - if (maxfcno == null)  
79 - return new EditInfo();  
80 -  
81 - // 2、读取ktr生成的excel数据,组织编辑用数据返回  
82 - // 2-1、读取Excel文件  
83 - Workbook book = Workbook.getWorkbook(new File(dataToolsProperties.getTransTempdir() +  
84 - File.separator + outputFilePath + ".xls"));  
85 - Sheet sheet = book.getSheet(0);  
86 - EditInfo editInfo = new EditInfo();  
87 - // 2-2、处理数据  
88 - String[] headarrays = new String[maxfcno.intValue() + 1];  
89 - headarrays[0] = "路牌";  
90 - for (int r = 1; r < sheet.getRows(); r++) {  
91 - List<FcInfo> fcInfos = new ArrayList<>();  
92 - // 每行第一列都是路牌  
93 - fcInfos.add(new FcInfo(null, null, sheet.getCell(0, r).getContents(), null, null)); // 用fcsj放置路牌显示  
94 - for (int c = 1; c <= maxfcno * 6; ) {  
95 - String ttdid_str = sheet.getCell(c, r).getContents(); // 时刻表明细id  
96 - String fcsj = sheet.getCell(c + 1, r).getContents(); // 发车时间  
97 - String fzdname = sheet.getCell(c + 2, r).getContents(); // 发车站点名称  
98 - String bctype = sheet.getCell(c + 3, r).getContents(); // 班次类型  
99 - String xldir = sheet.getCell(c + 4, r).getContents(); // 线路上下行  
100 - String isfb = sheet.getCell(c + 5, r).getContents(); // 是否分班  
101 -  
102 - FcInfo fcInfo = new FcInfo(ttdid_str, bctype, fcsj, xldir, isfb);  
103 -  
104 - if (StringUtils.isNotEmpty(fzdname))  
105 - headarrays[(int)(c / 6) + 1] = fzdname;  
106 - fcInfos.add(fcInfo);  
107 -  
108 - c += 6;  
109 - }  
110 - editInfo.getContents().add(fcInfos);  
111 - }  
112 - editInfo.getHeader().addAll(Arrays.asList(headarrays));  
113 -  
114 - return editInfo;  
115 - }  
116 -  
117 - @Override  
118 - /**  
119 - * 上传并导入数据,和DataImportExportService的同名方法有差别。  
120 - * @param datafile form上传文件  
121 - * @param xlmc 线路名称  
122 - * @param ttinfoname 时刻表名字  
123 - * @param tccname 停车场名字  
124 - * @throws Exception  
125 - */  
126 - public void fileDataImport(MultipartFile datafile,  
127 - String xlmc,  
128 - String ttinfoname,  
129 - String tccname) throws Exception {  
130 - // 上传数据文件  
131 - File uploadFile = dataImportExportService.uploadFile(datafile);  
132 - fileDataImport(uploadFile, "工作表1", xlmc, ttinfoname, tccname);  
133 -  
134 - }  
135 -  
136 - @Override  
137 - public void fileDataImport(File uploadFile, String sheetname, String xlmc, String ttinfoname, String tccname) throws Exception {  
138 - // 1、上传数据文件  
139 - System.out.println("线路名称:" + xlmc);  
140 - System.out.println("时刻表名称:" + ttinfoname);  
141 - System.out.println("停车场名字:" + tccname);  
142 - System.out.println("时刻表明细上传文件:" + uploadFile);  
143 -  
144 - // 2、jexcelapi读取excel文件  
145 - Workbook book = Workbook.getWorkbook(uploadFile);  
146 - Sheet sheet = book.getSheet(0);  
147 - List<String> columnames = new ArrayList<>();  
148 - for (int i = 0; i < sheet.getColumns(); i++) { // 获取第一行,数据,作为列名  
149 - columnames.add(sheet.getCell(i, 0).getContents());  
150 - }  
151 -  
152 - System.out.println("表头1:" + StringUtils.join(columnames.toArray(), ","));  
153 -  
154 - // 2、使用kettle运行封装数据导入逻辑的ktr转换文件  
155 - // 2.1、初始化kettle(组件初始化已经做了)  
156 - // 2.2、创建转换元数据,转换  
157 - File ktrFile = new File(this.getClass().getResource(  
158 - dataToolsProperties.getTtinfodetailMetadatainputktr()).toURI());  
159 - File ktrFile2 = new File(this.getClass().getResource(  
160 - dataToolsProperties.getTtinfodetailDatainputktr()).toURI());  
161 - TransMeta transMeta = new TransMeta(ktrFile.getAbsolutePath());  
162 - Trans trans = new Trans(transMeta);  
163 - // 2.3、设定命名参数,用于指定数据文件,注意每个ktr必须都有以下指定的命名参数  
164 - trans.setParameterValue("injectktrfile", ktrFile2.getAbsolutePath()); // 注入元数据的ktr文件  
165 - trans.setParameterValue("filepath", uploadFile.getAbsolutePath()); // 指定导入数据文件的位置  
166 - trans.setParameterValue("sheetname", sheetname); // sheet工作区的名字  
167 - trans.setParameterValue("erroroutputdir", dataToolsProperties.getTransErrordir()); // ktr转换错误输出目录  
168 - trans.setParameterValue("xlname", xlmc); // 线路名称  
169 - trans.setParameterValue("ttinfoname", ttinfoname); // 时刻表名称  
170 - trans.setParameterValue("tccname", tccname); // 停车场名字  
171 - trans.setParameterValue("excelfieldnames", StringUtils.join(columnames.toArray(), ",")); // 时刻表excel输入字段名,以逗号连接  
172 - columnames.remove(0);  
173 - trans.setParameterValue("normalizefieldnames", StringUtils.join(columnames.toArray(), ",")); // 数据范式化字段名,以逗号连接  
174 -  
175 - // TODO:可以考虑设定日志输出  
176 - // 2.4、执行转换  
177 - trans.execute(null);  
178 - // 2.5、等待转换结束  
179 - trans.waitUntilFinished();  
180 -  
181 - // 3、判定ktr错误数,注意这种错误代表部分数据错误,不会终止转换执行,一般设计ktr的时候,会有错误输出文件,TODO:以后考虑使用日志实时输出  
182 - if (trans.getErrors() > 0) {  
183 - throw new Exception("转换数据部分错误,请查看相关错误输出文件!");  
184 - }  
185 - }  
186 -}  
src/main/java/com/bsth/service/schedule/TTInfoService.java
1 package com.bsth.service.schedule; 1 package com.bsth.service.schedule;
2 2
3 import com.bsth.entity.schedule.TTInfo; 3 import com.bsth.entity.schedule.TTInfo;
  4 +import com.bsth.service.schedule.exception.ScheduleException;
4 5
5 /** 6 /**
6 * Created by xu on 16/5/12. 7 * Created by xu on 16/5/12.
src/main/java/com/bsth/service/schedule/ScheduleException.java renamed to src/main/java/com/bsth/service/schedule/exception/ScheduleException.java
1 -package com.bsth.service.schedule; 1 +package com.bsth.service.schedule.exception;
2 2
3 /** 3 /**
4 * Created by xu on 16/12/5. 4 * Created by xu on 16/12/5.
src/main/java/com/bsth/service/schedule/impl/BServiceImpl.java
@@ -3,16 +3,19 @@ package com.bsth.service.schedule.impl; @@ -3,16 +3,19 @@ package com.bsth.service.schedule.impl;
3 import com.bsth.entity.search.CustomerSpecs; 3 import com.bsth.entity.search.CustomerSpecs;
4 import com.bsth.repository.BaseRepository; 4 import com.bsth.repository.BaseRepository;
5 import com.bsth.service.schedule.BService; 5 import com.bsth.service.schedule.BService;
6 -import com.bsth.service.schedule.ScheduleException; 6 +import com.bsth.service.schedule.exception.ScheduleException;
  7 +import com.bsth.service.schedule.utils.DataToolsService;
7 import org.slf4j.Logger; 8 import org.slf4j.Logger;
8 import org.slf4j.LoggerFactory; 9 import org.slf4j.LoggerFactory;
9 import org.springframework.beans.factory.annotation.Autowired; 10 import org.springframework.beans.factory.annotation.Autowired;
  11 +import org.springframework.beans.factory.annotation.Qualifier;
10 import org.springframework.beans.factory.annotation.Value; 12 import org.springframework.beans.factory.annotation.Value;
11 import org.springframework.data.domain.Page; 13 import org.springframework.data.domain.Page;
12 import org.springframework.data.domain.Pageable; 14 import org.springframework.data.domain.Pageable;
13 import org.springframework.data.jpa.domain.Specification; 15 import org.springframework.data.jpa.domain.Specification;
14 16
15 import javax.persistence.EntityManager; 17 import javax.persistence.EntityManager;
  18 +import java.io.File;
16 import java.io.Serializable; 19 import java.io.Serializable;
17 import java.util.ArrayList; 20 import java.util.ArrayList;
18 import java.util.List; 21 import java.util.List;
@@ -29,6 +32,10 @@ public class BServiceImpl&lt;T, ID extends Serializable&gt; implements BService&lt;T, ID&gt; @@ -29,6 +32,10 @@ public class BServiceImpl&lt;T, ID extends Serializable&gt; implements BService&lt;T, ID&gt;
29 @Value("${hibernate.jdbc.batch_size}") 32 @Value("${hibernate.jdbc.batch_size}")
30 private int batchSize; 33 private int batchSize;
31 34
  35 + @Autowired
  36 + @Qualifier(value = "dataToolsServiceImpl")
  37 + private DataToolsService dataToolsService;
  38 +
32 /** 日志记录器 */ 39 /** 日志记录器 */
33 protected Logger logger = LoggerFactory.getLogger(this.getClass()); 40 protected Logger logger = LoggerFactory.getLogger(this.getClass());
34 41
@@ -108,4 +115,19 @@ public class BServiceImpl&lt;T, ID extends Serializable&gt; implements BService&lt;T, ID&gt; @@ -108,4 +115,19 @@ public class BServiceImpl&lt;T, ID extends Serializable&gt; implements BService&lt;T, ID&gt;
108 115
109 baseRepository.delete(id); 116 baseRepository.delete(id);
110 } 117 }
  118 +
  119 + @Override
  120 + public File uploadFile(String filename, byte[] filedata) throws ScheduleException {
  121 + return dataToolsService.uploadFile(filename, filedata);
  122 + }
  123 +
  124 + @Override
  125 + public void importData(File file, Map<String, Object> params) throws ScheduleException {
  126 + dataToolsService.importData(file, params);
  127 + }
  128 +
  129 + @Override
  130 + public File exportData(Map<String, Object> params) throws ScheduleException {
  131 + return dataToolsService.exportData(params);
  132 + }
111 } 133 }
src/main/java/com/bsth/service/schedule/impl/CarConfigInfoServiceImpl.java
@@ -3,7 +3,7 @@ package com.bsth.service.schedule.impl; @@ -3,7 +3,7 @@ package com.bsth.service.schedule.impl;
3 import com.bsth.entity.schedule.CarConfigInfo; 3 import com.bsth.entity.schedule.CarConfigInfo;
4 import com.bsth.entity.schedule.rule.ScheduleRule1Flat; 4 import com.bsth.entity.schedule.rule.ScheduleRule1Flat;
5 import com.bsth.service.schedule.CarConfigInfoService; 5 import com.bsth.service.schedule.CarConfigInfoService;
6 -import com.bsth.service.schedule.ScheduleException; 6 +import com.bsth.service.schedule.exception.ScheduleException;
7 import com.bsth.service.schedule.ScheduleRule1FlatService; 7 import com.bsth.service.schedule.ScheduleRule1FlatService;
8 import org.springframework.beans.factory.annotation.Autowired; 8 import org.springframework.beans.factory.annotation.Autowired;
9 import org.springframework.stereotype.Service; 9 import org.springframework.stereotype.Service;
src/main/java/com/bsth/service/schedule/impl/CarDeviceServiceImpl.java
@@ -4,7 +4,7 @@ import com.bsth.entity.CarDevice; @@ -4,7 +4,7 @@ import com.bsth.entity.CarDevice;
4 import com.bsth.entity.Cars; 4 import com.bsth.entity.Cars;
5 import com.bsth.service.CarsService; 5 import com.bsth.service.CarsService;
6 import com.bsth.service.schedule.CarDeviceService; 6 import com.bsth.service.schedule.CarDeviceService;
7 -import com.bsth.service.schedule.ScheduleException; 7 +import com.bsth.service.schedule.exception.ScheduleException;
8 import org.springframework.beans.factory.annotation.Autowired; 8 import org.springframework.beans.factory.annotation.Autowired;
9 import org.springframework.stereotype.Service; 9 import org.springframework.stereotype.Service;
10 import org.springframework.transaction.annotation.Transactional; 10 import org.springframework.transaction.annotation.Transactional;
src/main/java/com/bsth/service/schedule/impl/CarsServiceImpl.java
@@ -2,19 +2,91 @@ package com.bsth.service.schedule.impl; @@ -2,19 +2,91 @@ package com.bsth.service.schedule.impl;
2 2
3 import com.bsth.entity.Cars; 3 import com.bsth.entity.Cars;
4 import com.bsth.service.schedule.CarsService; 4 import com.bsth.service.schedule.CarsService;
5 -import com.bsth.service.schedule.ScheduleException; 5 +import com.bsth.service.schedule.exception.ScheduleException;
  6 +import com.bsth.service.schedule.utils.DataToolsProperties;
  7 +import org.slf4j.Logger;
  8 +import org.slf4j.LoggerFactory;
  9 +import org.springframework.beans.factory.annotation.Autowired;
  10 +import org.springframework.boot.context.properties.EnableConfigurationProperties;
6 import org.springframework.stereotype.Service; 11 import org.springframework.stereotype.Service;
7 import org.springframework.transaction.annotation.Transactional; 12 import org.springframework.transaction.annotation.Transactional;
8 import org.springframework.util.CollectionUtils; 13 import org.springframework.util.CollectionUtils;
9 14
  15 +import java.io.File;
  16 +import java.io.PrintWriter;
  17 +import java.io.StringWriter;
10 import java.util.HashMap; 18 import java.util.HashMap;
11 import java.util.Map; 19 import java.util.Map;
12 20
13 /** 21 /**
14 * Created by xu on 16/12/8. 22 * Created by xu on 16/12/8.
15 */ 23 */
  24 +@EnableConfigurationProperties(DataToolsProperties.class)
16 @Service(value = "carsServiceImpl_sc") 25 @Service(value = "carsServiceImpl_sc")
17 public class CarsServiceImpl extends BServiceImpl<Cars, Integer> implements CarsService { 26 public class CarsServiceImpl extends BServiceImpl<Cars, Integer> implements CarsService {
  27 + /** 日志记录器 */
  28 + private static final Logger LOGGER = LoggerFactory.getLogger(CarsServiceImpl.class);
  29 +
  30 + @Autowired
  31 + private DataToolsProperties dataToolsProperties;
  32 +
  33 + @Override
  34 + public void importData(File file, Map<String, Object> params) throws ScheduleException {
  35 + try {
  36 + LOGGER.info("//---------------- 导入车辆基础信息 start... ----------------//");
  37 + // 创建ktr转换所需参数
  38 + Map<String, Object> ktrParms = new HashMap<>();
  39 + File ktrFile = new File(this.getClass().getResource(
  40 + dataToolsProperties.getCarsDatainputktr()).toURI());
  41 +
  42 + // 通用参数,转换文件路径,excel输入文件路径,错误输出文件路径
  43 + ktrParms.put("transpath", ktrFile.getAbsolutePath());
  44 + ktrParms.put("filepath", file.getAbsolutePath());
  45 + ktrParms.put("erroroutputdir", dataToolsProperties.getTransErrordir());
  46 +
  47 + super.importData(file, ktrParms);
  48 +
  49 + LOGGER.info("//---------------- 导入车辆基础信息 success... ----------------//");
  50 + } catch (Exception exp) {
  51 + LOGGER.info("//---------------- 导入车辆基础信息 failed... ----------------//");
  52 +
  53 + StringWriter sw = new StringWriter();
  54 + exp.printStackTrace(new PrintWriter(sw));
  55 + LOGGER.info(sw.toString());
  56 +
  57 + throw new ScheduleException(exp.getMessage());
  58 + }
  59 + }
  60 +
  61 + @Override
  62 + public File exportData(Map<String, Object> params) throws ScheduleException {
  63 + try {
  64 + LOGGER.info("//---------------- 导出车辆基础信息 start... ----------------//");
  65 + // 创建ktr转换所需参数
  66 + Map<String, Object> ktrParms = new HashMap<>();
  67 + File ktrFile = new File(this.getClass().getResource(
  68 + dataToolsProperties.getCarsDataoutputktr()).toURI());
  69 +
  70 + // 通用参数,转换文件路径,excel输出文件名
  71 + ktrParms.put("transpath", ktrFile.getAbsolutePath());
  72 + ktrParms.put("filename", "车辆基础信息_download-");
  73 +
  74 + File file = super.exportData(ktrParms);
  75 +
  76 + LOGGER.info("//---------------- 导出车辆基础信息 success... ----------------//");
  77 +
  78 + return file;
  79 +
  80 + } catch (Exception exp) {
  81 + LOGGER.info("//---------------- 导出车辆基础信息 failed... ----------------//");
  82 +
  83 + StringWriter sw = new StringWriter();
  84 + exp.printStackTrace(new PrintWriter(sw));
  85 + LOGGER.info(sw.toString());
  86 +
  87 + throw new ScheduleException(exp.getMessage());
  88 + }
  89 + }
18 90
19 @Override 91 @Override
20 @Transactional 92 @Transactional
src/main/java/com/bsth/service/schedule/impl/EmployeeConfigInfoServiceImpl.java
@@ -3,7 +3,7 @@ package com.bsth.service.schedule.impl; @@ -3,7 +3,7 @@ package com.bsth.service.schedule.impl;
3 import com.bsth.entity.schedule.EmployeeConfigInfo; 3 import com.bsth.entity.schedule.EmployeeConfigInfo;
4 import com.bsth.entity.schedule.rule.ScheduleRule1Flat; 4 import com.bsth.entity.schedule.rule.ScheduleRule1Flat;
5 import com.bsth.service.schedule.EmployeeConfigInfoService; 5 import com.bsth.service.schedule.EmployeeConfigInfoService;
6 -import com.bsth.service.schedule.ScheduleException; 6 +import com.bsth.service.schedule.exception.ScheduleException;
7 import com.bsth.service.schedule.ScheduleRule1FlatService; 7 import com.bsth.service.schedule.ScheduleRule1FlatService;
8 import org.springframework.beans.factory.annotation.Autowired; 8 import org.springframework.beans.factory.annotation.Autowired;
9 import org.springframework.stereotype.Service; 9 import org.springframework.stereotype.Service;