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.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 java.math.BigDecimal; import java.util.HashMap; /** * 采购订单操作插件 * 1.校验器:校验本次结算金额 * 2.审核插件:反写本次结算金额 */ public class PurOrderReversePayBillPlugin extends AbstractOperationServicePlugIn implements Plugin { @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 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}); } } } } }