Commit 844aeb48b1c8e3068c08d1744bdead96c86b36f2

Authored by 徐烜
1 parent 754616cc

时刻表v2.7.17

1、修改了确定中标线位置的算法,使用上标线第一个虚拟班次往下拉,确定中标线所在路牌(原来是使用模拟一个中标线,匹配高峰班次确定)
src/main/resources/static/pages/base/timesmodel/js/v2/core/InternalScheduleObj.js
... ... @@ -163,7 +163,7 @@ var InternalScheduleObj = function(paramObj, lpArray, factory) {
163 163 var iFirstStopTime =
164 164 _paramObj.fnCalcuFixedStopNumber(
165 165 _paramObj.addMinute(aBcArray[0].getFcTimeObj(), -10),
166   - _qIsUp,
  166 + !_qIsUp,
167 167 iXXTime
168 168 );
169 169 var oFlagBc = _factory.createBcObj( // 标记班次
... ... @@ -174,9 +174,6 @@ var InternalScheduleObj = function(paramObj, lpArray, factory) {
174 174 _paramObj.addMinute(aBcArray[0].getFcTimeObj(), -(iFirstStopTime + iXXTime)),
175 175 _paramObj
176 176 );
177   - console.log("ddfdfdf=" + (iFirstStopTime));
178   - console.log("ddfdfdf=" + (iXXTime));
179   - console.log("ttt ==" + oFlagBc.getFcTimeObj().format("HH:mm"));
180 177 oFlagBc.fnSetDelFlag(true); // 标记了删除记号
181 178  
182 179 _internalLpArray[0].setBc(0, 1, oFlagBc);
... ... @@ -467,109 +464,71 @@ var InternalScheduleObj = function(paramObj, lpArray, factory) {
467 464  
468 465 //----------------------- 初始化方法4,计算中标线位置 -------------------------//
469 466 var _iZbx_lpIndex; // 中标线对应第几个路牌
470   -
471 467 var _fnInitFun4 = function() { // 初始化方法4
472 468 console.log("//---------------- 行车计划,初始化方法4 start ----------------//");
473 469  
474   - //---------------------------- 1、模拟一个中标线,使用临时路牌 ----------------------//
475   - // 构造中标线
476   - // 中标线开始时间,就是方向的首班车时间
  470 + // 中标线开始时间,早的首班车时间,和上标线的开始时间方向相反
477 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 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 527 console.log("中标线对应第" + (_iZbx_lpIndex + 1) + "个路牌");
571 528  
572 529 console.log("//---------------- 行车计划,初始化方法4 end ----------------//");
  530 +
  531 +
573 532 };
574 533  
575 534 //-------------------- 重要的内部方法 -----------------------//
... ... @@ -1176,7 +1135,7 @@ var InternalScheduleObj = function(paramObj, lpArray, factory) {
1176 1135 var aLbLpindexes = []; // 除上标线,中标线的连班路牌索引
1177 1136 var i;
1178 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 1139 aLbLpindexes.push(i);
1181 1140 }
1182 1141 }
... ... @@ -1225,7 +1184,10 @@ var InternalScheduleObj = function(paramObj, lpArray, factory) {
1225 1184 var iBindex;
1226 1185 // 补上标线到中标线之间的连班路牌的班次
1227 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 1191 oLp = _internalLpArray[aLbLpindexes[i]];
1230 1192 aMinbcPos = oLp.getMinBcObjPosition();
1231 1193 iQindex = aMinbcPos[0];
... ...
src/main/resources/static/pages/base/timesmodel/js/v2/main_v2.js
... ... @@ -1003,3 +1003,5 @@ var Main_v2 = function() {
1003 1003 };
1004 1004  
1005 1005 }();
  1006 +
  1007 +
... ...