Commit 21398848a98c3e1af1a72b32309c5bcd64c216a4

Authored by 游瑞烽
1 parent d4c54fa6

Merge branch 'pudong' of 192.168.168.201:panzhaov5/bsth_control into pudong

# Conflicts:
#	src/main/resources/static/pages/base/timesmodel/add.html
#	src/main/resources/static/pages/base/timesmodel/fragments/addbc.html
#	src/main/resources/static/pages/base/timesmodel/fragments/deletelp.html
#	src/main/resources/static/pages/base/timesmodel/fragments/editbc.html
#	src/main/resources/static/pages/base/timesmodel/js/add-form-wizard.js
#	src/main/resources/static/pages/base/timesmodel/js/dateTimeTool.js
#	src/main/resources/static/pages/base/timesmodel/js/echartsDrawGanTT.js
#	src/main/resources/static/pages/base/timesmodel/js/gantt.js
#	src/main/resources/static/pages/base/timesmodel/js/systemTools.js
#	src/main/resources/static/pages/base/timesmodel/js/v1/AdjustTrip.js
#	src/main/resources/static/pages/base/timesmodel/js/v1/bcFun.js
#	src/main/resources/static/pages/base/timesmodel/js/v1/lpFun.js
#	src/main/resources/static/pages/base/timesmodel/js/v1/scheduleInitialize.js
src/main/java/com/bsth/controller/StationController.java
1 1 package com.bsth.controller;
2 2  
3   -import java.util.Map;
4   -
  3 +import com.bsth.entity.Station;
  4 +import com.bsth.service.StationService;
  5 +import com.bsth.util.GetUIDAndCode;
5 6 import org.slf4j.Logger;
6 7 import org.slf4j.LoggerFactory;
7 8 import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -10,9 +11,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
10 11 import org.springframework.web.bind.annotation.RequestParam;
11 12 import org.springframework.web.bind.annotation.RestController;
12 13  
13   -import com.bsth.entity.Station;
14   -import com.bsth.service.StationService;
15   -import com.bsth.util.GetUIDAndCode;
  14 +import java.util.Map;
16 15  
17 16 /**
18 17 *
... ... @@ -160,11 +159,11 @@ public class StationController extends BaseController<Station, Integer> {
160 159 public int updateStationAndSectionCode(@RequestParam Integer stationCount, Integer sectionCount) {
161 160 System.out.println(stationCount+" _ "+ sectionCount );
162 161 for(int i = 0; i < stationCount; i++) {
163   - System.out.println(stationCount);
  162 + System.out.println(i);
164 163 GetUIDAndCode.getStationId();
165 164 }
166   - for(int i = 0; i < sectionCount; i++) {
167   - System.out.println(sectionCount);
  165 + for(int j = 0; j < sectionCount; j++) {
  166 + System.out.println(j);
168 167 GetUIDAndCode.getSectionId();
169 168 }
170 169 return 1;
... ...
src/main/java/com/bsth/controller/StationRouteController.java
1 1 package com.bsth.controller;
2 2  
3   -import com.bsth.entity.Station;
4 3 import com.bsth.entity.StationRoute;
5 4 import com.bsth.entity.StationRouteCache;
6 5 import com.bsth.repository.StationRouteCacheRepository;
... ... @@ -12,11 +11,10 @@ import org.springframework.web.bind.annotation.RequestMethod;
12 11 import org.springframework.web.bind.annotation.RequestParam;
13 12 import org.springframework.web.bind.annotation.RestController;
14 13  
  14 +import javax.servlet.http.HttpServletResponse;
15 15 import java.util.List;
16 16 import java.util.Map;
17 17  
18   -import javax.servlet.http.HttpServletResponse;
19   -
20 18 /**
21 19 *
22 20 * @ClassName: StationRouteController(站点路由控制器)
... ...
src/main/resources/static/pages/base/line/js/line-list-table.js
... ... @@ -386,8 +386,6 @@
386 386 }
387 387  
388 388 });
389   -
390   -
391 389 }
392 390 });
393 391 /** 生成路线(路段和站点) */
... ...
src/main/resources/static/pages/base/stationroute/js/stationroute-list-map.js
... ... @@ -58,15 +58,17 @@ window.WorldsBMap = function () {
58 58 marker.enableDragging();
59 59 dragMarker = marker;
60 60 dragMarker._old_point = dragMarker._position;
  61 + centerPoint = dragMarker._position;
61 62 //监听拖拽事件 dragging
62 63 dragMarker.addEventListener('dragging', dragMarkerDragEvent);
63 64 };
64 65  
65 66 var dragMarkerDragEvent = function (e) {
66 67 if (editPolygon) {
67   - if (!BMapLib.GeoUtils.isPointInPolygon(e.target._position, editPolygon))
  68 + // 中心点是否超出多边形
  69 + if (!BMapLib.GeoUtils.isPointInPolygon(e.target._position, editPolygon)) {
68 70 dragMarker.setPosition(dragMarker._old_point);//还原位置
69   -
  71 + }
70 72 centerPoint = e.target._position;
71 73 }
72 74 else if (editCircle) {
... ...
src/main/resources/static/pages/base/timesmodel/css/index.css
... ... @@ -217,11 +217,11 @@ text.alert-danger {
217 217 }
218 218  
219 219 .sx {
220   - background-color: #233f5d;
  220 + background-color: #ff2949;
221 221 }
222 222  
223 223 .xx {
224   - background-color: #31394a;
  224 + background-color: #518fe3;
225 225 }
226 226  
227 227 .tipso_bubble {
... ...
src/main/resources/static/pages/base/timesmodel/fragments/addbc.html
... ... @@ -259,12 +259,12 @@ $(&#39;#addBc_mobal&#39;).on(&#39;addBcMobal.show&#39;, function(e,lpData,lpDataCount,echartsDra
259 259 layer.confirm('添加的班次与前后班次有时间冲突,是否添加?', {
260 260 btn : [ '添加','取消' ], icon: 3, title:'提示'
261 261 }, function(){
262   - echartsDrawGTT.init(data,false,true);
  262 + echartsDrawGTT.init(data,false,true,false);
263 263 echartsDrawGTT.refreshDrag();
264 264 layer.msg('路牌:'+params.lpName+' fnco:'+params.fcno+' 班次添加成功,注意修改冲突班次!');
265 265 });
266 266 } else {
267   - echartsDrawGTT.init(data,false,true);
  267 + echartsDrawGTT.init(data,false,true,false);
268 268 echartsDrawGTT.refreshDrag();
269 269 layer.msg('路牌:'+params.lpName+' fnco:'+params.fcno+' 班次添加成功!');
270 270 }
... ...
src/main/resources/static/pages/base/timesmodel/fragments/deletelp.html
... ... @@ -104,7 +104,7 @@ $(&#39;#deletelp_mobal&#39;).on(&#39;deletelpMobal.show&#39;, function(e,lpData,echartsDrawGTT){
104 104 lpData.splice(index,1);
105 105 });
106 106 echartsDrawGTT.setLpData(lpData);
107   - echartsDrawGTT.init(data,false,true);
  107 + echartsDrawGTT.init(data,false,true,false);
108 108 echartsDrawGTT.refreshDrag();
109 109 $('#deletelp_mobal').modal('hide');
110 110 layer.msg('删除路牌【'+ params.lpName +'】成功!');
... ...
src/main/resources/static/pages/base/timesmodel/fragments/editbc.html
... ... @@ -192,7 +192,7 @@ $(&#39;#editBc_mobal&#39;).on(&#39;editBcMobal.show&#39;, function(e,index,echartsDrawGTT){
192 192 bcObj.value[7] = parseInt(params.fcno);
193 193 bcObj.value[16] = parseInt(params.isfb);
194 194  
195   - echartsDrawGTT.init(data,false,true);
  195 + echartsDrawGTT.init(data,false,true,false);
196 196 echartsDrawGTT.refreshDrag();
197 197 layer.msg('路牌:'+params.lpName+' fnco:'+params.fcno+' 班次修改成功!');
198 198 $('#editBc_mobal').modal('hide');
... ...
src/main/resources/static/pages/base/timesmodel/js/add-form-wizard.js
1   -
2 1 /**
3 2 * @description : (TODO) 表单的导航向导、验证、提交
4 3 */
... ... @@ -288,12 +287,12 @@ var SKBFormWizard = function() {
288 287 // 4、返回判断结果布尔值.
289 288 return tag;
290 289 }
291   -
  290 +
292 291 /**
293 292 * @description : (TODO) 获取客流数据.
294   - *
  293 + *
295 294 * @params [url--请求地址;data--请求参数;cb--回调函数]
296   - *
  295 + *
297 296 * */
298 297 function getJSONP(url, data, cb) {
299 298 $.ajax({
... ... @@ -305,24 +304,24 @@ var SKBFormWizard = function() {
305 304 success : cb
306 305 });
307 306 }
308   -
  307 +
309 308 /**
310 309 * @description : (TODO) 根据获取参数方式来获取表单参数详情html模版页.
311   - *
  310 + *
312 311 * @param [n--获取参数方式;map--表单参数;lineId--线路ID;krl--客容量;cb--回调函数]
313   - *
  312 + *
314 313 * @return 返回表单参数详情html模版页.
315   - *
  314 + *
316 315 * @status OK.
317 316 * */
318 317 var getHtmlTemp = function(n,map,lineId,krl,cb) {
319 318 // 1、定义模版名称.
320 319 var tempName = '';
321   - if(n==0)
  320 + if(n==0)
322 321 tempName = 'carnum_temp';
323 322 else if(n==1)
324 323 tempName = 'bctype_temp';
325   - else if (n==2 || n == 3)
  324 + else if (n==2)
326 325 tempName = 'fcjx_temp';
327 326 // 2、获参数详情模版html内容.
328 327 $.get('/pages/base/timesmodel/tepms/'+ tempName + '.html', function(html){
... ... @@ -348,9 +347,9 @@ var SKBFormWizard = function() {
348 347 var params = {'xlid':lineId,'startDateTime':startDateTime,'endDateTime':endDateTime,'zzsj':zzsj};
349 348 /**
350 349 * getJSONP请求获取客流数据.
351   - *
  350 + *
352 351 * 返回的是一个每次以半小时为间隔作为开始时间点, 在加上周转时间作为结束时间点的 时段段内的客流最大通过量.
353   - * */
  352 + * */
354 353 getJSONP("http://139.196.13.237:8080/bsth-busfareflow-gj/Crlcxb/selectsjbctgl.do",params,function(json){
355 354 // 定义时段集合,可容量.
356 355 var sjdArr = getsjdArr(map),krlInt = parseInt(krl);
... ... @@ -390,11 +389,29 @@ var SKBFormWizard = function() {
390 389  
391 390 // 返回参数详情模版.
392 391 return cb && cb ({'forminput':template(tempName,{map:map}),'datadisplay': template(tempName +'config',{map:null})});
393   - });
  392 + });
394 393 }else if(n==1) {
395   - // 返回参数详情模版.
396   - return cb && cb ({'forminput':template(tempName,{map:map}),'datadisplay': template(tempName +'config',{map:null})});
397   - }else if (n==2 || n == 3) {
  394 + // 更具站点路由版本获取起点终点站
  395 + var iversion = $('#lineVersionSelect').val();
  396 + $get('/stationroute/all',{'line.id_eq':lineId,'destroy_eq':0, 'versions_eq': iversion},function(result) {
  397 + $.each(result, function(i, d) {
  398 + if (d.stationMark == 'B' && d.directions == 0) {
  399 + // alert(d.stationName);
  400 + map.line.startStationName = d.stationName;
  401 + } else if (d.stationMark == 'E' && d.directions == 0) {
  402 + // alert(d.stationName);
  403 + map.line.endStationName = d.stationName;
  404 + }
  405 + });
  406 +
  407 + // return cb && cb({
  408 + // 'forminput': template(tempName, {map: map}),
  409 + // 'datadisplay': template(tempName + '_config', {map: null})
  410 + // });
  411 + // 返回参数详情模版.
  412 + return cb && cb ({'forminput':template(tempName,{map:map}),'datadisplay': template(tempName +'config',{map:null})});
  413 + });
  414 + }else if (n==2) {
398 415 // 更具站点路由版本获取起点终点站
399 416 var iversion = $('#lineVersionSelect').val();
400 417 $get('/stationroute/all',{'line.id_eq':lineId,'destroy_eq':0, 'versions_eq': iversion},function(result) {
... ... @@ -417,8 +434,8 @@ var SKBFormWizard = function() {
417 434  
418 435 }
419 436 });
420   - }
421   -
  437 + };
  438 +
422 439 /**
423 440 * @description (TODO) 格式化成渲染图形数据格式.
424 441 *
... ... @@ -540,7 +557,17 @@ var SKBFormWizard = function() {
540 557 'bxrc' : {required : true},// 班型人次,必填项
541 558 'linePlayType' : {required : true},// 线路规划类型,必填项
542 559 'zdzcrl' : {number : true,digits : true},
543   -
  560 + // 新增时间段字段
  561 + 'start1' : {required : true},
  562 + 'end1' : {required : true},
  563 + 'start2' : {required : true},
  564 + 'end2' : {required : true},
  565 + 'start3' : {required : true},
  566 + 'end3' : {required : true},
  567 + 'start4' : {required : true},
  568 + 'end4' : {required : true},
  569 + 'start5' : {required : true},
  570 + 'end5' : {required : true},
544 571  
545 572 'gfupStopTime' : {required : true,number : true}, // 高峰上行停站时间,必填项、必须为整数.
546 573 'gfdownStopTime' : {required : true,number : true}, // 高峰下行停站时间,必填项、必须为整数.
... ... @@ -957,6 +984,16 @@ var SKBFormWizard = function() {
957 984 $('#zgfjssjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 早高峰结束时间
958 985 $('#wgfkssjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 晚高峰开始时间
959 986 $('#wgfjssjInput').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});// 晚高峰结束时间
  987 + $('#startInput1').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  988 + $('#endInput1').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  989 + $('#startInput2').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  990 + $('#endInput2').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  991 + $('#startInput3').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  992 + $('#endInput3').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  993 + $('#startInput4').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  994 + $('#endInput4').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  995 + $('#startInput5').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
  996 + $('#endInput5').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
960 997 // 初始化停车场下拉框.
961 998 gettccInfo(function(cd) {
962 999 var options = '<option value="">请选择...</option><optgroup label="停车场">';
... ... @@ -974,7 +1011,7 @@ var SKBFormWizard = function() {
974 1011 layer.close(i);
975 1012 });
976 1013  
977   - } else if (baseRes == 2 || baseRes == 3) { // 发车间隔分析
  1014 + } else if (baseRes == 2) { // 发车间隔分析
978 1015 // 上下行首末班日期控件
979 1016 $('#startStationFirstTime_id').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
980 1017 $('#startStationEndTime_id').datetimepicker({format : 'HH:mm',locale: 'zh-cn'});
... ...
src/main/resources/static/pages/base/timesmodel/js/dateTimeTool.js
1 1 /** 时间工具类*/
2 2 var DateTimeTool = function () {
  3 + var jsd = [];
  4 + var initSJD = function (map) {
  5 + jsd = map;
  6 + };
3 7 // 数字格式转化为时间格式
4 8 var calculateHours = function (time) {
5 9 if(!time)
... ... @@ -44,9 +48,38 @@ var DateTimeTool = function () {
44 48 +':'
45 49 +(date.getMinutes()<10? '0' + date.getMinutes() : date.getMinutes());
46 50 };
  51 + // 判断时间在什么时间段段内
  52 + var judgmentTimeQuantum = function (t) {
  53 + if(t <= getDateTime(jsd[0].end))
  54 + return 0;
  55 + else if(t > getDateTime(jsd[1].start) && t <= getDateTime(jsd[1].end))
  56 + return 1;
  57 + else if(t > getDateTime(jsd[2].start) && t <= getDateTime(jsd[2].end))
  58 + return 2;
  59 + else if(t > getDateTime(jsd[3].start) && t <= getDateTime(jsd[3].end))
  60 + return 3;
  61 + else if(t > getDateTime(jsd[4].start))
  62 + return 4;
  63 + };
  64 +
  65 + // 8:31-16:00专用
  66 + var judgmentTimeQuantum1 = function (t) {
  67 + var start = DateTimeTool.getDateTime(jsd[2].start);
  68 + if(t > start && t <= start.setHours(start.getHours() + 2))
  69 + return 1;
  70 + else if(t > start.setHours(start.getHours() + 2) && t <= start.setHours(start.getHours() + 4))
  71 + return 2;
  72 + else if(t > start.setHours(start.getHours() + 4) && t <= start.setHours(start.getHours() + 6))
  73 + return 2;
  74 + else if(t > start.setHours(start.getHours() + 6) && t <= DateTimeTool.getDateTime(jsd[2].end))
  75 + return 1;
  76 + };
47 77 return{
  78 + initSJD : initSJD,
48 79 calculateHours : calculateHours,
49 80 getDateTime : getDateTime,
50   - getHHmmStr : getHHmmStr
  81 + getHHmmStr : getHHmmStr,
  82 + judgmentTimeQuantum : judgmentTimeQuantum,
  83 + judgmentTimeQuantum1 : judgmentTimeQuantum1
51 84 }
52 85 }();
... ...
src/main/resources/static/pages/base/timesmodel/js/echartsDrawGanTT.js
... ... @@ -5,7 +5,7 @@ var echartsDrawGTT = function () {
5 5 var upDowndom = document.getElementById("upDownContainer");
6 6 var upDownChart = echarts.init(upDowndom);
7 7 // upDowndom.style.height = '200px';
8   - var option,upDownOption,dataZoomStart = 0,dataZoomEnd = 80;//图层对象
  8 + var option,upDownOption,dataZoomStart = 0,dataZoomEnd = 70;//图层对象
9 9 var historyData = [],// 保存操作图形后的数据集合(撤销与恢复操作)
10 10 _keyIndex = -1,// 记录当前操作步骤 (在撤销与恢复操作时)
11 11 dataUp = [],// (上/下)行发车时刻表数据
... ... @@ -107,7 +107,8 @@ var echartsDrawGTT = function () {
107 107 bcObj.qdz,
108 108 bcObj.zdz,
109 109 bcObj.STOPTIME,
110   - bcObj.isfb = 0
  110 + bcObj.isfb ? 1:0,
  111 + bcObj.qs
111 112 //bcObj.isSwitchXl,
112 113 //bcObj.bz,
113 114 ],
... ... @@ -329,7 +330,7 @@ var echartsDrawGTT = function () {
329 330 bcTypeStr = bcType[type];
330 331  
331 332 var arr = [
332   - '{left|' + timeStr + '}{type|' + bcTypeStr +'}',
  333 + '{left|' + timeStr + '}{type|'+ ((dataZoomEnd - dataZoomStart) <= 70 ? bcType[type] : '') +'}',
333 334 '{left|' + lastStr + '}{left|' + stayStr + '}'
334 335 ];
335 336 return arr.join('\n');
... ... @@ -601,11 +602,17 @@ var echartsDrawGTT = function () {
601 602 lastStr = "行:" + last;
602 603 }
603 604  
  605 + // 分班显示‘分’
  606 + if(params.data.value[16] == 1)
  607 + bcTypeStr = "分";
  608 + else
  609 + bcTypeStr = bcType[type];
  610 +
604 611 if(type == 'normal') {
605 612 stayStr = "停:" + params.data.value[15];
606 613 }
607 614 var arr = [
608   - '{left|' + timeStr + '}{type|'+ ((e.end - e.start) < 80 ? bcType[type] : '') +'}',
  615 + '{left|' + timeStr + '}{type|'+ ((dataZoomEnd - dataZoomStart) <= 70 ? bcType[type] : '') +'}',
609 616 '{left|' + lastStr + '}{left|' + stayStr + '}'
610 617 ];
611 618  
... ... @@ -895,14 +902,15 @@ var echartsDrawGTT = function () {
895 902 data[dataIndex].value[2] = xMax;
896 903 data[dataIndex].value[1] = data[dataIndex].value[2] - data[dataIndex].value[3];
897 904 }
898   -
899 905 }
900   - _keyIndex++;
  906 +
  907 + set_keyIndex(++_keyIndex);
901 908  
902 909 historyData[_keyIndex] = $.extend(true, [], historyData[_keyIndex], data);// 历史数组增加一次数据
903 910 refreshDrag();
904 911 refreshUpDownData();
905 912 historyData.splice(_keyIndex + 1, historyData.length);// 数据改变后过后清除多余的历史数据
  913 + init(historyData[_keyIndex],false,false);
906 914 } else {
907 915 refreshDrag();
908 916 }
... ... @@ -936,7 +944,12 @@ var echartsDrawGTT = function () {
936 944 color: '#333'
937 945 },
938 946 min: 0,
939   - max: 30,
  947 + max: function(value) {
  948 + if(value.max < 30)
  949 + return 30;
  950 + else
  951 + return value.max + 5;
  952 + },
940 953 axisTick: {show: false},
941 954 //axisLine: {lineStyle: {color: '#ccc'}},
942 955 axisLabel: {show: false},
... ...
src/main/resources/static/pages/base/timesmodel/js/gantt.js
1 1 (function() {
  2 + var indexLoad = layer.load(0, {content:'拼命计算中...',time: 10*1000,success: function(layero){
  3 + layero.find('.layui-layer-content').css('padding-top', '40px');
  4 + }});
2 5 // 全屏模式点击事件.
3 6 // $(document).on('click','.fullscreen',function() {
4 7 // if($('.ganttSvgContainer').height()>400)
... ... @@ -34,7 +37,7 @@
34 37 offsetX : offsetX,
35 38 offsetY : offsetY,
36 39 content :'<div class="tipsdscontinue"> <span>图例:</span> <div class="dscrp sx"></div><span>:上行</span> <div class="dscrp xx"></div> <span>:下行</span></br><div/></br>' +
37   - '<div class="tipsdscontinue"> <span>该模块支持鼠标拖拽、鼠标绘制(鼠标右键按下3S开始)框选功能.</span> <div/>'
  40 + '<div class="tipsdscontinue"> <span>该模块支持鼠标拖拽功能.</span> <div/>'
38 41  
39 42 });
40 43 $('.tipso-animation').tipso('show');
... ... @@ -72,10 +75,6 @@
72 75 _paramObj = Main_v2.getFactory().createParameterObj(map, dataMap);
73 76 map.clzs = _paramObj.calcuClzx();
74 77 CSMap = getMaxCarAndStopSpace1(map);
75   - } else if (map.baseRes == '3') { // 主站停站使用v2_2版本
76   - _paramObj = Main_v2.getFactory().createParameterObj(map, dataMap); // TODO:暂时使用v2_1版本的方法,通用的,后续再放到v2_2版本中
77   - map.clzs = InternalScheduleObj_v2_2.calcuClzx(_paramObj);
78   - CSMap = getMaxCarAndStopSpace1(map);
79 78 }
80 79  
81 80 // 定义时间参数.
... ... @@ -97,8 +96,6 @@
97 96 // TODO:CSMap.maxCar 之后要设定一下的
98 97 data = Main_v2.BXPplaceClassesTime03(_paramObj, CSMap.maxCar);
99 98 Main_v2.exportDataConfig(data.aInternalLpObj);
100   - } else if (map.baseRes == '3') { // 主站停站使用v2_2版本
101   - data = Main_v2_2.BXPplaceClassesTime03(_paramObj, CSMap.maxCar);
102 99 }
103 100  
104 101 }else {
... ... @@ -139,11 +136,8 @@
139 136 // graph.addHistory();
140 137 // // 初始化右键菜单.
141 138 // contextInit(graph);
142   -
143   - if (map.baseRes == '3') {
144   - // 导入导出设置
145   - Main_v2_2.exportExcelConfig($_GlobalGraph.getDataArray);
146   - }
  139 + // 关闭弹出层
  140 + layer.close(indexLoad);
147 141 },500);
148 142  
149 143 /**
... ... @@ -218,9 +212,10 @@
218 212 'gftzsj': BaseFun.formatPairing(gatps.gfupStopTime,gatps.gfdownStopTime),// 高峰停站时间.
219 213 'dgtzsj' : BaseFun.formatPairing(gatps.dgupStopTime,gatps.dgdownStopTime),// 低谷停站时间.
220 214 'dgmaxtzsj' : parseInt(gatps.dgmaxtzsj),// 低谷最大停站时间.
221   - 'dgmaxfcjx' : parseInt(gatps.dgmaxfcjx),// 低谷最大发车间隙.
  215 + // 'dgmaxfcjx' : parseInt(gatps.dgmaxfcjx),// 低谷最大发车间隙.
  216 + 'dgmaxfcjx' : 20,// 低谷最大发车间隙.
222 217 'map' : gatps,
223   - 'zzsj':gatps.zzsj,// 周转时间.
  218 + 'zzsj':gatps.zzsj// 周转时间.
224 219 };
225 220 }
226 221  
... ...
src/main/resources/static/pages/base/timesmodel/js/systemTools.js
... ... @@ -13,8 +13,7 @@ $(&#39;.recover&#39;).on(&#39;click&#39;,function() {
13 13 echartsDrawGTT.set_keyIndex(++_keyIndex);
14 14 var historyData = echartsDrawGTT.getHistoryData();
15 15 var data = $.extend(true, [], data, historyData[_keyIndex]);
16   - echartsDrawGTT.init(data,false,false);
17   - echartsDrawGTT.refreshDrag();
  16 + echartsDrawGTT.init(data,false,false,false);
18 17 layer.msg('恢复到操作记录的【第'+(_keyIndex+1)+'步】了!');
19 18 }
20 19 });
... ... @@ -33,8 +32,7 @@ $(&quot;.revoke&quot;).on(&quot;click&quot;,function(){
33 32 echartsDrawGTT.set_keyIndex(--_keyIndex);
34 33 var historyData = echartsDrawGTT.getHistoryData();
35 34 var data = $.extend(true, [], data, historyData[_keyIndex]);
36   - echartsDrawGTT.init(data,false,false);
37   - echartsDrawGTT.refreshDrag();
  35 + echartsDrawGTT.init(data,false,false,false);
38 36 layer.msg('撤销到操作记录的【第'+(_keyIndex+1)+'步】了!');
39 37 }
40 38 });
... ... @@ -101,8 +99,7 @@ $(&#39;#bcAdjustListSubmit&#39;).on(&#39;click&#39;,function() {
101 99 data[bcAdjustList[i]].value[0] = lpName;
102 100 data[bcAdjustList[i]].value[4] = lpDataCount[lpName][2];
103 101 }
104   - echartsDrawGTT.init(data,false,true);
105   - echartsDrawGTT.refreshDrag();
  102 + echartsDrawGTT.init(data,false,true,false);
106 103 } else
107 104 layer.msg('没有找到目标路牌,请重新选择!');
108 105 $('.bc-adjust-list').addClass('hidden');
... ... @@ -148,8 +145,7 @@ function dropdownMenuDelete(dataIndex) {
148 145 // 关闭弹出层.
149 146 layer.closeAll();
150 147 data.splice(dataIndex,1);
151   - echartsDrawGTT.init(data,false,true);
152   - echartsDrawGTT.refreshDrag();
  148 + echartsDrawGTT.init(data,false,true,false);
153 149 layer.msg('删除成功!');
154 150 });
155 151 }
... ... @@ -180,8 +176,7 @@ function dropdownMenuSwitchUpDown(dataIndex) {
180 176 data[dataIndex].value[3] = parseInt(dataMap.map.downInTimer)*60000;
181 177 data[dataIndex].value[2] = data[dataIndex].value[1] + data[dataIndex].value[3];
182 178 }
183   - echartsDrawGTT.init(data,false,true);
184   - echartsDrawGTT.refreshDrag();
  179 + echartsDrawGTT.init(data,false,true,false);
185 180 layer.msg('设置为上行成功!');
186 181 }
187 182 // 路牌切换上下行
... ... @@ -213,8 +208,7 @@ function dropdownMenuLpSwitchUpDown(dataIndex) {
213 208 }
214 209 }
215 210 }
216   - echartsDrawGTT.init(data,false,true);
217   - echartsDrawGTT.refreshDrag();
  211 + echartsDrawGTT.init(data,false,true,false);
218 212 layer.msg('路牌切换上下行成功!');
219 213 }
220 214 // 设为正常
... ... @@ -226,11 +220,7 @@ function dropdownMenuSetNormal(dataIndex) {
226 220  
227 221 if(!isType(data[dataIndex].value[6],'设置为正常班次','normal','正常班次')) {
228 222 data[dataIndex].value[6] = 'normal';
229   - historyData.push(data);
230   - echartsDrawGTT.set_keyIndex(++_keyIndex);
231   - echartsDrawGTT.setHistoryData(historyData);
232   - echartsDrawGTT.refreshDrag();
233   - echartsDrawGTT.refreshUpDownData();
  223 + echartsDrawGTT.init(data,false,true,false);
234 224 layer.msg('设置为正常成功!');
235 225 }
236 226 }
... ... @@ -242,11 +232,7 @@ function dropdownMenuSetRegion(dataIndex) {
242 232 data = $.extend(true, [], data, historyData[_keyIndex]);
243 233 if(!isType(data[dataIndex].value[6],'设置为区间班次','region','区间班次')) {
244 234 data[dataIndex].value[6] = 'region';
245   - historyData.push(data);
246   - echartsDrawGTT.set_keyIndex(++_keyIndex);
247   - echartsDrawGTT.setHistoryData(historyData);
248   - echartsDrawGTT.refreshDrag();
249   - echartsDrawGTT.refreshUpDownData();
  235 + echartsDrawGTT.init(data,false,true,false);
250 236 layer.msg('设置为区间成功!');
251 237 }
252 238 }
... ... @@ -258,11 +244,7 @@ function dropdownMenuSetFb(dataIndex) {
258 244 data = $.extend(true, [], data, historyData[_keyIndex]);
259 245 if(!isType(data[dataIndex].value[6],'设置为分班班次') && !isType(data[dataIndex].value[16],'设置为分班班次',1,'分班班次')) {
260 246 data[dataIndex].value[16] = 1;
261   - historyData.push(data);
262   - echartsDrawGTT.set_keyIndex(++_keyIndex);
263   - echartsDrawGTT.setHistoryData(historyData);
264   - echartsDrawGTT.refreshDrag();
265   - echartsDrawGTT.refreshUpDownData();
  247 + echartsDrawGTT.init(data,false,true,false);
266 248 layer.msg('设置为分班成功!');
267 249 }
268 250 }
... ... @@ -274,11 +256,7 @@ function dropdownMenuSetNoFb(dataIndex) {
274 256 data = $.extend(true, [], data, historyData[_keyIndex]);
275 257 if(!isType(data[dataIndex].value[6],'取消分班') && !isType(data[dataIndex].value[16],0,'不是分班班次')) {
276 258 data[dataIndex].value[16] = 0;
277   - historyData.push(data);
278   - echartsDrawGTT.set_keyIndex(++_keyIndex);
279   - echartsDrawGTT.setHistoryData(historyData);
280   - echartsDrawGTT.refreshDrag();
281   - echartsDrawGTT.refreshUpDownData();
  259 + echartsDrawGTT.init(data,false,true,false);
282 260 layer.msg('取消分班成功!');
283 261 }
284 262 }
... ... @@ -290,11 +268,7 @@ function dropdownMenuSetVenting(dataIndex) {
290 268 data = $.extend(true, [], data, historyData[_keyIndex]);
291 269 if(!isType(data[dataIndex].value[6],'设置为直放班次','venting','直放班次')) {
292 270 data[dataIndex].value[6] = 'venting';
293   - historyData.push(data);
294   - echartsDrawGTT.set_keyIndex(++_keyIndex);
295   - echartsDrawGTT.setHistoryData(historyData);
296   - echartsDrawGTT.refreshDrag();
297   - echartsDrawGTT.refreshUpDownData();
  271 + echartsDrawGTT.init(data,false,true,false);
298 272 layer.msg('设置为直放成功!');
299 273 }
300 274 }
... ... @@ -306,11 +280,7 @@ function dropdownMenuSetMajor(dataIndex) {
306 280 data = $.extend(true, [], data, historyData[_keyIndex]);
307 281 if(!isType(data[dataIndex].value[6],'设置为放站班次','major','放站班次')){
308 282 data[dataIndex].value[6] = 'major' ;
309   - historyData.push(data);
310   - echartsDrawGTT.set_keyIndex(++_keyIndex);
311   - echartsDrawGTT.setHistoryData(historyData);
312   - echartsDrawGTT.refreshDrag();
313   - echartsDrawGTT.refreshUpDownData();
  283 + echartsDrawGTT.init(data,false,true,false);
314 284 layer.msg('设置为放站成功!');
315 285 }
316 286 }
... ... @@ -460,6 +430,6 @@ $(&#39;.parambtn&#39;).on(&#39;click&#39;, function() {
460 430 $.get('/pages/base/timesmodel/paramadd.html', function(m){
461 431 $(pjaxContainer).append(m);
462 432 // 规定被选元素要触发的事件。可以使自定义事件(使用 bind() 函数来附加),或者任何标准事件。
463   - $('#paramadd_mobal').trigger('paramAddMobal.show', [Main_v2, Main_v2_2, InternalScheduleObj_v2_2]);
  433 + $('#paramadd_mobal').trigger('paramAddMobal.show', Main_v2);
464 434 });
465 435 });
466 436 \ No newline at end of file
... ...
src/main/resources/static/pages/base/timesmodel/js/v1/AdjustTrip.js
... ... @@ -15,26 +15,47 @@
15 15 */
16 16 var AdjustTrip = function () {
17 17 var departureClearanceAdjust = function (bcList, dataMap) {
18   - var upBc = new Array(), downBc = new Array();
19   - // 取出上下行班次,并按发车时间排序
20   - $.each(bcList, function () {
21   - if(this.bcType == "normal"){
22   - if(this.xlDir == "relationshipGraph-up")
23   - upBc.push(this);
24   - if(this.xlDir == "relationshipGraph-down")
25   - downBc.push(this);
  18 + var upDownbc = bcFun.getUpAndDownBc(bcList, dataMap);
  19 +
  20 + // 升序排序
  21 + // upDownbc[0].sort(function(a,b){return DateTimeTool.getDateTime(a.fcsj)-DateTimeTool.getDateTime(b.fcsj)});
  22 + // upDownbc[1].sort(function(a,b){return DateTimeTool.getDateTime(a.fcsj)-DateTimeTool.getDateTime(b.fcsj)});
  23 + for(var i=1; i<20; i++) {
  24 + if(i%2 == 0) {
  25 + calculate(upDownbc[1], bcList, dataMap, 5);
  26 + calculate(upDownbc[0], bcList, dataMap, 5);
  27 + } else {
  28 + calculate(upDownbc[0], bcList, dataMap, 5);
  29 + calculate(upDownbc[1], bcList, dataMap, 5);
  30 +
26 31 }
27   - });
28   - // upBc.sort(function(a,b){return a.fcint-b.fcint});
29   - // downBc.sort(function(a,b){return a.fcint-b.fcint});
30   - calculate(upBc, bcList, dataMap, 11);
31   - calculate(downBc, bcList, dataMap, 11);
  32 + }
  33 + for(var i=1; i<20; i++) {
  34 + if(i%2 == 0) {
  35 + calculateReverse(upDownbc[1], bcList, dataMap, 5);
  36 + calculateReverse(upDownbc[0], bcList, dataMap, 5);
  37 + } else {
  38 + calculateReverse(upDownbc[0], bcList, dataMap, 5);
  39 + calculateReverse(upDownbc[1], bcList, dataMap, 5);
  40 +
  41 + }
  42 + }
  43 + for(var i=1; i<10; i++) {
  44 + if(i%2 == 0) {
  45 + calculate(upDownbc[1], bcList, dataMap, 5);
  46 + calculate(upDownbc[0], bcList, dataMap, 5);
  47 + } else {
  48 + calculate(upDownbc[0], bcList, dataMap, 5);
  49 + calculate(upDownbc[1], bcList, dataMap, 5);
  50 +
  51 + }
  52 + }
32 53 };
33 54  
34 55 var iBcCountOfGroup = 3; // 3个班次一次参与计算
35 56 var dirBcOfGroup = [];
36 57 var dirBcIntervalOfGroup = []; // 班次间隔列表,3个班次,2个间隔
37   - var oBcFcTime; // 班次发车时间
  58 + var oBcFcTime = null; // 班次发车时间
38 59 /**
39 60 * 平衡车距内部方法。
40 61 * @param dirBc {array} 单方向班次列表
... ... @@ -46,19 +67,20 @@ var AdjustTrip = function () {
46 67 var calculate = function (dirBc, bcList, dataMap, iFre) {
47 68 if(iFre > 0){
48 69 // 升序排序
49   - dirBc.sort(function(a,b){return a.fcint-b.fcint});
  70 + dirBc.sort(function(a,b){return DateTimeTool.getDateTime(a.fcsj)-DateTimeTool.getDateTime(b.fcsj)});
50 71  
51 72 for (var i = 0; i <= dirBc.length; i++) {
52 73 // 获取班次列表
53 74 _calcuBcGroup(i, dirBc);
54 75  
55   - if (dirBcOfGroup.length > 0) {
  76 + if (dirBcOfGroup.length > 2) {
56 77 // 获取中间预调整的班次时间
57   - oBcFcTime = dirBcOfGroup[1].fcint;
  78 + oBcFcTime = dirBcOfGroup[1].fcsj;
58 79 // 获取发车间隙:用发车时间判断
59   - var fcjx = dataMap.fcjx[judgmentTimeQuantum(oBcFcTime)];
  80 + var fcjx = dataMap.fcjx[DateTimeTool.judgmentTimeQuantum(DateTimeTool.getDateTime(oBcFcTime))];
60 81 // 发车时间所在时间段
61   - // var timeQuantum = judgmentTimeQuantum(oBcFcTime);
  82 + // var timeQuantum = DateTimeTool.judgmentTimeQuantum(oBcFcTime);
  83 +
62 84 if (dirBcIntervalOfGroup[0] < fcjx.min) {
63 85 // 发车间隙调整为高峰发车间隙 +时间
64 86 if (_isModifyBcFcsj(
... ... @@ -73,6 +95,21 @@ var AdjustTrip = function () {
73 95 dataMap,
74 96 1
75 97 );
  98 + } else {
  99 + // 最后一个班次不能为末班车 中间班次不能调整,就调整后一个的班次
  100 + if (!bcFun.lpBcIsHaveLast(dirBcOfGroup,dataMap.smbcsjArr) && _isModifyBcFcsj(
  101 + bcList,
  102 + dirBcOfGroup[2],
  103 + dataMap,
  104 + -1
  105 + )) {
  106 + _modifyFcsj(
  107 + bcList,
  108 + dirBcOfGroup[2],
  109 + dataMap,
  110 + -1
  111 + );
  112 + }
76 113 }
77 114 } else if (dirBcIntervalOfGroup[0] > fcjx.max) {
78 115 // 发车间隙调整为高峰发车间隙 -时间
... ... @@ -81,17 +118,35 @@ var AdjustTrip = function () {
81 118 dirBcOfGroup[1],
82 119 dataMap,
83 120 -1
  121 + // fcjx.max - dirBcIntervalOfGroup[0]
84 122 )) {
85 123 _modifyFcsj(
86 124 bcList,
87 125 dirBcOfGroup[1],
88 126 dataMap,
89 127 -1
  128 + // fcjx.max - dirBcIntervalOfGroup[0]
90 129 );
  130 + } else {
  131 + // 下一个班次不能为首班车 中间班次不能调整,就调整下一个的班次
  132 + if (!bcFun.lpBcIsHaveLast(dirBcOfGroup,dataMap.smbcsjArr) && _isModifyBcFcsj(
  133 + bcList,
  134 + dirBcOfGroup[2],
  135 + dataMap,
  136 + fcjx.max - dirBcIntervalOfGroup[0]
  137 + )) {
  138 + _modifyFcsj(
  139 + bcList,
  140 + dirBcOfGroup[2],
  141 + dataMap,
  142 + fcjx.max - dirBcIntervalOfGroup[0]
  143 + );
  144 + }
91 145 }
92 146 } else {
93 147 // -1或+1分钟
94 148 if (Math.abs(dirBcIntervalOfGroup[0] - dirBcIntervalOfGroup[1]) <= 1) {
  149 + continue;
95 150 // 两个间隔相差1分钟,不处理
96 151 } else if (dirBcIntervalOfGroup[0] > dirBcIntervalOfGroup[1]) {
97 152 if (_isModifyBcFcsj(
... ... @@ -106,6 +161,21 @@ var AdjustTrip = function () {
106 161 dataMap,
107 162 -1
108 163 );
  164 + } else {
  165 + // 前一个班次不能为首班车 中间班次不能调整,就调整前一个的班次
  166 + if (!bcFun.lpBcIsHaveFirst(dirBcOfGroup,dataMap.smbcsjArr) && _isModifyBcFcsj(
  167 + bcList,
  168 + dirBcOfGroup[0],
  169 + dataMap,
  170 + 1
  171 + )) {
  172 + _modifyFcsj(
  173 + bcList,
  174 + dirBcOfGroup[0],
  175 + dataMap,
  176 + 1
  177 + );
  178 + }
109 179 }
110 180 } else {
111 181 if (_isModifyBcFcsj(
... ... @@ -120,6 +190,21 @@ var AdjustTrip = function () {
120 190 dataMap,
121 191 1
122 192 );
  193 + } else {
  194 + // 最后一个班次不能为末班车 中间班次不能调整,就调整后一个的班次
  195 + if (!bcFun.lpBcIsHaveLast(dirBcOfGroup,dataMap.smbcsjArr) && _isModifyBcFcsj(
  196 + bcList,
  197 + dirBcOfGroup[2],
  198 + dataMap,
  199 + -1
  200 + )) {
  201 + _modifyFcsj(
  202 + bcList,
  203 + dirBcOfGroup[2],
  204 + dataMap,
  205 + -1
  206 + );
  207 + }
123 208 }
124 209 }
125 210 }
... ... @@ -140,7 +225,10 @@ var AdjustTrip = function () {
140 225 dirBcOfGroup = [];
141 226 dirBcIntervalOfGroup = [];
142 227 for (var i = iStartIndex; i < iStartIndex + iBcCountOfGroup && iStartIndex < dirBc.length - 2; i++) {
143   - dirBcOfGroup.push(dirBc[i]);
  228 + if(dirBc[i].bcType == 'cf')
  229 + iStartIndex++;
  230 + else
  231 + dirBcOfGroup.push(dirBc[i]);
144 232 }
145 233 for (var j = 0; j < dirBcOfGroup.length - 1; j++) {
146 234 dirBcIntervalOfGroup.push((DateTimeTool.getDateTime(dirBcOfGroup[j + 1].fcsj).getTime() - DateTimeTool.getDateTime(dirBcOfGroup[j].fcsj).getTime())/60000);
... ... @@ -149,6 +237,201 @@ var AdjustTrip = function () {
149 237 };
150 238  
151 239 /**
  240 + * 平衡车距内部方法(反方向)。
  241 + * @param dirBc {array} 单方向班次列表
  242 + * @param bcList {array} 所有班次列表对象
  243 + * @param dataMap {array} 参数对象
  244 + * @param iFre {int} 递归次数
  245 + * @private
  246 + */
  247 + var calculateReverse = function (dirBc, bcList, dataMap, iFre) {
  248 + if(iFre > 0){
  249 + // 降序排序
  250 + dirBc.sort(function(a,b){return DateTimeTool.getDateTime(b.fcsj)-DateTimeTool.getDateTime(a.fcsj)});
  251 +
  252 + for (var i = 0; i <= dirBc.length; i++) {
  253 + // 获取班次列表
  254 + _calcuReverseBcGroup(i, dirBc);
  255 +
  256 + if (dirBcOfGroup.length > 2) {
  257 + // 获取中间预调整的班次时间
  258 + oBcFcTime = dirBcOfGroup[1].fcsj;
  259 + // 获取发车间隙:用发车时间判断
  260 + var fcjx = dataMap.fcjx[DateTimeTool.judgmentTimeQuantum(DateTimeTool.getDateTime(oBcFcTime))];
  261 + // 发车时间所在时间段
  262 + // var timeQuantum = DateTimeTool.judgmentTimeQuantum(oBcFcTime);
  263 +
  264 + if (dirBcIntervalOfGroup[0] < fcjx.min) {
  265 + // 发车间隙调整为高峰发车间隙 +时间
  266 + if (_isModifyBcFcsj(
  267 + bcList,
  268 + dirBcOfGroup[1],
  269 + dataMap,
  270 + -1
  271 + )) {
  272 + _modifyFcsj(
  273 + bcList,
  274 + dirBcOfGroup[1],
  275 + dataMap,
  276 + -1
  277 + );
  278 + } else {
  279 + // 最后一个班次不能为末班车 中间班次不能调整,就调整后一个的班次
  280 + if (!bcFun.lpBcIsHaveFirst(dirBcOfGroup,dataMap.smbcsjArr) && _isModifyBcFcsj(
  281 + bcList,
  282 + dirBcOfGroup[2],
  283 + dataMap,
  284 + 1
  285 + )) {
  286 + _modifyFcsj(
  287 + bcList,
  288 + dirBcOfGroup[2],
  289 + dataMap,
  290 + 1
  291 + );
  292 + }
  293 + }
  294 + } else if (dirBcIntervalOfGroup[0] > fcjx.max) {
  295 + // 发车间隙调整为高峰发车间隙 -时间
  296 + if (_isModifyBcFcsj(
  297 + bcList,
  298 + dirBcOfGroup[1],
  299 + dataMap,
  300 + 1
  301 + // fcjx.max - dirBcIntervalOfGroup[0]
  302 + )) {
  303 + _modifyFcsj(
  304 + bcList,
  305 + dirBcOfGroup[1],
  306 + dataMap,
  307 + 1
  308 + // fcjx.max - dirBcIntervalOfGroup[0]
  309 + );
  310 + } else {
  311 + // 最后一个班次不能为首班车 中间班次不能调整,就调整后一个的班次
  312 + if (!bcFun.lpBcIsHaveFirst(dirBcOfGroup,dataMap.smbcsjArr) && _isModifyBcFcsj(
  313 + bcList,
  314 + dirBcOfGroup[2],
  315 + dataMap,
  316 + dirBcIntervalOfGroup[0] - fcjx.max
  317 + )) {
  318 + _modifyFcsj(
  319 + bcList,
  320 + dirBcOfGroup[2],
  321 + dataMap,
  322 + dirBcIntervalOfGroup[0] - fcjx.max
  323 + );
  324 + } else {
  325 + // 前一个班次不能为首班车 中间班次不能调整,就调整前一个的班次
  326 + if (!bcFun.lpBcIsHaveLast(dirBcOfGroup[0]) && _isModifyBcFcsj(
  327 + bcList,
  328 + dirBcOfGroup[0],
  329 + dataMap,
  330 + -1
  331 + )) {
  332 + _modifyFcsj(
  333 + bcList,
  334 + dirBcOfGroup[0],
  335 + dataMap,
  336 + -1
  337 + );
  338 + }
  339 + }
  340 + }
  341 + } else {
  342 + // -1或+1分钟
  343 + if (Math.abs(dirBcIntervalOfGroup[0] - dirBcIntervalOfGroup[1]) <= 1) {
  344 + continue;
  345 + // 两个间隔相差1分钟,不处理
  346 + } else if (dirBcIntervalOfGroup[0] > dirBcIntervalOfGroup[1]) {
  347 + if (_isModifyBcFcsj(
  348 + bcList,
  349 + dirBcOfGroup[1],
  350 + dataMap,
  351 + 1
  352 + )) {
  353 + _modifyFcsj(
  354 + bcList,
  355 + dirBcOfGroup[1],
  356 + dataMap,
  357 + 1
  358 + );
  359 + } else {
  360 + // 前一个班次不能为首班车 中间班次不能调整,就调整前一个的班次
  361 + if (!bcFun.lpBcIsHaveLast(dirBcOfGroup,dataMap.smbcsjArr) && _isModifyBcFcsj(
  362 + bcList,
  363 + dirBcOfGroup[0],
  364 + dataMap,
  365 + -1
  366 + )) {
  367 + _modifyFcsj(
  368 + bcList,
  369 + dirBcOfGroup[0],
  370 + dataMap,
  371 + -1
  372 + );
  373 + }
  374 + }
  375 + } else {
  376 + if (_isModifyBcFcsj(
  377 + bcList,
  378 + dirBcOfGroup[1],
  379 + dataMap,
  380 + -1
  381 + )) {
  382 + _modifyFcsj(
  383 + bcList,
  384 + dirBcOfGroup[1],
  385 + dataMap,
  386 + -1
  387 + );
  388 + } else {
  389 + // 最后一个班次不能为末班车 中间班次不能调整,就调整后一个的班次
  390 + if (!bcFun.lpBcIsHaveFirst(dirBcOfGroup,dataMap.smbcsjArr) && _isModifyBcFcsj(
  391 + bcList,
  392 + dirBcOfGroup[2],
  393 + dataMap,
  394 + 1
  395 + )) {
  396 + _modifyFcsj(
  397 + bcList,
  398 + dirBcOfGroup[2],
  399 + dataMap,
  400 + 1
  401 + );
  402 + }
  403 + }
  404 + }
  405 + }
  406 + }
  407 + }
  408 + // bcFun.deleteNotInRangeBc(dirBc, dataMap.smbcsjArr[].kssj, dataMap.smbcsjArr[].jssj);
  409 + // 递归迭代
  410 + calculateReverse(dirBc, bcList, dataMap, iFre - 1);
  411 + }
  412 + };
  413 + /**
  414 + * 按照规则计算班次列表()。
  415 + * @param iStartIndex {int} 开始索引
  416 + * @param dirBc {array} 班次列表
  417 + * @private
  418 + */
  419 + var _calcuReverseBcGroup = function(iStartIndex, dirBc) {
  420 + dirBcOfGroup = [];
  421 + dirBcIntervalOfGroup = [];
  422 + for (var i = iStartIndex; i < iStartIndex + iBcCountOfGroup && iStartIndex < dirBc.length - 2; i++) {
  423 + if(dirBc[i].bcType == 'cf')
  424 + iStartIndex++;
  425 + else
  426 + dirBcOfGroup.push(dirBc[i]);
  427 + }
  428 + for (var j = 0; j < dirBcOfGroup.length - 1; j++) {
  429 + dirBcIntervalOfGroup.push((DateTimeTool.getDateTime(dirBcOfGroup[j].fcsj).getTime() - DateTimeTool.getDateTime(dirBcOfGroup[j + 1].fcsj).getTime())/60000);
  430 + // dirBcIntervalOfGroup.push(Math.round((dirBcOfGroup[j + 1].fcint - dirBcOfGroup[j].fcint)/360000));
  431 + }
  432 + };
  433 +
  434 + /**
152 435 * 是否可以调整班次发车时间。
153 436 * @param bcList {InternalLpObj} 所有班次对象
154 437 * @param oBc {InternalBcObj} 调整班次对象
... ... @@ -159,19 +442,21 @@ var AdjustTrip = function () {
159 442 // 获取前后班次
160 443 var bc = getLpPrevAndNextBc(bcList, oBc),
161 444 prevBc = bc[0],
162   - nextBc = bc[1];
  445 + nextBc = bc[1],
  446 + cfBc = bc[2],
  447 + cfBcsj = 0;
  448 + if(cfBc != null){
  449 + cfBcsj = cfBc.bcsj;
  450 + }
163 451 if (prevBc != null && nextBc != null){
164   - if (prevBc.bcType == 'cf') { // 如果是吃饭班次,不能修改发车时间
165   - return false;
166   - }
167 452 // 上一个班次的停站范围, 本班次停站范围, 上一班次停站时间, 本班次停站时间
168   - var prevStopTimeScope = dataMap.tzsj[bcFun.upDownStrConvertNum(prevBc.xlDir)][judgmentTimeQuantum(prevBc.fcint)],
169   - StopTimeScope = dataMap.tzsj[bcFun.upDownStrConvertNum(oBc.xlDir)][judgmentTimeQuantum(oBc.fcint)],
  453 + var prevStopTimeScope = dataMap.tzsj[bcFun.upDownStrConvertNum(prevBc.xlDir)][DateTimeTool.judgmentTimeQuantum(prevBc.fcint)],
  454 + StopTimeScope = dataMap.tzsj[bcFun.upDownStrConvertNum(oBc.xlDir)][DateTimeTool.judgmentTimeQuantum(oBc.fcint)],
170 455 // prevBcStopTime = prevBc.STOPTIME + iStep,
171 456 // BcStopTime = oBc.STOPTIME + iStep;
172 457 // iStep为班次往后移动的时间,调整后的时间 = 停站 - 往后移动的时间
173 458 prevBcStopTime = (DateTimeTool.getDateTime(oBc.fcsj) - DateTimeTool.getDateTime(prevBc.ARRIVALTIME))/60000 + iStep,
174   - BcStopTime = (DateTimeTool.getDateTime(nextBc.fcsj) - DateTimeTool.getDateTime(oBc.ARRIVALTIME))/60000 - iStep;
  459 + BcStopTime = (DateTimeTool.getDateTime(nextBc.fcsj) - DateTimeTool.getDateTime(oBc.ARRIVALTIME))/60000 - iStep - cfBcsj; // 如果有吃饭,则多减掉一个吃饭班次的运行时间
175 460 // 班次移动调整发车间隔时,需要考录的移动班次的前后停站
176 461 if (prevBcStopTime >= 0 && BcStopTime >= 0) {
177 462 return true;
... ... @@ -179,9 +464,9 @@ var AdjustTrip = function () {
179 464 return false;
180 465 }
181 466 } else if(prevBc == null && nextBc != null) {
182   - var StopTimeScope = dataMap.tzsj[bcFun.upDownStrConvertNum(nextBc.xlDir)][judgmentTimeQuantum(nextBc.fcint)],
183   - BcStopTime = (DateTimeTool.getDateTime(nextBc.fcsj) - DateTimeTool.getDateTime(oBc.ARRIVALTIME))/60000 - iStep;
184   - // 班次移动调整发车间隔时,需要考录的移动班次的前后停站 TODO:没有判定调整发车时间后会不会不够
  467 + var StopTimeScope = dataMap.tzsj[bcFun.upDownStrConvertNum(nextBc.xlDir)][DateTimeTool.judgmentTimeQuantum(nextBc.fcint)],
  468 + BcStopTime = (DateTimeTool.getDateTime(nextBc.fcsj) - DateTimeTool.getDateTime(oBc.ARRIVALTIME))/60000 - iStep - cfBcsj; // 如果有吃饭,则多减掉一个吃饭班次的运行时间
  469 + // 班次移动调整发车间隔时,需要考录的移动班次的前后停站
185 470 if (BcStopTime >= 0) {
186 471 return true;
187 472 } else {
... ... @@ -189,10 +474,7 @@ var AdjustTrip = function () {
189 474 }
190 475 // 如果是第一个班次为空
191 476 } else if(prevBc != null && nextBc == null) {
192   - if (prevBc.bcType == 'cf') { // 如果是吃饭班次,不能修改发车时间
193   - return false;
194   - }
195   - var prevStopTimeScope = dataMap.tzsj[bcFun.upDownStrConvertNum(prevBc.xlDir)][judgmentTimeQuantum(prevBc.fcint)],
  477 + var prevStopTimeScope = dataMap.tzsj[bcFun.upDownStrConvertNum(prevBc.xlDir)][DateTimeTool.judgmentTimeQuantum(prevBc.fcint)],
196 478 prevBcStopTime = (DateTimeTool.getDateTime(oBc.fcsj) - DateTimeTool.getDateTime(prevBc.ARRIVALTIME))/60000 + iStep;
197 479 // 班次移动调整发车间隔时,需要考录的移动班次的前后停站
198 480 if (prevBcStopTime >= 0) {
... ... @@ -202,53 +484,6 @@ var AdjustTrip = function () {
202 484 }
203 485 }
204 486 }
205   - /*function _isModifyBcFcsj(bcList, oBc, dataMap, iStep) {
206   - // 获取前后班次
207   - var bc = getLpPrevAndNextBc(bcList, oBc),
208   - prevBc = bc[0],
209   - nextBc = bc[1];
210   - if (prevBc != null && nextBc != null){
211   - if (prevBc.bcType == 'cf') { // 如果是吃饭班次,不能修改发车时间
212   - return false;
213   - }
214   - // 上一个班次的停站范围, 本班次停站范围, 上一班次停站时间, 本班次停站时间
215   - var prevStopTimeScope = dataMap.tzsj[bcFun.upDownStrConvertNum(prevBc.xlDir)][judgmentTimeQuantum(prevBc.fcint)],
216   - StopTimeScope = dataMap.tzsj[bcFun.upDownStrConvertNum(oBc.xlDir)][judgmentTimeQuantum(oBc.fcint)],
217   - // prevBcStopTime = prevBc.STOPTIME + iStep,
218   - // BcStopTime = oBc.STOPTIME + iStep;
219   - // iStep为班次往后移动的时间,调整后的时间 = 停站 - 往后移动的时间
220   - prevBcStopTime = (DateTimeTool.getDateTime(oBc.fcsj) - DateTimeTool.getDateTime(prevBc.ARRIVALTIME))/60000 + iStep,
221   - BcStopTime = (DateTimeTool.getDateTime(nextBc.fcsj) - DateTimeTool.getDateTime(oBc.ARRIVALTIME))/60000 - iStep;
222   - // 班次移动调整发车间隔时,需要考录的移动班次的前后停站
223   - if (prevBcStopTime >= prevStopTimeScope.min && BcStopTime >= StopTimeScope.min) {
224   - return true;
225   - } else {
226   - return false;
227   - }
228   - } else if(prevBc == null && nextBc != null) {
229   - var StopTimeScope = dataMap.tzsj[bcFun.upDownStrConvertNum(nextBc.xlDir)][judgmentTimeQuantum(nextBc.fcint)],
230   - BcStopTime = (DateTimeTool.getDateTime(nextBc.fcsj) - DateTimeTool.getDateTime(oBc.ARRIVALTIME))/60000 - iStep;
231   - // 班次移动调整发车间隔时,需要考录的移动班次的前后停站 TODO:没有判定调整发车时间后会不会不够
232   - if (BcStopTime >= StopTimeScope.min) {
233   - return true;
234   - } else {
235   - return false;
236   - }
237   - // 如果是第一个班次为空
238   - } else if(prevBc != null && nextBc == null) {
239   - if (prevBc.bcType == 'cf') { // 如果是吃饭班次,不能修改发车时间
240   - return false;
241   - }
242   - var prevStopTimeScope = dataMap.tzsj[bcFun.upDownStrConvertNum(prevBc.xlDir)][judgmentTimeQuantum(prevBc.fcint)],
243   - prevBcStopTime = (DateTimeTool.getDateTime(oBc.fcsj) - DateTimeTool.getDateTime(prevBc.ARRIVALTIME))/60000 + iStep;
244   - // 班次移动调整发车间隔时,需要考录的移动班次的前后停站
245   - if (prevBcStopTime >= prevStopTimeScope.min) {
246   - return true;
247   - } else {
248   - return false;
249   - }
250   - }
251   - }*/
252 487  
253 488 /**
254 489 * 调整发车时间(调整当前班次后,需要处理后续路牌的所有班次)。
... ... @@ -261,19 +496,26 @@ var AdjustTrip = function () {
261 496 function _modifyFcsj(bcList, oBc, dataMap, iMin) {
262 497 var bc = getLpPrevAndNextBc(bcList, oBc),
263 498 prevBc = bc[0],
264   - nextBc = bc[1];
  499 + nextBc = bc[1],
  500 + cfBc = bc[2];
265 501 var fcsj = DateTimeTool.getDateTime(oBc.fcsj);
266 502 fcsj.setMinutes(fcsj.getMinutes() + iMin);
267 503 $.each(bcList, function () {
268   - if(this.lpNo == oBc.lpNo && this.fcno == oBc.fcno){
  504 + if(this.lpNo == oBc.lpNo && this.fcno == oBc.fcno && this.bcType != 'cf'){
269 505 var time = new Date(fcsj);
270   - this.ARRIVALTIME = DateTimeTool.getHHmmStr(time.setMinutes(time.getMinutes() + this.bcsj));
  506 + time.setMinutes(time.getMinutes() + this.bcsj);
  507 + this.ARRIVALTIME = DateTimeTool.getHHmmStr(time);
271 508 this.fcsj = DateTimeTool.getHHmmStr(fcsj);
272 509 this.fcint = fcsj.getTime();
273   - // 前一个班次停站时间 = 原停站时间 - 中间班次移动时间
274   - this.STOPTIME -= iMin;
  510 + // 不是分班班次这调整停站 前一个班次停站时间 = 原停站时间 - 中间班次移动时间
  511 + if(this.isfb == 0)
  512 + this.STOPTIME -= iMin;
  513 + if(cfBc != null) {
  514 + cfBc.fcsj = this.ARRIVALTIME;
  515 + cfBc.ARRIVALTIME = DateTimeTool.getHHmmStr(time.setMinutes(time.getMinutes() + cfBc.bcsj));
  516 + }
275 517 }
276   - if(prevBc != undefined && prevBc != null && this.lpNo == oBc.lpNo && this.fcno == prevBc.fcno){
  518 + if(prevBc != undefined && prevBc != null && this.lpNo == oBc.lpNo && this.fcno == prevBc.fcno && this.isfb == 0){
277 519 // 前一个班次停站时间 = 原停站时间 + 中间班次移动时间
278 520 this.STOPTIME += iMin;
279 521 }
... ... @@ -283,37 +525,25 @@ var AdjustTrip = function () {
283 525 var getLpPrevAndNextBc = function (bcList, oBc) {
284 526 var lpBc = new Array(),
285 527 // 前一个班次
286   - prevBc = null, nextBc = null;
  528 + prevBc = null, nextBc = null, cfBc = null;
287 529 $.each(bcList, function () {
288 530 if(this.lpNo == oBc.lpNo)
289 531 lpBc.push(this);
290 532 });
291   - lpBc.sort(function (a,b) {return a.fcint - b.fcint;});
  533 + lpBc.sort(function (a,b) {return DateTimeTool.getDateTime(a.fcsj)-DateTimeTool.getDateTime(b.fcsj);});
292 534 for(var n = 0; n < lpBc.length; n++) {
293 535 if(lpBc[n].fcno == oBc.fcno && n > 0)
294 536 prevBc = lpBc[n-1];
295   - if(lpBc[n].fcno == oBc.fcno && n < lpBc.length-1)
296   - nextBc = lpBc[n+1];
  537 + if(lpBc[n].fcno == oBc.fcno && n < lpBc.length-1){
  538 + if(lpBc[n+1].bcType == 'cf'){
  539 + nextBc = lpBc[n+2];
  540 + cfBc = lpBc[n+1];
  541 + } else {
  542 + nextBc = lpBc[n+1];
  543 + }
  544 + }
297 545 }
298   - return [prevBc, nextBc];
299   - };
300   - // 判断时间在什么时间段段内
301   - /**
302   - * 判断时间在什么时间段段内
303   - * @param t 时间
304   - * @private
305   - */
306   - var judgmentTimeQuantum = function (t) {
307   - if(t <= DateTimeTool.getDateTime('6:30'))
308   - return 0;
309   - else if(t > DateTimeTool.getDateTime('6:30') && t <= DateTimeTool.getDateTime('8:30'))
310   - return 1;
311   - else if(t > DateTimeTool.getDateTime('8:30') && t <= DateTimeTool.getDateTime('16:00'))
312   - return 2;
313   - else if(t > DateTimeTool.getDateTime('16:00') && t <= DateTimeTool.getDateTime('18:00'))
314   - return 3;
315   - else if(t > DateTimeTool.getDateTime('18:00'))
316   - return 4;
  546 + return [prevBc, nextBc, cfBc];
317 547 };
318 548 return {
319 549 departureClearanceAdjust : departureClearanceAdjust
... ...
src/main/resources/static/pages/base/timesmodel/js/v1/bcFun.js
... ... @@ -30,6 +30,7 @@ var bcFun = function() {
30 30 obj.bcType = type;
31 31 obj.xlDir = dir;
32 32 obj.fcno = xh;
  33 + obj.qs = xh;
33 34 obj.jhlc = jhlc;// 计划里程
34 35 obj.tcc = gatps.tcc_id;// 停车场id
35 36 obj.ttinfo = gatps.skbName;// 时刻表id
... ... @@ -125,6 +126,7 @@ var bcFun = function() {
125 126 }
126 127 }
127 128 };
  129 +
128 130 /**
129 131 * @description (TODO) 获取 上、下行的正常、区间、空放、直放班次.
130 132 * @param 需要分割的班次数据集合.
... ... @@ -135,7 +137,7 @@ var bcFun = function() {
135 137 var upArray = new Array(),downArray = new Array(),rs = new Array();
136 138 for(var j = 0 ; j< json.length ; j++) {
137 139 // 判断是否为正常、区间、空放、直放班次
138   - if(json[j].bcType== dataMap.bcTypeArr.normal ||
  140 + /*if(json[j].bcType== dataMap.bcTypeArr.normal ||
139 141 json[j].bcType== dataMap.bcTypeArr.region ||
140 142 json[j].bcType== dataMap.bcTypeArr.major ||
141 143 json[j].bcType== dataMap.bcTypeArr.venting) {
... ... @@ -143,9 +145,13 @@ var bcFun = function() {
143 145 upArray.push(json[j]);
144 146 else if(json[j].xlDir == dataMap.dira[1])
145 147 downArray.push(json[j]);
146   - }
  148 + }*/
  149 + if(json[j].xlDir == dataMap.dira[0])
  150 + upArray.push(json[j]);
  151 + else if(json[j].xlDir == dataMap.dira[1])
  152 + downArray.push(json[j]);
147 153 }
148   - rs.push(upArray,downArray);
  154 + rs.push(upArray, downArray);
149 155 // 返回数据.
150 156 return rs;
151 157 };
... ... @@ -180,9 +186,9 @@ var bcFun = function() {
180 186 }
181 187 // 按照发车序号顺序排序.
182 188 lpbc_.sort(function(a,b){return a.fcno-b.fcno});
183   - addcfbc01(lpbc_,dataMap,map);
184   - // 按照发车序号顺序排序.
185   - lpbc_.sort(function(a,b){return a.fcno-b.fcno});
  189 + // addcfbc01(lpbc_,dataMap,map);
  190 + // // 按照发车序号顺序排序.
  191 + // lpbc_.sort(function(a,b){return a.fcno-b.fcno});
186 192 var tt = addjclbbc01(lpbc_,dataMap,dataMap.lbsj,map);
187 193 bcs = updfcno(tt,bcs);
188 194 resultJA = resultJA.concat(tt);
... ... @@ -227,24 +233,39 @@ var bcFun = function() {
227 233 result.push(getbcObj(
228 234 dqbcfcsj,dataMap.ccsjArr[fxdm],car,dataMap.bcTypeArr.out,
229 235 dataMap.dira[fxdm],2,dataMap.cclcArr[fxdm],gatps,0,dataMap.qdzArr[fxdm],null,null,0,0));// 出场班次
230   - fcno ++;
  236 + fcno = 3;
231 237 }else if(b==bc.length-1){
232   - var fcno_ = dxfno + 2;
  238 + fxdm = fxdm == 0 ? 1:0;
  239 + // var fcno_ = dxfno + 2;
233 240 var qdbcddsj = DateTimeTool.getDateTime(bc[b].ARRIVALTIME);
234   - result.push(getbcObj(
235   - qdbcddsj,dataMap.jcsjArr[fxdm],car,dataMap.bcTypeArr.in_,
236   - dataMap.dira[fxdm],fcno_++,dataMap.jclcArr[fxdm],gatps,0,dataMap.qdzArr[fxdm],null,null,0,0));// 进场班次
  241 + if(dataMap.jcsjArr[fxdm] > 0){
  242 + result.push(getbcObj(
  243 + qdbcddsj,dataMap.jcsjArr[fxdm],car,dataMap.bcTypeArr.in_,
  244 + dataMap.dira[fxdm],++fcno,dataMap.jclcArr[fxdm],gatps,0,dataMap.qdzArr[fxdm],null,null,0,0));// 进场班次
  245 + }
237 246 result.push(getbcObj(
238 247 qdbcddsj,dataMap.jcsjArr[fxdm],car,dataMap.bcTypeArr.lc,
239   - dataMap.dira[fxdm],fcno_++,0,gatps,0,null,null,null,0,lbsj));// 晚班例保班次
  248 + dataMap.dira[fxdm],++fcno,0,gatps,0,null,null,null,0,lbsj));// 晚班例保班次
  249 + } else if(bc[b].isfb && b!=bc.length-1){
  250 + fxdm = fxdm == 0 ? 1:0;
  251 + var qdbcddsj = DateTimeTool.getDateTime(bc[b].ARRIVALTIME);
  252 + if(dataMap.jcsjArr[fxdm] > 0){
  253 + result.push(getbcObj(
  254 + qdbcddsj,dataMap.jcsjArr[fxdm],car,dataMap.bcTypeArr.in_,
  255 + dataMap.dira[fxdm],++fcno,dataMap.jclcArr[fxdm],gatps,0,dataMap.qdzArr[fxdm],null,null,0,0));// 进场班次
  256 + }
240 257 }
241   - dxfno = bc[b].fcno + fcno;
242   - bc[b].fcno = dxfno;
243   - if(stas) {
  258 + // dxfno = bc[b].fcno + fcno;
  259 + // bc[b].fcno = dxfno;
  260 +
  261 + bc[b].fcno = fcno;
  262 + result.push(bc[b]);
  263 + fcno++;
  264 +
  265 + /*if(stas) {
244 266 fcno ++;
245 267 stas = false;
246   - }
247   - result.push(bc[b]);
  268 + }*/
248 269 }
249 270 return result;
250 271 };
... ... @@ -254,7 +275,7 @@ var bcFun = function() {
254 275 for(var g = 0 ; g <lpbcar.length-1;g++ ) {
255 276 if( parseInt((DateTimeTool.getDateTime(lpbcar[g+1].fcsj) - DateTimeTool.getDateTime(lpbcar[g].ARRIVALTIME))/60000) > 180
256 277 && lpbcar[g].STOPTIME==0 && lpbcar[g].bcType =='normal' ) {
257   - lpbcar[g].isfb = 1;
  278 + lpbcar[g].isfb = true;
258 279 }
259 280 }
260 281 };
... ... @@ -265,6 +286,222 @@ var bcFun = function() {
265 286 return 1;
266 287 };
267 288  
  289 + /**
  290 + * @description (TODO) 横向调整 调整停站时间.
  291 + * @param cara 路牌数组.
  292 + * @param tempa 所有的班次数组集合.
  293 + * @param dataMap 封装的 以上、下行方向成对存在的 一些参数数组 [下标0 -- 代表上行 ; 下标1 -- 代表下行].
  294 + *
  295 + * ******************************** 思路 *************************************************
  296 + * 第一步 等到每个路牌下的班次数组集合.
  297 + *
  298 + * 第二步 顺序排序每个路牌下的班次数组集合.
  299 + *
  300 + * 第三步 从第二个班次开始,用第二个班次的发车时间 - 上一个班次的到达时间 得到 上一个班次的停站时间.
  301 + *
  302 + * 第四步 修改上一个班次的停站时间.
  303 + *
  304 + * 修改停站时间规则:以行驶时间的10%-15% 为标准。
  305 + * 如果超出该范围。则以录入参数低谷最大停站间隙为准。
  306 + * 停站时间最大不能超过该停站时间。
  307 + * 高峰附近的班次的停站时间在离高峰最近一个班次的停站时间浮动范围【1-2】分钟。
  308 + *
  309 + * ****************************************************************************************
  310 + */
  311 + var resizeByPitStopTime = function(cara,tempa,dataMap) {
  312 + var cLen = cara.length,tLen = tempa.length;
  313 + if(cLen<= 0 || tLen<=0 || dataMap==null)
  314 + return;
  315 + // 定义低谷最大停站时间、行业标准最小、最大停站时间(行驶时间的10%~15%).
  316 + var dgmaxtzsj = dataMap.dgmaxtzsj,normmintzsj, normmaxtzsj;
  317 + for(var t = 0 ; t < cLen ; t++) {
  318 + // 定义当前路牌班次数组集合.
  319 + var sslpbcA = new Array();
  320 + for(var j =0 ; j < tLen ; j++) {
  321 + // 判断当期遍历的班次是否属于当前的路牌.如果是则添加到当前的路牌班次数组集合.
  322 + if(tempa[j].lpNo == cara[t].lpNo) {
  323 + tempa[j].fcint = DateTimeTool.getDateTime(tempa[j].fcsj).getTime();
  324 + sslpbcA.push(tempa[j]);
  325 + }
  326 + }
  327 + if(sslpbcA.length > 0) {
  328 + // 按发车时间顺序排序.
  329 + sslpbcA.sort(function(a,b){return a.fcint-b.fcint});
  330 + // 按照规则修改停站时间.
  331 + for(var r = 0 ; r < sslpbcA.length-1 ; r++) {
  332 + if(sslpbcA[r].isfb)
  333 + continue;
  334 + // test
  335 + //if(sslpbcA[r].bcType == 'cf') {
  336 + // alert('cf' + sslpbcA[r-1].fcsj);
  337 + //}
  338 + // 定义上一个班次的发车时间、当前班次的到达时间、发车时间.
  339 + var sgbcfcsj = DateTimeTool.getDateTime(sslpbcA[r+1].fcsj),
  340 + dqbcddsj = DateTimeTool.getDateTime(sslpbcA[r].ARRIVALTIME),
  341 + dqbcfcsj = DateTimeTool.getDateTime(sslpbcA[r].fcsj);
  342 + // 定义当前班次方向下标代码[0代表上行;1代表下行].
  343 + var cctag = dirDmToIndex(sslpbcA[r].xlDir); // dataMap.smbcsjArr
  344 + // 定义每每相邻两个班次之间的时间差分钟数(也就是停站时间.)
  345 + var dxmin = parseInt( (sgbcfcsj - dqbcddsj)/60000);
  346 + // 定义是否高峰
  347 + var tt_flag = scheduleInitialize.isPeakTimeScope(dqbcfcsj , dataMap);
  348 + // 获取行驶时间.
  349 + var xxsj = scheduleInitialize.judgeXSSJ(cctag, dqbcfcsj, dataMap);
  350 + var time = dataMap.tzsj[cctag][DateTimeTool.judgmentTimeQuantum(xxsj)];
  351 +
  352 + normmintzsj = time.min;
  353 + normmaxtzsj = time.max;
  354 + var flag = false;
  355 +
  356 + // 如果小于零
  357 + if(dxmin < 0 && sslpbcA[r].isfb ==0) {
  358 + // 根据不同时段的停站时间.重新赋值停站时间.
  359 + if(sslpbcA[r].bcType=='normal' && sslpbcA[r+1].bcType =='normal')
  360 + //dxmin = tt_flag ? dataMap.gftzsj[cctag] : dataMap.dgtzsj[cctag];
  361 + dxmin = 1;
  362 + else
  363 + dxmin = 0;
  364 + flag = true;
  365 + }else if(dxmin==0){
  366 + if (sslpbcA[r].bcType == 'cf') { // 如果是吃饭班次,停站为0
  367 + dxmin = 0;
  368 + } else {
  369 + // 这里区分,如果下一个班次是吃饭班次,停站为0
  370 + if (sslpbcA[r + 1].bcType=='cf') {
  371 + dxmin = 0;
  372 + } else { // 否则使用最小停站时间
  373 + dxmin = normmintzsj;
  374 + }
  375 + }
  376 +
  377 + flag = true;
  378 + }else {
  379 + // 如果 大于等于低谷最大停站时间 并且 小于等于三小时.则把低谷最大停站时间 作为 停站时间.
  380 + if(dxmin >= dgmaxtzsj && dxmin < 180 && sslpbcA[r].isfb==false) {
  381 + dxmin = dgmaxtzsj;
  382 + flag = true;
  383 + // 如果大于零 并且 小于等于行业标准的最小停站时间
  384 + }else if(dxmin > 0 && dxmin <= normmintzsj ) {
  385 + // dxmin = dxmin;
  386 + flag = true;
  387 + // 如果大于行业标准的最小停站时间 并且 小于等于行业标准的最大停站时间
  388 + }else if(dxmin > normmintzsj && dxmin <= normmaxtzsj ) {
  389 + // dxmin = dxmin;
  390 + flag = true;
  391 + // 如果大于行业标准的最大停站时间 并且 小于低谷最大停站时间
  392 + }else if(dxmin > normmaxtzsj && dxmin < dgmaxtzsj ) {
  393 + // dxmin = dxmin;
  394 + flag = true;
  395 + }else if (dxmin >= 180){
  396 + dxmin = 0;
  397 + }
  398 + }
  399 + if(flag) {
  400 + if(!isDirSmbc(dirDmToIndex(sslpbcA[r+1].xlDir) , sslpbcA[r+1].fcsj , dataMap)) {
  401 + // 修改当前班次的停站时间.
  402 + sslpbcA[r].STOPTIME = parseInt(dxmin) ;
  403 + // 当前班次的到达时间 + 停站时间 作为下一个班次的发车时间.
  404 + dqbcddsj.setMinutes(dqbcddsj.getMinutes() + dxmin);
  405 + // 修改下一个班次的发车时间.
  406 + sslpbcA[r+1].fcsj = DateTimeTool.getHHmmStr(dqbcddsj);
  407 + // 下一个班次的发车时间 + 行驶时间 作为下一个班次的到达时间.
  408 + dqbcddsj.setMinutes(dqbcddsj.getMinutes() + sslpbcA[r+1].bcsj);
  409 + // 修改下一个班次的到达时间.
  410 + sslpbcA[r+1].ARRIVALTIME = DateTimeTool.getHHmmStr(dqbcddsj);
  411 + }else {
  412 + if(r>0) {
  413 + // 修改当前班次的停站时间.
  414 + sslpbcA[r].STOPTIME = parseInt(dxmin) ;
  415 + sgbcfcsj.setMinutes(sgbcfcsj.getMinutes() - sslpbcA[r].STOPTIME);
  416 + sslpbcA[r].ARRIVALTIME = DateTimeTool.getHHmmStr(sgbcfcsj);
  417 + sgbcfcsj.setMinutes(sgbcfcsj.getMinutes() - sslpbcA[r].bcsj);
  418 + sslpbcA[r].fcsj = DateTimeTool.getHHmmStr(sgbcfcsj);
  419 + sslpbcA[r-1].STOPTIME = parseInt( ( sgbcfcsj - DateTimeTool.getDateTime(sslpbcA[r-1].ARRIVALTIME))/60000);
  420 + }
  421 + }
  422 + }
  423 + }
  424 + }
  425 + }
  426 + };
  427 +
  428 + var isDirSmbc = function(dirDm , fcsj , dataMap) {
  429 + var falg = false;
  430 + if(fcsj == dataMap.smbcsjArr[dirDm].kssj || fcsj == dataMap.smbcsjArr[dirDm].jssj)
  431 + falg = true;
  432 + return falg;
  433 + };
  434 +
  435 +
  436 +
  437 + /**
  438 + * @description (TODO) 标记上、下行首末班车.
  439 + * @param jsonArray 初始化路牌下的所有班次并且已经均匀发车间隙的数组集合.
  440 + * @param dataMap 封装的 以上、下行方向成对存在的 一些参数数组 [下标0 -- 代表上行 ; 下标1 -- 代表下行].
  441 + */
  442 + var markLastBus = function(jsonArray , dataMap) {
  443 + // 定义上、下行的正常、区间、空放、直放班次、返回数组集合.
  444 + var listMap = getUpAndDownBc( jsonArray , dataMap) , resultArray = new Array();
  445 + for(var i = 0 ; i < listMap.length ; i++) {
  446 + if(listMap[i].length > 0){
  447 + // 把班次顺序排序.
  448 + listMap[i].sort(function(a,b){return a.fcint-b.fcint});
  449 + // 确定首末班车时间.
  450 + markFirstAndLastBusAlso(listMap[i] , dataMap , i);
  451 + }
  452 + resultArray = resultArray.concat(listMap[i]);
  453 + }
  454 + return resultArray;
  455 + };
  456 +
  457 + /**
  458 + * @description (TODO) 确定某方向下的末班车.
  459 + * @param dirArray 某方向下的数组集合.
  460 + * @param dataMap 封装的 以上、下行方向成对存在的 一些参数数组 [下标0 -- 代表上行 ; 下标1 -- 代表下行].
  461 + * @param dir 方向.
  462 + */
  463 + var markFirstAndLastBusAlso = function(dirArray , dataMap , dir) {
  464 + if(dirArray.length>=2) {
  465 + // 定义最后一个班次.
  466 + var dirLastBc = dirArray[dirArray.length-1];
  467 + // 确认末班车时间
  468 + if(dirLastBc.fcsj != dataMap.smbcsjArr[dir].jssj) {
  469 + // 修改最后一个班次的发车时间.
  470 + dirLastBc.fcsj = dataMap.smbcsjArr[dir].jssj;
  471 + // 定义到达时间.
  472 + var ddsj_ = DateTimeTool.getDateTime(dirLastBc.fcsj);
  473 + ddsj_.setMinutes(ddsj_.getMinutes() + dataMap.xssj[dir][4]);
  474 + // 修改最后一个班次的到达时间.
  475 + dirLastBc.ARRIVALTIME = DateTimeTool.getHHmmStr(ddsj_);
  476 + dirLastBc.bcsj = dataMap.xssj[dir][4];
  477 + }
  478 + }
  479 + };
  480 +
  481 + /**
  482 + * @description (TODO) 判断某路牌下是否存在末班车时间班次.
  483 + * @param arr 某路牌下的班次.
  484 + * @param smbcsjArr 首末班车时间点数组集合.
  485 + */
  486 + var lpBcIsHaveLast = function(arr , smbcsjArr) {
  487 + for(var a = 0 ; a < arr.length ; a++) {
  488 + for(var s = 0 ; s < smbcsjArr.length ; s++) {
  489 + if(arr[a].fcsj == smbcsjArr[s].jssj && dirDmToIndex(arr[a].xlDir) == s)
  490 + return true;
  491 + }
  492 + }
  493 + return false;
  494 + };
  495 + var lpBcIsHaveFirst = function(arr , smbcsjArr) {
  496 + for(var a = 0 ; a < arr.length ; a++) {
  497 + for(var s = 0 ; s < smbcsjArr.length ; s++) {
  498 + if(arr[a].fcsj == smbcsjArr[s].kssj && dirDmToIndex(arr[a].xlDir) == s)
  499 + return true;
  500 + }
  501 + }
  502 + return false;
  503 + };
  504 +
268 505 return{
269 506 getbcObj : getbcObj, //封装班次属性值
270 507 upDownStrConvertNum : upDownStrConvertNum,
... ... @@ -272,6 +509,11 @@ var bcFun = function() {
272 509 markFirstAndLastBusAlsoDietNotInRangeBc : markFirstAndLastBusAlsoDietNotInRangeBc,
273 510 getUpAndDownBc : getUpAndDownBc,
274 511 addInOutFieldBc : addInOutFieldBc, //添加进出场班次
275   - updfcno : updfcno
  512 + updfcno : updfcno,
  513 + resizeByPitStopTime : resizeByPitStopTime,
  514 + markLastBus : markLastBus, //标记上、下行末班车
  515 + lpBcIsHaveLast : lpBcIsHaveLast, // 判断路牌班次是否有末班车
  516 + lpBcIsHaveFirst : lpBcIsHaveFirst, // 判断路牌班次是否有首班车
  517 + dirDmToIndex : dirDmToIndex // 字符串转换为方向
276 518 }
277 519 }();
... ...
src/main/resources/static/pages/base/timesmodel/js/v1/lpFun.js
... ... @@ -64,49 +64,6 @@ var lpFun = function () {
64 64 // 返回数据.
65 65 return list.sort(function(a,b){return b.hoursV-a.hoursV});
66 66 };
67   - /**
68   - * @description (TODO) 把班型人次合理的分配到不同的路牌上.
69   - * @param list 班型人次数组集合.
70   - * @param clzs 路牌数组.
71   - * @return 返回一个把路牌合理的分配到班型人次下组成的数据集合.
72   - * */
73   - var bxAlloTotLp = function(arr,clzs){
74   - var cLen = clzs.length;
75   - var type = getMode(arr);
76   - var i=0;
77   - while(clzs.length > i){
78   - for(var j=0; j<type.length; j++) {
79   - if(arr[type[j]].len-- > 0) {
80   - arr[type[j]].bx.sslp.push(clzs[i]);
81   - i++
82   - }
83   - }
84   - }
85   - };
86   - var getMode = function(arr){
87   - var mode = [], bxRcList = arr;
88   - var count = bxRcList[0].lps;
89   - for(var i=1; i<bxRcList.length; i++) {
90   - if(bxRcList[i].lps < count)
91   - count = bxRcList[i].lps;
92   - }
93   - for(var i=0; i<bxRcList.length; i++) {
94   - bxRcList[i] = {'bx':bxRcList[i],'len':bxRcList[i].lps, 'ratio':Math.round(bxRcList[i].lps/count)}
95   - }
96   - for(var i=0; i<bxRcList.length; i++) {
97   - for(var j=0; j<bxRcList[i].ratio; j++) {
98   - mode.push(i);
99   - }
100   - }
101   - // for(var m=0; m<mode.length-2; m++) {
102   - // if(mode[m] == mode[m+1]) {
103   - // var a = mode[m+1];
104   - // mode[m+1] = mode[m+2];
105   - // mode[m+2] = a;
106   - // }
107   - // }
108   - return mode;
109   - };
110 67 // 路牌整理
111 68 var lpNeaten = function (bxRcList, carList, dataMap) {
112 69 var carListH = new Array();
... ... @@ -132,11 +89,12 @@ var lpFun = function () {
132 89 // carListH:带工时和圈数的车辆list,carListCache:缓存为分班车辆
133 90 var carListH = [],carListCache = [];
134 91  
135   - // 最分班路牌 = 总路牌 - (低谷周转/低谷最大发车间隔)向上取整
  92 + // 最分班路牌 = 总路牌 - (低谷周转/低谷最大发车间隔)向上取整
136 93 var fblps = carList.length - Math.ceil((dataMap.zzsj[2]) / map.dgmaxfcjx);
137 94 // 取出有工时的路牌
138 95 for (var i = 0; i < bxRcList.length; i++) {
139 96 var sslp = bxRcList[i].bx.sslp, bx = bxRcList[i].bx;
  97 + // 路牌能有多少圈
140 98 var count = Math.round(bx.hoursV / (dataMap.zzsj[1]/60));// 早高峰周转:dataMap.zzsj[1]
141 99 if(bx.type == '五工二休') {
142 100 $.each(sslp, function () {
... ... @@ -167,7 +125,7 @@ var lpFun = function () {
167 125 cutCar(carListH,carListCache);
168 126 var index = Math.floor(carListH.length / fblps);
169 127 for(var s=1; s<=fblps; s++){
170   - carListH[s*index].isfb = true;
  128 + carListH[s*index - 1].isfb = true;
171 129 }
172 130 }
173 131 carListH = carListH.concat(carListCache);
... ... @@ -179,6 +137,16 @@ var lpFun = function () {
179 137 }
180 138 return carListH;
181 139 };
  140 + // 切割出连班路牌
  141 + var cutCar = function(carListH,carListCache) {
  142 + for(var c=0; c<carListH.length; c++){
  143 + if(carListH[c].isfb) {
  144 + carListCache.push(carListH[c]);
  145 + carListH.splice(c,1);
  146 + cutCar(carListH,carListCache);
  147 + }
  148 + }
  149 + };
182 150 // 确定路牌分班数
183 151 var lpfbs = function (fblps, bxRcList, index) {
184 152 if(fblps > bxRcList[index].lps){
... ...
src/main/resources/static/pages/base/timesmodel/js/v1/scheduleInitialize.js
... ... @@ -33,8 +33,8 @@ var scheduleInitialize = function () {
33 33 return;
34 34 }
35 35  
36   - // 行驶时间、停站时间、周转时间。发车间隙获取
37   - getParaTime(map,dataMap);
  36 + // 行驶时间、停站时间、周转时间、发车间隙获取、时间段
  37 + getParaTime(map,dataMap,seMap);
38 38  
39 39 // 第一步 路牌分配
40 40 var bxRcList = lpFun.getBxRcListCollection(map.bxrc);
... ... @@ -49,24 +49,28 @@ var scheduleInitialize = function () {
49 49 // 第三步 剔除营运时间外的班次
50 50 var operationBcData = bcFun.markFirstAndLastBusAlsoDietNotInRangeBc(bcData, dataMap);
51 51 // 第四步 横向调整停站时间
52   - resizeByPitStopTime(carListH , operationBcData , dataMap);
  52 + bcFun.resizeByPitStopTime(carListH , operationBcData , dataMap);
53 53  
54 54 // 第五步 确认首末班车
55   - markFirstAndLastBus(operationBcData, dataMap);
  55 + bcFun.markLastBus(operationBcData, dataMap);
  56 + // return {'json':operationBcData,'bxrcgs':null};
56 57  
57 58 // 第六步 抽车来满足工时.
58 59 var tempA = takeCar(operationBcData, carListH , seMap, dataMap , map);
  60 + // return {'json':tempA,'bxrcgs':null};
59 61  
60 62 // 第七步 确定吃饭时间.
61 63 if (map.cfdd) { // NEW,没有选择吃饭地点,不设定吃饭班次
62 64 markeEatTime(bxRcList , tempA , carListH , seMap , dataMap ,map);
63 65 }
  66 +
64 67 // 横向调整停站时间
65   - // resizeByPitStopTime(carListH , tempA , dataMap);
  68 + bcFun.resizeByPitStopTime(carListH , tempA , dataMap);
  69 +
66 70 // 第八步 纵向调整(发车间隔调整)
67 71 AdjustTrip.departureClearanceAdjust(tempA,dataMap);
68   - // AdjustTrip2.departureClearanceAdjust(tempA,dataMap);
69 72 bcFun.updfcno(tempA,0);
  73 +
70 74 // 第九步 添加进出场和早晚例保
71 75 var data = bcFun.addInOutFieldBc(carListH,tempA,dataMap,map);
72 76 return {'json':data,'bxrcgs':null};
... ... @@ -108,16 +112,18 @@ var scheduleInitialize = function () {
108 112 // count:班次圈数,type:是否跳过低谷班次(只对工时小于10了车辆有效)
109 113 var count = 0, type = true;
110 114 // 定义当前路牌的第一个班次的开始时间.
  115 + if(c > 0)
  116 + sbxfcTime.setMinutes(sbxfcTime.getMinutes() + judgeFCJX(sbxfcTime, dataMap));
111 117 var kssj = new Date(sbxfcTime);
112 118 // 进入早高峰按高峰发车间隙,否则按低估: TODO:暂时直接按早高峰
113   - kssj.setMinutes(kssj.getMinutes() + (c * dataMap.fcjx[1].max));
  119 + // kssj.setMinutes(kssj.getMinutes() + (c * dataMap.fcjx[1].max));
114 120 // lpKssj:中标线之后的开始时间
115 121 var lpKssj, ZBXAfter = false;
116 122 // 判断是否中标线
117 123 if(c < ZBXCarNum) {
118 124 lpKssj = new Date(kssj);
119 125 // 判断中标线时间 = 发车时间 -(反方向停站时间+反方向行驶时间:早高峰之前行驶时间) 早高峰结束之前都用的最小停站时间
120   - lpKssj.setMinutes(lpKssj.getMinutes()-(judgeTZSJ(fxTagDm==0 ? 1:0,zbxfcTime,dataMap) + dataMap.xssj[fxTagDm==0 ? 1:0][judgmentTimeQuantum(zbxfcTime)]));
  126 + lpKssj.setMinutes(lpKssj.getMinutes()-(judgeTZSJ(fxTagDm==0 ? 1:0,zbxfcTime,dataMap) + dataMap.xssj[fxTagDm==0 ? 1:0][DateTimeTool.judgmentTimeQuantum(zbxfcTime)]));
121 127 // 中标线发车时间 与 判断中标线时间的上下差值在 高峰发车间隔的一般以内,为中标线
122 128 if(Math.abs((zbxfcTime.getTime() - lpKssj.getTime())/60000) < dataMap.fcjx[1].max){
123 129 ZBXCarNum = c;
... ... @@ -136,12 +142,12 @@ var scheduleInitialize = function () {
136 142 // 定义在某时间段内[高峰时间段、低谷时间段]的停站时间.
137 143 var tzsj = judgeTZSJ(fxTagDm,lpKssj,dataMap);
138 144 // 定义在某时间段内的行驶时间.
139   - var xssj = dataMap.xssj[fxTagDm][judgmentTimeQuantum(lpKssj)];
  145 + var xssj = dataMap.xssj[fxTagDm][DateTimeTool.judgmentTimeQuantum(lpKssj)];
140 146 // 定义当前班次的停站时间,这里是为了当计算到了最后一个班次的时候,那么停站时间为0 ,但是后续的班次的发车时间需要加上前一个班次的停站时间.
141 147 var xs_tzsj = isLastbc(lpKssj, endTime, tzsj, xssj) ? 0 : tzsj;
142 148 rs.push(bcFun.getbcObj(lpKssj, xssj, carListH[c],
143 149 dataMap.bcTypeArr.normal,
144   - dataMap.dira[fxTagDm], xhNo++,
  150 + dataMap.dira[fxTagDm], xhNo-1,
145 151 dataMap.pcxslcArr[fxTagDm], map, 0,
146 152 dataMap.qdzArr[fxTagDm],
147 153 dataMap.zdzArr[fxTagDm], null, xs_tzsj, 0));
... ... @@ -156,7 +162,7 @@ var scheduleInitialize = function () {
156 162 // 定义在某时间段内[高峰时间段、低谷时间段]的停站时间.
157 163 var tzsj = judgeTZSJ(fxTagDm,kssj,dataMap);
158 164 // 定义在某时间段内的行驶时间.
159   - var xssj = dataMap.xssj[fxTagDm][judgmentTimeQuantum(kssj)];
  165 + var xssj = dataMap.xssj[fxTagDm][DateTimeTool.judgmentTimeQuantum(kssj)];
160 166 // 定义当前班次的停站时间,这里是为了当计算到了最后一个班次的时候,那么停站时间为0 ,但是后续的班次的发车时间需要加上前一个班次的停站时间.
161 167 var xs_tzsj = isLastbc(kssj, endTime, tzsj, xssj) ? 0 : tzsj;
162 168 // 添加正常班次对象.(这里初始化时,都是正常班次类型.)
... ... @@ -183,29 +189,45 @@ var scheduleInitialize = function () {
183 189 * @return 返回一个满足单个路牌对应的标准工时、满足某班型下的所有路牌的平均工时对应的日平均工时、停站时间、路牌是否分班的班次集合.
184 190 */
185 191 var takeCar = function (jsonArray, cara, saa, dataMap, map) {
186   - // 定义低谷最大发车时间、最大停站时间来反算出低谷最少配车数.
187   - var dgmaxfcjx = parseInt(map.dgmaxfcjx),
188   - dgmaxtzsj = parseInt(map.dgmaxtzsj);
189   - // 计算低谷最少配车数 (低谷上行行驶时间 + 低谷下行行驶时间 + 低谷最大停站时间*2) / 低谷最大发车间隙.
190   - // var dgminpcs = Math.round((dataMap.xssj[0][3] + dataMap.xssj[1][3] + dataMap.dgtzsj[0] + dataMap.dgtzsj[1]) / dgmaxfcjx);
191   - // var zwxeLpNum = cuontZwxeLpNum(bxRcList);
192   - // var dgminpcs = 4;
193 192 // 定义返回数组.
194 193 var rs = new Array();
195 194 for(var s = 0 ; s < cara.length; s++) {
196 195 // 定义路牌编号、定义当前路牌下的所有班次.
197   - var lpNo = cara[s].lpNo, car = cara[s], lpbc = new Array();
  196 + var lpNo = cara[s].lpNo, car = cara[s], lpbc = new Array(), hoursV = 0;
198 197 for (var i = 0; i < jsonArray.length; i++) {
199 198 // 判断当期遍历的班次是否属于当前的路牌.
200 199 if (jsonArray[i].lpNo == lpNo) {
201 200 lpbc.push(jsonArray[i]);
202 201 }
203 202 }
204   - var avgMakerCarNum = lpbc.length - car.count*2;
  203 + lpbc.sort(function (a,b) { return a.fcno - b.fcno;});
  204 + // hoursV 分钟为单位(先添加进出场时间)
  205 + hoursV = dataMap.zwcArr[0] + dataMap.zwcArr[1] + dataMap.lbsj*2;
  206 + if(car.isfb){
  207 + hoursV += (DateTimeTool.getDateTime(lpbc[lpbc.length-1].ARRIVALTIME) - DateTimeTool.getDateTime(lpbc[0].fcsj)) / 60000;
  208 + } else {
  209 + for (var i = 0; i < jsonArray.length; i++) {
  210 + // 判断当期遍历的班次是否属于当前的路牌.
  211 + if (jsonArray[i].lpNo == lpNo) {
  212 + hoursV += jsonArray[i].bcsj + jsonArray[i].STOPTIME;
  213 + }
  214 + }
  215 + }
  216 + var excessHours = (hoursV/60).toFixed(2) - car.hoursV,
  217 + dgAvgXssj = (dataMap.xssj[0][0]+dataMap.xssj[0][2]+dataMap.xssj[0][4]+dataMap.xssj[1][0]+dataMap.xssj[1][2]+dataMap.xssj[1][4])/6;
  218 +
  219 + // 抽车全在低谷,所以用低谷平均行驶时间 TODO:(分班本来需要大于3小时,现在暂时改为1小时)
  220 + var avgMakerCarNum = 0;
  221 + if(excessHours >= 1){
  222 + avgMakerCarNum = Math.floor(excessHours*60/dgAvgXssj);
  223 + }
  224 + // var avgMakerCarNum = lpbc.length - car.count*2;
205 225 rs = rs.concat(abstractBcByWorkTime(lpbc, map, dataMap, saa, cara, avgMakerCarNum));
206 226 }
207 227 return rs;
208 228 };
  229 +
  230 + // 数据排序
209 231 function sortDeepArr(arr, sortTypes) {
210 232 var i = 0;
211 233 var len = sortTypes.length;
... ... @@ -231,7 +253,7 @@ var scheduleInitialize = function () {
231 253 } else {
232 254 var nextSortType = sortTypes[i];
233 255 $.each(arrObj[sortType.name], function(key, val) {
234   - console.log(i)
  256 + // console.log(i);
235 257 itSelf(val, nextSortType)
236 258 })
237 259 }
... ... @@ -242,12 +264,27 @@ var scheduleInitialize = function () {
242 264 * @param map
243 265 * @param dataMap
244 266 */
245   - var getParaTime = function (map,dataMap) {
  267 + var getParaTime = function (map,dataMap,seMap) {
246 268 // 停站类型:tzlx,主站方向:zzfx
247 269 var tzlx = map.tzlx.split('/'),zzfx = 0;
  270 + var isMasterStop = false; // 是否主站停
  271 + if (map) {
  272 + var tzlx = map.tzlx.split("/");
  273 + if (tzlx.length == 1) { // 双向停站
  274 + isMasterStop = false;
  275 + } else if(tzlx.length > 1){
  276 + isMasterStop = true;
  277 + zzfx = tzlx[1] == 0 ? 0 : 1;
  278 + }
  279 + }
  280 + dataMap.isMasterStop = isMasterStop; // 是否主站停
  281 + dataMap.zzfx = zzfx; //主站方向
  282 +
  283 + // 停站类型:tzlx,主站方向:zzfx
  284 + /*var tzlx = map.tzlx.split('/'),zzfx = 0;
248 285 if(tzlx.length > 1 && tzlx[0] == 1) {
249 286 zzfx = tzlx[1] == 0 ? 0 : 1;
250   - }
  287 + }*/
251 288  
252 289 // 行驶时间 上下行分别5个时间段 0:上行,1:下行
253 290 var xssj = [[],[]];
... ... @@ -263,6 +300,7 @@ var scheduleInitialize = function () {
263 300 xssj[1].push(parseInt(map.downTravelTime5));
264 301 // 停站时间 上下行分别5个时间段 0:上行,1:下行 TODO:暂时只支持单向停站
265 302 var tzsj = [[],[]];
  303 + // 是否主站停站
266 304 var upDownTravelTimeMin1 =Math.round((parseInt(map.upTravelTime1)+parseInt(map.downTravelTime1))*0.15),
267 305 upDownTravelTimeMin2 =Math.round((parseInt(map.upTravelTime2)+parseInt(map.downTravelTime2))*0.1),
268 306 upDownTravelTimeMin3 =Math.round((parseInt(map.upTravelTime3)+parseInt(map.downTravelTime3))*0.15),
... ... @@ -274,20 +312,33 @@ var scheduleInitialize = function () {
274 312 upDownTravelTimeMax3 =Math.round((parseInt(map.upTravelTime3)+parseInt(map.downTravelTime3))*0.2),
275 313 upDownTravelTimeMax4 =Math.round((parseInt(map.upTravelTime4)+parseInt(map.downTravelTime4))*0.15),
276 314 upDownTravelTimeMax5 =Math.round((parseInt(map.upTravelTime5)+parseInt(map.downTravelTime5))*0.2);
277   - if(zzfx == 0) {
278   - tzsj[0].push({'min':upDownTravelTimeMin1 < 10 ? 10 : upDownTravelTimeMin1, 'max':upDownTravelTimeMax1});
279   - tzsj[0].push({'min':upDownTravelTimeMin2 < 10 ? 10 : upDownTravelTimeMin2, 'max':upDownTravelTimeMax2});
280   - tzsj[0].push({'min':upDownTravelTimeMin3 < 10 ? 10 : upDownTravelTimeMin3, 'max':upDownTravelTimeMax3});
281   - tzsj[0].push({'min':upDownTravelTimeMin4 < 10 ? 10 : upDownTravelTimeMin4, 'max':upDownTravelTimeMax4});
282   - tzsj[0].push({'min':upDownTravelTimeMin5 < 10 ? 10 : upDownTravelTimeMin5, 'max':upDownTravelTimeMax5});
283   - tzsj[1] = [{'min':1, 'max':3}, {'min':1, 'max':3}, {'min':1, 'max':3}, {'min':1, 'max':3}, {'min':1, 'max':3}];
  315 + if(isMasterStop) {
  316 + if(zzfx == 0) {
  317 + tzsj[0].push({'min':upDownTravelTimeMin1 < 10 ? 10 : upDownTravelTimeMin1, 'max':upDownTravelTimeMax1});
  318 + tzsj[0].push({'min':upDownTravelTimeMin2 < 3 ? 3 : upDownTravelTimeMin2, 'max':upDownTravelTimeMax2});
  319 + tzsj[0].push({'min':upDownTravelTimeMin3 < 10 ? 10 : upDownTravelTimeMin3, 'max':upDownTravelTimeMax3});
  320 + tzsj[0].push({'min':upDownTravelTimeMin4 < 3 ? 3 : upDownTravelTimeMin4, 'max':upDownTravelTimeMax4});
  321 + tzsj[0].push({'min':upDownTravelTimeMin5 < 10 ? 10 : upDownTravelTimeMin5, 'max':upDownTravelTimeMax5});
  322 + tzsj[1] = [{'min':1, 'max':3}, {'min':1, 'max':3}, {'min':1, 'max':3}, {'min':1, 'max':3}, {'min':1, 'max':3}];
  323 + } else {
  324 + tzsj[1].push({'min':upDownTravelTimeMin1 < 10 ? 10 : upDownTravelTimeMin1, 'max':upDownTravelTimeMax1});
  325 + tzsj[1].push({'min':upDownTravelTimeMin2 < 3 ? 3 : upDownTravelTimeMin2, 'max':upDownTravelTimeMax2});
  326 + tzsj[1].push({'min':upDownTravelTimeMin3 < 10 ? 10 : upDownTravelTimeMin3, 'max':upDownTravelTimeMax3});
  327 + tzsj[1].push({'min':upDownTravelTimeMin4 < 3 ? 3 : upDownTravelTimeMin4, 'max':upDownTravelTimeMax4});
  328 + tzsj[1].push({'min':upDownTravelTimeMin5 < 10 ? 10 : upDownTravelTimeMin5, 'max':upDownTravelTimeMax5});
  329 + tzsj[0] = [{'min':1, 'max':3}, {'min':1, 'max':3}, {'min':1, 'max':3}, {'min':1, 'max':3}, {'min':1, 'max':3}];
  330 + }
284 331 } else {
285   - tzsj[1].push({'min':upDownTravelTimeMin1 < 10 ? 10 : upDownTravelTimeMin1, 'max':upDownTravelTimeMax1});
286   - tzsj[1].push({'min':upDownTravelTimeMin2 < 10 ? 10 : upDownTravelTimeMin2, 'max':upDownTravelTimeMax2});
287   - tzsj[1].push({'min':upDownTravelTimeMin3 < 10 ? 10 : upDownTravelTimeMin3, 'max':upDownTravelTimeMax3});
288   - tzsj[1].push({'min':upDownTravelTimeMin4 < 10 ? 10 : upDownTravelTimeMin4, 'max':upDownTravelTimeMax4});
289   - tzsj[1].push({'min':upDownTravelTimeMin5 < 10 ? 10 : upDownTravelTimeMin5, 'max':upDownTravelTimeMax5});
290   - tzsj[0] = [{'min':1, 'max':3}, {'min':1, 'max':3}, {'min':1, 'max':3}, {'min':1, 'max':3}, {'min':1, 'max':3}];
  332 + tzsj[0].push({'min':upDownTravelTimeMin1/2 < 10 ? 10 : upDownTravelTimeMin1/2, 'max':upDownTravelTimeMax1/2});
  333 + tzsj[0].push({'min':upDownTravelTimeMin2/2 < 3 ? 3 : upDownTravelTimeMin2/2, 'max':upDownTravelTimeMax2/2});
  334 + tzsj[0].push({'min':upDownTravelTimeMin3/2 < 10 ? 10 : upDownTravelTimeMin3/2, 'max':upDownTravelTimeMax3/2});
  335 + tzsj[0].push({'min':upDownTravelTimeMin4/2 < 3 ? 3 : upDownTravelTimeMin4/2, 'max':upDownTravelTimeMax4/2});
  336 + tzsj[0].push({'min':upDownTravelTimeMin5/2 < 10 ? 10 : upDownTravelTimeMin5/2, 'max':upDownTravelTimeMax5/2});
  337 + tzsj[1].push({'min':upDownTravelTimeMin1/2 < 10 ? 10 : upDownTravelTimeMin1/2, 'max':upDownTravelTimeMax1/2});
  338 + tzsj[1].push({'min':upDownTravelTimeMin2/2 < 3 ? 3 : upDownTravelTimeMin2/2, 'max':upDownTravelTimeMax2/2});
  339 + tzsj[1].push({'min':upDownTravelTimeMin3/2 < 10 ? 10 : upDownTravelTimeMin3/2, 'max':upDownTravelTimeMax3/2});
  340 + tzsj[1].push({'min':upDownTravelTimeMin4/2 < 3 ? 3 : upDownTravelTimeMin4/2, 'max':upDownTravelTimeMax4/2});
  341 + tzsj[1].push({'min':upDownTravelTimeMin5/2 < 10 ? 10 : upDownTravelTimeMin5/2, 'max':upDownTravelTimeMax5/2});
291 342 }
292 343 // 周转时间 分别5个时间段
293 344 var zzsj = [];
... ... @@ -299,55 +350,61 @@ var scheduleInitialize = function () {
299 350 // 发车间隙 分别5个时间段
300 351 var fcjx = [];
301 352 var clzs = parseInt(map.clzs);
302   - // fcjx.push(Math.round(zzsj[0] / clzs > 20.4 ? 20 : (zzsj[0] / clzs < 15 ? 15 : zzsj[1] / clzs)));
303   - fcjx.push({'min':10, 'max':12});
304   - // fcjx.push({'min':5, 'max':Math.round(zzsj[1] / clzs > 8.4 ? 8 : zzsj[1] / clzs)});
305   - fcjx.push({'min':5, 'max':Math.round(zzsj[1] / clzs)});
306   - fcjx.push({'min':8, 'max':20});
307   - fcjx.push({'min':5, 'max':Math.round(zzsj[1] / clzs)});
308   - fcjx.push({'min':8, 'max':20});
309 353  
310   - dataMap.xssj = xssj;
311   - dataMap.tzsj = tzsj;
312   - dataMap.zzsj = zzsj;
313   - dataMap.fcjx = fcjx;
314   - // map.dgmaxfcjx = 20;
  354 + var dgmaxfcjx = parseInt(dataMap.dgmaxfcjx);
  355 + // 一级线路要满足8分20分的发车间隔
  356 + if(map.level == '1') {
  357 + fcjx.push({'min':10, 'max':15});
  358 + fcjx.push({'min':5, 'max':Math.round(zzsj[1] / clzs > 8 ? 8 : zzsj[1] / clzs)});
  359 + fcjx.push({'min':8, 'max':20});
  360 + fcjx.push({'min':5, 'max':Math.round(zzsj[1] / clzs > 8 ? 8 : zzsj[1] / clzs)});
  361 + fcjx.push({'min':8, 'max':20});
  362 + } else {
  363 + // fcjx.push(Math.round(zzsj[0] / clzs > 20.4 ? 20 : (zzsj[0] / clzs < 15 ? 15 : zzsj[1] / clzs)));
  364 + fcjx.push({'min':10, 'max':15});
  365 + fcjx.push({'min':5, 'max':Math.floor(zzsj[1] / clzs)});
  366 + fcjx.push({'min':8, 'max':20});
  367 + fcjx.push({'min':5, 'max':Math.floor(zzsj[1] / clzs)});
  368 + fcjx.push({'min':8, 'max':20});
  369 + }
  370 + var sjd = [];
  371 + sjd.push({'start':seMap.s, 'end':map.end1});
  372 + sjd.push({'start':map.start2, 'end':map.end2});
  373 + sjd.push({'start':map.start3, 'end':map.end3});
  374 + sjd.push({'start':map.start4, 'end':map.end4});
  375 + sjd.push({'start':map.start5, 'end':seMap.e});
  376 + DateTimeTool.initSJD(sjd);
  377 +
  378 + dataMap.zgfzqsjd = [{'st':DateTimeTool.getDateTime(seMap.s), 'ed':DateTimeTool.getDateTime(map.end1)}];
  379 + dataMap.zgfsjd = [{'st':DateTimeTool.getDateTime(map.start2), 'ed':DateTimeTool.getDateTime(map.end2)}];
  380 + dataMap.gfzjsjd = [{'st':DateTimeTool.getDateTime(map.start3), 'ed':DateTimeTool.getDateTime(map.end3)}];
  381 + dataMap.wgfsjd = [{'st':DateTimeTool.getDateTime(map.start4), 'ed':DateTimeTool.getDateTime(map.end4)}];
  382 + dataMap.wgfzhsjd = [{'st':DateTimeTool.getDateTime(map.start5), 'ed':DateTimeTool.getDateTime(seMap.e)}];
  383 + dataMap.sjd = sjd;
  384 + dataMap.xssj = xssj; // 行驶时间
  385 + dataMap.tzsj = tzsj; // 停站时间zse31
  386 + dataMap.zzsj = zzsj; // 周转时间
  387 + dataMap.fcjx = fcjx; // 发车间隙
  388 + // 清除不用的元素
  389 + delete dataMap.dgtzsj;
  390 + delete dataMap.dgxxsjArr;
  391 + delete dataMap.gftzsj;
  392 + delete dataMap.gfxxsjArr;
  393 + map.dgmaxfcjx = 20;
315 394 // map.dgmaxtzsj = upDownTravelTime3 < 10 ? 10 : upDownTravelTime3;
316 395 };
317   - // 判断时间在什么时间段段内
318   - var judgmentTimeQuantum = function (t) {
319   - if(t <= DateTimeTool.getDateTime('6:30'))
320   - return 0;
321   - else if(t > DateTimeTool.getDateTime('6:30') && t <= DateTimeTool.getDateTime('8:30'))
322   - return 1;
323   - else if(t > DateTimeTool.getDateTime('8:30') && t <= DateTimeTool.getDateTime('16:00'))
324   - return 2;
325   - else if(t > DateTimeTool.getDateTime('16:00') && t <= DateTimeTool.getDateTime('18:00'))
326   - return 3;
327   - else if(t > DateTimeTool.getDateTime('18:00'))
328   - return 4;
329   - };
330   - // 8:31-16:00专用
331   - var judgmentTimeQuantum1 = function (t) {
332   - if(t > DateTimeTool.getDateTime('8:30') && t <= DateTimeTool.getDateTime('10:30'))
333   - return 1;
334   - else if(t > DateTimeTool.getDateTime('10:30') && t <= DateTimeTool.getDateTime('12:30'))
335   - return 2;
336   - else if(t > DateTimeTool.getDateTime('12:30') && t <= DateTimeTool.getDateTime('14:30'))
337   - return 2;
338   - else if(t > DateTimeTool.getDateTime('14:30') && t <= DateTimeTool.getDateTime('16:00'))
339   - return 1;
340   - };
341 396  
342 397 // 判断发车间隙
343 398 var judgeFCJX = function (kssj, dataMap) {
344   - var time = dataMap.fcjx[judgmentTimeQuantum(kssj)];
  399 + var time = dataMap.fcjx[DateTimeTool.judgmentTimeQuantum(kssj)];
345 400 if(time == null)
346 401 return 0;
347   - if(judgmentTimeQuantum(kssj) == 2) {
  402 + if(DateTimeTool.judgmentTimeQuantum(kssj) == 2) {
348 403 // 为了从大到小在从小到大
349   - var time = Math.round((time.max - time.min)/2);
350   - return time*judgmentTimeQuantum1(kssj) + time.min;
  404 + var resultTime = Math.round((time.max - time.min)/2);
  405 + return resultTime*DateTimeTool.judgmentTimeQuantum1(kssj) + time.min;
  406 + }else if(DateTimeTool.judgmentTimeQuantum(kssj) == 1 || DateTimeTool.judgmentTimeQuantum(kssj) == 3) {
  407 + return time.max;
351 408 } else {
352 409 return Math.round((time.max + time.min)/2);
353 410 }
... ... @@ -355,8 +412,8 @@ var scheduleInitialize = function () {
355 412 // 判断停站时间
356 413 var judgeTZSJ = function (dir, kssj, dataMap) {
357 414 var sj = new Date(kssj);
358   - sj.setMinutes(sj.getMinutes() + dataMap.xssj[dir][judgmentTimeQuantum(sj)]);
359   - var sjd = judgmentTimeQuantum(sj);
  415 + sj.setMinutes(sj.getMinutes() + dataMap.xssj[dir][DateTimeTool.judgmentTimeQuantum(sj)]);
  416 + var sjd = DateTimeTool.judgmentTimeQuantum(sj);
360 417 var time = dataMap.tzsj[dir][sjd];
361 418 if(time == null)
362 419 return 0;
... ... @@ -370,9 +427,9 @@ var scheduleInitialize = function () {
370 427 };
371 428 // 判断行驶时间
372 429 var judgeXSSJ = function (dir, kssj, dataMap) {
373   - var xssj = dataMap.xssj[dir][judgmentTimeQuantum(kssj)];
  430 + var xssj = dataMap.xssj[dir][DateTimeTool.judgmentTimeQuantum(kssj)];
374 431  
375   - var sjd = judgmentTimeQuantum(sj);
  432 + /*var sjd = DateTimeTool.judgmentTimeQuantum(kssj);
376 433 var time = dataMap.tzsj[dir][sjd];
377 434 if(time == null)
378 435 return 0;
... ... @@ -383,6 +440,18 @@ var scheduleInitialize = function () {
383 440 } else {
384 441 return time.max;
385 442 }
  443 +
  444 + var time = dataMap.fcjx[DateTimeTool.judgmentTimeQuantum(kssj)];
  445 + if(time == null)
  446 + return 0;
  447 + if(DateTimeTool.judgmentTimeQuantum(kssj) == 2) {
  448 + // 为了从大到小在从小到大
  449 + var time = Math.round((time.max - time.min)/2);
  450 + return time*DateTimeTool.judgmentTimeQuantum1(kssj) + time.min;
  451 + } else {
  452 + return Math.round((time.max + time.min)/2);
  453 + }*/
  454 + return xssj;
386 455 };
387 456 /**
388 457 * @discription : (TODO) 判断是否为最后一个班次
... ... @@ -400,22 +469,6 @@ var scheduleInitialize = function () {
400 469 return tag;
401 470 };
402 471 /**
403   - * @discription : (TODO) 获取行驶时间
404   - *
405   - * @parmas : [zg--早高峰时间段;wg--晚高峰时间段;sj--当前时间;pc--平常行驶时间;gf--高峰行驶时间;dir--方向]
406   - *
407   - * @return : 返回一个数值。这里返回的是行驶时间数值
408   - *
409   - * */
410   - var getByDirTravelTime = function(zg,wg,sj,pc,gf,dir) {
411   - var xxsj = 0;
412   - if(isgfsjd(zg[0].st,zg[0].ed,sj) || isgfsjd(wg[0].st,wg[0].ed,sj))
413   - xxsj = gf[dir];
414   - else
415   - xxsj = pc[dir];
416   - return xxsj;
417   - };
418   - /**
419 472 * @discription : (TODO) 比较一个时间是否在某个时间段内
420 473 *
421 474 * @params : [st--开始时间;ed--结束时间;sj--当前时间]
... ... @@ -503,77 +556,6 @@ var scheduleInitialize = function () {
503 556 };
504 557  
505 558 /**
506   - * @description (TODO) 标记上、下行首末班车.
507   - * @param jsonArray 初始化路牌下的所有班次并且已经均匀发车间隙的数组集合.
508   - * @param dataMap 封装的 以上、下行方向成对存在的 一些参数数组 [下标0 -- 代表上行 ; 下标1 -- 代表下行].
509   - */
510   - var markFirstAndLastBus = function(jsonArray , dataMap) {
511   - // 定义上、下行的正常、区间、空放、直放班次、返回数组集合.
512   - var listMap = getUpAndDownBc( jsonArray , dataMap) , resultArray = new Array();
513   - for(var i = 0 ; i < listMap.length ; i++) {
514   - if(listMap[i].bc.length > 0){
515   - // 把班次顺序排序.
516   - listMap[i].bc.sort(function(a,b){return a.fcint-b.fcint});
517   - // 确定首末班车时间.
518   - markFirstAndLastBusAlso(listMap[i].bc , dataMap , i);
519   - }
520   - resultArray = resultArray.concat(listMap[i].bc);
521   - }
522   - return resultArray;
523   - };
524   -
525   - /**
526   - * @description (TODO) 确定某方向下的末班车.
527   - * @param dirArray 某方向下的数组集合.
528   - * @param dataMap 封装的 以上、下行方向成对存在的 一些参数数组 [下标0 -- 代表上行 ; 下标1 -- 代表下行].
529   - * @param dir 方向.
530   - */
531   - var markFirstAndLastBusAlso = function(dirArray , dataMap , dir) {
532   - if(dirArray.length>=2) {
533   - // 定义最后一个班次.
534   - var dirLastBc = dirArray[dirArray.length-1];
535   - // 确认末班车时间
536   - if(dirLastBc.fcsj != dataMap.smbcsjArr[dir].jssj) {
537   - // 修改最后一个班次的发车时间.
538   - dirLastBc.fcsj = dataMap.smbcsjArr[dir].jssj;
539   - // 修改最后一个班次的班次时间.
540   - dirLastBc.bcsj = dataMap.dgxxsjArr[dir];
541   - // 定义到达时间.
542   - var ddsj_ = DateTimeTool.getDateTime(dirLastBc.fcsj);
543   - ddsj_.setMinutes(ddsj_.getMinutes() + dataMap.xssj[dir][4]);
544   - // 修改最后一个班次的到达时间.
545   - dirLastBc.ARRIVALTIME = DateTimeTool.getHHmmStr(ddsj_);
546   - dirLastBc.bcsj = dataMap.xssj[dir][4];
547   - }
548   - }
549   - };
550   -
551   - /**
552   - * @description (TODO) 获取 上、下行的正常、区间、空放、直放班次.
553   - * @param 需要分割的班次数据集合.
554   - * @param 封装的 以上、下行方向成对存在的 一些参数数组 [下标0 -- 代表上行 ; 下标1 -- 代表下行].
555   - */
556   - var getUpAndDownBc = function(json,dataMap) {
557   - // 定义上行班次 、 下行班次 数组集合、返回数组集合对象.
558   - var upArray = new Array(),downArray = new Array(),rs = new Array();
559   - for(var j = 0 ; j< json.length ; j++) {
560   - // 判断是否为正常、区间、空放、直放班次
561   - if(json[j].bcType== dataMap.bcTypeArr.normal ||
562   - json[j].bcType== dataMap.bcTypeArr.region ||
563   - json[j].bcType== dataMap.bcTypeArr.major ||
564   - json[j].bcType== dataMap.bcTypeArr.venting) {
565   - if(json[j].xlDir == dataMap.dira[0])
566   - upArray.push(json[j]);
567   - else if(json[j].xlDir == dataMap.dira[1])
568   - downArray.push(json[j]);
569   - }
570   - }
571   - rs.push({'bc' : upArray},{'bc' : downArray});
572   - // 返回数据.
573   - return rs;
574   - };
575   -
576   - /**
577 559 * @description : (TODO) 调整某班型下的各个路牌对应的班次以及工时、停站时间、是否分班. -- 这里我们也叫抽车
578 560 * @param bxlpbc 班型下的各个路牌的所有班次数组.
579 561 * @param map 表单参数信息
... ... @@ -636,106 +618,95 @@ var scheduleInitialize = function () {
636 618 var sumGs = 0;
637 619 if(lpbc.length<=0)
638 620 return;
639   - var isLastFlag = lpDownIsHaveLastBc(lpbc , dataMap.smbcsjArr) , tcbcgzA = new Array();
640   - var isFirstFlag = lpDownIsHaveFirstBc(lpbc , dataMap.smbcsjArr);
  621 + var isLastFlag = bcFun.lpBcIsHaveLast(lpbc , dataMap.smbcsjArr) , tcbcgzA = new Array();
  622 + var isFirstFlag = bcFun.lpBcIsHaveFirst(lpbc , dataMap.smbcsjArr);
641 623 var bxStr = lpbc[0].lpName.split('_');
642 624 /** 满足工时需要剔除的班次
643 625 * wgfhtcbcNum,zgfqtcbcNum 定义晚高峰后,早高峰前 能剔除多少班次数(适用于单挡连班)
644   - * dgzjtcbcNum: 低估中间能剔除多少班次数(适用于五休二以外的分班)
  626 + * dgzjtcbcNum1: 低估中间能剔除多少班次数(适用于五休二以外的分班)
645 627 * dgtcbcNum: 低估能剔除多少班次数(适用于五休二分班)
646 628 */
647   - var wgfhtcbcNum=0,zgfqtcbcNum=0,dgzjtcbcNum=0,dgtcbcNum=0;
  629 + var wgfhtcbcNum=0,zgfqtcbcNum=0,dgzjtcbcNum1=0,dgzjtcbcNum2=0,dgtcbcNum=0;
648 630 $.each(lpbc, function () {
649 631 if(DateTimeTool.getDateTime(this.fcsj) > dataMap.wgfzhsjd[0].st)
650 632 wgfhtcbcNum++;
651 633 if(DateTimeTool.getDateTime(this.fcsj) < dataMap.zgfsjd[0].st)
652 634 zgfqtcbcNum++;
653 635 if(DateTimeTool.getDateTime(this.fcsj) > dgzjsj && DateTimeTool.getDateTime(this.fcsj) < dataMap.wgfsjd[0].st)
654   - dgzjtcbcNum++;
  636 + dgzjtcbcNum1++;
  637 + if(DateTimeTool.getDateTime(this.fcsj) > dataMap.zgfsjd[0].ed && DateTimeTool.getDateTime(this.fcsj) < dgzjsj)
  638 + dgzjtcbcNum2++;
655 639 if(DateTimeTool.getDateTime(this.fcsj) > dataMap.zgfsjd[0].ed && DateTimeTool.getDateTime(this.fcsj) < dataMap.wgfsjd[0].st)
656 640 dgtcbcNum++;
657   -
658 641 });
  642 + // dgtcbcNum = dgzjtcbcNum1+dgzjtcbcNum2
659 643 if(bxStr[0] == '五工二休'){
660   - if(isLastFlag) {
  644 + if(isLastFlag && !isFirstFlag) {
661 645 // 定义时间段内剔除班次规则.
662   - tcbcgzA.push({'minsj': dataMap.zgfsjd[0].ed , 'maxsj' : dataMap.wgfsjd[0].st , 'order' : 'asc' , 'deletebcNum' : deletebcNum - dgtcbcNum > 0 ? dgtcbcNum: deletebcNum});
  646 + tcbcgzA.push({'minsj': dgzjsj , 'maxsj' : dataMap.wgfsjd[0].st , 'order' : 'asc' , 'deletebcNum' : deletebcNum - dgzjtcbcNum1 > 0 ? dgzjtcbcNum1: deletebcNum},
  647 + {'minsj': dataMap.zgfsjd[0].ed , 'maxsj' : dgzjsj , 'order' : 'desc' , 'deletebcNum' : deletebcNum - dgtcbcNum > 0 ? dgzjtcbcNum2: deletebcNum-dgzjtcbcNum1},
  648 + {'minsj': dataMap.zgfzqsjd[0].st , 'maxsj' : dataMap.zgfzqsjd[0].ed , 'order' : 'desc' , 'deletebcNum' : deletebcNum - dgtcbcNum - zgfqtcbcNum > 0 ? zgfqtcbcNum: deletebcNum-dgtcbcNum});
663 649 }else {
664   - tcbcgzA.push({'minsj': dataMap.zgfsjd[0].ed , 'maxsj' : dataMap.wgfsjd[0].st ,'order' : 'asc' , 'deletebcNum' : deletebcNum - dgtcbcNum > 0 ? dgtcbcNum: deletebcNum},
665   - {'minsj': dataMap.wgfzhsjd[0].st , 'maxsj' : dataMap.wgfzhsjd[0].ed , 'order' : 'desc' , 'deletebcNum' : deletebcNum - dgtcbcNum});
  650 + tcbcgzA.push({'minsj': dgzjsj , 'maxsj' : dataMap.wgfsjd[0].st , 'order' : 'asc' , 'deletebcNum' : deletebcNum - dgzjtcbcNum1 > 0 ? dgzjtcbcNum1: deletebcNum},
  651 + {'minsj': dataMap.zgfsjd[0].ed , 'maxsj' : dgzjsj , 'order' : 'desc' , 'deletebcNum' : deletebcNum - dgtcbcNum > 0 ? dgzjtcbcNum2: deletebcNum-dgzjtcbcNum1},
  652 + {'minsj': dataMap.wgfzhsjd[0].st , 'maxsj' : dataMap.wgfzhsjd[0].ed , 'order' : 'desc' , 'deletebcNum' : deletebcNum - dgtcbcNum - zgfqtcbcNum > 0 ? zgfqtcbcNum: deletebcNum-dgtcbcNum});
666 653 }
667 654 } else {
668 655 if(lpbc.isfb) {
669   - if(isLastFlag) {
670   - tcbcgzA.push({'minsj': dgzjsj, 'maxsj' : dataMap.wgfsjd[0].st, 'order' : 'asc', 'deletebcNum' : deletebcNum - dgzjtcbcNum > 0 ? dgzjtcbcNum: deletebcNum},
671   - {'minsj': dataMap.zgfzqsjd[0].st , 'maxsj' : dataMap.zgfzqsjd[0].ed , 'order' : 'asc', 'deletebcNum' : deletebcNum - dgzjtcbcNum});
672   - } else if(isFirstFlag){
673   - tcbcgzA.push({'minsj': dgzjsj, 'maxsj' : dataMap.wgfsjd[0].st, 'order' : 'asc', 'deletebcNum' : deletebcNum - dgzjtcbcNum > 0 ? dgzjtcbcNum: deletebcNum},
674   - {'minsj': dataMap.wgfzhsjd[0].st , 'maxsj' : dataMap.wgfzhsjd[0].ed , 'order' : 'asc', 'deletebcNum' : deletebcNum - dgzjtcbcNum});
  656 + if(isLastFlag && !isFirstFlag) {
  657 + tcbcgzA.push({'minsj': dgzjsj, 'maxsj' : dataMap.wgfsjd[0].st, 'order' : 'desc', 'deletebcNum' : deletebcNum - dgzjtcbcNum1 > 0 ? dgzjtcbcNum1 : deletebcNum},
  658 + {'minsj': dataMap.zgfzqsjd[0].st , 'maxsj' : dataMap.zgfzqsjd[0].ed , 'order' : 'asc', 'deletebcNum' : deletebcNum - dgzjtcbcNum1 - zgfqtcbcNum > 0 ? zgfqtcbcNum : deletebcNum - dgzjtcbcNum1});
  659 + } else if(isFirstFlag && !isLastFlag){
  660 + tcbcgzA.push({'minsj': dgzjsj, 'maxsj' : dataMap.wgfsjd[0].st, 'order' : 'asc', 'deletebcNum' : deletebcNum - dgzjtcbcNum1 > 0 ? dgzjtcbcNum1 : deletebcNum},
  661 + {'minsj': dataMap.wgfzhsjd[0].st , 'maxsj' : dataMap.wgfzhsjd[0].ed , 'order' : 'desc', 'deletebcNum' : deletebcNum - dgzjtcbcNum1 - wgfhtcbcNum > 0 ? wgfhtcbcNum : deletebcNum-dgzjtcbcNum1},
  662 + {'minsj': dataMap.zgfsjd[0].ed , 'maxsj' : dgzjsj , 'order' : 'desc' , 'deletebcNum' : deletebcNum - dgtcbcNum > 0 ? dgzjtcbcNum2 : deletebcNum-dgzjtcbcNum1});
  663 + } else if(isFirstFlag && isLastFlag){
  664 + tcbcgzA.push({'minsj': dgzjsj, 'maxsj' : dataMap.wgfsjd[0].st, 'order' : 'asc', 'deletebcNum' : deletebcNum - dgtcbcNum > 0 ? dgtcbcNum : deletebcNum});
675 665 } else {
676   - tcbcgzA.push({'minsj': dataMap.wgfsjd[0].ed, 'maxsj' : dataMap.wgfzhsjd[0].ed,'order' : 'desc', 'deletebcNum' : deletebcNum - dgzjtcbcNum},
677   - {'minsj': dgzjsj, 'maxsj' : dataMap.wgfsjd[0].st, 'order' : 'asc', 'deletebcNum' : deletebcNum - dgzjtcbcNum > 0 ? dgzjtcbcNum: deletebcNum});
  666 + tcbcgzA.push({'minsj': dgzjsj , 'maxsj' : dataMap.wgfsjd[0].st , 'order' : 'asc' , 'deletebcNum' : deletebcNum - dgzjtcbcNum1 > 0 ? dgzjtcbcNum1: deletebcNum},
  667 + {'minsj': dataMap.zgfsjd[0].ed , 'maxsj' : dgzjsj , 'order' : 'desc' , 'deletebcNum' : deletebcNum - dgtcbcNum > 0 ? dgzjtcbcNum2: deletebcNum-dgzjtcbcNum1},
  668 + {'minsj': dataMap.wgfzhsjd[0].st , 'maxsj' : dataMap.wgfzhsjd[0].ed , 'order' : 'desc' , 'deletebcNum' : deletebcNum - dgtcbcNum - zgfqtcbcNum > 0 ? zgfqtcbcNum: deletebcNum-dgtcbcNum});
678 669 }
679 670 }else {
  671 + if(isLastFlag && !isFirstFlag) {
  672 + tcbcgzA.push({'minsj': dgzjsj, 'maxsj' : dataMap.wgfsjd[0].st, 'order' : 'asc', 'deletebcNum' : deletebcNum - dgzjtcbcNum1 - zgfqtcbcNum > 0 ? dgzjtcbcNum1 : deletebcNum-zgfqtcbcNum},
  673 + {'minsj': dataMap.zgfzqsjd[0].st , 'maxsj' : dataMap.zgfzqsjd[0].ed , 'order' : 'asc', 'deletebcNum' : deletebcNum - zgfqtcbcNum > 0 ? zgfqtcbcNum : deletebcNum});
  674 + } else if(!isLastFlag && isFirstFlag){
  675 + tcbcgzA.push({'minsj': dgzjsj, 'maxsj' : dataMap.wgfsjd[0].st, 'order' : 'asc', 'deletebcNum' : deletebcNum - wgfhtcbcNum - dgzjtcbcNum1 > 0 ? dgzjtcbcNum1 : deletebcNum-wgfhtcbcNum},
  676 + {'minsj': dataMap.wgfzhsjd[0].st , 'maxsj' : dataMap.wgfzhsjd[0].ed , 'order' : 'desc', 'deletebcNum' : deletebcNum - wgfhtcbcNum > 0 ? wgfhtcbcNum : deletebcNum});
  677 + } else if(isFirstFlag && isLastFlag){
  678 + tcbcgzA.push({'minsj': dgzjsj, 'maxsj' : dataMap.wgfsjd[0].st, 'order' : 'asc', 'deletebcNum' : deletebcNum - dgtcbcNum > 0 ? dgtcbcNum : deletebcNum});
  679 + } else {
  680 + tcbcgzA.push({'minsj': dataMap.wgfzhsjd[0].st , 'maxsj' : dataMap.wgfzhsjd[0].ed, 'order' : 'desc', 'deletebcNum' : deletebcNum - zgfqtcbcNum - wgfhtcbcNum > 0 ? wgfhtcbcNum : deletebcNum-zgfqtcbcNum},
  681 + {'minsj': dataMap.zgfzqsjd[0].st, 'maxsj' : dataMap.zgfzqsjd[0].ed, 'order' : 'asc','deletebcNum' : deletebcNum - zgfqtcbcNum > 0 ? zgfqtcbcNum : deletebcNum});
  682 + }
680 683 // 单档 一个路牌一档劳动力
681 684 /*if(deletebcNum - (wgfhtcbcNum+zgfqtcbcNum) > 0) {
682 685 // TODO:可能删除末班车
683   - tcbcgzA.push({'minsj': dataMap.wgfsjd[0].ed, 'maxsj' : dataMap.wgfzhsjd[0].ed,'order' : 'desc', 'deletebcNum' : deletebcNum - dgzjtcbcNum},
684   - {'minsj': dgzjsj, 'maxsj' : dataMap.wgfsjd[0].st, 'order' : 'asc', 'deletebcNum' : deletebcNum - dgzjtcbcNum > 0 ? dgzjtcbcNum: deletebcNum});
  686 + tcbcgzA.push({'minsj': dataMap.wgfsjd[0].ed, 'maxsj' : dataMap.wgfzhsjd[0].ed,'order' : 'desc', 'deletebcNum' : deletebcNum - dgzjtcbcNum1},
  687 + {'minsj': dgzjsj, 'maxsj' : dataMap.wgfsjd[0].st, 'order' : 'asc', 'deletebcNum' : deletebcNum - dgzjtcbcNum1 > 0 ? dgzjtcbcNum1: deletebcNum});
685 688 } else {
686 689 if(isLastFlag) {
687   - tcbcgzA.push({'minsj': dgzjsj, 'maxsj' : dataMap.wgfsjd[0].st, 'order' : 'asc', 'deletebcNum' : deletebcNum - dgzjtcbcNum > 0 ? dgzjtcbcNum: deletebcNum},
688   - {'minsj': dataMap.zgfzqsjd[0].st , 'maxsj' : dataMap.zgfzqsjd[0].ed , 'order' : 'asc', 'deletebcNum' : deletebcNum - dgzjtcbcNum});
  690 + tcbcgzA.push({'minsj': dgzjsj, 'maxsj' : dataMap.wgfsjd[0].st, 'order' : 'asc', 'deletebcNum' : deletebcNum - dgzjtcbcNum1 > 0 ? dgzjtcbcNum1: deletebcNum},
  691 + {'minsj': dataMap.zgfzqsjd[0].st , 'maxsj' : dataMap.zgfzqsjd[0].ed , 'order' : 'asc', 'deletebcNum' : deletebcNum - dgzjtcbcNum1});
689 692 } else if(isFirstFlag){
690   - tcbcgzA.push({'minsj': dgzjsj, 'maxsj' : dataMap.wgfsjd[0].st, 'order' : 'asc', 'deletebcNum' : deletebcNum - dgzjtcbcNum > 0 ? dgzjtcbcNum: deletebcNum},
691   - {'minsj': dataMap.wgfzhsjd[0].st , 'maxsj' : dataMap.wgfzhsjd[0].ed , 'order' : 'asc', 'deletebcNum' : deletebcNum - dgzjtcbcNum});
  693 + tcbcgzA.push({'minsj': dgzjsj, 'maxsj' : dataMap.wgfsjd[0].st, 'order' : 'asc', 'deletebcNum' : deletebcNum - dgzjtcbcNum1 > 0 ? dgzjtcbcNum1: deletebcNum},
  694 + {'minsj': dataMap.wgfzhsjd[0].st , 'maxsj' : dataMap.wgfzhsjd[0].ed , 'order' : 'asc', 'deletebcNum' : deletebcNum - dgzjtcbcNum1});
692 695 } else {
693 696 tcbcgzA.push({'minsj': dataMap.wgfsjd[0].ed, 'maxsj' : dataMap.wgfzhsjd[0].ed, 'order' : 'desc', 'deletebcNum' : deletebcNum - zgfqtcbcNum},
694 697 {'minsj': dataMap.zgfzqsjd[0].st, 'maxsj' : dataMap.zgfzqsjd[0].ed, 'order' : 'asc','deletebcNum' : zgfqtcbcNum});
695 698 }
696 699 }*/
697   - if(isLastFlag) {
698   - tcbcgzA.push({'minsj': dataMap.zgfsjd[0].ed, 'maxsj' : dataMap.wgfsjd[0].st, 'order' : 'asc', 'deletebcNum' : deletebcNum - dgtcbcNum > 0 ? dgtcbcNum: deletebcNum});
699   - } else if(isFirstFlag){
700   - tcbcgzA.push({'minsj': dgzjsj, 'maxsj' : dataMap.wgfsjd[0].st, 'order' : 'asc', 'deletebcNum' : deletebcNum - dgzjtcbcNum > 0 ? dgzjtcbcNum: deletebcNum},
701   - {'minsj': dataMap.wgfzhsjd[0].st , 'maxsj' : dataMap.wgfzhsjd[0].ed , 'order' : 'desc', 'deletebcNum' : deletebcNum - dgzjtcbcNum});
702   - } else {
703   - tcbcgzA.push({'minsj': dataMap.wgfzhsjd[0].st , 'maxsj' : dataMap.wgfzhsjd[0].ed, 'order' : 'desc', 'deletebcNum' : deletebcNum - zgfqtcbcNum},
704   - {'minsj': dataMap.zgfzqsjd[0].st, 'maxsj' : dataMap.zgfzqsjd[0].ed, 'order' : 'asc','deletebcNum' : zgfqtcbcNum});
705   - }
706 700 }
707 701 }
708 702 // 剔除不在高峰时间段内的班次.
709 703 spliceBc02(lpbc , tcbcgzA , dataMap , false);
  704 + lpbc.sort(function(x,y){return x.fcno-y.fcno});
710 705 rsultA = rsultA.concat(lpbc);
711 706 return rsultA;
712 707 };
713 708  
714 709 /**
715   - * @description (TODO) 判断某路牌下是否存在末班车时间班次.
716   - * @param arr 某路牌下的班次.
717   - * @param smbcsjArr 首末班车时间点数组集合.
718   - */
719   - var lpDownIsHaveLastBc = function(arr , smbcsjArr) {
720   - for(var a = 0 ; a < arr.length ; a++) {
721   - for(var s = 0 ; s < smbcsjArr.length ; s++) {
722   - if(arr[a].fcsj == smbcsjArr[s].jssj && dirDmToIndex(arr[a].xlDir) == s)
723   - return true;
724   - }
725   - }
726   - return false;
727   - };
728   - var lpDownIsHaveFirstBc = function(arr , smbcsjArr) {
729   - for(var a = 0 ; a < arr.length ; a++) {
730   - for(var s = 0 ; s < smbcsjArr.length ; s++) {
731   - if(arr[a].fcsj == smbcsjArr[s].kssj && dirDmToIndex(arr[a].xlDir) == s)
732   - return true;
733   - }
734   - }
735   - return false;
736   - };
737   -
738   - /**
739 710 * @description (TODO) 根据定义规则剔除班次.
740 711 * @param arr 班次数组.
741 712 * @param tcbcgzA 剔除规则.
... ... @@ -743,7 +714,8 @@ var scheduleInitialize = function () {
743 714 * @param isfb 剔除过程中是否会产生分班.
744 715 */
745 716 var spliceBc02 = function (arr , tcbcgzA , dataMap , isfb) {
746   - for(var t = 0 ; t < tcbcgzA.length ; t++) {
  717 + tcbcgzA.sort();
  718 + for(var t = tcbcgzA.length-1 ; t >=0 ; t--) {
747 719 if(tcbcgzA[t].deletebcNum <= 0) {
748 720 continue;
749 721 }
... ... @@ -752,22 +724,73 @@ var scheduleInitialize = function () {
752 724 arr.sort(function(x,y){return x.fcno-y.fcno});
753 725 else if(order == 'desc')
754 726 arr.sort(function(m,n){return n.fcno-m.fcno});
755   - for(var a = 0 ; a < arr.length ; a ++) {
756   - var fcsj = DateTimeTool.getDateTime(arr[a].fcsj);
757   - // 判断是否在高峰时间范围.【true--表示在,false--表示不在】.
758   - if(!isPeakTimeScope(fcsj,dataMap) && fcsj > tcbcgzA[t].minsj && fcsj < tcbcgzA[t].maxsj) {
759   - if(order == 'asc') {
760   - if(a>0) {
761   - arr[a-1].isfb = isfb ? 1 : 0;
762   - arr[a-1].STOPTIME = 0;
  727 + // 主站停车类型,分班班次只能主站停车
  728 + if(dataMap.isMasterStop) {
  729 + for(var a = 0 ; a < arr.length ; a ++) {
  730 + var fcsj = DateTimeTool.getDateTime(arr[a].fcsj);
  731 + // 判断是否在高峰时间范围.【true--表示在,false--表示不在】.
  732 + if(!isPeakTimeScope(fcsj,dataMap) && fcsj > tcbcgzA[t].minsj && fcsj < tcbcgzA[t].maxsj) {
  733 + // 判断早高峰两小时之后的剔除班次,是否需要考虑主站停车(默认需要考录,但是早高峰之后两小时内有需要剔除的班次,那就不考虑)
  734 + var sjdtype = true;
  735 + if(order == 'asc') {
  736 + if(a>0 && arr[a-1] != undefined && arr[a-1] != null) {
  737 + // 分班路牌需要主站停车
  738 + if(sjdtype && tcbcgzA[t].minsj >= dataMap.zgfsjd[0].ed && tcbcgzA[t].maxsj <= dataMap.wgfsjd[0].st && bcFun.dirDmToIndex(arr[a-1].xlDir) == dataMap.zzfx){
  739 + a++;
  740 + if(isPeakTimeScope(arr[a+tcbcgzA[t].deletebcNum].fcsj,dataMap))
  741 + tcbcgzA[t].deletebcNum--;
  742 + }
  743 + arr[a - 1].isfb = true;
  744 + arr[a - 1].STOPTIME = 0;
  745 + if(tcbcgzA[t].deletebcNum > 0) {
  746 + }
  747 + }
  748 + }else if(order == 'desc') {
  749 + var index_ = a + tcbcgzA[t].deletebcNum;
  750 + if(arr[index_] != undefined && arr[index_] != null){
  751 + // 分班路牌需要主站停车
  752 + if(tcbcgzA[t].minsj >= dataMap.zgfsjd[0].ed && tcbcgzA[t].maxsj <= dataMap.wgfsjd[0].st){
  753 + // 早高峰之后两小时内有需要剔除的班次标记(使标记失效)
  754 + sjdtype = false;
  755 + if(bcFun.dirDmToIndex(arr[index_].xlDir) == dataMap.zzfx) {
  756 + tcbcgzA[t].deletebcNum--;
  757 + index_--;
  758 + }
  759 + }
  760 + if(tcbcgzA[t].deletebcNum > 0){
  761 + arr[index_].STOPTIME = 0;
  762 + arr[index_].isfb = true;
  763 + }
  764 + }
763 765 }
764   - }else if(order == 'desc') {
765   - var index_ = a + tcbcgzA[t].deletebcNum;
766   - arr[index_].STOPTIME = 0;
767   - arr[index_].isfb = isfb && a > 0 ? 1 : 0;
  766 + arr.splice( a , tcbcgzA[t].deletebcNum);
  767 + break;
  768 + }
  769 + }
  770 +
  771 + } else {
  772 + // 双向停站没有停站限制
  773 + for(var a = 0 ; a < arr.length ; a ++) {
  774 + var fcsj = DateTimeTool.getDateTime(arr[a].fcsj);
  775 + // 判断是否在高峰时间范围.【true--表示在,false--表示不在】.
  776 + if(!isPeakTimeScope(fcsj,dataMap) && fcsj > tcbcgzA[t].minsj && fcsj < tcbcgzA[t].maxsj) {
  777 + if(order == 'asc') {
  778 + if(a>0 && arr[a-1] != undefined && arr[a-1] != null) {
  779 + // arr[a-1].isfb = isfb ? 1 : 0;
  780 + arr[a-1].isfb = true;
  781 + arr[a-1].STOPTIME = 0;
  782 + }
  783 + }else if(order == 'desc') {
  784 + var index_ = a + tcbcgzA[t].deletebcNum;
  785 + if(arr[index_] != undefined && arr[index_] != null){
  786 + arr[index_].STOPTIME = 0;
  787 + arr[index_].isfb = true;
  788 + // arr[index_].isfb = isfb && a > 0 ? 1 : 0;
  789 + }
  790 + }
  791 + arr.splice( a , tcbcgzA[t].deletebcNum);
  792 + break;
768 793 }
769   - arr.splice( a , tcbcgzA[t].deletebcNum);
770   - break;
771 794 }
772 795 }
773 796 }
... ... @@ -837,16 +860,6 @@ var scheduleInitialize = function () {
837 860 }
838 861 return parseFloat((sumWorkTime/60).toFixed(2));
839 862 };
840   - // 切割出连班路牌
841   - var cutCar = function(carListH,carListCache) {
842   - for(var c=0; c<carListH.length; c++){
843   - if(carListH[c].isfb) {
844   - carListCache.push(carListH[c]);
845   - carListH.splice(c,1);
846   - cutCar(carListH,carListCache);
847   - }
848   - }
849   - };
850 863 var dirDmToIndex = function (str) {
851 864 if(str == 'relationshipGraph-up')
852 865 return 0;
... ... @@ -893,6 +906,7 @@ var scheduleInitialize = function () {
893 906 if(canCf.length>0 && canCf[canCf.length-1].isfb == 0) { // NEW,如果班次是分班班次,就不吃饭
894 907 console.log('countTzsj:' + countTzsj + 'length:' + canCf.length);
895 908 var fxDm = dirDmToIndex(canCf[canCf.length-1].xlDir);
  909 + cfddDm = (cfddDm == 1 ? 0:1);
896 910 if (map.cfdd == "allYes") { // NEW,如果选择的吃饭地点是所有,则使用班次的方向作为吃饭班次的方向
897 911 cfddDm = fxDm;
898 912 }
... ... @@ -921,154 +935,12 @@ var scheduleInitialize = function () {
921 935 }
922 936 }
923 937 };
924   -
925   - /**
926   - * @description (TODO) 横向调整 调整停站时间.
927   - * @param cara 路牌数组.
928   - * @param tempa 所有的班次数组集合.
929   - * @param dataMap 封装的 以上、下行方向成对存在的 一些参数数组 [下标0 -- 代表上行 ; 下标1 -- 代表下行].
930   - *
931   - * ******************************** 思路 *************************************************
932   - * 第一步 等到每个路牌下的班次数组集合.
933   - *
934   - * 第二步 顺序排序每个路牌下的班次数组集合.
935   - *
936   - * 第三步 从第二个班次开始,用第二个班次的发车时间 - 上一个班次的到达时间 得到 上一个班次的停站时间.
937   - *
938   - * 第四步 修改上一个班次的停站时间.
939   - *
940   - * 修改停站时间规则:以行驶时间的10%-15% 为标准。
941   - * 如果超出该范围。则以录入参数低谷最大停站间隙为准。
942   - * 停站时间最大不能超过该停站时间。
943   - * 高峰附近的班次的停站时间在离高峰最近一个班次的停站时间浮动范围【1-2】分钟。
944   - *
945   - * ****************************************************************************************
946   - */
947   - var resizeByPitStopTime = function(cara,tempa,dataMap) {
948   - var cLen = cara.length,tLen = tempa.length;
949   - if(cLen<= 0 || tLen<=0 || dataMap==null)
950   - return;
951   - // 定义低谷最大停站时间、行业标准最小、最大停站时间(行驶时间的10%~15%).
952   - var dgmaxtzsj = dataMap.dgmaxtzsj,normmintzsj, normmaxtzsj;
953   - for(var t = 0 ; t < cLen ; t++) {
954   - // 定义当前路牌班次数组集合.
955   - var sslpbcA = new Array();
956   - for(var j =0 ; j < tLen ; j++) {
957   - // 判断当期遍历的班次是否属于当前的路牌.如果是则添加到当前的路牌班次数组集合.
958   - if(tempa[j].lpNo == cara[t].lpNo) {
959   - tempa[j].fcint = DateTimeTool.getDateTime(tempa[j].fcsj).getTime();
960   - sslpbcA.push(tempa[j]);
961   - }
962   - }
963   - if(sslpbcA.length > 0) {
964   - // 按发车时间顺序排序.
965   - sslpbcA.sort(function(a,b){return a.fcint-b.fcint});
966   - // 按照规则修改停站时间.
967   - for(var r = 0 ; r < sslpbcA.length-1 ; r++) {
968   - // test
969   - //if(sslpbcA[r].bcType == 'cf') {
970   - // alert('cf' + sslpbcA[r-1].fcsj);
971   - //}
972   - // 定义上一个班次的发车时间、当前班次的到达时间、发车时间.
973   - var sgbcfcsj = DateTimeTool.getDateTime(sslpbcA[r+1].fcsj),
974   - dqbcddsj = DateTimeTool.getDateTime(sslpbcA[r].ARRIVALTIME),
975   - dqbcfcsj = DateTimeTool.getDateTime(sslpbcA[r].fcsj);
976   - // 定义当前班次方向下标代码[0代表上行;1代表下行].
977   - var cctag = dirDmToIndex(sslpbcA[r].xlDir); // dataMap.smbcsjArr
978   - // 定义每每相邻两个班次之间的时间差分钟数(也就是停站时间.)
979   - var dxmin = parseInt( (sgbcfcsj - dqbcddsj)/60000);
980   - // 定义是否高峰
981   - var tt_flag = isPeakTimeScope(dqbcfcsj , dataMap);
982   - // 获取行驶时间.
983   - var xxsj = getByDirTravelTime(dataMap.zgfsjd , dataMap.wgfsjd , dqbcfcsj,
984   - dataMap.pcxssjArr , dataMap.gfxxsjArr ,
985   - dirDmToIndex(sslpbcA[r].xlDir));
986   - normmintzsj = xxsj*0.1;
987   - normmaxtzsj = xxsj*0.15;
988   - var flag = false;
989   -
990   - // 如果小于零
991   - if(dxmin < 0 && sslpbcA[r].isfb ==0) {
992   - // 根据不同时段的停站时间.重新赋值停站时间.
993   - if(sslpbcA[r].bcType=='normal' && sslpbcA[r+1].bcType =='normal')
994   - //dxmin = tt_flag ? dataMap.gftzsj[cctag] : dataMap.dgtzsj[cctag];
995   - dxmin = 1;
996   - else
997   - dxmin = 0;
998   - flag = true;
999   - }else if(dxmin==0){
1000   - if (sslpbcA[r].bcType == 'cf') { // 如果是吃饭班次,停站为0
1001   - dxmin = 0;
1002   - } else {
1003   - // 这里区分,如果下一个班次是吃饭班次,停站为0
1004   - if (sslpbcA[r + 1].bcType=='cf') {
1005   - dxmin = 0;
1006   - } else { // 否则使用最小停站时间
1007   - dxmin = normmintzsj;
1008   - }
1009   - }
1010   -
1011   - flag = true;
1012   - }else {
1013   - // 如果 大于等于低谷最大停站时间 并且 小于等于三小时.则把低谷最大停站时间 作为 停站时间.
1014   - if(dxmin >= dgmaxtzsj && dxmin < 180 && sslpbcA[r].isfb==0) {
1015   - dxmin = dgmaxtzsj;
1016   - flag = true;
1017   - // 如果大于零 并且 小于等于行业标准的最小停站时间
1018   - }else if(dxmin > 0 && dxmin <= normmintzsj ) {
1019   - // dxmin = dxmin;
1020   - flag = true;
1021   - // 如果大于行业标准的最小停站时间 并且 小于等于行业标准的最大停站时间
1022   - }else if(dxmin > normmintzsj && dxmin <= normmaxtzsj ) {
1023   - // dxmin = dxmin;
1024   - flag = true;
1025   - // 如果大于行业标准的最大停站时间 并且 小于低谷最大停站时间
1026   - }else if(dxmin > normmaxtzsj && dxmin < dgmaxtzsj ) {
1027   - // dxmin = dxmin;
1028   - flag = true;
1029   - }else if (dxmin >= 180){
1030   - dxmin = 0;
1031   - }
1032   - }
1033   - if(flag) {
1034   - if(!isDirSmbc(dirDmToIndex(sslpbcA[r+1].xlDir) , sslpbcA[r+1].fcsj , dataMap)) {
1035   - // 修改当前班次的停站时间.
1036   - sslpbcA[r].STOPTIME = parseInt(dxmin) ;
1037   - // 当前班次的到达时间 + 停站时间 作为下一个班次的发车时间.
1038   - dqbcddsj.setMinutes(dqbcddsj.getMinutes() + dxmin);
1039   - // 修改下一个班次的发车时间.
1040   - sslpbcA[r+1].fcsj = DateTimeTool.getHHmmStr(dqbcddsj);
1041   - // 下一个班次的发车时间 + 行驶时间 作为下一个班次的到达时间.
1042   - dqbcddsj.setMinutes(dqbcddsj.getMinutes() + sslpbcA[r+1].bcsj);
1043   - // 修改下一个班次的到达时间.
1044   - sslpbcA[r+1].ARRIVALTIME = DateTimeTool.getHHmmStr(dqbcddsj);
1045   - }else {
1046   - if(r>0) {
1047   - // 修改当前班次的停站时间.
1048   - sslpbcA[r].STOPTIME = parseInt(dxmin) ;
1049   - sgbcfcsj.setMinutes(sgbcfcsj.getMinutes() - sslpbcA[r].STOPTIME);
1050   - sslpbcA[r].ARRIVALTIME = DateTimeTool.getHHmmStr(sgbcfcsj);
1051   - sgbcfcsj.setMinutes(sgbcfcsj.getMinutes() - sslpbcA[r].bcsj);
1052   - sslpbcA[r].fcsj = DateTimeTool.getHHmmStr(sgbcfcsj);
1053   - sslpbcA[r-1].STOPTIME = parseInt( ( sgbcfcsj - DateTimeTool.getDateTime(sslpbcA[r-1].ARRIVALTIME))/60000);
1054   - }
1055   - }
1056   - }
1057   - }
1058   - }
1059   - }
1060   - };
1061   -
1062   - var isDirSmbc = function(dirDm , fcsj , dataMap) {
1063   - var falg = false;
1064   - if(fcsj == dataMap.smbcsjArr[dirDm].kssj || fcsj == dataMap.smbcsjArr[dirDm].jssj)
1065   - falg = true;
1066   - return falg;
1067   - };
1068   -
  938 +
1069 939 return {
1070 940 scheduleInit : scheduleInit,
1071   - judgeFCJX : judgeFCJX,
1072   - judgeTZSJ : judgeTZSJ
  941 + judgeFCJX : judgeFCJX, //判断发车间隙
  942 + judgeTZSJ : judgeTZSJ, //判断停站时间
  943 + judgeXSSJ : judgeXSSJ, //判断行驶时间
  944 + isPeakTimeScope : isPeakTimeScope //判断是否高峰
1073 945 }
1074 946 }();
1075 947 \ No newline at end of file
... ...
src/main/resources/static/pages/base/timesmodel/tepms/bctype_temp.html
... ... @@ -58,62 +58,6 @@
58 58  
59 59 <!-- 表单分组组件 form-group START -->
60 60 <div class="form-group">
61   - <!-- 早高峰开始时间 (* 必填项) START -->
62   - <div class="col-md-6">
63   - <label class="control-label col-md-5">
64   - <span class="required"> * </span> 早高峰开始时间 :
65   - </label>
66   - <div class="col-md-5">
67   - <input type="text" class="form-control" name="earlyStartTime" value="{{map.earlyStartTime}}" id="zgfkssjInput"
68   - placeholder="请输入早高峰开始时间">
69   - </div>
70   - </div>
71   - <!-- 早高峰开始时间 (* 必填项) END -->
72   -
73   - <!-- 早高峰结束时间 (* 必填项) START -->
74   - <div class="col-md-6">
75   - <label class="control-label col-md-5">
76   - <span class="required"> * </span> 早高峰结束时间 :
77   - </label>
78   - <div class="col-md-5">
79   - <input type="text" class="form-control" name="earlyEndTime" value="{{map.earlyEndTime}}" id="zgfjssjInput"
80   - placeholder="请输入早高峰结束时间">
81   - </div>
82   - </div>
83   - <!-- 早高峰结束时间 (* 必填项) END -->
84   - </div>
85   - <!-- 表单分组组件 form-group END -->
86   -
87   - <!-- 表单分组组件 form-group START -->
88   - <div class="form-group">
89   - <!-- 晚高峰开始时间 (* 必填项) START -->
90   - <div class="col-md-6">
91   - <label class="control-label col-md-5">
92   - <span class="required"> * </span> 晚高峰开始时间 :
93   - </label>
94   - <div class="col-md-5">
95   - <input type="text" class="form-control" name="lateStartTime" value="{{map.lateStartTime}}" id="wgfkssjInput"
96   - placeholder="请输入晚高峰开始时间">
97   - </div>
98   - </div>
99   - <!-- 晚高峰开始时间 (* 必填项) END -->
100   -
101   - <!-- 晚高峰结束 (* 必填项) START -->
102   - <div class="col-md-6">
103   - <label class="control-label col-md-5">
104   - <span class="required"> * </span> 晚高峰结束时间 :
105   - </label>
106   - <div class="col-md-5">
107   - <input type="text" class="form-control" name="lateEndTime" value="{{map.lateEndTime}}" id="wgfjssjInput"
108   - placeholder="请输入晚高峰结束时间">
109   - </div>
110   - </div>
111   - <!-- 晚高峰结束 (* 必填项) END -->
112   - </div>
113   - <!-- 表单分组组件 form-group END -->
114   -
115   - <!-- 表单分组组件 form-group START -->
116   - <div class="form-group">
117 61 <!-- 线路规划类型 (* 必填项) START -->
118 62 <div class="col-md-6">
119 63 <label class="control-label col-md-5">
... ... @@ -237,76 +181,102 @@
237 181 </div>
238 182 <!-- 表单分组组件 form-group END -->
239 183  
240   - <!-- 表单分组组件 form-group START -->
  184 + <!-- 表单分组组件 form-group START -->
  185 + <!--<div class="form-group">
  186 + &lt;!&ndash; 低谷最大发车间隙(* 必填项) START &ndash;&gt;
  187 + <div class="col-md-6">
  188 + <label class="control-label col-md-5">
  189 + <span class="required"> * </span> 低谷最大发车间隙:
  190 + </label>
  191 + <div class="col-md-5">
  192 + <input type="text" class="form-control" name="dgmaxfcjx" id="dgmaxfcjxInput" placeholder="请输入低谷最大发车间隙">
  193 + </div>
  194 + </div>
  195 + &lt;!&ndash; 低谷最大发车间隙(* 必填项) END &ndash;&gt;
  196 +
  197 + &lt;!&ndash; 低谷最大停站时间(* 必填项) START &ndash;&gt;
  198 + <div class="col-md-6">
  199 + <label class="control-label col-md-5">
  200 + <span class="required"> * </span> 低谷最大停站时间:
  201 + </label>
  202 + <div class="col-md-5">
  203 + <input type="text" class="form-control" name="dgmaxtzsj" id="dgmaxtzsjInput"
  204 + placeholder="请输入低谷最大停站时间">
  205 + </div>
  206 + </div>
  207 + &lt;!&ndash; 低谷停站时间 (* 必填项) END &ndash;&gt;
  208 + </div>-->
  209 + <!-- 表单分组组件 form-group END -->
  210 +
  211 + <!-- 表单分组组件 form-group START -->
241 212 <div class="form-group">
242 213 <div class="col-md-12">
243 214 <div class="col-md-6">
244   - <label class="control-label col-md-5"></label>
245   - <label class="col-md-5">上行行驶时间</label>
  215 + <label class="control-label col-md-2"></label>
  216 + <div class="col-md-5">
  217 + <label class="col-md-5">开始时间</label>
  218 + <label class="control-label col-md-1">-</label>
  219 + <label class="col-md-5">结束时间</label>
  220 + </div>
  221 + <label class="control-label col-md-1"> : </label>
  222 + <label class="col-md-4">上行行驶时间</label>
246 223 </div>
247 224 <div class="col-md-6">
248 225 <div class="col-md-5"></div>
249 226 <label class="col-md-5">下行行驶时间</label>
250   -
251   - <!--<label class="control-label col-md-1"></label>
252   - <label class="control-label col-md-1">上行发车间隔</label>
253   - &lt;!&ndash;<label class="control-label col-md-1">上行最大发车间隔</label>&ndash;&gt;
254   -
255   - <label class="control-label col-md-2"></label>
256   - <label class="control-label col-md-1">下行发车间隔</label>-->
257   - <!--<label class="control-label col-md-1">下行最大发车间隔</label>-->
258 227 </div>
259 228 </div>
260 229  
261 230 <div class="col-md-12">
262 231 <div class="col-md-6">
263   - <label class="control-label col-md-5"><span class="required"> * </span>首班-6:30  :</label>
  232 + <label class="control-label col-md-2"><span class="required"> * </span>早高峰之前:</label>
  233 + <!-- 早高峰开始时间 (* 必填项) START -->
264 234 <div class="col-md-5">
265   - <input type="text" class="form-control" name="upTravelTime1" id="upTravelTimeInput1"
  235 + <div class="col-md-5">
  236 + <input type="text" class="form-control" name="start1" value="04:00" id="startInput1"
  237 + placeholder="开始时间">
  238 + </div>
  239 + <label class="control-label col-md-1">-</label>
  240 + <div class="col-md-5">
  241 + <input type="text" class="form-control" name="end1" value="{{map.earlyStartTime}}" id="endInput1"
  242 + placeholder="结束时间">
  243 + </div>
  244 + </div>
  245 + <label class="control-label col-md-1"> : </label>
  246 + <!-- 早高峰开始时间 (* 必填项) END -->
  247 + <div class="col-md-4">
  248 + <input type="text" class="form-control" name="upTravelTime1" value="{{map.troughUpTime}}" id="upTravelTimeInput1"
266 249 placeholder="上行行驶时间">
267 250 </div>
268 251 </div>
269 252 <div class="col-md-6">
270 253 <div class="col-md-5"></div>
271 254 <div class="col-md-5">
272   - <input type="text" class="form-control" name="downTravelTime1" id="downTravelTimeInput1"
  255 + <input type="text" class="form-control" name="downTravelTime1" value="{{map.troughDownTime}}" id="downTravelTimeInput1"
273 256 placeholder="下行行驶时间">
274 257 </div>
275 258 </div>
276   -
277   - <!--<div class="col-md-3">
278   - <label class="control-label col-md-1"></label>
279   - <div class="col-md-5">
280   - <input type="text" class="form-control" name="upfcjjMin1" id="upfcjjMinInput1"
281   - placeholder="上行最小间隔">
282   - </div>
283   - <label class="control-label col-md-1">-</label>
284   - <div class="col-md-5">
285   - <input type="text" class="form-control" name="upfcjjMax1" id="upfcjjMaxInput1"
286   - placeholder="上行最大间隔">
287   - </div>
288   - </div>
289   -
290   - <div class="col-md-3">
291   - <label class="control-label col-md-1"></label>
292   - <div class="col-md-5">
293   - <input type="text" class="form-control" name="downfcjjMin1" id="downfcjjMinInput1"
294   - placeholder="下行最小间隔">
295   - </div>
296   - <label class="control-label col-md-1">-</label>
297   - <div class="col-md-5">
298   - <input type="text" class="form-control" name="downfcjjMax1" id="downfcjjMaxInput1"
299   - placeholder="下行最大间隔">
300   - </div>
301   - </div>-->
302 259 </div>
303 260  
304 261 <!-- 6:31-8:30-->
305 262 <div class="col-md-12">
306 263 <div class="col-md-6">
307   - <label class="control-label col-md-5"><span class="required"> * </span>6:31-8:30  :</label>
308   - <div class="col-md-5">
309   - <input type="text" class="form-control" valer="{{map.earlyUpTime}}" name="upTravelTime2" id="upTravelTimeInput2"
  264 + <label class="control-label col-md-2"><span class="required"> * </span>早高峰:</label>
  265 + <div class="col-md-5">
  266 + <div class="col-md-5">
  267 + <input type="text" class="form-control" name="start2" value="{{map.earlyStartTime}}" id="startInput2"
  268 + placeholder="开始时间">
  269 + </div>
  270 + <label class="control-label col-md-1">-</label>
  271 + <div class="col-md-5">
  272 + <input type="text" class="form-control" name="end2" value="{{map.earlyEndTime}}" id="endInput2"
  273 + placeholder="结束时间">
  274 + </div>
  275 + </div>
  276 + <label class="control-label col-md-1"> : </label>
  277 + <!-- 表单分组组件 form-group END -->
  278 + <div class="col-md-4">
  279 + <input type="text" class="form-control" value="{{map.earlyUpTime}}" name="upTravelTime2" id="upTravelTimeInput2"
310 280 placeholder="上行行驶时间">
311 281 </div>
312 282 </div>
... ... @@ -317,39 +287,25 @@
317 287 placeholder="下行行驶时间">
318 288 </div>
319 289 </div>
320   -
321   - <!--<div class="col-md-3">
322   - <label class="control-label col-md-1"></label>
323   - <div class="col-md-5">
324   - <input type="text" class="form-control" name="upfcjjMin2" id="upfcjjMinInput2"
325   - placeholder="上行最小间隔">
326   - </div>
327   - <label class="control-label col-md-1">-</label>
328   - <div class="col-md-5">
329   - <input type="text" class="form-control" name="upfcjjMax2" id="upfcjjMaxInput2"
330   - placeholder="上行最大间隔">
331   - </div>
332   - </div>
333   -
334   - <div class="col-md-3">
335   - <label class="control-label col-md-1"></label>
336   - <div class="col-md-5">
337   - <input type="text" class="form-control" name="downfcjjMin2" id="downfcjjMinInput2"
338   - placeholder="下行最小间隔">
339   - </div>
340   - <label class="control-label col-md-1">-</label>
341   - <div class="col-md-5">
342   - <input type="text" class="form-control" name="downfcjjMax2" id="downfcjjMaxInput2"
343   - placeholder="下行最大间隔">
344   - </div>
345   - </div>-->
346 290 </div>
347 291  
348 292 <!-- 8:31-16:00-->
349 293 <div class="col-md-12">
350 294 <div class="col-md-6">
351   - <label class="control-label col-md-5"><span class="required"> * </span>8:31-16:00  :</label>
  295 + <label class="control-label col-md-2"><span class="required"> * </span>高峰之间:</label>
352 296 <div class="col-md-5">
  297 + <div class="col-md-5">
  298 + <input type="text" class="form-control" name="start3" value="{{map.earlyEndTime}}" id="startInput3"
  299 + placeholder="开始时间">
  300 + </div>
  301 + <label class="control-label col-md-1">-</label>
  302 + <div class="col-md-5">
  303 + <input type="text" class="form-control" name="end3" value="{{map.lateStartTime}}" id="endInput3"
  304 + placeholder="结束时间">
  305 + </div>
  306 + </div>
  307 + <label class="control-label col-md-1"> : </label>
  308 + <div class="col-md-4">
353 309 <input type="text" class="form-control" value="{{map.troughUpTime}}" name="upTravelTime3" id="upTravelTimeInput3"
354 310 placeholder="上行行驶时间">
355 311 </div>
... ... @@ -361,39 +317,25 @@
361 317 placeholder="下行行驶时间">
362 318 </div>
363 319 </div>
364   -
365   - <!--<div class="col-md-3">
366   - <label class="control-label col-md-1"></label>
367   - <div class="col-md-5">
368   - <input type="text" class="form-control" name="upfcjjMin3" id="upfcjjMinInput3"
369   - placeholder="上行最小间隔">
370   - </div>
371   - <label class="control-label col-md-1">-</label>
372   - <div class="col-md-5">
373   - <input type="text" class="form-control" name="upfcjjMax3" id="upfcjjMaxInput3"
374   - placeholder="上行最大间隔">
375   - </div>
376   - </div>
377   -
378   - <div class="col-md-3">
379   - <label class="control-label col-md-1"></label>
380   - <div class="col-md-5">
381   - <input type="text" class="form-control" name="downfcjjMin3" id="downfcjjMinInput3"
382   - placeholder="下行最小间隔">
383   - </div>
384   - <label class="control-label col-md-1">-</label>
385   - <div class="col-md-5">
386   - <input type="text" class="form-control" name="downfcjjMax3" id="downfcjjMaxInput3"
387   - placeholder="下行最大间隔">
388   - </div>
389   - </div>-->
390 320 </div>
391 321  
392 322 <!-- 16:01-18:00-->
393 323 <div class="col-md-12">
394 324 <div class="col-md-6">
395   - <label class="control-label col-md-5"><span class="required"> * </span>16:01-18:00  :</label>
  325 + <label class="control-label col-md-2"><span class="required"> * </span>晚高峰:</label>
396 326 <div class="col-md-5">
  327 + <div class="col-md-5">
  328 + <input type="text" class="form-control" name="start4" value="{{map.lateStartTime}}" id="startInput4"
  329 + placeholder="开始时间">
  330 + </div>
  331 + <label class="control-label col-md-1">-</label>
  332 + <div class="col-md-5">
  333 + <input type="text" class="form-control" name="end4" value="{{map.lateEndTime}}" id="endInput4"
  334 + placeholder="结束时间">
  335 + </div>
  336 + </div>
  337 + <label class="control-label col-md-1"> : </label>
  338 + <div class="col-md-4">
397 339 <input type="text" class="form-control" value="{{map.lateUpTime}}" name="upTravelTime4" id="upTravelTimeInput4"
398 340 placeholder="上行行驶时间">
399 341 </div>
... ... @@ -405,76 +347,36 @@
405 347 placeholder="下行行驶时间">
406 348 </div>
407 349 </div>
408   -
409   - <!--<div class="col-md-3">
410   - <label class="control-label col-md-1"></label>
411   - <div class="col-md-5">
412   - <input type="text" class="form-control" name="upfcjjMin4" id="upfcjjMinInput4"
413   - placeholder="上行最小间隔">
414   - </div>
415   - <label class="control-label col-md-1">-</label>
416   - <div class="col-md-5">
417   - <input type="text" class="form-control" name="upfcjjMax4" id="upfcjjMaxInput4"
418   - placeholder="上行最大间隔">
419   - </div>
420   - </div>
421   -
422   - <div class="col-md-3">
423   - <label class="control-label col-md-1"></label>
424   - <div class="col-md-5">
425   - <input type="text" class="form-control" name="downfcjjMin4" id="downfcjjMinInput4"
426   - placeholder="下行最小间隔">
427   - </div>
428   - <label class="control-label col-md-1">-</label>
429   - <div class="col-md-5">
430   - <input type="text" class="form-control" name="downfcjjMax4" id="downfcjjMaxInput4"
431   - placeholder="下行最大间隔">
432   - </div>
433   - </div>-->
434 350 </div>
435 351  
436 352 <!-- 18:00-末班-->
437 353 <div class="col-md-12">
438 354 <div class="col-md-6">
439   - <label class="control-label col-md-5"><span class="required"> * </span>18:00-末班  :</label>
  355 + <label class="control-label col-md-2"><span class="required"> * </span>晚高峰之后:</label>
440 356 <div class="col-md-5">
441   - <input type="text" class="form-control" name="upTravelTime5" id="upTravelTimeInput5"
  357 + <div class="col-md-5">
  358 + <input type="text" class="form-control" name="start5" value="{{map.lateEndTime}}" id="startInput5"
  359 + placeholder="开始时间">
  360 + </div>
  361 + <label class="control-label col-md-1">-</label>
  362 + <div class="col-md-5">
  363 + <input type="text" class="form-control" name="end5" value="23:59" id="endInput5"
  364 + placeholder="结束时间">
  365 + </div>
  366 + </div>
  367 + <label class="control-label col-md-1"> : </label>
  368 + <div class="col-md-4">
  369 + <input type="text" class="form-control" value="{{map.troughUpTime}}" name="upTravelTime5" id="upTravelTimeInput5"
442 370 placeholder="上行行驶时间">
443 371 </div>
444 372 </div>
445 373 <div class="col-md-6">
446 374 <div class="col-md-5"></div>
447 375 <div class="col-md-5">
448   - <input type="text" class="form-control" name="downTravelTime5" id="downTravelTimeInput5"
  376 + <input type="text" class="form-control" value="{{map.troughDownTime}}" name="downTravelTime5" id="downTravelTimeInput5"
449 377 placeholder="下行行驶时间">
450 378 </div>
451 379 </div>
452   -
453   - <!--<div class="col-md-3">
454   - <label class="control-label col-md-1"></label>
455   - <div class="col-md-5">
456   - <input type="text" class="form-control" name="upfcjjMin5" id="upfcjjMinInput5"
457   - placeholder="上行最小间隔">
458   - </div>
459   - <label class="control-label col-md-1">-</label>
460   - <div class="col-md-5">
461   - <input type="text" class="form-control" name="upfcjjMax5" id="upfcjjMaxInput5"
462   - placeholder="上行最大间隔">
463   - </div>
464   - </div>
465   -
466   - <div class="col-md-3">
467   - <label class="control-label col-md-1"></label>
468   - <div class="col-md-5">
469   - <input type="text" class="form-control" name="downfcjjMin5" id="downfcjjMinInput5"
470   - placeholder="下行最小间隔">
471   - </div>
472   - <label class="control-label col-md-1">-</label>
473   - <div class="col-md-5">
474   - <input type="text" class="form-control" name="downfcjjMax5" id="downfcjjMaxInput5"
475   - placeholder="下行最大间隔">
476   - </div>
477   - </div>-->
478 380 </div>
479 381 </div>
480 382 <!-- 表单分组组件 form-group END -->
... ... @@ -602,6 +504,8 @@
602 504 <input type="hidden" name="downInMileage" value="{{map.downInMileage}}" id="downInlcInput"/>
603 505 <input type="hidden" name="upOutMileage" value="{{map.upOutMileage}}" id="upOutlcInput"/>
604 506 <input type="hidden" name="downOutMileage" value="{{map.downOutMileage}}" id="downOutlcInput"/>
  507 + <!--线路等级-->
  508 + <input type="hidden" name="level" value="{{map.line.level}}" id="level"/>
605 509  
606 510 </script>
607 511  
... ... @@ -675,56 +579,6 @@
675 579  
676 580 <!-- 表单分组组件 form-group START -->
677 581 <div class="form-group">
678   - <!-- 早高峰开始时间(* 必填项) START -->
679   - <div class="col-md-6">
680   - <label class="control-label col-md-5">
681   - <span class="required"> * </span> 早高峰开始时间 :
682   - </label>
683   - <div class="col-md-4">
684   - <p class="form-control-static" data-display="earlyStartTime"> </p>
685   - </div>
686   - </div>
687   - <!-- 早高峰开始时间 (* 必填项) END -->
688   - <!-- 早高峰结束时间 (* 必填项) START -->
689   - <div class="col-md-6">
690   - <label class="control-label col-md-5">
691   - <span class="required"> * </span> 早高峰结束时间 :
692   - </label>
693   - <div class="col-md-4">
694   - <p class="form-control-static" data-display="earlyEndTime"> </p>
695   - </div>
696   - </div>
697   - <!-- 早高峰结束时间 (* 必填项) END -->
698   - </div>
699   - <!-- 表单分组组件 form-group END -->
700   -
701   - <!-- 表单分组组件 form-group START -->
702   - <div class="form-group">
703   - <!-- 晚高峰开始时间(* 必填项) START -->
704   - <div class="col-md-6">
705   - <label class="control-label col-md-5">
706   - <span class="required"> * </span> 晚高峰开始时间 :
707   - </label>
708   - <div class="col-md-4">
709   - <p class="form-control-static" data-display="lateStartTime"> </p>
710   - </div>
711   - </div>
712   - <!-- 晚高峰开始时间(* 必填项) END -->
713   - <!-- 晚高峰结束时间(* 必填项) START -->
714   - <div class="col-md-6">
715   - <label class="control-label col-md-5">
716   - <span class="required"> * </span> 晚高峰结束时间 :
717   - </label>
718   - <div class="col-md-4">
719   - <p class="form-control-static" data-display="lateEndTime"> </p>
720   - </div>
721   - </div>
722   - <!-- 晚高峰结束时间(* 必填项) END -->
723   - </div>
724   - <!-- 表单分组组件 form-group END -->
725   -
726   - <!-- 表单分组组件 form-group START -->
727   - <div class="form-group">
728 582 <!-- 线路规划类型 (* 必填项) START -->
729 583 <div class="col-md-6">
730 584 <label class="control-label col-md-5">
... ... @@ -829,38 +683,44 @@
829 683 </div>
830 684 <!-- 表单分组组件 form-group END -->
831 685  
832   - <!-- 表单分组组件 form-group START -->
833   - <div class="form-group">
834   - <!-- 班型与人次 START -->
835   - <div class="col-md-6">
836   - <label class="control-label col-md-5">
837   - <span class="required"> * </span> 班型/人次/车辆 :
838   - </label>
839   - <div class="col-md-4">
840   - <p class="form-control-static" data-display="bxrc"> </p>
841   - </div>
842   - </div>
843   - <!-- 班型与人次 END -->
844   - <!-- 车辆总数 START -->
845   - <div class="col-md-6">
846   - <label class="control-label col-md-5">
847   - <span class="required"> * </span> 车辆总数    :
848   - </label>
849   - <div class="col-md-4">
850   - <p class="form-control-static" data-display="clzs"> </p>
851   - </div>
852   - </div>
853   - <!-- 车辆总数 END -->
854   - </div>
855   - <!-- 表单分组组件 form-group END -->
  686 + <!-- 表单分组组件 form-group START -->
  687 + <!-- <div class="form-group">
  688 + &lt;!&ndash; 低谷最大发车间隙(* 必填项) START &ndash;&gt;
  689 + <div class="col-md-6">
  690 + <label class="control-label col-md-5">
  691 + <span class="required"> * </span> 低谷最大发车间隙:
  692 + </label>
  693 + <div class="col-md-4">
  694 + <p class="form-control-static" data-display="dgmaxfcjx"> </p>
  695 + </div>
  696 + </div>
  697 + &lt;!&ndash; 低谷最大发车间隙(* 必填项) END &ndash;&gt;
856 698  
  699 + &lt;!&ndash; 低谷最大停站时间(* 必填项) START &ndash;&gt;
  700 + <div class="col-md-6">
  701 + <label class="control-label col-md-5">
  702 + <span class="required"> * </span> 低谷最大停站时间:
  703 + </label>
  704 + <div class="col-md-4">
  705 + <p class="form-control-static" data-display="dgmaxtzsj"> </p>
  706 + </div>
  707 + </div>
  708 + &lt;!&ndash; 低谷最大停站时间(* 必填项) END &ndash;&gt;
  709 + </div>-->
  710 + <!-- 表单分组组件 form-group END -->
857 711  
858 712 <!-- 表单分组组件 form-group START -->
859 713 <div class="form-group">
860 714 <div class="col-md-12">
861 715 <div class="col-md-6">
862   - <label class="control-label col-md-5"></label>
863   - <label class="col-md-5">上行行驶时间</label>
  716 + <label class="control-label col-md-2"></label>
  717 + <div class="col-md-5">
  718 + <label class="col-md-5">开始时间</label>
  719 + <label class="control-label col-md-1">-</label>
  720 + <label class="col-md-5">结束时间</label>
  721 + </div>
  722 + <label class="control-label col-md-1"> : </label>
  723 + <label class="col-md-4">上行行驶时间</label>
864 724 </div>
865 725 <div class="col-md-6">
866 726 <div class="col-md-5"></div>
... ... @@ -870,8 +730,18 @@
870 730  
871 731 <div class="col-md-12">
872 732 <div class="col-md-6">
873   - <label class="control-label col-md-5"><span class="required"> * </span>首班-6:30  :</label>
  733 + <label class="control-label col-md-2"><span class="required"> * </span>早高峰之前:</label>
874 734 <div class="col-md-5">
  735 + <div class="col-md-5">
  736 + <p class="form-control-static" data-display="start1"></p>
  737 + </div>
  738 + <label class="control-label col-md-1">-</label>
  739 + <div class="col-md-5">
  740 + <p class="form-control-static" data-display="end1"></p>
  741 + </div>
  742 + </div>
  743 + <label class="control-label col-md-1"> : </label>
  744 + <div class="col-md-4">
875 745 <p class="form-control-static" data-display="upTravelTime1"> </p>
876 746 </div>
877 747 </div>
... ... @@ -886,8 +756,18 @@
886 756 <!-- 6:31-8:30-->
887 757 <div class="col-md-12">
888 758 <div class="col-md-6">
889   - <label class="control-label col-md-5"><span class="required"> * </span>6:31-8:30  :</label>
  759 + <label class="control-label col-md-2"><span class="required"> * </span>早高峰:</label>
890 760 <div class="col-md-5">
  761 + <div class="col-md-5">
  762 + <p class="form-control-static" data-display="start2"></p>
  763 + </div>
  764 + <label class="control-label col-md-1">-</label>
  765 + <div class="col-md-5">
  766 + <p class="form-control-static" data-display="end2"></p>
  767 + </div>
  768 + </div>
  769 + <label class="control-label col-md-1"> : </label>
  770 + <div class="col-md-4">
891 771 <p class="form-control-static" data-display="upTravelTime2"> </p>
892 772 </div>
893 773 </div>
... ... @@ -902,8 +782,18 @@
902 782 <!-- 8:31-16:00-->
903 783 <div class="col-md-12">
904 784 <div class="col-md-6">
905   - <label class="control-label col-md-5"><span class="required"> * </span>8:31-16:00  :</label>
  785 + <label class="control-label col-md-2"><span class="required"> * </span>早高峰之后:</label>
906 786 <div class="col-md-5">
  787 + <div class="col-md-5">
  788 + <p class="form-control-static" data-display="start3"></p>
  789 + </div>
  790 + <label class="control-label col-md-1">-</label>
  791 + <div class="col-md-5">
  792 + <p class="form-control-static" data-display="end3"></p>
  793 + </div>
  794 + </div>
  795 + <label class="control-label col-md-1"> : </label>
  796 + <div class="col-md-4">
907 797 <p class="form-control-static" data-display="upTravelTime3"> </p>
908 798 </div>
909 799 </div>
... ... @@ -918,8 +808,18 @@
918 808 <!-- 16:01-18:00-->
919 809 <div class="col-md-12">
920 810 <div class="col-md-6">
921   - <label class="control-label col-md-5"><span class="required"> * </span>16:01-18:00  :</label>
  811 + <label class="control-label col-md-2"><span class="required"> * </span>晚高峰:</label>
922 812 <div class="col-md-5">
  813 + <div class="col-md-5">
  814 + <p class="form-control-static" data-display="start4"></p>
  815 + </div>
  816 + <label class="control-label col-md-1">-</label>
  817 + <div class="col-md-5">
  818 + <p class="form-control-static" data-display="end4"></p>
  819 + </div>
  820 + </div>
  821 + <label class="control-label col-md-1"> : </label>
  822 + <div class="col-md-4">
923 823 <p class="form-control-static" data-display="upTravelTime4"> </p>
924 824 </div>
925 825 </div>
... ... @@ -934,8 +834,18 @@
934 834 <!-- 18:00-末班-->
935 835 <div class="col-md-12">
936 836 <div class="col-md-6">
937   - <label class="control-label col-md-5"><span class="required"> * </span>18:00-末班  :</label>
  837 + <label class="control-label col-md-2"><span class="required"> * </span>晚高峰之后:</label>
938 838 <div class="col-md-5">
  839 + <div class="col-md-5">
  840 + <p class="form-control-static" data-display="start5"></p>
  841 + </div>
  842 + <label class="control-label col-md-1">-</label>
  843 + <div class="col-md-5">
  844 + <p class="form-control-static" data-display="end5"></p>
  845 + </div>
  846 + </div>
  847 + <label class="control-label col-md-1"> : </label>
  848 + <div class="col-md-4">
939 849 <p class="form-control-static" data-display="upTravelTime5"> </p>
940 850 </div>
941 851 </div>
... ... @@ -948,4 +858,29 @@
948 858 </div>
949 859 </div>
950 860 <!-- 表单分组组件 form-group END -->
  861 +
  862 + <!-- 表单分组组件 form-group START -->
  863 + <div class="form-group">
  864 + <!-- 班型与人次 START -->
  865 + <div class="col-md-6">
  866 + <label class="control-label col-md-5">
  867 + <span class="required"> * </span> 班型/人次/车辆 :
  868 + </label>
  869 + <div class="col-md-4">
  870 + <p class="form-control-static" data-display="bxrc"> </p>
  871 + </div>
  872 + </div>
  873 + <!-- 班型与人次 END -->
  874 + <!-- 车辆总数 START -->
  875 + <div class="col-md-6">
  876 + <label class="control-label col-md-5">
  877 + <span class="required"> * </span> 车辆总数    :
  878 + </label>
  879 + <div class="col-md-4">
  880 + <p class="form-control-static" data-display="clzs"> </p>
  881 + </div>
  882 + </div>
  883 + <!-- 车辆总数 END -->
  884 + </div>
  885 + <!-- 表单分组组件 form-group END -->
951 886 </script>
952 887 \ No newline at end of file
... ...