进行批量操作-审核或弃审

1.我们使用的很多软件都会有批量操作的功能,选中多个复选框,然后点击按钮进行批量操作。如下图所示:


 


2.绑定click事件,首先需要判断是否选中,是否是结账状态,是否审核,如果都符合那么获得选中的凭证id date num,放入到数组中去


//批量审核
$(".allcheck").on("click",function(){
	var _child = $(".check_list_table_container").children();
	var _arr=[];
	//选中否
	var _num = 0;
	//结账否
	var _flagNum=0;
	//审核否
	var _checkNum=0;
	_child.each(function(){
		var _checked = $(this).find(".dd").prop("checked");
		if(_checked){
			_num = _num+1;
			var _flag = $(this).attr("flag");
			if(_flag=="true"){
				_flagNum+=1;
			}
			var _checkN = $(this).find(".operate_left .li_state").html();
			if(_checkN=="已审核"){
				_checkNum+=1;
			}
		}
	});
	//判断至少有一个凭证被选中
	if(_num<1){
		alert("请至少选中一个凭证!");
		return;
	}
	//如果已经结账的话则不能进行批审
	if(_flagNum>0){
		alert("结账状态不能进行批审操作!");
		return;
	}
	//如果已经审核的话则不能批审
	if(_checkNum>0){
		alert("已审核状态不能进行批审操作");
		return;
	}
	
	//所有的判断之后:进行批审操作
	_child.each(function(){
		var _checked = $(this).find(".dd").prop("checked");
		if(_checked){
			var _pzid2 = $(this).find(".operate_right").attr("name");
			var _date = $(this).find(".operate_left").attr("name");
			var _pzNum = $(this).find(".operate_right").children(":last").attr("name");
			_arr.push(_pzid2,_date,_pzNum);
		}
	});	
	
	//调用批审方法
	checkBtn2(_arr);
	
});

3.批审的方法需要将数组传递过来调用到后台进行处理:


//审核
function checkBtn2($arr){
	var token = $("#token").val();
	var AccountID = account_id;
	
	//将token保存到凭证表中
	var linkurl = "../../finance/voucher/voucherlist_updateList.zm?token="+token+"&AccountID="+AccountID;
	$.ajax({  
	    type:"GET", //请求类型        
	    url:linkurl,//请求路径  
	    dataType:"JSON",//预期服务器返回类型  
	    async:true,	    
	    data:{
	    	//将一个JavaScript值转换为一个JSON字符串
	    	"ids":JSON.stringify($arr)
	    },
	    //如果成功,回调函数  
	    success:function(data){
	    	alert("批审成功!");
	    	//页面改为相反的审核
	    	if(data!=null && data.Status==1 ){
	    		for(var k=0;k<$arr.length;k+=3){
	    			$("li[name="+$arr[k]+"]").html("已审核");
	    			var str="<li class=\"swipes\"><i class=\"iconfont\" οnclick=\"loseBtn('"+$arr[k]+"','"+$arr[k+1]+"','"+$arr[k+2]+"');\"></i>弃审</li>";
	    			$("ul[name="+$arr[k]+"]").html(str)
	    		}
	    	}
	    	//把checkbox前的勾去掉
	    	$(".table_header .table_check").find("#checkall").prop("checked",false);
	    	$(".check_list_table_container").children().find(".dd").prop("checked",false);
	    	$(".check_list_table_container .table_form").css("borderColor","#f2f2f2");
	    }
	});
}

因为数组无法传递到后台,所以需要将数据通过JSON.stringify()方法将数组变为json字符串传递


当审批成功之后将需要显示的内容进行拼接string,找到对应的id.html拼接在页面上显示


4.在后台中将ids中的id遍历保存在list集合中,然后再凭证中和凭证分录中分别update审核人名称。


因为凭证头和凭证分路的修改是同步的,所以使用到事务。


//批量操作——审批通过
public void updateList() {
	initData();
	
	String token = request.getParameter("token");
	AccountID = request.getParameter("AccountID");
	//获取ids的JSONArray格式
	String arr= request.getParameter("ids");
	JSONArray array = JSONArray.fromObject(arr);
	
	//三个为一组,每个的第一个都是id,遍历到list集合中去
	List<Object> list = new ArrayList<Object>();
	int i=0;
	for (Object object : array) {
	if(i%3==0){
		list.add(object);
	        }
	     i++;
	}
	
	//获取审核人
	String checkName = UserwebService.decodeToken(token);
	JSONObject nameObject = JSONObject.fromObject(checkName);
	JSONObject resultObject = nameObject.getJSONObject("result");
	String cName = (String) resultObject.get("TName");
	
	//获取凭证分录管理器
	CPZMgr pzMgr = Global.GetFinance(AccountID).getPZMgr();
	CPZDefMgr pzdefMgr = Global.GetFinance(AccountID).getPZDefMgr();
	//遍历保存
	for(int j=0;j<list.size();j++){
		//根据凭证头ID获取凭证分录
		List<CBaseObject> pzList = pzMgr.GetList(" Acct_PZDef_id = '"+list.get(j)+"' ");
		//循环将审核人名称保存到凭证表中
		for (CBaseObject cBaseObject : pzList) {
			CPZ pz= (CPZ)cBaseObject;
			//审核人从其他接口进行获取
			pz.setSHR(cName);
			pzMgr.Update(pz);
		}
		//将审核人保存在凭证头中
		CPZDef pzdef = (CPZDef)pzdefMgr.Find(Util.GetUUID(list.get(j).toString()));
		pzdef.setSHR(cName);
		pzdefMgr.Update(pzdef);
	}
		
	JSONObject retJson = new JSONObject();
	try {
        	DB db = pzMgr.Ctx.getMainDB();
        	db.BeginTransaction();
        	//只要有一个没有保存则取消保存,审核失败
	        if (!pzMgr.Save() || !pzdefMgr.Save())
	        {
	        	db.RollbackTransaction();
	        	pzMgr.Cancel();
	        	pzdefMgr.Cancel();
	        	
	        	retJson.put("Status", 0);
				retJson.put("Err", "审核失败!");
				this.returnAjax(retJson.toString());
				return;
	        }
	        //否则审核成功,提交事务
	        retJson.put("Status", 1);
			retJson.put("Err", "审核成功!");
	        db.CommitTransaction();
	        pzMgr.Commit();
	        pzdefMgr.Commit();
	        this.returnAjax(retJson.toString());
		} catch (SQLException e) {
			e.printStackTrace();
			retJson.put("Status", 0);
			retJson.put("Err", "审核失败!");
			this.returnAjax(retJson.toString());
			return;
		}
	}

小结:


批量操作虽然比较简单,但也是最常用到的一个功能,一方面是数组的传递,一方面是事务的使用,思路对了,做起来也就自然对了。


  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值