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 | 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<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<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
src/main/resources/static/pages/control/line/js/data.js