bctz.html 12.4 KB
<!-- 调整班次 -->
<div class="modal fade" id="tzbc_mobal" tabindex="-1" role="basic" aria-hidden="true">
	<div class="modal-dialog">
		<div class="modal-content">
			<div class="modal-header">
				<button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
				<h4 class="modal-title">调整班次</h4>
			</div>
			<div class="modal-body">
				<form class="form-horizontal" action="/" method="post" id="tzbcForm" role="form">
					<!-- alert-danger 组件START -->
					<div class="alert alert-danger display-hide" id="tzbcAlert">
						<button class="close" data-close="alert"></button>
							您的输入有误,请检查下面的输入项
					</div>
					<div class="portlet-body">
						<div class="table-container" style="margin-top: 10px">
							<table class="table table-striped table-bordered table-hover table-checkable" id="datatable_bctz">
								<thead>
									<tr role="row" class="heading">
										<th width="25%">路牌编码</th>
										<th width="25%">路牌名称</th>
										<th width="25%">当前班次数</th>
										<th width="25%">调整班次数</th>
									</tr>
								</thead>
								<tbody></tbody>
							</table>
						</div>
					</div>
			    </form>
			</div>
			<div class="modal-footer">
				<button type="button" class="btn default" data-dismiss="modal">取消</button>
				<button type="button" class="btn btn-primary" id="tzbcnext">确定</button>
			</div>
		</div>
	</div>
</div>
<script type="text/html" id="bctz_temp">
{{each list as obj i }}
	<tr role="row" class="filter">
		<td>
			<input type="text" readonly  class="form-control form-filter input-sm" name="lpno_{{i+1}}" value="{{obj.lpNo}}">
		</td>
		<td>
			<input type="text" readonly  class="form-control form-filter input-sm" name="lpname_{{i+1}}" value="{{obj.lpName}}">
		</td>
		<td>
			<input type="text" readonly class="form-control form-filter input-sm" name="dqbc_{{i+1}}" value="{{obj.bcs}}">
		</td>
		<td>
			<input type="number" class="form-control form-filter input-sm" name="{{i+1}}" value="{{obj.bcs}}" min="0">
		</td>
	</tr>
{{/each}}
{{if list.length == 0}}
		<tr>
			<td colspan=3><h6 class="muted">没有找到相关数据</h6></td>
		</tr>
	{{/if}}
</script>
<script type="text/javascript">
$('#tzbc_mobal').on('tzbcMobal.show', function(e,obj,cardata,bf,error){
	if(obj != null && obj !='' && bf != null && bf!='' && cardata.length>0){
		// 延迟200毫秒显示mobal
		setTimeout(function(){$('#tzbc_mobal').modal({show : true,backdrop: 'static', keyboard: false});},200);
		// 当模态框对用户可见时触发(将等待 CSS 过渡效果完成)。
		$('#tzbc_mobal').on('show.bs.modal', function () {
			// 把数据填充到模版中
			var tbodyHtml = template('bctz_temp',{list:cardata});
			// 把渲染好的模版html文本追加到表格中
			$('#datatable_bctz tbody').html(tbodyHtml);
		});
		// 获取表单元素
		var form = $('#tzbcForm');
		// 错误提示元素
		var tzbcAlert = $('#tzbcAlert', form);
		// 下一步点击事件
		$('#tzbcnext').on('click', function() {
			form.submit();// 表单提交
		});
		// 表单验证
		form.validate({
			errorElement : 'span', 
			errorClass : 'help-block help-block-error', 
			focusInvalid : false, 
			rules : {
			},
			invalidHandler : function(event, validator) {  
				tzbcAlert.show();
				App.scrollTo(reladplusname, -200);
			},
			highlight : function(element) { 
				$(element).closest('.form-group').addClass('has-error'); 
			},
			unhighlight : function(element) { 
				$(element).closest('.form-group').removeClass('has-error'); 
			},
			success : function(label) {
				label.closest('.form-group').removeClass('has-error'); 
			},
			submitHandler : function(f) {
				// 1、 获取表单内容,并序列化
				var params = form.serializeJSON();
				var dataMap = obj.configuration.dataMap;
				// 2、 调整路牌对应的班次总数
				updFormParams(params);
				// 3、调整班次.并重新给定班次序号和发车序号.再确定首末班车时间.最后渲染数据.
				var jar = bf.tzsmbcsj01(bf.setbcsAndfcno(tzbcDate()),
								  obj.configuration.dataMap.smbcsjArr,
								  obj.configuration.dataMap.ccsjArr,
								  obj.configuration.dataMap.cclcArr,
								  obj.configuration.dataMap.qdzArr,
								  obj.configuration.dataMap.lbsj,dataMap);
				obj.data(bf.addjcclcbc01(obj.configuration.taskTypes,jar,dataMap,
							obj.configuration.stopAraay,obj.configuration.dataMap.map));
				// 3、记录早操.并保存历史班次数据
				obj.addHistory();
				// 5、隐藏错误提示
				tzbcAlert.hide();
				// 6、隐藏 reladplus_mobal 弹出层 
				$('#tzbc_mobal').modal('hide');
			}
		});
		
		/**
		 * @description : (TODO) 调整路牌对应的班次总数.
		 *
		 *				    ❀  根据路牌对应班次的数值,把路牌对应的当前班次总数修改成调整后的班次总数,并转为数值类型以及把空值转为0.
		 * 
		 * @params : [p--表单序列化对象].
		 */
		function updFormParams(p) {
			for(var i= 0;i<cardata.length;i++) {
				if(p[i+1] != undefined) {
					if(p[i+1]=='')
						cardata[i].tzbc = 0;
					else 
						cardata[i].tzbc = parseInt(p[i+1]);
				}
			}
		}
		
		/**
		 * @description : (TODO)调整班次.
		 *
		 * @return : 返回一个数组.这里返回的是一个调整完班次数后的数组.
		 */
		function tzbcDate() {
			 // 1、获取当前所有的班次数.
			 var dr = obj.getDataArray(),
			 	 result = new Array();// 定义返回数组对象.
			 // 2、遍历路牌对应的班次总数.
			 for(var i = 0 ; i<cardata.length;i++) {
				 var zcbcsz = new Array(),// 定义当前路牌下的正常班次数组.
				 	 zwlbbcsz = new Array(),// 定义当前路牌下的早晚例保、吃饭班次数组.
				 	 jccbcs = 0,// 进出场班次数.这个值是为了计算总班次数时除去时间为空的班次
				 	 jccbcsz = new Array();// 定义当前路牌下的进出场班次数组.
				 // 3、遍历当前所有的班次数.
				 for(var j = 0 ;j<dr.length;j++) {
					 // 4、判断当前遍历的班次是否属于当前路牌对应的班次数组对象.
					 if(cardata[i].lpNo == dr[j].parent && dr[j].bcsj>0 ){
						 // 5、把当前班次添加到上序定义的不同班次数组中.
						 if(dr[j].bcType =='bd' || dr[j].bcType=='lc' || dr[j].bcType =='cf')
							 zwlbbcsz.push(dr[j]);// 添加到早晚例保、吃饭班次数组中.
						 else if(dr[j].bcType=='in' || dr[j].bcType =='out')
							 jccbcs++;
						 else
							 zcbcsz.push(dr[j]);// 添加到正常班次数组.
					 }
					 if(cardata[i].lpNo == dr[j].parent && (dr[j].bcType=='in' || dr[j].bcType =='out')) {
						 jccbcsz.push(dr[j]);// 添加到进出场班次数组中.
					 }
				 }
				 // 6、调整班次
				 result = result.concat(tcbcgz(bf.pxarr(zcbcsz),cardata[i].tzbc,zwlbbcsz,bf.pxarr(jccbcsz),jccbcs,cardata[i]));
			}
			return result;
		}
		
		/**
		 * @description : (TODO)
		 *
		 * @params : [ar-- 当前路牌下的正常班次数组;num--当前路牌对应的班次总数;qa--当前路牌下的早晚例保、吃饭班次数组,ja--当前路牌下的进出场班次数组]
		 *
		 * @return : 返回一个数组.这里返回一个根据班次总数调整过车班次数组
		 */
		function tcbcgz(ar,num,qa,ja,jccbcs,cara) {
			 var rsbcA = new Array();
			 if(ar.length>0) {
				 var ra_ = new Array();
				 var _dx = num-jccbcs;// 班次总数值 - 进出时间大于零的班次 = 正常班次数
				 var lastbcsjStr = ar[ar.length-1].ARRIVALTIME;// 标记调整班次之前最后一个班次的达到时间
				 var fcno_ = Math.abs(ar.length+jccbcs-num),// 调整班次差
					 tempS = '';// 标记调整班次是添加还是剔除[jq--剔除;add--添加]
				 var fxdm = bf.dirDmToIndex(ar[ar.length-1].xlDir);// 标记调整班次之前最后一个班次的方向
				 // 如果调整班次差是成对的,那么方向一致.否则改变方向
				 if(fcno_%2!=0)
					 fxdm =  bf.getfx(1,fxdm);// 改变方向
				 // 如果当前路牌的班次总数大于等	于调整后的班次总数则截取班次,反之添加班次
				 if(ar.length>=_dx) {
					 ra_ = ar.splice(0,_dx);// 截取班次数(这里从下标0开始截取到 对应的班次总数值)
					 tempS = 'jq';
				 }else if(ar.length<_dx) {
					 var sh = ar[ar.length-1];
					 var cctag = bf.dirDmToIndex(ar[ar.length-1].xlDir);// 标记调整班次之前最后一个班次的方向
					 cctag =  bf.getfx(1,cctag);// 改变方向
					 var startTime = new Date();
					 var strArray = sh.ARRIVALTIME.split(':');
					 startTime.setHours(parseInt(strArray[0]));
					 startTime.setMinutes(parseInt(strArray[1]));
					 var tzjx =  bf.isgfsjd01(startTime,obj.configuration.dataMap) ?  obj.configuration.dataMap.gftzsj[cctag] : obj.configuration.dataMap.dgtzsj[cctag];
					 startTime.setMinutes(parseInt(strArray[1]) + tzjx);
					 bf.addbc(obj , sh , startTime , tzjx, (sh.fcno + 1),ar, (_dx - ar.length));
					 ra_ = ar;
					tempS = 'add';
				 } 
				 // rsbcA =  tzsj(ra_,qa,ja,lastbcsjStr,fcno_,tempS,fxdm);
				 rsbcA = ra_;
			 }else if(ar.length==0) {
				 rsbcA =  bf.addlpbc(obj,bf,cara.lpNo,num);
			 }
			 return rsbcA;
		 }
		
		/**
		 * @description : (TODO) 调整时间
		 *
		 * @params : [a1-- 当前路牌下的正常班次数组;a2--当前路牌下的早晚例保、吃饭班次数组;a3--当前路牌下的进出场班次数组]
		 * 
		 * @return : 返回一个数组.这里返回的是一个调整时间后的班次数组
		 */
		function tzsj(a1,a2,a3,sjstr,fcno_,tempS,fxdm) {
			return a1.concat(jsjclc(a1[a1.length-1].ARRIVALTIME,a2,a3,sjstr,fcno_,tempS,fxdm));
		}
		
		/**
		 * @description : (TODO)调整进出场、离场班次
		 *
		 * @params : [st--当前路牌最后一个班次的到达时间;ar--当前路牌下的早晚例保、吃饭班次数组,pa--当前路牌下的进出场班次数组]
		 *
		 * @return
		 */
		 function jsjclc(st,ar,pa,sjstr,fcno_,tempS,fxdm) {
			 // 1、修改进出场班次.
			 for(var p = 0;p<pa.length;p++) {
				// A)、如果当前班次的发车时间等于 在没有调整班次总数之前的最后一个班次的到达时间,则这个班次是在没有调整班次之前的那个进场班次
				if(pa[p].fcsj == sjstr && pa[p].bcType =='in') {
					pa[p].fcsj = st;
					pa[p].bcsj = obj.configuration.dataMap.ccsjArr[fxdm];
					pa[p].xlDir = obj.configuration.dataMap.dira[fxdm];
					var _s = bf.getDateTime(st);
					var _tt = new Date(_s);
					_tt.setMinutes(_tt.getMinutes()+pa[p].bcsj);
					var ddsjStr = bf.getTimeStr(_tt);
					pa[p].ARRIVALTIME = ddsjStr;
					if(tempS =='add')
						pa[p].fcno = pa[p].fcno+fcno_;
					else if(tempS =='jq')
						pa[p].fcno = pa[p].fcno-fcno_;
				}
				// B)、剔除掉 当前班次的到达时间大于调整班次过后最后一个班次到达时间的班次
				if((bf.getDateTime(pa[p].ARRIVALTIME)-bf.getDateTime(st))/60000 > pa[p].bcsj) {
					console.log('{' + pa[p].lpNo + '----' + pa[p].ARRIVALTIME + '----' +  st +  '}');
					console.log('修改进出场班次时...该班次的到达时间大于了最后一个班次的到达时间,应该剔除掉!');
					pa.splice(p,1);
				} 
			}
			// 2、修改晚例保班次.
			for(var i = 0 ; i<ar.length;i++) {
				// A)、修改离场班次属性值
				if(ar[i].bcType=='lc') {
					ar[i].fcsj =  ddsjStr;
					ar[i].xlDir = obj.configuration.dataMap.dira[fxdm];
					var _lcs = bf.getDateTime(ddsjStr);
					var _lctt = new Date(_lcs);
					_lctt.setMinutes(_lctt.getMinutes()+ar[i].bcsj);
					ar[i].ARRIVALTIME = bf.getTimeStr(_lctt);
					if(tempS =='add')
						ar[i].fcno = ar[i].fcno+fcno_;
					else if(tempS =='jq')
						ar[i].fcno = ar[i].fcno-fcno_;
				}
				// B)、剔除掉 当前班次的到达时间大于调整班次过后最后一个班次到达时间的班次
				if(bf.getDateTime(ar[i].ARRIVALTIME)>bf.getDateTime(st) && ar[i].bcType!='lc') {
					console.log('{' + ar[i].lpNo + '----' + ar[i].ARRIVALTIME + '----' +  st +  '}')
					console.log('修改晚例保班次时...该班次的到达时间大于了最后一个班次的到达时间,应该剔除掉!');
					ar.splice(i,1);
				}
			}
			// 3、合并进出场、例保班次,并返回.
			return pa.concat(ar);
		 }
	} else{
		error.show('参数异常!','【 obj:' + obj + ' , cardata:' + cardata + ' , bf:' + bf + '】');
	}
});
</script>