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