Commit 5c10bae383ff435eccaa1f1a84ff28982608e0d2

Authored by 李强
1 parent 5d956c1b

bsthlq <2519941818@qq.com>

src/main/resources/static/pages/base/timesmodel/js/base-fun.js
... ... @@ -229,7 +229,7 @@ var BaseFun = function() {
229 229 * @return : 返回一个数值。这里返回的是行驶时间数值
230 230 *
231 231 * */
232   - getxssj : function(zg,wg,sj,pc,gf,dir) {
  232 + getByDirTravelTime : function(zg,wg,sj,pc,gf,dir) {
233 233 var xxsj = 0;
234 234 if(baseF.isgfsjd(zg[0].st,zg[0].ed,sj) || baseF.isgfsjd(wg[0].st,wg[0].ed,sj))
235 235 xxsj = gf[dir];
... ... @@ -303,7 +303,7 @@ var BaseFun = function() {
303 303 dataMap.dira[cctag],xhNo++,0,gatps,0,null,null,null,0,0));// 晚餐班次
304 304 }
305 305 var tzsj = dataMap.ztjxA[cctag];
306   - var _xxsj = baseF.getxssj(dataMap.zgfsjd,dataMap.wgfsjd,kssj,dataMap.pcxssjArr,dataMap.gfxxsjArr,cctag);// 获取行驶时间
  306 + var _xxsj = baseF.getByDirTravelTime(dataMap.zgfsjd,dataMap.wgfsjd,kssj,dataMap.pcxssjArr,dataMap.gfxxsjArr,cctag);// 获取行驶时间
307 307 var tzsj = baseF.isLastbc(kssj,endTime,tzsj,_xxsj) ? 0 : tzsj;
308 308 jsonArray.push(baseF.getbcObj(
309 309 kssj,_xxsj,carArray[a],dataMap.bcTypeArr.normal,
... ... @@ -325,20 +325,6 @@ var BaseFun = function() {
325 325 },
326 326  
327 327 /**
328   - * @description (TODO) 剔除不在上、下行时间范围内的班次.
329   - *
330   - *
331   - */
332   - tcbzfwndbc02 : function(jsonArray,dataMap) {
333   - var _obj = baseF.getsxAndxxbc(jsonArray,dataMap);
334   - // 剔除上行不在时间范围内的班次
335   - baseF.tcbc(_obj.sxbc,dataMap.smbcsjArr[0].kssj,dataMap.smbcsjArr[0].jssj);
336   - // 剔除下行不在时间范围内的班次
337   - baseF.tcbc(_obj.xxbc,dataMap.smbcsjArr[1].kssj,dataMap.smbcsjArr[1].jssj);
338   - return _obj.sxbc.concat(_obj.xxbc);
339   - },
340   -
341   - /**
342 328 * @description : (TODO) 调整某班型下的各个路牌对应的班次以及工时、停站时间、是否分班.
343 329 * @param bxlpbc 班型下的各个路牌的所有班次数组.
344 330 * @param map 表单参数信息
... ... @@ -396,13 +382,13 @@ var BaseFun = function() {
396 382 *
397 383 *
398 384 **/
399   - tzlpgs02 : function(bxlpbc , map , dataMap , saa , cara , bxrcObj , dgminpcs) {
  385 + abstractBcByWorkTime : function(bxlpbc , map , dataMap , saa , cara , bxrcObj , dgminpcs) {
400 386 var rsultA = new Array();
401 387 for(var a = 0 ; a < bxlpbc.length ; a++) {
402   - // 定义该版型下对应的路牌的班次数组、班次数组长度。
403   - var lpbc = bxlpbc[a].lpbc, lpbclen_;
  388 + // 定义该版型下对应的路牌的班次数组、班次数组长度、该路牌上是否有首末班车。
  389 + var lpbc = bxlpbc[a].lpbc, lpbclen_ , isFlag = baseF.lpDownIsHaveFirstAndLastBc(lpbc , dataMap.smbcsjArr);
404 390 // 定义当前路牌的初始工时、班型对应的标准工时
405   - var initCountGs = bxlpbc[a].initCountGs ,bzgs = bxlpbc[a].bzgs;
  391 + var initCountGs = bxlpbc[a].initCountGs , bzgs = bxlpbc[a].bzgs;
406 392 // 定义初始工时与日平均工时差值
407 393 var initdx = initCountGs - bxlpbc[a].gsavg;
408 394 // 定义剔除班次数、剔除的时间段.
... ... @@ -436,24 +422,22 @@ var BaseFun = function() {
436 422 if( a % 2 == 0) {
437 423 // 定义早高峰结束 ~ 12:30 剔除规则.如果剔除的班次数不够,则去晚高峰之后剔除剩下的班次.
438 424 var swmaxtcbcNum = parseInt(( dgzjsj - dataMap.zgfsjd[0].ed) / (60000 * saa[0].zzsj.dgzzsj));
439   - if(deletebcNum < swmaxtcbcNum) {
  425 + if(deletebcNum < swmaxtcbcNum || isFlag) {
440 426 // tcbcgzA.push({'minsj': dataMap.zgfsjd[0].ed , 'maxsj' : dgzjsj , 'order' : 'asc' , 'deletebcNum' : deletebcNum});
441   - tcbcgzA.push({'minsj': dataMap.zgfsjd[0].ed , 'maxsj' : dgzjsj , 'order' : 'asc' , 'deletebcNum' : deletebcNum});
  427 + tcbcgzA.push({'minsj': dataMap.zgfsjd[0].ed , 'maxsj' : dgzjsj , 'order' : 'asc' , 'deletebcNum' : swmaxtcbcNum});
442 428 }else {
443 429 tcbcgzA.push({'minsj': dataMap.zgfsjd[0].ed, 'maxsj' : dgzjsj , 'order' : 'asc' , 'deletebcNum' : swmaxtcbcNum},
444 430 {'minsj': dataMap.wgfsjd[0].ed , 'maxsj' : dataMap.wgfzhsjd[0].ed, 'order' : 'desc' , 'deletebcNum' : deletebcNum - swmaxtcbcNum});
445 431 }
446   - // tcbcgzA.push({'minsj': dataMap.zgfsjd[0].ed , 'maxsj' : dgzjsj , 'order' : 'asc' , 'deletebcNum' : deletebcNum});
447 432 }else {
448 433 // 定义12:30 ~ 晚高峰开始以前剔除规则. 如果剔除的班次数不够,则去晚高峰之后剔除剩下的班次.
449 434 var xwmaxtcbcNum = parseInt(( dataMap.wgfsjd[0].st - dgzjsj) / (60000 * saa[0].zzsj.dgzzsj));
450   - if(deletebcNum < xwmaxtcbcNum) {
451   - tcbcgzA.push({'minsj': dgzjsj , 'maxsj' : dataMap.wgfsjd[0].st , 'order' : 'desc', 'deletebcNum' : deletebcNum});
  435 + if(deletebcNum < xwmaxtcbcNum || isFlag) {
  436 + tcbcgzA.push({'minsj': dgzjsj , 'maxsj' : dataMap.wgfsjd[0].st , 'order' : 'desc', 'deletebcNum' : xwmaxtcbcNum});
452 437 }else {
453 438 tcbcgzA.push({'minsj': dataMap.wgfsjd[0].ed , 'maxsj' : dataMap.wgfzhsjd[0].ed , 'order' : 'desc', 'deletebcNum' : deletebcNum - xwmaxtcbcNum},
454 439 {'minsj': dgzjsj , 'maxsj' : dataMap.wgfsjd[0].st , 'order' : 'desc', 'deletebcNum' : xwmaxtcbcNum});
455 440 }
456   - // tcbcgzA.push({'minsj': dgzjsj , 'maxsj' : dataMap.wgfsjd[0].st , 'order' : 'desc', 'deletebcNum' : deletebcNum});
457 441 }
458 442 // 按规则剔除班次.并且分班.路牌班次断开.
459 443 baseF.spliceBc02(lpbc , tcbcgzA , dataMap , true);
... ... @@ -476,6 +460,20 @@ var BaseFun = function() {
476 460 }
477 461 return rsultA;
478 462 },
  463 + /**
  464 + * @description (TODO) 判断某路牌下是否存在首末班车时间班次.
  465 + * @param arr 某路牌下的班次.
  466 + * @param smbcsjArr 首末班车时间点数组集合.
  467 + */
  468 + lpDownIsHaveFirstAndLastBc : function(arr , smbcsjArr) {
  469 + for(var a = 0 ; a < arr.length ; a++) {
  470 + for(var s = 0 ; s < smbcsjArr.length ; s++) {
  471 + if(arr[a].fcsj == smbcsjArr[s].kssj || arr[a].fcsj == smbcsjArr[s].jssj)
  472 + return true;
  473 + }
  474 + }
  475 + return false;
  476 + },
479 477  
480 478 /**
481 479 * @description (TODO) 定义不断开班次的路牌剔除规则.
... ... @@ -518,7 +516,7 @@ var BaseFun = function() {
518 516 for(var a = 0 ; a < arr.length ; a ++) {
519 517 var fcsj = baseF.getDateTime(arr[a].fcsj);
520 518 // 判断是否在高峰时间范围.【true--表示在,false--表示不在】.
521   - if(!baseF.isgfsjd01(fcsj,dataMap) && fcsj > tcbcgzA[t].minsj && fcsj < tcbcgzA[t].maxsj) {
  519 + if(!baseF.isPeakTimeScope(fcsj,dataMap) && fcsj > tcbcgzA[t].minsj && fcsj < tcbcgzA[t].maxsj) {
522 520 if(order == 'asc') {
523 521 arr[a-1].isfb = isfb ? 1 : 0;
524 522 arr[a-1].STOPTIME = 0;
... ... @@ -544,7 +542,7 @@ var BaseFun = function() {
544 542 * @map map 表单参数.
545 543 * @return 返回一个满足单个路牌对应的标准工时、满足某班型下的所有路牌的平均工时对应的日平均工时、停站时间、路牌是否分班的班次集合.
546 544 */
547   - jslpgsAndbcs : function(bxrclist , jsonArray , cara , saa , dataMap , map) {
  545 + abstractCar : function(bxrclist , jsonArray , cara , saa , dataMap , map) {
548 546 // 定义低谷最大发车时间、最大停站时间来反算出低谷最少配车数.
549 547 var dgmaxfcjx = parseInt(map.dgmaxfcjx),
550 548 dgmaxtzsj = parseInt(map.dgmaxtzsj);
... ... @@ -618,7 +616,7 @@ var BaseFun = function() {
618 616 bxlpbc.sort(function(x,y){return x.fcint-y.fcint});
619 617 // console.log(bxlpbc);
620 618 // 调整某班型下的各个路牌对应的班次以及工时、停站时间、是否分班.
621   - rs = rs.concat(baseF.tzlpgs02(bxlpbc , map , dataMap , saa , cara , bxrclist[x] , dgminpcs));
  619 + rs = rs.concat(baseF.abstractBcByWorkTime(bxlpbc , map , dataMap , saa , cara , bxrclist[x] , dgminpcs));
622 620 }
623 621 }
624 622 return rs;
... ... @@ -637,131 +635,495 @@ var BaseFun = function() {
637 635 }
638 636 },
639 637  
640   - BXPplaceClassesTime02 : function(saa , cara , map , seMap , dataMap , lpNoA) {
641   - // 得到所有路牌下的班次数[从各路牌下的第一个班次发车时间 到 营运结束时间点并且是连续的班次数].
642   - var jsonArray = baseF.plgfbc01(saa , cara , map , seMap , dataMap);
643   - // return {'json':jsonArray,'bxrcgs':null};
  638 + /**
  639 + * @description (TODO) 根据班型/人次/配车 排列时刻表明细.
  640 + * @prarm saa 封装的一些 停站时间、周转时间、行驶时间、行驶里程等.
  641 + * @param cara 路牌数组.
  642 + * @param map 表单参数.
  643 + * @param seMap 营运开始 ~ 结束时间
  644 + * @param dataMap 封装的 以上、下行方向成对存在的 一些参数数组 [下标0 -- 代表上行 ; 下标1 -- 代表下行].
  645 + *
  646 + * ************************************ 思路 **********************************************
  647 + *
  648 + * 第一步 根据表单参数初始化时刻表明细. -- 这里我们也可以叫初始化时刻表明细.
  649 + *
  650 + * 第二步 均匀初始化时刻表明细的发车间隙. -- 这里我们也可以叫纵向调整.
  651 + *
  652 + * 第三步 剔除首末班车以外的班次,并确认首末班车.
  653 + *
  654 + * 第四步 调整均匀发车间隙过程中产生的停站时间问题. -- 这里我们也可以叫横向调整.
  655 + *
  656 + * 第五步 把班型合理的分配到各个路牌上.
  657 + *
  658 + * 切割班型/人次/配车数 字符串 为 数组对象.
  659 + *
  660 + * 把班型分配到对应的具体路牌上.
  661 + *
  662 + * 第六步 根据各个路牌上班型的工时按照规则进行切割. -- 这里我们也叫抽车.
  663 + *
  664 + * 均匀抽车;
  665 + *
  666 + * 各个路牌满足行业班型标准工时 范围在 [1-1.5小时]内浮动;
  667 + *
  668 + * 相同班型下的日平均工时满足 参数的日平均工时 范围在 [10分钟]内浮动.
  669 + *
  670 + *
  671 + * 第七步 确定吃饭时间.
  672 + *
  673 + * 第八步 确定进出场、早晚例保时间.
  674 + *
  675 + * ***************************************************************************************
  676 + */
  677 + BXPplaceClassesTime02 : function(saa , cara , map , seMap , dataMap) {
  678 +
  679 + // 第一步 根据表单中的参数得到所有路牌下的班次数[从各路牌下的第一个班次发车时间 到 营运结束时间点并且是连续的班次数].
  680 + var jsonArray = baseF.GetByArgusInitAllLpDownedBcCollections(saa , cara , map , seMap , dataMap);
  681 +
  682 + // 第二步 纵向调整
  683 + baseF.evenStartDepartSpace(jsonArray , dataMap);
644 684  
  685 + // 第三步 剔除首末班车以外的班次,并确认首末班车.
  686 + var markArray = baseF.markFirstAndLastBusAlsoDietNotInRangeBc(jsonArray , dataMap);
  687 +
  688 + // 第四步 横向调整
  689 + baseF.resizeByPitStopTime(cara , jsonArray , dataMap);
  690 +
  691 + /**
  692 + * 第五步 把班型合理的分配到各个路牌上.
  693 + *
  694 + * 切割班型/人次/配车数 字符串 为 数组对象.
  695 + *
  696 + * 把班型分配到对应的具体路牌上.
  697 + */
645 698 // 切割班型/人次/配车数 字符串 为 数组对象.
646   - var list = baseF.splitBxRc02(map.bxrc);
  699 + var list = baseF.getBxRcListCollection(map.bxrc);
647 700 // 把班型分配到对应的具体路牌上.
648   - baseF.fprclp01(list,cara);
649   - // console.log(list);
  701 + baseF.bxAlloTotLp(list,cara);
  702 +
  703 + // 第六步 抽车来满足工时.
  704 + var tempA = baseF.abstractCar(list , markArray , cara , saa , dataMap , map);
650 705  
651   - var tempA = baseF.jslpgsAndbcs(list.data , baseF.tcbzfwndbc02(jsonArray , dataMap) , cara , saa , dataMap , map);
652   - // return {'json':tempA,'bxrcgs':null};
653 706 return {'json':baseF.addjcclcbc01(cara,tempA,dataMap,saa,map),'bxrcgs':null};
654   - var ttsmbA = baseF.tzsmbcsj01(tempA,dataMap.smbcsjArr,dataMap.ccsjArr,dataMap.cclcArr,dataMap.qdzArr,saa[0].lbsj,dataMap);
  707 + // return {'json':baseF.addjcclcbc01(cara,tempA,dataMap,saa,map),'bxrcgs':null};
  708 + // return {'json':tempA,'bxrcgs':null};
  709 +
655 710  
656   - baseF.jhfcjx02(ttsmbA,dataMap);
657   - //return {'json':baseF.addjcclcbc01(cara,ttsmbA,dataMap,saa,map),'bxrcgs':null};
658   - //return {'json':ttsmbA,'bxrcgs':null};
659   - var rsjar = baseF.tzsztest02(cara,ttsmbA,dataMap);
660   - return {'json':rsjar,'bxrcgs':null};
661   - return {'json':baseF.addjcclcbc01(cara,rsjar,dataMap,saa,map),'bxrcgs':null};
  711 +
  712 + // return {'json':tempA,'bxrcgs':null};
  713 + // return {'json':baseF.addjcclcbc01(cara,ttsmbA,dataMap,saa,map),'bxrcgs':null};
  714 + // return {'json':ttsmbA,'bxrcgs':null};
  715 + // return {'json':rsjar,'bxrcgs':null};
  716 + // return {'json':baseF.addjcclcbc01(cara,rsjar,dataMap,saa,map),'bxrcgs':null};
662 717 },
663 718  
664   - tzsztest02 : function(cara,tempa,dataMap) {
665   - var jsrs = new Array();
666   - for(var t = 0 ; t < cara.length; t++) {
667   - if(t>3)
668   - continue;
669   - var sslpbcA = new Array();
670   - for(var j =0 ; j <tempa.length; j++) {
671   - // 判断当期遍历的班次是否属于当前的路牌.
672   - if(tempa[j].lpNo == cara[t].lpNo)
673   - sslpbcA.push(tempa[j]);
  719 + /**
  720 + * @description (TODO) 剔除不在上、下行时间范围内的班次.
  721 + * @param jsonArray 初始化路牌下的所有班次并且已经均匀发车间隙的数组集合.
  722 + * @param dataMap 封装的 以上、下行方向成对存在的 一些参数数组 [下标0 -- 代表上行 ; 下标1 -- 代表下行].
  723 + */
  724 + markFirstAndLastBusAlsoDietNotInRangeBc : function(jsonArray , dataMap) {
  725 + // 定义上、下行的正常、区间、空放、直放班次、返回数组集合.
  726 + var listMap = baseF.getUpAndDownBc( jsonArray , dataMap) , resultArray = new Array();
  727 + for(var i = 0 ; i < listMap.length ; i++) {
  728 + if(listMap[i].bc.length > 0){
  729 + // 剔除不在时间范围内的班次
  730 + baseF.dietNotInRangeBc(listMap[i].bc , dataMap.smbcsjArr[i].kssj, dataMap.smbcsjArr[i].jssj);
  731 + // 把班次顺序排序.
  732 + listMap[i].bc.sort(function(a,b){return a.fcint-b.fcint});
  733 + // 确定首末班车时间.
  734 + baseF.markFirstAndLastBusAlso(listMap[i].bc , dataMap , i);
674 735 }
675   - sslpbcA.sort(function(a,b){return a.fcno-b.fcno});
676   - baseF.tztzsjInit02(sslpbcA,dataMap);
677   - jsrs = jsrs.concat(sslpbcA);
  736 + resultArray = resultArray.concat(listMap[i].bc);
678 737 }
679   - return jsrs;
  738 + return resultArray;
680 739 },
681 740  
682   - tztzsjInit02 : function(ar,dataMap) {
683   - var maxXxsjA = [parseInt(dataMap.map.upTravelTime),parseInt(dataMap.map.downTravelTime)];
684   - var v1 = Math.max.apply(null, maxXxsjA) *1.5;
685   - for(var r = 0 ; r< ar.length-1;r++) {
686   - var sgbcfcsj = baseF.getDateTime(ar[r+1].fcsj),dqbcddsj = baseF.getDateTime(ar[r].ARRIVALTIME);
687   - var dxmin = parseInt( (sgbcfcsj - dqbcddsj)/60000);
688   - if(dxmin<0 || ar[r].STOPTIME<0) {
689   - var cctag = baseF.dirDmToIndex(ar[r].xlDir);
690   - dxmin = ar[r].bcType == dataMap.bcTypeArr.cf ? 0 : baseF.isgfsjd01(baseF.getDateTime(ar[r].fcsj),dataMap) ? dataMap.gftzsj[cctag] : dataMap.dgtzsj[cctag];
691   - }else if(dxmin >= v1 && dxmin < 180) {
692   - if(r==ar.length-2 || baseF.issmbcsjArr(ar[r+1].fcsj,dataMap.smbcsjArr)) {
693   - dxmin = dxmin;
694   - }else {
695   - dxmin = v1;
696   - }
  741 + /**
  742 + * @description (TODO) 确定某方向下的首末班车.
  743 + * @param dirArray 某方向下的数组集合.
  744 + * @param dataMap 封装的 以上、下行方向成对存在的 一些参数数组 [下标0 -- 代表上行 ; 下标1 -- 代表下行].
  745 + * @param dir 方向.
  746 + */
  747 + markFirstAndLastBusAlso : function(dirArray , dataMap , dir) {
  748 + if(dirArray.length>=2) {
  749 + // 定义第一个、最后一个班次.
  750 + var dirFirstBc = dirArray[0],dirLastBc = dirArray[dirArray.length-1];
  751 + // 确认首班车时间
  752 + if(dirFirstBc.fcsj != dataMap.smbcsjArr[dir].kssj) {
  753 + // 定义第一个、最后一个班次.
  754 + var dirFirstBc = dirArray[0],dirLastBc = dirArray[dirArray.length-1];
  755 + // 修改第一个班次的发车时间.
  756 + dirFirstBc.fcsj = dataMap.smbcsjArr[dir].kssj;
  757 + // 修改第一个班次的班次时间.
  758 + dirFirstBc.bcsj = dataMap.gfxxsjArr[dir];
  759 + // 定义到达时间.
  760 + var ddsj = baseF.getDateTime(dirFirstBc.fcsj);
  761 + ddsj.setMinutes(ddsj.getMinutes() + dataMap.gfxxsjArr[dir]);
  762 + // 修改第一个班次的到达时间.
  763 + dirFirstBc.ARRIVALTIME = baseF.getTimeStr(ddsj);
  764 + // dirFirstBc.STOPTIME = parseInt( (baseF.getDateTime(dirArray[1].fcsj) - ddsj) / 60000) ;
  765 +
697 766 }
698   - if(ar[r].STOPTIME >0) {
699   - dqbcddsj.setMinutes(dqbcddsj.getMinutes() + dxmin);
700   - ar[r+1].fcsj = baseF.getTimeStr(dqbcddsj);
701   - dqbcddsj.setMinutes(dqbcddsj.getMinutes() + ar[r+1].bcsj);
702   - ar[r+1].ARRIVALTIME = baseF.getTimeStr(dqbcddsj);
703   - ar[r].STOPTIME = dxmin >= 180 ? 0 : parseInt(dxmin);
  767 + // 确认末班车时间
  768 + if(dirLastBc.fcsj != dataMap.smbcsjArr[dir].jssj) {
  769 + // 修改最后一个班次的发车时间.
  770 + dirLastBc.fcsj = dataMap.smbcsjArr[dir].jssj;
  771 + // 修改最后一个班次的班次时间.
  772 + dirLastBc.bcsj = dataMap.dgxxsjArr[dir];
  773 + // 定义到达时间.
  774 + var ddsj_ = baseF.getDateTime(dirLastBc.fcsj);
  775 + // 修改上一个班次的停站时间.
  776 + // dirArray[dirArray.length-2].STOPTIME = parseInt( (ddsj_ - baseF.getDateTime(dirArray[dirArray.length-2].ARRIVALTIME)) / 60000)
  777 + ddsj_.setMinutes(ddsj_.getMinutes() + dataMap.dgxxsjArr[dir]);
  778 + // 修改最后一个班次的到达时间.
  779 + dirLastBc.ARRIVALTIME = baseF.getTimeStr(ddsj_);
704 780 }
705 781 }
706 782 },
707 783  
  784 + /**
  785 + * @description (TODO) 判断是否首末班车.
  786 + */
  787 + issmbcsjArr : function(str,arr) {
  788 + var tag = false;
  789 + for(var a = 0 ;a < arr.length;a++) {
  790 + if(str == arr[a].kssj || str == arr[a].jssj)
  791 + tag = true;
  792 + }
  793 + return tag;
  794 + },
  795 +
  796 + /**
  797 + * @description (TODO) 获取 上、下行的正常、区间、空放、直放班次.
  798 + * @param 需要分割的班次数据集合.
  799 + * @param 封装的 以上、下行方向成对存在的 一些参数数组 [下标0 -- 代表上行 ; 下标1 -- 代表下行].
  800 + */
  801 + getUpAndDownBc : function(json,dataMap) {
  802 + // 定义上行班次 、 下行班次 数组集合、返回数组集合对象.
  803 + var upArray = new Array(),downArray = new Array(),rs = new Array();
  804 + for(var j = 0 ; j< json.length ; j++) {
  805 + // 判断是否为正常、区间、空放、直放班次
  806 + if(json[j].bcType== dataMap.bcTypeArr.normal ||
  807 + json[j].bcType== dataMap.bcTypeArr.region ||
  808 + json[j].bcType== dataMap.bcTypeArr.major ||
  809 + json[j].bcType== dataMap.bcTypeArr.venting) {
  810 + if(json[j].xlDir == dataMap.dira[0])
  811 + upArray.push(json[j]);
  812 + else if(json[j].xlDir == dataMap.dira[1])
  813 + downArray.push(json[j]);
  814 + }
  815 + }
  816 + rs.push({'bc' : upArray},{'bc' : downArray})
  817 + // 返回数据.
  818 + return rs;
  819 + },
  820 +
  821 + /**
  822 + * @desription (TODO) 剔除不在时间范围内的班次.
  823 + * @param ar 某方向下的班次.
  824 + * @param 开始时间.
  825 + * @param 结束时间.
  826 + */
  827 + dietNotInRangeBc : function(ar , kssj , jssj) {
  828 + for(var s = 0 ; s < ar.length ; s++) {
  829 + if(baseF.isDelete(baseF.getDateTime(kssj),
  830 + baseF.getDateTime(jssj),
  831 + baseF.getDateTime(ar[s].fcsj))) {
  832 + ar.splice(s, 1);
  833 + s--;
  834 + }
  835 + }
  836 + },
  837 +
  838 + /**
  839 + * @description (TODO) 把班型人次合理的分配到不同的路牌上.
  840 + * @param list 班型人次数组集合.
  841 + * @param clzs 路牌数组.
  842 + * @return 返回一个把路牌合理的分配到班型人次下组成的数据集合.
  843 + * */
  844 + bxAlloTotLp : function(list,clzs) {
  845 + // 定义 班型人次数组集合长度 、路牌数组长度.
  846 + var lLen = list.length , cLen = clzs.length;
  847 + if(lLen<= 0 || cLen<=0 )
  848 + return false;
  849 + // 最多车次与总车次的比例.
  850 + var blnum = Math.round(cLen/list[0].fpcls);
  851 + // 定义已经分配出去的路牌.
  852 + var rs = new Array();
  853 + // 遍历
  854 + for(var r = 0 ; r < lLen ; r++) {
  855 + // 得到没有分配出去的路牌.
  856 + var dxa = baseF.chaji_array(clzs,rs);
  857 + // 定义当前车次数.
  858 + var rsnum = list[r].fpcls;
  859 + // 定义记录当前分割路牌的次数下标.分配到班型车次下的路牌数组.
  860 + var index = 0 , sslp = new Array();
  861 + // 当前车次所有占比例.
  862 + var tempint = parseInt(rsnum/blnum);
  863 + // 判断如果比例小1 则为当前车次数.
  864 + blnum = tempint <= 1 ? rsnum : blnum;
  865 + // 判断当前班型车次数组下标值.如果为倒数第二个或者之前.
  866 + if(r < lLen-1) {
  867 + // 遍历
  868 + for(var c = 0 ; c < tempint ; c++) {
  869 + // 创建新的没有分配出去的路牌数组.
  870 + var temp = dxa.concat();
  871 + // 创建切割路牌数组.
  872 + var tagA = new Array();
  873 + // 判断切割的下标值是否小于等于路牌数组的倒数第二个或者之前.
  874 + if(index <= (dxa.length-blnum) ) {
  875 + tagA = temp.splice(index,blnum);
  876 + }else {
  877 + tagA = temp.splice((dxa.length-blnum),blnum);
  878 + }
  879 + // 组合切割路牌数组.赋值给已分配出去的路牌.
  880 + rs = rs.concat(tagA);
  881 + // 赋值给分配到班型车次下的路牌数组.
  882 + sslp = sslp.concat(tagA);
  883 + // 记录切割下标.
  884 + index = index + 1 + blnum;
  885 + }
  886 + // 分配到班型车次下的路牌数组.
  887 + list[r].sslp = sslp;
  888 + }else {
  889 + list[r].sslp = dxa;
  890 + }
  891 + }
  892 + },
  893 + /**
  894 + * @description (TODO) [ 切割 班型/人次/配车数 ]参数 并封装成数组集合对象.
  895 + * @param str 切割 班型/人次/配车数 字符串.
  896 + */
  897 + getBxRcListCollection : function(str) {
  898 + // 如果为空 , 直接return
  899 + if(str=='' || str==null)
  900 + return false;
  901 + // 定义返回数组集合.
  902 + var list = new Array();
  903 + // 获取各个班型对应的工时数组.
  904 + var gsgd = baseF.getBcTypeAndWorkHuorsVConstant();
  905 + // 按多号切开.
  906 + var bxrcAr = str.split(',');
  907 + if(bxrcAr.length>0) {
  908 + for(var s = 0 ; s< bxrcAr.length;s++) {
  909 + // 按反斜杠切开.
  910 + var s1a = bxrcAr[s].split('/');
  911 + if(s1a.length >= 4) {
  912 + // 定义人数、配车数、日平均工时.
  913 + var rs = parseInt(s1a[1]),fpcls = parseInt(s1a[2]),gsavg = parseInt(s1a[3]);
  914 + // 定义班型标准小时系数 、 分钟系数.
  915 + var hoursV = 0.0 , minueV = '' ;
  916 + for(var g = 0 ; g < gsgd.length; g++) {
  917 + // 如果班型字符串相同.
  918 + if(gsgd[g].type == s1a[0]) {
  919 + hoursV = gsgd[g].hoursV;
  920 + minueV = gsgd[g].minueV;
  921 + break;
  922 + }
  923 + }
  924 + // 添加到返回数组集合中.
  925 + list.push({'type' : s1a[0] , 'rs' : rs , 'fpcls' : fpcls , 'hoursV' : hoursV ,
  926 + 'minueV' : minueV , 'gsavg' : gsavg});
  927 + }
  928 + }
  929 + }
  930 + // 返回数据.
  931 + return list.sort(function(a,b){return b.rs-a.rs});
  932 + },
708 933  
709 934 /**
710   - * @description : (TODO) 均匀发车间隙
  935 + * @description : (TODO) 纵向调整 均匀发车间隙.
  936 + * @params : bcArr--初始化路牌下的所有班次数组集合.
  937 + * @params : dataMap 封装的 以上、下行方向成对存在的 一些参数数组 [下标0 -- 代表上行 ; 下标1 -- 代表下行].
  938 + * @return : 返回一个数组.这里返回的是调整过后 发车间距均匀的班次数组.
711 939 *
712   - * @params : [arr--某个方向下的班次数组;dir--方向;zzsj--周转时间]
  940 + * ***********************************思路***************************************************
  941 + * 高峰时段发车间隙 : 行业标准,不得超过20分钟.
  942 + * 低谷最大发车间隙 : 以参数设定为准.
  943 + *
  944 + *
  945 + * 第一步 获取某放下的班次数组集合.并按发车时间顺序排序.
  946 + *
  947 + * 第二步 以某方向下的首、末班车时间点作为开始、结束时间点 开始循环. 每一次循环以开始时间点加上不同时间段内的周转时间作为结束点,
  948 + * 来作为一个调整发车间隙过程的时间区间.
  949 + *
  950 + * 均匀发车间隙规则:
  951 + * 算出时间区间内的所有车辆数.
  952 + * 发车间隙 = 该时间段内的周转时间 / 该时间段内的车辆数.
  953 + * 第三步 调整时间区间内的班次[发车时间、行驶时间、到达时间].
  954 + * *****************************************************************************************
713 955 *
714   - * @return : 返回一个数组.这里返回的是调整过后 发车间距均匀的班次数组
715 956 **/
716   - jhfcjx02 : function(bcArr,dataMap) {
  957 + evenStartDepartSpace : function(bcArr,dataMap) {
  958 + // 定义行业标准高峰最大发车间隙、低谷最大发车间隙(包括吃饭时间)
  959 + var gfmaxfcjx = 20 , dgmaxfcjx = dataMap.dgmaxfcjx;
  960 + // 判断班次数组集合长度是否为零.
717 961 if(bcArr.length<=0)
718 962 return;
  963 + // 定义方向数组集合.
719 964 var dirA = dataMap.dira;
  965 + // 定义配车总数(相当于路牌总数).
720 966 var clzs = parseInt(dataMap.map.clzs);
721 967 for(var d = 0 ; d < dirA.length; d++) {
  968 + // 定义方向、该方向下的班次数组集合.
722 969 var fxdm = dirA[d],fxbc = new Array();
  970 + // 方向代码转为下标[0代表上行 ; 1代表下行].
723 971 var cctag = baseF.dirDmToIndex(fxdm);
724 972 for(var b = 0;b<bcArr.length ; b++) {
  973 + // 获取发车时间转为毫秒数.(用于后面按发车时间顺序排序)
725 974 bcArr[b].fcint = baseF.getDateTime(bcArr[b].fcsj).getTime();
  975 + // 如果方向相同则添加到该方向下的班次数组集合中.
726 976 if(bcArr[b].xlDir == fxdm)
727 977 fxbc.push(bcArr[b]);
728 978 }
729   - var kssj = baseF.getDateTime(dataMap.smbcsjArr[cctag].kssj),// 开始时间.
730   - jssj = baseF.getDateTime(dataMap.smbcsjArr[cctag].jssj);// 结束时间.
731   - fxbc.sort(function(m,n){return m.fcint - n.fcint});
732   - while(kssj<=jssj) {
733   - var tagboolean = baseF.isgfsjd01(kssj,dataMap);
734   - var zzsj = tagboolean ? dataMap.zzsj.gfzzsj : dataMap.zzsj.dgzzsj;
735   - if(true){
  979 + // 判断某方向下的班次数组集合的长度是否小于零.
  980 + if(fxbc.length>0) {
  981 + // 按发车时间顺序排序.
  982 + fxbc.sort(function(m,n){return m.fcint - n.fcint});
  983 + // 定义某方向下的开始、结束时间.
  984 + var kssj = baseF.getDateTime(dataMap.smbcsjArr[cctag].kssj),
  985 + jssj = baseF.getDateTime(dataMap.smbcsjArr[cctag].jssj);
  986 + while(kssj<=jssj) {
  987 + // 判断是否高峰时段.
  988 + var tagboolean = baseF.isPeakTimeScope(kssj,dataMap);
  989 + // 定义不同时间段内的周转时间.
  990 + var zzsj = tagboolean ? dataMap.zzsj.gfzzsj : dataMap.zzsj.dgzzsj;
  991 + // 定义时间区间的结束点.
736 992 var temp = new Date();
737 993 temp.setHours(kssj.getHours());
738 994 temp.setMinutes(kssj.getMinutes()+zzsj);
739   - var sjdbcArr = baseF.getObjRegion(kssj,temp,fxbc,dataMap);
740   - var len_ = sjdbcArr.length;
741   - var bcCount = baseF.getlpNum(sjdbcArr);// 定长度
  995 + // 定义该时间区间内的班次数组集合、该数组集合长度.
  996 + var sjdbcArr = baseF.getObjRegion(kssj,temp,fxbc,dataMap),
  997 + len_ = sjdbcArr.length;
  998 + // 定义该时间区间内的车辆数.
  999 + var bcCount = baseF.getlpNum(sjdbcArr);
742 1000 if(len_>0 && bcCount > 0) {
  1001 + // 定义该时间区间内的发车间隙.
743 1002 var _fcjx = parseInt(Math.ceil(zzsj/bcCount));
744   - console.log(_fcjx);
  1003 + if(tagboolean) {
  1004 + if(_fcjx>gfmaxfcjx)
  1005 + _fcjx = 20;
  1006 + }else {
  1007 + if(_fcjx>dgmaxfcjx)
  1008 + _fcjx = dgmaxfcjx;
  1009 + }
  1010 + // console.log(_fcjx);
  1011 + // 定义修改班次的起始时间点.
745 1012 var fcnosj = new Date(kssj);
746 1013 for(var l = 0 ; l< len_ ; l++) {
747   - // 每个路牌的末班车发车时间不准动.
748   - /*if(baseF.iszhclzsbc(fxbc, sjdbcArr[l].fcno , clzs)) {
749   - continue;
750   - }*/
  1014 + // 修改班次发车时间.
751 1015 sjdbcArr[l].fcsj = baseF.getTimeStr(fcnosj);
752   - var _xxsj = baseF.getxssj(dataMap.zgfsjd,
  1016 + sjdbcArr[l].fcint = fcnosj.getTime();
  1017 + // 获取行驶时间.
  1018 + var _xxsj = baseF.getByDirTravelTime(dataMap.zgfsjd,
753 1019 dataMap.wgfsjd,fcnosj,dataMap.pcxssjArr,
754   - dataMap.gfxxsjArr,baseF.dirDmToIndex(sjdbcArr[l].xlDir));// 获取行驶时间
  1020 + dataMap.gfxxsjArr,baseF.dirDmToIndex(sjdbcArr[l].xlDir));
  1021 + // 修改行驶时间.
755 1022 sjdbcArr[l].bcsj = _xxsj;
  1023 + // 定义到达时间.
756 1024 var ddsj = new Date();
757 1025 ddsj.setHours(fcnosj.getHours());
758 1026 ddsj.setMinutes(fcnosj.getMinutes()+_xxsj);
  1027 + // 修改到达时间.
759 1028 sjdbcArr[l].ARRIVALTIME = baseF.getTimeStr(ddsj);
  1029 + // 重新赋值起始时间点.
760 1030 fcnosj.setMinutes(fcnosj.getMinutes() + _fcjx);
761 1031 }
762 1032 }
  1033 + // 重新赋值开始时间点.来作为下一次的开始时间.
  1034 + kssj = new Date(kssj.setMinutes(kssj.getMinutes() + zzsj));
  1035 + }
  1036 + }
  1037 + }
  1038 + },
  1039 +
  1040 + /**
  1041 + * @description (TODO) 横向调整 调整停站时间.
  1042 + * @param cara 路牌数组.
  1043 + * @param tempa 所有的班次数组集合.
  1044 + * @param dataMap 封装的 以上、下行方向成对存在的 一些参数数组 [下标0 -- 代表上行 ; 下标1 -- 代表下行].
  1045 + *
  1046 + * ******************************** 思路 *************************************************
  1047 + * 第一步 等到每个路牌下的班次数组集合.
  1048 + *
  1049 + * 第二步 顺序排序每个路牌下的班次数组集合.
  1050 + *
  1051 + * 第三步 从第二个班次开始,用第二个班次的发车时间 - 上一个班次的到达时间 得到 上一个班次的停站时间.
  1052 + *
  1053 + * 第四步 修改上一个班次的停站时间.
  1054 + *
  1055 + * 修改停站时间规则:以行驶时间的10%-15% 为标准。
  1056 + * 如果超出该范围。则以录入参数低谷最大停站间隙为准。
  1057 + * 停站时间最大不能超过该停站时间。
  1058 + * 高峰附近的班次的停站时间在离高峰最近一个班次的停站时间浮动范围【1-2】分钟。
  1059 + *
  1060 + * ****************************************************************************************
  1061 + */
  1062 + resizeByPitStopTime : function(cara,tempa,dataMap) {
  1063 + var cLen = cara.length,tLen = tempa.length;
  1064 + if(cLen<= 0 || tLen<=0 || dataMap==null)
  1065 + return;
  1066 + // 定义低谷最大停站时间、行业标准最小、最大停站时间(行驶时间的10%~15%).
  1067 + var dgmaxtzsj = dataMap.dgmaxtzsj,normmintzsj, normmaxtzsj;
  1068 + for(var t = 0 ; t < cLen ; t++) {
  1069 + // 定义当前路牌班次数组集合.
  1070 + var sslpbcA = new Array();
  1071 + for(var j =0 ; j < tLen ; j++) {
  1072 + // 判断当期遍历的班次是否属于当前的路牌.如果是则添加到当前的路牌班次数组集合.
  1073 + if(tempa[j].lpNo == cara[t].lpNo)
  1074 + sslpbcA.push(tempa[j]);
  1075 + }
  1076 + if(sslpbcA.length > 0) {
  1077 + // 按发车时间顺序排序.
  1078 + sslpbcA.sort(function(a,b){return a.fcint-b.fcint});
  1079 + // 按照规则修改停站时间.
  1080 + for(var r = 0 ; r < sslpbcA.length-1 ; r++) {
  1081 + // 定义上一个班次的发车时间、当前班次的到达时间、发车时间.
  1082 + var sgbcfcsj = baseF.getDateTime(sslpbcA[r+1].fcsj),
  1083 + dqbcddsj = baseF.getDateTime(sslpbcA[r].ARRIVALTIME),
  1084 + dqbcfcsj = baseF.getDateTime(sslpbcA[r].fcsj);
  1085 + // 定义每每相邻两个班次之间的时间差分钟数(也就是停站时间.)
  1086 + var dxmin = parseInt( (sgbcfcsj - dqbcddsj)/60000);
  1087 + // 定义当前班次方向下标代码[0代表上行;1代表下行].
  1088 + var cctag = baseF.dirDmToIndex(sslpbcA[r].xlDir);
  1089 + // 定义是否高峰
  1090 + var flag = baseF.isPeakTimeScope(dqbcfcsj , dataMap);
  1091 + // 获取行驶时间.
  1092 + var xxsj = baseF.getByDirTravelTime(dataMap.zgfsjd , dataMap.wgfsjd , dqbcfcsj,
  1093 + dataMap.pcxssjArr , dataMap.gfxxsjArr ,
  1094 + baseF.dirDmToIndex(sslpbcA[r].xlDir));
  1095 + normmintzsj = xxsj*0.1;
  1096 + normmaxtzsj = xxsj*0.15;
  1097 + // 如果小于零
  1098 + if(dxmin <= 0 && sslpbcA[r].isfb ==0 ) {
  1099 + // 根据不同时段的停站时间.重新赋值停站时间.
  1100 + dxmin = flag ? dataMap.gftzsj[cctag] : dataMap.dgtzsj[cctag];
  1101 + }else {
  1102 + // 如果 大于等于低谷最大停站时间 并且 小于等于三小时.则把低谷最大停站时间 作为 停站时间.
  1103 + if(dxmin >= dgmaxtzsj && dxmin < 180) {
  1104 + dxmin = dgmaxtzsj;
  1105 + // 如果大于零 并且 小于等于行业标准的最小停站时间
  1106 + }else if(dxmin > 0 && dxmin <= normmintzsj ) {
  1107 + // dxmin = dxmin;
  1108 + // 如果大于行业标准的最小停站时间 并且 小于等于行业标准的最大停站时间
  1109 + }else if(dxmin > normmintzsj && dxmin <= normmaxtzsj ) {
  1110 + // dxmin = dxmin;
  1111 + // 如果大于行业标准的最大停站时间 并且 小于低谷最大停站时间
  1112 + }else if(dxmin > normmaxtzsj && dxmin < dgmaxtzsj ) {
  1113 + // dxmin = dxmin;
  1114 + }
  1115 + }
  1116 + // 修改当前班次的停站时间.
  1117 + sslpbcA[r].STOPTIME = parseInt(dxmin) ;
  1118 + // 当前班次的到达时间 + 停站时间 作为下一个班次的发车时间.
  1119 + dqbcddsj.setMinutes(dqbcddsj.getMinutes() + dxmin);
  1120 + // 修改下一个班次的发车时间.
  1121 + sslpbcA[r+1].fcsj = baseF.getTimeStr(dqbcddsj);
  1122 + // 下一个班次的发车时间 + 行驶时间 作为下一个班次的到达时间.
  1123 + dqbcddsj.setMinutes(dqbcddsj.getMinutes() + sslpbcA[r+1].bcsj);
  1124 + // 修改下一个班次的到达时间.
  1125 + sslpbcA[r+1].ARRIVALTIME = baseF.getTimeStr(dqbcddsj);
763 1126 }
764   - kssj = new Date(kssj.setMinutes(kssj.getMinutes() + zzsj));
765 1127 }
766 1128 }
767 1129 },
... ... @@ -769,7 +1131,7 @@ var BaseFun = function() {
769 1131 BXPplaceClassesTime01 : function(saa,cara,map,seMap,dataMap,lpNoA) {
770 1132 var jsonArray = baseF.plgfbc(saa,cara,map,seMap,dataMap);
771 1133 var list = baseF.splitBxRc(map.bxrc);
772   - baseF.fprclp01(list,cara);
  1134 + baseF.bxAlloTotLp(list,cara);
773 1135 var bxrclist = list.data;
774 1136 var rs = new Array(),bxrcgs= new Array();
775 1137 // 遍历已分配好路牌的班型人次数组.
... ... @@ -804,7 +1166,7 @@ var BaseFun = function() {
804 1166 cara[l].lpName = bxrclist[x].type + '_' + lpNo ;
805 1167 }
806 1168 }
807   - var _obj = baseF.getsxAndxxbc(lpbc,dataMap);
  1169 + var _obj = baseF.getUpAndDownBc(lpbc,dataMap);
808 1170 baseF.tcbc(_obj.sxbc,dataMap.smbcsjArr[0].kssj,dataMap.smbcsjArr[0].jssj);// 剔除上行不在时间范围内的班次
809 1171 baseF.tcbc(_obj.xxbc,dataMap.smbcsjArr[1].kssj,dataMap.smbcsjArr[1].jssj);// 剔除下行不在时间范围内的班次
810 1172 var tcnofwlpbc = _obj.sxbc.concat(_obj.xxbc);
... ... @@ -1137,15 +1499,6 @@ var BaseFun = function() {
1137 1499 obj.ARRIVALTIME = baseF.getTimeStr(zhygbcydx);
1138 1500 },
1139 1501  
1140   - issmbcsjArr : function(str,arr) {
1141   - var tag = false;
1142   - for(var a = 0 ;a < arr.length;a++) {
1143   - if(str == arr[a].kssj || str == arr[a].jssj)
1144   - tag = true;
1145   - }
1146   - return tag;
1147   - },
1148   -
1149 1502 getlpbcA : function(lpN_,jar) {
1150 1503 var lpA = new Array();
1151 1504 for(var p = 0 ; p < jar.length; p++ ) {
... ... @@ -1211,7 +1564,7 @@ var BaseFun = function() {
1211 1564 var dxmin = parseInt( (sgbcfcsj - dqbcddsj)/60000);
1212 1565 if(dxmin<0 || ar[r].STOPTIME<0) {
1213 1566 var cctag = baseF.dirDmToIndex(ar[r].xlDir);
1214   - dxmin = ar[r].bcType == dataMap.bcTypeArr.cf ? 0 : baseF.isgfsjd01(baseF.getDateTime(ar[r].fcsj),dataMap) ? dataMap.gftzsj[cctag] : dataMap.dgtzsj[cctag];
  1567 + dxmin = ar[r].bcType == dataMap.bcTypeArr.cf ? 0 : baseF.isPeakTimeScope(baseF.getDateTime(ar[r].fcsj),dataMap) ? dataMap.gftzsj[cctag] : dataMap.dgtzsj[cctag];
1215 1568 /*dqbcddsj.setMinutes(dqbcddsj.getMinutes() + dxmin);
1216 1569 ar[r+1].fcsj = baseF.getTimeStr(dqbcddsj);
1217 1570 dqbcddsj.setMinutes(dqbcddsj.getMinutes() + ar[r+1].bcsj);
... ... @@ -1261,7 +1614,7 @@ var BaseFun = function() {
1261 1614 jssj = baseF.getDateTime(dataMap.smbcsjArr[cctag].jssj);// 结束时间.
1262 1615 fxbc.sort(function(m,n){return m.fcint - n.fcint});
1263 1616 while(kssj<=jssj) {
1264   - var tagboolean = baseF.isgfsjd01(kssj,dataMap);
  1617 + var tagboolean = baseF.isPeakTimeScope(kssj,dataMap);
1265 1618 var zzsj = tagboolean ? dataMap.zzsj.gfzzsj : dataMap.zzsj.dgzzsj;
1266 1619 if(!tagboolean){
1267 1620 var temp = new Date();
... ... @@ -1280,7 +1633,7 @@ var BaseFun = function() {
1280 1633 continue;
1281 1634 }
1282 1635 sjdbcArr[l].fcsj = baseF.getTimeStr(fcnosj);
1283   - var _xxsj = baseF.getxssj(dataMap.zgfsjd,
  1636 + var _xxsj = baseF.getByDirTravelTime(dataMap.zgfsjd,
1284 1637 dataMap.wgfsjd,fcnosj,dataMap.pcxssjArr,
1285 1638 dataMap.gfxxsjArr,baseF.dirDmToIndex(sjdbcArr[l].xlDir));// 获取行驶时间
1286 1639 sjdbcArr[l].bcsj = _xxsj;
... ... @@ -1462,8 +1815,8 @@ var BaseFun = function() {
1462 1815 kssj.setMinutes(parseInt(strArray[1]) + lastObj.STOPTIME);
1463 1816 var cctag = baseF.dirDmToIndex(lastObj.xlDir);
1464 1817 cctag = baseF.getfx(1,cctag);
1465   - var tzsj = baseF.isgfsjd01(kssj,dataMap) ? dataMap.gftzsj[cctag] : dataMap.dgtzsj[cctag];
1466   - var _xxsj = baseF.getxssj(dataMap.zgfsjd,dataMap.wgfsjd,kssj,dataMap.pcxssjArr,dataMap.gfxxsjArr,cctag);// 获取行驶时间
  1818 + var tzsj = baseF.isPeakTimeScope(kssj,dataMap) ? dataMap.gftzsj[cctag] : dataMap.dgtzsj[cctag];
  1819 + var _xxsj = baseF.getByDirTravelTime(dataMap.zgfsjd,dataMap.wgfsjd,kssj,dataMap.pcxssjArr,dataMap.gfxxsjArr,cctag);// 获取行驶时间
1467 1820 // 定义班次序号
1468 1821 var xhNo = lastObj.fcno+1;
1469 1822 var carArray = {'lp':lastObj.lp,'lpNo':lastObj.lpNo,'lpName':lastObj.lpName,'lpType':lastObj.lpType};
... ... @@ -1514,64 +1867,6 @@ var BaseFun = function() {
1514 1867 },
1515 1868  
1516 1869 /**
1517   - * @description (TODO) 把班型人次合理的分配到不同的路牌上.
1518   - *
1519   - * @param [bxgs--班型人次数组长度;list--班型人次数组集合;clzs--路牌数组]
1520   - *
1521   - * @return 返回一个把路牌合理的分配到班型人次下组成的数据集合.
1522   - * */
1523   - fprclp01 : function(list,clzs) {
1524   - var bxgs = list.data.length;
1525   - // 定义总车数.
1526   - var dxcount = clzs.length;
1527   - /*for(var t = 1 ; t<bxgs ; t++) {
1528   - dxcount = dxcount + list.data[t].rs;
1529   - }*/
1530   - // 最多车次与总车次的比例.
1531   - var blnum = Math.round(dxcount/list.data[0].fpcls);
1532   - var rs = new Array();
1533   - // 遍历
1534   - for(var r = 0 ; r<bxgs ;r++) {
1535   - // 得到没有分配出去的路牌.
1536   - var dxa = baseF.chaji_array(clzs,rs);
1537   - // 定义当前车次数.
1538   - var rsnum = list.data[r].fpcls;
1539   - // 定义记录当前分割路牌的次数下标.分配到班型车次下的路牌数组.
1540   - var index = 0,sslp = new Array();
1541   - // 当前车次所有占比例.
1542   - var tempint = parseInt(rsnum/blnum);
1543   - // 判断如果比例小1 则为当前车次数.
1544   - blnum = tempint <=1 ? rsnum : blnum;
1545   - // 判断当前班型车次数组下标值.如果为倒数第二个或者之前
1546   - if(r<bxgs-1) {
1547   - // 遍历
1548   - for(var c = 0 ; c<tempint;c++) {
1549   - // 创建新的没有分配出去的路牌数组.
1550   - var temp = dxa.concat();
1551   - // 创建切割路牌数组.
1552   - var tagA = new Array();
1553   - // 判断切割的下标值是否小于等于路牌数组的倒数第二个或者之前.
1554   - if(index<=dxa.length-blnum) {
1555   - tagA = temp.splice(index,blnum);
1556   - }else {
1557   - tagA = temp.splice(dxa.length-blnum,blnum);
1558   - }
1559   - // 组合切割路牌数组.赋值给已分配出去的路牌.
1560   - rs = rs.concat(tagA);
1561   - // 赋值给分配到班型车次下的路牌数组.
1562   - sslp = sslp.concat(tagA);
1563   - // 记录切割下标.
1564   - index = index + 1 + blnum;
1565   - }
1566   - // 分配到班型车次下的路牌数组.
1567   - list.data[r].sslp = sslp;
1568   - }else {
1569   - list.data[r].sslp = dxa;
1570   - }
1571   - }
1572   - },
1573   -
1574   - /**
1575 1870 * @description : (TODO) 根据班型人次与车辆总数排列班次时刻数据.
1576 1871 *
1577 1872 * @param [saa--数据配置参数;cara--路牌数组;map--表单配置参数;dataMap--方向成对的数据集合].
... ... @@ -2045,7 +2340,7 @@ var BaseFun = function() {
2045 2340 *
2046 2341 * ******************************** 思路 *********************************************************
2047 2342 *
2048   - * 首先,以早高峰开始时间作为开始点 , 并且作为最后一个路牌的第一个班次的发车时间展开。
  2343 + * 首先,以早高峰开始时间作为开始点,并且作为最后一个路牌的第一个班次的发车时间展开。(这里的原因是所有的车必须在早高峰开始点全部出车.)
2049 2344 *
2050 2345 * 纵向展开:
2051 2346 * 以最后一个路牌的第一个班次发车时间为开始点,以阶梯形式向上展开.
... ... @@ -2059,6 +2354,7 @@ var BaseFun = function() {
2059 2354 * 倒数第二个路牌的第一个班次的发车时间为 6:39 = 6:31 + 某周转时间段内的发车间隙为:8
2060 2355 * 倒数第三个路牌的第一个班次的发车时间为 6:47 = 6:39 + 某周转时间段内的发车间隙为:8
2061 2356 * 倒数第四个....
  2357 + * ............
2062 2358 * 以此类推.
2063 2359 *
2064 2360 * 横向展开:
... ... @@ -2080,8 +2376,9 @@ var BaseFun = function() {
2080 2376 * 第四个班次
2081 2377 * 第五个班次
2082 2378 * ........
  2379 + * 以此类推.
2083 2380 */
2084   - plgfbc01 : function(saa , cara , map, seMap , dataMap) {
  2381 + GetByArgusInitAllLpDownedBcCollections : function(saa , cara , map, seMap , dataMap) {
2085 2382 // 定义路牌长度 、所有路牌默认出场方向 [0--上行出场;1--下行出场] 、营运结束时间、返回数组.
2086 2383 var len = cara.length , cctag , endTime = baseF.getDateTime(seMap.e) , rs = new Array();
2087 2384 // 获取所有路牌默认出场方向.如果是环线则只有一个上行方向.
... ... @@ -2098,12 +2395,12 @@ var BaseFun = function() {
2098 2395 // 开启方向切换.
2099 2396 fxflag = 1;
2100 2397 // 定义在某时间段内[高峰时间段、低谷时间段]的停站时间.
2101   - var tzsj = baseF.isgfsjd01(kssj,dataMap) ? dataMap.gftzsj[fxTagDm] : dataMap.dgtzsj[fxTagDm];
  2398 + var tzsj = baseF.isPeakTimeScope(kssj,dataMap) ? dataMap.gftzsj[fxTagDm] : dataMap.dgtzsj[fxTagDm];
2102 2399 // 定义在某时间段内的行驶时间.
2103   - var _xxsj = baseF.getxssj(dataMap.zgfsjd,dataMap.wgfsjd,kssj,dataMap.pcxssjArr,dataMap.gfxxsjArr,fxTagDm);
  2400 + var _xxsj = baseF.getByDirTravelTime(dataMap.zgfsjd,dataMap.wgfsjd,kssj,dataMap.pcxssjArr,dataMap.gfxxsjArr,fxTagDm);
2104 2401 // 定义当前班次的停站时间,这里是为了当计算到了最后一个班次的时候,那么停站时间为0 ,但是后续的班次的发车时间需要加上前一个班次的停站时间.
2105 2402 var xs_tzsj = baseF.isLastbc(kssj,endTime,tzsj,_xxsj) ? 0 : tzsj;
2106   - // 添加正常班次对象.
  2403 + // 添加正常班次对象.(这里初始化时,都是正常班次类型.)
2107 2404 rs.push(baseF.getbcObj(kssj , _xxsj , cara[c] ,
2108 2405 dataMap.bcTypeArr.normal,
2109 2406 dataMap.dira[fxTagDm] , xhNo++,
... ... @@ -2114,6 +2411,7 @@ var BaseFun = function() {
2114 2411 kssj = new Date(kssj.setMinutes(kssj.getMinutes() + tzsj));
2115 2412 }
2116 2413 }
  2414 + // 返回结果集.
2117 2415 return rs;
2118 2416 },
2119 2417  
... ... @@ -2148,9 +2446,9 @@ var BaseFun = function() {
2148 2446 kssj,dataMap.zwcArr[1],cara[c],dataMap.bcTypeArr.cf,
2149 2447 dataMap.dira[cctag],xhNo++,0,map,0,null,null,null,0,0));// 晚餐班次
2150 2448 }*/
2151   - var tzsj = baseF.isgfsjd01(kssj,dataMap) ? dataMap.gftzsj[cctag] : dataMap.dgtzsj[cctag];
  2449 + var tzsj = baseF.isPeakTimeScope(kssj,dataMap) ? dataMap.gftzsj[cctag] : dataMap.dgtzsj[cctag];
2152 2450 // var tzsj = dataMap.ztjxA[cctag];
2153   - var _xxsj = baseF.getxssj(dataMap.zgfsjd,dataMap.wgfsjd,kssj,dataMap.pcxssjArr,dataMap.gfxxsjArr,cctag);// 获取行驶时间
  2451 + var _xxsj = baseF.getByDirTravelTime(dataMap.zgfsjd,dataMap.wgfsjd,kssj,dataMap.pcxssjArr,dataMap.gfxxsjArr,cctag);// 获取行驶时间
2154 2452 var xs_tzsj = baseF.isLastbc(kssj,endTime,tzsj,_xxsj) ? 0 : tzsj;
2155 2453 rs.push(baseF.getbcObj(
2156 2454 kssj,_xxsj,cara[c],dataMap.bcTypeArr.normal,
... ... @@ -2162,7 +2460,7 @@ var BaseFun = function() {
2162 2460 return rs;
2163 2461 },
2164 2462  
2165   - isgfsjd01 : function(kssj,dataMap) {
  2463 + isPeakTimeScope : function(kssj,dataMap) {
2166 2464 var tag = false;
2167 2465 if((dataMap.zgfsjd[0].st <= kssj && kssj<= dataMap.zgfsjd[0].ed ) ||
2168 2466 ( dataMap.wgfsjd[0].st <= kssj && kssj <= dataMap.wgfsjd[0].ed))
... ... @@ -2205,38 +2503,9 @@ var BaseFun = function() {
2205 2503 }
2206 2504 return result;
2207 2505 },
2208   -
2209   - splitBxRc02 : function(str) {
2210   - var list = new Array(),rsa = new Array();
2211   - var gsgd = baseF.getBxLs();
2212   - var bxrcAr = str.split(',');
2213   - for(var s = 0 ; s< bxrcAr.length;s++) {
2214   - var s1a = bxrcAr[s].split('/');
2215   - var rs = parseInt(s1a[1]);
2216   - var fpcls = parseInt(s1a[2]);
2217   - var gsavg = parseInt(s1a[3]);
2218   - var gsgdIndex = 0,hoursV = 0.0,minueV='' ;
2219   - for(var g = 0 ; g < gsgd.length; g++) {
2220   - if(gsgd[g].type == s1a[0]) {
2221   - gsgdIndex = g;
2222   - hoursV = gsgd[g].hoursV;
2223   - minueV = gsgd[g].minueV;
2224   - }
2225   - }
2226   - list.push({'type':s1a[0],
2227   - 'rs':rs,
2228   - 'fpcls':fpcls,
2229   - 'hoursV':hoursV,
2230   - 'minueV':minueV,
2231   - 'gsavg' : gsavg});
2232   - rsa.push(rs);
2233   - }
2234   - return {'data':list.sort(function(a,b){return b.rs-a.rs}),'rsa':rsa.sort().reverse()};
2235   - },
2236   -
2237 2506 splitBxRc : function(str) {
2238 2507 var list = new Array(),rsa = new Array();;
2239   - var gsgd = baseF.getBxLs();
  2508 + var gsgd = baseF.getBcTypeAndWorkHuorsVConstant();
2240 2509 var bxrcAr = str.split(',');
2241 2510 for(var s = 0 ; s< bxrcAr.length;s++) {
2242 2511 var s1a = bxrcAr[s].split('/');
... ... @@ -2265,7 +2534,7 @@ var BaseFun = function() {
2265 2534 *
2266 2535 * @return 返回一个工时规定数组集合.
2267 2536 * */
2268   - getBxLs : function() {
  2537 + getBcTypeAndWorkHuorsVConstant : function() {
2269 2538 return [{'type':'六工一休','hoursV':6.66, 'minueV':'6:40'},
2270 2539 {'type':'五工一休','hoursV':6.85, 'minueV':'6:51'},
2271 2540 {'type':'四工一休','hoursV':7.14, 'minueV':'7:08'},
... ... @@ -2318,7 +2587,7 @@ var BaseFun = function() {
2318 2587 * @return : 返回一个数组对象。这里返回的是时刻表明细数据
2319 2588 **/
2320 2589 tzsmbcsj : function(list,smbcsj,sj,cl,zd,lbsj) {
2321   - var _obj = baseF.getsxAndxxbc(list);
  2590 + var _obj = baseF.getUpAndDownBc(list);
2322 2591 baseF.tcbc(_obj.sxbc,smbcsj[0].kssj,smbcsj[0].jssj);// 剔除上行不在时间范围内的班次
2323 2592 baseF.tcbc(_obj.xxbc,smbcsj[1].kssj,smbcsj[1].jssj);// 剔除下行不在时间范围内的班次
2324 2593 baseF.dzsmsj(_obj.xxbc,smbcsj[1].kssj,smbcsj[1].jssj,_obj.sxbc);// 调整下行首末班车时间
... ... @@ -2335,7 +2604,7 @@ var BaseFun = function() {
2335 2604 * @return : 返回一个数组对象。这里返回的是时刻表明细数据
2336 2605 **/
2337 2606 tzsmbcsj01 : function(list,smbcsj,sj,cl,zd,lbsj,dm) {
2338   - var _obj = baseF.getsxAndxxbc(list,dm);
  2607 + var _obj = baseF.getUpAndDownBc(list,dm);
2339 2608 baseF.tcbc(_obj.sxbc,smbcsj[0].kssj,smbcsj[0].jssj ,_obj.xxbc);// 剔除上行不在时间范围内的班次
2340 2609 baseF.tcbc(_obj.xxbc,smbcsj[1].kssj,smbcsj[1].jssj,_obj.sxbc);// 剔除下行不在时间范围内的班次
2341 2610 if(smbcsj[1].jssj < smbcsj[0].jssj ) {
... ... @@ -2493,23 +2762,6 @@ var BaseFun = function() {
2493 2762 return tag;
2494 2763 },
2495 2764  
2496   - getsxAndxxbc : function(json,dataMap) {
2497   - var upArray = new Array(),downArray = new Array(),qt = new Array();
2498   - for(var j = 0 ; j< json.length ; j++) {
2499   - if(json[j].bcType== dataMap.bcTypeArr.normal ||
2500   - json[j].bcType== dataMap.bcTypeArr.region ||
2501   - json[j].bcType== dataMap.bcTypeArr.major ||
2502   - json[j].bcType== dataMap.bcTypeArr.venting) {
2503   - if(json[j].xlDir == dataMap.dira[0])
2504   - upArray.push(json[j]);
2505   - else if(json[j].xlDir == dataMap.dira[1])
2506   - downArray.push(json[j]);
2507   - }else if(json[j].bcType == dataMap.bcTypeArr.cf) {
2508   - qt.push(json[j]);
2509   - }
2510   - }
2511   - return {'sxbc' : upArray,'xxbc' : downArray,'qt': qt};
2512   - },
2513 2765 /**
2514 2766 * @description : (TODO) 在同一块路牌下,根据发车序号进行顺序排序
2515 2767 *
... ... @@ -2541,13 +2793,13 @@ var BaseFun = function() {
2541 2793 var ags = {'tcc_id':lastObj.tcc,'skbName':lastObj.ttinfo,'lineName':lastObj.xl+'_'};
2542 2794 for(var t = 0 ; t<num;t++){
2543 2795 cctag = obj.configuration.dataMap.map.linePlayType=='1'? 0: baseF.getfx(1,cctag);
2544   - var _xxsj = baseF.getxssj(obj.configuration.dataMap.zgfsjd,
  2796 + var _xxsj = baseF.getByDirTravelTime(obj.configuration.dataMap.zgfsjd,
2545 2797 obj.configuration.dataMap.wgfsjd,
2546 2798 kssj,
2547 2799 obj.configuration.dataMap.pcxssjArr,
2548 2800 obj.configuration.dataMap.gfxxsjArr,cctag);// 获取行驶时间
2549 2801 // tzsj = obj.configuration.dataMap.ztjxA[cctag];
2550   - var tzjx = baseF.isgfsjd01(kssj,obj.configuration.dataMap) ? obj.configuration.dataMap.gftzsj[cctag] : obj.configuration.dataMap.dgtzsj[cctag];
  2802 + var tzjx = baseF.isPeakTimeScope(kssj,obj.configuration.dataMap) ? obj.configuration.dataMap.gftzsj[cctag] : obj.configuration.dataMap.dgtzsj[cctag];
2551 2803 var temptzsj = ((t == num-1) ? 0 : tzsj);
2552 2804 /*var xs_tzsj = baseF.isLastbc(kssj,endTime,tzsj,_xxsj) ? 0 : tzsj;*/
2553 2805 jsonArray.push(baseF.getbcObj( kssj,
... ... @@ -2643,7 +2895,7 @@ var BaseFun = function() {
2643 2895 for(var i = 0 ; i<numqs;i++) {
2644 2896 cctag = obj.configuration.dataMap.map.linePlayType=='1' ? 0 : bf.getfx(fxTagDm,cctag);
2645 2897 fxTagDm = 1;
2646   - var _xxsj = bf.getxssj(obj.configuration.dataMap.zgfsjd,
  2898 + var _xxsj = bf.getByDirTravelTime(obj.configuration.dataMap.zgfsjd,
2647 2899 obj.configuration.dataMap.wgfsjd,kssj,
2648 2900 obj.configuration.dataMap.pcxssjArr,
2649 2901 obj.configuration.dataMap.gfxxsjArr,cctag);// 获取行驶时间
... ... @@ -2743,7 +2995,7 @@ var BaseFun = function() {
2743 2995 /*if(parseInt((baseF.getDateTime(bcArr[l+1].fcsj) - baseF.getDateTime(bcArr[l].fcsj))/60000) ==_fcjx)
2744 2996 continue;*/
2745 2997 bcArr[l].fcsj = baseF.getTimeStr(fcnosj);
2746   - var _xxsj = baseF.getxssj(dataMap.zgfsjd,
  2998 + var _xxsj = baseF.getByDirTravelTime(dataMap.zgfsjd,
2747 2999 dataMap.wgfsjd,fcnosj,dataMap.pcxssjArr,
2748 3000 dataMap.gfxxsjArr,baseF.dirDmToIndex(bcArr[l].xlDir));// 获取行驶时间
2749 3001 bcArr[l].bcsj = _xxsj;
... ... @@ -2762,7 +3014,7 @@ var BaseFun = function() {
2762 3014 ddsj.setHours(fcsj.getHours());
2763 3015 ddsj.setMinutes(fcsj.getMinutes()+_fcjx);
2764 3016 sjdbcArr[l].fcsj = baseF.getTimeStr(ddsj);
2765   - var _xxsj = baseF.getxssj(dataMap.zgfsjd,
  3017 + var _xxsj = baseF.getByDirTravelTime(dataMap.zgfsjd,
2766 3018 dataMap.wgfsjd,ddsj,dataMap.pcxssjArr,
2767 3019 dataMap.gfxxsjArr,baseF.dirDmToIndex(sjdbcArr[l].xlDir));// 获取行驶时间
2768 3020 sjdbcArr[l].bcsj = _xxsj;
... ... @@ -2835,7 +3087,7 @@ var BaseFun = function() {
2835 3087 xgbc.fcsj = baseF.getTimeStr(dqbcddsj);// 修改下个班次的发车时间.
2836 3088 var _xxsj = xgbc.bcsj;
2837 3089 /*if(!tagb && type=='cf') {
2838   - _xxsj = baseF.getxssj(dataMap.zgfsjd,
  3090 + _xxsj = baseF.getByDirTravelTime(dataMap.zgfsjd,
2839 3091 dataMap.wgfsjd,dqbcddsj,dataMap.pcxssjArr,
2840 3092 dataMap.gfxxsjArr,baseF.dirDmToIndex(xgbc.xlDir));// 获取行驶时间
2841 3093 }*/
... ... @@ -2986,7 +3238,7 @@ var BaseFun = function() {
2986 3238 var cf = 0;
2987 3239 while(d1<d2) {
2988 3240 dir = baseF.getfx(1,dir);
2989   - var dx = baseF.getxssj(zg,wa,d1,pc,gf,dir) + ztjxA[dir];
  3241 + var dx = baseF.getByDirTravelTime(zg,wa,d1,pc,gf,dir) + ztjxA[dir];
2990 3242 if(d1> new Date (baseF.getCFDate(10,30)) &&
2991 3243 d1<new Date (baseF.getCFDate(12,0)) && cf <=0) {
2992 3244 dx = dx + 20;
... ...
src/main/resources/static/pages/base/timesmodel/js/gantt.js
... ... @@ -65,7 +65,7 @@
65 65 // 采用班型人次数据获取渲染时刻表明细图形的配置参数数据.
66 66 // data = BaseFun.BXPplaceClassesTime(stopAraay,CSMap.maxCar,map,seMap,dataMap,getylp(CSMap.maxCar).lpNoA);
67 67 // data = BaseFun.BXPplaceClassesTime01(stopAraay,CSMap.maxCar,map,seMap,dataMap,getylp(CSMap.maxCar).lpNoA);
68   - data = BaseFun.BXPplaceClassesTime02(stopAraay,CSMap.maxCar,map,seMap,dataMap,getylp(CSMap.maxCar).lpNoA);
  68 + data = BaseFun.BXPplaceClassesTime02(stopAraay,CSMap.maxCar,map,seMap,dataMap);
69 69 }
70 70  
71 71 }else {
... ...