Commit 88927f88927233f657467689be1184aba8d2d4ba
1 parent
c04ee95e
时刻表对比与智能调度微调
Showing
15 changed files
with
393 additions
and
33 deletions
src/main/java/com/bsth/controller/zndd/LoggerZnddController.java
| ... | ... | @@ -65,4 +65,25 @@ public class LoggerZnddController extends BaseController<LoggerZndd, Integer> { |
| 65 | 65 | return loggerZnddService.nextSch(id); |
| 66 | 66 | |
| 67 | 67 | } |
| 68 | + | |
| 69 | + /** | |
| 70 | + * schDeepSeep查询班次情况 | |
| 71 | + * @param | |
| 72 | + * @return | |
| 73 | + */ | |
| 74 | + @RequestMapping(value = "schDeepSeep", method = RequestMethod.GET) | |
| 75 | + public Map schDeepSeep(@RequestParam String message){ | |
| 76 | + return loggerZnddService.schDeepSeep(message); | |
| 77 | + } | |
| 78 | + | |
| 79 | + | |
| 80 | + /** | |
| 81 | + * 时刻表 查询前一天的班次和时刻表作对比 | |
| 82 | + * @param | |
| 83 | + * @return | |
| 84 | + */ | |
| 85 | + @RequestMapping(value = "sch_qbc", method = RequestMethod.GET) | |
| 86 | + public List<ScheduleRealInfo> schQbc(@RequestParam String xl){ | |
| 87 | + return loggerZnddService.schQbc(xl); | |
| 88 | + } | |
| 68 | 89 | } | ... | ... |
src/main/java/com/bsth/data/zndd/AutomaticSch.java
| ... | ... | @@ -219,7 +219,7 @@ public class AutomaticSch { |
| 219 | 219 | //rfid 判断 |
| 220 | 220 | List<RfidInfo> list = RfidHttpLoader.load(); |
| 221 | 221 | for (RfidInfo ri : list) { |
| 222 | - if (ri.getRecogTime() != null && ri.getRecogTime().getTime() > System.currentTimeMillis() - 300000) { | |
| 222 | + if (ri.getRecogTime() != null && ri.getRecogTime().getTime() > System.currentTimeMillis() - 300000 && ri.getInoutStation().getTimestamp() > System.currentTimeMillis() - 300000 ) { | |
| 223 | 223 | //最新的rfid是出站状态 |
| 224 | 224 | if (ri.getNbbm().equals(sr.getClZbh())){ |
| 225 | 225 | sfsj = sdfHHmm.format(ri.getInoutStation().getTimestamp()); |
| ... | ... | @@ -450,7 +450,8 @@ public class AutomaticSch { |
| 450 | 450 | List<ScheduleRealInfo> schadd = new ArrayList<>(); |
| 451 | 451 | //每辆车下的班次 |
| 452 | 452 | for (ScheduleRealInfo sch : srList) { |
| 453 | - if (s.getClZbh().equals(sch.getClZbh())) { | |
| 453 | + //筛选掉烂班 | |
| 454 | + if (s.getClZbh().equals(sch.getClZbh()) && sch.getStatus() != -1) { | |
| 454 | 455 | schadd.add(sch); |
| 455 | 456 | } |
| 456 | 457 | } | ... | ... |
src/main/java/com/bsth/data/zndd/ZnddTwoThread.java
src/main/java/com/bsth/service/zndd/LoggerZnddService.java
| ... | ... | @@ -25,4 +25,9 @@ public interface LoggerZnddService extends BaseService<LoggerZndd, Integer> { |
| 25 | 25 | Map<String, Object> schTZSF(String line,String date,String endDate,String changType,String type); |
| 26 | 26 | |
| 27 | 27 | ScheduleRealInfo nextSch(Long id); |
| 28 | + | |
| 29 | + Map schDeepSeep(String message); | |
| 30 | + | |
| 31 | + List<ScheduleRealInfo> schQbc(String xl); | |
| 32 | + | |
| 28 | 33 | } | ... | ... |
src/main/java/com/bsth/service/zndd/impl/LoggerZnddServiceImpl.java
| ... | ... | @@ -3,6 +3,7 @@ package com.bsth.service.zndd.impl; |
| 3 | 3 | import com.alibaba.fastjson.JSON; |
| 4 | 4 | import com.bsth.common.ResponseCode; |
| 5 | 5 | import com.bsth.controller.realcontrol.dto.DfsjChange; |
| 6 | +import com.bsth.data.BasicData; | |
| 6 | 7 | import com.bsth.data.schedule.DayOfSchedule; |
| 7 | 8 | import com.bsth.data.schedule.ScheduleComparator; |
| 8 | 9 | import com.bsth.data.schedule.edit_logs.service.dto.SchEditInfoDto; |
| ... | ... | @@ -18,6 +19,7 @@ import com.bsth.service.realcontrol.ScheduleRealInfoService; |
| 18 | 19 | import com.bsth.service.report.ReportService; |
| 19 | 20 | import com.bsth.service.sys.RealControAuthorityService; |
| 20 | 21 | import com.bsth.service.zndd.LoggerZnddService; |
| 22 | +import com.bsth.util.DateUtils; | |
| 21 | 23 | import com.bsth.util.ReportUtils; |
| 22 | 24 | import org.slf4j.Logger; |
| 23 | 25 | import org.slf4j.LoggerFactory; |
| ... | ... | @@ -343,4 +345,70 @@ public class LoggerZnddServiceImpl extends BaseServiceImpl<LoggerZndd, Integer> |
| 343 | 345 | public ScheduleRealInfo nextSch(Long id){ |
| 344 | 346 | return dayOfSchedule.next(dayOfSchedule.get(id)); |
| 345 | 347 | } |
| 348 | + | |
| 349 | + | |
| 350 | + public Map schDeepSeep(String message){ | |
| 351 | + | |
| 352 | + Map m = new HashMap<>(); | |
| 353 | + String xl = null; //线路编码 | |
| 354 | + String xlName = null; | |
| 355 | + //获取所有线路 | |
| 356 | + Map<String, String> lineMap = BasicData.lineCode2NameMap; | |
| 357 | + for (Map.Entry<String, String> t : lineMap.entrySet()){ | |
| 358 | + if (message.contains(t.getValue())){ | |
| 359 | + xl = t.getKey(); | |
| 360 | + xlName = t.getValue(); | |
| 361 | + } | |
| 362 | + } | |
| 363 | + if (xl != null){ | |
| 364 | + //总班次、进场班次、出场班次、临加班次、正常班次、区间班次。0 未执行 1 正在执行 2 已执行 -1 已烂班 | |
| 365 | + Integer inbcs = 0,outbcs = 0,ljbcs = 0,normalbcs = 0,regionbcs =0,wzxbcs = 0 ,zzxbcs = 0,yzxbcs = 0,lbbcs = 0; | |
| 366 | + List<ScheduleRealInfo> srList = dayOfSchedule.findByLineCode(xl);//当日所有班次 | |
| 367 | + for(ScheduleRealInfo sc : srList) { | |
| 368 | + if (sc.getBcType().equals("in")) | |
| 369 | + inbcs = inbcs + 1; | |
| 370 | + if (sc.getBcType().equals("out")) | |
| 371 | + outbcs = outbcs + 1; | |
| 372 | + if (sc.isSflj()) | |
| 373 | + ljbcs = ljbcs + 1; | |
| 374 | + if (sc.getBcType().equals("normal")) | |
| 375 | + normalbcs = normalbcs + 1; | |
| 376 | + if (sc.getBcType().equals("region")) | |
| 377 | + regionbcs = regionbcs + 1; | |
| 378 | + if (sc.getStatus() == 0) | |
| 379 | + wzxbcs = wzxbcs + 1; | |
| 380 | + if (sc.getStatus() == 1) | |
| 381 | + zzxbcs = zzxbcs + 1; | |
| 382 | + if (sc.getStatus() == 2) | |
| 383 | + yzxbcs = yzxbcs + 1; | |
| 384 | + if (sc.getStatus() == -1) | |
| 385 | + lbbcs = lbbcs + 1; | |
| 386 | + } | |
| 387 | + m.put("code","200"); | |
| 388 | + m.put("inbcs",inbcs); | |
| 389 | + m.put("outbcs",outbcs); | |
| 390 | + m.put("ljbcs",ljbcs); | |
| 391 | + m.put("normalbcs",normalbcs); | |
| 392 | + m.put("regionbcs",regionbcs); | |
| 393 | + m.put("wzxbcs",wzxbcs); | |
| 394 | + m.put("zzxbcs",zzxbcs); | |
| 395 | + m.put("yzxbcs",yzxbcs); | |
| 396 | + m.put("lbbcs",lbbcs); | |
| 397 | + m.put("bcs",srList.size()); | |
| 398 | + m.put("xlName",xlName); | |
| 399 | + }else { | |
| 400 | + m.put("code","100"); | |
| 401 | + m.put("message","无法找到线路"); | |
| 402 | + } | |
| 403 | + | |
| 404 | + return m; | |
| 405 | + } | |
| 406 | + | |
| 407 | + | |
| 408 | + public List<ScheduleRealInfo> schQbc(String xl){ | |
| 409 | + //获取前一天的班次 | |
| 410 | + List<ScheduleRealInfo> list = scheduleRealInfoRepository.scheduleByDateAndLineTjrb(xl, DateUtils.qyt_date()); | |
| 411 | + | |
| 412 | + return list; | |
| 413 | + } | |
| 346 | 414 | } | ... | ... |
src/main/java/com/bsth/util/DateUtils.java
| ... | ... | @@ -152,4 +152,22 @@ public class DateUtils { |
| 152 | 152 | } |
| 153 | 153 | return num; |
| 154 | 154 | } |
| 155 | + //前一天 | |
| 156 | + public static String qyt_date(){ | |
| 157 | + SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); | |
| 158 | + | |
| 159 | + String rq = ""; | |
| 160 | + try { | |
| 161 | + Date dNow = new Date(); //当前时间 | |
| 162 | + Date dBefore = new Date(); | |
| 163 | + Calendar calendar = Calendar.getInstance(); //得到日历 | |
| 164 | + calendar.setTime(dNow);//把当前时间赋给日历 | |
| 165 | + calendar.add(Calendar.DAY_OF_MONTH, -1); //设置为前一天 | |
| 166 | + dBefore = calendar.getTime(); //得到前一天的时间 | |
| 167 | + rq=sdf.format(dBefore); | |
| 168 | + } catch (Exception e) { | |
| 169 | + e.printStackTrace(); | |
| 170 | + } | |
| 171 | + return rq; | |
| 172 | + } | |
| 155 | 173 | } | ... | ... |
src/main/resources/static/pages/base/timesmodel/gantt.html
| ... | ... | @@ -49,6 +49,9 @@ |
| 49 | 49 | </div> |
| 50 | 50 | <!-- actions 组件START --> |
| 51 | 51 | <div class="actions"> |
| 52 | + <div class="btn-group btn-group-devided countbtn" data-toggle="buttons"> | |
| 53 | + <a class="btn btn-circle blue jhpbonsjpb" href="javascript:;" data-pjax><i class="fa fa-database"></i> 计划排班与实际班次</a> | |
| 54 | + </div> | |
| 52 | 55 | <div class="btn-group btn-group-devided countbtn" data-toggle="buttons"> |
| 53 | 56 | <a class="btn btn-circle blue countAdd" href="javascript:;" data-pjax><i class="fa fa-database"></i> 排班统计</a> |
| 54 | 57 | </div> | ... | ... |
src/main/resources/static/pages/base/timesmodel/jhpbonsjpb.html
0 → 100644
| 1 | +<!-- 统计数据 --> | |
| 2 | +<div class="modal fade" id="jhpbonsjpb_mobal" tabindex="-1" role="basic" aria-hidden="true"> | |
| 3 | + <div class="modal-dialog" style="width: 1400px;justify-content: center; /* 水平居中 */ | |
| 4 | + align-items: center; height: 90%; overflow-y: auto;/* 垂直居中 */"> | |
| 5 | + <div class="modal-content"> | |
| 6 | + <div class="modal-header"> | |
| 7 | + <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button> | |
| 8 | + <h4 class="modal-title">计划排班与实际班次统计数据 </h4> | |
| 9 | + </div> | |
| 10 | + <div class="modal-body"> | |
| 11 | + <div class="portlet-body"> | |
| 12 | + <div class="table-container" style="margin-top: 10px"> | |
| 13 | + <table class="table table-striped table-bordered table-hover table-checkable" id="datatable_jhpbOnsjpd"> | |
| 14 | + <thead> | |
| 15 | + <tr role="row" class="heading"> | |
| 16 | + <th>序号</th> | |
| 17 | + <th>路牌</th> | |
| 18 | + <th>班次数(实际)</th> | |
| 19 | + <th>班次数</th> | |
| 20 | + <th>营运里程(km)(实际)</th> | |
| 21 | + <th>营运里程(km)</th> | |
| 22 | + <th>进场时间(分)(实际)</th> | |
| 23 | + <th>进场时间(分)</th> | |
| 24 | + <th>出场时间(分)(实际)</th> | |
| 25 | + <th>出场时间(分)</th> | |
| 26 | + <th>开始营运时间(实际)</th> | |
| 27 | + <th>开始营运时间</th> | |
| 28 | + <th>结束营运时间(实际)</th> | |
| 29 | + <th>结束营运时间</th> | |
| 30 | + </tr> | |
| 31 | + </thead> | |
| 32 | + <tbody></tbody> | |
| 33 | + </table> | |
| 34 | + </div> | |
| 35 | + </div> | |
| 36 | + </div> | |
| 37 | + <div class="modal-footer"> | |
| 38 | + <button type="button" class="btn default" data-dismiss="modal">关闭</button> | |
| 39 | + </div> | |
| 40 | + </div> | |
| 41 | + </div> | |
| 42 | +</div> | |
| 43 | +<script type="text/html" id="jhpbOnsjpd_temp"> | |
| 44 | + {{each list as obj i }} | |
| 45 | + <tr role="row" class="filter"> | |
| 46 | + <td>{{i+1}}</td> | |
| 47 | + <td>{{obj.lp}}</td> | |
| 48 | + <td>{{obj.bcs_s}}</td> | |
| 49 | + <td>{{obj.bcs}}</td> | |
| 50 | + <td>{{obj.yylc_s}}</td> | |
| 51 | + <td>{{obj.yylc}}</td> | |
| 52 | + <td>{{obj.jclc_s}}</td> | |
| 53 | + <td>{{obj.jclc}}</td> | |
| 54 | + <td>{{obj.cllc_s}}</td> | |
| 55 | + <td>{{obj.cllc}} | |
| 56 | + <td>{{obj.ksyysj_s}}</td> | |
| 57 | + <td>{{obj.ksyysj}} | |
| 58 | + <td>{{obj.jsyysj_s}}</td> | |
| 59 | + <td>{{obj.jsyysj}} | |
| 60 | + | |
| 61 | + | |
| 62 | + </tr> | |
| 63 | + {{/each}} | |
| 64 | + {{if list.length == 0}} | |
| 65 | + <tr> | |
| 66 | + <td colspan=3><h6 class="muted">没有找到相关数据</h6></td> | |
| 67 | + </tr> | |
| 68 | + {{/if}} | |
| 69 | +</script> | |
| 70 | +<script type="text/javascript"> | |
| 71 | + $('#jhpbonsjpb_mobal').on('jhpbOnsjpdMobal.show', function(e,countDate){ | |
| 72 | + debugger | |
| 73 | + // 加载延迟200毫秒显示mobal | |
| 74 | + setTimeout(function(){$('#jhpbonsjpb_mobal').modal({show : true,backdrop: 'static', keyboard: false});},200); | |
| 75 | + // 当模态框对用户可见时触发(将等待 CSS 过渡效果完成)。 | |
| 76 | + $('#jhpbonsjpb_mobal').on('show.bs.modal', function () { | |
| 77 | + debugger | |
| 78 | + // 把数据填充到模版中 | |
| 79 | + var tbodyHtml = template('jhpbOnsjpd_temp',{list:countDate}); | |
| 80 | + // 把渲染好的模版html文本追加到表格中 | |
| 81 | + $('#datatable_jhpbOnsjpd tbody').html(tbodyHtml); | |
| 82 | + $('#star').raty({ readOnly: true,score: 4.5 }); | |
| 83 | + }); | |
| 84 | + }); | |
| 85 | +</script> | |
| 0 | 86 | \ No newline at end of file | ... | ... |
src/main/resources/static/pages/base/timesmodel/js/echartsDrawGanTT.js
| ... | ... | @@ -91,7 +91,7 @@ var echartsDrawGTT = function () { |
| 91 | 91 | xlDir = -1; |
| 92 | 92 | data.push({ |
| 93 | 93 | value: [ |
| 94 | - bcObj.lpName,//纵坐标 | |
| 94 | + bcObj.lpName ,//纵坐标 | |
| 95 | 95 | fcsj,//开始时间 |
| 96 | 96 | ARRIVALTIME,//结束时间 |
| 97 | 97 | bcObj.bcsj*60000,//横坐标长度(持续时间) |
| ... | ... | @@ -108,9 +108,12 @@ var echartsDrawGTT = function () { |
| 108 | 108 | bcObj.zdz, |
| 109 | 109 | bcObj.STOPTIME, |
| 110 | 110 | bcObj.isfb ? 1:0, |
| 111 | - bcObj.qs | |
| 111 | + bcObj.qs, | |
| 112 | 112 | //bcObj.isSwitchXl, |
| 113 | 113 | //bcObj.bz, |
| 114 | + bcObj.isjh ? 0:1, | |
| 115 | + bcObj.fcsj, | |
| 116 | + bcObj.ARRIVALTIME, | |
| 114 | 117 | ], |
| 115 | 118 | itemStyle: { |
| 116 | 119 | normal: { |
| ... | ... | @@ -177,6 +180,7 @@ var echartsDrawGTT = function () { |
| 177 | 180 | }, |
| 178 | 181 | backgroundColor: '#fff', |
| 179 | 182 | borderColor: 'rgba(0, 0, 20, 0.2)', |
| 183 | + | |
| 180 | 184 | formatter: function (params) { |
| 181 | 185 | //bd--早例保;out--出场;normal--正常;cf--吃饭;in--进场;lc--晚例保;major--放站;venting--直放;region--区间 |
| 182 | 186 | var bcTypeStr; |
| ... | ... | @@ -205,9 +209,10 @@ var echartsDrawGTT = function () { |
| 205 | 209 | +'<br>到站时间:' + getHoursAndMinutes(params.value[2]) |
| 206 | 210 | +'<br>行驶时间:' + params.value[3]/60000 +'分钟' |
| 207 | 211 | +'<br>停休时间:' + params.value[15] +'分钟' |
| 208 | - +'<br>班次类型:' + bcTypeStr ; | |
| 212 | + +'<br>班次类型:' + bcTypeStr | |
| 213 | + +'<br>班次情况:' +(params.value[18] == 0 ? '调度': '计划'); | |
| 209 | 214 | return str; |
| 210 | - } | |
| 215 | + }, | |
| 211 | 216 | }, |
| 212 | 217 | grid: { |
| 213 | 218 | top: '0px', |
| ... | ... | @@ -297,8 +302,6 @@ var echartsDrawGTT = function () { |
| 297 | 302 | fontWeight: 65, |
| 298 | 303 | formatter: function (params) { |
| 299 | 304 | |
| 300 | - var p= chart.convertToPixel({xAxisIndex: 0, yAxisIndex:0},[params.data.value[1],params.data.value[2]]); | |
| 301 | - var a = p[1]-p[0]; | |
| 302 | 305 | var type = params.data.value[6], |
| 303 | 306 | lastStr = '',// 班次历时 |
| 304 | 307 | stayStr = '',// 停站时间 |
| ... | ... | @@ -580,7 +583,6 @@ var echartsDrawGTT = function () { |
| 580 | 583 | textBorderWidth: 0, |
| 581 | 584 | textBorderColor: '#000', |
| 582 | 585 | formatter: function (params) { |
| 583 | - | |
| 584 | 586 | var p= chart.convertToPixel({xAxisIndex: 0, yAxisIndex:0},[params.data.value[1],params.data.value[2]]); |
| 585 | 587 | var a = p[1]-p[0]; |
| 586 | 588 | var type = params.data.value[6], | ... | ... |
src/main/resources/static/pages/base/timesmodel/js/gantt.js
| ... | ... | @@ -18,7 +18,6 @@ |
| 18 | 18 | }); |
| 19 | 19 | // 获取已存在的该时刻表明细数据. |
| 20 | 20 | var objD = window.localStorage.isDoDate; |
| 21 | - debugger; | |
| 22 | 21 | // 获取表单参数配置数据. |
| 23 | 22 | var map = JSON.parse(window.localStorage.Gantt_AgursData); |
| 24 | 23 | $('.skmxTitle').text( '【' + map.skbmc + '】' + '时刻表明细模型'); |
| ... | ... | @@ -120,28 +119,32 @@ |
| 120 | 119 | }else { |
| 121 | 120 | var jsonA = JSON.parse(objD); |
| 122 | 121 | // 使用已有的时刻表明细数据渲染视图. |
| 123 | - // data = {'json':jsonA.rsD,'bxrcgs':null}; | |
| 124 | - CSMap = {'gattA':null,'stopSpace': Math.round(map.zzsj/map.clzs),'maxCar':jsonA.rsLP}; | |
| 125 | - var cara = jsonA.rsLP; | |
| 126 | 122 | var rsjar = jsonA.rsD; |
| 127 | - var resultJA = new Array(); | |
| 128 | - for(var m = 0 ; m < cara.length; m++) { | |
| 129 | - // 获取路牌编号. | |
| 130 | - var lpNo_ = cara[m].lpNo; | |
| 131 | - // 定义路牌下的所有班次. | |
| 132 | - var lpbc_ = new Array(); | |
| 133 | - // 遍历班次数. | |
| 134 | - for(var x =0 ; x <rsjar.length; x++) { | |
| 135 | - // 判断当期遍历的班次是否属于当前的路牌. | |
| 136 | - if(rsjar[x].lpNo == lpNo_) { | |
| 137 | - lpbc_.push(rsjar[x]); | |
| 123 | + var rsLP = jsonA.rsLP; | |
| 124 | + debugger | |
| 125 | + //查询出当日所有班次,并加入data,json里面一块输送给 | |
| 126 | + $.get('/logZndd/sch_qbc', {xl : rsjar[0].xl},function (data) { | |
| 127 | + for (let t in data){ | |
| 128 | + var sch = data[t]; | |
| 129 | + if (sch.status == -1) | |
| 130 | + continue; | |
| 131 | + for (let lp in rsLP){ | |
| 132 | + var lps = rsLP[lp]; | |
| 133 | + //相同路牌加入到rsjar里,并特殊标注一个,提高一点y坐标 | |
| 134 | + if(sch.lpName == lps.lpName){ | |
| 135 | + rsjar.push(schonmap(sch,lps)); | |
| 136 | + | |
| 137 | + } | |
| 138 | 138 | } |
| 139 | 139 | } |
| 140 | - // 按照发车序号顺序排序. | |
| 141 | - lpbc_.sort(function(a,b){return a.fcno-b.fcno}); | |
| 142 | - resultJA = resultJA.concat(BaseFun.addjclbbc01(lpbc_,dataMap,stopArray[0].lbsj,map)); | |
| 143 | - } | |
| 144 | - data = {'json':rsjar,'bxrcgs':null}; | |
| 140 | + | |
| 141 | + data = {'json':rsjar,'bxrcgs':null}; | |
| 142 | + echartsDrawGTT.init(data.json,true,true); | |
| 143 | + | |
| 144 | + | |
| 145 | + }); | |
| 146 | + | |
| 147 | + return; | |
| 145 | 148 | } |
| 146 | 149 | echartsDrawGTT.init(data.json,true,true); |
| 147 | 150 | // console.log(data.json); |
| ... | ... | @@ -208,6 +211,35 @@ |
| 208 | 211 | layer.close(indexLoad); |
| 209 | 212 | },500); |
| 210 | 213 | |
| 214 | + | |
| 215 | + function schonmap(sch,lp){ | |
| 216 | + var maps = {}; | |
| 217 | + maps.ARRIVALTIME = sch.zdsj; | |
| 218 | + maps.STOPTIME= 0; | |
| 219 | + maps.bcType = sch.bcType; | |
| 220 | + maps.bcs = sch.bcs; | |
| 221 | + maps.bcsj= sch.bcsj; | |
| 222 | + maps.fcno= sch.fcno; | |
| 223 | + maps.fcsj= sch.fcsj; | |
| 224 | + maps.isSwitchXl= 0; | |
| 225 | + maps.isfb =0; | |
| 226 | + maps.jhlc = sch.jhlc; | |
| 227 | + maps.lp = lp.lp; | |
| 228 | + maps.lpName = sch.lpName; | |
| 229 | + maps.lpNo = lp.lpNo; | |
| 230 | + maps.lpType = lp.lpType; | |
| 231 | + maps.parent= 1; | |
| 232 | + maps.qdz= sch.qdzCode; | |
| 233 | + maps.tcc = 98; | |
| 234 | + //maps.ttinfo: 7061 | |
| 235 | + maps.xl = sch.xlBm; | |
| 236 | + maps.xlDir= sch.xlDir == 0 ? "relationshipGraph-up" : "relationshipGraph-down"; | |
| 237 | + maps.zdz= sch.zdzCode; | |
| 238 | + maps.isjh = true; | |
| 239 | + maps.lpName = sch.lpName + "_实际排班"; | |
| 240 | + return maps; | |
| 241 | + } | |
| 242 | + | |
| 211 | 243 | /** |
| 212 | 244 | * @description : (TODO) 根据客流数据分析各个时间段内的配车数、获取发车间隙与车辆数的最大值. |
| 213 | 245 | * | ... | ... |
src/main/resources/static/pages/base/timesmodel/js/systemTools.js
| ... | ... | @@ -440,6 +440,111 @@ $('.countAdd').on('click',function() { |
| 440 | 440 | }); |
| 441 | 441 | }); |
| 442 | 442 | |
| 443 | + | |
| 444 | +/**计划排班与实际班次的统计数据 | |
| 445 | + * | |
| 446 | + */ | |
| 447 | + | |
| 448 | +$('.jhpbonsjpb').on('click',function() { | |
| 449 | + | |
| 450 | + var historyData = echartsDrawGTT.getHistoryData(), | |
| 451 | + list = historyData[0], | |
| 452 | + LpData = echartsDrawGTT.getLpData(); | |
| 453 | + //每个路牌单独计算出统计 | |
| 454 | + var LPGroupBy = []; | |
| 455 | + var ListLPDaata =[]; //所有路牌统计数据 | |
| 456 | + for (var p in LpData){ | |
| 457 | + var lp = LpData[p]; | |
| 458 | + var m = {}; // 单个路牌统计数据 | |
| 459 | + var bcs = 0 ; //班次数 | |
| 460 | + var yylc = 0.0; //营运里程 | |
| 461 | + var jclc = 0.0 ;//进场时间 | |
| 462 | + var cllc = 0.0; //出场时间 | |
| 463 | + var ksyyList = [];//开始营运时间 | |
| 464 | + var jsyyList = [];//结束营运时间 | |
| 465 | + for(var i = 0;i<list.length;i++) { | |
| 466 | + var bcObj = list[i].value; | |
| 467 | + //相同路牌 | |
| 468 | + if (lp == bcObj[0]) { | |
| 469 | + bcs++; | |
| 470 | + yylc += bcObj[9]; | |
| 471 | + | |
| 472 | + if (bcObj[6] == "in") { | |
| 473 | + jclc += bcObj[3] /60000; | |
| 474 | + } else if (bcObj[6] == "out") { | |
| 475 | + cllc += bcObj[3] /60000; | |
| 476 | + } | |
| 477 | + ksyyList.push(bcObj[19]); | |
| 478 | + jsyyList.push(bcObj[20]); | |
| 479 | + } | |
| 480 | + } | |
| 481 | + m.lp = lp; | |
| 482 | + m.bcs = bcs; | |
| 483 | + m.yylc = yylc; | |
| 484 | + m.jclc = jclc; | |
| 485 | + m.cllc = cllc; | |
| 486 | + m.ksyysj = ksyyList[0]; | |
| 487 | + m.jsyysj = jsyyList[jsyyList.length - 1]; | |
| 488 | + ListLPDaata.push(m); | |
| 489 | + var lpBole = true | |
| 490 | + | |
| 491 | + for(var lpg in LPGroupBy){ | |
| 492 | + var lpn = LPGroupBy[lpg]; | |
| 493 | + if (lpn == lp || lp.includes("_实际排班")){ | |
| 494 | + lpBole = false; | |
| 495 | + } | |
| 496 | + } | |
| 497 | + if (lpBole) | |
| 498 | + LPGroupBy.push(lp); | |
| 499 | + | |
| 500 | + } | |
| 501 | + LPGroupBy.sort(function(a,b){ | |
| 502 | + return a - b; | |
| 503 | + }); | |
| 504 | + //组合成报表样式 | |
| 505 | + BData = []; | |
| 506 | + debugger | |
| 507 | + //相同路牌进行数据合并 (_实际排班) | |
| 508 | + for (let lps in LPGroupBy){ | |
| 509 | + var map = {}; | |
| 510 | + var lp = LPGroupBy[lps]; | |
| 511 | + map.lp = lp; | |
| 512 | + for (ld in ListLPDaata){ | |
| 513 | + var data = ListLPDaata[ld]; | |
| 514 | + //计划 | |
| 515 | + if (lp == data.lp){ | |
| 516 | + map.bcs = data.bcs; | |
| 517 | + map.yylc = data.yylc; | |
| 518 | + map.jclc = data.jclc; | |
| 519 | + map.cllc = data.cllc; | |
| 520 | + map.ksyysj = data.ksyysj; | |
| 521 | + map.jsyysj = data.jsyysj; | |
| 522 | + } | |
| 523 | + | |
| 524 | + //实际 | |
| 525 | + if(lp+"_实际排班" == data.lp){ | |
| 526 | + map.bcs_s = data.bcs; | |
| 527 | + map.yylc_s = data.yylc; | |
| 528 | + map.jclc_s = data.jclc; | |
| 529 | + map.cllc_s = data.cllc; | |
| 530 | + map.ksyysj_s = data.ksyysj; | |
| 531 | + map.jsyysj_s = data.jsyysj; | |
| 532 | + } | |
| 533 | + } | |
| 534 | + BData.push(map); | |
| 535 | + } | |
| 536 | + | |
| 537 | + debugger | |
| 538 | + | |
| 539 | + // 弹出层mobal页面 | |
| 540 | + $.get('/pages/base/timesmodel/jhpbonsjpb.html', function(m){ | |
| 541 | + $(pjaxContainer).append(m); | |
| 542 | + // 规定被选元素要触发的事件。可以使自定义事件(使用 bind() 函数来附加),或者任何标准事件。 | |
| 543 | + $('#jhpbonsjpb_mobal').trigger('jhpbOnsjpdMobal.show',[BData]); | |
| 544 | + }); | |
| 545 | +}); | |
| 546 | + | |
| 547 | + | |
| 443 | 548 | /** |
| 444 | 549 | * @description : (TODO) 重新生成事件. |
| 445 | 550 | * | ... | ... |
src/main/resources/static/pages/permission/authorize_all/user_auth.html
| ... | ... | @@ -83,6 +83,8 @@ |
| 83 | 83 | <li><label><input class="uk-checkbox" type="checkbox" data-event="signal_state"> 信号标记</label></li> |
| 84 | 84 | <li><label><input class="uk-checkbox" type="checkbox" data-event="kl_config"> 客流信息</label></li> |
| 85 | 85 | <li><label><input class="uk-checkbox" type="checkbox" data-event="zndd_status"> 智能调度开关</label></li> |
| 86 | + <li><label><input class="uk-checkbox" type="checkbox" data-event="deepseek"> 调度助手(deepseek)</label></li> | |
| 87 | + | |
| 86 | 88 | </ul> |
| 87 | 89 | </div> |
| 88 | 90 | <div> | ... | ... |
src/main/resources/static/real_control_v2/js/zndd/data_zndd.js
| ... | ... | @@ -5,7 +5,7 @@ var gb_dataZndd = (function (){ |
| 5 | 5 | var $pop =$('.multi_plat_msg_pop_zndd'); |
| 6 | 6 | |
| 7 | 7 | var codes = { |
| 8 | - 'DJG': '大间隔', | |
| 8 | + 'DJG': '行车大间隔', | |
| 9 | 9 | 'FCJG': '发车间隔', |
| 10 | 10 | 'WD': '误点', |
| 11 | 11 | 'MZ': '满载率高', |
| ... | ... | @@ -103,6 +103,12 @@ var gb_dataZndd = (function (){ |
| 103 | 103 | }); |
| 104 | 104 | |
| 105 | 105 | |
| 106 | + $pop.on('click', '.multi_plat_config_s .msg-times', function () { | |
| 107 | + $(this).parent().parent().remove(); | |
| 108 | + }); | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 106 | 112 | var closetwo = true; //关闭弹出框的时候不弹出 |
| 107 | 113 | $pop.on('click', '.multi_plat_msg_zndd .msg-times', function () { |
| 108 | 114 | $(this).parent().parent().remove(); |
| ... | ... | @@ -127,6 +133,18 @@ var gb_dataZndd = (function (){ |
| 127 | 133 | } |
| 128 | 134 | |
| 129 | 135 | |
| 136 | + | |
| 137 | + | |
| 138 | + /* //演示-----大客流 | |
| 139 | + $(".ys_dkl").click(function (){ | |
| 140 | + folder = '/real_control_v2/zndd/yanshi'; | |
| 141 | + open_modal(folder + '/yanshi.html', { | |
| 142 | + }, {center: true, bgclose: false, modal: true}); | |
| 143 | + | |
| 144 | + }); | |
| 145 | + | |
| 146 | +*/ | |
| 147 | + | |
| 130 | 148 | //发车信息微调 |
| 131 | 149 | $pop.on('click', '.fcxxwts', function () { |
| 132 | 150 | if (close) close = false | ... | ... |
src/main/resources/static/real_control_v2/zndd/type/djg1.html
| ... | ... | @@ -476,7 +476,7 @@ |
| 476 | 476 | <div class="uk-grid"> |
| 477 | 477 | <div class="uk-width-4-2"> |
| 478 | 478 | <div class="uk-form-row"> |
| 479 | - <label class="uk-form-labels" >{{lineName}} -> 起点站开往终点站 出现大间隔</label> | |
| 479 | + <label class="uk-form-labels" >{{lineName}} -> 开往{{sch.zdzName}}方向 出现大间隔</label> | |
| 480 | 480 | </div> |
| 481 | 481 | </div> |
| 482 | 482 | </div> | ... | ... |
src/main/resources/static/real_control_v2/zndd/zndd_status.html