Commit 844aeb48b1c8e3068c08d1744bdead96c86b36f2
1 parent
754616cc
时刻表v2.7.17
1、修改了确定中标线位置的算法,使用上标线第一个虚拟班次往下拉,确定中标线所在路牌(原来是使用模拟一个中标线,匹配高峰班次确定)
Showing
2 changed files
with
50 additions
and
86 deletions
src/main/resources/static/pages/base/timesmodel/js/v2/core/InternalScheduleObj.js
| @@ -163,7 +163,7 @@ var InternalScheduleObj = function(paramObj, lpArray, factory) { | @@ -163,7 +163,7 @@ var InternalScheduleObj = function(paramObj, lpArray, factory) { | ||
| 163 | var iFirstStopTime = | 163 | var iFirstStopTime = |
| 164 | _paramObj.fnCalcuFixedStopNumber( | 164 | _paramObj.fnCalcuFixedStopNumber( |
| 165 | _paramObj.addMinute(aBcArray[0].getFcTimeObj(), -10), | 165 | _paramObj.addMinute(aBcArray[0].getFcTimeObj(), -10), |
| 166 | - _qIsUp, | 166 | + !_qIsUp, |
| 167 | iXXTime | 167 | iXXTime |
| 168 | ); | 168 | ); |
| 169 | var oFlagBc = _factory.createBcObj( // 标记班次 | 169 | var oFlagBc = _factory.createBcObj( // 标记班次 |
| @@ -174,9 +174,6 @@ var InternalScheduleObj = function(paramObj, lpArray, factory) { | @@ -174,9 +174,6 @@ var InternalScheduleObj = function(paramObj, lpArray, factory) { | ||
| 174 | _paramObj.addMinute(aBcArray[0].getFcTimeObj(), -(iFirstStopTime + iXXTime)), | 174 | _paramObj.addMinute(aBcArray[0].getFcTimeObj(), -(iFirstStopTime + iXXTime)), |
| 175 | _paramObj | 175 | _paramObj |
| 176 | ); | 176 | ); |
| 177 | - console.log("ddfdfdf=" + (iFirstStopTime)); | ||
| 178 | - console.log("ddfdfdf=" + (iXXTime)); | ||
| 179 | - console.log("ttt ==" + oFlagBc.getFcTimeObj().format("HH:mm")); | ||
| 180 | oFlagBc.fnSetDelFlag(true); // 标记了删除记号 | 177 | oFlagBc.fnSetDelFlag(true); // 标记了删除记号 |
| 181 | 178 | ||
| 182 | _internalLpArray[0].setBc(0, 1, oFlagBc); | 179 | _internalLpArray[0].setBc(0, 1, oFlagBc); |
| @@ -467,109 +464,71 @@ var InternalScheduleObj = function(paramObj, lpArray, factory) { | @@ -467,109 +464,71 @@ var InternalScheduleObj = function(paramObj, lpArray, factory) { | ||
| 467 | 464 | ||
| 468 | //----------------------- 初始化方法4,计算中标线位置 -------------------------// | 465 | //----------------------- 初始化方法4,计算中标线位置 -------------------------// |
| 469 | var _iZbx_lpIndex; // 中标线对应第几个路牌 | 466 | var _iZbx_lpIndex; // 中标线对应第几个路牌 |
| 470 | - | ||
| 471 | var _fnInitFun4 = function() { // 初始化方法4 | 467 | var _fnInitFun4 = function() { // 初始化方法4 |
| 472 | console.log("//---------------- 行车计划,初始化方法4 start ----------------//"); | 468 | console.log("//---------------- 行车计划,初始化方法4 start ----------------//"); |
| 473 | 469 | ||
| 474 | - //---------------------------- 1、模拟一个中标线,使用临时路牌 ----------------------// | ||
| 475 | - // 构造中标线 | ||
| 476 | - // 中标线开始时间,就是方向的首班车时间 | 470 | + // 中标线开始时间,早的首班车时间,和上标线的开始时间方向相反 |
| 477 | var oSt = !_qIsUp ? _paramObj.getUpFirstDTimeObj() : _paramObj.getDownFirstDTimeObj(); | 471 | var oSt = !_qIsUp ? _paramObj.getUpFirstDTimeObj() : _paramObj.getDownFirstDTimeObj(); |
| 478 | - // 上标线结束时间,使用最晚的末班车时间,结束时间的班次方向 | ||
| 479 | - // 上标线结束时间,使用最晚的末班车时间,结束时间的班次方向 | ||
| 480 | - var oEt; | ||
| 481 | - if (_paramObj.getUpLastDtimeObj().isBefore( | ||
| 482 | - _paramObj.getDownLastDTimeObj())) { | ||
| 483 | - oEt = _paramObj.getDownLastDTimeObj(); | ||
| 484 | - } else { | ||
| 485 | - oEt = _paramObj.getUpLastDtimeObj(); | ||
| 486 | - } | ||
| 487 | 472 | ||
| 488 | - var oTempLp = new InternalLpObj({lpNo: -999, lpName: "-999"}, _qCount, _qIsUp); | ||
| 489 | - oTempLp.initDataFromTimeToTime( | ||
| 490 | - oSt, | ||
| 491 | - oEt, | ||
| 492 | - !_qIsUp, | ||
| 493 | - 0, | ||
| 494 | - _paramObj, | ||
| 495 | - _factory | ||
| 496 | - ); | ||
| 497 | - | ||
| 498 | - //------------------------ 2、找出中标线的早高峰班次,计算应该插在当前路牌数组的那个位置 ----------------// | ||
| 499 | - // 找出中标线对应的早高峰的班次对象 | ||
| 500 | - var oZb_gf_bc = oTempLp.getBc(_approximate_zgfQIndex, _approximate_zgfBIndex); | ||
| 501 | - //alert(oZb_gf_bc.getFcTimeObj().format("HH:mm")); | ||
| 502 | - | ||
| 503 | - // 把所有连班路牌高峰班次重新构造成一个一个的圈数组,计算对应中标线最近的是第几个路牌 | ||
| 504 | - // 中标线和上标线一样在连班路牌上 | ||
| 505 | - var aTempq = []; | ||
| 506 | - var oTempq; | ||
| 507 | - var oTempb; | 473 | + // 1、使用上标线的开始时间的之前的虚拟班次,往下拉,模拟构造每个路牌的开头的虚拟班次 |
| 508 | var i; | 474 | var i; |
| 509 | - var oLp; | ||
| 510 | - | ||
| 511 | - var aLbIndexes = []; // 连班的路牌索引 | ||
| 512 | - for (i = 0; i < _internalLpArray.length; i++) { | ||
| 513 | - if (_internalLpArray[i].isBxLb()) { | ||
| 514 | - aLbIndexes.push(i); | ||
| 515 | - } | 475 | + var _aFBc = []; |
| 476 | + _aFBc.push(_internalLpArray[0].getBc(0, 1)); // 第一个班次是上标线的开头虚拟班次 | ||
| 477 | + for (i = 1; i < _internalLpArray.length; i++) { | ||
| 478 | + _aFBc.push(_fnGenerateBc(i, 0, 1)); | ||
| 516 | } | 479 | } |
| 517 | 480 | ||
| 518 | - for (i = 0; i < aLbIndexes.length; i++) { | ||
| 519 | - oLp = _internalLpArray[aLbIndexes[i]]; | 481 | + // 2、使用中标线开始时间,比对虚拟班次,找出最接近的(但是要大于等于时间) |
| 482 | + var _iLpIndex = -1; // 中标线的路牌索引 | ||
| 483 | + for (i = 0; i < _aFBc.length; i++) { | ||
| 484 | + console.log("比较班次的发车时间=" + _aFBc[i].getFcTimeObj().format("HH:mm")); | ||
| 520 | 485 | ||
| 521 | - oTempb = oLp.getBc(_approximate_zgfQIndex, _approximate_zgfBIndex); | ||
| 522 | - if (oTempb.isUp() == _qIsUp) { | ||
| 523 | - oTempq = new InternalGroupObj(oLp, _qIsUp, oTempb, undefined); | ||
| 524 | - } else { | ||
| 525 | - oTempq = new InternalGroupObj(oLp, _qIsUp, undefined, oTempb); | 486 | + if (!_internalLpArray[i].isBxLb()) { |
| 487 | + // 如果不是连班,不计算 | ||
| 488 | + continue; | ||
| 526 | } | 489 | } |
| 527 | - aTempq.push(oTempq); | ||
| 528 | 490 | ||
| 491 | + if (_aFBc[i].getFcTimeObj().diff(oSt) >= 0) { | ||
| 492 | + _iLpIndex = i; | ||
| 493 | + break; | ||
| 494 | + } | ||
| 529 | } | 495 | } |
| 530 | 496 | ||
| 531 | - var aTtindex = oTempLp.fnGetQBcIndexWithFcTimeFromGroupArray( // 找出最接近中标线的路牌索引 | ||
| 532 | - oZb_gf_bc.getFcTimeObj(), | ||
| 533 | - aTempq, | ||
| 534 | - true, | ||
| 535 | - true | ||
| 536 | - ); | 497 | + _iZbx_lpIndex = _iLpIndex; // 中标线放在第几个路牌 |
| 537 | 498 | ||
| 538 | - _iZbx_lpIndex = aLbIndexes[aTtindex[0]]; // 中标线放在第几个路牌 | 499 | + // 3、设定中标线班次 |
| 500 | + _aFBc[_iZbx_lpIndex].fnSetIsFirstBc(true); // 设置首班班次标识 | ||
| 501 | + _aFBc[_iZbx_lpIndex].setLp(_internalLpArray[_iZbx_lpIndex]); // 设置关联的路牌 | ||
| 502 | + _aFBc[_iZbx_lpIndex].fnSetDelFlag(false); // 不是标识班次 | ||
| 503 | + _internalLpArray[_iZbx_lpIndex].setBc(0, 1, _aFBc[_iZbx_lpIndex]); // 将班次加入路牌 | ||
| 539 | 504 | ||
| 540 | - oTempLp.getMinBcObj().fnSetIsFirstBc(true); // 设置首班班次标识 | 505 | + // 4、修改班次时间为中标时间 |
| 506 | + var _iDiffTime = _aFBc[_iZbx_lpIndex].getFcTimeObj().diff(oSt, "m"); | ||
| 507 | + _aFBc[_iZbx_lpIndex].getFcTimeObj().add(-_iDiffTime, "m"); | ||
| 508 | + _aFBc[_iZbx_lpIndex].getArrTimeObj().add(-_iDiffTime, "m"); | ||
| 509 | + _aFBc[_iZbx_lpIndex].setStopTime(_aFBc[_iZbx_lpIndex].getStopTime() + _iDiffTime); | ||
| 541 | 510 | ||
| 542 | - if (_iZbx_lpIndex == 0) { // 如果中标线和上标线一致 | ||
| 543 | - var oFirstBcIndexes = oTempLp.getMinBcObjPosition(); | ||
| 544 | - var oFirstBc = oTempLp.getMinBcObj(); | ||
| 545 | - oFirstBc.setLp(_internalLpArray[_iZbx_lpIndex]); | ||
| 546 | - oFirstBc.fnSetDelFlag(false); | ||
| 547 | - _internalLpArray[_iZbx_lpIndex].setBc(oFirstBcIndexes[0], oFirstBcIndexes[1], oFirstBc); | ||
| 548 | - } else { | ||
| 549 | - oTempLp.setLp(_lpArray[_iZbx_lpIndex]); // 设置原始路牌对象 | ||
| 550 | - oTempLp._$_aVerticalIntervalTime = _internalLpArray[_iZbx_lpIndex]._$_aVerticalIntervalTime; // 设置纵向最小发车间隔 | ||
| 551 | - oTempLp.setBxLb(_internalLpArray[_iZbx_lpIndex].isBxLb()); | ||
| 552 | - oTempLp.setBxFb(_internalLpArray[_iZbx_lpIndex].isBxFb()); | ||
| 553 | - oTempLp.setBxFb5_2(_internalLpArray[_iZbx_lpIndex].isBxFb5_2()); | ||
| 554 | - | ||
| 555 | - // 修正除了第一个班次外,其余其他班次 | ||
| 556 | - var iBcindex = 0; | ||
| 557 | - for (i = 1; i < _qCount; i++) { | ||
| 558 | - while (iBcindex <= 1) { | ||
| 559 | - if (oTempLp.getBc(i, iBcindex)) { // 替换存在的班次 | ||
| 560 | - oTempLp.setBc(i, iBcindex, _fnGenerateBc(_iZbx_lpIndex, i, iBcindex)); | ||
| 561 | - } | ||
| 562 | - iBcindex ++; | ||
| 563 | - } | ||
| 564 | - iBcindex = 0; | 511 | + |
| 512 | + // 5、如果中标线的开始时间比较早,则中标线下一个班次可能空,补,一直到前面添加的高峰班次为止 | ||
| 513 | + for (i = 1; i < _qCount; i++) { // 从第二圈开始,因为第一圈第二个班次就是中标线的开始时间 | ||
| 514 | + if (_internalLpArray[_iZbx_lpIndex].getBc(i, 0)) { | ||
| 515 | + break; | ||
| 516 | + } else { | ||
| 517 | + _fnGenerateBcAndSetBc(_iZbx_lpIndex, i, 0); | ||
| 565 | } | 518 | } |
| 566 | 519 | ||
| 567 | - _internalLpArray[_iZbx_lpIndex] = oTempLp; | 520 | + if (_internalLpArray[_iZbx_lpIndex].getBc(i, 1)) { |
| 521 | + break; | ||
| 522 | + } else { | ||
| 523 | + _fnGenerateBcAndSetBc(_iZbx_lpIndex, i, 1); | ||
| 524 | + } | ||
| 568 | } | 525 | } |
| 569 | 526 | ||
| 570 | console.log("中标线对应第" + (_iZbx_lpIndex + 1) + "个路牌"); | 527 | console.log("中标线对应第" + (_iZbx_lpIndex + 1) + "个路牌"); |
| 571 | 528 | ||
| 572 | console.log("//---------------- 行车计划,初始化方法4 end ----------------//"); | 529 | console.log("//---------------- 行车计划,初始化方法4 end ----------------//"); |
| 530 | + | ||
| 531 | + | ||
| 573 | }; | 532 | }; |
| 574 | 533 | ||
| 575 | //-------------------- 重要的内部方法 -----------------------// | 534 | //-------------------- 重要的内部方法 -----------------------// |
| @@ -1176,7 +1135,7 @@ var InternalScheduleObj = function(paramObj, lpArray, factory) { | @@ -1176,7 +1135,7 @@ var InternalScheduleObj = function(paramObj, lpArray, factory) { | ||
| 1176 | var aLbLpindexes = []; // 除上标线,中标线的连班路牌索引 | 1135 | var aLbLpindexes = []; // 除上标线,中标线的连班路牌索引 |
| 1177 | var i; | 1136 | var i; |
| 1178 | for (i = 0; i < _internalLpArray.length; i++) { | 1137 | for (i = 0; i < _internalLpArray.length; i++) { |
| 1179 | - if (_internalLpArray[i].isBxLb() && i != 0 && i != _iZbx_lpIndex) { | 1138 | + if (_internalLpArray[i].isBxLb() && i != 0) { |
| 1180 | aLbLpindexes.push(i); | 1139 | aLbLpindexes.push(i); |
| 1181 | } | 1140 | } |
| 1182 | } | 1141 | } |
| @@ -1225,7 +1184,10 @@ var InternalScheduleObj = function(paramObj, lpArray, factory) { | @@ -1225,7 +1184,10 @@ var InternalScheduleObj = function(paramObj, lpArray, factory) { | ||
| 1225 | var iBindex; | 1184 | var iBindex; |
| 1226 | // 补上标线到中标线之间的连班路牌的班次 | 1185 | // 补上标线到中标线之间的连班路牌的班次 |
| 1227 | for (i = 0; i < aLbLpindexes.length; i++) { | 1186 | for (i = 0; i < aLbLpindexes.length; i++) { |
| 1228 | - if (aLbLpindexes[i] > 0 && aLbLpindexes[i] < _iZbx_lpIndex) { | 1187 | + // 中标线可能也要补充,因为中标线生成算法有变 |
| 1188 | + // 如果上标线==中标线为止,不用补了 | ||
| 1189 | + | ||
| 1190 | + if (aLbLpindexes[i] > 0 && aLbLpindexes[i] <= _iZbx_lpIndex) { | ||
| 1229 | oLp = _internalLpArray[aLbLpindexes[i]]; | 1191 | oLp = _internalLpArray[aLbLpindexes[i]]; |
| 1230 | aMinbcPos = oLp.getMinBcObjPosition(); | 1192 | aMinbcPos = oLp.getMinBcObjPosition(); |
| 1231 | iQindex = aMinbcPos[0]; | 1193 | iQindex = aMinbcPos[0]; |