140 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			140 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			Java
		
	
	
	
package tqq9.lc123.cloud.app.plugin.operate.cas;
 | 
						||
 | 
						||
import kd.bos.dataentity.entity.DynamicObject;
 | 
						||
import kd.bos.dataentity.entity.DynamicObjectCollection;
 | 
						||
import kd.bos.entity.ExtendedDataEntity;
 | 
						||
import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
 | 
						||
import kd.bos.entity.plugin.AddValidatorsEventArgs;
 | 
						||
import kd.bos.entity.plugin.args.AfterOperationArgs;
 | 
						||
import kd.bos.entity.validate.AbstractValidator;
 | 
						||
import kd.bos.logging.Log;
 | 
						||
import kd.bos.logging.LogFactory;
 | 
						||
import kd.bos.newdevportal.domaindefine.sample.validator.MyValidator;
 | 
						||
import kd.bos.orm.query.QCP;
 | 
						||
import kd.bos.orm.query.QFilter;
 | 
						||
import kd.bos.servicehelper.BusinessDataServiceHelper;
 | 
						||
import kd.bos.servicehelper.operation.SaveServiceHelper;
 | 
						||
import kd.sdk.plugin.Plugin;
 | 
						||
import tqq9.lc123.cloud.app.plugin.form.sys.RegistBillFactoryPlugin;
 | 
						||
 | 
						||
import java.math.BigDecimal;
 | 
						||
import java.util.HashMap;
 | 
						||
 | 
						||
/**
 | 
						||
 * 采购订单操作插件
 | 
						||
 * 1.校验器:校验本次结算金额
 | 
						||
 * 2.审核插件:反写本次结算金额
 | 
						||
 */
 | 
						||
public class PurOrderReversePayBillPlugin extends AbstractOperationServicePlugIn implements Plugin {
 | 
						||
    private final static Log logger = LogFactory.getLog(PurOrderReversePayBillPlugin.class);
 | 
						||
 | 
						||
    @Override
 | 
						||
    public void onAddValidators(AddValidatorsEventArgs e) {
 | 
						||
        super.onAddValidators(e);
 | 
						||
        e.addValidator(new UnSettleAmountValidator());
 | 
						||
    }
 | 
						||
 | 
						||
 | 
						||
    /**
 | 
						||
     * 采购订单操作插件
 | 
						||
     * 1.校验器:未结算金额大于0校验
 | 
						||
     * 2.审核插件:付款计划分录对应付款单的未结算金额转化为已结算金额
 | 
						||
     */
 | 
						||
    class UnSettleAmountValidator extends AbstractValidator {
 | 
						||
        @Override
 | 
						||
        public void validate() {
 | 
						||
            HashMap<String, BigDecimal> paybillMap = new HashMap();
 | 
						||
            for (ExtendedDataEntity dataEntity : this.getDataEntities()) {
 | 
						||
                String billno = dataEntity.getDataEntity().getString("billno");//采购订单单据号
 | 
						||
                //查询采购订单
 | 
						||
                DynamicObject purorderbill = BusinessDataServiceHelper.loadSingle("pm_purorderbill", new QFilter[]{new QFilter("billno", QCP.equals, billno)});
 | 
						||
                //获取付款计划分录
 | 
						||
                DynamicObjectCollection purbillentry_pay = purorderbill.getDynamicObjectCollection("purbillentry_pay");
 | 
						||
                for (DynamicObject dynamicObject : purbillentry_pay) {
 | 
						||
                    String tqq9_paybillno = dynamicObject.getString("tqq9_paybillno");//付款单单据编号
 | 
						||
                    BigDecimal tqq9_settleamount = dynamicObject.getBigDecimal("tqq9_settleamount");//本次结算金额
 | 
						||
                    BigDecimal payamount = dynamicObject.getBigDecimal("payamount");//付款金额
 | 
						||
                    if (tqq9_settleamount.compareTo(payamount) > 0) {
 | 
						||
                        this.addErrorMessage(dataEntity, "单据号:" + billno + "付款计划分录的付款单:" + tqq9_paybillno + "本次结算金额为大于付款金额,请修改");
 | 
						||
                    }
 | 
						||
 | 
						||
                    //查询付款单
 | 
						||
                    DynamicObject paybill = BusinessDataServiceHelper.loadSingle("cas_paybill", new QFilter[]{new QFilter("billno", QCP.equals, tqq9_paybillno)});
 | 
						||
                    if (paybill != null) {
 | 
						||
                        BigDecimal unsettleamount = paybill.getBigDecimal("unsettleamount");//未结算金额
 | 
						||
                        String paybillno = paybill.getString("billno");//未结算金额
 | 
						||
                        if (!paybillMap.containsKey(paybillno)) {
 | 
						||
                            if (unsettleamount.compareTo(tqq9_settleamount) < 0) {
 | 
						||
                                this.addErrorMessage(dataEntity, "单据号:" + billno + "付款计划分录的付款单:" + tqq9_paybillno + "未结算金额为小于本次结算金额,请修改");
 | 
						||
                            }
 | 
						||
                            paybillMap.put(paybillno, tqq9_settleamount);
 | 
						||
                        } else {
 | 
						||
                            BigDecimal total_tqq9_settleamount = paybillMap.get(paybillno);
 | 
						||
                            tqq9_settleamount=tqq9_settleamount.add(total_tqq9_settleamount);
 | 
						||
                            if (unsettleamount.compareTo(tqq9_settleamount) < 0) {
 | 
						||
                                this.addErrorMessage(dataEntity, "审核订单中付款计划针对付款单:"+paybillno+",本次结算金额总和为大于未结算金额,请修改");
 | 
						||
                            }
 | 
						||
                            paybillMap.put(paybillno, tqq9_settleamount);
 | 
						||
                        }
 | 
						||
                    }
 | 
						||
                }
 | 
						||
            }
 | 
						||
        }
 | 
						||
    }
 | 
						||
 | 
						||
 | 
						||
    @Override
 | 
						||
    public void afterExecuteOperationTransaction(AfterOperationArgs e) {
 | 
						||
        super.afterExecuteOperationTransaction(e);
 | 
						||
        DynamicObject[] dataEntities = e.getDataEntities();
 | 
						||
        for (DynamicObject dataEntity : dataEntities) {
 | 
						||
            String billno = dataEntity.getString("billno");
 | 
						||
            //查询采购订单
 | 
						||
            DynamicObject purorderbill = BusinessDataServiceHelper.loadSingle("pm_purorderbill", new QFilter[]{new QFilter("billno", QCP.equals, billno)});
 | 
						||
            //获取付款计划分录
 | 
						||
            DynamicObjectCollection purbillentry_pay = purorderbill.getDynamicObjectCollection("purbillentry_pay");
 | 
						||
            for (DynamicObject dynamicObject : purbillentry_pay) {
 | 
						||
                //付款单单据编号
 | 
						||
                String tqq9_paybillno = dynamicObject.getString("tqq9_paybillno");
 | 
						||
                BigDecimal tqq9_settleamount = dynamicObject.getBigDecimal("tqq9_settleamount");
 | 
						||
                //查询付款单
 | 
						||
                DynamicObject paybill = BusinessDataServiceHelper.loadSingle("cas_paybill", new QFilter[]{new QFilter("billno", QCP.equals, tqq9_paybillno)});
 | 
						||
                if (paybill != null) {
 | 
						||
                    //获取付款明细分录
 | 
						||
                    DynamicObjectCollection entries = paybill.getDynamicObjectCollection("entry");
 | 
						||
                    BigDecimal unsettleamount = BigDecimal.ZERO;//未结算金额
 | 
						||
                    BigDecimal unsettleamountbase = BigDecimal.ZERO;//未结算金额(本位币)
 | 
						||
                    BigDecimal settleamount = BigDecimal.ZERO;//已结算金额
 | 
						||
                    BigDecimal settleamountbase = BigDecimal.ZERO;//已结算金额(本位币)
 | 
						||
 | 
						||
                    for (DynamicObject entry : entries) {
 | 
						||
                        BigDecimal e_unsettledamt = entry.getBigDecimal("e_unsettledamt");//未结算金额
 | 
						||
                        BigDecimal e_unsettledlocalamt = entry.getBigDecimal("e_unsettledlocalamt");//未结算金额折本位币
 | 
						||
                        BigDecimal e_settledamt = entry.getBigDecimal("e_settledamt");//已结算金额
 | 
						||
                        BigDecimal e_settledlocalamt = entry.getBigDecimal("e_settledlocalamt");//已结算金额折本位币
 | 
						||
                        //分录未结算金额转化为已结算金额
 | 
						||
                        entry.set("e_unsettledamt", e_unsettledamt.subtract(tqq9_settleamount));//未结算金额
 | 
						||
                        entry.set("e_unlockamt", e_unsettledamt.subtract(tqq9_settleamount));//未锁定金额
 | 
						||
                        unsettleamount = unsettleamount.add(e_unsettledamt.subtract(tqq9_settleamount));
 | 
						||
                        entry.set("e_unsettledlocalamt", e_unsettledlocalamt.subtract(tqq9_settleamount));//未结算金额(本位币)
 | 
						||
                        unsettleamountbase = unsettleamountbase.add(e_unsettledlocalamt.subtract(tqq9_settleamount));
 | 
						||
                        entry.set("e_settledamt", e_settledamt.add(tqq9_settleamount));//已结算金额
 | 
						||
                        entry.set("e_lockamt", e_settledamt.add(tqq9_settleamount));//已锁定金额
 | 
						||
                        settleamount = settleamount.add(e_settledamt.add(tqq9_settleamount));
 | 
						||
                        entry.set("e_settledlocalamt", e_settledlocalamt.add(tqq9_settleamount));//已结算金额折本币
 | 
						||
                        settleamountbase = settleamountbase.add(e_settledlocalamt.add(tqq9_settleamount));
 | 
						||
                    }
 | 
						||
                    //结合本次结算金额计算
 | 
						||
                    paybill.set("unsettleamount", unsettleamount);//未结算金额
 | 
						||
                    paybill.set("unsettleamountbase", unsettleamountbase);//未结算金额(本位币)
 | 
						||
                    paybill.set("settleamount", settleamount);//已结算金额
 | 
						||
                    paybill.set("settleamountbase", settleamountbase);//已结算金额(本位币)
 | 
						||
                    paybill.set("entry", entries);
 | 
						||
                    //保存
 | 
						||
                    SaveServiceHelper.save(new DynamicObject[]{paybill});
 | 
						||
                }
 | 
						||
            }
 | 
						||
        }
 | 
						||
    }
 | 
						||
 | 
						||
} |