Commit 88927f88927233f657467689be1184aba8d2d4ba

Authored by ljq
1 parent c04ee95e

时刻表对比与智能调度微调

src/main/java/com/bsth/controller/zndd/LoggerZnddController.java
@@ -65,4 +65,25 @@ public class LoggerZnddController extends BaseController<LoggerZndd, Integer> { @@ -65,4 +65,25 @@ public class LoggerZnddController extends BaseController<LoggerZndd, Integer> {
65 return loggerZnddService.nextSch(id); 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,7 +219,7 @@ public class AutomaticSch {
219 //rfid 判断 219 //rfid 判断
220 List<RfidInfo> list = RfidHttpLoader.load(); 220 List<RfidInfo> list = RfidHttpLoader.load();
221 for (RfidInfo ri : list) { 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 //最新的rfid是出站状态 223 //最新的rfid是出站状态
224 if (ri.getNbbm().equals(sr.getClZbh())){ 224 if (ri.getNbbm().equals(sr.getClZbh())){
225 sfsj = sdfHHmm.format(ri.getInoutStation().getTimestamp()); 225 sfsj = sdfHHmm.format(ri.getInoutStation().getTimestamp());
@@ -450,7 +450,8 @@ public class AutomaticSch { @@ -450,7 +450,8 @@ public class AutomaticSch {
450 List<ScheduleRealInfo> schadd = new ArrayList<>(); 450 List<ScheduleRealInfo> schadd = new ArrayList<>();
451 //每辆车下的班次 451 //每辆车下的班次
452 for (ScheduleRealInfo sch : srList) { 452 for (ScheduleRealInfo sch : srList) {
453 - if (s.getClZbh().equals(sch.getClZbh())) { 453 + //筛选掉烂班
  454 + if (s.getClZbh().equals(sch.getClZbh()) && sch.getStatus() != -1) {
454 schadd.add(sch); 455 schadd.add(sch);
455 } 456 }
456 } 457 }
src/main/java/com/bsth/data/zndd/ZnddTwoThread.java
@@ -104,7 +104,7 @@ public class ZnddTwoThread extends Thread{ @@ -104,7 +104,7 @@ public class ZnddTwoThread extends Thread{
104 @Override 104 @Override
105 public void run() { 105 public void run() {
106 automaticSch.TowdescSch(); 106 automaticSch.TowdescSch();
107 - logger.info("末二班车"); 107 + logger.info("末二班车执行完毕");
108 } 108 }
109 }.start();//启动线程 109 }.start();//启动线程
110 110
src/main/java/com/bsth/service/zndd/LoggerZnddService.java
@@ -25,4 +25,9 @@ public interface LoggerZnddService extends BaseService&lt;LoggerZndd, Integer&gt; { @@ -25,4 +25,9 @@ public interface LoggerZnddService extends BaseService&lt;LoggerZndd, Integer&gt; {
25 Map<String, Object> schTZSF(String line,String date,String endDate,String changType,String type); 25 Map<String, Object> schTZSF(String line,String date,String endDate,String changType,String type);
26 26
27 ScheduleRealInfo nextSch(Long id); 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,6 +3,7 @@ package com.bsth.service.zndd.impl;
3 import com.alibaba.fastjson.JSON; 3 import com.alibaba.fastjson.JSON;
4 import com.bsth.common.ResponseCode; 4 import com.bsth.common.ResponseCode;
5 import com.bsth.controller.realcontrol.dto.DfsjChange; 5 import com.bsth.controller.realcontrol.dto.DfsjChange;
  6 +import com.bsth.data.BasicData;
6 import com.bsth.data.schedule.DayOfSchedule; 7 import com.bsth.data.schedule.DayOfSchedule;
7 import com.bsth.data.schedule.ScheduleComparator; 8 import com.bsth.data.schedule.ScheduleComparator;
8 import com.bsth.data.schedule.edit_logs.service.dto.SchEditInfoDto; 9 import com.bsth.data.schedule.edit_logs.service.dto.SchEditInfoDto;
@@ -18,6 +19,7 @@ import com.bsth.service.realcontrol.ScheduleRealInfoService; @@ -18,6 +19,7 @@ import com.bsth.service.realcontrol.ScheduleRealInfoService;
18 import com.bsth.service.report.ReportService; 19 import com.bsth.service.report.ReportService;
19 import com.bsth.service.sys.RealControAuthorityService; 20 import com.bsth.service.sys.RealControAuthorityService;
20 import com.bsth.service.zndd.LoggerZnddService; 21 import com.bsth.service.zndd.LoggerZnddService;
  22 +import com.bsth.util.DateUtils;
21 import com.bsth.util.ReportUtils; 23 import com.bsth.util.ReportUtils;
22 import org.slf4j.Logger; 24 import org.slf4j.Logger;
23 import org.slf4j.LoggerFactory; 25 import org.slf4j.LoggerFactory;
@@ -343,4 +345,70 @@ public class LoggerZnddServiceImpl extends BaseServiceImpl&lt;LoggerZndd, Integer&gt; @@ -343,4 +345,70 @@ public class LoggerZnddServiceImpl extends BaseServiceImpl&lt;LoggerZndd, Integer&gt;
343 public ScheduleRealInfo nextSch(Long id){ 345 public ScheduleRealInfo nextSch(Long id){
344 return dayOfSchedule.next(dayOfSchedule.get(id)); 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,4 +152,22 @@ public class DateUtils {
152 } 152 }
153 return num; 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,6 +49,9 @@
49 </div> 49 </div>
50 <!-- actions 组件START --> 50 <!-- actions 组件START -->
51 <div class="actions"> 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 <div class="btn-group btn-group-devided countbtn" data-toggle="buttons"> 55 <div class="btn-group btn-group-devided countbtn" data-toggle="buttons">
53 <a class="btn btn-circle blue countAdd" href="javascript:;" data-pjax><i class="fa fa-database"></i> 排班统计</a> 56 <a class="btn btn-circle blue countAdd" href="javascript:;" data-pjax><i class="fa fa-database"></i> 排班统计</a>
54 </div> 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 \ No newline at end of file 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,7 +91,7 @@ var echartsDrawGTT = function () {
91 xlDir = -1; 91 xlDir = -1;
92 data.push({ 92 data.push({
93 value: [ 93 value: [
94 - bcObj.lpName,//纵坐标 94 + bcObj.lpName ,//纵坐标
95 fcsj,//开始时间 95 fcsj,//开始时间
96 ARRIVALTIME,//结束时间 96 ARRIVALTIME,//结束时间
97 bcObj.bcsj*60000,//横坐标长度(持续时间) 97 bcObj.bcsj*60000,//横坐标长度(持续时间)
@@ -108,9 +108,12 @@ var echartsDrawGTT = function () { @@ -108,9 +108,12 @@ var echartsDrawGTT = function () {
108 bcObj.zdz, 108 bcObj.zdz,
109 bcObj.STOPTIME, 109 bcObj.STOPTIME,
110 bcObj.isfb ? 1:0, 110 bcObj.isfb ? 1:0,
111 - bcObj.qs 111 + bcObj.qs,
112 //bcObj.isSwitchXl, 112 //bcObj.isSwitchXl,
113 //bcObj.bz, 113 //bcObj.bz,
  114 + bcObj.isjh ? 0:1,
  115 + bcObj.fcsj,
  116 + bcObj.ARRIVALTIME,
114 ], 117 ],
115 itemStyle: { 118 itemStyle: {
116 normal: { 119 normal: {
@@ -177,6 +180,7 @@ var echartsDrawGTT = function () { @@ -177,6 +180,7 @@ var echartsDrawGTT = function () {
177 }, 180 },
178 backgroundColor: '#fff', 181 backgroundColor: '#fff',
179 borderColor: 'rgba(0, 0, 20, 0.2)', 182 borderColor: 'rgba(0, 0, 20, 0.2)',
  183 +
180 formatter: function (params) { 184 formatter: function (params) {
181 //bd--早例保;out--出场;normal--正常;cf--吃饭;in--进场;lc--晚例保;major--放站;venting--直放;region--区间 185 //bd--早例保;out--出场;normal--正常;cf--吃饭;in--进场;lc--晚例保;major--放站;venting--直放;region--区间
182 var bcTypeStr; 186 var bcTypeStr;
@@ -205,9 +209,10 @@ var echartsDrawGTT = function () { @@ -205,9 +209,10 @@ var echartsDrawGTT = function () {
205 +'<br>到站时间:' + getHoursAndMinutes(params.value[2]) 209 +'<br>到站时间:' + getHoursAndMinutes(params.value[2])
206 +'<br>行驶时间:' + params.value[3]/60000 +'分钟' 210 +'<br>行驶时间:' + params.value[3]/60000 +'分钟'
207 +'<br>停休时间:' + params.value[15] +'分钟' 211 +'<br>停休时间:' + params.value[15] +'分钟'
208 - +'<br>班次类型:' + bcTypeStr ; 212 + +'<br>班次类型:' + bcTypeStr
  213 + +'<br>班次情况:' +(params.value[18] == 0 ? '调度': '计划');
209 return str; 214 return str;
210 - } 215 + },
211 }, 216 },
212 grid: { 217 grid: {
213 top: '0px', 218 top: '0px',
@@ -297,8 +302,6 @@ var echartsDrawGTT = function () { @@ -297,8 +302,6 @@ var echartsDrawGTT = function () {
297 fontWeight: 65, 302 fontWeight: 65,
298 formatter: function (params) { 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 var type = params.data.value[6], 305 var type = params.data.value[6],
303 lastStr = '',// 班次历时 306 lastStr = '',// 班次历时
304 stayStr = '',// 停站时间 307 stayStr = '',// 停站时间
@@ -580,7 +583,6 @@ var echartsDrawGTT = function () { @@ -580,7 +583,6 @@ var echartsDrawGTT = function () {
580 textBorderWidth: 0, 583 textBorderWidth: 0,
581 textBorderColor: '#000', 584 textBorderColor: '#000',
582 formatter: function (params) { 585 formatter: function (params) {
583 -  
584 var p= chart.convertToPixel({xAxisIndex: 0, yAxisIndex:0},[params.data.value[1],params.data.value[2]]); 586 var p= chart.convertToPixel({xAxisIndex: 0, yAxisIndex:0},[params.data.value[1],params.data.value[2]]);
585 var a = p[1]-p[0]; 587 var a = p[1]-p[0];
586 var type = params.data.value[6], 588 var type = params.data.value[6],
src/main/resources/static/pages/base/timesmodel/js/gantt.js
@@ -18,7 +18,6 @@ @@ -18,7 +18,6 @@
18 }); 18 });
19 // 获取已存在的该时刻表明细数据. 19 // 获取已存在的该时刻表明细数据.
20 var objD = window.localStorage.isDoDate; 20 var objD = window.localStorage.isDoDate;
21 - debugger;  
22 // 获取表单参数配置数据. 21 // 获取表单参数配置数据.
23 var map = JSON.parse(window.localStorage.Gantt_AgursData); 22 var map = JSON.parse(window.localStorage.Gantt_AgursData);
24 $('.skmxTitle').text( '【' + map.skbmc + '】' + '时刻表明细模型'); 23 $('.skmxTitle').text( '【' + map.skbmc + '】' + '时刻表明细模型');
@@ -120,28 +119,32 @@ @@ -120,28 +119,32 @@
120 }else { 119 }else {
121 var jsonA = JSON.parse(objD); 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 var rsjar = jsonA.rsD; 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 echartsDrawGTT.init(data.json,true,true); 149 echartsDrawGTT.init(data.json,true,true);
147 // console.log(data.json); 150 // console.log(data.json);
@@ -208,6 +211,35 @@ @@ -208,6 +211,35 @@
208 layer.close(indexLoad); 211 layer.close(indexLoad);
209 },500); 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 * @description : (TODO) 根据客流数据分析各个时间段内的配车数、获取发车间隙与车辆数的最大值. 244 * @description : (TODO) 根据客流数据分析各个时间段内的配车数、获取发车间隙与车辆数的最大值.
213 * 245 *
src/main/resources/static/pages/base/timesmodel/js/systemTools.js
@@ -440,6 +440,111 @@ $(&#39;.countAdd&#39;).on(&#39;click&#39;,function() { @@ -440,6 +440,111 @@ $(&#39;.countAdd&#39;).on(&#39;click&#39;,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 * @description : (TODO) 重新生成事件. 549 * @description : (TODO) 重新生成事件.
445 * 550 *
src/main/resources/static/pages/permission/authorize_all/user_auth.html
@@ -83,6 +83,8 @@ @@ -83,6 +83,8 @@
83 <li><label><input class="uk-checkbox" type="checkbox" data-event="signal_state"> 信号标记</label></li> 83 <li><label><input class="uk-checkbox" type="checkbox" data-event="signal_state"> 信号标记</label></li>
84 <li><label><input class="uk-checkbox" type="checkbox" data-event="kl_config"> 客流信息</label></li> 84 <li><label><input class="uk-checkbox" type="checkbox" data-event="kl_config"> 客流信息</label></li>
85 <li><label><input class="uk-checkbox" type="checkbox" data-event="zndd_status"> 智能调度开关</label></li> 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 </ul> 88 </ul>
87 </div> 89 </div>
88 <div> 90 <div>
src/main/resources/static/real_control_v2/js/zndd/data_zndd.js
@@ -5,7 +5,7 @@ var gb_dataZndd = (function (){ @@ -5,7 +5,7 @@ var gb_dataZndd = (function (){
5 var $pop =$('.multi_plat_msg_pop_zndd'); 5 var $pop =$('.multi_plat_msg_pop_zndd');
6 6
7 var codes = { 7 var codes = {
8 - 'DJG': '大间隔', 8 + 'DJG': '行车大间隔',
9 'FCJG': '发车间隔', 9 'FCJG': '发车间隔',
10 'WD': '误点', 10 'WD': '误点',
11 'MZ': '满载率高', 11 'MZ': '满载率高',
@@ -103,6 +103,12 @@ var gb_dataZndd = (function (){ @@ -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 var closetwo = true; //关闭弹出框的时候不弹出 112 var closetwo = true; //关闭弹出框的时候不弹出
107 $pop.on('click', '.multi_plat_msg_zndd .msg-times', function () { 113 $pop.on('click', '.multi_plat_msg_zndd .msg-times', function () {
108 $(this).parent().parent().remove(); 114 $(this).parent().parent().remove();
@@ -127,6 +133,18 @@ var gb_dataZndd = (function (){ @@ -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 $pop.on('click', '.fcxxwts', function () { 149 $pop.on('click', '.fcxxwts', function () {
132 if (close) close = false 150 if (close) close = false
src/main/resources/static/real_control_v2/zndd/type/djg1.html
@@ -476,7 +476,7 @@ @@ -476,7 +476,7 @@
476 <div class="uk-grid"> 476 <div class="uk-grid">
477 <div class="uk-width-4-2"> 477 <div class="uk-width-4-2">
478 <div class="uk-form-row"> 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 </div> 480 </div>
481 </div> 481 </div>
482 </div> 482 </div>
src/main/resources/static/real_control_v2/zndd/zndd_status.html
@@ -69,7 +69,7 @@ @@ -69,7 +69,7 @@
69 <td>{{obj.name}}</td> 69 <td>{{obj.name}}</td>
70 <td> 70 <td>
71 {{if obj.openStatus == 0}} 71 {{if obj.openStatus == 0}}
72 - <div class="uk-badge uk-badge-danger"> 开</div> 72 + <div class="uk-badge uk-badge-success"> 开</div>
73 {{else}} 73 {{else}}
74 <div class="uk-badge uk-badge-danger"> 关</div> 74 <div class="uk-badge uk-badge-danger"> 关</div>
75 {{/if}} 75 {{/if}}