Commit 604b28c24770aeff878470a9b2575b78c1966486

Authored by 潘钊
1 parent bb31fd8f

加入真实时间

src/main/java/com/bsth/StartCommand.java
... ... @@ -50,6 +50,8 @@ public class StartCommand implements CommandLineRunner{
50 50 @Autowired
51 51 FirstScheduleIssuedThread firstScheduleIssuedThread;
52 52  
  53 + static Long hourTime = 1000 * 60 * 60L;
  54 +
53 55 @Override
54 56 public void run(String... arg0){
55 57  
... ... @@ -64,12 +66,12 @@ public class StartCommand implements CommandLineRunner{
64 66 scheduler.scheduleWithFixedDelay(gpsRefreshThread, 0, 8, TimeUnit.SECONDS);
65 67  
66 68 /**
67   - * 每天 0点 抓取当天实际排班
  69 + * 每天 凌晨 2 点 抓取当天实际排班
68 70 */
69 71 //启动时先run一次
70 72 getSchedulePlanThread.start();
71 73 scheduler.scheduleAtFixedRate(getSchedulePlanThread
72   - , DateUtils.getTimesnight() + 5 - System.currentTimeMillis() / 1000
  74 + , ((DateUtils.getTimesnight2() + hourTime * 2) - System.currentTimeMillis()) / 1000
73 75 , 60 * 60 * 24, TimeUnit.SECONDS);
74 76  
75 77 /**
... ...
src/main/java/com/bsth/entity/realcontrol/ScheduleRealInfo.java
... ... @@ -24,6 +24,9 @@ public class ScheduleRealInfo {
24 24  
25 25 /** 排班计划日期 */
26 26 private Date scheduleDate;
  27 +
  28 + /** 真实执行时间 yyyy-MM-dd */
  29 + private String realExecDate;
27 30  
28 31 /** 线路名称 */
29 32 private String xlName;
... ... @@ -485,7 +488,7 @@ public class ScheduleRealInfo {
485 488 public void setDfsjAll(String dfsj) {
486 489  
487 490 try {
488   - String dfsjFull = sdfyyyyMMdd.format(this.scheduleDate) + " " + dfsj;
  491 + String dfsjFull = this.realExecDate + " " + dfsj;
489 492 this.dfsjT = sdfyyyyMMddHHmm.parse(dfsjFull).getTime();
490 493 this.dfsj = dfsj;
491 494 } catch (ParseException e) {
... ... @@ -504,7 +507,7 @@ public class ScheduleRealInfo {
504 507 * @throws ParseException
505 508 *
506 509 * @Title: syncTime
507   - * @Description: TODO(计算时间戳,待发时间为计发时间)
  510 + * @Description: TODO(根据计发时间,计算待发时间和终点时间)
508 511 * @param 设定文件
509 512 * @return void 返回类型
510 513 * @throws
... ... @@ -513,7 +516,7 @@ public class ScheduleRealInfo {
513 516 try{
514 517 this.setDfsj(this.getFcsj());
515 518 //发车时间戳
516   - this.setFcsjT(sdfyyyyMMddHHmm.parse(sdfyyyyMMdd.format(this.scheduleDate) + " " + this.getFcsj()).getTime());
  519 + this.setFcsjT(sdfyyyyMMddHHmm.parse(this.realExecDate + " " + this.getFcsj()).getTime());
517 520 //待发时间戳
518 521 this.setDfsjT(this.getFcsjT());
519 522  
... ... @@ -582,6 +585,17 @@ public class ScheduleRealInfo {
582 585  
583 586 /**
584 587 *
  588 + * @Title: setFcsjAll
  589 + * @Description: TODO(设置计划发车时间)
  590 + * @throws
  591 + */
  592 + public void setFcsjAll(Long fcsjT){
  593 + this.fcsjT = fcsjT;
  594 + this.fcsj = sdfHHmm.format(new Date(fcsjT));
  595 + }
  596 +
  597 + /**
  598 + *
585 599 * @Title: setFcsjActualAll
586 600 * @Description: TODO(设置实际发车时间)
587 601 * @throws
... ... @@ -639,4 +653,12 @@ public class ScheduleRealInfo {
639 653 public void setSpId(Long spId) {
640 654 this.spId = spId;
641 655 }
  656 +
  657 + public String getRealExecDate() {
  658 + return realExecDate;
  659 + }
  660 +
  661 + public void setRealExecDate(String realExecDate) {
  662 + this.realExecDate = realExecDate;
  663 + }
642 664 }
... ...
src/main/java/com/bsth/service/realcontrol/buffer/ScheduleBuffer.java
1 1 package com.bsth.service.realcontrol.buffer;
2 2  
  3 +import java.text.SimpleDateFormat;
3 4 import java.util.ArrayList;
4 5 import java.util.Collections;
5 6 import java.util.Comparator;
  7 +import java.util.Date;
6 8 import java.util.HashMap;
7 9 import java.util.LinkedList;
8 10 import java.util.List;
... ... @@ -71,6 +73,8 @@ public class ScheduleBuffer {
71 73  
72 74 static ScheduleComparator scheduleComparator = new ScheduleComparator();
73 75  
  76 + static final Long DAY_TIME = 1000 * 60 * 60 * 24L;
  77 +
74 78 static{
75 79 clear();
76 80 }
... ... @@ -86,10 +90,13 @@ public class ScheduleBuffer {
86 90 }
87 91  
88 92 public static int init(List<ScheduleRealInfo> list){
  93 + SimpleDateFormat sdfyyyyMMdd = new SimpleDateFormat("yyyy-MM-dd");
89 94  
90 95 try{
91 96 //计算时间戳
92 97 for(ScheduleRealInfo schedul : list){
  98 + //真实日期默认是排班日期
  99 + schedul.setRealExecDate(sdfyyyyMMdd.format(schedul.getScheduleDate()));
93 100 schedul.syncTime();
94 101 }
95 102  
... ... @@ -98,18 +105,18 @@ public class ScheduleBuffer {
98 105  
99 106 String zbh;
100 107 for(ScheduleRealInfo schedul : list){
  108 +
101 109 schedulListMap.put(schedul.getXlBm(), schedul);
102 110 pkSchedulMap.put(schedul.getId(), schedul);
103 111  
104 112 //初始化车辆和班次列表对照
105 113 zbh = schedul.getClZbh();
106 114 vehSchListMap.put(zbh, schedul);
107   - /*if(!vehLinkedMap.containsKey(zbh))
108   - vehLinkedMap.put(zbh, new LinkedList<ScheduleRealInfo>());
109   -
110   - vehLinkedMap.get(zbh).add(schedul);*/
111 115 }
112 116  
  117 + //计算计划发车真实时间
  118 + calcRealOutTime();
  119 +
113 120 //计算起点应到时间
114 121 Set<String> codes = schedulListMap.keySet();
115 122 for(String code : codes)
... ... @@ -117,6 +124,7 @@ public class ScheduleBuffer {
117 124  
118 125 //计算班次平均间隔
119 126 calcAvgSpace();
  127 +
120 128 }catch(Exception e){
121 129 logger.error("缓存排班数据失败...", e);
122 130 return -1;
... ... @@ -124,6 +132,29 @@ public class ScheduleBuffer {
124 132 return 0;
125 133 }
126 134  
  135 + private static void calcRealOutTime() {
  136 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  137 + Set<String> keys = vehSchListMap.keySet();
  138 +
  139 + List<ScheduleRealInfo> list;
  140 + ScheduleRealInfo schedule;
  141 + for(String key : keys){
  142 + list = vehSchListMap.get(key);
  143 +
  144 + //发车顺序号排序
  145 + Collections.sort(list, scheduleComparator);
  146 + for(int i = 0; i < list.size(); i ++){
  147 + schedule = list.get(i);
  148 + if(i > 0 && schedule.getFcsjT() < list.get(i - 1).getFcsjT()){
  149 + //加一天
  150 + schedule.setFcsjAll(schedule.getFcsjT() + DAY_TIME);
  151 + schedule.setRealExecDate(sdf.format(new Date(schedule.getFcsjT())));
  152 + schedule.syncTime();
  153 + }
  154 + }
  155 + }
  156 + }
  157 +
127 158 //计算平均间隔
128 159 public static void calcAvgSpace(){
129 160 schSpaceMap = new HashMap<>();
... ...
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
... ... @@ -99,7 +99,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
99 99 try {
100 100  
101 101 ScheduleRealInfo schedule = ScheduleBuffer.pkSchedulMap.get(id);
102   - schedule.setDfsjT(sdfMinute.parse(sdfMonth.format(new Date()) + " " + dfsj).getTime());
  102 + schedule.setDfsjT(sdfMinute.parse(schedule.getRealExecDate() + " " + dfsj).getTime());
103 103 schedule.setDfsj(dfsj);
104 104 schedule.addRemarks(remarks + ";");
105 105 schedule.setClZbh(nbbm);
... ... @@ -465,7 +465,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl&lt;ScheduleRealInf
465 465 Map<String, Object> rs = new HashMap<>();
466 466 try {
467 467 ScheduleRealInfo sch = ScheduleBuffer.findOne(id);
468   - String rq = sdfMonth.format(sch.getScheduleDate());
  468 + String rq = sdfMonth.format(sch.getRealExecDate());
469 469  
470 470 sch.setFcsjActualTime(sdfMinute.parse(rq + " " + fcsjActual).getTime());
471 471 sch.setFcsjActual(fcsjActual);
... ...
src/main/java/com/bsth/util/DateUtils.java
... ... @@ -32,6 +32,16 @@ public class DateUtils {
32 32 return (int) (cal.getTimeInMillis() / 1000);
33 33 }
34 34  
  35 + // 获得当天24点时间 毫秒
  36 + public static Long getTimesnight2() {
  37 + Calendar cal = Calendar.getInstance();
  38 + cal.set(Calendar.HOUR_OF_DAY, 24);
  39 + cal.set(Calendar.SECOND, 0);
  40 + cal.set(Calendar.MINUTE, 0);
  41 + cal.set(Calendar.MILLISECOND, 0);
  42 + return cal.getTimeInMillis();
  43 + }
  44 +
35 45 public static Long getTimesnight(Calendar cal) {
36 46 cal.set(Calendar.HOUR_OF_DAY, 24);
37 47 cal.set(Calendar.SECOND, 0);
... ...
src/main/resources/static/pages/control/line/child_pages/child_task.html
... ... @@ -436,13 +436,16 @@ $(function(){
436 436 $('.confirm', schAddPanel).on('click', function(){
437 437 var f = $('form', schAddPanel);
438 438 var param = f.serializeJSON();
439   - /** 页面组装数据 */
440 439 //线路
441 440 param.xlBm = lineSelect.val();
442 441 param.xlName = _data.getLineIds()[param.xlBm];
443 442 //路牌
444 443 param.lpName = lpSelect.val();
445 444 //拆分驾驶员工号和姓名
  445 + if(!param.jGh){
  446 + layer.alert('驾驶员不能为空!', {icon: 2, title: '提交失败'});
  447 + return;
  448 + }
446 449 param.jName = param.jGh.split('/')[1];
447 450 param.jGh = param.jGh.split('/')[0];
448 451  
... ...
src/main/resources/static/pages/control/line/js/alone.js
... ... @@ -148,6 +148,9 @@ var _alone = (function(){
148 148 }
149 149  
150 150 function splitDir(list){
  151 + /*list.sort(function(a, b){
  152 + return a.fcno - b.fcno;
  153 + });*/
151 154 var rs = {up: [], down: []};
152 155 $.each(list, function(){
153 156 if(this.xlDir == upCode)
... ...
src/main/resources/static/pages/control/line/js/data.js
... ... @@ -29,8 +29,7 @@ var _data = (function(){
29 29 var carDeviceIdMapp = {};
30 30  
31 31 var fcsjSort = function(a, b){
32   - //return a.fcsjT - b.fcsjT;
33   - return a.fcno - b.fcno;
  32 + return a.fcsjT - b.fcsjT;
34 33 }
35 34  
36 35 var dataObject = {
... ...