Commit 218b434449d84e01017f05e954ca580380bf3485
1 parent
1de6f89b
bsthlq <2519941818@qq.com>
Showing
2 changed files
with
73 additions
and
38 deletions
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, | ... | ... |