From 785132b4399fd142c60554f90a5bc3354b0c77e4 Mon Sep 17 00:00:00 2001 From: zhangzhiguo <zhangzhiguo@123> Date: Mon, 10 Mar 2025 18:05:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=98=E6=AC=BE=E6=94=B6=E6=AC=BE=E4=BC=9A?= =?UTF-8?q?=E8=AE=A1=E7=A7=91=E7=9B=AE=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/operate/PaymentApplyFundExtOp.java | 9 ++- .../operate/PaymentMaxAmountExtValidator.java | 59 +++++++++++++------ 2 files changed, 50 insertions(+), 18 deletions(-) diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/PaymentApplyFundExtOp.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/PaymentApplyFundExtOp.java index 68197b4..877ce5d 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/PaymentApplyFundExtOp.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/PaymentApplyFundExtOp.java @@ -1,6 +1,7 @@ package zcgj.zcdev.zcdev.pr.plugin.operate; import kd.bos.entity.plugin.AddValidatorsEventArgs; +import kd.bos.entity.plugin.PreparePropertysEventArgs; import kd.bos.entity.validate.AbstractValidator; import kd.ec.contract.opplugin.fund.PaymentApplyFundOp; import kd.ec.contract.opplugin.fund.validator.PaymentMaxAmountValidator; @@ -11,12 +12,18 @@ import java.util.List; public class PaymentApplyFundExtOp extends PaymentApplyFundOp { + @Override + public void onPreparePropertys(PreparePropertysEventArgs e) { + super.onPreparePropertys(e); + // e.getFieldKeys().add("zcgj_pricetype"); + } + @Override public void onAddValidators(AddValidatorsEventArgs e) { super.onAddValidators(e); List<AbstractValidator> validators = e.getValidators(); // 删除标品校验器 -// validators.removeIf(validator -> validator instanceof PaymentMaxAmountValidator); + validators.removeIf(validator -> validator instanceof PaymentMaxAmountValidator); validators.removeIf(validator -> validator instanceof PaymentTypeValidator); // 添加定制二开的校验器(位置放第一位,优先执行) validators.add(0, new PaymentMaxAmountExtValidator()); diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/PaymentMaxAmountExtValidator.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/PaymentMaxAmountExtValidator.java index 53fb419..d0d3f3c 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/PaymentMaxAmountExtValidator.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/PaymentMaxAmountExtValidator.java @@ -4,10 +4,15 @@ import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.resource.ResManager; import kd.bos.dataentity.utils.StringUtils; import kd.bos.entity.ExtendedDataEntity; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.ec.basedata.common.utils.CurrencyFormatUtil; import kd.ec.contract.opplugin.fund.validator.PaymentMaxAmountValidator; import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Set; @@ -15,28 +20,48 @@ public class PaymentMaxAmountExtValidator extends PaymentMaxAmountValidator { @Override protected void maxShouldPayAmountValidate(Map<Long, BigDecimal> contractTypeShouldPayAmountMap, Map<Long, BigDecimal> shouldPayAmountMap, Map<Long, Set<String>> appliedBillMap, ExtendedDataEntity dataEntity, int i, DynamicObject entry, DynamicObject contract) { - long contractId = contract.getLong("id"); - BigDecimal maxShouldPayAmount = this.calculateMaxShouldPayAmount(contract); - DynamicObject contCurrency = contract.getDynamicObject("currency"); - if (contCurrency != null) { - maxShouldPayAmount = maxShouldPayAmount.setScale(contCurrency.getInt("amtprecision"), 4); - } - BigDecimal curMaxShouldPayAmount = entry.getBigDecimal("maxshouldpayamt"); - BigDecimal curShouldPayAmount = entry.getBigDecimal("applyoftaxamount"); - BigDecimal submitShouldPayAmount = (BigDecimal)shouldPayAmountMap.getOrDefault(contractId, BigDecimal.ZERO); - BigDecimal totalShouldPayAmount = (BigDecimal)contractTypeShouldPayAmountMap.getOrDefault(contractId, BigDecimal.ZERO); - if (totalShouldPayAmount.add(submitShouldPayAmount).compareTo(maxShouldPayAmount) > 0) { - if (appliedBillMap.containsKey(contractId)) { + QFilter contractIdFilter = new QFilter("id", QCP.equals,contractId); + DynamicObject contractObj = BusinessDataServiceHelper.loadSingle("ec_out_contract", "id,zcgj_pricetype", new QFilter[]{contractIdFilter}); + if(contractObj!=null) + { + String zcgjPricetype = contractObj.getString("zcgj_pricetype"); + if(!"bdlbdj".equals(zcgjPricetype)){ //如果支出合同计价方式为不定量不定价时,则移除校验 + BigDecimal maxShouldPayAmount = this.calculateMaxShouldPayAmount(contract); + DynamicObject contCurrency = contract.getDynamicObject("currency"); + if (contCurrency != null) { + maxShouldPayAmount = maxShouldPayAmount.setScale(contCurrency.getInt("amtprecision"), 4); + } + BigDecimal curMaxShouldPayAmount = entry.getBigDecimal("maxshouldpayamt"); + BigDecimal curShouldPayAmount = entry.getBigDecimal("applyoftaxamount"); + BigDecimal submitShouldPayAmount = (BigDecimal)shouldPayAmountMap.getOrDefault(contractId, BigDecimal.ZERO); + BigDecimal totalShouldPayAmount = (BigDecimal)contractTypeShouldPayAmountMap.getOrDefault(contractId, BigDecimal.ZERO); + if (totalShouldPayAmount.add(submitShouldPayAmount).compareTo(maxShouldPayAmount) > 0) { + if (appliedBillMap.containsKey(contractId)) { // Set<String> billNumbers = (Set)appliedBillMap.get(contractId); // this.addErrorMessage(dataEntity, String.format(ResManager.loadKDString("合同付款信息:第%1$s行因受流程中单据(单据号:%2$s)影响,继续提交将超过应付金额上限。在途金额:%3$s。", "PaymentMaxAmountValidator_6", "ec-contract-opplugin", new Object[0]), i + 1, StringUtils.join(billNumbers.toArray(new String[0]), ","), CurrencyFormatUtil.getAfterFormatString(contCurrency, submitShouldPayAmount.add(totalShouldPayAmount.subtract(curShouldPayAmount))))); - } else if (maxShouldPayAmount.compareTo(curMaxShouldPayAmount) != 0) { - this.addErrorMessage(dataEntity, String.format(ResManager.loadKDString("合同付款信息:第%s行因暂存期间存在其他单据提交审核,导致应付金额上限发生变化,本单数据未刷新,继续提交将超过应付金额上限。", "PaymentMaxAmountValidator_1", "ec-contract-opplugin", new Object[0]), i + 1)); - } else { - this.addErrorMessage(dataEntity, String.format(ResManager.loadKDString("合同付款信息:第%s行本次应付金额不允许超应付金额上限,请确认。", "PaymentMaxAmountValidator_2", "ec-contract-opplugin", new Object[0]), i + 1)); + } else if (maxShouldPayAmount.compareTo(curMaxShouldPayAmount) != 0) { + this.addErrorMessage(dataEntity, String.format(ResManager.loadKDString("合同付款信息:第%s行因暂存期间存在其他单据提交审核,导致应付金额上限发生变化,本单数据未刷新,继续提交将超过应付金额上限。", "PaymentMaxAmountValidator_1", "ec-contract-opplugin", new Object[0]), i + 1)); + } else { + this.addErrorMessage(dataEntity, String.format(ResManager.loadKDString("合同付款信息:第%s行本次应付金额不允许超应付金额上限,请确认。", "PaymentMaxAmountValidator_2", "ec-contract-opplugin", new Object[0]), i + 1)); + } + } } - } } + + protected void maxApplyAmountValidate(Map<Long, BigDecimal> shouldPayAmountMap, Map<Long, BigDecimal> deductionAmountMap, Map<String, BigDecimal> contractTypeApplyAmountMap, Map<String, BigDecimal> appliedAmountMap, Map<String, Set<String>> appliedBillMap, ExtendedDataEntity dataEntity, int i, DynamicObject entry, DynamicObject contract, String type, String key) { + long contractId = contract.getLong("id"); + + QFilter contractIdFilter = new QFilter("id", QCP.equals,contractId); + DynamicObject contractObj = BusinessDataServiceHelper.loadSingle("ec_out_contract", "id,zcgj_pricetype", new QFilter[]{contractIdFilter}); + if(contractObj!=null){ + String zcgjPricetype = contractObj.getString("zcgj_pricetype"); + if(!"bdlbdj".equals(zcgjPricetype)){ //如果支出合同计价方式为不定量不定价时,则移除校验 + super.maxApplyAmountValidate( shouldPayAmountMap, deductionAmountMap, contractTypeApplyAmountMap, appliedAmountMap, appliedBillMap, dataEntity, i, entry, contract, type, key); + } + } + + } }