Commit 604b28c24770aeff878470a9b2575b78c1966486

Authored by 潘钊
1 parent bb31fd8f

加入真实时间

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