From d9967c2bb9bc6d8d1dea73d00552c999cfaaf73e Mon Sep 17 00:00:00 2001 From: xuhaihui <2098865055@qq.com> Date: Tue, 18 Nov 2025 17:22:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B6=E5=85=A5=E5=90=88=E5=90=8C=E7=A1=AE?= =?UTF-8?q?=E8=AE=A4=E5=8D=95=E4=BC=98=E5=8C=96=E8=AE=A1=E9=87=8F=E6=B1=87?= =?UTF-8?q?=E6=80=BB=E5=88=86=E5=BD=95=E8=B5=8B=E5=80=BC=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../form/InContractFinaceConfirmePlugin.java | 58 +++++++++++++++---- 1 file changed, 46 insertions(+), 12 deletions(-) diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/InContractFinaceConfirmePlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/InContractFinaceConfirmePlugin.java index 9db3532..4952a6a 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/InContractFinaceConfirmePlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/InContractFinaceConfirmePlugin.java @@ -6,6 +6,7 @@ import kd.bos.bill.OperationStatus; import kd.bos.context.RequestContext; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.dataentity.metadata.dynamicobject.DynamicObjectType; import kd.bos.dataentity.utils.StringUtils; import kd.bos.entity.datamodel.events.ChangeData; import kd.bos.entity.datamodel.events.PropertyChangedArgs; @@ -29,9 +30,7 @@ import kd.sdk.plugin.Plugin; import java.math.BigDecimal; import java.math.RoundingMode; -import java.util.ArrayList; -import java.util.EventObject; -import java.util.List; +import java.util.*; /** * 收入合同确认单插件 @@ -94,15 +93,50 @@ public class InContractFinaceConfirmePlugin extends AbstractBillPlugIn implement item.set("zcgj_remark",dynamicObject.getString("remark")); } - DynamicObjectCollection meteringSummaryCollection1 = ecincontractsettle.getDynamicObjectCollection("zcgj_metering_summary");//计量汇总 - DynamicObjectCollection meteringSummaryCollection2 = this.getModel().getDataEntity(true).getDynamicObjectCollection("zcgj_metering_summary");//计量汇总 - meteringSummaryCollection2.clear(); - for (DynamicObject meteringSummary1 : meteringSummaryCollection1){ - DynamicObject newMeteringSummary = meteringSummaryCollection2.addNew(); - newMeteringSummary.set("zcgj_rateval",meteringSummary1.getBigDecimal("zcgj_rateval")); - newMeteringSummary.set("zcgj_pa_amount",meteringSummary1.getBigDecimal("zcgj_pa_amount")); - newMeteringSummary.set("zcgj_amountnotax",meteringSummary1.getBigDecimal("zcgj_amountnotax")); - newMeteringSummary.set("zcgj_taxamt1",meteringSummary1.getBigDecimal("zcgj_taxamt")); + DynamicObjectCollection payItemDetailEntryCollection = ecincontractsettle.getDynamicObjectCollection("payitemdetailentry");//合同支付项明细 + DynamicObjectCollection meteringSummaryCollection = this.getModel().getDataEntity(true).getDynamicObjectCollection("zcgj_metering_summary");//计量汇总 + meteringSummaryCollection.clear(); + DynamicObjectType meteringSummaryType = meteringSummaryCollection.getDynamicObjectType(); + + // 创建全局Map按税率分组存储合并数据,用于累计所有payitemdetailentry的数据 + Map> globalRateGroupMap = new HashMap<>(); + + for (DynamicObject payItemDetailEntry : payItemDetailEntryCollection) { + String referBillNumber = payItemDetailEntry.getString("referbillnumber");//关联单据 + QFilter[] qFilters = new QFilter[]{new QFilter("billno", QCP.equals, referBillNumber)}; + DynamicObject ec_incontractmeasure = BusinessDataServiceHelper.loadSingle("ec_incontractmeasure", qFilters);//收入合同计量 + if (ec_incontractmeasure != null) { + DynamicObjectCollection listModelEntryCollection = ec_incontractmeasure.getDynamicObjectCollection("listmodelentry");//模板分录 + DynamicObjectCollection listEntryCollection = listModelEntryCollection.get(0).getDynamicObjectCollection("listentry");//清单分录 + + // 遍历当前收入合同计量的清单分录 + for (DynamicObject listEntry : listEntryCollection) { + BigDecimal entrytaxrate = listEntry.getBigDecimal("entrytaxrate");// 税率(%) + BigDecimal thisamount = listEntry.getBigDecimal("thisamount");// 本期计量金额 + BigDecimal thistax = listEntry.getBigDecimal("thistax");// 本期税额 + BigDecimal thisoftaxmount = listEntry.getBigDecimal("thisoftaxmount");// 本期计量含税金额 + + // 使用全局Map按税率分组,累加各金额字段 + Map sumMap = globalRateGroupMap.computeIfAbsent(entrytaxrate, k -> new HashMap<>()); + sumMap.merge("thisamount", thisamount, BigDecimal::add); + sumMap.merge("thistax", thistax, BigDecimal::add); + sumMap.merge("thisoftaxmount", thisoftaxmount, BigDecimal::add); + } + } + } + + // 循环结束后,使用全局累计数据生成最终的计量汇总行 + for (Map.Entry> entry : globalRateGroupMap.entrySet()) { + DynamicObject newEntry = new DynamicObject(meteringSummaryType); + BigDecimal rate = entry.getKey(); + Map sumMap = entry.getValue(); + + // 设置合并后的值到新行 + newEntry.set("zcgj_rateval", rate); // 税率 + newEntry.set("zcgj_amountnotax", sumMap.get("thisamount")); // 不含税金额合计 + newEntry.set("zcgj_taxamt1", sumMap.get("thistax")); // 税额合计 + newEntry.set("zcgj_pa_amount", sumMap.get("thisoftaxmount")); // 含税金额合计 + meteringSummaryCollection.add(newEntry); } this.getView().updateView("zcgj_itementry");