diff --git a/lc123/cloud/app/plugin/operate/pm/PurOrderSubmitValidOp.java b/lc123/cloud/app/plugin/operate/pm/PurOrderSubmitValidOp.java new file mode 100644 index 0000000..28b4014 --- /dev/null +++ b/lc123/cloud/app/plugin/operate/pm/PurOrderSubmitValidOp.java @@ -0,0 +1,118 @@ +package tqq9.lc123.cloud.app.plugin.operate.pm; + +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.PreparePropertysEventArgs; +import kd.bos.entity.validate.AbstractValidator; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.util.StringUtils; + +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +public class PurOrderSubmitValidOp extends AbstractOperationServicePlugIn { + + + @Override + public void onPreparePropertys(PreparePropertysEventArgs e) { + super.onPreparePropertys(e); + e.getFieldKeys().add("purbillentry_pay.isprepay"); + e.getFieldKeys().add("purbillentry_pay.tqq9_paybillno"); + e.getFieldKeys().add("purbillentry_pay.tqq9_settleamount"); + } + + @Override + public void onAddValidators(AddValidatorsEventArgs e) { + super.onAddValidators(e); + e.addValidator(new AbstractValidator() { + @Override + public void validate() { + ExtendedDataEntity[] dataEntities1 = this.getDataEntities(); + for (ExtendedDataEntity extendedDataEntity : dataEntities1) { + DynamicObject dataEntity = extendedDataEntity.getDataEntity(); + DynamicObjectCollection purbillentry_pay = dataEntity.getDynamicObjectCollection("purbillentry_pay"); + //本采购订单的付款单map + Map map = new HashMap<>(); + for (DynamicObject dynamicObject : purbillentry_pay) { + boolean isprepay = dynamicObject.getBoolean("isprepay");//是否预付 + if (isprepay) { + String tqq9_paybillno = dynamicObject.getString("tqq9_paybillno");//付款处理单 + if (StringUtils.isNotEmpty(tqq9_paybillno)) { + BigDecimal tqq9_settleamount = dynamicObject.getBigDecimal("tqq9_settleamount") == null + ? BigDecimal.ZERO : dynamicObject.getBigDecimal("tqq9_settleamount");//本次结算金额 + map.put(tqq9_paybillno, tqq9_settleamount); + } + } + } + + Set set = map.keySet(); + if (set.size() > 0) { + DynamicObject[] pm_purorderbills = BusinessDataServiceHelper.load("pm_purorderbill", + "id,billno,purbillentry_pay.tqq9_paybillno,purbillentry_pay.isprepay,purbillentry_pay.tqq9_settleamount" + , new QFilter[]{new QFilter("purbillentry_pay.tqq9_paybillno", QCP.in, set)}); + //历史采购订单的付款单map + Map settleMap = new HashMap<>(); + if (null != pm_purorderbills && pm_purorderbills.length > 0) { + for (DynamicObject pm_purorderbill : pm_purorderbills) { + DynamicObjectCollection purbillentry_pay1 = pm_purorderbill.getDynamicObjectCollection("purbillentry_pay"); + for (DynamicObject dynamicObject : purbillentry_pay1) { + boolean isprepay = dynamicObject.getBoolean("isprepay");//是否预付 + if (isprepay) { + String tqq9_paybillno = dynamicObject.getString("tqq9_paybillno");//付款处理单 + if (StringUtils.isNotEmpty(tqq9_paybillno) && set.contains(tqq9_paybillno)) { + BigDecimal tqq9_settleamount = dynamicObject.getBigDecimal("tqq9_settleamount") == null + ? BigDecimal.ZERO : dynamicObject.getBigDecimal("tqq9_settleamount");//本次结算金额 + if (!settleMap.containsKey(tqq9_paybillno)) { + settleMap.put(tqq9_paybillno, tqq9_settleamount); + } else { + BigDecimal bigDecimal = settleMap.get(tqq9_paybillno); + settleMap.put(tqq9_paybillno, tqq9_settleamount.add(bigDecimal)); + } + } + } + } + } + } + + DynamicObject[] cas_paybills = BusinessDataServiceHelper.load("cas_paybill", + "id,billno,unsettleamount" + , new QFilter[]{new QFilter("billno", QCP.in, set)}); + Map unSettleMap = new HashMap<>(); + for (DynamicObject cas_paybill : cas_paybills) { + String casPayBillNo = cas_paybill.getString("billno"); + BigDecimal unsettleamount = cas_paybill.getBigDecimal("unsettleamount") == null + ? BigDecimal.ZERO : cas_paybill.getBigDecimal("unsettleamount");//未结算金额 + if (settleMap.containsKey(casPayBillNo)) { + BigDecimal settleAmount = settleMap.get(casPayBillNo); + BigDecimal subtract = unsettleamount.subtract(settleAmount); + unSettleMap.put(casPayBillNo, subtract); + } + } + + for (String casPayBillNo : set) { + BigDecimal amount = map.get(casPayBillNo);//此次结算金额 + if (unSettleMap.containsKey(casPayBillNo)) { + BigDecimal unSettleAmount = unSettleMap.get(casPayBillNo); + //此次结算金额>剩余可结算金额提示 + if (amount.compareTo(unSettleAmount) > 0) { + this.addErrorMessage(extendedDataEntity, "付款单:" + casPayBillNo + "可结算金额不足"); + } + } + + } + + + } + + } + } + }); + } +}