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