From 7f1ab2e51ac517db9b643078eef96859800fbc6c Mon Sep 17 00:00:00 2001
From: xiaoshi <2272816786@qq.com>
Date: Thu, 5 Dec 2024 18:11:22 +0800
Subject: [PATCH] =?UTF-8?q?=E6=94=B6=E5=85=A5=E4=B8=8E=E6=94=AF=E5=87=BA?=
 =?UTF-8?q?=E5=90=88=E5=90=8C=E7=BB=93=E7=AE=97=E6=A0=A1=E9=AA=8C=E5=8E=BB?=
 =?UTF-8?q?=E9=99=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../InContractMeasurementBillEditPlugin.java  |  1 -
 .../operate/InContractSettlementOp.java       | 21 +++++++++
 .../InContractSettlementValidator.java        | 46 +++++++++++++++++++
 .../operate/OutContractSettlementOp.java      | 12 +++++
 .../OutContractSettlementValidator.java       | 42 +++++++++++++++++
 5 files changed, 121 insertions(+), 1 deletion(-)
 create mode 100644 code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/InContractSettlementOp.java
 create mode 100644 code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/InContractSettlementValidator.java
 create mode 100644 code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/OutContractSettlementOp.java
 create mode 100644 code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/OutContractSettlementValidator.java

diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/InContractMeasurementBillEditPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/InContractMeasurementBillEditPlugin.java
index 4622ccb..48e75bc 100644
--- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/InContractMeasurementBillEditPlugin.java
+++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/InContractMeasurementBillEditPlugin.java
@@ -29,5 +29,4 @@ public class InContractMeasurementBillEditPlugin extends InContractMeasureBillEd
 
         }
     }
-
 }
diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/InContractSettlementOp.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/InContractSettlementOp.java
new file mode 100644
index 0000000..fc08841
--- /dev/null
+++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/InContractSettlementOp.java
@@ -0,0 +1,21 @@
+package zcgj.zcdev.zcdev.pr.plugin.operate;
+import kd.bos.entity.plugin.AddValidatorsEventArgs;
+import kd.bos.entity.validate.AbstractValidator;
+import kd.ec.contract.opplugin.InContractSettleOp;
+import kd.ec.contract.opplugin.validator.ContractMeasureValidator;
+import kd.ec.contract.opplugin.validator.InContractSettleValidator;
+
+import java.util.List;
+
+public class InContractSettlementOp extends InContractSettleOp {
+    @Override
+    public void onAddValidators(AddValidatorsEventArgs e) {
+        super.onAddValidators(e);
+        List<AbstractValidator> validators = e.getValidators();
+        // 删除标品校验器
+        validators.removeIf(validator -> validator instanceof InContractSettleValidator);
+
+        // 添加定制二开的校验器(位置放第一位,优先执行)
+        validators.add(0, new InContractSettlementValidator());
+    }
+}
diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/InContractSettlementValidator.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/InContractSettlementValidator.java
new file mode 100644
index 0000000..ae9d0c1
--- /dev/null
+++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/InContractSettlementValidator.java
@@ -0,0 +1,46 @@
+package zcgj.zcdev.zcdev.pr.plugin.operate;
+
+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.servicehelper.BusinessDataServiceHelper;
+import kd.ec.contract.opplugin.validator.InContractSettleValidator;
+
+import java.math.BigDecimal;
+
+public class InContractSettlementValidator extends InContractSettleValidator {
+    @Override
+    public void validate() {
+        {
+            ExtendedDataEntity[] dataEntities = this.getDataEntities();
+            ExtendedDataEntity[] var2 = dataEntities;
+            int var3 = dataEntities.length;
+
+            for(int var4 = 0; var4 < var3; ++var4) {
+                ExtendedDataEntity dataEntity = var2[var4];
+                BigDecimal settleOfTaxAmount = dataEntity.getDataEntity().getBigDecimal("settleoftaxamount");
+                DynamicObject contractTemp = dataEntity.getDataEntity().getDynamicObject("contract");
+                if (contractTemp == null) {
+                    return;
+                }
+
+                DynamicObject contract = BusinessDataServiceHelper.loadSingle(dataEntity.getDataEntity().getDynamicObject("contract").getPkValue(), "ec_in_contract");
+                BigDecimal totalSettleOfTaxAmount = contract.getBigDecimal("totalsettleoftaxamount");
+                BigDecimal totalOfTaxAmount = contract.getBigDecimal("totaloftaxamount");
+                DynamicObject contractType = contract.getDynamicObject("contracttype");
+                DynamicObject contractAttr = contractType == null ? null : contractType.getDynamicObject("contattr");
+                boolean validateAmount = true;
+                if (contractAttr != null) {
+                    contractAttr = BusinessDataServiceHelper.loadSingle(contractAttr.getPkValue(), "ec_contattr");
+                    validateAmount = !StringUtils.equals("09", contractAttr.getString("basictype"));
+                }
+
+//                if (validateAmount && settleOfTaxAmount.compareTo(totalOfTaxAmount.subtract(totalSettleOfTaxAmount)) > 0) {
+//                    this.addErrorMessage(dataEntity, ResManager.loadKDString("本期结算价税合计不能大于合同剩余金额价税合计", "InContractSettleValidator_0", "ec-contract-opplugin", new Object[0]));
+//                }
+            }
+
+        }
+    }
+}
diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/OutContractSettlementOp.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/OutContractSettlementOp.java
new file mode 100644
index 0000000..633da93
--- /dev/null
+++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/OutContractSettlementOp.java
@@ -0,0 +1,12 @@
+package zcgj.zcdev.zcdev.pr.plugin.operate;
+
+import kd.bos.entity.plugin.AddValidatorsEventArgs;
+import kd.ec.contract.opplugin.OutContractSettleOp;
+
+public class OutContractSettlementOp extends OutContractSettleOp {
+
+    @Override
+    public void onAddValidators(AddValidatorsEventArgs e) {
+        super.onAddValidators(e);
+    }
+}
diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/OutContractSettlementValidator.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/OutContractSettlementValidator.java
new file mode 100644
index 0000000..08ddbb1
--- /dev/null
+++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/operate/OutContractSettlementValidator.java
@@ -0,0 +1,42 @@
+package zcgj.zcdev.zcdev.pr.plugin.operate;
+
+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.servicehelper.BusinessDataServiceHelper;
+import kd.ec.contract.opplugin.validator.OutContractSettleValidator;
+
+import java.math.BigDecimal;
+
+public class OutContractSettlementValidator extends OutContractSettleValidator {
+    @Override
+    protected boolean validateSettleAmount(ExtendedDataEntity dataEntity) {
+        {
+            BigDecimal settleOfTaxAmount = dataEntity.getDataEntity().getBigDecimal("settleoftaxamount");
+            DynamicObject contractTemp = dataEntity.getDataEntity().getDynamicObject("contract");
+            if (contractTemp == null) {
+                this.addErrorMessage(dataEntity, ResManager.loadKDString("合同不可为空。", "OutContractSettleValidator_5", "ec-contract-opplugin", new Object[0]));
+                return false;
+            } else {
+                DynamicObject contract = BusinessDataServiceHelper.loadSingle(dataEntity.getDataEntity().getDynamicObject("contract").getPkValue(), "ec_out_contract");
+                BigDecimal totalSettleOfTaxAmount = contract.getBigDecimal("totalsettleoftaxamount");
+                BigDecimal totalOfTaxAmount = contract.getBigDecimal("totaloftaxamount");
+                DynamicObject contractType = contract.getDynamicObject("contracttype");
+                DynamicObject contractAttr = contractType == null ? null : contractType.getDynamicObject("contattr");
+                boolean validateAmount = true;
+                if (contractAttr != null) {
+                    contractAttr = BusinessDataServiceHelper.loadSingle(contractAttr.getPkValue(), "ec_contattr");
+                    validateAmount = !StringUtils.equals("09", contractAttr.getString("basictype"));
+                }
+
+                if (validateAmount && settleOfTaxAmount.compareTo(totalOfTaxAmount.subtract(totalSettleOfTaxAmount)) > 0) {
+//                    this.addErrorMessage(dataEntity, ResManager.loadKDString("本期结算价税合计不能大于合同剩余金额价税合计", "OutContractSettleValidator_0", "ec-contract-opplugin", new Object[0]));
+                    return true;
+                } else {
+                    return true;
+                }
+            }
+        }
+    }
+}