Commit 604b28c24770aeff878470a9b2575b78c1966486
1 parent
bb31fd8f
加入真实时间
Showing
8 changed files
with
84 additions
and
14 deletions
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<ScheduleRealInf | @@ -99,7 +99,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<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<ScheduleRealInf | @@ -465,7 +465,7 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<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 = { |