From 769ddb5fc8230e24124a8bf891b9ef452884af80 Mon Sep 17 00:00:00 2001 From: xuhaihui <2098865055@qq.com> Date: Tue, 15 Jul 2025 14:55:18 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=A0=87=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zcdev/pr/plugin/form/PayApplyOpExt.java | 185 ++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100644 code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PayApplyOpExt.java diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PayApplyOpExt.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PayApplyOpExt.java new file mode 100644 index 0000000..c2117c8 --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PayApplyOpExt.java @@ -0,0 +1,185 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package zcgj.zcdev.zcdev.pr.plugin.form; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.dataentity.utils.StringUtils; +import kd.bos.entity.plugin.PreparePropertysEventArgs; +import kd.bos.entity.plugin.args.BeforeOperationArgs; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.operation.SaveServiceHelper; +import kd.ec.contract.common.enums.SourceTypeEnum; +import kd.ec.contract.common.utils.EcConstant; +import kd.ec.contract.common.utils.EcNumberHelper; +import kd.ec.contract.opplugin.AbstractReverseWritingContractOp; + + +//二开系统付款申请单审核操作插件 +public class PayApplyOpExt extends AbstractReverseWritingContractOp { + private static String selector = (String)Stream.of("totalapplyoftaxamount", "totalapplyamount", "taxrate", "totalinvoiceamount", "totalinvoiceoftaxamount", "currency", "org").collect(Collectors.joining(",")); + + public PayApplyOpExt() { + } + + public void onPreparePropertys(PreparePropertysEventArgs e) { + List fields = e.getFieldKeys(); + fields.add("entryentity.applyoftaxamount"); + fields.add("entryentity.contract"); + fields.add("subentryentity.invoice"); + fields.add("sourcetype"); + fields.add("entryentity.applyinvamt"); + fields.add("entryentity.applyinvtax"); + } + + public void beforeExecuteOperationTransaction(BeforeOperationArgs e) { + super.beforeExecuteOperationTransaction(e); + String key = e.getOperationKey(); + if ("delete".equals(key)) { + DynamicObject[] bills = e.getDataEntities(); + DynamicObject[] var4 = bills; + int var5 = bills.length; + + for(int var6 = 0; var6 < var5; ++var6) { + DynamicObject bill = var4[var6]; + DynamicObjectCollection entryCol = bill.getDynamicObjectCollection("entryentity"); + if (entryCol.size() != 0) { + Iterator var9 = entryCol.iterator(); + + while(var9.hasNext()) { + DynamicObject entryObj = (DynamicObject)var9.next(); + DynamicObjectCollection subEntryCol = entryObj.getDynamicObjectCollection("subentryentity"); + if (subEntryCol.size() > 0) { + this.delSubEntry(subEntryCol); + } + } + } + } + } + + } + + private void delSubEntry(DynamicObjectCollection subEntryCol) { + DynamicObject[] invArr = new DynamicObject[subEntryCol.size()]; + + for(int i = 0; i < subEntryCol.size(); ++i) { + DynamicObject subEntry = (DynamicObject)subEntryCol.get(i); + DynamicObject invoice = subEntry.getDynamicObject("invoice"); + invoice = BusinessDataServiceHelper.loadSingle(invoice.getPkValue(), "ec_in_invoice", "isinvoiceclaim,isclaimed,contract,project,connecttype"); + if (!invoice.getBoolean("isinvoiceclaim")) { + invoice.set("isclaimed", false); + invoice.set("project", (Object)null); + invoice.set("contract", (Object)null); + invoice.set("connecttype", ""); + } + + invArr[i] = invoice; + } + + SaveServiceHelper.save(invArr); + } + + public void reverseWritingToContract(String operationKey, DynamicObject source) { + if (source.getString("sourcetype").equals(SourceTypeEnum.CONTRACT.value)) {//合同收款 + DynamicObject incomeApply = BusinessDataServiceHelper.loadSingle(source.getPkValue(), "ec_paymentapply");//付款申请单 + DynamicObjectCollection entryEntity = incomeApply.getDynamicObjectCollection("entryentity");//付款信息分录 + if (entryEntity.size() > 0) { + List contractList = new ArrayList(); + Map contractMap = new HashMap(); + Iterator var7 = entryEntity.iterator(); + + while(true) { + DynamicObject cont; + BigDecimal thisApplyOfTaxAmount; + do { + if (!var7.hasNext()) { + var7 = contractMap.keySet().iterator(); + + while(var7.hasNext()) { + Long contractId = (Long)var7.next(); + contractList.add(contractMap.get(contractId)); + } + + SaveServiceHelper.save((DynamicObject[])contractList.toArray(new DynamicObject[0]));//保存支出合同 + return; + } + + cont = (DynamicObject)var7.next(); + thisApplyOfTaxAmount = cont.getBigDecimal("applyoftaxamount");//本次应付金额⑭ + } while(null == cont.getDynamicObject("contract"));//合同名称 + + Long contractId = cont.getDynamicObject("contract").getLong("id");//合同名称id + DynamicObject contract; + if (contractMap.containsKey(contractId)) { + contract = (DynamicObject)contractMap.get(contractId); + } else { + contract = BusinessDataServiceHelper.loadSingle(contractId, "ec_out_contract", selector);//支出合同 + contractMap.put(contractId, contract); + } + + BigDecimal totalApplyOfTaxAmount = contract.getBigDecimal("totalapplyoftaxamount");//支出合同-累计应付含税金额 + BigDecimal totalApplyAmount = contract.getBigDecimal("totalapplyamount");//支出合同-累计应付金额 + DynamicObject taxRateObject = (DynamicObject)contract.get("taxrate");//支出合同-税率 + BigDecimal taxRate = EcConstant.ZERO; + if (taxRateObject != null) { + taxRate = EcNumberHelper.toBigDecimal(taxRateObject.getBigDecimal("taxrate"));//税率-值 + } + + BigDecimal thisApplyAmount = thisApplyOfTaxAmount.divide(BigDecimal.ONE.add(taxRate.divide(new BigDecimal(100))), 6, 5); + BigDecimal totalinvoiceAmount = contract.getBigDecimal("totalinvoiceamount");//支出合同-累计开票金额 + BigDecimal totalInvoiceOftaxAmount = contract.getBigDecimal("totalinvoiceoftaxamount");//支出合同-累计开票价税合计 + BigDecimal invoiceAmount = BigDecimal.ZERO; + BigDecimal invoiceOfTaxAmont = BigDecimal.ZERO; + DynamicObjectCollection subEntryCol = cont.getDynamicObjectCollection("subentryentity");//付款申请-进项发票信息 + List invoiceList = new ArrayList(8); + + DynamicObject invoice; + for(Iterator var23 = subEntryCol.iterator(); var23.hasNext(); invoiceList.add(invoice)) { + DynamicObject subentry = (DynamicObject)var23.next(); + invoice = subentry.getDynamicObject("invoice");//发票号码 + BigDecimal applyInvOftaxAmt = subentry.getBigDecimal("applyinvoftaxamt");//未申请含税金额 + BigDecimal applyInvAmt = subentry.getBigDecimal("applyinvamt");//本次申请金额(不含税) + BigDecimal applyInvoiceTax = subentry.getBigDecimal("applyinvtax");//剩余税额 + invoiceAmount = invoiceAmount.add(applyInvAmt); + invoiceOfTaxAmont = invoiceOfTaxAmont.add(applyInvOftaxAmt); + invoice = BusinessDataServiceHelper.loadSingle(invoice.getString("id"), "ec_in_invoice");//进项发票登记 + BigDecimal invUnApplyAmt = invoice.getBigDecimal("unapplyamount");//进项发票登记-未申请含税金额 + BigDecimal invoiceUnApplyTax = invoice.getBigDecimal("unapplyinvtax");//进项发票登记-剩余税额 + if (operationKey.equals("audit")) { + invoice.set("unapplyamount", invUnApplyAmt.subtract(applyInvOftaxAmt)); + invoice.set("unapplyinvtax", invoiceUnApplyTax.subtract(applyInvoiceTax)); + } else if (StringUtils.equals(operationKey, "unaudit")) { + invoice.set("unapplyamount", invUnApplyAmt.add(applyInvOftaxAmt)); + invoice.set("unapplyinvtax", invoiceUnApplyTax.add(applyInvoiceTax)); + } + } + + SaveServiceHelper.update((DynamicObject[])invoiceList.toArray(new DynamicObject[0])); + if (operationKey.equals("audit")) { + contract.set("totalapplyoftaxamount", totalApplyOfTaxAmount.add(thisApplyOfTaxAmount));//支出合同-累计应付含税金额 + contract.set("totalapplyamount", totalApplyAmount.add(thisApplyAmount));//支出合同-累计应付金额 + contract.set("totalinvoiceamount", totalinvoiceAmount.add(invoiceAmount));//支出合同-累计开票金额 + contract.set("totalinvoiceoftaxamount", totalInvoiceOftaxAmount.add(invoiceOfTaxAmont));//支出合同-累计开票价税合计 + } else if (StringUtils.equals(operationKey, "unaudit")) { + contract.set("totalapplyoftaxamount", totalApplyOfTaxAmount.subtract(thisApplyOfTaxAmount));//支出合同-累计应付含税金额 + contract.set("totalapplyamount", totalApplyAmount.subtract(thisApplyAmount));//支出合同-累计应付金额 + contract.set("totalinvoiceamount", totalinvoiceAmount.subtract(invoiceAmount));//支出合同-累计开票金额 + contract.set("totalinvoiceoftaxamount", totalInvoiceOftaxAmount.subtract(invoiceOfTaxAmont));//支出合同-累计开票价税合计 + } + } + } + } + + } +} From 327e0259ff2ae20987ef3f4cbed022439f6da712 Mon Sep 17 00:00:00 2001 From: xuhaihui <2098865055@qq.com> Date: Tue, 15 Jul 2025 16:13:05 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BA=8C=E5=BC=80=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E6=8F=92=E4=BB=B6-=E4=BB=98=E6=AC=BE=E7=94=B3=E8=AF=B7?= =?UTF-8?q?=E5=8D=95=E5=AE=A1=E6=A0=B8=E4=B8=8E=E5=8F=8D=E5=AE=A1=E6=A0=B8?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E6=8F=92=E4=BB=B6:=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E7=B4=AF=E8=AE=A1=E6=94=B6=E7=A5=A8=E9=87=91=E9=A2=9D=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zcdev/pr/plugin/form/PayApplyOpExt.java | 32 +++++++++++++------ 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PayApplyOpExt.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PayApplyOpExt.java index c2117c8..5aba372 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PayApplyOpExt.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PayApplyOpExt.java @@ -18,6 +18,8 @@ import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.dataentity.utils.StringUtils; import kd.bos.entity.plugin.PreparePropertysEventArgs; import kd.bos.entity.plugin.args.BeforeOperationArgs; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.operation.SaveServiceHelper; import kd.ec.contract.common.enums.SourceTypeEnum; @@ -25,8 +27,7 @@ import kd.ec.contract.common.utils.EcConstant; import kd.ec.contract.common.utils.EcNumberHelper; import kd.ec.contract.opplugin.AbstractReverseWritingContractOp; - -//二开系统付款申请单审核操作插件 +//二开系统插件-付款申请单审核与反审核操作插件:修改累计收票金额逻辑 public class PayApplyOpExt extends AbstractReverseWritingContractOp { private static String selector = (String)Stream.of("totalapplyoftaxamount", "totalapplyamount", "taxrate", "totalinvoiceamount", "totalinvoiceoftaxamount", "currency", "org").collect(Collectors.joining(",")); @@ -128,6 +129,19 @@ public class PayApplyOpExt extends AbstractReverseWritingContractOp { contractMap.put(contractId, contract); } + BigDecimal totalInvoiceAmount = BigDecimal.ZERO; + QFilter[] contractFilter = new QFilter[]{new QFilter("zcgj_contract.id", QCP.equals, contractId).and("billstatus", QCP.equals, "C")}; // 合同筛选条件 + DynamicObject[] financeConfirmObjs = BusinessDataServiceHelper.load("zcgj_ec_out_finaceconfirm", "id,billstatus,zcgj_entryentity,zcgj_entryentity.zcgj_invoiceamount", contractFilter); // 支出财务确认 + for (int i = 0; i < financeConfirmObjs.length; i++) { + DynamicObject financeConfirmObj = financeConfirmObjs[i]; + DynamicObjectCollection invoiceEntryList = financeConfirmObj.getDynamicObjectCollection("zcgj_entryentity"); // 支出财务确认-合同进项发票信息 + for (int j = 0; j < invoiceEntryList.size(); j++) { + DynamicObject invoiceEntry = invoiceEntryList.get(j); + BigDecimal invoiceAmount = invoiceEntry.getBigDecimal("zcgj_invoiceamount"); // 发票金额 + totalInvoiceAmount = totalInvoiceAmount.add(invoiceAmount); + } + } + BigDecimal totalApplyOfTaxAmount = contract.getBigDecimal("totalapplyoftaxamount");//支出合同-累计应付含税金额 BigDecimal totalApplyAmount = contract.getBigDecimal("totalapplyamount");//支出合同-累计应付金额 DynamicObject taxRateObject = (DynamicObject)contract.get("taxrate");//支出合同-税率 @@ -157,25 +171,25 @@ public class PayApplyOpExt extends AbstractReverseWritingContractOp { BigDecimal invUnApplyAmt = invoice.getBigDecimal("unapplyamount");//进项发票登记-未申请含税金额 BigDecimal invoiceUnApplyTax = invoice.getBigDecimal("unapplyinvtax");//进项发票登记-剩余税额 if (operationKey.equals("audit")) { - invoice.set("unapplyamount", invUnApplyAmt.subtract(applyInvOftaxAmt)); - invoice.set("unapplyinvtax", invoiceUnApplyTax.subtract(applyInvoiceTax)); + invoice.set("unapplyamount", invUnApplyAmt.subtract(applyInvOftaxAmt));//进项发票登记-未申请含税金额 + invoice.set("unapplyinvtax", invoiceUnApplyTax.subtract(applyInvoiceTax));//进项发票登记-剩余税额 } else if (StringUtils.equals(operationKey, "unaudit")) { - invoice.set("unapplyamount", invUnApplyAmt.add(applyInvOftaxAmt)); - invoice.set("unapplyinvtax", invoiceUnApplyTax.add(applyInvoiceTax)); + invoice.set("unapplyamount", invUnApplyAmt.add(applyInvOftaxAmt));//进项发票登记-未申请含税金额 + invoice.set("unapplyinvtax", invoiceUnApplyTax.add(applyInvoiceTax));//进项发票登记-剩余税额 } } - SaveServiceHelper.update((DynamicObject[])invoiceList.toArray(new DynamicObject[0])); + SaveServiceHelper.update((DynamicObject[])invoiceList.toArray(new DynamicObject[0]));//更新进项发票登记单 if (operationKey.equals("audit")) { contract.set("totalapplyoftaxamount", totalApplyOfTaxAmount.add(thisApplyOfTaxAmount));//支出合同-累计应付含税金额 contract.set("totalapplyamount", totalApplyAmount.add(thisApplyAmount));//支出合同-累计应付金额 contract.set("totalinvoiceamount", totalinvoiceAmount.add(invoiceAmount));//支出合同-累计开票金额 - contract.set("totalinvoiceoftaxamount", totalInvoiceOftaxAmount.add(invoiceOfTaxAmont));//支出合同-累计开票价税合计 + contract.set("totalinvoiceoftaxamount", totalInvoiceOftaxAmount.add(invoiceOfTaxAmont).add(totalInvoiceAmount));//支出合同-累计开票价税合计 } else if (StringUtils.equals(operationKey, "unaudit")) { contract.set("totalapplyoftaxamount", totalApplyOfTaxAmount.subtract(thisApplyOfTaxAmount));//支出合同-累计应付含税金额 contract.set("totalapplyamount", totalApplyAmount.subtract(thisApplyAmount));//支出合同-累计应付金额 contract.set("totalinvoiceamount", totalinvoiceAmount.subtract(invoiceAmount));//支出合同-累计开票金额 - contract.set("totalinvoiceoftaxamount", totalInvoiceOftaxAmount.subtract(invoiceOfTaxAmont));//支出合同-累计开票价税合计 + contract.set("totalinvoiceoftaxamount", totalInvoiceOftaxAmount.subtract(invoiceOfTaxAmont).subtract(totalInvoiceAmount));//支出合同-累计开票价税合计 } } }