Commit 6407884fb7a90f2dda60fc7e4309d3dabe880a1a
1 parent
d29c6740
bsthlq <2519941818@qq.com>
Showing
6 changed files
with
719 additions
and
50 deletions
src/main/resources/static/pages/base/timesmodel/add.html
| ... | ... | @@ -156,7 +156,7 @@ |
| 156 | 156 | </div> |
| 157 | 157 | <div class="form-actions"> |
| 158 | 158 | <div class="row"> |
| 159 | - <div class="col-md-offset-3 col-md-9"> | |
| 159 | + <div class="col-md-offset-5 col-md-9"> | |
| 160 | 160 | <a href="javascript:;" class="btn default button-previous disabled" style="display: none;"> |
| 161 | 161 | <i class="fa fa-angle-left"></i> 返回 </a> |
| 162 | 162 | <a href="javascript:;" class="btn btn-outline green button-next"> 下一步 | ... | ... |
src/main/resources/static/pages/base/timesmodel/js/base-fun.js
| ... | ... | @@ -324,6 +324,448 @@ var BaseFun = function() { |
| 324 | 324 | 'bxrcgs':null}; |
| 325 | 325 | }, |
| 326 | 326 | |
| 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) 调整某班型下的各个路牌对应的班次以及工时、停站时间、是否分班. | |
| 343 | + * @param bxlpbc 班型下的各个路牌的所有班次数组. | |
| 344 | + * @param map 表单参数信息 | |
| 345 | + * @param dataMap 封装的 以上、下行方向成对存在的 一些参数数组 [下标0 -- 代表上行 ; 下标1 -- 代表下行]. | |
| 346 | + * @param saa 封装的一些 停站时间、周转时间、行驶时间、行驶里程等. | |
| 347 | + * @param cara 路牌数组 | |
| 348 | + * @param bxrcObj 班次类型对象 | |
| 349 | + * @param dgminpcs 低谷最多配车数. | |
| 350 | + * *********************************** 业务要求 **************************************************** | |
| 351 | + * 满足单个路牌对应的标准工时、满足某班型下的所有路牌的平均工时对应的日平均工时、停站时间、路牌是否分班的班次集合. | |
| 352 | + * | |
| 353 | + * *********************************** 业务分析与思路 ********************************************** | |
| 354 | + * | |
| 355 | + * 首先判断出该路牌所属的班型,这里暂时考虑分两种情况. | |
| 356 | + * | |
| 357 | + * 第一种情况 :【五工二休】班型 | |
| 358 | + * | |
| 359 | + * 特点:一天标准工时为 : 8个小时 ; | |
| 360 | + * 一般该班型下的路牌班次出现密集的地方 是在高峰时段以及高峰时段附近。(这种路牌在模型里,我们称为短(断)路牌); | |
| 361 | + * 这种班型现象一般是晚出早归. | |
| 362 | + * | |
| 363 | + * 要求:单个路牌下的工时满足: 工时浮动范围在 标准工时【1-1.5】小时. | |
| 364 | + * 相同班型路牌下的平均工时满足: 工时浮动范围在 以表单录入的日平均工时10分钟内. | |
| 365 | + * | |
| 366 | + * 剔除规则:从最后一个班次开始剔除,遇到高峰时段则跳过。一直剔除到满足到班型的判断标准工时8小时。 | |
| 367 | + * | |
| 368 | + * 第二种情况 : 其它班型(包括 一工一休 、 二工一休 、 三工一休 、 四工一休 、 五工一休 、 六工一休) | |
| 369 | + * | |
| 370 | + * 特点:一天标准工时:以各自对应的班型工时为准。这里会有单/双档 等的概念。现在我们暂时也只考虑单/双档这种情况. | |
| 371 | + * 单:一个路牌一个人开 / 双:一个路牌两个开 ...... | |
| 372 | + * 那么一个路牌下的总工时为 各自对应的班型标准工时*档数. | |
| 373 | + * 这种情况下的路牌 | |
| 374 | + * 第一条件首先满足高峰时段。然后看情况(满足工时或者是防止工时超出)是否会产生分班。 | |
| 375 | + * 如果不产生分班:则一定为连续的,也就是说从头开到尾. | |
| 376 | + * 如果产生分班: | |
| 377 | + * 第一种情况 : 中间会断掉.一般这个断掉的时间不会太长,但至少是3小时以上。 | |
| 378 | + * 第二种情况 : 连续的。这种情况一定是双档。不然工时会超出. | |
| 379 | + * | |
| 380 | + * 要求:单个路牌下的工时满足 :工时浮动范围在 标准工时【1-1.5】小时. | |
| 381 | + * 相同班型路牌下的平均工时满足 : 工时浮动范围在 以表单录入的日平均工时10分钟内. | |
| 382 | + * | |
| 383 | + * 剔除规则:这里情况比较复杂,因为先要考虑该路牌是否分班。 | |
| 384 | + * | |
| 385 | + * 判断是否会产生分班分两种条件 | |
| 386 | + * | |
| 387 | + * 第一种情况:是双档一定有分班班次.并且是连续的班次. | |
| 388 | + * | |
| 389 | + * 第二种情况:是单档 , 但是单个路牌工时超出了要求范围 , 为了在满足工时的条件下。采取分班。 | |
| 390 | + * 判断依据:反算出低谷最少配车数. | |
| 391 | + * 计算公式:(低谷上行行驶时间 + 低谷下行行驶时间 + 低谷最大停站时间*2) / 低谷最大发车间隙 | |
| 392 | + * 这里的取整数要求:四舍五入去整。 | |
| 393 | + * | |
| 394 | + * | |
| 395 | + * 共同满足的条件 : 所有路牌下的相邻班次(前提条件是 不是分班班次)的停站时间不得超过 行业标准 行驶时间的10%~15%。如果有特殊情况,以表单录入的低谷最大停站时间为极限。 | |
| 396 | + * | |
| 397 | + * | |
| 398 | + **/ | |
| 399 | + tzlpgs02 : function(bxlpbc , map , dataMap , saa , cara , bxrcObj , dgminpcs) { | |
| 400 | + var rsultA = new Array(); | |
| 401 | + for(var a = 0 ; a < bxlpbc.length ; a++) { | |
| 402 | + // 定义该版型下对应的路牌的班次数组、班次数组长度。 | |
| 403 | + var lpbc = bxlpbc[a].lpbc, lpbclen_; | |
| 404 | + // 定义当前路牌的初始工时、班型对应的标准工时 | |
| 405 | + var initCountGs = bxlpbc[a].initCountGs ,bzgs = bxlpbc[a].bzgs; | |
| 406 | + // 定义初始工时与日平均工时差值 | |
| 407 | + var initdx = initCountGs - bxlpbc[a].gsavg; | |
| 408 | + // 定义剔除班次数、剔除的时间段. | |
| 409 | + var deletebcNum = Math.ceil((initCountGs - bxlpbc[a].gsavg) / saa[0].zzsj.dgzzsj) , tcbcgzA = new Array(); | |
| 410 | + // var deletebcNum = parseInt((initCountGs - bxlpbc[a].gsavg) / saa[0].zzsj.dgzzsj) , tcbcgzA = new Array(); | |
| 411 | + 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 | + } | |
| 423 | + }else { | |
| 424 | + /*console.log(bxlpbc[a].lpNo , initCountGs , bzgs , saa[0].zzsj.dgzzsj , | |
| 425 | + initCountGs - bzgs , (initCountGs - bzgs) /saa[0].zzsj.dgzzsj , | |
| 426 | + initCountGs - bxlpbc[a].gsavg , (initCountGs - bxlpbc[a].gsavg) / saa[0].zzsj.dgzzsj );*/ | |
| 427 | + // 单档 一个路牌一档劳动力 | |
| 428 | + if(bxlpbc[a].keepOff==1) { | |
| 429 | + // 如果低谷至少配车数大于零,则该班型下的路牌 存在一些 分班路牌,这里的分班 指的是 这个路牌先满足的前提条件就是 是单档。 | |
| 430 | + // 为了满足工时的要求,在低谷断开一段时间. | |
| 431 | + if(dgminpcs>0 && dgminpcs <= bxrcObj.fpcls ) { | |
| 432 | + if( (a + 1) <= dgminpcs) { | |
| 433 | + var dgzjsj = baseF.getDateTime('12:30'); | |
| 434 | + if( a % 2 == 0) { | |
| 435 | + // 定义早高峰结束 ~ 12:30 剔除规则.如果剔除的班次数不够,则去晚高峰之后剔除剩下的班次. | |
| 436 | + var swmaxtcbcNum = parseInt(( dgzjsj - dataMap.zgfsjd[0].ed) / (60000 * saa[0].zzsj.dgzzsj)); | |
| 437 | + if(initdx < 240) { | |
| 438 | + tcbcgzA.push({'minsj': dataMap.zgfsjd[0].ed , 'maxsj' : dgzjsj , 'order' : 'asc' , 'deletebcNum' : deletebcNum}); | |
| 439 | + }else { | |
| 440 | + tcbcgzA.push({'minsj': dataMap.zgfsjd[0].ed , 'maxsj' : dgzjsj , 'order' : 'asc' , 'deletebcNum' : swmaxtcbcNum}, | |
| 441 | + {'minsj': dataMap.wgfsjd[0].ed , 'maxsj' : dataMap.wgfzhsjd[0].ed, 'order' : 'desc' , 'deletebcNum' : deletebcNum - swmaxtcbcNum}); | |
| 442 | + } | |
| 443 | + // 顺序排序 | |
| 444 | + // lpbc.sort(function(x,y){return x.fcno-y.fcno}); | |
| 445 | + }else { | |
| 446 | + // 定义12:30 ~ 晚高峰开始以前剔除规则. 如果剔除的班次数不够,则去晚高峰之后剔除剩下的班次. | |
| 447 | + var xwmaxtcbcNum = parseInt(( dataMap.wgfsjd[0].st - dgzjsj) / (60000 * saa[0].zzsj.dgzzsj)); | |
| 448 | + if(initdx < 210) { | |
| 449 | + tcbcgzA.push({'minsj': dgzjsj , 'maxsj' : dataMap.wgfsjd[0].st , 'order' : 'desc', 'deletebcNum' : deletebcNum}); | |
| 450 | + }else { | |
| 451 | + | |
| 452 | + tcbcgzA.push({'minsj': dataMap.wgfsjd[0].ed , 'maxsj' : dataMap.wgfzhsjd[0].ed , 'order' : 'desc', 'deletebcNum' : deletebcNum - xwmaxtcbcNum}, | |
| 453 | + {'minsj': dgzjsj , 'maxsj' : dataMap.wgfsjd[0].st , 'order' : 'desc', 'deletebcNum' : xwmaxtcbcNum},); | |
| 454 | + } | |
| 455 | + // 逆序排序. | |
| 456 | + // lpbc.sort(function(m,n){return n.fcno-m.fcno}); | |
| 457 | + // order = 'desc'; | |
| 458 | + } | |
| 459 | + // 按规则剔除班次.并且分班.路牌班次断开. | |
| 460 | + baseF.spliceBc02(lpbc , tcbcgzA , dataMap , true); | |
| 461 | + }else { | |
| 462 | + // 按规则剔除班次.不分班.路牌班次不会断开. | |
| 463 | + baseF.isdk02(lpbc , dataMap , deletebcNum , false); | |
| 464 | + } | |
| 465 | + // 该班型下的路牌 不存在分班路牌. | |
| 466 | + }else if(dgminpcs == 0){ | |
| 467 | + // 按规则剔除班次.不分班.路牌班次不会断开. | |
| 468 | + baseF.isdk02(lpbc , dataMap , deletebcNum , false); | |
| 469 | + } | |
| 470 | + // 双档 一个路牌两档劳动力 | |
| 471 | + }else if(bxlpbc[a].keepOff==2) { | |
| 472 | + // 按规则剔除班次.分班.但是路牌班次不会断开. | |
| 473 | + baseF.isdk02(lpbc , dataMap , deletebcNum , true); | |
| 474 | + } | |
| 475 | + } | |
| 476 | + rsultA = rsultA.concat(lpbc); | |
| 477 | + } | |
| 478 | + return rsultA; | |
| 479 | + }, | |
| 480 | + | |
| 481 | + /** | |
| 482 | + * @description (TODO) 定义不断开班次的路牌剔除规则. | |
| 483 | + * | |
| 484 | + * | |
| 485 | + */ | |
| 486 | + isdk02 : function(lpbc , dataMap , deletebcNum , isfb) { | |
| 487 | + if(deletebcNum > 0) { | |
| 488 | + var zgfzqtcbcNum = parseInt(( dataMap.zgfzqsjd[0].ed - dataMap.zgfzqsjd[0].st ) / (60000 * saa[0].zzsj.dgzzsj)), | |
| 489 | + wgfhtcbcNum = parseInt(( dataMap.wgfzhsjd[0].ed - dataMap.wgfzhsjd[0].st ) / (60000 * saa[0].zzsj.dgzzsj)) | |
| 490 | + tcbcgzA = new Array(); | |
| 491 | + if( wgfhtcbcNum >= deletebcNum) { | |
| 492 | + tcbcgzA.push({'minsj': dataMap.wgfzhsjd[0].st , 'maxsj' : dataMap.wgfzhsjd[0].ed , 'order' : 'desc', 'deletebcNum' : deletebcNum},); | |
| 493 | + }else if(zgfzqtcbcNum >= deletebcNum){ | |
| 494 | + tcbcgzA.push({'minsj': dataMap.zgfzqsjd[0].st , 'maxsj' : dataMap.zgfzqsjd[0].ed , 'order' : 'asc', 'deletebcNum' : deletebcNum},); | |
| 495 | + }else if(deletebcNum >= (zgfzqtcbcNum + wgfhtcbcNum)){ | |
| 496 | + tcbcgzA.push({'minsj': dataMap.wgfzhsjd[0].st , 'maxsj' : dataMap.wgfzhsjd[0].ed , 'order' : 'desc', 'deletebcNum' : wgfhtcbcNum}, | |
| 497 | + {'minsj': dataMap.zgfzqsjd[0].st , 'maxsj' : dataMap.zgfzqsjd[0].ed , 'order' : 'asc', 'deletebcNum' : zgfzqtcbcNum},); | |
| 498 | + } | |
| 499 | + // lpbc.sort(function(m,n){return n.fcno-m.fcno}); | |
| 500 | + baseF.spliceBc02(lpbc , tcbcgzA , dataMap , isfb); | |
| 501 | + } | |
| 502 | + }, | |
| 503 | + | |
| 504 | + /** | |
| 505 | + * @description (TODO) 根据定义规则剔除班次. | |
| 506 | + * @param arr 班次数组. | |
| 507 | + * @param tcbcgzA 剔除规则. | |
| 508 | + * @param type 剔除类型【asc -- 顺序剔除 ; desc -- 逆序剔除】 | |
| 509 | + * @param dataMap 封装的 以上、下行方向成对存在的 一些参数数组 [下标0 -- 代表上行 ; 下标1 -- 代表下行]. | |
| 510 | + * @param isfb 剔除过程中是否会产生分班. | |
| 511 | + */ | |
| 512 | + spliceBc02 : function (arr , tcbcgzA , dataMap , isfb) { | |
| 513 | + for(var t = 0 ; t < tcbcgzA.length ; t++) { | |
| 514 | + var order = tcbcgzA[t].order; | |
| 515 | + if(order == 'asc') | |
| 516 | + arr.sort(function(x,y){return x.fcno-y.fcno}); | |
| 517 | + else if(order == 'desc') | |
| 518 | + arr.sort(function(m,n){return n.fcno-m.fcno}); | |
| 519 | + for(var a = 0 ; a < arr.length ; a ++) { | |
| 520 | + var fcsj = baseF.getDateTime(arr[a].fcsj); | |
| 521 | + // 判断是否在高峰时间范围.【true--表示在,false--表示不在】. | |
| 522 | + if(!baseF.isgfsjd01(fcsj,dataMap) && fcsj > tcbcgzA[t].minsj && fcsj < tcbcgzA[t].maxsj) { | |
| 523 | + if(order == 'asc') { | |
| 524 | + arr[a-1].isfb = isfb ? 1 : 0; | |
| 525 | + arr[a-1].STOPTIME = 0; | |
| 526 | + }else if(order == 'desc') { | |
| 527 | + var index_ = a + tcbcgzA[t].deletebcNum * 2; | |
| 528 | + arr[index_].STOPTIME = 0; | |
| 529 | + arr[index_].isfb = isfb && a > 0 ? 1 : 0; | |
| 530 | + } | |
| 531 | + arr.splice( a , tcbcgzA[t].deletebcNum * 2); | |
| 532 | + break; | |
| 533 | + } | |
| 534 | + } | |
| 535 | + } | |
| 536 | + }, | |
| 537 | + | |
| 538 | + /** | |
| 539 | + * @description (TODO) 排列各个路牌下的班次. | |
| 540 | + * @param bxrclist 班型数组对象. | |
| 541 | + * @prarm jsonArray 所有路牌下的班次. | |
| 542 | + * @param cara 路牌数组. | |
| 543 | + * @prarm saa 封装的一些 停站时间、周转时间、行驶时间、行驶里程等. | |
| 544 | + * @param dataMap 封装的 以上、下行方向成对存在的 一些参数数组 [下标0 -- 代表上行 ; 下标1 -- 代表下行]. | |
| 545 | + * @map map 表单参数. | |
| 546 | + * @return 返回一个满足单个路牌对应的标准工时、满足某班型下的所有路牌的平均工时对应的日平均工时、停站时间、路牌是否分班的班次集合. | |
| 547 | + */ | |
| 548 | + jslpgsAndbcs : function(bxrclist , jsonArray , cara , saa , dataMap , map) { | |
| 549 | + // 定义低谷最大发车时间、最大停站时间来反算出低谷最少配车数. | |
| 550 | + var dgmaxfcjx = parseInt(map.dgmaxfcjx), | |
| 551 | + dgmaxtzsj = parseInt(map.dgmaxtzsj); | |
| 552 | + // 计算低谷最少配车数 (低谷上行行驶时间 + 低谷下行行驶时间 + 低谷最大停站时间*2) / 低谷最大发车间隙. | |
| 553 | + var dgminpcs = Math.round((dataMap.dgxxsjArr[0] + dataMap.dgxxsjArr[1] + dgmaxtzsj*2) / dgmaxfcjx); | |
| 554 | + // 定义返回数组. | |
| 555 | + var rs = new Array(); | |
| 556 | + for(var x = 0 ; x < bxrclist.length; x++) { | |
| 557 | + // 定义当前班型下对应的路牌、 班型下的各个路牌的所有班次数组. | |
| 558 | + var cla = bxrclist[x].sslp , bxlpbc = new Array() ; | |
| 559 | + // 根据劳动力和配车数 算出是否 单/双 档. | |
| 560 | + var keepOff = bxrclist[x].rs/bxrclist[x].fpcls; | |
| 561 | + // 定义当前班型/人次/配车数 下的标准工时. | |
| 562 | + var hoursV = bxrclist[x].hoursV * keepOff; | |
| 563 | + for(var s = 0 ; s < cla.length; s++) { | |
| 564 | + // 定义路牌编号、定义当前路牌下的所有班次. | |
| 565 | + var lpNo = cla[s].lpNo , lpbc = new Array(); | |
| 566 | + for(var i =0 ; i <jsonArray.length; i++) { | |
| 567 | + // 判断当期遍历的班次是否属于当前的路牌. | |
| 568 | + if(jsonArray[i].lpNo == lpNo) { | |
| 569 | + jsonArray[i].lpName = bxrclist[x].type + '_' + lpNo ; | |
| 570 | + lpbc.push(jsonArray[i]); | |
| 571 | + } | |
| 572 | + } | |
| 573 | + // 更新路牌数组的路牌名称. | |
| 574 | + baseF.updlpArr(cara , lpNo , (bxrclist[x].type + '_' + lpNo)); | |
| 575 | + if(lpbc.length > 0 ) { | |
| 576 | + // 按发车序号逆序排序路牌下的班次. | |
| 577 | + lpbc.sort(function(a,b){return b.fcno-a.fcno}); | |
| 578 | + lpbc[0].STOPTIME = 0; | |
| 579 | + // 因为这里路牌下的班次特点是连续性的 | |
| 580 | + // 所以求这个路牌下当前的总工时(分钟)直接用最后一个班次的到达时间 - 第一个班次的发车时间,再加上进出场时间、早晚例保时间. | |
| 581 | + var initCountGs = parseInt((baseF.getDateTime(lpbc[0].ARRIVALTIME) - baseF.getDateTime(lpbc[lpbc.length-1].fcsj)) / 60000) + | |
| 582 | + dataMap.jcsjArr[baseF.dirDmToIndex(lpbc[0].xlDir)] + | |
| 583 | + dataMap.ccsjArr[baseF.dirDmToIndex(lpbc[lpbc.length-1].xlDir)] + | |
| 584 | + saa[0].lbsj*2; | |
| 585 | + | |
| 586 | + // 如果分班路牌数超过了该班型下的路牌总数.则提示无法排列。 | |
| 587 | + if(keepOff == 1) { | |
| 588 | + if(bxrclist[x].gsavg > (hoursV + 1.5 * bxrclist[x].fpcls)) { | |
| 589 | + ErrorInfo.show('提示', | |
| 590 | + " 班型【" + bxrclist[x].type + "】 下的 " + | |
| 591 | + "日平均工时 " + bxrclist[x].gsavg + " 过大!最大值不能超过:" + | |
| 592 | + hoursV + " + " + "1.5" + "*" + bxrclist[x].fpcls + " 的和。"); | |
| 593 | + return false; | |
| 594 | + } | |
| 595 | + if(dgminpcs > bxrclist[x].fpcls && bxrclist[x].type != '五工二休') { | |
| 596 | + ErrorInfo.show('提示',"请合理的搭配【低谷的最大停站时间、最大发车间隙】 与 【劳动力】 、 【配车数】之间的数值!" + | |
| 597 | + " 在班型【" + bxrclist[x].type + " 】下会产生分班," + "而低谷最少配车数为:" + dgminpcs + | |
| 598 | + " 辆,但是在该班型下只配了:" + bxrclist[x].fpcls + "辆" ); | |
| 599 | + return false; | |
| 600 | + } | |
| 601 | + } else if(keepOff == 2) { | |
| 602 | + if(bxrclist[x].gsavg > (hoursV + 1.5*2*bxrclist[x].fpcls)) { | |
| 603 | + ErrorInfo.show('提示', | |
| 604 | + " 班型【" + bxrclist[x].type + "】 下的 " + | |
| 605 | + "日平均工时 " + bxrclist[x].gsavg + " 过大!最大值不能超过:" + | |
| 606 | + hoursV + " + " + "1.5" + "*2" + bxrclist[x].fpcls + " 的和。"); | |
| 607 | + return false; | |
| 608 | + } | |
| 609 | + } | |
| 610 | + // 'initCountGs' : parseFloat((initCountGs/60).toFixed(2)), | |
| 611 | + bxlpbc.push({'bxtyp' : bxrclist[x].type , 'lpNo' : lpNo , | |
| 612 | + 'lpbc' : lpbc , 'dygbcfcsj' : lpbc[lpbc.length-1].fcsj, | |
| 613 | + 'initCountGs' : initCountGs , | |
| 614 | + 'keepOff' : keepOff , 'bzgs' : parseInt(hoursV*60) , 'gsavg' : parseInt(bxrclist[x].gsavg*60) , | |
| 615 | + 'fcint' : baseF.getDateTime(lpbc[lpbc.length-1].fcsj).getTime()}); | |
| 616 | + } | |
| 617 | + } | |
| 618 | + if(bxlpbc.length > 0 ) { | |
| 619 | + bxlpbc.sort(function(x,y){return x.fcint-y.fcint}); | |
| 620 | + // console.log(bxlpbc); | |
| 621 | + // 调整某班型下的各个路牌对应的班次以及工时、停站时间、是否分班. | |
| 622 | + rs = rs.concat(baseF.tzlpgs02(bxlpbc , map , dataMap , saa , cara , bxrclist[x] , dgminpcs)); | |
| 623 | + } | |
| 624 | + } | |
| 625 | + return rs; | |
| 626 | + }, | |
| 627 | + | |
| 628 | + /** | |
| 629 | + * @description (TODO) 更新路牌数组的路牌名称. | |
| 630 | + * @param cara 路牌数组 | |
| 631 | + * @param name 路牌新名称 | |
| 632 | + */ | |
| 633 | + updlpArr : function(cara , lpNo , name) { | |
| 634 | + for(var l = 0 ; l <cara.length;l++ ) { | |
| 635 | + if(cara[l].lpNo == lpNo) { | |
| 636 | + cara[l].lpName = name; | |
| 637 | + } | |
| 638 | + } | |
| 639 | + }, | |
| 640 | + | |
| 641 | + BXPplaceClassesTime02 : function(saa , cara , map , seMap , dataMap , lpNoA) { | |
| 642 | + // 得到所有路牌下的班次数[从各路牌下的第一个班次发车时间 到 营运结束时间点并且是连续的班次数]. | |
| 643 | + var jsonArray = baseF.plgfbc01(saa , cara , map , seMap , dataMap); | |
| 644 | + // return {'json':jsonArray,'bxrcgs':null}; | |
| 645 | + | |
| 646 | + // 切割班型/人次/配车数 字符串 为 数组对象. | |
| 647 | + var list = baseF.splitBxRc02(map.bxrc); | |
| 648 | + // 把班型分配到对应的具体路牌上. | |
| 649 | + baseF.fprclp01(list,cara); | |
| 650 | + // console.log(list); | |
| 651 | + | |
| 652 | + var tempA = baseF.jslpgsAndbcs(list.data , baseF.tcbzfwndbc02(jsonArray , dataMap) , cara , saa , dataMap , map); | |
| 653 | + // return {'json':tempA,'bxrcgs':null}; | |
| 654 | + return {'json':baseF.addjcclcbc01(cara,tempA,dataMap,saa,map),'bxrcgs':null}; | |
| 655 | + var ttsmbA = baseF.tzsmbcsj01(tempA,dataMap.smbcsjArr,dataMap.ccsjArr,dataMap.cclcArr,dataMap.qdzArr,saa[0].lbsj,dataMap); | |
| 656 | + | |
| 657 | + baseF.jhfcjx02(ttsmbA,dataMap); | |
| 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 | + }, | |
| 663 | + | |
| 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]); | |
| 674 | + } | |
| 675 | + sslpbcA.sort(function(a,b){return a.fcno-b.fcno}); | |
| 676 | + baseF.tztzsjInit02(sslpbcA,dataMap); | |
| 677 | + jsrs = jsrs.concat(sslpbcA); | |
| 678 | + } | |
| 679 | + return jsrs; | |
| 680 | + }, | |
| 681 | + | |
| 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 | + } | |
| 697 | + } | |
| 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); | |
| 704 | + } | |
| 705 | + } | |
| 706 | + }, | |
| 707 | + | |
| 708 | + | |
| 709 | + /** | |
| 710 | + * @description : (TODO) 均匀发车间隙 | |
| 711 | + * | |
| 712 | + * @params : [arr--某个方向下的班次数组;dir--方向;zzsj--周转时间] | |
| 713 | + * | |
| 714 | + * @return : 返回一个数组.这里返回的是调整过后 发车间距均匀的班次数组 | |
| 715 | + **/ | |
| 716 | + jhfcjx02 : function(bcArr,dataMap) { | |
| 717 | + if(bcArr.length<=0) | |
| 718 | + return; | |
| 719 | + var dirA = dataMap.dira; | |
| 720 | + var clzs = parseInt(dataMap.map.clzs); | |
| 721 | + for(var d = 0 ; d < dirA.length; d++) { | |
| 722 | + var fxdm = dirA[d],fxbc = new Array(); | |
| 723 | + var cctag = baseF.dirDmToIndex(fxdm); | |
| 724 | + for(var b = 0;b<bcArr.length ; b++) { | |
| 725 | + bcArr[b].fcint = baseF.getDateTime(bcArr[b].fcsj).getTime(); | |
| 726 | + if(bcArr[b].xlDir == fxdm) | |
| 727 | + fxbc.push(bcArr[b]); | |
| 728 | + } | |
| 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){ | |
| 736 | + var temp = new Date(); | |
| 737 | + temp.setHours(kssj.getHours()); | |
| 738 | + 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);// 定长度 | |
| 742 | + if(len_>0 && bcCount > 0) { | |
| 743 | + var _fcjx = parseInt(Math.ceil(zzsj/bcCount)); | |
| 744 | + console.log(_fcjx); | |
| 745 | + var fcnosj = new Date(kssj); | |
| 746 | + for(var l = 0 ; l< len_ ; l++) { | |
| 747 | + // 每个路牌的末班车发车时间不准动. | |
| 748 | + /*if(baseF.iszhclzsbc(fxbc, sjdbcArr[l].fcno , clzs)) { | |
| 749 | + continue; | |
| 750 | + }*/ | |
| 751 | + sjdbcArr[l].fcsj = baseF.getTimeStr(fcnosj); | |
| 752 | + var _xxsj = baseF.getxssj(dataMap.zgfsjd, | |
| 753 | + dataMap.wgfsjd,fcnosj,dataMap.pcxssjArr, | |
| 754 | + dataMap.gfxxsjArr,baseF.dirDmToIndex(sjdbcArr[l].xlDir));// 获取行驶时间 | |
| 755 | + sjdbcArr[l].bcsj = _xxsj; | |
| 756 | + var ddsj = new Date(); | |
| 757 | + ddsj.setHours(fcnosj.getHours()); | |
| 758 | + ddsj.setMinutes(fcnosj.getMinutes()+_xxsj); | |
| 759 | + sjdbcArr[l].ARRIVALTIME = baseF.getTimeStr(ddsj); | |
| 760 | + fcnosj.setMinutes(fcnosj.getMinutes() + _fcjx); | |
| 761 | + } | |
| 762 | + } | |
| 763 | + } | |
| 764 | + kssj = new Date(kssj.setMinutes(kssj.getMinutes() + zzsj)); | |
| 765 | + } | |
| 766 | + } | |
| 767 | + }, | |
| 768 | + | |
| 327 | 769 | BXPplaceClassesTime01 : function(saa,cara,map,seMap,dataMap,lpNoA) { |
| 328 | 770 | var jsonArray = baseF.plgfbc(saa,cara,map,seMap,dataMap); |
| 329 | 771 | var list = baseF.splitBxRc(map.bxrc); |
| ... | ... | @@ -830,6 +1272,7 @@ var BaseFun = function() { |
| 830 | 1272 | var bcCount = baseF.getlpNum(sjdbcArr);// 定长度 |
| 831 | 1273 | if(len_>0 && bcCount > 0) { |
| 832 | 1274 | var _fcjx = parseInt(Math.ceil(zzsj/bcCount)); |
| 1275 | + console.log(_fcjx); | |
| 833 | 1276 | var fcnosj = new Date(kssj); |
| 834 | 1277 | for(var l = 0 ; l< len_ ; l++) { |
| 835 | 1278 | // 每个路牌的末班车发车时间不准动. |
| ... | ... | @@ -1044,11 +1487,11 @@ var BaseFun = function() { |
| 1044 | 1487 | for(var r = 0 ; r<array.length;r++) { |
| 1045 | 1488 | tempA.push(array[r].STOPTIME + bs); |
| 1046 | 1489 | } |
| 1047 | - var v1 = Math.max.apply(null, maxXxsjA) *1.5; | |
| 1490 | + var v1 = Math.max.apply(null, maxXxsjA) * 1.5; | |
| 1048 | 1491 | var v2 = Math.max.apply(null, tempA); |
| 1049 | 1492 | if( v2 > v1) { |
| 1050 | 1493 | tag = false; |
| 1051 | - dx = parseInt(v2 -v1); | |
| 1494 | + dx = parseInt(v2 - v1); | |
| 1052 | 1495 | } |
| 1053 | 1496 | return {tag:tag,dx:dx}; |
| 1054 | 1497 | }, |
| ... | ... | @@ -1565,6 +2008,115 @@ var BaseFun = function() { |
| 1565 | 2008 | return inv; |
| 1566 | 2009 | }, |
| 1567 | 2010 | |
| 2011 | + | |
| 2012 | + /** | |
| 2013 | + * @discription : (TODO)获取所有路牌默认出场方向. | |
| 2014 | + * | |
| 2015 | + * 判定规则: | |
| 2016 | + * 下行头班车时间 + 下行行驶时间 + 下行停站时间 大于了 上行头班车时间 判定都为上行出场 否则为下行出场. | |
| 2017 | + * | |
| 2018 | + * 举例: | |
| 2019 | + * 浦东38路 上行头班车时间是7:00 下行头班车是6:30 ,下行行驶时间是25分钟 , 下行停站时间为5分钟. | |
| 2020 | + * 所以浦东38的所有路牌的第一个班次都是下行出场. | |
| 2021 | + * | |
| 2022 | + * @params : 起终点站的首末班车时间 | |
| 2023 | + * | |
| 2024 | + * @return : 返回方向结果. [0--上;1--下;2--未知]. | |
| 2025 | + * | |
| 2026 | + **/ | |
| 2027 | + getdefaultDir01 : function(list , xxsj , tzsj) { | |
| 2028 | + var sxtbcsj = baseF.getDateTime(list[0].kssj); | |
| 2029 | + var xxtbcsj = baseF.getDateTime(list[1].kssj); | |
| 2030 | + xxtbcsj.setMinutes(xxtbcsj.getMinutes() + xxsj + tzsj); | |
| 2031 | + if(xxtbcsj>sxtbcsj) { | |
| 2032 | + return 0; | |
| 2033 | + }else { | |
| 2034 | + return 1; | |
| 2035 | + } | |
| 2036 | + }, | |
| 2037 | + /** | |
| 2038 | + * @description (TODO) 得到所有路牌下的班次数[从各路牌下的第一个班次发车时间 到 营运结束时间点并且是连续的班次数]. | |
| 2039 | + * @param saa 封装的一些 停站时间、周转时间、行驶时间、行驶里程等. | |
| 2040 | + * @param cara 路牌数组 | |
| 2041 | + * @param map 表单参数 | |
| 2042 | + * @param seMap 线路营运开始 ~ 结束时间 | |
| 2043 | + * @param dataMap 封装的 以上、下行方向成对存在的 一些参数数组 [下标0 -- 代表上行 ; 下标1 -- 代表下行]. | |
| 2044 | + * @return 返回一个所有路牌下的班次数[从各路牌下的第一个班次发车时间 ~ 营运结束时间点并且是连续的班次数]. | |
| 2045 | + * | |
| 2046 | + * ******************************** 思路 ********************************************************* | |
| 2047 | + * | |
| 2048 | + * 首先,以早高峰开始时间作为开始点 , 并且作为最后一个路牌的第一个班次的发车时间展开。 | |
| 2049 | + * | |
| 2050 | + * 纵向展开: | |
| 2051 | + * 以最后一个路牌的第一个班次发车时间为开始点,以阶梯形式向上展开. | |
| 2052 | + * | |
| 2053 | + * 规则: | |
| 2054 | + * 下一个路牌的第一个班次发车时间 = 当前路牌的第一个班次发车时间 + 在某时间范围内的发车间隙。 | |
| 2055 | + * 依次类推。可以得到每一个路牌下的第一个班次发车时间。 | |
| 2056 | + * | |
| 2057 | + * 举例:以最后一个路牌第一个班次的发车时间为开始点向上展开. | |
| 2058 | + * 最后一个路牌的第一个班次的发车时间为 6:31 | |
| 2059 | + * 倒数第二个路牌的第一个班次的发车时间为 6:39 = 6:31 + 某周转时间段内的发车间隙为:8 | |
| 2060 | + * 倒数第三个路牌的第一个班次的发车时间为 6:47 = 6:39 + 某周转时间段内的发车间隙为:8 | |
| 2061 | + * 倒数第四个.... | |
| 2062 | + * 以此类推. | |
| 2063 | + * | |
| 2064 | + * 横向展开: | |
| 2065 | + * 就是以每个路牌下的第一个班次的发车时间去补全当前路牌后面并且为连续性的班次。 | |
| 2066 | + * | |
| 2067 | + * 规则: | |
| 2068 | + * 当前班次 :班次的计划发车时间 + 当前方向下并且在某时间范围内的行驶时间 = 当前班次下的计划到达时间 以此推出下个班次的发车时间. | |
| 2069 | + * 下个班次 :下个班次的发车时间 = 以上个班次的到达时间 + 上个班次方向下并且在某时间范围内的停站时间. | |
| 2070 | + * 依次类推。以营运结束时间点作为结束。铺出当前路牌下并为连续性的班次数. | |
| 2071 | + * | |
| 2072 | + * 举例:以最后一个路牌的第一个班次开始向水平方向连续性的补全. | |
| 2073 | + * 第一个班次的发车时间是 6:31 , 某放下下的高峰行驶时间 25分钟 ,得到第一个班次的到达时间 6:31 + 25 = 6:56 , | |
| 2074 | + * 第二个班次: | |
| 2075 | + * 发车时间是 7:01 = 第一个班次的到达时间 6:56 + 第一个班次方向下并且在某时间范围内的停站时间 5分钟 | |
| 2076 | + * 某放下下的高峰行驶时间 25分钟 得到到达时间 : 7:01 + 25 = 7:26 | |
| 2077 | + * 第三个班次 | |
| 2078 | + * 发车时间是 7:31 = 第二个班次的到达时间 7:26 + 第二个班次方向下并且在某时间范围内的停站时间 5分钟 | |
| 2079 | + * 某放下下的高峰行驶时间 25分钟 得到到达时间 : 7:31 + 25 = 7:56 | |
| 2080 | + * 第四个班次 | |
| 2081 | + * 第五个班次 | |
| 2082 | + * ........ | |
| 2083 | + */ | |
| 2084 | + plgfbc01 : function(saa , cara , map, seMap , dataMap) { | |
| 2085 | + // 定义路牌长度 、所有路牌默认出场方向 [0--上行出场;1--下行出场] 、营运结束时间、返回数组. | |
| 2086 | + var len = cara.length , cctag , endTime = baseF.getDateTime(seMap.e) , rs = new Array(); | |
| 2087 | + // 获取所有路牌默认出场方向.如果是环线则只有一个上行方向. | |
| 2088 | + cctag = map.linePlayType=='1' ? 0 : baseF.getdefaultDir01(dataMap.smbcsjArr,saa[0].xxsj, saa[0].dgxxtzjx); | |
| 2089 | + for(var c = 0 ; c < len ; c++) { | |
| 2090 | + // 定义当前路牌的第一个班次的开始时间. | |
| 2091 | + var kssj = baseF.getDateTime(map.earlyStartTime); | |
| 2092 | + kssj.setMinutes(kssj.getMinutes()-(len - cara[c].lpNo)*saa[0].fcjx.dgfcjx); | |
| 2093 | + // 定义当前路牌方向变量 、 是否开启方向切换变量[0 --- 表示不开启 ; 1 -- 表示开启] 、 序号. | |
| 2094 | + var fxTagDm = cctag , fxflag = 0 , xhNo = 3; | |
| 2095 | + while(kssj <= endTime) { | |
| 2096 | + // 获取当前班次方向,如果是当前路牌的第一个班次则为默认方向,否则切换方向. | |
| 2097 | + fxTagDm = baseF.getfx(fxflag,fxTagDm); | |
| 2098 | + // 开启方向切换. | |
| 2099 | + fxflag = 1; | |
| 2100 | + // 定义在某时间段内[高峰时间段、低谷时间段]的停站时间. | |
| 2101 | + var tzsj = baseF.isgfsjd01(kssj,dataMap) ? dataMap.gftzsj[fxTagDm] : dataMap.dgtzsj[fxTagDm]; | |
| 2102 | + // 定义在某时间段内的行驶时间. | |
| 2103 | + var _xxsj = baseF.getxssj(dataMap.zgfsjd,dataMap.wgfsjd,kssj,dataMap.pcxssjArr,dataMap.gfxxsjArr,fxTagDm); | |
| 2104 | + // 定义当前班次的停站时间,这里是为了当计算到了最后一个班次的时候,那么停站时间为0 ,但是后续的班次的发车时间需要加上前一个班次的停站时间. | |
| 2105 | + var xs_tzsj = baseF.isLastbc(kssj,endTime,tzsj,_xxsj) ? 0 : tzsj; | |
| 2106 | + // 添加正常班次对象. | |
| 2107 | + rs.push(baseF.getbcObj(kssj , _xxsj , cara[c] , | |
| 2108 | + dataMap.bcTypeArr.normal, | |
| 2109 | + dataMap.dira[fxTagDm] , xhNo++, | |
| 2110 | + dataMap.pcxslcArr[fxTagDm] , map , 0, | |
| 2111 | + dataMap.qdzArr[fxTagDm], | |
| 2112 | + dataMap.zdzArr[fxTagDm], null , xs_tzsj , 0)); | |
| 2113 | + // 重新计算下一个班次的开始时间. | |
| 2114 | + kssj = new Date(kssj.setMinutes(kssj.getMinutes() + tzsj)); | |
| 2115 | + } | |
| 2116 | + } | |
| 2117 | + return rs; | |
| 2118 | + }, | |
| 2119 | + | |
| 1568 | 2120 | plgfbc : function(saa , cara , map, seMap ,dataMap) { |
| 1569 | 2121 | var len = cara.length,rs = new Array(); |
| 1570 | 2122 | var lbsj = map.lb=='' ? 0:parseInt(map.lb); |
| ... | ... | @@ -1610,9 +2162,10 @@ var BaseFun = function() { |
| 1610 | 2162 | return rs; |
| 1611 | 2163 | }, |
| 1612 | 2164 | |
| 1613 | - isgfsjd01 : function(kssj,dataMap,type) { | |
| 2165 | + isgfsjd01 : function(kssj,dataMap) { | |
| 1614 | 2166 | var tag = false; |
| 1615 | - if((dataMap.zgfsjd[0].st <=kssj && kssj<= dataMap.zgfsjd[0].ed ) || ( dataMap.wgfsjd[0].st <= kssj && kssj <= dataMap.wgfsjd[0].ed)) | |
| 2167 | + if((dataMap.zgfsjd[0].st <= kssj && kssj<= dataMap.zgfsjd[0].ed ) || | |
| 2168 | + ( dataMap.wgfsjd[0].st <= kssj && kssj <= dataMap.wgfsjd[0].ed)) | |
| 1616 | 2169 | tag = true; |
| 1617 | 2170 | return tag; |
| 1618 | 2171 | }, |
| ... | ... | @@ -1653,6 +2206,34 @@ var BaseFun = function() { |
| 1653 | 2206 | return result; |
| 1654 | 2207 | }, |
| 1655 | 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 | + | |
| 1656 | 2237 | splitBxRc : function(str) { |
| 1657 | 2238 | var list = new Array(),rsa = new Array();; |
| 1658 | 2239 | var gsgd = baseF.getBxLs(); | ... | ... |
src/main/resources/static/pages/base/timesmodel/js/d3.relationshipgraph.js
| ... | ... | @@ -966,9 +966,11 @@ var RelationshipGraph = function () { |
| 966 | 966 | var lpNo = array[a].lpNo; |
| 967 | 967 | var timeNum = 0 ,tempNum = 0; |
| 968 | 968 | for(var z = 0 ;z < tza.length;z++) { |
| 969 | - if(tza[z].lpNo == lpNo) { | |
| 969 | + if(tza[z].lpNo == lpNo && tza[z].bcsj >0 ) { | |
| 970 | 970 | timeNum = timeNum + tza[z].bcsj + tza[z].STOPTIME; |
| 971 | - tempNum ++; | |
| 971 | + if( tza[z].bcType !='bd' && tza[z].bcType !='lc' ) { | |
| 972 | + tempNum ++; | |
| 973 | + } | |
| 972 | 974 | } |
| 973 | 975 | } |
| 974 | 976 | var className = 'statis_container_' + lpNo; | ... | ... |
src/main/resources/static/pages/base/timesmodel/js/gantt.js
| ... | ... | @@ -64,7 +64,8 @@ |
| 64 | 64 | }else if(map.baseRes== '1') { |
| 65 | 65 | // 采用班型人次数据获取渲染时刻表明细图形的配置参数数据. |
| 66 | 66 | // data = BaseFun.BXPplaceClassesTime(stopAraay,CSMap.maxCar,map,seMap,dataMap,getylp(CSMap.maxCar).lpNoA); |
| 67 | - data = BaseFun.BXPplaceClassesTime01(stopAraay,CSMap.maxCar,map,seMap,dataMap,getylp(CSMap.maxCar).lpNoA); | |
| 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 | 69 | } |
| 69 | 70 | |
| 70 | 71 | }else { |
| ... | ... | @@ -129,7 +130,11 @@ |
| 129 | 130 | * @returns 返回一个分装发车间隙、车辆数的最大值集合. |
| 130 | 131 | * */ |
| 131 | 132 | function getMaxCarAndStopSpace1(map) { |
| 132 | - return {'gattA':null,'fcjx': {'gffcjx': Math.round(map.zzsj.gfzzsj/map.clzs) , 'dgfcjx': Math.round(map.zzsj.dgzzsj/map.clzs)},'maxCar':BaseFun.getYAxisCarArray(parseInt(map.clzs))}; | |
| 133 | + return {'gattA':null, | |
| 134 | + 'fcjx': {'gffcjx': Math.round(map.zzsj.gfzzsj/map.clzs) , | |
| 135 | + 'dgfcjx': Math.round(map.zzsj.dgzzsj/map.clzs), | |
| 136 | + 'dgmaxfcjx' : parseInt(map.dgmaxfcjx)}, | |
| 137 | + 'maxCar':BaseFun.getYAxisCarArray(parseInt(map.clzs))}; | |
| 133 | 138 | } |
| 134 | 139 | |
| 135 | 140 | /** |
| ... | ... | @@ -147,6 +152,8 @@ |
| 147 | 152 | 'pcxssjArr' : BaseFun.formatPairing(gatps.upTravelTime,gatps.downTravelTime),// 平常行驶时间。[下标0代表上;下标1代表下] |
| 148 | 153 | 'gfxxsjArr' : BaseFun.formatPairing(gatps.lateUpTime=='' ? gatps.upTravelTime : gatps.lateUpTime, |
| 149 | 154 | gatps.lateDownTime=='' ? gatps.downTravelTime : gatps.lateDownTime),// 高峰行驶时间。[下标0代表上;下标1代表下] |
| 155 | + 'dgxxsjArr' : BaseFun.formatPairing(gatps.troughUpTime=='' ? gatps.upTravelTime : gatps.troughUpTime, | |
| 156 | + gatps.troughDownTime=='' ? gatps.downTravelTime : gatps.troughDownTime),// 低谷行驶时间。[下标0代表上;下标1代表下] | |
| 150 | 157 | 'pcxslcArr' : BaseFun.formatPairing(gatps.upMileage,gatps.downMileage),// 行驶里程。[下标0代表上;下标1代表下] |
| 151 | 158 | 'qdzArr' : BaseFun.qzdz(gatps.up_s.split('_')[0],gatps.down_s.split('_')[0]),// 起始站。[下标0代表上;下标1代表下] |
| 152 | 159 | 'zdzArr':BaseFun.qzdz(gatps.up_s.split('_')[1],gatps.down_s.split('_')[1]),// 终点站。[下标0代表上;下标1代表下] |
| ... | ... | @@ -170,6 +177,8 @@ |
| 170 | 177 | // 'maxztjx' : parseInt(gatps.maxstopTime), // 最大停站时间. |
| 171 | 178 | 'gftzsj': BaseFun.formatPairing(gatps.gfupStopTime,gatps.gfdownStopTime),// 高峰停站时间. |
| 172 | 179 | 'dgtzsj' : BaseFun.formatPairing(gatps.dgupStopTime,gatps.dgdownStopTime),// 低谷停站时间. |
| 180 | + 'dgmaxtzsj' : parseInt(gatps.dgmaxtzsj),// 低谷最大停站时间. | |
| 181 | + 'dgmaxfcjx' : parseInt(gatps.dgmaxfcjx),// 低谷最大发车间隙. | |
| 173 | 182 | 'map' : gatps, |
| 174 | 183 | 'zzsj':gatps.zzsj,// 周转时间. |
| 175 | 184 | }; |
| ... | ... | @@ -191,6 +200,9 @@ |
| 191 | 200 | 'dgzzsj': parseInt(map.troughUpTime==''? map.upTravelTime : map.troughUpTime) + |
| 192 | 201 | parseInt(map.dgupStopTime) + parseInt(map.dgdownStopTime) + |
| 193 | 202 | parseInt(map.troughDownTime==''? map.downTravelTime: map.troughDownTime),// 低谷周转时间 |
| 203 | + 'dgmaxzzsj' : parseInt(map.troughUpTime==''? map.upTravelTime : map.troughUpTime) + | |
| 204 | + parseInt(map.dgmaxtzsj) + parseInt(map.dgmaxtzsj) + | |
| 205 | + parseInt(map.troughDownTime==''? map.downTravelTime: map.troughDownTime),// 低谷最大的周转时间 | |
| 194 | 206 | }; |
| 195 | 207 | } |
| 196 | 208 | ... | ... |
src/main/resources/static/pages/base/timesmodel/js/tagsinput.js
| ... | ... | @@ -42,7 +42,8 @@ var ComponentsBootstrapTagsinput = function() { |
| 42 | 42 | var bctypeValue = $('#state_tagsinput_bctype').val(); |
| 43 | 43 | var rcnum = $('#state_tagsinput_rcsvalue').val(); |
| 44 | 44 | var clnum = $('#state_tagsinput_clsvalue').val(); |
| 45 | - if(isNull(bctypeValue,rcnum,clnum)) { | |
| 45 | + var gsvag = $('#state_tagsinput_gsavgvalue').val(); | |
| 46 | + if(isNull(bctypeValue,rcnum,clnum,gsvag)) { | |
| 46 | 47 | if(!Number.isInteger(parseInt(rcnum)/parseInt(clnum))) { |
| 47 | 48 | layer.msg('当前算法只支持【单/双挡】!请您重新输入!'); |
| 48 | 49 | $('#state_tagsinput_bctype').val(null); |
| ... | ... | @@ -56,22 +57,24 @@ var ComponentsBootstrapTagsinput = function() { |
| 56 | 57 | if(s1a[0]==bctypeValue) { |
| 57 | 58 | rcnum = parseInt(rcnum) + parseInt(s1a[1]); |
| 58 | 59 | clnum = parseInt(clnum) + parseInt(s1a[2]); |
| 60 | + gsvag = parseInt(s1a[3]); | |
| 59 | 61 | } |
| 60 | 62 | } |
| 61 | 63 | elt.tagsinput('add', { |
| 62 | - "value": bctypeValue + '/' + rcnum + '/' + clnum, | |
| 63 | - "text": bctypeValue + '/' + rcnum + '/' + clnum, | |
| 64 | + "value": bctypeValue + '/' + rcnum + '/' + clnum + '/' + gsvag, | |
| 65 | + "text": bctypeValue + '/' + rcnum + '/' + clnum + '/' + gsvag, | |
| 64 | 66 | "continent": bctypeValue, |
| 65 | 67 | }); |
| 66 | 68 | $('#state_tagsinput_bctype').val(null); |
| 67 | 69 | $('#state_tagsinput_rcsvalue').val(null); |
| 68 | 70 | $('#state_tagsinput_clsvalue').val(null); |
| 71 | + $('#state_tagsinput_gsavgvalue').val(null); | |
| 69 | 72 | } |
| 70 | 73 | }); |
| 71 | 74 | |
| 72 | - var isNull = function(v1,v2,v3) { | |
| 75 | + var isNull = function(v1,v2,v3,v4) { | |
| 73 | 76 | var tag = true; |
| 74 | - if(v1==''|| v2=='' || v3=='') | |
| 77 | + if(v1==''|| v2=='' || v3=='' || v4=='') | |
| 75 | 78 | tag = false; |
| 76 | 79 | return tag; |
| 77 | 80 | } | ... | ... |
src/main/resources/static/pages/base/timesmodel/tepms/bctype_temp.html
| ... | ... | @@ -170,56 +170,83 @@ |
| 170 | 170 | |
| 171 | 171 | <!-- 表单分组组件 form-group START --> |
| 172 | 172 | <div class="form-group"> |
| 173 | - <!-- 高峰上行停站间隙 (* 必填项) START --> | |
| 173 | + <!-- 高峰上行停站时间 (* 必填项) START --> | |
| 174 | 174 | <div class="col-md-6"> |
| 175 | 175 | <label class="control-label col-md-5"> |
| 176 | - <span class="required"> * </span> 高峰上行停站间隙: | |
| 176 | + <span class="required"> * </span> 高峰上行停站时间: | |
| 177 | 177 | </label> |
| 178 | 178 | <div class="col-md-5"> |
| 179 | 179 | <input type="text" class="form-control" name="gfupStopTime" id="gfupStopTimeInput" |
| 180 | - placeholder="请输入高峰上行停站间隙"> | |
| 180 | + placeholder="请输入高峰上行停站时间"> | |
| 181 | 181 | </div> |
| 182 | 182 | </div> |
| 183 | - <!-- 上行停站间隙 (* 必填项) END --> | |
| 183 | + <!-- 上行停站时间 (* 必填项) END --> | |
| 184 | 184 | |
| 185 | - <!-- 高峰下行停站间隙 (* 必填项) START --> | |
| 185 | + <!-- 高峰下行停站时间 (* 必填项) START --> | |
| 186 | 186 | <div class="col-md-6"> |
| 187 | 187 | <label class="control-label col-md-5"> |
| 188 | - <span class="required"> * </span> 高峰下行停站间隙: | |
| 188 | + <span class="required"> * </span> 高峰下行停站时间: | |
| 189 | 189 | </label> |
| 190 | 190 | <div class="col-md-5"> |
| 191 | 191 | <input type="text" class="form-control" name="gfdownStopTime" id="gfdownStopTimeInput" |
| 192 | - placeholder="请输入高峰下行停站间隙"> | |
| 192 | + placeholder="请输入高峰下行停站时间"> | |
| 193 | 193 | </div> |
| 194 | 194 | </div> |
| 195 | - <!-- 高峰下行停站间隙 (* 必填项) END --> | |
| 195 | + <!-- 高峰下行停站时间 (* 必填项) END --> | |
| 196 | 196 | </div> |
| 197 | 197 | <!-- 表单分组组件 form-group END --> |
| 198 | 198 | |
| 199 | 199 | <!-- 表单分组组件 form-group START --> |
| 200 | 200 | <div class="form-group"> |
| 201 | - <!-- 低谷上行停站间隙(* 必填项) START --> | |
| 201 | + <!-- 低谷上行停站时间(* 必填项) START --> | |
| 202 | 202 | <div class="col-md-6"> |
| 203 | 203 | <label class="control-label col-md-5"> |
| 204 | - <span class="required"> * </span> 低谷上行停站间隙: | |
| 204 | + <span class="required"> * </span> 低谷上行停站时间: | |
| 205 | 205 | </label> |
| 206 | 206 | <div class="col-md-5"> |
| 207 | - <input type="text" class="form-control" name="dgupStopTime" id="dgupStopTimeInput" placeholder="请输入低谷上行停站间隙"> | |
| 207 | + <input type="text" class="form-control" name="dgupStopTime" id="dgupStopTimeInput" placeholder="请输入低谷上行停站时间"> | |
| 208 | 208 | </div> |
| 209 | 209 | </div> |
| 210 | - <!-- 低谷上行停站间隙(* 必填项) END --> | |
| 210 | + <!-- 低谷上行停站时间(* 必填项) END --> | |
| 211 | 211 | |
| 212 | - <!-- 低谷下行停站间隙(* 必填项) START --> | |
| 212 | + <!-- 低谷下行停站时间(* 必填项) START --> | |
| 213 | 213 | <div class="col-md-6"> |
| 214 | 214 | <label class="control-label col-md-5"> |
| 215 | - <span class="required"> * </span> 低谷下行停站间隙: | |
| 215 | + <span class="required"> * </span> 低谷下行停站时间: | |
| 216 | 216 | </label> |
| 217 | 217 | <div class="col-md-5"> |
| 218 | 218 | <input type="text" class="form-control" name="dgdownStopTime" id="dgdownStopTimeInput" |
| 219 | - placeholder="请输入低谷下行停站间隙"> | |
| 219 | + placeholder="请输入低谷下行停站时间"> | |
| 220 | 220 | </div> |
| 221 | 221 | </div> |
| 222 | - <!-- 低谷停站间隙 (* 必填项) END --> | |
| 222 | + <!-- 低谷停站时间 (* 必填项) END --> | |
| 223 | +</div> | |
| 224 | +<!-- 表单分组组件 form-group END --> | |
| 225 | + | |
| 226 | +<!-- 表单分组组件 form-group START --> | |
| 227 | +<div class="form-group"> | |
| 228 | + <!-- 低谷最大发车间隙(* 必填项) START --> | |
| 229 | + <div class="col-md-6"> | |
| 230 | + <label class="control-label col-md-5"> | |
| 231 | + <span class="required"> * </span> 低谷最大发车间隙: | |
| 232 | + </label> | |
| 233 | + <div class="col-md-5"> | |
| 234 | + <input type="text" class="form-control" name="dgmaxfcjx" id="dgmaxfcjxInput" placeholder="请输入低谷最大发车间隙"> | |
| 235 | + </div> | |
| 236 | + </div> | |
| 237 | + <!-- 低谷最大发车间隙(* 必填项) END --> | |
| 238 | + | |
| 239 | + <!-- 低谷最大停站时间(* 必填项) START --> | |
| 240 | + <div class="col-md-6"> | |
| 241 | + <label class="control-label col-md-5"> | |
| 242 | + <span class="required"> * </span> 低谷最大停站时间: | |
| 243 | + </label> | |
| 244 | + <div class="col-md-5"> | |
| 245 | + <input type="text" class="form-control" name="dgmaxtzsj" id="dgmaxtzsjInput" | |
| 246 | + placeholder="请输入低谷最大停站时间"> | |
| 247 | + </div> | |
| 248 | + </div> | |
| 249 | + <!-- 低谷停站时间 (* 必填项) END --> | |
| 223 | 250 | </div> |
| 224 | 251 | <!-- 表单分组组件 form-group END --> |
| 225 | 252 | |
| ... | ... | @@ -523,9 +550,14 @@ |
| 523 | 550 | <div class="col-md-6 "> |
| 524 | 551 | <label class="control-label col-md-5"><span class="required"> * </span>班型/人次/车辆 :</label> |
| 525 | 552 | <div class="col-md-5 tagsDiv"> |
| 526 | - <input type="text" value="" name="bxrc" id="state_tagsinput" style="display: none;"> | |
| 527 | - <div class="margin-top-10"> | |
| 528 | - <select class="form-control" id="state_tagsinput_bctype"> | |
| 553 | + <div class="row" style="margin-left: 15px;"> | |
| 554 | + <input type="text" value="" name="bxrc" id="state_tagsinput" style="display: none;"> | |
| 555 | + </div> | |
| 556 | + | |
| 557 | + <div class="row" style="margin-top: 10px;"> | |
| 558 | + <label class="control-label col-md-4">工休类型 :</label> | |
| 559 | + <div class="col-md-8"> | |
| 560 | + <select class="form-control" id="state_tagsinput_bctype"> | |
| 529 | 561 | <option value="">请选择工休类型...</option> |
| 530 | 562 | <option value="六工一休">六工一休</option> |
| 531 | 563 | <option value="五工一休">五工一休</option> |
| ... | ... | @@ -536,14 +568,31 @@ |
| 536 | 568 | <option value="一工一休">一工一休</option> |
| 537 | 569 | <option value="无工休">无工休</option> |
| 538 | 570 | </select> |
| 571 | + </div> | |
| 572 | + </div> | |
| 573 | + | |
| 574 | + <div class="row" style="margin-top: 10px;"> | |
| 575 | + <label class="control-label col-md-4">分配人次数:</label> | |
| 576 | + <div class="col-md-8"> | |
| 577 | + <input type="number" class="form-control" placeholder="请输入分配人次数" id="state_tagsinput_rcsvalue" min="1"> | |
| 578 | + </div> | |
| 539 | 579 | </div> |
| 540 | - <div class="margin-top-10"> | |
| 541 | - <input type="number" class="form-control" placeholder="请输入分配人次数" id="state_tagsinput_rcsvalue" min="1"> | |
| 580 | + | |
| 581 | + <div class="row" style="margin-top: 10px;"> | |
| 582 | + <label class="control-label col-md-4">分配车辆数:</label> | |
| 583 | + <div class="col-md-8"> | |
| 584 | + <input type="number" class="form-control" placeholder="请输入分配车辆数" id="state_tagsinput_clsvalue" min="1"> | |
| 585 | + </div> | |
| 542 | 586 | </div> |
| 543 | - <div class="margin-top-10"> | |
| 544 | - <input type="number" class="form-control" placeholder="请输入分配车辆数" id="state_tagsinput_clsvalue" min="1"> | |
| 587 | + | |
| 588 | + <div class="row" style="margin-top: 10px;"> | |
| 589 | + <label class="control-label col-md-4">日平均工时:</label> | |
| 590 | + <div class="col-md-8"> | |
| 591 | + <input type="number" class="form-control" placeholder="请输入日平均工时" id="state_tagsinput_gsavgvalue" min="1"> | |
| 592 | + </div> | |
| 545 | 593 | </div> |
| 546 | - <div class="margin-top-10"> | |
| 594 | + | |
| 595 | + <div class="row" style="margin-top: 10px;margin-left: 116px;"> | |
| 547 | 596 | <a href="javascript:;" class="btn red" id="state_tagsinput_add">添加</a> |
| 548 | 597 | </div> |
| 549 | 598 | </div> |
| ... | ... | @@ -710,43 +759,65 @@ |
| 710 | 759 | |
| 711 | 760 | <!-- 表单分组组件 form-group START --> |
| 712 | 761 | <div class="form-group"> |
| 713 | - <!-- 高峰上行停站间隙(* 必填项) START --> | |
| 762 | + <!-- 高峰上行停站时间(* 必填项) START --> | |
| 714 | 763 | <div class="col-md-6"> |
| 715 | - <label class="control-label col-md-5"> 高峰上行停站间隙: </label> | |
| 764 | + <label class="control-label col-md-5"> 高峰上行停站时间: </label> | |
| 716 | 765 | <div class="col-md-4"> |
| 717 | 766 | <p class="form-control-static" data-display="gfupStopTime"> </p> |
| 718 | 767 | </div> |
| 719 | 768 | </div> |
| 720 | - <!-- 高峰上行停站间隙(* 必填项) END --> | |
| 721 | - <!-- 高峰下行停站间隙(* 必填项) START --> | |
| 769 | + <!-- 高峰上行停站时间(* 必填项) END --> | |
| 770 | + <!-- 高峰下行停站时间(* 必填项) START --> | |
| 722 | 771 | <div class="col-md-6"> |
| 723 | - <label class="control-label col-md-5"> 高峰下行停站间隙: </label> | |
| 772 | + <label class="control-label col-md-5"> 高峰下行停站时间: </label> | |
| 724 | 773 | <div class="col-md-4"> |
| 725 | 774 | <p class="form-control-static" data-display="gfdownStopTime"> </p> |
| 726 | 775 | </div> |
| 727 | 776 | </div> |
| 728 | - <!-- 高峰下行停站间隙(* 必填项) END --> | |
| 777 | + <!-- 高峰下行停站时间(* 必填项) END --> | |
| 729 | 778 | </div> |
| 730 | 779 | <!-- 表单分组组件 form-group END --> |
| 731 | 780 | |
| 732 | 781 | <!-- 表单分组组件 form-group START --> |
| 733 | 782 | <div class="form-group"> |
| 734 | - <!-- 低谷上行停站间隙(* 必填项) START --> | |
| 783 | + <!-- 低谷上行停站时间(* 必填项) START --> | |
| 735 | 784 | <div class="col-md-6"> |
| 736 | - <label class="control-label col-md-5"> 低谷上行停站间隙: </label> | |
| 785 | + <label class="control-label col-md-5"> 低谷上行停站时间: </label> | |
| 737 | 786 | <div class="col-md-4"> |
| 738 | 787 | <p class="form-control-static" data-display="dgupStopTime"> </p> |
| 739 | 788 | </div> |
| 740 | 789 | </div> |
| 741 | - <!-- 低谷上行停站间隙(* 必填项) END --> | |
| 742 | - <!-- 低谷下行停站间隙(* 必填项) START --> | |
| 790 | + <!-- 低谷上行停站时间(* 必填项) END --> | |
| 791 | + <!-- 低谷下行停站时间(* 必填项) START --> | |
| 743 | 792 | <div class="col-md-6"> |
| 744 | - <label class="control-label col-md-5"> 低谷下行停站间隙: </label> | |
| 793 | + <label class="control-label col-md-5"> 低谷下行停站时间: </label> | |
| 745 | 794 | <div class="col-md-4"> |
| 746 | 795 | <p class="form-control-static" data-display="dgdownStopTime"> </p> |
| 747 | 796 | </div> |
| 748 | 797 | </div> |
| 749 | - <!-- 低谷下行停站间隙(* 必填项) END --> | |
| 798 | + <!-- 低谷下行停站时间(* 必填项) END --> | |
| 799 | +</div> | |
| 800 | +<!-- 表单分组组件 form-group END --> | |
| 801 | + | |
| 802 | +<!-- 表单分组组件 form-group START --> | |
| 803 | +<div class="form-group"> | |
| 804 | + <!-- 低谷最大发车间隙(* 必填项) START --> | |
| 805 | + <div class="col-md-6"> | |
| 806 | + <label class="control-label col-md-5"> 低谷最大发车间隙: </label> | |
| 807 | + <div class="col-md-4"> | |
| 808 | + <p class="form-control-static" data-display="dgmaxfcjx"> </p> | |
| 809 | + </div> | |
| 810 | + </div> | |
| 811 | + <!-- 低谷最大发车间隙(* 必填项) END --> | |
| 812 | + | |
| 813 | + <!-- 低谷最大停站时间(* 必填项) START --> | |
| 814 | + <div class="col-md-6"> | |
| 815 | + <label class="control-label col-md-5"> 低谷最大停站时间: </label> | |
| 816 | + <div class="col-md-4"> | |
| 817 | + <p class="form-control-static" data-display="dgmaxtzsj"> </p> | |
| 818 | + </div> | |
| 819 | + </div> | |
| 820 | + <!-- 低谷最大停站时间(* 必填项) END --> | |
| 750 | 821 | </div> |
| 751 | 822 | <!-- 表单分组组件 form-group END --> |
| 752 | 823 | ... | ... |