Commit 7753da64754da5b6b9362f174e712643d70e6c35
1 parent
75aa8fc6
1、时刻表生成(班型/人次/共时)优化,适配1112路
Showing
7 changed files
with
519 additions
and
329 deletions
src/main/resources/static/pages/base/timesmodel/gantt.html
| ... | ... | @@ -213,9 +213,11 @@ |
| 213 | 213 | <script src="/pages/base/timesmodel/js/v2_2/strategy/runtime/LinearRuntimeS1.js"></script> |
| 214 | 214 | <script src="/pages/base/timesmodel/js/v2_2/strategy/layovertime/LayoverTimeS1.js"></script> |
| 215 | 215 | <script src="/pages/base/timesmodel/js/v2/strategy/StrategyUtils.js"></script> |
| 216 | -<script src="/pages/base/timesmodel/js/v4/strategy/StrategyUtils.js"></script> | |
| 217 | 216 | |
| 218 | 217 | <!-- v4版本的时刻表生成组件 --> |
| 218 | +<script src="/pages/base/timesmodel/js/v4/utils/ScheduleBuilderUtils.js"></script> | |
| 219 | +<script src="/pages/base/timesmodel/js/v4/core/CalcuFcsj_v1.js"></script> | |
| 220 | +<script src="/pages/base/timesmodel/js/v4/core/VspFcsj_v1.js"></script> | |
| 219 | 221 | <script src="/pages/base/timesmodel/js/v4/scheduleBuilder.component.js"></script> |
| 220 | 222 | |
| 221 | 223 | <script src="/pages/base/timesmodel/js/errorinfo.js"></script> | ... | ... |
src/main/resources/static/pages/base/timesmodel/js/v2/ParameterObj.js
| ... | ... | @@ -328,6 +328,24 @@ var ParameterObj = function() { |
| 328 | 328 | return _timeObj; |
| 329 | 329 | }; |
| 330 | 330 | |
| 331 | + // 班型分布列表 | |
| 332 | + var _bxDisList = []; | |
| 333 | + var _fnBxDisList = function() { | |
| 334 | + var _rtn = []; | |
| 335 | + // bxgsrc的数据格式参考 bxtypeSelect.js 组件输出 | |
| 336 | + if (_formMap["bxgsrc"]) { | |
| 337 | + $.each(_formMap["bxgsrc"].split(","), function(index, value) { | |
| 338 | + var _str_array = value.split("/"); | |
| 339 | + _rtn.push({ | |
| 340 | + bxName: _str_array[0], // 班型名字 | |
| 341 | + bxGs: parseFloat(_str_array[1]), // 班型工时 | |
| 342 | + bxCount: parseInt(_str_array[2]) // 班型个数 | |
| 343 | + }); | |
| 344 | + }); | |
| 345 | + } | |
| 346 | + return _rtn; | |
| 347 | + }; | |
| 348 | + | |
| 331 | 349 | return { |
| 332 | 350 | |
| 333 | 351 | /** |
| ... | ... | @@ -359,6 +377,8 @@ var ParameterObj = function() { |
| 359 | 377 | _fcjxIntervalObj = _fcjxIntervalObj_fun(); |
| 360 | 378 | // 停站类型 |
| 361 | 379 | _stopTypeObj = _stopTypeObj_fun(); |
| 380 | + // 班型分布列表 | |
| 381 | + _bxDisList = _fnBxDisList(); | |
| 362 | 382 | // 线路对象 |
| 363 | 383 | _xlObj = _xlObj_fun(); |
| 364 | 384 | // 停车场对象 |
| ... | ... | @@ -843,6 +863,14 @@ var ParameterObj = function() { |
| 843 | 863 | }; |
| 844 | 864 | }, |
| 845 | 865 | |
| 866 | + /** | |
| 867 | + * 获取班型分布列表。 | |
| 868 | + */ | |
| 869 | + getBxDisList: function() { | |
| 870 | + _validInternal(); // 验证 | |
| 871 | + return _bxDisList; | |
| 872 | + }, | |
| 873 | + | |
| 846 | 874 | //-------------- 时间操作 ------------// |
| 847 | 875 | /** |
| 848 | 876 | * 通过字符串创建时间对象。 |
| ... | ... | @@ -1449,4 +1477,4 @@ var ParameterObj = function() { |
| 1449 | 1477 | |
| 1450 | 1478 | |
| 1451 | 1479 | }; |
| 1452 | -}; | |
| 1453 | 1480 | \ No newline at end of file |
| 1481 | +}; | ... | ... |
src/main/resources/static/pages/base/timesmodel/js/v4/core/CalcuFcsj_v1.js
0 → 100644
| 1 | +/** | |
| 2 | + * 计算发车时间列表v1。 | |
| 3 | + * 1、计算当前班次的下一个班次时间(使用各个时间段的平均发车间隔,首班车,末班车发车时间) | |
| 4 | + * 2、重复操作1,直到下一个班次时间大于末班车发车时间 | |
| 5 | + * 3、退出循环,使用末班车作为最后一个班次,计算与上一个班次的发车间隔 | |
| 6 | + * 4、这里直接将最后一个班次删除,将倒数第二个班次改成末班车时间, | |
| 7 | + * 这样会造成最后一般车发车间隔可能大于最大发车间隔(TODO:这个暂时不管了以后再说) | |
| 8 | + * @param $jQuery jQuery对象 | |
| 9 | + */ | |
| 10 | +var CalcuFcsj_v1 = (function($jQuery) { | |
| 11 | + | |
| 12 | + /** | |
| 13 | + * 将时间列表转换成 InternalBcObj v2版本的班次对象Array | |
| 14 | + * @param Utils 工具类对象(参考:/pages/base/timesmodel/js/v4/utils/ScheduleBuilderUtils.js) | |
| 15 | + * @param isUp 是否上行 | |
| 16 | + * @param fcsjArray 发车时间列表(moment对象) | |
| 17 | + * @param _options 组件内部参数(参考:/pages/base/timesmodel/js/v4/scheduleBuilder.component.js) | |
| 18 | + * @param paramObjV2 v2版本的参数对象(看考:/pages/base/timesmodel/js/v2/ParameterObj.js) | |
| 19 | + * @return Array InternalBcObj v2版本的班次对象列表(参考:/pages/base/timesmodel/js/v2/core/InternalBcObj.js) | |
| 20 | + * @private | |
| 21 | + */ | |
| 22 | + function _convertFcsjArrayToInternalBcObjv2Array( | |
| 23 | + Utils, | |
| 24 | + isUp, fcsjArray, _options, paramObjV2) { | |
| 25 | + var _rtn_array = []; | |
| 26 | + | |
| 27 | + $jQuery.each(fcsjArray, function(index, item) { | |
| 28 | + // 1、计算行驶时间,到达时间 | |
| 29 | + var runTime; | |
| 30 | + var arriveTime; | |
| 31 | + if (paramObjV2.isMPeakBc(item)) { | |
| 32 | + runTime = isUp ? _options.upMPeakRunningTime : _options.downMPeakRunningTime; | |
| 33 | + } else if (paramObjV2.isEPeakBc(item)) { | |
| 34 | + runTime = isUp ? _options.upEPeakRunningTime : _options.downEPeakRunningTime; | |
| 35 | + } else { | |
| 36 | + runTime = isUp ? _options.upLowRunningTime : _options.downLowRunningTime; | |
| 37 | + } | |
| 38 | + arriveTime = paramObjV2.addMinute(item, runTime); | |
| 39 | + | |
| 40 | + // 2、计算停站时间(平均停站时间) | |
| 41 | + var layOverTime; | |
| 42 | + if (paramObjV2.isMPeakBc(arriveTime)) { | |
| 43 | + layOverTime = isUp ? | |
| 44 | + (Math.floor((_options.upMPeakMinLayoverTime + _options.upMPeakMaxLayoverTime) / 2)): | |
| 45 | + (Math.floor((_options.downMPeakMinLayoverTime + _options.downMPeakMaxLayoverTime) / 2)); | |
| 46 | + } else if (paramObjV2.isEPeakBc(arriveTime)) { | |
| 47 | + layOverTime = isUp ? | |
| 48 | + (Math.floor((_options.upEPeakMinLayoverTime + _options.upEPeakMaxLayoverTime) / 2)): | |
| 49 | + (Math.floor((_options.downEPeakMinLayoverTime + _options.downEPeakMaxLayoverTime) / 2)); | |
| 50 | + } else { | |
| 51 | + layOverTime = isUp ? | |
| 52 | + (Math.floor((_options.upLowMinLayoverTime + _options.upLowMaxLayoverTime) / 2)): | |
| 53 | + (Math.floor((_options.downLowMinLayoverTime + _options.downLowMaxLayoverTime) / 2)); | |
| 54 | + } | |
| 55 | + | |
| 56 | + // TODO:1112路特殊layover设置成3分钟 | |
| 57 | + if (_options.xlId == 81001) { | |
| 58 | + layOverTime = 3; | |
| 59 | + } | |
| 60 | + | |
| 61 | + _rtn_array.push(Utils.getInternalBcObjectBuilder(_options, paramObjV2) | |
| 62 | + .tripTime(item) | |
| 63 | + .runTime(runTime) | |
| 64 | + .arriveTime(arriveTime) | |
| 65 | + .layOverTime(layOverTime) | |
| 66 | + .isUp(isUp) | |
| 67 | + .tripType("normal") | |
| 68 | + .build()); | |
| 69 | + | |
| 70 | + console.log("发车时间:" + moment(item).format("HH:mm") + " 停站时间:" + layOverTime); | |
| 71 | + }); | |
| 72 | + return _rtn_array; | |
| 73 | + } | |
| 74 | + | |
| 75 | + /** | |
| 76 | + * 计算发车时间列表v1。 | |
| 77 | + * @param Utils 工具类对象(参考:/pages/base/timesmodel/js/v4/utils/ScheduleBuilderUtils.js) | |
| 78 | + * @param paramObj v2版本的参数对象(参考:/pages/base/timesmodel/js/v2/ParameterObj.js) | |
| 79 | + * @param _options 组件内部参数(参考:/pages/base/timesmodel/js/v4/scheduleBuilder.component.js) | |
| 80 | + * @param firstTripTime 第一个班次时间(moment对象) | |
| 81 | + * @param lastTripTime 最后一个班次时间(moment对象) | |
| 82 | + * @return {Array} 时间从早到晚的发车时间列表(moment对象Array) | |
| 83 | + * @private | |
| 84 | + */ | |
| 85 | + function _calcuFcsjArray_v1( | |
| 86 | + Utils, paramObj, _options, | |
| 87 | + firstTripTime, lastTripTime) { | |
| 88 | + Utils.AssertIsTrue(firstTripTime.isBefore(lastTripTime), | |
| 89 | + "firstTripTime必须早于lastTripTime!"); | |
| 90 | + | |
| 91 | + var _fcsjArray = []; | |
| 92 | + _fcsjArray.push(firstTripTime); | |
| 93 | + | |
| 94 | + // 按照,低谷->早高峰->低谷->晚高峰->低谷推进 | |
| 95 | + var _previousTripTime = null; | |
| 96 | + var _nextTripTime = null; | |
| 97 | + do { | |
| 98 | + _previousTripTime = _fcsjArray[_fcsjArray.length - 1]; | |
| 99 | + | |
| 100 | + if (paramObj.isMPeakBc(_previousTripTime)) { // 早高峰班次 | |
| 101 | + _nextTripTime = paramObj.addMinute( // 使用平均发车间隔 | |
| 102 | + _previousTripTime, | |
| 103 | + Math.floor((_options.mPeakMinHeadway + _options.mPeakMaxHeadway) / 2) | |
| 104 | + ); | |
| 105 | + } else if (paramObj.isEPeakBc(_previousTripTime)) { // 晚高峰班次 | |
| 106 | + _nextTripTime = paramObj.addMinute( // 使用平均发车间隔 | |
| 107 | + _previousTripTime, | |
| 108 | + Math.floor((_options.ePeakMinHeadway + _options.ePeakMaxHeadway) / 2) | |
| 109 | + ); | |
| 110 | + } else { // 低谷班次 | |
| 111 | + _nextTripTime = paramObj.addMinute( // 使用平均发车间隔 | |
| 112 | + _previousTripTime, | |
| 113 | + Math.floor((_options.lowMinHeadway + _options.lowMaxHeadway) / 2) | |
| 114 | + ); | |
| 115 | + } | |
| 116 | + _fcsjArray.push(_nextTripTime); | |
| 117 | + } while (_nextTripTime.isBefore(lastTripTime)); | |
| 118 | + | |
| 119 | + _fcsjArray.pop(); // 删除最后一个班次 | |
| 120 | + _fcsjArray.pop(); // 删除倒数第二个班次 | |
| 121 | + // 将末班车班次作为最后一个班次,倒数第二个发车间隔可能大于最大发车间隔 | |
| 122 | + // TODO:程序暂时不自动修正,人工修正 | |
| 123 | + _fcsjArray.push(lastTripTime); | |
| 124 | + | |
| 125 | + return _fcsjArray; | |
| 126 | + } | |
| 127 | + | |
| 128 | + /** | |
| 129 | + * 主函数。 | |
| 130 | + * @param Utils 工具类对象(参考:/pages/base/timesmodel/js/v4/utils/ScheduleBuilderUtils.js) | |
| 131 | + * @param paramObj v2版本的参数对象(参考:/pages/base/timesmodel/js/v2/ParameterObj.js) | |
| 132 | + * @param _options 组件内部参数(参考:/pages/base/timesmodel/js/v4/scheduleBuilder.component.js) | |
| 133 | + * | |
| 134 | + * //---------------- 输出参数(如下:)--------------// | |
| 135 | + * @param upDirFcsjArray(输出参数)上行的发车时间列表(moment对象) | |
| 136 | + * @param downDirFcsjArray(输出参数)下行的发车时间列表(moment对象) | |
| 137 | + * @param upDirBcObjArray(输出参数)上行的发车时间列表(InternalBcObj v2版本的班次对象) | |
| 138 | + * @param downDirBcObjArray(输出参数)下行的发车时间列表(InternalBcObj v2版本的班次对象) | |
| 139 | + */ | |
| 140 | + return function(Utils, paramObj, _options, | |
| 141 | + upDirFcsjArray, downDirFcsjArray, upDirBcObjArray, downDirBcObjArray) { | |
| 142 | + | |
| 143 | + // 1-1、计算上行,下行的发车时间列表 | |
| 144 | + var _upDirFcsjArray = _calcuFcsjArray_v1( // 上行的发车时间列表(moment对象) | |
| 145 | + Utils, paramObj, _options, | |
| 146 | + _options.upDirFirstTripTime, | |
| 147 | + _options.upDirLastTripTime | |
| 148 | + ); | |
| 149 | + var _downDirFcsjArray = _calcuFcsjArray_v1( // 下行的发车时间列表(moment对象) | |
| 150 | + Utils, paramObj, _options, | |
| 151 | + _options.downDirFirstTripTime, | |
| 152 | + _options.downDirLastTripTime | |
| 153 | + ); | |
| 154 | + | |
| 155 | + // 1-2、将上下时间列表转换成 InternalBcObj v2版本的班次对象Array | |
| 156 | + var _upDirBcObjArray = _convertFcsjArrayToInternalBcObjv2Array( // 上行的发车时间列表(InternalBcObj v2版本的班次对象) | |
| 157 | + Utils, true, _upDirFcsjArray, _options, paramObj); | |
| 158 | + var _downDirBcObjArray = _convertFcsjArrayToInternalBcObjv2Array( // 下行的发车时间列表(InternalBcObj v2版本的班次对象) | |
| 159 | + Utils, false, _downDirFcsjArray, _options, paramObj); | |
| 160 | + | |
| 161 | + // 1-3、保存到输出参数 | |
| 162 | + $jQuery.each(_upDirFcsjArray, function(index, value) { | |
| 163 | + upDirFcsjArray.push(value); | |
| 164 | + }); | |
| 165 | + $jQuery.each(_downDirFcsjArray, function(index, value) { | |
| 166 | + downDirFcsjArray.push(value); | |
| 167 | + }); | |
| 168 | + $jQuery.each(_upDirBcObjArray, function(index, value) { | |
| 169 | + upDirBcObjArray.push(value); | |
| 170 | + }); | |
| 171 | + $jQuery.each(_downDirBcObjArray, function(index, value) { | |
| 172 | + downDirBcObjArray.push(value); | |
| 173 | + }); | |
| 174 | + | |
| 175 | + }; | |
| 176 | + | |
| 177 | +} ($)); | ... | ... |
src/main/resources/static/pages/base/timesmodel/js/v4/core/VspFcsj_v1.js
0 → 100644
| 1 | +/** | |
| 2 | + * 将上行下行班次连接起来(VSP问题) | |
| 3 | + * v1版本目前如下: | |
| 4 | + * 1、要求block至少覆盖上下行首班车,末班车,原来的时刻表不需要完全覆盖,其他优化暂时不考虑 | |
| 5 | + * 2、使用班型分布列表尽量覆盖生成的block | |
| 6 | + * | |
| 7 | + * @param $jQuery jQuery对象 | |
| 8 | + */ | |
| 9 | +var VspFcsj_v1 = (function ($jQuery) { | |
| 10 | + | |
| 11 | + /** | |
| 12 | + * 在指定列表中查找比指定班次大的最小班次。 | |
| 13 | + * @param currentBcObj 指定班次(InternalBcObj v2版本的班次对象) | |
| 14 | + * @param isUpDir 是否上行 | |
| 15 | + * @param bcObjArray 指定班次列表(从小到大,有序列表,InternalBcObj v2版本的班次对象列表) | |
| 16 | + * @param _options 组件内部参数 | |
| 17 | + * @param paramObj v2版本的参数对象(看考:/pages/base/timesmodel/js/v2/ParameterObj.js) | |
| 18 | + */ | |
| 19 | + function _findCeilBcObj(currentBcObj, isUpDir, bcObjArray, _options, paramObj) { | |
| 20 | + // 当前班次的到达时间 | |
| 21 | + var _arriveTime = currentBcObj._$_arrtime; | |
| 22 | + // 停站时间(平均停站时间) | |
| 23 | + // TODO:后面要考虑停驶时间 | |
| 24 | + // TODO:以临港8路为例,暂时修正参与计算的停站时间(上行加10分钟,下行加80分钟,80分钟实际上是停驶,以后要作为单独项计算) | |
| 25 | + var _layOverTime = currentBcObj._$_stoptime; | |
| 26 | + if (isUpDir) { | |
| 27 | + // _layOverTime = _layOverTime + 10; | |
| 28 | + } else { | |
| 29 | + // _layOverTime = _layOverTime + 80; | |
| 30 | + } | |
| 31 | + | |
| 32 | + var _rtnBcObj = null; | |
| 33 | + $jQuery.each(bcObjArray, function(index, item) { | |
| 34 | + // TODO:这里的算法后面再优化 | |
| 35 | + if (!item._$$_internal_lp_obj.getLpNo()) { // 没有被block | |
| 36 | + if (item._$_fcsjObj.isAfter(paramObj.addMinute(_arriveTime, _layOverTime))) { | |
| 37 | + _rtnBcObj = item; | |
| 38 | + return false; | |
| 39 | + } | |
| 40 | + } | |
| 41 | + }); | |
| 42 | + | |
| 43 | + return _rtnBcObj; | |
| 44 | + } | |
| 45 | + | |
| 46 | + /** | |
| 47 | + * 将上行下行班次连接起来(VSP问题)。 | |
| 48 | + * @param upDirBcObjArray 上行班次列表(InternalBcObj v2版本的班次对象) | |
| 49 | + * @param downDirBcObjArray 下行班次列表(InternalBcObj v2版本的班次对象) | |
| 50 | + * @param _options 组件内部参数(参考:/pages/base/timesmodel/js/v4/scheduleBuilder.component.js) | |
| 51 | + * @param paramObj v2版本的参数对象(看考:/pages/base/timesmodel/js/v2/ParameterObj.js) | |
| 52 | + * @private | |
| 53 | + */ | |
| 54 | + function _blockBcObjArray_v1(upDirBcObjArray, downDirBcObjArray, | |
| 55 | + _options, paramObj) { | |
| 56 | + var _rtn_blocks = []; | |
| 57 | + | |
| 58 | + // TODO:要求block至少覆盖上下行首班车,末班车,原来的时刻表不需要完全覆盖,其他优化暂时不考虑 | |
| 59 | + // TODO:使用班型分布列表尽量覆盖生成的block | |
| 60 | + | |
| 61 | + var _block_no; // block编号 | |
| 62 | + var _block = []; // block班次列表 | |
| 63 | + var _fcNo = 1; // 班次发车的顺序号 | |
| 64 | + var _current_trip; // block的第一个班次 | |
| 65 | + var _current_trip_isUpDir; // block第一个班次的方向 | |
| 66 | + | |
| 67 | + var _blockGs = 0; // block工时 | |
| 68 | + var _bxDisIndex = _options.bxDisList.length == 0 ? -1 : 0; // 取第一个班型描述 | |
| 69 | + | |
| 70 | + $jQuery.each(upDirBcObjArray, function(index, item) { | |
| 71 | + if (item._$$_internal_lp_obj.getLpNo()) { | |
| 72 | + // 已经被block跳过 | |
| 73 | + return true; | |
| 74 | + } | |
| 75 | + | |
| 76 | + _block_no = (function (_b_no) {return _b_no} (index + 1)); | |
| 77 | + _block = []; | |
| 78 | + _fcNo = 1; | |
| 79 | + _current_trip = item; | |
| 80 | + _current_trip_isUpDir = true; | |
| 81 | + _blockGs = 0; | |
| 82 | + | |
| 83 | + while (_current_trip != null) { | |
| 84 | + // 确定班型分布index,判定工时 | |
| 85 | + if (_bxDisIndex != -1 && _bxDisIndex < _options.bxDisList.length) { | |
| 86 | + if (_blockGs > _options.bxDisList[_bxDisIndex].bxGs) { | |
| 87 | + console.log(_blockGs); | |
| 88 | + console.log(_options.bxDisList[_bxDisIndex].bxName); | |
| 89 | + _bxDisIndex ++; | |
| 90 | + break; | |
| 91 | + } | |
| 92 | + } | |
| 93 | + | |
| 94 | + _current_trip._$$_internal_lp_obj = { // 路牌对象 | |
| 95 | + getLpNo : function() { return (function (_b_no) { return _b_no; } (index + 1)); }, | |
| 96 | + getLpName: function() { return "路牌" + (function (_b_no) { return _b_no; } (index + 1)); } | |
| 97 | + }; | |
| 98 | + _current_trip._$_fcno = _fcNo; // 发车顺序号 | |
| 99 | + _blockGs += _current_trip._$_bcsj; | |
| 100 | + // _blockGs += _current_trip._$_stoptime; | |
| 101 | + _block.push(_current_trip); | |
| 102 | + | |
| 103 | + _current_trip = _findCeilBcObj( | |
| 104 | + _current_trip, | |
| 105 | + _current_trip_isUpDir, | |
| 106 | + _current_trip_isUpDir ? downDirBcObjArray : upDirBcObjArray, | |
| 107 | + _options, | |
| 108 | + paramObj | |
| 109 | + ); | |
| 110 | + _current_trip_isUpDir = !_current_trip_isUpDir; | |
| 111 | + | |
| 112 | + /** | |
| 113 | + * 修正停站时间, | |
| 114 | + * 连起来后上一个班次的停站时间就不是_$_stoptime,需要用下一个班次时间重启计算,否则公时不准 | |
| 115 | + * TODO:如果停站时间里包含停驶时间,需要另外计算的,后面再议 | |
| 116 | + */ | |
| 117 | + if (_current_trip != null) { | |
| 118 | + _block[_block.length - 1]._$_stoptime = | |
| 119 | + _current_trip._$_fcsjObj.diff(_block[_block.length - 1]._$_arrtime, 'minutes'); | |
| 120 | + _blockGs += _block[_block.length - 1]._$_stoptime; | |
| 121 | + | |
| 122 | + console.log(_block[_block.length - 1]._$_stoptime); | |
| 123 | + } | |
| 124 | + | |
| 125 | + _fcNo ++; | |
| 126 | + } | |
| 127 | + | |
| 128 | + _rtn_blocks.push(_block); | |
| 129 | + }); | |
| 130 | + | |
| 131 | + // // 调试打印 | |
| 132 | + // $jQuery.each(_rtn_blocks, function(index, block) { | |
| 133 | + // _LogArray(block, function(item) { | |
| 134 | + // return item; | |
| 135 | + // }); | |
| 136 | + // }); | |
| 137 | + | |
| 138 | + return _rtn_blocks; | |
| 139 | + } | |
| 140 | + | |
| 141 | + /** | |
| 142 | + * 按照规则将block run cut。 | |
| 143 | + * @param blockArray block列表(二维数组) | |
| 144 | + * @private | |
| 145 | + */ | |
| 146 | + function _runcutBlockArray_v1(blockArray) { | |
| 147 | + // TODO: | |
| 148 | + } | |
| 149 | + | |
| 150 | + | |
| 151 | + /** | |
| 152 | + * 主函数。 | |
| 153 | + * @param Utils 工具类对象(参考:/pages/base/timesmodel/js/v4/utils/ScheduleBuilderUtils.js) | |
| 154 | + * @param paramObj v2版本的参数对象(参考:/pages/base/timesmodel/js/v2/ParameterObj.js) | |
| 155 | + * @param _options 组件内部参数(参考:/pages/base/timesmodel/js/v4/scheduleBuilder.component.js) | |
| 156 | + * @param upDirBcObjArray 上行的发车时间列表(InternalBcObj v2版本的班次对象) | |
| 157 | + * @param downDirBcObjArray 下行的发车时间列表(InternalBcObj v2版本的班次对象) | |
| 158 | + * | |
| 159 | + * //---------------- 输出参数(如下:)--------------// | |
| 160 | + * @param blockArray(输出参数) block列表(二维数组) | |
| 161 | + */ | |
| 162 | + return function(Utils, paramObj, _options, | |
| 163 | + upDirBcObjArray, downDirBcObjArray, | |
| 164 | + blockArray) { | |
| 165 | + // 1-1、将上下行班次block | |
| 166 | + var _blockArray = _blockBcObjArray_v1( // VSP后的数据(最重要的数据) | |
| 167 | + upDirBcObjArray, downDirBcObjArray, _options, paramObj); | |
| 168 | + | |
| 169 | + // 1-2、run cut block | |
| 170 | + _runcutBlockArray_v1(_blockArray); | |
| 171 | + | |
| 172 | + // TODO:可能还有更复杂的VSP计算,再议 | |
| 173 | + | |
| 174 | + // 1-3、保存到输出参数 | |
| 175 | + $jQuery.each(_blockArray, function(index1, value1) { | |
| 176 | + blockArray.push([]); | |
| 177 | + $jQuery.each(value1, function(index2, value2) { | |
| 178 | + blockArray[index1].push(value2); | |
| 179 | + }) | |
| 180 | + }); | |
| 181 | + }; | |
| 182 | + | |
| 183 | + | |
| 184 | +} ($)); | ... | ... |
src/main/resources/static/pages/base/timesmodel/js/v4/scheduleBuilder.component.js
| ... | ... | @@ -11,81 +11,6 @@ |
| 11 | 11 | // ------------ 全局函数(如下)-------------- // |
| 12 | 12 | |
| 13 | 13 | /** |
| 14 | - * 获取内部对象Builder | |
| 15 | - * @param _options 组件内部参数 | |
| 16 | - * @param paramObjV2 v2版本的参数对象(参考:/pages/base/timesmodel/js/v2/ParameterObj.js) | |
| 17 | - * @private | |
| 18 | - */ | |
| 19 | - var _getInternalBcObjectBuilder_ = function(_options, paramObjV2) { | |
| 20 | - var _block; // block编号,类似路牌 | |
| 21 | - var _run; // run编号,对block runcut产生,目前暂时不用 | |
| 22 | - var _tripTime; // 发车时间 | |
| 23 | - var _runTime; // 行驶时间 | |
| 24 | - var _arriveTime; // 到达时间 | |
| 25 | - var _layOverTime; // 停站时间 | |
| 26 | - var _isUp; // boolean 是否上行 | |
| 27 | - var _tripType; // 班次类型(normal,in_,out, bd, lc, cf等) | |
| 28 | - | |
| 29 | - // TODO:还有其他参数 | |
| 30 | - | |
| 31 | - return { | |
| 32 | - block: function(value) { | |
| 33 | - _block = value; | |
| 34 | - return this; | |
| 35 | - }, | |
| 36 | - run: function(value) { | |
| 37 | - _run = value; | |
| 38 | - return this; | |
| 39 | - }, | |
| 40 | - tripTime: function(value) { | |
| 41 | - _tripTime = value; | |
| 42 | - return this; | |
| 43 | - }, | |
| 44 | - runTime: function(value) { | |
| 45 | - _runTime = value; | |
| 46 | - return this; | |
| 47 | - }, | |
| 48 | - arriveTime: function(value) { | |
| 49 | - _arriveTime = value; | |
| 50 | - return this; | |
| 51 | - }, | |
| 52 | - layOverTime: function(value) { | |
| 53 | - _layOverTime = value; | |
| 54 | - return this; | |
| 55 | - }, | |
| 56 | - isUp: function(value) { | |
| 57 | - _isUp = value; | |
| 58 | - return this; | |
| 59 | - }, | |
| 60 | - tripType: function(value) { | |
| 61 | - _tripType = value; | |
| 62 | - return this; | |
| 63 | - }, | |
| 64 | - | |
| 65 | - build : function() { | |
| 66 | - // 返回InternalBcObj v2版本的班次对象(参考:/pages/base/timesmodel/js/v2/core/InternalBcObj.js) | |
| 67 | - return new InternalBcObj( | |
| 68 | - { getLpNo : function() { return _block;}, getLpName: function() { return "路牌" + _block; }}, | |
| 69 | - { | |
| 70 | - bcType : _tripType, // 班次类型(normal,in_,out, bd, lc, cf等) | |
| 71 | - isUp : _isUp, // boolean是否上下行 | |
| 72 | - fcno : 0, // 发车顺序号(block后确定) | |
| 73 | - fcTimeObj : _tripTime, // 发车时间对象 | |
| 74 | - bclc : paramObjV2.calcuTravelLcNumber(_isUp, _tripType), // 班次里程 | |
| 75 | - bcsj : _runTime, // 班次历时 | |
| 76 | - arrtime : _arriveTime, // 到达时间对象 | |
| 77 | - stoptime : _layOverTime, // 停站时间 | |
| 78 | - tccid : _options.tccId, // 停车场id | |
| 79 | - ttinfoid : _options.ttInfoId, // 时刻表id | |
| 80 | - xl : _options.xlId, // 线路id | |
| 81 | - qdzid : _isUp ? _options.upQdzId : _options.downQdzId, // 起点站id | |
| 82 | - zdzid : _isUp ? _options.upZdzId : _options.downZdzId // 终点站id | |
| 83 | - }); | |
| 84 | - } | |
| 85 | - }; | |
| 86 | - }; | |
| 87 | - | |
| 88 | - /** | |
| 89 | 14 | * 打印数组。 |
| 90 | 15 | * @param _array 数组 |
| 91 | 16 | * @param logCallBackFun 数组元素的log值函数 |
| ... | ... | @@ -99,13 +24,6 @@ |
| 99 | 24 | console.log(_logStrArray); |
| 100 | 25 | }; |
| 101 | 26 | |
| 102 | - // 验证条件函数。 | |
| 103 | - var _Asserts = function(condition, msg) { | |
| 104 | - if (!condition) { | |
| 105 | - throw msg; | |
| 106 | - } | |
| 107 | - }; | |
| 108 | - | |
| 109 | 27 | /** |
| 110 | 28 | * 重新计算组件内部用参数。 |
| 111 | 29 | * @param _options 组件内部参数 |
| ... | ... | @@ -199,6 +117,21 @@ |
| 199 | 117 | |
| 200 | 118 | //--------------- 时刻表生成用参数(以上)-----------------// |
| 201 | 119 | |
| 120 | + //--------------- 时刻表生成用辅助参数(以下)-----------------// | |
| 121 | + _options.bxDisList = []; // 班型分布列表 | |
| 122 | + $jQuery.each(paramObjV2.getBxDisList(), function(index, item) { | |
| 123 | + var bxCount = item.bxCount; | |
| 124 | + while (bxCount > 0) { | |
| 125 | + _options.bxDisList.push({ | |
| 126 | + bxName: item.bxName, | |
| 127 | + bxGs: item.bxGs * 60 // 工时转换成分钟 | |
| 128 | + }); | |
| 129 | + bxCount --; | |
| 130 | + } | |
| 131 | + }); | |
| 132 | + | |
| 133 | + //--------------- 时刻表生成用辅助参数(以上)-----------------// | |
| 134 | + | |
| 202 | 135 | //--------------- 时刻表关联参数(以下)---------------// |
| 203 | 136 | _options.xlId = paramObjV2.getXlId(); // 线路id |
| 204 | 137 | _options.ttInfoId = paramObjV2.getTTinfoId(); // 时刻表id |
| ... | ... | @@ -211,97 +144,6 @@ |
| 211 | 144 | //--------------- 时刻表关联参数(以上)---------------// |
| 212 | 145 | }; |
| 213 | 146 | |
| 214 | - /** | |
| 215 | - * 将时间列表转换成 InternalBcObj v2版本的班次对象Array | |
| 216 | - * @param isUp 是否上行 | |
| 217 | - * @param fcsjArray 发车时间列表(moment对象) | |
| 218 | - * @param _options 组件内部参数 | |
| 219 | - * @param paramObjV2 v2版本的参数对象(看考:/pages/base/timesmodel/js/v2/ParameterObj.js) | |
| 220 | - * @return Array InternalBcObj v2版本的班次对象列表(参考:/pages/base/timesmodel/js/v2/core/InternalBcObj.js) | |
| 221 | - * @private | |
| 222 | - */ | |
| 223 | - var _convertFcsjArrayToInternalBcObjv2Array = function(isUp, fcsjArray, _options, paramObjV2) { | |
| 224 | - var _rtn_array = []; | |
| 225 | - | |
| 226 | - $jQuery.each(fcsjArray, function(index, item) { | |
| 227 | - // 1、计算行驶时间,到达时间 | |
| 228 | - var runTime; | |
| 229 | - var arriveTime; | |
| 230 | - if (paramObjV2.isMPeakBc(item)) { | |
| 231 | - runTime = isUp ? _options.upMPeakRunningTime : _options.downMPeakRunningTime; | |
| 232 | - } else if (paramObjV2.isEPeakBc(item)) { | |
| 233 | - runTime = isUp ? _options.upEPeakRunningTime : _options.downEPeakRunningTime; | |
| 234 | - } else { | |
| 235 | - runTime = isUp ? _options.upLowRunningTime : _options.downLowRunningTime; | |
| 236 | - } | |
| 237 | - arriveTime = paramObjV2.addMinute(item, runTime); | |
| 238 | - | |
| 239 | - // 2、计算停站时间(平均停站时间) | |
| 240 | - var layOverTime; | |
| 241 | - if (paramObjV2.isMPeakBc(arriveTime)) { | |
| 242 | - layOverTime = isUp ? | |
| 243 | - (Math.floor((_options.upMPeakMinLayoverTime + _options.upMPeakMaxLayoverTime) / 2)): | |
| 244 | - (Math.floor((_options.downMPeakMinLayoverTime + _options.downMPeakMaxLayoverTime) / 2)); | |
| 245 | - } else if (paramObjV2.isEPeakBc(arriveTime)) { | |
| 246 | - layOverTime = isUp ? | |
| 247 | - (Math.floor((_options.upEPeakMinLayoverTime + _options.upEPeakMaxLayoverTime) / 2)): | |
| 248 | - (Math.floor((_options.downEPeakMinLayoverTime + _options.downEPeakMaxLayoverTime) / 2)); | |
| 249 | - } else { | |
| 250 | - layOverTime = isUp ? | |
| 251 | - (Math.floor((_options.upLowMinLayoverTime + _options.upLowMaxLayoverTime) / 2)): | |
| 252 | - (Math.floor((_options.downLowMinLayoverTime + _options.downLowMaxLayoverTime) / 2)); | |
| 253 | - } | |
| 254 | - | |
| 255 | - _rtn_array.push(_getInternalBcObjectBuilder_(_options, paramObjV2) | |
| 256 | - .tripTime(item) | |
| 257 | - .runTime(runTime) | |
| 258 | - .arriveTime(arriveTime) | |
| 259 | - .layOverTime(layOverTime) | |
| 260 | - .isUp(isUp) | |
| 261 | - .tripType("normal") | |
| 262 | - .build()); | |
| 263 | - }); | |
| 264 | - return _rtn_array; | |
| 265 | - | |
| 266 | - }; | |
| 267 | - | |
| 268 | - /** | |
| 269 | - * 在指定列表中查找比指定班次大的最小班次。 | |
| 270 | - * @param currentBcObj 指定班次(InternalBcObj v2版本的班次对象) | |
| 271 | - * @param isUpDir 是否上行 | |
| 272 | - * @param bcObjArray 指定班次列表(从小到大,有序列表,InternalBcObj v2版本的班次对象列表) | |
| 273 | - * @param _options 组件内部参数 | |
| 274 | - * @param paramObjV2 v2版本的参数对象(看考:/pages/base/timesmodel/js/v2/ParameterObj.js) | |
| 275 | - */ | |
| 276 | - var _findCeilBcObj = function(currentBcObj, isUpDir, bcObjArray, _options, paramObjV2) { | |
| 277 | - // 当前班次的到达时间 | |
| 278 | - var _arriveTime = currentBcObj._$_arrtime; | |
| 279 | - // 停站时间(平均停站时间) | |
| 280 | - // TODO:后面要考虑停驶时间 | |
| 281 | - // TODO:以临港8路为例,暂时修正参与计算的停站时间(上行加10分钟,下行加80分钟,80分钟实际上是停驶,以后要作为单独项计算) | |
| 282 | - var _layOverTime = currentBcObj._$_stoptime; | |
| 283 | - if (isUpDir) { | |
| 284 | - _layOverTime = _layOverTime + 10; | |
| 285 | - } else { | |
| 286 | - _layOverTime = _layOverTime + 80; | |
| 287 | - } | |
| 288 | - | |
| 289 | - var _rtnBcObj = null; | |
| 290 | - $jQuery.each(bcObjArray, function(index, item) { | |
| 291 | - // TODO:这里的算法后面再优化 | |
| 292 | - if (!item._$$_internal_lp_obj.getLpNo()) { // 没有被block | |
| 293 | - if (item._$_fcsjObj.isAfter(paramObjV2.addMinute(_arriveTime, _layOverTime))) { | |
| 294 | - _rtnBcObj = item; | |
| 295 | - return false; | |
| 296 | - } | |
| 297 | - } | |
| 298 | - }); | |
| 299 | - | |
| 300 | - return _rtnBcObj; | |
| 301 | - | |
| 302 | - }; | |
| 303 | - | |
| 304 | - | |
| 305 | 147 | // TODO:还有其他全局函数 |
| 306 | 148 | |
| 307 | 149 | // ------------ 全局函数(如上)-------------- // |
| ... | ... | @@ -312,7 +154,7 @@ |
| 312 | 154 | * @param paramObj v2版本的ParameterObj对象。 |
| 313 | 155 | */ |
| 314 | 156 | $jQuery.fn.scheduleBuilder_v4 = function(paramObj) { |
| 315 | - _Asserts(paramObj != null, "参数ParameterObj(v2版本)不能为空!"); | |
| 157 | + ScheduleBuilderUtils.AssertIsTrue(paramObj != null, "参数ParameterObj(v2版本)不能为空!"); | |
| 316 | 158 | |
| 317 | 159 | // 内部map对象 |
| 318 | 160 | var _options = { |
| ... | ... | @@ -322,129 +164,6 @@ |
| 322 | 164 | // 计算参数 |
| 323 | 165 | _calcuParameter(_options, paramObj); |
| 324 | 166 | |
| 325 | - /** | |
| 326 | - * 计算发车时间列表v1。 | |
| 327 | - * 1、计算当前班次的下一个班次时间(使用各个时间段的平均发车间隔,首班车,末班车发车时间) | |
| 328 | - * 2、重复操作1,直到下一个班次时间大于末班车发车时间 | |
| 329 | - * 3、退出循环,使用末班车作为最后一个班次,计算与上一个班次的发车间隔 | |
| 330 | - * 4、这里直接将最后一个班次删除,将倒数第二个班次改成末班车时间,这样会造成最后一般车发车间隔可能大于最大发车间隔(TODO:这个暂时不管了以后再说) | |
| 331 | - * @param firstTripTime 第一个班次时间(moment对象) | |
| 332 | - * @param lastTripTime 最后一个班次时间(moment对象) | |
| 333 | - * @return Array 时间从早到晚的发车时间列表(moment对象Array) | |
| 334 | - */ | |
| 335 | - var _calcuFcsjArray_v1 = function (firstTripTime, lastTripTime) { | |
| 336 | - _Asserts(firstTripTime.isBefore(lastTripTime), "firstTripTime必须早于lastTripTime!"); | |
| 337 | - | |
| 338 | - var _fcsjArray = []; | |
| 339 | - _fcsjArray.push(firstTripTime); | |
| 340 | - | |
| 341 | - // 按照,低谷->早高峰->低谷->晚高峰->低谷推进 | |
| 342 | - var _previousTripTime = null; | |
| 343 | - var _nextTripTime = null; | |
| 344 | - do { | |
| 345 | - _previousTripTime = _fcsjArray[_fcsjArray.length - 1]; | |
| 346 | - | |
| 347 | - if (paramObj.isMPeakBc(_previousTripTime)) { // 早高峰班次 | |
| 348 | - _nextTripTime = paramObj.addMinute( // 使用平均发车间隔 | |
| 349 | - _previousTripTime, | |
| 350 | - Math.floor((_options.mPeakMinHeadway + _options.mPeakMaxHeadway) / 2) | |
| 351 | - ); | |
| 352 | - } else if (paramObj.isEPeakBc(_previousTripTime)) { // 晚高峰班次 | |
| 353 | - _nextTripTime = paramObj.addMinute( // 使用平均发车间隔 | |
| 354 | - _previousTripTime, | |
| 355 | - Math.floor((_options.ePeakMinHeadway + _options.ePeakMaxHeadway) / 2) | |
| 356 | - ); | |
| 357 | - } else { // 低谷班次 | |
| 358 | - _nextTripTime = paramObj.addMinute( // 使用平均发车间隔 | |
| 359 | - _previousTripTime, | |
| 360 | - Math.floor((_options.lowMinHeadway + _options.lowMaxHeadway) / 2) | |
| 361 | - ); | |
| 362 | - } | |
| 363 | - _fcsjArray.push(_nextTripTime); | |
| 364 | - } while (_nextTripTime.isBefore(lastTripTime)); | |
| 365 | - | |
| 366 | - _fcsjArray.pop(); // 删除最后一个班次 | |
| 367 | - _fcsjArray.pop(); // 删除倒数第二个班次 | |
| 368 | - // 将末班车班次作为最后一个班次,倒数第二个发车间隔可能大于最大发车间隔 | |
| 369 | - // TODO:程序暂时不自动修正,人工修正 | |
| 370 | - _fcsjArray.push(lastTripTime); | |
| 371 | - | |
| 372 | - return _fcsjArray; | |
| 373 | - }; | |
| 374 | - | |
| 375 | - /** | |
| 376 | - * 将上行下行班次连接起来(VSP问题)。 | |
| 377 | - * @param upDirBcObjArray 上行班次列表(InternalBcObj v2版本的班次对象) | |
| 378 | - * @param downDirBcObjArray 下行班次列表(InternalBcObj v2版本的班次对象) | |
| 379 | - * @private | |
| 380 | - */ | |
| 381 | - var _blockBcObjArray_v1 = function (upDirBcObjArray, downDirBcObjArray) { | |
| 382 | - var _rtn_blocks = []; | |
| 383 | - | |
| 384 | - // TODO:要求block至少覆盖上下行首班车,末班车,原来的时刻表不需要完全覆盖,其他优化暂时不考虑 | |
| 385 | - | |
| 386 | - var _block_no; // block编号 | |
| 387 | - var _block = []; // block班次列表 | |
| 388 | - var _fcNo = 1; // 班次发车的顺序号 | |
| 389 | - var _current_trip; // block的第一个班次 | |
| 390 | - var _current_trip_isUpDir; // block第一个班次的方向 | |
| 391 | - | |
| 392 | - $jQuery.each(upDirBcObjArray, function(index, item) { | |
| 393 | - if (item._$$_internal_lp_obj.getLpNo()) { | |
| 394 | - // 已经被block跳过 | |
| 395 | - return true; | |
| 396 | - } | |
| 397 | - | |
| 398 | - _block_no = (function (_b_no) {return _b_no} (index + 1)); | |
| 399 | - _block = []; | |
| 400 | - _fcNo = 1; | |
| 401 | - _current_trip = item; | |
| 402 | - _current_trip_isUpDir = true; | |
| 403 | - | |
| 404 | - while (_current_trip != null) { | |
| 405 | - _current_trip._$$_internal_lp_obj = { // 路牌对象 | |
| 406 | - getLpNo : function() { return (function (_b_no) { return _b_no; } (index + 1)); }, | |
| 407 | - getLpName: function() { return "路牌" + (function (_b_no) { return _b_no; } (index + 1)); } | |
| 408 | - }; | |
| 409 | - _current_trip._$_fcno = _fcNo; // 发车顺序号 | |
| 410 | - _block.push(_current_trip); | |
| 411 | - | |
| 412 | - _current_trip = _findCeilBcObj( | |
| 413 | - _current_trip, | |
| 414 | - _current_trip_isUpDir, | |
| 415 | - _current_trip_isUpDir ? downDirBcObjArray : upDirBcObjArray, | |
| 416 | - _options, | |
| 417 | - paramObj | |
| 418 | - ); | |
| 419 | - _current_trip_isUpDir = !_current_trip_isUpDir; | |
| 420 | - | |
| 421 | - _fcNo ++; | |
| 422 | - } | |
| 423 | - | |
| 424 | - _rtn_blocks.push(_block); | |
| 425 | - }); | |
| 426 | - | |
| 427 | - // 调试打印 | |
| 428 | - $jQuery.each(_rtn_blocks, function(index, block) { | |
| 429 | - _LogArray(block, function(item) { | |
| 430 | - return item; | |
| 431 | - }); | |
| 432 | - }); | |
| 433 | - | |
| 434 | - return _rtn_blocks; | |
| 435 | - }; | |
| 436 | - | |
| 437 | - /** | |
| 438 | - * 按照规则将block run cut。 | |
| 439 | - * @param blockArray block列表(二维数组) | |
| 440 | - * @private | |
| 441 | - */ | |
| 442 | - var _runcutBlockArray_v1 = function (blockArray) { | |
| 443 | - // TODO: | |
| 444 | - | |
| 445 | - }; | |
| 446 | - | |
| 447 | - | |
| 448 | 167 | // 插件的根dom,包含模版的dom元素,由使用插件的界面指定 |
| 449 | 168 | var _rootDom = this[0]; |
| 450 | 169 | |
| ... | ... | @@ -472,33 +191,12 @@ |
| 472 | 191 | }); |
| 473 | 192 | |
| 474 | 193 | // 1-1、计算上行,下行的发车时间列表 |
| 475 | - upDirFcsjArray = _calcuFcsjArray_v1( | |
| 476 | - _options.upDirFirstTripTime, | |
| 477 | - _options.upDirLastTripTime | |
| 478 | - ); | |
| 479 | - downDirFcsjArray = _calcuFcsjArray_v1( | |
| 480 | - _options.downDirFirstTripTime, | |
| 481 | - _options.downDirLastTripTime | |
| 482 | - ); | |
| 483 | - // 1-2、将上下时间列表转换成 InternalBcObj v2版本的班次对象Array | |
| 484 | - upDirBcObjArray = _convertFcsjArrayToInternalBcObjv2Array(true, upDirFcsjArray, _options, paramObj); | |
| 485 | - downDirBcObjArray = _convertFcsjArrayToInternalBcObjv2Array(false, downDirFcsjArray, _options, paramObj); | |
| 486 | - | |
| 487 | - // 调试打印 | |
| 488 | - _LogArray(upDirBcObjArray, function(item) { | |
| 489 | - return item._$_fcsjObj.format("HH:mm"); | |
| 490 | - }); | |
| 491 | - _LogArray(downDirBcObjArray, function(item) { | |
| 492 | - return item._$_fcsjObj.format("HH:mm"); | |
| 493 | - }); | |
| 494 | - | |
| 495 | - // 2、将上下行班次block | |
| 496 | - blockArray = _blockBcObjArray_v1(upDirBcObjArray, downDirBcObjArray); | |
| 497 | - | |
| 498 | - // 3、run cut block | |
| 499 | - _runcutBlockArray_v1(blockArray); | |
| 194 | + CalcuFcsj_v1(ScheduleBuilderUtils, paramObj, _options, | |
| 195 | + upDirFcsjArray, downDirFcsjArray, upDirBcObjArray, downDirBcObjArray); | |
| 500 | 196 | |
| 501 | - // TODO:可能还有更复杂的VSP计算,再议 | |
| 197 | + // 1-2、VSP上下行发车时间列表 | |
| 198 | + VspFcsj_v1(ScheduleBuilderUtils, paramObj, _options, | |
| 199 | + upDirBcObjArray, downDirBcObjArray, blockArray); | |
| 502 | 200 | |
| 503 | 201 | }); |
| 504 | 202 | ... | ... |
src/main/resources/static/pages/base/timesmodel/js/v4/utils/ScheduleBuilderUtils.js
0 → 100644
| 1 | +/** | |
| 2 | + * 时刻表生成v4版本工具类。 | |
| 3 | + */ | |
| 4 | +var ScheduleBuilderUtils = (function () { | |
| 5 | + | |
| 6 | + /** | |
| 7 | + * 验证condition条件是否为真,为否跑异常 | |
| 8 | + * @param condition 条件 | |
| 9 | + * @param msg 异常msg | |
| 10 | + * @private | |
| 11 | + */ | |
| 12 | + function _AssertIsTrue_(condition, msg) { | |
| 13 | + if (!condition) { | |
| 14 | + throw msg; | |
| 15 | + } | |
| 16 | + } | |
| 17 | + | |
| 18 | + /** | |
| 19 | + * 获取内部对象Builder(Build模式) | |
| 20 | + * @param _options 组件内部参数(参考:/pages/base/timesmodel/js/v4/scheduleBuilder.component.js) | |
| 21 | + * @param paramObjV2 v2版本的参数对象(参考:/pages/base/timesmodel/js/v2/ParameterObj.js) | |
| 22 | + * @private | |
| 23 | + */ | |
| 24 | + function _getInternalBcObjectBuilder_(_options, paramObjV2) { | |
| 25 | + var _block; // block编号,类似路牌 | |
| 26 | + var _run; // run编号,对block runcut产生,目前暂时不用 | |
| 27 | + var _tripTime; // 发车时间 | |
| 28 | + var _runTime; // 行驶时间 | |
| 29 | + var _arriveTime; // 到达时间 | |
| 30 | + var _layOverTime; // 停站时间 | |
| 31 | + var _isUp; // boolean 是否上行 | |
| 32 | + var _tripType; // 班次类型(normal,in_,out, bd, lc, cf等) | |
| 33 | + | |
| 34 | + // TODO:还有其他参数 | |
| 35 | + | |
| 36 | + return { | |
| 37 | + block: function(value) { | |
| 38 | + _block = value; | |
| 39 | + return this; | |
| 40 | + }, | |
| 41 | + run: function(value) { | |
| 42 | + _run = value; | |
| 43 | + return this; | |
| 44 | + }, | |
| 45 | + tripTime: function(value) { | |
| 46 | + _tripTime = value; | |
| 47 | + return this; | |
| 48 | + }, | |
| 49 | + runTime: function(value) { | |
| 50 | + _runTime = value; | |
| 51 | + return this; | |
| 52 | + }, | |
| 53 | + arriveTime: function(value) { | |
| 54 | + _arriveTime = value; | |
| 55 | + return this; | |
| 56 | + }, | |
| 57 | + layOverTime: function(value) { | |
| 58 | + _layOverTime = value; | |
| 59 | + return this; | |
| 60 | + }, | |
| 61 | + isUp: function(value) { | |
| 62 | + _isUp = value; | |
| 63 | + return this; | |
| 64 | + }, | |
| 65 | + tripType: function(value) { | |
| 66 | + _tripType = value; | |
| 67 | + return this; | |
| 68 | + }, | |
| 69 | + | |
| 70 | + build : function() { | |
| 71 | + // 返回InternalBcObj v2版本的班次对象(参考:/pages/base/timesmodel/js/v2/core/InternalBcObj.js) | |
| 72 | + return new InternalBcObj( | |
| 73 | + { getLpNo : function() { return _block;}, getLpName: function() { return "路牌" + _block; }}, | |
| 74 | + { | |
| 75 | + bcType : _tripType, // 班次类型(normal,in_,out, bd, lc, cf等) | |
| 76 | + isUp : _isUp, // boolean是否上下行 | |
| 77 | + fcno : 0, // 发车顺序号(block后确定) | |
| 78 | + fcTimeObj : _tripTime, // 发车时间对象 | |
| 79 | + bclc : paramObjV2.calcuTravelLcNumber(_isUp, _tripType), // 班次里程 | |
| 80 | + bcsj : _runTime, // 班次历时 | |
| 81 | + arrtime : _arriveTime, // 到达时间对象 | |
| 82 | + stoptime : _layOverTime, // 停站时间 | |
| 83 | + tccid : _options.tccId, // 停车场id | |
| 84 | + ttinfoid : _options.ttInfoId, // 时刻表id | |
| 85 | + xl : _options.xlId, // 线路id | |
| 86 | + qdzid : _isUp ? _options.upQdzId : _options.downQdzId, // 起点站id | |
| 87 | + zdzid : _isUp ? _options.upZdzId : _options.downZdzId // 终点站id | |
| 88 | + }); | |
| 89 | + } | |
| 90 | + }; | |
| 91 | + } | |
| 92 | + | |
| 93 | + | |
| 94 | + return { | |
| 95 | + AssertIsTrue : _AssertIsTrue_, | |
| 96 | + getInternalBcObjectBuilder : _getInternalBcObjectBuilder_, | |
| 97 | + | |
| 98 | + }; | |
| 99 | + | |
| 100 | + | |
| 101 | +} ()); | ... | ... |
src/main/resources/static/pages/base/timesmodel/tepms/run_headway_temp.html
| ... | ... | @@ -199,7 +199,7 @@ |
| 199 | 199 | <div class="col-md-6"> |
| 200 | 200 | <label class="control-label col-md-5"><span class="required"> * </span>早高峰发车间隔 :</label> |
| 201 | 201 | <div class="col-md-3" style="padding-right: 0px;"> |
| 202 | - <input type="text" class="form-control" value="15" name="zgffcjxmin" id="zgffcjxmin_id" | |
| 202 | + <input type="text" class="form-control" value="20" name="zgffcjxmin" id="zgffcjxmin_id" | |
| 203 | 203 | placeholder="最小间隔"> |
| 204 | 204 | </div> |
| 205 | 205 | <div class="col-md-1" style="padding-top: 10px; font-size: 85%;">至</div> |
| ... | ... | @@ -225,7 +225,7 @@ |
| 225 | 225 | <div class="col-md-6"> |
| 226 | 226 | <label class="control-label col-md-5"><span class="required"> * </span>晚高峰发车间隔 :</label> |
| 227 | 227 | <div class="col-md-3" style="padding-right: 0px;"> |
| 228 | - <input type="text" class="form-control" value="15" name="wffcjxmin" id="wffcjxmin_id" | |
| 228 | + <input type="text" class="form-control" value="20" name="wffcjxmin" id="wffcjxmin_id" | |
| 229 | 229 | placeholder="最小间隔"> |
| 230 | 230 | </div> |
| 231 | 231 | <div class="col-md-1" style="padding-top: 10px; font-size: 85%;">至</div> |
| ... | ... | @@ -247,12 +247,12 @@ |
| 247 | 247 | <div class="col-md-6"> |
| 248 | 248 | <label class="control-label col-md-5"><span class="required"> * </span>低谷发车间隔 :</label> |
| 249 | 249 | <div class="col-md-3" style="padding-right: 0px;"> |
| 250 | - <input type="text" class="form-control" value="20" name="dgfcjxmin" id="dgfcjxmin_id" | |
| 250 | + <input type="text" class="form-control" value="40" name="dgfcjxmin" id="dgfcjxmin_id" | |
| 251 | 251 | placeholder="最小间隔"> |
| 252 | 252 | </div> |
| 253 | 253 | <div class="col-md-1" style="padding-top: 10px; font-size: 85%;">至</div> |
| 254 | 254 | <div class="col-md-3" style="padding-left: 0px;"> |
| 255 | - <input type="text" class="form-control" value="25" name="dgfcjxmax" id="dgfcjxmax_id" | |
| 255 | + <input type="text" class="form-control" value="40" name="dgfcjxmax" id="dgfcjxmax_id" | |
| 256 | 256 | placeholder="最大间隔"> |
| 257 | 257 | </div> |
| 258 | 258 | </div> | ... | ... |