Commit f02cd88a6dc691b69ac3adef50ac330b1c3b4cd5
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.
pom.xml
| ... | ... | @@ -155,6 +155,12 @@ |
| 155 | 155 | <version>2.1.8</version> |
| 156 | 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 | 164 | <!-- pentaho kettle 依赖 --> |
| 159 | 165 | <dependency> |
| 160 | 166 | <groupId>com.pentaho.kettle</groupId> | ... | ... |
src/main/java/com/bsth/controller/DownloadController.java
| ... | ... | @@ -2,6 +2,7 @@ package com.bsth.controller; |
| 2 | 2 | |
| 3 | 3 | import java.io.File; |
| 4 | 4 | import java.io.IOException; |
| 5 | +import java.net.URLDecoder; | |
| 5 | 6 | |
| 6 | 7 | import org.apache.commons.io.FileUtils; |
| 7 | 8 | import org.springframework.context.annotation.Scope; |
| ... | ... | @@ -35,7 +36,7 @@ public class DownloadController |
| 35 | 36 | File file=new File(moudelPath); |
| 36 | 37 | HttpHeaders headers = new HttpHeaders(); |
| 37 | 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 | 40 | headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); |
| 40 | 41 | return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), |
| 41 | 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 | 13 | import org.springframework.web.bind.annotation.RequestParam; |
| 14 | 14 | import org.springframework.web.bind.annotation.RestController; |
| 15 | 15 | |
| 16 | +import com.bsth.data.BasicData; | |
| 16 | 17 | import com.bsth.entity.mcy_forms.Allline; |
| 17 | 18 | import com.bsth.entity.mcy_forms.Changetochange; |
| 19 | +import com.bsth.entity.mcy_forms.Daily; | |
| 18 | 20 | import com.bsth.entity.mcy_forms.Executionrate; |
| 19 | 21 | import com.bsth.entity.mcy_forms.Linepasswengerflow; |
| 20 | 22 | import com.bsth.entity.mcy_forms.Operationservice; |
| ... | ... | @@ -319,8 +321,34 @@ public class ExportController { |
| 319 | 321 | List<Turnoutrate> turnoutrate = formsService.turnoutrate(map); |
| 320 | 322 | Map<String, Object> map1 = new HashMap<String, Object>(); |
| 321 | 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 | 337 | for (Turnoutrate l : turnoutrate) { |
| 323 | 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 | 352 | m.put("rq", l.getRq()); |
| 325 | 353 | m.put("gs", l.getGs()); |
| 326 | 354 | m.put("zhgs", l.getZhgs()); |
| ... | ... | @@ -330,10 +358,27 @@ public class ExportController { |
| 330 | 358 | m.put("cchqz", l.getCchqz()); |
| 331 | 359 | m.put("chl", l.getChl()); |
| 332 | 360 | m.put("bcjh", l.getBcjh()); |
| 333 | - m.put("bcsj", l.getBbzxl()); | |
| 361 | + m.put("bcsj", l.getBcsj()); | |
| 334 | 362 | m.put("bbzxl", l.getBbzxl()); |
| 335 | 363 | m.put("sm", l.getSm()); |
| 336 | 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 | 384 | try { |
| ... | ... | @@ -347,7 +392,7 @@ public class ExportController { |
| 347 | 392 | return resList; |
| 348 | 393 | } |
| 349 | 394 | |
| 350 | - //营运线路出车率统计表 | |
| 395 | + //班次执行率统计表 | |
| 351 | 396 | @RequestMapping(value = "/executionrateExport", method = RequestMethod.POST) |
| 352 | 397 | public List<Map<String, Object>> executionrateExport(@RequestParam Map<String, Object> map) { |
| 353 | 398 | SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM-dd"), sdfSimple = new SimpleDateFormat("yyyyMMdd"); |
| ... | ... | @@ -356,8 +401,33 @@ public class ExportController { |
| 356 | 401 | List<Executionrate> executionrate = formsService.executionrate(map); |
| 357 | 402 | Map<String, Object> map1 = new HashMap<String, Object>(); |
| 358 | 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 | 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 | 431 | m.put("rq", l.getRq()); |
| 362 | 432 | m.put("gs", l.getGs()); |
| 363 | 433 | m.put("zhgs", l.getZhgs()); |
| ... | ... | @@ -366,10 +436,24 @@ public class ExportController { |
| 366 | 436 | m.put("cchsj", l.getCchsj()); |
| 367 | 437 | m.put("chl", l.getChl()); |
| 368 | 438 | m.put("bcjh", l.getBcjh()); |
| 369 | - m.put("bcsj", l.getBbzxl()); | |
| 439 | + m.put("bcsj", l.getBcsj()); | |
| 370 | 440 | m.put("bbzxl", l.getBbzxl()); |
| 371 | 441 | m.put("sm", l.getSm()); |
| 372 | 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 | 459 | try { |
| ... | ... | @@ -393,8 +477,28 @@ public class ExportController { |
| 393 | 477 | List<Allline> allline = formsService.allline(map); |
| 394 | 478 | Map<String, Object> map1 = new HashMap<String, Object>(); |
| 395 | 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 | 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 | 502 | m.put("rq", l.getRq()); |
| 399 | 503 | m.put("gs", l.getGs()); |
| 400 | 504 | m.put("zhgs", l.getZhgs()); |
| ... | ... | @@ -403,10 +507,22 @@ public class ExportController { |
| 403 | 507 | m.put("cchsj", l.getCchsj()); |
| 404 | 508 | m.put("chl", l.getChl()); |
| 405 | 509 | m.put("bcjh", l.getBcjh()); |
| 406 | - m.put("bcsj", l.getBbzxl()); | |
| 510 | + m.put("bcsj", l.getBcsj()); | |
| 407 | 511 | m.put("bbzxl", l.getBbzxl()); |
| 408 | 512 | m.put("sm", l.getSm()); |
| 409 | 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 | 528 | try { |
| ... | ... | @@ -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 | 11 | |
| 12 | 12 | import com.bsth.entity.mcy_forms.Allline; |
| 13 | 13 | import com.bsth.entity.mcy_forms.Changetochange; |
| 14 | +import com.bsth.entity.mcy_forms.Daily; | |
| 14 | 15 | import com.bsth.entity.mcy_forms.Executionrate; |
| 15 | 16 | import com.bsth.entity.mcy_forms.Linepasswengerflow; |
| 16 | 17 | import com.bsth.entity.mcy_forms.Operationservice; |
| ... | ... | @@ -112,4 +113,12 @@ public class MCY_FormsController { |
| 112 | 113 | |
| 113 | 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 | 59 | public Map<String, Object> findRouteAndStationByLine(@RequestParam String lineCode){ |
| 60 | 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<ScheduleRealInfo, |
| 310 | 310 | |
| 311 | 311 | @RequestMapping(value = "/historyMessage") |
| 312 | 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 | 317 | @RequestMapping(value="/findLine") |
| ... | ... | @@ -332,14 +332,14 @@ public class ScheduleRealInfoController extends BaseController<ScheduleRealInfo, |
| 332 | 332 | |
| 333 | 333 | @RequestMapping(value = "/account") |
| 334 | 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 | 339 | @RequestMapping(value = "/correctForm") |
| 340 | 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 | 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 | 5 | import com.bsth.entity.schedule.BEntity; |
| 6 | 6 | import com.bsth.entity.sys.SysUser; |
| 7 | 7 | import com.bsth.service.schedule.BService; |
| 8 | -import com.bsth.service.schedule.ScheduleException; | |
| 8 | +import com.bsth.service.schedule.exception.ScheduleException; | |
| 9 | 9 | import com.bsth.service.sys.SysUserService; |
| 10 | 10 | import com.google.common.base.Splitter; |
| 11 | +import jxl.Sheet; | |
| 12 | +import jxl.Workbook; | |
| 13 | +import org.apache.commons.lang3.StringUtils; | |
| 11 | 14 | import org.springframework.beans.factory.annotation.Autowired; |
| 12 | 15 | import org.springframework.data.domain.PageRequest; |
| 13 | 16 | import org.springframework.data.domain.Sort; |
| 14 | 17 | import org.springframework.web.bind.annotation.*; |
| 18 | +import org.springframework.web.multipart.MultipartFile; | |
| 15 | 19 | |
| 20 | +import javax.servlet.http.HttpServletResponse; | |
| 16 | 21 | import javax.servlet.http.HttpSession; |
| 17 | -import java.io.Serializable; | |
| 22 | +import java.io.*; | |
| 18 | 23 | import java.util.*; |
| 19 | 24 | |
| 20 | 25 | /** |
| ... | ... | @@ -26,7 +31,7 @@ public class BController<T, ID extends Serializable> { |
| 26 | 31 | @Autowired |
| 27 | 32 | private SysUserService sysUserService; |
| 28 | 33 | |
| 29 | - // CRUD 操作 | |
| 34 | + //---------------- CRUD 操作 ----------------// | |
| 30 | 35 | // Create操作 |
| 31 | 36 | @RequestMapping(method = RequestMethod.POST) |
| 32 | 37 | public Map<String, Object> save(@RequestBody T t, HttpSession httpSession) { |
| ... | ... | @@ -73,6 +78,7 @@ public class BController<T, ID extends Serializable> { |
| 73 | 78 | rtn.put("data", t); |
| 74 | 79 | return rtn; |
| 75 | 80 | } |
| 81 | + // 查询所有操作 | |
| 76 | 82 | @RequestMapping(value = "/all", method = RequestMethod.GET) |
| 77 | 83 | public Map<String, Object> list(@RequestParam Map<String, Object> param) { |
| 78 | 84 | List<T> tList = bService.list(param); |
| ... | ... | @@ -81,6 +87,7 @@ public class BController<T, ID extends Serializable> { |
| 81 | 87 | rtn.put("data", tList); |
| 82 | 88 | return rtn; |
| 83 | 89 | } |
| 90 | + // 分页查询操作 | |
| 84 | 91 | @RequestMapping(method = RequestMethod.GET) |
| 85 | 92 | public Map<String, Object> list( |
| 86 | 93 | @RequestParam Map<String, Object> map, |
| ... | ... | @@ -138,4 +145,99 @@ public class BController<T, ID extends Serializable> { |
| 138 | 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 | 4 | import com.bsth.controller.schedule.BController; |
| 5 | 5 | import com.bsth.entity.CarDevice; |
| 6 | 6 | import com.bsth.service.schedule.CarDeviceService; |
| 7 | -import com.bsth.service.schedule.ScheduleException; | |
| 7 | +import com.bsth.service.schedule.exception.ScheduleException; | |
| 8 | 8 | import org.springframework.beans.factory.annotation.Autowired; |
| 9 | 9 | import org.springframework.web.bind.annotation.RequestMapping; |
| 10 | 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 | 4 | import com.bsth.controller.schedule.BController; |
| 5 | 5 | import com.bsth.entity.Cars; |
| 6 | 6 | import com.bsth.service.schedule.CarsService; |
| 7 | -import com.bsth.service.schedule.ScheduleException; | |
| 7 | +import com.bsth.service.schedule.exception.ScheduleException; | |
| 8 | 8 | import org.springframework.beans.factory.annotation.Autowired; |
| 9 | 9 | import org.springframework.web.bind.annotation.RequestMapping; |
| 10 | 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 | 4 | import com.bsth.controller.schedule.BController; |
| 5 | 5 | import com.bsth.entity.Personnel; |
| 6 | 6 | import com.bsth.service.schedule.EmployeeService; |
| 7 | -import com.bsth.service.schedule.ScheduleException; | |
| 7 | +import com.bsth.service.schedule.exception.ScheduleException; | |
| 8 | 8 | import org.springframework.beans.factory.annotation.Autowired; |
| 9 | 9 | import org.springframework.web.bind.annotation.RequestMapping; |
| 10 | 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 | 5 | import com.bsth.entity.schedule.CarConfigInfo; |
| 6 | 6 | import com.bsth.repository.schedule.CarConfigInfoRepository; |
| 7 | 7 | import com.bsth.service.schedule.CarConfigInfoService; |
| 8 | -import com.bsth.service.schedule.ScheduleException; | |
| 8 | +import com.bsth.service.schedule.exception.ScheduleException; | |
| 9 | 9 | import org.springframework.beans.factory.annotation.Autowired; |
| 10 | 10 | import org.springframework.web.bind.annotation.RequestMapping; |
| 11 | 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 | 5 | import com.bsth.entity.schedule.EmployeeConfigInfo; |
| 6 | 6 | import com.bsth.repository.schedule.EmployeeConfigInfoRepository; |
| 7 | 7 | import com.bsth.service.schedule.EmployeeConfigInfoService; |
| 8 | -import com.bsth.service.schedule.ScheduleException; | |
| 8 | +import com.bsth.service.schedule.exception.ScheduleException; | |
| 9 | 9 | import org.springframework.beans.factory.annotation.Autowired; |
| 10 | 10 | import org.springframework.web.bind.annotation.RequestMapping; |
| 11 | 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 | 5 | import com.bsth.entity.schedule.GuideboardInfo; |
| 6 | 6 | import com.bsth.repository.schedule.GuideboardInfoRepository; |
| 7 | 7 | import com.bsth.service.schedule.GuideboardInfoService; |
| 8 | -import com.bsth.service.schedule.ScheduleException; | |
| 8 | +import com.bsth.service.schedule.exception.ScheduleException; | |
| 9 | 9 | import com.bsth.service.schedule.utils.DataToolsProperties; |
| 10 | 10 | import org.springframework.beans.factory.annotation.Autowired; |
| 11 | 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 | 3 | import com.bsth.common.ResponseCode; |
| 4 | 4 | import com.bsth.controller.schedule.BController; |
| 5 | 5 | import com.bsth.entity.schedule.TTInfo; |
| 6 | -import com.bsth.service.schedule.ScheduleException; | |
| 6 | +import com.bsth.service.schedule.exception.ScheduleException; | |
| 7 | 7 | import com.bsth.service.schedule.TTInfoService; |
| 8 | 8 | import org.springframework.beans.factory.annotation.Autowired; |
| 9 | 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 | 26 | */ |
| 27 | 27 | @Component |
| 28 | 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 | 36 | //设备号和车辆自编号 (K: 设备编码 ,V:车辆自编号) |
| 37 | 37 | public static BiMap<String, String> deviceId2NbbmMap; |
| ... | ... | @@ -39,27 +39,21 @@ public class BasicData implements CommandLineRunner { |
| 39 | 39 | //车辆自编号和公司代码对照 (K: 车辆自编号 ,V:公司代码) |
| 40 | 40 | public static Map<String, String> nbbm2CompanyCodeMap; |
| 41 | 41 | |
| 42 | - //站点编码和名称对照,包括停车场 (K: 站点编码 ,V:站点名称) | |
| 42 | + //站点编码和名称对照,包括停车场 (K: lineCode_updown_stationCode ,V:站点名称) | |
| 43 | 43 | public static Map<String, String> stationCode2NameMap; |
| 44 | 44 | |
| 45 | 45 | //线路起终点对照(线路编码_上下行_起终点) 1024_0_B (1024上行起点) |
| 46 | - public static Map<String, String> lineSEPointMap; | |
| 46 | + //public static Map<String, String> lineSEPointMap; | |
| 47 | 47 | |
| 48 | 48 | //车辆和线路对照 |
| 49 | 49 | public static Map<String, Line> nbbm2LineMap; |
| 50 | 50 | |
| 51 | - //线路和用户对照 用于webSocket定向推送消息(用户进入线调时写入数据) | |
| 52 | - //public static TreeMultimap<String, String> lineCode2SocketUserMap = TreeMultimap.create(); | |
| 53 | - | |
| 54 | 51 | //线路ID和code 对照 |
| 55 | 52 | public static BiMap<Integer, String> lineId2CodeMap; |
| 56 | 53 | |
| 57 | 54 | //线路编码和名称对照 |
| 58 | 55 | public static Map<String, String> lineCode2NameMap; |
| 59 | 56 | |
| 60 | - //线路编码_站点编码 == 0|1 上下行 | |
| 61 | - //public static Map<String, Integer> lineStationUpDownMap; | |
| 62 | - | |
| 63 | 57 | //停车场 |
| 64 | 58 | public static List<String> parkCodeList; |
| 65 | 59 | |
| ... | ... | @@ -77,7 +71,7 @@ public class BasicData implements CommandLineRunner { |
| 77 | 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 | 77 | static Logger logger = LoggerFactory.getLogger(BasicData.class); |
| ... | ... | @@ -90,6 +84,10 @@ public class BasicData implements CommandLineRunner { |
| 90 | 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 | 92 | @Component |
| 95 | 93 | public static class BasicDataLoader extends Thread { |
| ... | ... | @@ -114,7 +112,7 @@ public class BasicData implements CommandLineRunner { |
| 114 | 112 | |
| 115 | 113 | @Autowired |
| 116 | 114 | PersonnelRepository personnelRepository; |
| 117 | - | |
| 115 | + | |
| 118 | 116 | @Autowired |
| 119 | 117 | BusinessRepository businessRepository; |
| 120 | 118 | |
| ... | ... | @@ -156,47 +154,24 @@ public class BasicData implements CommandLineRunner { |
| 156 | 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 | 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 | 176 | * @Title: loadDeviceInfo |
| 202 | 177 | * @Description: TODO(加载设备相关信息) |
| ... | ... | @@ -223,13 +198,13 @@ public class BasicData implements CommandLineRunner { |
| 223 | 198 | */ |
| 224 | 199 | public void loadStationInfo() { |
| 225 | 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 | 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 | 209 | Iterator<CarPark> iterator2 = carParkRepository.findAll().iterator(); |
| 235 | 210 | |
| ... | ... | @@ -266,7 +241,7 @@ public class BasicData implements CommandLineRunner { |
| 266 | 241 | * @Title: loadLineInfo |
| 267 | 242 | * @Description: TODO(加载线路相关信息) |
| 268 | 243 | */ |
| 269 | - public void loadLineInfo(){ | |
| 244 | + public void loadLineInfo() { | |
| 270 | 245 | Iterator<Line> iterator = lineRepository.findAll().iterator(); |
| 271 | 246 | |
| 272 | 247 | Line line; |
| ... | ... | @@ -276,36 +251,36 @@ public class BasicData implements CommandLineRunner { |
| 276 | 251 | Map<String, String> code2SHcode = new HashMap<String, String>(); |
| 277 | 252 | Map<String, Integer> tempStationName2YgcNumber = new HashMap<String, Integer>(); |
| 278 | 253 | |
| 279 | - while(iterator.hasNext()){ | |
| 254 | + while (iterator.hasNext()) { | |
| 280 | 255 | line = iterator.next(); |
| 281 | 256 | biMap.put(line.getId(), line.getLineCode()); |
| 282 | 257 | code2name.put(line.getLineCode(), line.getName()); |
| 283 | - id2SHcode.put(line.getId(),line.getShanghaiLinecode()); | |
| 258 | + id2SHcode.put(line.getId(), line.getShanghaiLinecode()); | |
| 284 | 259 | code2SHcode.put(line.getLineCode(), line.getShanghaiLinecode()); |
| 285 | 260 | |
| 286 | 261 | /** |
| 287 | 262 | * 加载运管处的站点及序号 |
| 288 | 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 | 286 | lineId2CodeMap = biMap; | ... | ... |
src/main/java/com/bsth/data/LineConfigData.java
| ... | ... | @@ -10,6 +10,7 @@ import org.slf4j.Logger; |
| 10 | 10 | import org.slf4j.LoggerFactory; |
| 11 | 11 | import org.springframework.beans.factory.annotation.Autowired; |
| 12 | 12 | import org.springframework.boot.CommandLineRunner; |
| 13 | +import org.springframework.core.annotation.Order; | |
| 13 | 14 | import org.springframework.stereotype.Component; |
| 14 | 15 | |
| 15 | 16 | import java.util.*; |
| ... | ... | @@ -23,6 +24,7 @@ import java.util.*; |
| 23 | 24 | * |
| 24 | 25 | */ |
| 25 | 26 | @Component |
| 27 | +@Order(value = 2) | |
| 26 | 28 | public class LineConfigData implements CommandLineRunner { |
| 27 | 29 | |
| 28 | 30 | Logger logger = LoggerFactory.getLogger(this.getClass()); | ... | ... |
src/main/java/com/bsth/data/arrival/ArrivalData_GPS.java
| 1 | 1 | package com.bsth.data.arrival; |
| 2 | 2 | |
| 3 | -import com.bsth.data.match.Arrival2Schedule; | |
| 4 | 3 | import com.bsth.data.schedule.DayOfSchedule; |
| 5 | 4 | import com.google.common.collect.ArrayListMultimap; |
| 6 | 5 | import com.google.common.collect.ListMultimap; |
| ... | ... | @@ -59,7 +58,7 @@ public class ArrivalData_GPS implements CommandLineRunner{ |
| 59 | 58 | |
| 60 | 59 | @Override |
| 61 | 60 | public void run() { |
| 62 | - try{ | |
| 61 | + /*try{ | |
| 63 | 62 | logger.info("开始加载到离站数据, " + System.currentTimeMillis()); |
| 64 | 63 | List<ArrivalEntity> arrSets = dataLoader.load(); |
| 65 | 64 | if(null == arrSets || arrSets.size() == 0) |
| ... | ... | @@ -86,7 +85,7 @@ public class ArrivalData_GPS implements CommandLineRunner{ |
| 86 | 85 | Arrival2Schedule.start(carSet); |
| 87 | 86 | }catch(Exception e){ |
| 88 | 87 | logger.error("", e); |
| 89 | - } | |
| 88 | + }*/ | |
| 90 | 89 | } |
| 91 | 90 | } |
| 92 | 91 | ... | ... |
src/main/java/com/bsth/data/forecast/ForecastRealServer.java
| 1 | 1 | package com.bsth.data.forecast; |
| 2 | 2 | |
| 3 | +import com.bsth.Application; | |
| 3 | 4 | import com.bsth.data.forecast.entity.ForecastResult; |
| 4 | 5 | import com.bsth.data.forecast.entity.ForecastResult.ForecastResultItem; |
| 5 | 6 | import com.bsth.data.forecast.entity.SimpleRoute; |
| ... | ... | @@ -20,6 +21,7 @@ import java.util.ArrayList; |
| 20 | 21 | import java.util.HashMap; |
| 21 | 22 | import java.util.List; |
| 22 | 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 | 60 | @Override |
| 59 | 61 | public void run(String... arg0) throws Exception { |
| 60 | 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 | 88 | //终点站 |
| 87 | 89 | String eStation = null; |
| 88 | 90 | //当前执行班次 |
| 89 | - ScheduleRealInfo sch = dayOfSchedule.execPlanMap().get(nbbm); | |
| 91 | + ScheduleRealInfo sch = dayOfSchedule.executeCurr(nbbm); | |
| 90 | 92 | if(null != sch) |
| 91 | 93 | eStation = sch.getZdzCode(); |
| 92 | 94 | ... | ... |
src/main/java/com/bsth/data/gpsdata/GpsEntity.java
src/main/java/com/bsth/data/gpsdata/GpsRealData.java
| ... | ... | @@ -2,7 +2,6 @@ package com.bsth.data.gpsdata; |
| 2 | 2 | |
| 3 | 3 | import com.alibaba.fastjson.JSON; |
| 4 | 4 | import com.alibaba.fastjson.JSONObject; |
| 5 | -import com.bsth.Application; | |
| 6 | 5 | import com.bsth.data.BasicData; |
| 7 | 6 | import com.bsth.data.forecast.ForecastRealServer; |
| 8 | 7 | import com.bsth.data.gpsdata.arrival.GpsRealAnalyse; |
| ... | ... | @@ -26,7 +25,6 @@ import org.springframework.stereotype.Component; |
| 26 | 25 | import java.io.BufferedReader; |
| 27 | 26 | import java.io.InputStreamReader; |
| 28 | 27 | import java.util.*; |
| 29 | -import java.util.concurrent.TimeUnit; | |
| 30 | 28 | |
| 31 | 29 | /** |
| 32 | 30 | * @author PanZhao |
| ... | ... | @@ -67,12 +65,42 @@ public class GpsRealData implements CommandLineRunner { |
| 67 | 65 | |
| 68 | 66 | @Override |
| 69 | 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 | 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 | 122 | for (String device : set) { |
| 95 | 123 | gps = gpsMap.get(device); |
| 96 | 124 | //过滤异常GPS数据 |
| 97 | - if (gps.isAbnormal()) | |
| 125 | + if (gps == null || gps.isAbnormal()) | |
| 98 | 126 | continue; |
| 99 | 127 | |
| 100 | 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 | 29 | |
| 30 | 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 | 34 | private static Map<String, CircleQueue<GpsEntity>> gpsCacheMap = new HashMap<>(); |
| 35 | 35 | |
| 36 | 36 | //线路路段走向 |
| ... | ... | @@ -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 | 79 | return routeCodeMap.get(gps.getLineId() + "_" + gps.getUpDown() + "_" + gps.getStopNo()); |
| 80 | 80 | } |
| 81 | 81 | |
| ... | ... | @@ -94,6 +94,21 @@ public class GeoCacheData { |
| 94 | 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 | 112 | public static Polygon getTccPolygon(String code) { |
| 98 | 113 | return tccMap.get(code); |
| 99 | 114 | } |
| ... | ... | @@ -191,4 +206,16 @@ public class GeoCacheData { |
| 191 | 206 | } |
| 192 | 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 | 222 | \ No newline at end of file | ... | ... |
src/main/java/com/bsth/data/gpsdata/arrival/GpsRealAnalyse.java
| 1 | 1 | package com.bsth.data.gpsdata.arrival; |
| 2 | 2 | |
| 3 | 3 | import com.bsth.data.gpsdata.GpsEntity; |
| 4 | +import com.bsth.data.gpsdata.GpsRealData; | |
| 4 | 5 | import com.bsth.data.gpsdata.arrival.handlers.*; |
| 5 | 6 | import com.bsth.data.gpsdata.arrival.utils.CircleQueue; |
| 6 | 7 | import org.slf4j.Logger; |
| ... | ... | @@ -33,6 +34,9 @@ public class GpsRealAnalyse { |
| 33 | 34 | @Autowired |
| 34 | 35 | ReverseSignalHandle reverseSignalHandle; |
| 35 | 36 | |
| 37 | + @Autowired | |
| 38 | + GpsRealData gpsRealData; | |
| 39 | + | |
| 36 | 40 | //50个线程 |
| 37 | 41 | static ExecutorService threadPool = Executors.newFixedThreadPool(50); |
| 38 | 42 | |
| ... | ... | @@ -45,6 +49,10 @@ public class GpsRealAnalyse { |
| 45 | 49 | try { |
| 46 | 50 | //等待子线程结束 |
| 47 | 51 | count.await(); |
| 52 | + | |
| 53 | + //加入实时gps对照 | |
| 54 | + for(GpsEntity gps: list) | |
| 55 | + gpsRealData.put(gps); | |
| 48 | 56 | } catch (InterruptedException e) { |
| 49 | 57 | logger.error("", e); |
| 50 | 58 | } | ... | ... |
src/main/java/com/bsth/data/gpsdata/arrival/SignalHandle.java
| 1 | 1 | package com.bsth.data.gpsdata.arrival; |
| 2 | 2 | |
| 3 | 3 | import com.bsth.data.gpsdata.GpsEntity; |
| 4 | +import com.bsth.data.gpsdata.arrival.entity.StationRoute; | |
| 4 | 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 | 12 | * Created by panzhao on 2016/12/27. |
| ... | ... | @@ -14,64 +19,71 @@ public abstract class SignalHandle { |
| 14 | 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 | 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 | 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 | 72 | * @param gps |
| 73 | + * @param prevs | |
| 58 | 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 | 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 | 5 | */ |
| 6 | 6 | public class RouteReverse { |
| 7 | 7 | |
| 8 | + private String nbbm; | |
| 8 | 9 | //反转个数 |
| 9 | 10 | private int count; |
| 10 | 11 | |
| ... | ... | @@ -14,18 +15,18 @@ public class RouteReverse { |
| 14 | 15 | //掉头站点 |
| 15 | 16 | private String turned; |
| 16 | 17 | |
| 17 | - //开始时间 | |
| 18 | - private long st; | |
| 19 | - | |
| 20 | 18 | //掉头时间 |
| 21 | 19 | private long zt; |
| 22 | 20 | |
| 23 | - //结束时间 | |
| 24 | - private long et; | |
| 21 | + //检测时间 | |
| 22 | + private long ct; | |
| 25 | 23 | |
| 26 | 24 | //是否闭合 |
| 27 | 25 | private boolean close; |
| 28 | 26 | |
| 27 | + //信号不明确 | |
| 28 | + private boolean vague; | |
| 29 | + | |
| 29 | 30 | public int getCount() { |
| 30 | 31 | return count; |
| 31 | 32 | } |
| ... | ... | @@ -50,22 +51,6 @@ public class RouteReverse { |
| 50 | 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 | 54 | public boolean isClose() { |
| 70 | 55 | return close; |
| 71 | 56 | } |
| ... | ... | @@ -81,4 +66,28 @@ public class RouteReverse { |
| 81 | 66 | public void setZt(long zt) { |
| 82 | 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 | 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 | 2 | |
| 3 | 3 | import com.bsth.data.LineConfigData; |
| 4 | 4 | import com.bsth.data.gpsdata.GpsEntity; |
| 5 | -import com.bsth.data.gpsdata.arrival.GeoCacheData; | |
| 6 | 5 | import com.bsth.data.gpsdata.arrival.SignalHandle; |
| 7 | -import com.bsth.data.gpsdata.arrival.entity.StationRoute; | |
| 8 | 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 | 9 | import com.bsth.data.schedule.DayOfSchedule; |
| 11 | 10 | import com.bsth.entity.realcontrol.LineConfig; |
| 12 | 11 | import com.bsth.entity.realcontrol.ScheduleRealInfo; |
| 13 | 12 | import com.bsth.service.directive.DirectiveService; |
| 14 | 13 | import com.bsth.websocket.handler.SendUtils; |
| 14 | +import org.apache.commons.lang3.StringUtils; | |
| 15 | 15 | import org.slf4j.Logger; |
| 16 | 16 | import org.slf4j.LoggerFactory; |
| 17 | 17 | import org.springframework.beans.factory.annotation.Autowired; |
| 18 | 18 | import org.springframework.stereotype.Component; |
| 19 | 19 | |
| 20 | -import java.util.List; | |
| 21 | - | |
| 22 | 20 | /** |
| 23 | 21 | * 进出站动作处理 |
| 24 | 22 | * Created by panzhao on 2016/12/27. |
| ... | ... | @@ -40,8 +38,25 @@ public class InOutStationSignalHandle extends SignalHandle{ |
| 40 | 38 | @Autowired |
| 41 | 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 | 49 | @Override |
| 44 | 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 | 61 | if(isNotEmpty(prevs)){ |
| 47 | 62 | GpsEntity prev = prevs.getTail(); |
| ... | ... | @@ -91,13 +106,23 @@ public class InOutStationSignalHandle extends SignalHandle{ |
| 91 | 106 | ScheduleRealInfo sch = dayOfSchedule.executeCurr(gps.getNbbm()); |
| 92 | 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 | 114 | if(qdzCode != null && prev.getStopNo().equals(qdzCode) |
| 99 | 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 | 126 | sch.setFcsjActualAll(gps.getTimestamp()); |
| 102 | 127 | //通知客户端 |
| 103 | 128 | sendUtils.sendFcsj(sch); |
| ... | ... | @@ -108,16 +133,28 @@ public class InOutStationSignalHandle extends SignalHandle{ |
| 108 | 133 | outStationAndOutPark(sch); |
| 109 | 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 | 147 | private void outStationAndOutPark(ScheduleRealInfo sch){ |
| 114 | 148 | LineConfig config = lineConfigData.get(sch.getXlBm()); |
| 115 | 149 | if (config != null && config.getOutConfig() == 2) { |
| 116 | 150 | //出站既出场 |
| 117 | 151 | ScheduleRealInfo schPrev = dayOfSchedule.prev(sch); |
| 118 | 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 | 166 | */ |
| 130 | 167 | private void inStation(GpsEntity gps, GpsEntity prev){ |
| 131 | 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 | 176 | sch.setZdsjActualAll(gps.getTimestamp()); |
| 137 | 177 | //已完成班次数 |
| ... | ... | @@ -142,33 +182,22 @@ public class InOutStationSignalHandle extends SignalHandle{ |
| 142 | 182 | //持久化 |
| 143 | 183 | dayOfSchedule.save(sch); |
| 144 | 184 | //下发调度指令 |
| 145 | - //directiveService.send60Dispatch(next, doneSum, "到站@系统"); | |
| 185 | + directiveService.send60Dispatch(next, doneSum, "到站@系统"); | |
| 146 | 186 | |
| 147 | 187 | //准备执行下一个班次 |
| 148 | 188 | if (next != null) { |
| 149 | 189 | next.setQdzArrDatesj(sch.getZdsjActual()); |
| 150 | 190 | dayOfSchedule.addExecPlan(next); |
| 151 | - | |
| 152 | 191 | //进站既进场 |
| 153 | 192 | inStationAndInPark(sch, next); |
| 154 | - | |
| 155 | 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 | 208 | LineConfig config = lineConfigData.get(sch.getXlBm()); |
| 180 | 209 | if (next.getBcType().equals("in") && |
| 181 | 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 | 225 | */ |
| 194 | 226 | private boolean willDepart(GpsEntity gps, GpsEntity prev, Object task){ |
| 195 | 227 | |
| 196 | -/* ScheduleRealInfo sch = (ScheduleRealInfo) task; | |
| 228 | + /*ScheduleRealInfo sch = (ScheduleRealInfo) task; | |
| 197 | 229 | ScheduleRealInfo prevTask = dayOfSchedule.prev(sch); |
| 198 | 230 | if(prevTask == null || prevTask.getBcType().equals("out")) |
| 199 | 231 | return false; |
| ... | ... | @@ -216,4 +248,4 @@ public class InOutStationSignalHandle extends SignalHandle{ |
| 216 | 248 | }*/ |
| 217 | 249 | return false; |
| 218 | 250 | } |
| 219 | -} | |
| 251 | +} | |
| 220 | 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 | 13 | @Component |
| 14 | 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 | 19 | //断开70分钟,之前的信号不再有参考价值 |
| 20 | 20 | private final static int CLEAR_TIME = 1000 * 60 * 70; |
| 21 | 21 | |
| 22 | 22 | @Override |
| 23 | 23 | public boolean handle(GpsEntity gps, CircleQueue<GpsEntity> prevs) { |
| 24 | - //异常信号不管 | |
| 25 | - if(isAbnormal(gps)){ | |
| 24 | + //漂移信号不管 | |
| 25 | + if(isDriftSignal(gps)){ | |
| 26 | + gps.setSignalState("drift"); | |
| 26 | 27 | return true; |
| 27 | 28 | } |
| 28 | 29 | |
| ... | ... | @@ -39,4 +40,4 @@ public class OfflineSignalHandle extends SignalHandle{ |
| 39 | 40 | } |
| 40 | 41 | return true; |
| 41 | 42 | } |
| 42 | -} | |
| 43 | +} | |
| 43 | 44 | \ No newline at end of file | ... | ... |
src/main/java/com/bsth/data/gpsdata/arrival/handlers/ReverseSignalHandle.java
| 1 | 1 | package com.bsth.data.gpsdata.arrival.handlers; |
| 2 | 2 | |
| 3 | -import com.alibaba.fastjson.JSON; | |
| 4 | 3 | import com.bsth.data.gpsdata.GpsEntity; |
| 5 | 4 | import com.bsth.data.gpsdata.arrival.GeoCacheData; |
| 6 | 5 | import com.bsth.data.gpsdata.arrival.SignalHandle; |
| 7 | 6 | import com.bsth.data.gpsdata.arrival.entity.RouteReverse; |
| 8 | 7 | import com.bsth.data.gpsdata.arrival.entity.StationRoute; |
| 9 | 8 | import com.bsth.data.gpsdata.arrival.utils.CircleQueue; |
| 9 | +import com.bsth.data.gpsdata.arrival.utils.ScheduleSignalState; | |
| 10 | 10 | import com.bsth.data.schedule.DayOfSchedule; |
| 11 | -import com.bsth.entity.realcontrol.ScheduleRealInfo; | |
| 12 | 11 | import org.slf4j.Logger; |
| 13 | 12 | import org.slf4j.LoggerFactory; |
| 14 | 13 | import org.springframework.beans.factory.annotation.Autowired; |
| ... | ... | @@ -26,6 +25,9 @@ public class ReverseSignalHandle extends SignalHandle { |
| 26 | 25 | @Autowired |
| 27 | 26 | DayOfSchedule dayOfSchedule; |
| 28 | 27 | |
| 28 | + @Autowired | |
| 29 | + ScheduleSignalState scheduleSignalState; | |
| 30 | + | |
| 29 | 31 | @Override |
| 30 | 32 | public boolean handle(GpsEntity gps, CircleQueue<GpsEntity> prevs) { |
| 31 | 33 | if (!isNotEmpty(prevs)) |
| ... | ... | @@ -36,17 +38,10 @@ public class ReverseSignalHandle extends SignalHandle { |
| 36 | 38 | if (isReverse(gps, prev)) { |
| 37 | 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 | 47 | return false; |
| ... | ... | @@ -63,7 +58,8 @@ public class ReverseSignalHandle extends SignalHandle { |
| 63 | 58 | RouteReverse routeReverse = new RouteReverse(); |
| 64 | 59 | int count = 0; |
| 65 | 60 | String path = ""; |
| 66 | - String turned = null; | |
| 61 | + long zt = 0L; | |
| 62 | + boolean half = false; | |
| 67 | 63 | |
| 68 | 64 | //当前站点 |
| 69 | 65 | StationRoute curr = GeoCacheData.getRouteCode(gps), sr; |
| ... | ... | @@ -72,22 +68,29 @@ public class ReverseSignalHandle extends SignalHandle { |
| 72 | 68 | for (int i = array.length - 1; i > 0; i--) { |
| 73 | 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 | 73 | break; |
| 77 | 74 | |
| 78 | 75 | if (prev.getInstation() == 1) { |
| 79 | 76 | sr = GeoCacheData.getRouteCode(prev); |
| 80 | 77 | |
| 81 | 78 | if (sr.getRouteSort() > curr.getRouteSort()) { |
| 79 | + if(half){ | |
| 80 | + routeReverse.setVague(true); | |
| 81 | + } | |
| 82 | + | |
| 82 | 83 | path += (curr.getCode() + ","); |
| 83 | 84 | count++; |
| 85 | + zt = prev.getTimestamp(); | |
| 84 | 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 | 94 | if (sr.getCode().equals(gps.getStopNo())) { |
| 92 | 95 | routeReverse.setClose(true); |
| 93 | 96 | path += sr.getCode(); |
| ... | ... | @@ -99,9 +102,11 @@ public class ReverseSignalHandle extends SignalHandle { |
| 99 | 102 | } |
| 100 | 103 | } |
| 101 | 104 | |
| 105 | + routeReverse.setZt(zt); | |
| 102 | 106 | routeReverse.setCount(count); |
| 103 | 107 | routeReverse.setDetail(path); |
| 104 | - routeReverse.setTurned(turned); | |
| 108 | + routeReverse.setCt(gps.getTimestamp()); | |
| 109 | + routeReverse.setNbbm(gps.getNbbm()); | |
| 105 | 110 | return routeReverse; |
| 106 | 111 | } |
| 107 | 112 | |
| ... | ... | @@ -129,4 +134,4 @@ public class ReverseSignalHandle extends SignalHandle { |
| 129 | 134 | } |
| 130 | 135 | return false; |
| 131 | 136 | } |
| 132 | -} | |
| 137 | +} | |
| 133 | 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<T> { |
| 105 | 105 | } |
| 106 | 106 | } |
| 107 | 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 | 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 | 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 | 28 | * Created by panzhao on 2016/12/24. |
| 29 | 29 | */ |
| 30 | 30 | @Component |
| 31 | -public class GpsDataRecovery implements ApplicationContextAware{ | |
| 31 | +public class GpsDataRecovery implements ApplicationContextAware { | |
| 32 | 32 | |
| 33 | 33 | static Logger logger = LoggerFactory.getLogger(GpsDataRecovery.class); |
| 34 | 34 | |
| ... | ... | @@ -48,7 +48,7 @@ public class GpsDataRecovery implements ApplicationContextAware{ |
| 48 | 48 | //按车辆分组数据 |
| 49 | 49 | ArrayListMultimap<String, GpsEntity> listMap = ArrayListMultimap.create(); |
| 50 | 50 | for (GpsEntity gps : list) { |
| 51 | - if(gps.getNbbm() != null) | |
| 51 | + if (gps.getNbbm() != null) | |
| 52 | 52 | listMap.put(gps.getNbbm(), gps); |
| 53 | 53 | } |
| 54 | 54 | |
| ... | ... | @@ -60,6 +60,8 @@ public class GpsDataRecovery implements ApplicationContextAware{ |
| 60 | 60 | for (String nbbm : keys) { |
| 61 | 61 | Collections.sort(listMap.get(nbbm), comp); |
| 62 | 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 | 67 | try { |
| ... | ... | @@ -124,7 +126,7 @@ public class GpsDataRecovery implements ApplicationContextAware{ |
| 124 | 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 | 131 | @Override |
| 130 | 132 | public int compare(GpsEntity g1, GpsEntity g2) { |
| ... | ... | @@ -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 | 138 | List<GpsEntity> list; |
| 137 | 139 | CountDownLatch count; |
| 138 | 140 | |
| 139 | - RecoveryThread(List<GpsEntity> list, CountDownLatch count){ | |
| 141 | + RecoveryThread(List<GpsEntity> list, CountDownLatch count) { | |
| 140 | 142 | this.list = list; |
| 141 | 143 | this.count = count; |
| 142 | 144 | } |
| 145 | + | |
| 143 | 146 | @Override |
| 144 | 147 | public void run() { |
| 145 | 148 | try { |
| 146 | 149 | //循环gps恢复数据 |
| 147 | 150 | CircleQueue<GpsEntity> prevs; |
| 148 | 151 | |
| 149 | - for(GpsEntity gps : list){ | |
| 152 | + for (GpsEntity gps : list) { | |
| 153 | + | |
| 150 | 154 | prevs = GeoCacheData.getGps(gps.getNbbm()); |
| 151 | 155 | //掉线处理 |
| 152 | 156 | offlineSignalHandle.handle(gps, prevs); |
| 153 | 157 | //状态处理 |
| 154 | - if(!correctSignalHandle.handle(gps, prevs)) | |
| 158 | + if (!correctSignalHandle.handle(gps, prevs)) | |
| 155 | 159 | continue; |
| 156 | 160 | //场,站内外判断 |
| 157 | 161 | stationInsideHandle.handle(gps, prevs); |
| ... | ... | @@ -160,11 +164,12 @@ public class GpsDataRecovery implements ApplicationContextAware{ |
| 160 | 164 | //进出站动作处理 |
| 161 | 165 | inOutStationSignalHandle.handle(gps, prevs); |
| 162 | 166 | GeoCacheData.putGps(gps); |
| 167 | + | |
| 168 | + //Thread.sleep(50); | |
| 163 | 169 | } |
| 164 | - }catch (Exception e){ | |
| 170 | + } catch (Exception e) { | |
| 165 | 171 | logger.error("", e); |
| 166 | - } | |
| 167 | - finally { | |
| 172 | + } finally { | |
| 168 | 173 | count.countDown(); |
| 169 | 174 | } |
| 170 | 175 | } | ... | ... |
src/main/java/com/bsth/data/pilot80/PilotReport.java
| ... | ... | @@ -84,6 +84,8 @@ public class PilotReport { |
| 84 | 84 | |
| 85 | 85 | //下发调度指令 |
| 86 | 86 | directiveService.send60Dispatch(outSch, dayOfSchedule.doneSum(nbbm), "请出@系统"); |
| 87 | + //下发线路切换指令 | |
| 88 | + directiveService.lineChange(outSch.getClZbh(), outSch.getXlBm(), "请出@系统"); | |
| 87 | 89 | /* d80.setRemarks("计划出场时间:" + outSch.getDfsj()); |
| 88 | 90 | //当前GPS位置 |
| 89 | 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 | 29 | import org.slf4j.LoggerFactory; |
| 30 | 30 | import org.springframework.beans.factory.annotation.Autowired; |
| 31 | 31 | import org.springframework.boot.CommandLineRunner; |
| 32 | +import org.springframework.core.annotation.Order; | |
| 32 | 33 | import org.springframework.stereotype.Component; |
| 33 | 34 | |
| 34 | 35 | import java.text.ParseException; |
| ... | ... | @@ -43,6 +44,7 @@ import java.util.concurrent.TimeUnit; |
| 43 | 44 | * @date 2016年8月15日 上午10:16:12 |
| 44 | 45 | */ |
| 45 | 46 | @Component |
| 47 | +@Order(value = 3) | |
| 46 | 48 | public class DayOfSchedule implements CommandLineRunner { |
| 47 | 49 | |
| 48 | 50 | Logger logger = LoggerFactory.getLogger(this.getClass()); |
| ... | ... | @@ -83,6 +85,9 @@ public class DayOfSchedule implements CommandLineRunner { |
| 83 | 85 | @Autowired |
| 84 | 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 | 122 | LineConfigData lineConfigs; |
| 118 | 123 | |
| 119 | 124 | @Autowired |
| 120 | - BasicData.BasicDataLoader dataLoader; | |
| 121 | - | |
| 122 | - @Autowired | |
| 123 | 125 | GpsDataRecovery gpsDataRecovery; |
| 124 | 126 | |
| 125 | 127 | private static DateTimeFormatter fmtyyyyMMdd = DateTimeFormat.forPattern("yyyy-MM-dd"), fmtHHmm = DateTimeFormat.forPattern("HH:mm"); |
| 126 | 128 | |
| 127 | 129 | @Override |
| 128 | 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 | 138 | // Application.mainServices.scheduleWithFixedDelay(schedulePstThread, 60, 60, TimeUnit.SECONDS); |
| 138 | 139 | //首班出场指令补发器 |
| 139 | 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 | 144 | //每天凌晨2点20提交数据到运管处 |
| 144 | 145 | long diff = (DateUtils.getTimestamp() + 1000 * 60 * 140) - System.currentTimeMillis(); |
| ... | ... | @@ -224,15 +225,8 @@ public class DayOfSchedule implements CommandLineRunner { |
| 224 | 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 | 230 | } catch (Exception e) { |
| 237 | 231 | logger.error("", e); |
| 238 | 232 | return -1; |
| ... | ... | @@ -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 | 537 | * @param sch |
| ... | ... | @@ -527,6 +556,18 @@ public class DayOfSchedule implements CommandLineRunner { |
| 527 | 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 | 571 | public void put(ScheduleRealInfo sch) { |
| 531 | 572 | schAttrCalculator |
| 532 | 573 | .calcRealDate(sch) | ... | ... |
src/main/java/com/bsth/data/schedule/SchAttrCalculator.java
| ... | ... | @@ -62,13 +62,13 @@ public class SchAttrCalculator { |
| 62 | 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 | 66 | sch.getFcsjActual().compareTo(conf.getStartOpt()) < 0){ |
| 67 | 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 | 72 | sch.getZdsjActual().compareTo(conf.getStartOpt()) < 0){ |
| 73 | 73 | sch.setZdsjActualAll(fmtyyyyMMddHHmm.parseMillis(sch.getScheduleDateStr()+sch.getZdsjActual()) + DAY_TIME); |
| 74 | 74 | } |
| ... | ... | @@ -162,34 +162,6 @@ public class SchAttrCalculator { |
| 162 | 162 | |
| 163 | 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 | 166 | public SchAttrCalculator calcFcsjTime(ScheduleRealInfo sch) throws ParseException { |
| 195 | 167 | sch.setFcsjT(fmtyyyyMMddHHmm.parseMillis(sch.getRealExecDate() + sch.getFcsj())); | ... | ... |
src/main/java/com/bsth/entity/CarPark.java
| 1 | 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 | 22 | |
| 26 | 23 | @Entity |
| 27 | 24 | @Table(name = "bsth_c_car_park") |
| 25 | +@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"}) | |
| 28 | 26 | public class CarPark { |
| 29 | 27 | |
| 30 | 28 | @Id | ... | ... |
src/main/java/com/bsth/entity/Cars.java
| ... | ... | @@ -23,7 +23,7 @@ import java.util.Date; |
| 23 | 23 | |
| 24 | 24 | @Entity |
| 25 | 25 | @Table(name = "bsth_c_cars") |
| 26 | -@JsonIgnoreProperties(value={"hibernateLazyInitializer","handlers","fieldHandler"}) | |
| 26 | +@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"}) | |
| 27 | 27 | public class Cars extends BEntity implements Serializable { |
| 28 | 28 | |
| 29 | 29 | /** 主键Id */ | ... | ... |
src/main/java/com/bsth/entity/Line.java
| ... | ... | @@ -24,7 +24,7 @@ import java.util.Date; |
| 24 | 24 | |
| 25 | 25 | @Entity |
| 26 | 26 | @Table(name = "bsth_c_line") |
| 27 | -@JsonIgnoreProperties(value={"hibernateLazyInitializer","handlers","fieldHandler"}) | |
| 27 | +@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"}) | |
| 28 | 28 | public class Line implements Serializable { |
| 29 | 29 | |
| 30 | 30 | @Id | ... | ... |
src/main/java/com/bsth/entity/Personnel.java
| ... | ... | @@ -21,7 +21,7 @@ import javax.persistence.*; |
| 21 | 21 | |
| 22 | 22 | @Entity |
| 23 | 23 | @Table(name = "bsth_c_personnel") |
| 24 | -@JsonIgnoreProperties(value={"hibernateLazyInitializer","handlers","fieldHandler"}) | |
| 24 | +@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"}) | |
| 25 | 25 | public class Personnel extends BEntity { |
| 26 | 26 | |
| 27 | 27 | /** 主键Id */ | ... | ... |
src/main/java/com/bsth/entity/Station.java
| 1 | 1 | package com.bsth.entity; |
| 2 | 2 | |
| 3 | -import java.util.Date; | |
| 3 | +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; | |
| 4 | 4 | |
| 5 | 5 | import javax.persistence.Column; |
| 6 | 6 | import javax.persistence.Entity; |
| 7 | -import javax.persistence.GeneratedValue; | |
| 8 | -import javax.persistence.GenerationType; | |
| 9 | 7 | import javax.persistence.Id; |
| 10 | 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 | 25 | |
| 27 | 26 | @Entity |
| 28 | 27 | @Table(name = "bsth_c_station") |
| 28 | +@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"}) | |
| 29 | 29 | public class Station { |
| 30 | 30 | |
| 31 | 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 | 53 | /** 调度指令模板 */ |
| 54 | 54 | private String schDirectiveTemp; |
| 55 | 55 | |
| 56 | + /** 识别区间调头 */ | |
| 57 | + private boolean readReverse; | |
| 58 | + | |
| 56 | 59 | @OneToMany(cascade = CascadeType.ALL) |
| 57 | 60 | private Set<D80ReplyTemp> d80Temps = new HashSet<>(); |
| 58 | 61 | |
| ... | ... | @@ -140,4 +143,12 @@ public class LineConfig { |
| 140 | 143 | public void setD80Temps(Set<D80ReplyTemp> d80Temps) { |
| 141 | 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 | 94 | * 班次类型 TODO:正常班次、出场、进场、加油、区间班次、放空班次、放大站班次、两点间空驶 |
| 95 | 95 | */ |
| 96 | 96 | private String bcType; |
| 97 | - | |
| 98 | - /** 出站即出场 , 关联的进出场班次 */ | |
| 99 | - @JsonIgnore | |
| 100 | - @Transient | |
| 101 | - private ScheduleRealInfo twinsSch; | |
| 102 | 97 | |
| 103 | 98 | /** 创建人 */ |
| 104 | 99 | @JsonIgnore |
| ... | ... | @@ -258,21 +253,6 @@ public class ScheduleRealInfo { |
| 258 | 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 | 258 | @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) |
| ... | ... | @@ -804,13 +784,13 @@ public class ScheduleRealInfo { |
| 804 | 784 | this.opDirectiveState = opDirectiveState; |
| 805 | 785 | } |
| 806 | 786 | |
| 807 | - public ScheduleRealInfo getTwinsSch() { | |
| 787 | +/* public ScheduleRealInfo getTwinsSch() { | |
| 808 | 788 | return twinsSch; |
| 809 | 789 | } |
| 810 | 790 | |
| 811 | 791 | public void setTwinsSch(ScheduleRealInfo twinsSch) { |
| 812 | 792 | this.twinsSch = twinsSch; |
| 813 | - } | |
| 793 | + }*/ | |
| 814 | 794 | |
| 815 | 795 | public boolean isLate() { |
| 816 | 796 | return late; | ... | ... |
src/main/java/com/bsth/entity/schedule/CarConfigInfo.java
| ... | ... | @@ -19,7 +19,7 @@ import java.util.Date; |
| 19 | 19 | @NamedAttributeNode("cl") |
| 20 | 20 | }) |
| 21 | 21 | }) |
| 22 | -@JsonIgnoreProperties(value={"hibernateLazyInitializer","handlers","fieldHandler"}) | |
| 22 | +@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"}) | |
| 23 | 23 | public class CarConfigInfo extends BEntity implements Serializable { |
| 24 | 24 | |
| 25 | 25 | /** 主健Id */ | ... | ... |
src/main/java/com/bsth/entity/schedule/EmployeeConfigInfo.java
| ... | ... | @@ -22,7 +22,7 @@ import java.io.Serializable; |
| 22 | 22 | @NamedAttributeNode("xl") |
| 23 | 23 | }) |
| 24 | 24 | }) |
| 25 | -@JsonIgnoreProperties(value={"hibernateLazyInitializer","handlers","fieldHandler"}) | |
| 25 | +@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"}) | |
| 26 | 26 | public class EmployeeConfigInfo extends BEntity implements Serializable { |
| 27 | 27 | |
| 28 | 28 | /** 主键Id */ | ... | ... |
src/main/java/com/bsth/entity/schedule/GuideboardInfo.java
| ... | ... | @@ -15,7 +15,7 @@ import javax.persistence.*; |
| 15 | 15 | @NamedAttributeNode("xl") |
| 16 | 16 | }) |
| 17 | 17 | }) |
| 18 | -@JsonIgnoreProperties(value={"hibernateLazyInitializer","handlers","fieldHandler"}) | |
| 18 | +@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"}) | |
| 19 | 19 | public class GuideboardInfo extends BEntity { |
| 20 | 20 | |
| 21 | 21 | /** 主键Id */ | ... | ... |
src/main/java/com/bsth/entity/schedule/TTInfo.java
| 1 | 1 | package com.bsth.entity.schedule; |
| 2 | 2 | |
| 3 | 3 | import com.bsth.entity.Line; |
| 4 | +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; | |
| 4 | 5 | |
| 5 | 6 | import javax.persistence.*; |
| 6 | 7 | import java.util.Date; |
| ... | ... | @@ -17,6 +18,7 @@ import java.util.Date; |
| 17 | 18 | @NamedAttributeNode("updateBy") |
| 18 | 19 | }) |
| 19 | 20 | }) |
| 21 | +@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"}) | |
| 20 | 22 | public class TTInfo extends BEntity { |
| 21 | 23 | |
| 22 | 24 | /** 主键Id */ | ... | ... |
src/main/java/com/bsth/entity/schedule/TTInfoDetail.java
| ... | ... | @@ -3,6 +3,7 @@ package com.bsth.entity.schedule; |
| 3 | 3 | import com.bsth.entity.CarPark; |
| 4 | 4 | import com.bsth.entity.Line; |
| 5 | 5 | import com.bsth.entity.Station; |
| 6 | +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; | |
| 6 | 7 | |
| 7 | 8 | import javax.persistence.*; |
| 8 | 9 | |
| ... | ... | @@ -21,6 +22,7 @@ import javax.persistence.*; |
| 21 | 22 | @NamedAttributeNode("tcc") |
| 22 | 23 | }) |
| 23 | 24 | }) |
| 25 | +@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"}) | |
| 24 | 26 | public class TTInfoDetail extends BEntity { |
| 25 | 27 | |
| 26 | 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 | 9 | |
| 10 | 10 | @Entity |
| 11 | 11 | @Table(name = "bsth_c_sys_user") |
| 12 | -@JsonIgnoreProperties(value={"hibernateLazyInitializer","handlers","fieldHandler"}) | |
| 12 | +//@JsonIgnoreProperties(value={"hibernateLazyInitializer","handlers","fieldHandler"}) | |
| 13 | +@JsonIgnoreProperties(ignoreUnknown = true) | |
| 13 | 14 | public class SysUser { |
| 14 | 15 | |
| 15 | 16 | @Id | ... | ... |
src/main/java/com/bsth/repository/realcontrol/ScheduleRealInfoRepository.java
| ... | ... | @@ -32,7 +32,7 @@ public interface ScheduleRealInfoRepository extends BaseRepository<ScheduleRealI |
| 32 | 32 | |
| 33 | 33 | //把sum(addMileage) 替换为0 数据表去掉了 add_mileage 字段 |
| 34 | 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 | 36 | + " s.xlBm = ?1 and DATE_FORMAT(s.scheduleDate,'%Y-%m-%d') = ?2 group by clZbh,jGh,jName") |
| 37 | 37 | List<Map<String, Object>> dailyInfo(String line,String date); |
| 38 | 38 | |
| ... | ... | @@ -71,7 +71,7 @@ public interface ScheduleRealInfoRepository extends BaseRepository<ScheduleRealI |
| 71 | 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 | 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 | 75 | List<Object[]> account(String line,String date,String code); |
| 76 | 76 | |
| 77 | 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<TTInfoDetail, Lon |
| 34 | 34 | @Query("select cc from TTInfoDetail cc where cc.id=?1") |
| 35 | 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 | 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 | 43 | Long findMaxFcno(Integer xlid, Long ttinfoid); |
| ... | ... | @@ -44,6 +47,6 @@ public interface TTInfoDetailRepository extends BaseRepository<TTInfoDetail, Lon |
| 44 | 47 | |
| 45 | 48 | @Modifying |
| 46 | 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 | 2 | |
| 3 | 3 | import java.util.List; |
| 4 | 4 | |
| 5 | +import com.bsth.entity.mcy_forms.Daily; | |
| 5 | 6 | import com.bsth.entity.mcy_forms.Linepasswengerflow; |
| 6 | 7 | import com.bsth.entity.mcy_forms.Operationservice; |
| 7 | 8 | import com.bsth.entity.mcy_forms.Shifday; |
| ... | ... | @@ -28,6 +29,6 @@ public interface ExportService { |
| 28 | 29 | public void operationservice(String startDate, String endDate, String lpName, |
| 29 | 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 | 5 | |
| 6 | 6 | import com.bsth.entity.mcy_forms.Allline; |
| 7 | 7 | import com.bsth.entity.mcy_forms.Changetochange; |
| 8 | +import com.bsth.entity.mcy_forms.Daily; | |
| 8 | 9 | import com.bsth.entity.mcy_forms.Executionrate; |
| 9 | 10 | import com.bsth.entity.mcy_forms.Linepasswengerflow; |
| 10 | 11 | import com.bsth.entity.mcy_forms.Operationservice; |
| ... | ... | @@ -39,4 +40,6 @@ public interface FormsService { |
| 39 | 40 | public List<Executionrate> executionrate(Map<String, Object> map); |
| 40 | 41 | |
| 41 | 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 | 25 | import com.bsth.entity.mcy_forms.Waybillday; |
| 26 | 26 | import com.bsth.entity.mcy_forms.Allline; |
| 27 | 27 | import com.bsth.entity.mcy_forms.Changetochange; |
| 28 | +import com.bsth.entity.mcy_forms.Daily; | |
| 28 | 29 | import com.bsth.entity.mcy_forms.Executionrate; |
| 29 | 30 | import com.bsth.service.forms.CommonService; |
| 30 | 31 | import com.bsth.service.forms.FormsService; |
| ... | ... | @@ -615,8 +616,8 @@ public class FormsServiceImpl implements FormsService { |
| 615 | 616 | tu.setRq(rq); |
| 616 | 617 | tu.setGs(arg0.getString("gs_name").toString()); |
| 617 | 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 | 621 | tu.setXlmc(arg0.getString("sxl")); |
| 621 | 622 | tu.setCchjh(arg0.getString("jcl").toString()); |
| 622 | 623 | tu.setCchsj(arg0.getString("scl").toString()); |
| ... | ... | @@ -708,4 +709,46 @@ public class FormsServiceImpl implements FormsService { |
| 708 | 709 | |
| 709 | 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 | 58 | |
| 59 | 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 | 62 | * System.out.println("暂时不支持跨天查询..."); return null; } |
| 63 | 63 | */ |
| 64 | 64 | |
| ... | ... | @@ -195,7 +195,7 @@ public class GpsServiceImpl implements GpsService { |
| 195 | 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 | 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 | 201 | + inv + ") and ts > ? and ts < ?"; |
| ... | ... | @@ -239,11 +239,12 @@ public class GpsServiceImpl implements GpsService { |
| 239 | 239 | inOutStop = rs.getInt("INOUT_STOP"); |
| 240 | 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 | 248 | map.put("nbbm", BasicData.deviceId2NbbmMap.get(rs.getString("DEVICE_ID"))); |
| 248 | 249 | map.put("state", 0); |
| 249 | 250 | // 上下行 |
| ... | ... | @@ -272,11 +273,17 @@ public class GpsServiceImpl implements GpsService { |
| 272 | 273 | |
| 273 | 274 | rs = ps.executeQuery(); |
| 274 | 275 | ArrivalEntity arr; |
| 275 | - int inOut; | |
| 276 | + int inOut, updown; | |
| 277 | + String prefix, stationName, lineId; | |
| 276 | 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 | 288 | // 设备号_时间戳_进出状态 为key |
| 282 | 289 | // 反转进出状态 |
| ... | ... | @@ -382,7 +389,7 @@ public class GpsServiceImpl implements GpsService { |
| 382 | 389 | |
| 383 | 390 | gpsRealData.remove(device); |
| 384 | 391 | rs.put("status", ResponseCode.SUCCESS); |
| 385 | - }catch (Exception e){ | |
| 392 | + } catch (Exception e) { | |
| 386 | 393 | rs.put("status", ResponseCode.ERROR); |
| 387 | 394 | } |
| 388 | 395 | return rs; | ... | ... |
src/main/java/com/bsth/service/impl/TrafficManageServiceImpl.java
| ... | ... | @@ -14,7 +14,6 @@ import com.bsth.repository.schedule.*; |
| 14 | 14 | import com.bsth.service.TrafficManageService; |
| 15 | 15 | import com.bsth.util.TimeUtils; |
| 16 | 16 | import com.bsth.util.db.DBUtils_MS; |
| 17 | -import com.bsth.webService.trafficManage.geotool.services.Internal; | |
| 18 | 17 | import com.bsth.webService.trafficManage.geotool.services.InternalPortType; |
| 19 | 18 | import com.bsth.webService.trafficManage.org.tempuri.WebServiceLocator; |
| 20 | 19 | import com.bsth.webService.trafficManage.org.tempuri.WebServiceSoap; |
| ... | ... | @@ -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 | 108 | private WebServiceSoap ssop ; |
| 110 | 109 | { |
| 111 | 110 | try { | ... | ... |
src/main/java/com/bsth/service/realcontrol/RealMapService.java
src/main/java/com/bsth/service/realcontrol/ScheduleRealInfoService.java
| ... | ... | @@ -65,7 +65,7 @@ public interface ScheduleRealInfoService extends BaseService<ScheduleRealInfo, L |
| 65 | 65 | |
| 66 | 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 | 70 | Map<Integer, Integer> trustStatus(String lineCodes); |
| 71 | 71 | |
| ... | ... | @@ -93,9 +93,9 @@ public interface ScheduleRealInfoService extends BaseService<ScheduleRealInfo, L |
| 93 | 93 | |
| 94 | 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 | 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 | 17 | import java.util.Map; |
| 18 | 18 | |
| 19 | 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 | 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 | 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 | 126 | List<Map<String, Object>> stationList = jdbcTemplate.queryForList(sql, lineCode); |
| 127 | 127 | rs.put("station", stationList); |
| 128 | 128 | |
| ... | ... | @@ -134,6 +134,31 @@ public class RealMapServiceImpl implements RealMapService { |
| 134 | 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 | 163 | * wgs 坐标数组转 百度 |
| 139 | 164 | * | ... | ... |
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
| ... | ... | @@ -46,6 +46,7 @@ import org.slf4j.LoggerFactory; |
| 46 | 46 | import org.springframework.beans.factory.annotation.Autowired; |
| 47 | 47 | import org.springframework.stereotype.Service; |
| 48 | 48 | |
| 49 | +import java.net.URLEncoder; | |
| 49 | 50 | import java.text.DecimalFormat; |
| 50 | 51 | import java.text.ParseException; |
| 51 | 52 | import java.text.SimpleDateFormat; |
| ... | ... | @@ -286,6 +287,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf |
| 286 | 287 | t.setCreateBy(user); |
| 287 | 288 | t.setSflj(true); |
| 288 | 289 | t.setLate(false); |
| 290 | + t.setDfsj(t.getFcsj()); | |
| 289 | 291 | t.setZdsjT(sdfyyyyMMddHHmm.parse(schDate + t.getZdsj()).getTime()); |
| 290 | 292 | |
| 291 | 293 | |
| ... | ... | @@ -293,8 +295,9 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf |
| 293 | 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 | 303 | schAttrCalculator.calcRealDate(t).calcAllTimeByFcsj(t); |
| ... | ... | @@ -617,7 +620,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf |
| 617 | 620 | } |
| 618 | 621 | |
| 619 | 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 | 624 | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| 622 | 625 | long d= 0; |
| 623 | 626 | long t=0; |
| ... | ... | @@ -639,6 +642,36 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf |
| 639 | 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 | 675 | return list; |
| 643 | 676 | } |
| 644 | 677 | |
| ... | ... | @@ -1218,13 +1251,15 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf |
| 1218 | 1251 | |
| 1219 | 1252 | @Override |
| 1220 | 1253 | public List<Map<String, Object>> account(String line, String date, |
| 1221 | - String code,String xlName) { | |
| 1254 | + String code,String xlName, String type) { | |
| 1222 | 1255 | List<Object[]> lsitObj = scheduleRealInfoRepository.account(line,date,code); |
| 1223 | 1256 | List<Map<String,Object>> listMap = new ArrayList<Map<String,Object>>(); |
| 1224 | 1257 | Map<String,Object> map; |
| 1258 | + int i = 1; | |
| 1225 | 1259 | for(Object[] obj : lsitObj){ |
| 1226 | 1260 | if(obj != null){ |
| 1227 | 1261 | map = new HashMap<String,Object>(); |
| 1262 | + map.put("num", i++); | |
| 1228 | 1263 | map.put("xlName", xlName); |
| 1229 | 1264 | map.put("clZbh", obj[3]); |
| 1230 | 1265 | map.put("company", obj[0]); |
| ... | ... | @@ -1233,13 +1268,65 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf |
| 1233 | 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 | 1303 | return listMap; |
| 1237 | 1304 | } |
| 1238 | 1305 | |
| 1239 | 1306 | @Override |
| 1240 | 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 | 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 | 1330 | return list; |
| 1244 | 1331 | } |
| 1245 | 1332 | ... | ... |
src/main/java/com/bsth/service/schedule/BService.java
| 1 | 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 | 5 | import org.springframework.data.domain.Page; |
| 4 | 6 | import org.springframework.data.domain.Pageable; |
| 5 | 7 | |
| ... | ... | @@ -10,8 +12,8 @@ import java.util.Map; |
| 10 | 12 | /** |
| 11 | 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 | 17 | // Create,Update操作 |
| 16 | 18 | T save(T t); |
| 17 | 19 | <S extends T> List<S> bulkSave(List<S> entities); // 批量保存(TODO:待测试) |
| ... | ... | @@ -22,4 +24,5 @@ public interface BService<T, ID extends Serializable> { |
| 22 | 24 | List<T> list(Map<String, Object> param); |
| 23 | 25 | // Delete操作 |
| 24 | 26 | void delete(ID id) throws ScheduleException; |
| 27 | + | |
| 25 | 28 | } | ... | ... |
src/main/java/com/bsth/service/schedule/CarConfigInfoService.java
src/main/java/com/bsth/service/schedule/CarDeviceService.java
src/main/java/com/bsth/service/schedule/CarsService.java
src/main/java/com/bsth/service/schedule/EmployeeConfigInfoService.java
src/main/java/com/bsth/service/schedule/EmployeeService.java
src/main/java/com/bsth/service/schedule/GuideboardInfoService.java
src/main/java/com/bsth/service/schedule/PeopleCarPlanServiceImpl.java
| 1 | 1 | package com.bsth.service.schedule; |
| 2 | 2 | |
| 3 | 3 | import java.math.BigDecimal; |
| 4 | +import java.net.URLEncoder; | |
| 4 | 5 | import java.sql.ResultSet; |
| 5 | 6 | import java.sql.SQLException; |
| 6 | 7 | import java.text.DecimalFormat; |
| ... | ... | @@ -463,7 +464,7 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService { |
| 463 | 464 | listI.add(resList.iterator()); |
| 464 | 465 | String path = this.getClass().getResource("/").getPath()+"static\\pages\\forms\\"; |
| 465 | 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 | 468 | } catch (Exception e) { |
| 468 | 469 | // TODO: handle exception |
| 469 | 470 | e.printStackTrace(); |
| ... | ... | @@ -937,7 +938,7 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService { |
| 937 | 938 | tempMap.put("sjfcFirst0", "/"); |
| 938 | 939 | tempMap.put("delayFirst0", "/"); |
| 939 | 940 | } |
| 940 | - if(moban0.getZdsjActual() != null){ | |
| 941 | + if(moban0.getFcsjActual() != null){ | |
| 941 | 942 | String[] split = moban0.getFcsjActual().split(":"); |
| 942 | 943 | long min = Integer.valueOf(split[0])*60 + Integer.valueOf(split[1]); |
| 943 | 944 | long delay = moban0.getFcsjT() - min; |
| ... | ... | @@ -963,7 +964,7 @@ public class PeopleCarPlanServiceImpl implements PeopleCarPlanService { |
| 963 | 964 | tempMap.put("sjfcFirst1", "/"); |
| 964 | 965 | tempMap.put("delayFirst1", "/"); |
| 965 | 966 | } |
| 966 | - if(moban1.getZdsjActual() != null){ | |
| 967 | + if(moban1.getFcsjActual() != null){ | |
| 967 | 968 | String[] split = moban1.getFcsjActual().split(":"); |
| 968 | 969 | long min = Integer.valueOf(split[0])*60 + Integer.valueOf(split[1]); |
| 969 | 970 | long delay = moban1.getFcsjT() - min; | ... | ... |
src/main/java/com/bsth/service/schedule/TTInfoDetailService.java
| 1 | 1 | package com.bsth.service.schedule; |
| 2 | 2 | |
| 3 | 3 | import com.bsth.entity.schedule.TTInfoDetail; |
| 4 | -import com.bsth.service.BaseService; | |
| 4 | +import com.bsth.service.schedule.exception.ScheduleException; | |
| 5 | 5 | import org.apache.commons.lang3.StringUtils; |
| 6 | -import org.springframework.web.multipart.MultipartFile; | |
| 7 | 6 | |
| 8 | -import java.io.File; | |
| 9 | 7 | import java.util.ArrayList; |
| 10 | 8 | import java.util.List; |
| 11 | 9 | |
| 12 | 10 | /** |
| 13 | 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<TTInfoDetail, Long> { |
| 34 | 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 | 39 | this.ttdid = StringUtils.isEmpty(ttdid_str) ? null : Long.valueOf(ttdid_str); |
| 39 | 40 | this.bc_type = bc_type; |
| 40 | 41 | this.fcsj = fcsj; |
| ... | ... | @@ -98,6 +99,9 @@ public interface TTInfoDetailService extends BaseService<TTInfoDetail, Long> { |
| 98 | 99 | /** 内容数据 */ |
| 99 | 100 | private List<List<FcInfo>> contents = new ArrayList<>(); |
| 100 | 101 | |
| 102 | + /** 营运描述 */ | |
| 103 | + private String yy_desc; | |
| 104 | + | |
| 101 | 105 | public List<String> getHeader() { |
| 102 | 106 | return header; |
| 103 | 107 | } |
| ... | ... | @@ -113,6 +117,14 @@ public interface TTInfoDetailService extends BaseService<TTInfoDetail, Long> { |
| 113 | 117 | public void setContents(List<List<FcInfo>> contents) { |
| 114 | 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<TTInfoDetail, Long> { |
| 121 | 133 | * @param ttid 时刻表id |
| 122 | 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
src/main/java/com/bsth/service/schedule/ScheduleException.java renamed to src/main/java/com/bsth/service/schedule/exception/ScheduleException.java
src/main/java/com/bsth/service/schedule/impl/BServiceImpl.java
| ... | ... | @@ -3,16 +3,19 @@ package com.bsth.service.schedule.impl; |
| 3 | 3 | import com.bsth.entity.search.CustomerSpecs; |
| 4 | 4 | import com.bsth.repository.BaseRepository; |
| 5 | 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 | 8 | import org.slf4j.Logger; |
| 8 | 9 | import org.slf4j.LoggerFactory; |
| 9 | 10 | import org.springframework.beans.factory.annotation.Autowired; |
| 11 | +import org.springframework.beans.factory.annotation.Qualifier; | |
| 10 | 12 | import org.springframework.beans.factory.annotation.Value; |
| 11 | 13 | import org.springframework.data.domain.Page; |
| 12 | 14 | import org.springframework.data.domain.Pageable; |
| 13 | 15 | import org.springframework.data.jpa.domain.Specification; |
| 14 | 16 | |
| 15 | 17 | import javax.persistence.EntityManager; |
| 18 | +import java.io.File; | |
| 16 | 19 | import java.io.Serializable; |
| 17 | 20 | import java.util.ArrayList; |
| 18 | 21 | import java.util.List; |
| ... | ... | @@ -29,6 +32,10 @@ public class BServiceImpl<T, ID extends Serializable> implements BService<T, ID> |
| 29 | 32 | @Value("${hibernate.jdbc.batch_size}") |
| 30 | 33 | private int batchSize; |
| 31 | 34 | |
| 35 | + @Autowired | |
| 36 | + @Qualifier(value = "dataToolsServiceImpl") | |
| 37 | + private DataToolsService dataToolsService; | |
| 38 | + | |
| 32 | 39 | /** 日志记录器 */ |
| 33 | 40 | protected Logger logger = LoggerFactory.getLogger(this.getClass()); |
| 34 | 41 | |
| ... | ... | @@ -108,4 +115,19 @@ public class BServiceImpl<T, ID extends Serializable> implements BService<T, ID> |
| 108 | 115 | |
| 109 | 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 | 3 | import com.bsth.entity.schedule.CarConfigInfo; |
| 4 | 4 | import com.bsth.entity.schedule.rule.ScheduleRule1Flat; |
| 5 | 5 | import com.bsth.service.schedule.CarConfigInfoService; |
| 6 | -import com.bsth.service.schedule.ScheduleException; | |
| 6 | +import com.bsth.service.schedule.exception.ScheduleException; | |
| 7 | 7 | import com.bsth.service.schedule.ScheduleRule1FlatService; |
| 8 | 8 | import org.springframework.beans.factory.annotation.Autowired; |
| 9 | 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 | 4 | import com.bsth.entity.Cars; |
| 5 | 5 | import com.bsth.service.CarsService; |
| 6 | 6 | import com.bsth.service.schedule.CarDeviceService; |
| 7 | -import com.bsth.service.schedule.ScheduleException; | |
| 7 | +import com.bsth.service.schedule.exception.ScheduleException; | |
| 8 | 8 | import org.springframework.beans.factory.annotation.Autowired; |
| 9 | 9 | import org.springframework.stereotype.Service; |
| 10 | 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 | 2 | |
| 3 | 3 | import com.bsth.entity.Cars; |
| 4 | 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 | 11 | import org.springframework.stereotype.Service; |
| 7 | 12 | import org.springframework.transaction.annotation.Transactional; |
| 8 | 13 | import org.springframework.util.CollectionUtils; |
| 9 | 14 | |
| 15 | +import java.io.File; | |
| 16 | +import java.io.PrintWriter; | |
| 17 | +import java.io.StringWriter; | |
| 10 | 18 | import java.util.HashMap; |
| 11 | 19 | import java.util.Map; |
| 12 | 20 | |
| 13 | 21 | /** |
| 14 | 22 | * Created by xu on 16/12/8. |
| 15 | 23 | */ |
| 24 | +@EnableConfigurationProperties(DataToolsProperties.class) | |
| 16 | 25 | @Service(value = "carsServiceImpl_sc") |
| 17 | 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 | 91 | @Override |
| 20 | 92 | @Transactional | ... | ... |
src/main/java/com/bsth/service/schedule/impl/EmployeeConfigInfoServiceImpl.java
| ... | ... | @@ -3,7 +3,7 @@ package com.bsth.service.schedule.impl; |
| 3 | 3 | import com.bsth.entity.schedule.EmployeeConfigInfo; |
| 4 | 4 | import com.bsth.entity.schedule.rule.ScheduleRule1Flat; |
| 5 | 5 | import com.bsth.service.schedule.EmployeeConfigInfoService; |
| 6 | -import com.bsth.service.schedule.ScheduleException; | |
| 6 | +import com.bsth.service.schedule.exception.ScheduleException; | |
| 7 | 7 | import com.bsth.service.schedule.ScheduleRule1FlatService; |
| 8 | 8 | import org.springframework.beans.factory.annotation.Autowired; |
| 9 | 9 | import org.springframework.stereotype.Service; | ... | ... |