Commit 218b434449d84e01017f05e954ca580380bf3485

Authored by 李强
1 parent 1de6f89b

bsthlq <2519941818@qq.com>

src/main/resources/static/pages/base/timesmodel/js/base-fun.js
... ... @@ -382,13 +382,14 @@ var BaseFun = function() {
382 382 *
383 383 *
384 384 **/
385   - abstractBcByWorkTime : function(bxlpbc , map , dataMap , saa , cara , bxrcObj , dgminpcs ,deletebcNum) {
  385 + abstractBcByWorkTime : function(bxlpbc , map , dataMap , saa , cara , bxrcObj , dgminpcs ,deletebcNum ,zwxeLpNum) {
386 386 var rsultA = new Array() , dgzjsj = baseF.getDateTime('13:00');
387 387 // 定义13:00 ~ 晚高峰开始以前剔除规则. 如果剔除的班次数不够,则去晚高峰之后剔除剩下的班次.
388 388 var xwmaxtcbcNum = parseInt(( dataMap.wgfsjd[0].st - dgzjsj) / (60000 * saa[0].zzsj.dgzzsj));
389 389 // 定义早高峰结束 ~ 13:00 剔除规则.如果剔除的班次数不够,则去晚高峰之后剔除剩下的班次.
390 390 var swmaxtcbcNum = parseInt(( dgzjsj - dataMap.zgfsjd[0].ed) / (60000 * saa[0].zzsj.dgzzsj));
391 391 var sumGs = 0;
  392 + dgminpcs = zwxeLpNum==0 ? bxlpbc.length : dgminpcs;
392 393 for(var a = 0 ; a < bxlpbc.length ; a++) {
393 394 // 定义该版型下对应的路牌的班次数组、班次数组长度、该路牌上是否有首末班车。
394 395 var lpbc = bxlpbc[a].lpbc, lpbclen_ = lpbc.length;
... ... @@ -396,6 +397,7 @@ var BaseFun = function() {
396 397 continue;
397 398 var isFlag = baseF.lpDownIsHaveFirstAndLastBc(lpbc , dataMap.smbcsjArr) , tcbcgzA = new Array();
398 399 if(bxrcObj.type == '五工二休') {
  400 + // continue;
399 401 // 定义晚高峰后能剔除多少班次数.
400 402 var wgfhtcbcNum = parseInt(( dataMap.wgfzhsjd[0].ed - dataMap.wgfsjd[0].ed ) / (60000 * saa[0].zzsj.dgzzsj));
401 403 if(isFlag) {
... ... @@ -409,11 +411,12 @@ var BaseFun = function() {
409 411 // 剔除不在高峰时间段内的班次.
410 412 baseF.spliceBc02(lpbc , tcbcgzA , dataMap , 'desc' , false);
411 413 }else {
  414 + //continue;
412 415 // 单档 一个路牌一档劳动力
413 416 if(bxlpbc[a].keepOff==1) {
414 417 // 如果低谷至少配车数大于零,则该班型下的路牌 存在一些 分班路牌,这里的分班 指的是 这个路牌先满足的前提条件就是 是单档。
415   - // 为了满足工时的要求,在低谷断开一段时间.
416   - if(dgminpcs > 0) {
  418 + // 为了满足工时的要求,在低谷断开一段时间.a <= dgminpcs
  419 + if(a <= dgminpcs) {
417 420 if( a % 2 == 0) {
418 421 if(deletebcNum < swmaxtcbcNum || isFlag) {
419 422 tcbcgzA.push({'minsj': dataMap.zgfsjd[0].ed , 'maxsj' : dgzjsj , 'order' : 'asc' , 'deletebcNum' : deletebcNum});
... ... @@ -433,10 +436,10 @@ var BaseFun = function() {
433 436 baseF.spliceBc02(lpbc , tcbcgzA , dataMap , true);
434 437 baseF.affimBzGs(lpbc , bxlpbc[a].bzgs, dataMap, saa , true , a);
435 438 // 该班型下的路牌 不存在分班路牌.
436   - }else if(dgminpcs == 0){
  439 + }else {
437 440 // 按规则剔除班次.不分班.路牌班次不会断开.
438 441 baseF.isdk02(lpbc , dataMap , saa , deletebcNum , false);
439   - //baseF.affimBzGs(lpbc , bxlpbc[a].bzgs, dataMap, saa , false , a);
  442 + baseF.affimBzGs(lpbc , bxlpbc[a].bzgs, dataMap, saa , false , a);
440 443 }
441 444 // 双档 一个路牌两档劳动力
442 445 }else if(bxlpbc[a].keepOff==2) {
... ... @@ -607,8 +610,10 @@ var BaseFun = function() {
607 610 // 判断是否在高峰时间范围.【true--表示在,false--表示不在】.
608 611 if(!baseF.isPeakTimeScope(fcsj,dataMap) && fcsj > tcbcgzA[t].minsj && fcsj < tcbcgzA[t].maxsj) {
609 612 if(order == 'asc') {
610   - arr[a-1].isfb = isfb ? 1 : 0;
611   - arr[a-1].STOPTIME = 0;
  613 + if(a>0) {
  614 + arr[a-1].isfb = isfb ? 1 : 0;
  615 + arr[a-1].STOPTIME = 0;
  616 + }
612 617 }else if(order == 'desc') {
613 618 var index_ = a + tcbcgzA[t].deletebcNum * 2;
614 619 arr[index_].STOPTIME = 0;
... ... @@ -637,6 +642,7 @@ var BaseFun = function() {
637 642 dgmaxtzsj = parseInt(map.dgmaxtzsj);
638 643 // 计算低谷最少配车数 (低谷上行行驶时间 + 低谷下行行驶时间 + 低谷最大停站时间*2) / 低谷最大发车间隙.
639 644 var dgminpcs = Math.round((dataMap.dgxxsjArr[0] + dataMap.dgxxsjArr[1] + dataMap.dgtzsj[0] + dataMap.dgtzsj[1]) / dgmaxfcjx);
  645 + var zwxeLpNum = baseF.cuontZwxeLpNum(bxrclist);
640 646 // var dgminpcs = 4;
641 647 // 定义返回数组.
642 648 var rs = new Array();
... ... @@ -711,12 +717,23 @@ var BaseFun = function() {
711 717 avgMakerCarNum = parseInt(avgMakerCarNum / bxlpbc.length);
712 718 // console.log(bxlpbc);
713 719 // 调整某班型下的各个路牌对应的班次以及工时、停站时间、是否分班.
714   - rs = rs.concat(baseF.abstractBcByWorkTime(bxlpbc , map , dataMap , saa , cara , bxrclist[x] , dgminpcs , avgMakerCarNum));
  720 + rs = rs.concat(baseF.abstractBcByWorkTime(bxlpbc , map , dataMap , saa , cara , bxrclist[x] , dgminpcs , avgMakerCarNum ,zwxeLpNum));
715 721 }
716 722 }
717 723 return rs;
718 724 },
719 725  
  726 + cuontZwxeLpNum : function(list) {
  727 + var count = 0;
  728 + for(var c = 0 ; c<list.length;c++) {
  729 + if(list[c].type == '五工二休') {
  730 + count = list[c].fpcls;
  731 + break;
  732 + }
  733 + }
  734 + return count;
  735 + },
  736 +
720 737 /**
721 738 * @description (TODO) 更新路牌数组的路牌名称.
722 739 * @param cara 路牌数组
... ... @@ -778,17 +795,15 @@ var BaseFun = function() {
778 795 // 第一步 根据表单中的参数得到所有路牌下的班次数[从各路牌下的第一个班次发车时间 到 营运结束时间点并且是连续的班次数].
779 796 var allLMapBc = baseF.GetByArgusInitAllLpDownedBcCollections(saa , cara , map , seMap , dataMap);
780 797  
781   - // return {'json':jsonArray,'bxrcgs':null};
782   -
783 798 // 第二步 纵向调整
784 799 baseF.evenStartDepartSpace(allLMapBc , dataMap);
785 800  
786 801 // 第三步 剔除首末班车以外的班次,并确认首末班车.
787 802 var markArray = baseF.markFirstAndLastBusAlsoDietNotInRangeBc(allLMapBc , dataMap);
788   -
  803 + // return {'json':markArray,'bxrcgs':null};
789 804 // 第四步 横向调整
790 805 baseF.resizeByPitStopTime(cara , markArray , dataMap);
791   -
  806 + // return {'json':markArray,'bxrcgs':null};
792 807 /**
793 808 * 第五步 把班型合理的分配到各个路牌上.
794 809 *
... ... @@ -798,17 +813,13 @@ var BaseFun = function() {
798 813 */
799 814 // 切割班型/人次/配车数 字符串 为 数组对象.
800 815 var list = baseF.getBxRcListCollection(map.bxrc);
801   -
802 816 // 把班型分配到对应的具体路牌上.
803 817 baseF.bxAlloTotLp(list,cara);
804   -
805 818 // 第六步 抽车来满足工时.
806 819 var tempA = baseF.abstractCar(list , markArray , cara , saa , dataMap , map);
807   -
  820 + // return {'json':tempA,'bxrcgs':null};
808 821 // 第七步 确定吃饭时间.
809 822 baseF.markeEatTime(list , tempA , cara , saa , dataMap ,map);
810   -
811   -
812 823 baseF.resizeByPitStopTime(cara , tempA , dataMap);
813 824 baseF.updfcno01(tempA,0);
814 825 // return {'json':tempA,'bxrcgs':null};
... ... @@ -1064,12 +1075,13 @@ var BaseFun = function() {
1064 1075 var lLen = list.length , cLen = clzs.length;
1065 1076 if(lLen<= 0 || cLen<=0 )
1066 1077 return false;
1067   - // 最多车次与总车次的比例.
1068   - var blnum = Math.round(cLen/list[0].fpcls);
  1078 + list.sort(function(a,b){return a.fpcls-b.fpcls});
1069 1079 // 定义已经分配出去的路牌.
1070 1080 var rs = new Array();
1071 1081 // 遍历
1072 1082 for(var r = 0 ; r < lLen ; r++) {
  1083 + // 车次与总车次的比例.
  1084 + var blnum = Math.round(cLen/list[r].fpcls);
1073 1085 // 得到没有分配出去的路牌.
1074 1086 var dxa = baseF.chaji_array(clzs,rs);
1075 1087 // 定义当前车次数.
... ... @@ -1077,29 +1089,32 @@ var BaseFun = function() {
1077 1089 // 定义记录当前分割路牌的次数下标.分配到班型车次下的路牌数组.
1078 1090 var index = 0 , sslp = new Array();
1079 1091 // 当前车次所有占比例.
1080   - var tempint = parseInt(rsnum/blnum);
  1092 + //var tempint = parseInt(rsnum/blnum);
1081 1093 // 判断如果比例小1 则为当前车次数.
1082   - blnum = tempint <= 1 ? rsnum : blnum;
  1094 + //blnum = tempint <= 1 ? rsnum : blnum;
1083 1095 // 判断当前班型车次数组下标值.如果为倒数第二个或者之前.
1084 1096 if(r < lLen-1) {
1085 1097 // 遍历
1086   - for(var c = 0 ; c < tempint ; c++) {
  1098 + for(var c = 0 ; c < rsnum ; c++) {
1087 1099 // 创建新的没有分配出去的路牌数组.
1088 1100 var temp = dxa.concat();
1089 1101 // 创建切割路牌数组.
1090 1102 var tagA = new Array();
1091 1103 // 判断切割的下标值是否小于等于路牌数组的倒数第二个或者之前.
1092 1104 if(index <= (dxa.length-blnum) ) {
1093   - tagA = temp.splice(index,blnum);
  1105 + /*tagA = temp.splice(index,blnum);*/
  1106 + tagA = temp.splice(index,1);
1094 1107 }else {
1095   - tagA = temp.splice((dxa.length-blnum),blnum);
  1108 + /*tagA = temp.splice((dxa.length-blnum),blnum);*/
  1109 + tagA = temp.splice((dxa.length-blnum),1);
1096 1110 }
1097 1111 // 组合切割路牌数组.赋值给已分配出去的路牌.
1098 1112 rs = rs.concat(tagA);
1099 1113 // 赋值给分配到班型车次下的路牌数组.
1100 1114 sslp = sslp.concat(tagA);
1101 1115 // 记录切割下标.
1102   - index = index + 1 + blnum;
  1116 + index = index + blnum;
  1117 + // index = index + blnum;
1103 1118 }
1104 1119 // 分配到班型车次下的路牌数组.
1105 1120 list[r].sslp = sslp;
... ... @@ -1302,10 +1317,10 @@ var BaseFun = function() {
1302 1317 var sgbcfcsj = baseF.getDateTime(sslpbcA[r+1].fcsj),
1303 1318 dqbcddsj = baseF.getDateTime(sslpbcA[r].ARRIVALTIME),
1304 1319 dqbcfcsj = baseF.getDateTime(sslpbcA[r].fcsj);
  1320 + // 定义当前班次方向下标代码[0代表上行;1代表下行].
  1321 + var cctag = baseF.dirDmToIndex(sslpbcA[r].xlDir); // dataMap.smbcsjArr
1305 1322 // 定义每每相邻两个班次之间的时间差分钟数(也就是停站时间.)
1306 1323 var dxmin = parseInt( (sgbcfcsj - dqbcddsj)/60000);
1307   - // 定义当前班次方向下标代码[0代表上行;1代表下行].
1308   - var cctag = baseF.dirDmToIndex(sslpbcA[r].xlDir);
1309 1324 // 定义是否高峰
1310 1325 var flag = baseF.isPeakTimeScope(dqbcfcsj , dataMap);
1311 1326 // 获取行驶时间.
... ... @@ -1348,22 +1363,41 @@ var BaseFun = function() {
1348 1363 }
1349 1364 }
1350 1365 if(flag) {
1351   - // 修改当前班次的停站时间.
1352   - sslpbcA[r].STOPTIME = parseInt(dxmin) ;
1353   - // 当前班次的到达时间 + 停站时间 作为下一个班次的发车时间.
1354   - dqbcddsj.setMinutes(dqbcddsj.getMinutes() + dxmin);
1355   - // 修改下一个班次的发车时间.
1356   - sslpbcA[r+1].fcsj = baseF.getTimeStr(dqbcddsj);
1357   - // 下一个班次的发车时间 + 行驶时间 作为下一个班次的到达时间.
1358   - dqbcddsj.setMinutes(dqbcddsj.getMinutes() + sslpbcA[r+1].bcsj);
1359   - // 修改下一个班次的到达时间.
1360   - sslpbcA[r+1].ARRIVALTIME = baseF.getTimeStr(dqbcddsj);
  1366 + if(!baseF.isDirSmbc(baseF.dirDmToIndex(sslpbcA[r+1].xlDir) , sslpbcA[r+1].fcsj , dataMap)) {
  1367 + // 修改当前班次的停站时间.
  1368 + sslpbcA[r].STOPTIME = parseInt(dxmin) ;
  1369 + // 当前班次的到达时间 + 停站时间 作为下一个班次的发车时间.
  1370 + dqbcddsj.setMinutes(dqbcddsj.getMinutes() + dxmin);
  1371 + // 修改下一个班次的发车时间.
  1372 + sslpbcA[r+1].fcsj = baseF.getTimeStr(dqbcddsj);
  1373 + // 下一个班次的发车时间 + 行驶时间 作为下一个班次的到达时间.
  1374 + dqbcddsj.setMinutes(dqbcddsj.getMinutes() + sslpbcA[r+1].bcsj);
  1375 + // 修改下一个班次的到达时间.
  1376 + sslpbcA[r+1].ARRIVALTIME = baseF.getTimeStr(dqbcddsj);
  1377 + }else {
  1378 + if(r>0) {
  1379 + // 修改当前班次的停站时间.
  1380 + sslpbcA[r].STOPTIME = parseInt(dxmin) ;
  1381 + sgbcfcsj.setMinutes(sgbcfcsj.getMinutes() - sslpbcA[r].STOPTIME);
  1382 + sslpbcA[r].ARRIVALTIME = baseF.getTimeStr(sgbcfcsj);
  1383 + sgbcfcsj.setMinutes(sgbcfcsj.getMinutes() - sslpbcA[r].bcsj);
  1384 + sslpbcA[r].fcsj = baseF.getTimeStr(sgbcfcsj);
  1385 + sslpbcA[r-1].STOPTIME = parseInt( ( sgbcfcsj - baseF.getDateTime(sslpbcA[r-1].ARRIVALTIME))/60000);
  1386 + }
  1387 + }
1361 1388 }
1362 1389 }
1363 1390 }
1364 1391 }
1365 1392 },
1366 1393  
  1394 + isDirSmbc : function(dirDm , fcsj , dataMap) {
  1395 + var falg = false;
  1396 + if(fcsj == dataMap.smbcsjArr[dirDm].kssj || fcsj == dataMap.smbcsjArr[dirDm].jssj)
  1397 + falg = true;
  1398 + return falg;
  1399 + },
  1400 +
1367 1401 BXPplaceClassesTime01 : function(saa,cara,map,seMap,dataMap,lpNoA) {
1368 1402 var jsonArray = baseF.plgfbc(saa,cara,map,seMap,dataMap);
1369 1403 var list = baseF.splitBxRc(map.bxrc);
... ...
src/main/resources/static/pages/base/timesmodel/js/gantt.js
... ... @@ -420,7 +420,8 @@
420 420 * @return 返回甘特图的参数配置信息.
421 421 * */
422 422 function getGraphArgus(p) {
423   - var MULTIPLE = Math.round(105/parseInt(p.stopAraay[0].sxsj)) >=4 ? Math.round(90/parseInt(p.stopAraay[0].sxsj)) : Math.round(90/parseInt(p.stopAraay[0].sxsj)) *2;
  423 + var bs = p.stopAraay[0].sxsj > 40 ? 4 : 2;
  424 + var MULTIPLE = Math.round(105/parseInt(p.stopAraay[0].sxsj)) >3 ? Math.round(90/parseInt(p.stopAraay[0].sxsj)) : Math.round(90/parseInt(p.stopAraay[0].sxsj)) *bs;
424 425 var VALUEKEYNAME = 'Worldwide Gross' ,
425 426 DXHOURS = 24,MINUTE = 60,WIDTH = DXHOURS*MINUTE,MARGINLEFT = 380,HEIGHT = p.yAxisCarArray.length*60 + 240,
426 427 MARGINBOTTOM = 240,OFFSETX = 90,OFFSETY = 180,OFFSETUPY = 120,OFFSETDOWNY = 60,
... ...