From 58fed1027543ffd61ee84461799f48dfdaaddde6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BE=9A=E8=B1=86=E8=B1=86?= <13356128+sunandmoon60@user.noreply.gitee.com> Date: Fri, 15 Aug 2025 11:34:49 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=B3=A8=E5=86=8C=E8=AF=81=E5=8F=B7=E5=B8=A6?= =?UTF-8?q?=E5=87=BA=E8=AE=B8=E5=8F=AF=E8=AF=81=E5=8F=B7=E5=BC=95=E5=8F=B7?= =?UTF-8?q?=E9=9A=94=E5=BC=80=202.=E9=87=87=E8=B4=AD=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E7=94=A8=E6=8A=98=E6=89=A3=E5=89=8D=E4=BB=B7=E7=A8=8E=E5=90=88?= =?UTF-8?q?=E8=AE=A1=E5=88=86=E6=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/plugin/form/pm/BaseDataPlugin.java | 6 +- .../form/pm/PuroderBillShareRefundPlugin.java | 173 ++++++++++-------- 2 files changed, 104 insertions(+), 75 deletions(-) diff --git a/lc123/cloud/app/plugin/form/pm/BaseDataPlugin.java b/lc123/cloud/app/plugin/form/pm/BaseDataPlugin.java index fb267be..7fb7b45 100644 --- a/lc123/cloud/app/plugin/form/pm/BaseDataPlugin.java +++ b/lc123/cloud/app/plugin/form/pm/BaseDataPlugin.java @@ -64,8 +64,10 @@ public class BaseDataPlugin extends AbstractFormPlugin implements Plugin { String supno = entry.getString("tqq9_e_supno"); stringBuilder.append("#").append(supno); } - String substring = stringBuilder.substring(1); - this.getModel().setValue("tqq9_licenseno",substring,rowIndex); + if(StringUtils.isNotBlank(stringBuilder.toString())){ + String substring = stringBuilder.substring(1); + this.getModel().setValue("tqq9_licenseno",substring,rowIndex); + } } } this.getView().updateView(); diff --git a/lc123/cloud/app/plugin/form/pm/PuroderBillShareRefundPlugin.java b/lc123/cloud/app/plugin/form/pm/PuroderBillShareRefundPlugin.java index 2cd663f..368906f 100644 --- a/lc123/cloud/app/plugin/form/pm/PuroderBillShareRefundPlugin.java +++ b/lc123/cloud/app/plugin/form/pm/PuroderBillShareRefundPlugin.java @@ -15,6 +15,8 @@ import kd.bos.servicehelper.BusinessDataServiceHelper; import java.math.BigDecimal; import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.List; /** * 采购订单 @@ -51,29 +53,34 @@ public class PuroderBillShareRefundPlugin extends AbstractBillPlugIn { //含税现返使用金额 BigDecimal tqq9_hsxfsyje = dataEntity.getBigDecimal(name);//单头含税现返使用金额 if (tqq9_hsxfsyje.compareTo(BigDecimal.ZERO) > 0) { - BigDecimal totalallamount = dataEntity.getBigDecimal("totalallamount");//单头价税合计 DynamicObjectCollection billentries = dataEntity.getDynamicObjectCollection("billentry"); if (billentries != null && billentries.size() > 0) { BigDecimal remainRefundAmt = tqq9_hsxfsyje;//拆分后剩余的金额 + List seqs = new ArrayList<>(); + BigDecimal tqq9_totalamount = BigDecimal.ZERO; for (int i = 0; i <= billentries.size() - 1; i++) { DynamicObject billentry = billentries.get(i); - if (i == billentries.size() - 1) { + BigDecimal tqq9_amount = billentry.getBigDecimal("tqq9_amount");//明细折扣前价税合计 + tqq9_totalamount = tqq9_totalamount.add(tqq9_amount); + if (tqq9_amount.compareTo(BigDecimal.ZERO) > 0) { + seqs.add(i); + } + } + for (int i = 0; i < seqs.size(); i++) { + int seq = seqs.get(i); + if (i == seqs.size() - 1) { //如果是最后一行 - this.getModel().setValue("tqq9_xfamount", remainRefundAmt, i);//明细现返使用金额 + this.getModel().setValue("tqq9_xfamount", remainRefundAmt, seq);//明细现返使用金额 } else { //如果不是最后一行 - BigDecimal amountandtax = billentry.getBigDecimal("amountandtax");//明细价税合计 - if (amountandtax.compareTo(BigDecimal.ZERO) == 0) { - BigDecimal tqq9_xfamount = BigDecimal.ZERO;//分录行含税金额比例 - this.getModel().setValue("tqq9_xfamount", tqq9_xfamount, i);//明细现返使用金额 - remainRefundAmt = remainRefundAmt.subtract(tqq9_xfamount); - }else{ - BigDecimal tqq9_xfamount = tqq9_hsxfsyje.multiply(amountandtax).divide(totalallamount, 2, RoundingMode.HALF_UP);//分录行含税金额比例 - this.getModel().setValue("tqq9_xfamount", tqq9_xfamount, i);//明细现返使用金额 + BigDecimal tqq9_amount = (BigDecimal) this.getModel().getValue("tqq9_amount", seq);//明细折扣前价税合计 + if (tqq9_amount.compareTo(BigDecimal.ZERO) == 0) { + this.getModel().setValue("tqq9_xfamount", BigDecimal.ZERO, seq);//明细现返使用金额 + } else { + BigDecimal tqq9_xfamount = tqq9_hsxfsyje.multiply(tqq9_amount).divide(tqq9_totalamount, 10, RoundingMode.HALF_UP);//分录行含税金额比例 + this.getModel().setValue("tqq9_xfamount", tqq9_xfamount, seq);//明细现返使用金额 remainRefundAmt = remainRefundAmt.subtract(tqq9_xfamount); } - - } } } @@ -82,27 +89,35 @@ public class PuroderBillShareRefundPlugin extends AbstractBillPlugIn { } if ("tqq9_hshfsyje".equals(name)) { //含税货返使用金额 - BigDecimal tqq9_hshfsyje = dataEntity.getBigDecimal(name);//单头含税现返使用金额 + BigDecimal tqq9_hshfsyje = dataEntity.getBigDecimal(name);//单头含税货返使用金额 if (tqq9_hshfsyje.compareTo(BigDecimal.ZERO) > 0) { - BigDecimal totalallamount = dataEntity.getBigDecimal("totalallamount");//单头价税合计 DynamicObjectCollection billentries = dataEntity.getDynamicObjectCollection("billentry"); if (billentries != null && billentries.size() > 0) { BigDecimal remainRefundAmt = tqq9_hshfsyje;//拆分后剩余的金额 + List seqs = new ArrayList<>(); + BigDecimal tqq9_totalamount = BigDecimal.ZERO; for (int i = 0; i <= billentries.size() - 1; i++) { DynamicObject billentry = billentries.get(i); - if (i == billentries.size() - 1) { + BigDecimal tqq9_amount = billentry.getBigDecimal("tqq9_amount");//明细折扣前价税合计 + tqq9_totalamount = tqq9_totalamount.add(tqq9_amount); + if (tqq9_amount.compareTo(BigDecimal.ZERO) > 0) { + seqs.add(i); + } + } + for (int i = 0; i <= seqs.size() - 1; i++) { + int seq = seqs.get(i); + if (i == seqs.size() - 1) { //如果是最后一行 - this.getModel().setValue("tqq9_hfamount", remainRefundAmt, i);//明细货返使用金额 + this.getModel().setValue("tqq9_hfamount", remainRefundAmt, seq);//明细货返使用金额 } else { //如果不是最后一行 - BigDecimal amountandtax = billentry.getBigDecimal("amountandtax");//明细价税合计 - if (amountandtax.compareTo(BigDecimal.ZERO) == 0) { - BigDecimal tqq9_hfamount =BigDecimal.ZERO;//分录行含税金额比例 - this.getModel().setValue("tqq9_hfamount", tqq9_hfamount, i);//明细货返使用金额 - remainRefundAmt = remainRefundAmt.subtract(tqq9_hfamount); - }else{ - BigDecimal tqq9_hfamount = tqq9_hshfsyje.multiply(amountandtax).divide(totalallamount, 2, RoundingMode.HALF_UP);//分录行含税金额比例 - this.getModel().setValue("tqq9_hfamount", tqq9_hfamount, i);//明细货返使用金额 + BigDecimal tqq9_amount = (BigDecimal) this.getModel().getValue("tqq9_amount", seq);//明细折扣前价税合计 + + if (tqq9_amount.compareTo(BigDecimal.ZERO) == 0) { + this.getModel().setValue("tqq9_hfamount", BigDecimal.ZERO, seq);//明细货返使用金额 + } else { + BigDecimal tqq9_hfamount = tqq9_hshfsyje.multiply(tqq9_amount).divide(tqq9_totalamount, 10, RoundingMode.HALF_UP);//分录行含税金额比例 + this.getModel().setValue("tqq9_hfamount", tqq9_hfamount, seq);//明细货返使用金额 remainRefundAmt = remainRefundAmt.subtract(tqq9_hfamount); } @@ -116,25 +131,32 @@ public class PuroderBillShareRefundPlugin extends AbstractBillPlugIn { //优惠金额 BigDecimal tqq9_discountamount = dataEntity.getBigDecimal(name);//单头优惠金额 if (tqq9_discountamount.compareTo(BigDecimal.ZERO) > 0) { - BigDecimal totalallamount = dataEntity.getBigDecimal("totalallamount");//单头价税合计 DynamicObjectCollection billentries = dataEntity.getDynamicObjectCollection("billentry"); if (billentries != null && billentries.size() > 0) { BigDecimal remainRefundAmt = tqq9_discountamount;//拆分后剩余的金额 + List seqs = new ArrayList<>(); + BigDecimal tqq9_totalamount = BigDecimal.ZERO; for (int i = 0; i <= billentries.size() - 1; i++) { DynamicObject billentry = billentries.get(i); - if (i == billentries.size() - 1) { + BigDecimal tqq9_amount = billentry.getBigDecimal("tqq9_amount");//明细折扣前价税合计 + tqq9_totalamount = tqq9_totalamount.add(tqq9_amount); + if (tqq9_amount.compareTo(BigDecimal.ZERO) > 0) { + seqs.add(i); + } + } + for (int i = 0; i <= seqs.size() - 1; i++) { + int seq = seqs.get(i); + if (i == seqs.size() - 1) { //如果是最后一行 - this.getModel().setValue("tqq9_disamount", remainRefundAmt, i);//明细优惠金额 + this.getModel().setValue("tqq9_disamount", remainRefundAmt, seq);//明细优惠金额 } else { //如果不是最后一行 - BigDecimal amountandtax = billentry.getBigDecimal("amountandtax");//明细价税合计 - if (amountandtax.compareTo(BigDecimal.ZERO) == 0) { - BigDecimal tqq9_disamount = BigDecimal.ZERO;//分录行含税金额比例 - this.getModel().setValue("tqq9_disamount", tqq9_disamount, i);//明细优惠金额 - remainRefundAmt = remainRefundAmt.subtract(tqq9_disamount); + BigDecimal tqq9_amount = (BigDecimal) this.getModel().getValue("tqq9_amount", seq);//明细折扣前价税合计 + if (tqq9_amount.compareTo(BigDecimal.ZERO) == 0) { + this.getModel().setValue("tqq9_disamount", BigDecimal.ZERO, seq);//明细优惠金额 } else { - BigDecimal tqq9_disamount = tqq9_discountamount.multiply(amountandtax).divide(totalallamount, 2, RoundingMode.HALF_UP);//分录行含税金额比例 - this.getModel().setValue("tqq9_disamount", tqq9_disamount, i);//明细优惠金额 + BigDecimal tqq9_disamount = tqq9_discountamount.multiply(tqq9_amount).divide(tqq9_totalamount, 10, RoundingMode.HALF_UP);//分录行含税金额比例 + this.getModel().setValue("tqq9_disamount", tqq9_disamount, seq);//明细优惠金额 remainRefundAmt = remainRefundAmt.subtract(tqq9_disamount); } @@ -160,74 +182,79 @@ public class PuroderBillShareRefundPlugin extends AbstractBillPlugIn { } if (StringUtils.equals("tqq9_amount", name)) { //单头金额下推 - BigDecimal tqq9_hsxfsyje = dataEntity.getBigDecimal("tqq9_hsxfsyje");//单头含税现返使用金额 - BigDecimal tqq9_hshfsyje = dataEntity.getBigDecimal("tqq9_hshfsyje");//单头含税货返使用金额 - BigDecimal tqq9_discountamount = dataEntity.getBigDecimal("tqq9_discountamount");//单头优惠金额 - BigDecimal totalallamount = dataEntity.getBigDecimal("totalallamount");//单头价税合计 DynamicObjectCollection billentries = dataEntity.getDynamicObjectCollection("billentry"); - BigDecimal remainRefundAmt_xf = tqq9_hsxfsyje;//拆分后剩余的金额-现返 - BigDecimal remainRefundAmt_hf = tqq9_hshfsyje;//拆分后剩余的金额-货返 - BigDecimal remainRefundAmt_yh = tqq9_discountamount;//拆分后剩余的金额-优惠 if (billentries != null && billentries.size() > 0) { + BigDecimal tqq9_hsxfsyje = dataEntity.getBigDecimal("tqq9_hsxfsyje");//单头含税现返使用金额 + BigDecimal tqq9_hshfsyje = dataEntity.getBigDecimal("tqq9_hshfsyje");//单头含税货返使用金额 + BigDecimal tqq9_discountamount = dataEntity.getBigDecimal("tqq9_discountamount");//单头优惠金额 + BigDecimal remainRefundAmt_xf = tqq9_hsxfsyje;//拆分后剩余的金额-现返 + BigDecimal remainRefundAmt_hf = tqq9_hshfsyje;//拆分后剩余的金额-货返 + BigDecimal remainRefundAmt_yh = tqq9_discountamount;//拆分后剩余的金额-优惠 + List seqs = new ArrayList<>(); + BigDecimal tqq9_totalamount = BigDecimal.ZERO; for (int i = 0; i <= billentries.size() - 1; i++) { DynamicObject billentry = billentries.get(i); + BigDecimal tqq9_amount = billentry.getBigDecimal("tqq9_amount");//明细折扣前价税合计 + tqq9_totalamount = tqq9_totalamount.add(tqq9_amount); + if (tqq9_amount.compareTo(BigDecimal.ZERO) > 0) { + seqs.add(i); + } + } + for (int i = 0; i <= seqs.size() - 1; i++) { + Integer seq = seqs.get(i); + //现返 if (tqq9_hsxfsyje.compareTo(BigDecimal.ZERO) > 0) { - if (i == billentries.size() - 1) { + if (i == seqs.size() - 1) { //如果是最后一行 - this.getModel().setValue("tqq9_xfamount", remainRefundAmt_xf, i);//明细现返使用金额 + this.getModel().setValue("tqq9_xfamount", remainRefundAmt_xf, seq);//明细现返使用金额 } else { //如果不是最后一行 - BigDecimal amountandtax = billentry.getBigDecimal("amountandtax");//明细价税合计 - if (amountandtax.compareTo(BigDecimal.ZERO) == 0) { - BigDecimal tqq9_xfamount = BigDecimal.ZERO;//分录行含税金额比例 - this.getModel().setValue("tqq9_xfamount", tqq9_xfamount, i);//明细现返使用金额 - remainRefundAmt_xf = remainRefundAmt_xf.subtract(tqq9_xfamount); + BigDecimal tqq9_amount = (BigDecimal) this.getModel().getValue("tqq9_amount", seq);//明细折扣前价税合计 + if (tqq9_amount.compareTo(BigDecimal.ZERO) == 0) { + this.getModel().setValue("tqq9_xfamount", BigDecimal.ZERO, seq);//明细现返使用金额 } else { - BigDecimal tqq9_xfamount = tqq9_hsxfsyje.multiply(amountandtax).divide(totalallamount.add(amountandtax), 2, RoundingMode.HALF_UP);//分录行含税金额比例 - this.getModel().setValue("tqq9_xfamount", tqq9_xfamount, i);//明细现返使用金额 + BigDecimal tqq9_xfamount = tqq9_hsxfsyje.multiply(tqq9_amount).divide(tqq9_totalamount, 10, RoundingMode.HALF_UP);//分录行含税金额比例 + this.getModel().setValue("tqq9_xfamount", tqq9_xfamount, seq);//明细现返使用金额 remainRefundAmt_xf = remainRefundAmt_xf.subtract(tqq9_xfamount); } } } + //货返 if (tqq9_hshfsyje.compareTo(BigDecimal.ZERO) > 0) { - - if (i == billentries.size() - 1) { + if (i == seqs.size() - 1) { //如果是最后一行 - this.getModel().setValue("tqq9_hfamount", remainRefundAmt_hf, i);//明细货返使用金额 + this.getModel().setValue("tqq9_hfamount", remainRefundAmt_hf, seq);//明细货返使用金额 } else { //如果不是最后一行 - BigDecimal amountandtax = billentry.getBigDecimal("amountandtax");//明细价税合计 - if (amountandtax.compareTo(BigDecimal.ZERO) == 0) { - BigDecimal tqq9_hfamount = BigDecimal.ZERO;//分录行含税金额比例 - this.getModel().setValue("tqq9_hfamount", tqq9_hfamount, i);//明细货返使用金额 - remainRefundAmt_hf = remainRefundAmt_hf.subtract(tqq9_hfamount); + BigDecimal tqq9_amount = (BigDecimal) this.getModel().getValue("tqq9_amount", seq);//明细折扣前价税合计 + if (tqq9_amount.compareTo(BigDecimal.ZERO) == 0) { + this.getModel().setValue("tqq9_hfamount", BigDecimal.ZERO, seq);//明细货返使用金额 } else { - BigDecimal tqq9_hfamount = tqq9_hshfsyje.multiply(amountandtax).divide(totalallamount.add(amountandtax), 2, RoundingMode.HALF_UP);//分录行含税金额比例 - this.getModel().setValue("tqq9_hfamount", tqq9_hfamount, i);//明细货返使用金额 + BigDecimal tqq9_hfamount = tqq9_hshfsyje.multiply(tqq9_amount).divide(tqq9_totalamount, 10, RoundingMode.HALF_UP);//分录行含税金额比例 + this.getModel().setValue("tqq9_hfamount", tqq9_hfamount, seq);//明细货返使用金额 remainRefundAmt_hf = remainRefundAmt_hf.subtract(tqq9_hfamount); } } } + //优惠 if (tqq9_discountamount.compareTo(BigDecimal.ZERO) > 0) { - if (i == billentries.size() - 1) { + if (i == seqs.size() - 1) { //如果是最后一行 - this.getModel().setValue("tqq9_disamount", remainRefundAmt_yh, i);//明细优惠金额 - this.getModel().setValue("discountamount", remainRefundAmt_yh, i);//明细折扣额 + this.getModel().setValue("tqq9_disamount", remainRefundAmt_yh, seq);//明细优惠金额 + this.getModel().setValue("discountamount", remainRefundAmt_yh, seq);//明细折扣额 } else { //如果不是最后一行 - BigDecimal amountandtax = billentry.getBigDecimal("amountandtax");//明细价税合计 - if (amountandtax.compareTo(BigDecimal.ZERO) == 0) { - BigDecimal tqq9_disamount = BigDecimal.ZERO;//分录行含税金额比例 - this.getModel().setValue("tqq9_disamount", tqq9_disamount, i);//明细优惠金额 - this.getModel().setValue("discountamount", tqq9_disamount, i);// - remainRefundAmt_yh = remainRefundAmt_yh.subtract(tqq9_disamount); + BigDecimal tqq9_amount = (BigDecimal) this.getModel().getValue("tqq9_amount", seq);//明细折扣前价税合计 + if (tqq9_amount.compareTo(BigDecimal.ZERO) == 0) { + this.getModel().setValue("tqq9_disamount", BigDecimal.ZERO, seq);//明细优惠金额 + this.getModel().setValue("discountamount", BigDecimal.ZERO, seq);// } else { - BigDecimal tqq9_disamount = tqq9_discountamount.multiply(amountandtax).divide(totalallamount.add(amountandtax), 2, RoundingMode.HALF_UP);//分录行含税金额比例 - this.getModel().setValue("tqq9_disamount", tqq9_disamount, i);//明细优惠金额 - this.getModel().setValue("discountamount", tqq9_disamount, i);// + BigDecimal tqq9_disamount = tqq9_discountamount.multiply(tqq9_amount).divide(tqq9_totalamount, 10, RoundingMode.HALF_UP);//分录行含税金额比例 + this.getModel().setValue("tqq9_disamount", tqq9_disamount, seq);//明细优惠金额 + this.getModel().setValue("discountamount", tqq9_disamount, seq);// remainRefundAmt_yh = remainRefundAmt_yh.subtract(tqq9_disamount); }