NC拓展客开之业务插件注册

NC拓展客开之业务插件注册
在这里插入图片描述

package nc.bs.cmp.settlechange.listener;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;

import nc.bs.businessevent.IBusinessEvent;
import nc.bs.businessevent.IBusinessListener;
import nc.bs.businessevent.BdUpdateEvent;
import nc.bs.logging.Logger;
import nc.impl.pubapp.pattern.data.vo.VOQuery;
import nc.impl.pubapp.pattern.data.vo.VOUpdate;
import nc.vo.arap.pay.PayBillItemVO;
import nc.vo.cmp.settlement.SettlementAggVO;
import nc.vo.cmp.settlement.SettlementBodyVO;
import nc.vo.pub.BusinessException;

/**
 * 结算更改票据号同步付款单监听
 * @author Administrator
 *
 */
public class SettleChangeCheckNoChangeListener implements IBusinessListener{
	
	//付款单的单据类型编码
	private static String payBillTypeCode= "D3";

	@Override
	public void doAction(IBusinessEvent event) throws BusinessException {
	    //取得改变前和改变后的VO比较票据号是否进行了改变
		SettlementAggVO newObj=null;
		SettlementAggVO oldObj=null;
	    if(event instanceof BdUpdateEvent ) {
	    	//获取修改前VO
	    	oldObj= (SettlementAggVO)((BdUpdateEvent) event).getOldObject();
	    	//获取修改后VO
	    	newObj = (SettlementAggVO)((BdUpdateEvent) event).getNewObject();
	    }
		if(newObj==null) {
			return;
		}
		
		//挑出来源单据类型为付款单的单据行<付款单表体主键,[票据号,票据类型]>
		//add 付款原币金额 pay, pk_balatype 结算方式  
		Map<String,String[]> newObjIdToCheckMap = new HashMap<String,String[]>();
		List<String> queryPayBillBodyIds = new ArrayList<String>();
		SettlementBodyVO[] bodys = (SettlementBodyVO[])newObj.getChildrenVO();
		for(SettlementBodyVO body:bodys){
				if(!payBillTypeCode.equals(body.getPk_billtype()))
					continue;
				String[] strs = new String[4];
				//票据号 
				strs[0]= body.getNotenumber();
				//票据类型
				strs[1]=body.getPk_notetype();
				//票据金额
				strs[2]= body.getPay().toString();
				//结算方式
				strs[3]= body.getPk_balatype();
				newObjIdToCheckMap.put(body.getPk_billdetail(), strs);
				queryPayBillBodyIds.add(body.getPk_billdetail());
			}
		if(queryPayBillBodyIds.size()<1) {
			return;
		}
	    //将结算单表体的票据号和票据类型与付款单表体进行比较,不同则更新
	    List<PayBillItemVO> needUpdateBodys = new ArrayList<PayBillItemVO>();
		VOQuery<PayBillItemVO> query = new VOQuery<PayBillItemVO>(PayBillItemVO.class, new String[]{"pk_payitem","checkno","checktype","pk_balatype","money_de"});
		PayBillItemVO[] payBillItemVos=query.query(queryPayBillBodyIds.toArray(new String[0]));
		for(PayBillItemVO payBillItemVo:payBillItemVos) {
			String[] values =  newObjIdToCheckMap.get(payBillItemVo.getPk_payitem());
			/*
			 * edit by xuchong 2020-12-17
			 * 增加校验金额条件
			 * */
			if(StringUtils.equals(payBillItemVo.getCheckno(), values[0]) 
					&& StringUtils.equals(payBillItemVo.getChecktype(), values[1])) {
				continue;
			}else {
				Logger.error("票号,票据类型不一致 执行修改操作");
				Logger.error("结算单数组 票据号:"+values[0]+" 票据类型:"+values[1]+" 票据金额:"+values[2]+" 结算方式:"+values[3]);
				payBillItemVo.setAttributeValue(PayBillItemVO.CHECKNO, values[0]);
				payBillItemVo.setAttributeValue(PayBillItemVO.CHECKTYPE, values[1]);
				//增加更新条件 结算方式=银企直联(1001S91000000012LWHM) 则将结算单的 金额 更新->付款单 金额
				if("1001S91000000012LWHM".equals(values[3])){
					payBillItemVo.setAttributeValue(PayBillItemVO.MONEY_DE, values[2]);
				}
				Logger.error("修改后的付款单 MONEY_DE:"+payBillItemVo.getMoney_de());
				needUpdateBodys.add(payBillItemVo);
			}
		}
		if(needUpdateBodys.size()>0) {
			VOUpdate<PayBillItemVO> voupdate = new VOUpdate<PayBillItemVO>();
			voupdate.update(needUpdateBodys.toArray(new PayBillItemVO[0]),new String[] {"checktype","checkno"});	
		}
	}

}


原文链接:https://blog.csdn.net/Cc_Rain0624/article/details/111314762

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值