diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PaymentApplySubOp.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PaymentApplySubOp.java new file mode 100644 index 0000000..f66e137 --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PaymentApplySubOp.java @@ -0,0 +1,64 @@ +package zcgj.zcdev.zcdev.pr.plugin.form; + +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 java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +//付款申请单(项目资金)提交校验-付款信息中一个合同不能填写多行相同的支付类型+结算方式 +public class PaymentApplySubOp extends AbstractOperationServicePlugIn { + @Override + public void onPreparePropertys(PreparePropertysEventArgs e) { + super.onPreparePropertys(e); + e.getFieldKeys().add("contract");//合同名称 + e.getFieldKeys().add("paymenttype");//支付类型 + e.getFieldKeys().add("settletype");//结算方式 + } + + @Override + public void onAddValidators(AddValidatorsEventArgs e) { + super.onAddValidators(e); + e.getValidators().add(new ValidatorExt()); + } + + class ValidatorExt extends AbstractValidator { + @Override + public void validate() { + ExtendedDataEntity[] extendedDataEntities = this.getDataEntities(); + for (ExtendedDataEntity extendedDataEntity : extendedDataEntities) { + DynamicObject dataEntity = extendedDataEntity.getDataEntity(); + DynamicObjectCollection entryEntityCollection = dataEntity.getDynamicObjectCollection("entryentity");//付款信息分录 + Map> combinationIndices = new HashMap<>(); + for (int i = 0; i < entryEntityCollection.size(); i++) { + DynamicObject entryEntity = entryEntityCollection.get(i); + DynamicObject contract = entryEntity.getDynamicObject("contract");//合同名称 + String contractNumber = null; + if (contract != null) { + contractNumber = contract.getString("number");//合同编号 + } + String paymentType = entryEntity.getString("paymenttype");//支付类型 + DynamicObject settleType = entryEntity.getDynamicObject("settletype");//合同名称 + String settleTypeName = null; + if (settleType != null) { + settleTypeName = settleType.getString("name");//合同编号 + } + String combinationKey = contractNumber + "|" + paymentType + "|" + settleTypeName; + if (combinationIndices.containsKey(combinationKey)) { + this.addFatalErrorMessage(extendedDataEntity, "付款信息中一个合同不能填写多行相同的支付类型+结算方式"); + } else { + List indices = new ArrayList<>(); + indices.add(i); + combinationIndices.put(combinationKey, indices); + } + } + } + } + } +}