From ab6914de8338daa380f74bb2d454d8e423c34fc6 Mon Sep 17 00:00:00 2001 From: xuhaihui <2098865055@qq.com> Date: Wed, 14 Jan 2026 16:29:09 +0800 Subject: [PATCH] =?UTF-8?q?=E5=80=9F=E6=AC=BE=E5=8D=95=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=A4=87=E7=94=A8=E9=87=91=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../form/QuotaImprestLedgerBillPlugin.java | 45 +++++++++++++++- .../operate/DailyLoanBillSubValidatorOp.java | 53 +++++++++++++++++-- .../LoanSlipReserveFundReverserOp.java | 36 ++++++------- 3 files changed, 111 insertions(+), 23 deletions(-) diff --git a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/QuotaImprestLedgerBillPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/QuotaImprestLedgerBillPlugin.java index 5651313..0e25a2b 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/QuotaImprestLedgerBillPlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/QuotaImprestLedgerBillPlugin.java @@ -8,8 +8,12 @@ import kd.bos.form.control.EntryGrid; import kd.bos.form.events.HyperLinkClickEvent; import kd.bos.form.events.HyperLinkClickListener; import kd.bos.list.ListShowParameter; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; import org.apache.commons.lang3.StringUtils; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.EventObject; import java.util.List; @@ -26,6 +30,34 @@ public class QuotaImprestLedgerBillPlugin extends AbstractBillPlugIn implements entryGrid.addHyperClickListener(this); } + @Override + public void afterBindData(EventObject e) { + super.afterBindData(e); + DynamicObjectCollection entryEntityCollection = this.getModel().getDataEntity(true).getDynamicObjectCollection("zcgj_entryentity");//分录 + for (DynamicObject entryEntity : entryEntityCollection) { + DynamicObjectCollection zcgj_dailyloanbilldatas = entryEntity.getDynamicObjectCollection("zcgj_dailyloanbilldatas");//被引用的借款单数据 + BigDecimal totalRemainingAmount = BigDecimal.ZERO;//初始化已使用金额 + for (DynamicObject zcgj_dailyloanbilldata : zcgj_dailyloanbilldatas) { + Object zcgj_dailyLoanBillDataId = zcgj_dailyloanbilldata.getDynamicObject("fbasedataid").getPkValue();//借款单id + QFilter[] qFilters = new QFilter[]{new QFilter("id", QCP.equals, zcgj_dailyLoanBillDataId)}; + DynamicObject er_dailyloanbill = BusinessDataServiceHelper.loadSingle("er_dailyloanbill", "id,loanamount,returnedamount", qFilters);//借款单 + if (er_dailyloanbill == null) { + continue; + } + BigDecimal loanAmount = er_dailyloanbill.getBigDecimal("loanamount");//借款金额 + BigDecimal returnedAmount = er_dailyloanbill.getBigDecimal("returnedamount");//还款金额 + BigDecimal usedamount = er_dailyloanbill.getBigDecimal("usedamount");//已报销金额 + BigDecimal remainingAmount = loanAmount.subtract(returnedAmount.add(usedamount)); + if (remainingAmount.compareTo(BigDecimal.ZERO) > 0) { + totalRemainingAmount = totalRemainingAmount.add(remainingAmount); + } + } + entryEntity.set("zcgj_usedquota", totalRemainingAmount);//已使用金额 + entryEntity.set("zcgj_remainingquota", entryEntity.getBigDecimal("zcgj_quota").subtract(totalRemainingAmount));//剩余额度 + } + this.getView().updateView("zcgj_entryentity"); + } + public void hyperLinkClick(HyperLinkClickEvent hyperLinkClickEvent) { String fieldName = hyperLinkClickEvent.getFieldName(); if (StringUtils.equals(fieldName, "zcgj_usedquota")) { @@ -36,7 +68,18 @@ public class QuotaImprestLedgerBillPlugin extends AbstractBillPlugIn implements DynamicObject entryEntity = entryEntityCollection.get(rowIndex); DynamicObjectCollection zcgj_dailyLoanBillDataIds = entryEntity.getDynamicObjectCollection("zcgj_dailyloanbilldatas");//被引用的借款单数据 for (DynamicObject zcgj_dailyLoanBillDataId : zcgj_dailyLoanBillDataIds) { - dailyLoanBillDataIds.add((Long) zcgj_dailyLoanBillDataId.getDynamicObject("fbasedataid").getPkValue()); + QFilter[] qFilters = new QFilter[]{new QFilter("id", QCP.equals, zcgj_dailyLoanBillDataId.getDynamicObject("fbasedataid").getPkValue())}; + DynamicObject er_dailyloanbill = BusinessDataServiceHelper.loadSingle("er_dailyloanbill", "id,loanamount,returnedamount", qFilters);//借款单 + if (er_dailyloanbill == null) { + continue; + } + BigDecimal loanAmount = er_dailyloanbill.getBigDecimal("loanamount");//借款金额 + BigDecimal returnedAmount = er_dailyloanbill.getBigDecimal("returnedamount");//还款金额 + BigDecimal usedamount = er_dailyloanbill.getBigDecimal("usedamount");//已报销金额 + BigDecimal remainingAmount = loanAmount.subtract(returnedAmount.add(usedamount)); + if (remainingAmount.compareTo(BigDecimal.ZERO) > 0) { + dailyLoanBillDataIds.add((Long) zcgj_dailyLoanBillDataId.getDynamicObject("fbasedataid").getPkValue()); + } } ListShowParameter listShowParameter = new ListShowParameter(); listShowParameter.setFormId("bos_list"); //列表界面 diff --git a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/operate/DailyLoanBillSubValidatorOp.java b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/operate/DailyLoanBillSubValidatorOp.java index 222b935..f38c80c 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/operate/DailyLoanBillSubValidatorOp.java +++ b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/operate/DailyLoanBillSubValidatorOp.java @@ -77,8 +77,17 @@ public class DailyLoanBillSubValidatorOp extends AbstractOperationServicePlugIn continue; } if (person.getPkValue().equals(applier.getPkValue())) { - BigDecimal zcgj_remainingquota = entryEntity.getBigDecimal("zcgj_remainingquota");//剩余额度 - if (zcgj_remainingquota.compareTo(loanAmount) < 0) { +// BigDecimal zcgj_remainingquota = entryEntity.getBigDecimal("zcgj_remainingquota");//剩余额度 +// if (zcgj_remainingquota.compareTo(loanAmount) < 0) { +// this.addFatalErrorMessage(dataEnt, "借款金额超过剩余额度!剩余额度为:" + zcgj_remainingquota); +// return; +// } + BigDecimal zcgj_remainingquota = calculateRemainingQuota(entryEntity);//剩余额度 + if (zcgj_remainingquota.compareTo(BigDecimal.ZERO) == 0) { + // 当剩余额度为零时的处理逻辑 + this.addFatalErrorMessage(dataEnt, "借款金额超过剩余额度!剩余额度为:" + 0); + return; + } else if (zcgj_remainingquota.compareTo(loanAmount) < 0) { this.addFatalErrorMessage(dataEnt, "借款金额超过剩余额度!剩余额度为:" + zcgj_remainingquota); return; } @@ -130,8 +139,17 @@ public class DailyLoanBillSubValidatorOp extends AbstractOperationServicePlugIn DynamicObject zcgj_personType = entryEntity.getDynamicObject("zcgj_persontype");//人员类型 if (zcgj_personType != null && "项目筹备".equals(zcgj_personType.getString("number"))) { hasProjectPreparation = true; - BigDecimal zcgj_remainingquota = entryEntity.getBigDecimal("zcgj_remainingquota");//剩余额度 - if (zcgj_remainingquota.compareTo(loanAmount) < 0) { +// BigDecimal zcgj_remainingquota = entryEntity.getBigDecimal("zcgj_remainingquota");//剩余额度 +// if (zcgj_remainingquota.compareTo(loanAmount) < 0) { +// this.addFatalErrorMessage(dataEnt, "借款金额超过剩余额度!剩余额度为:" + zcgj_remainingquota); +// return; +// } + BigDecimal zcgj_remainingquota = calculateRemainingQuota(entryEntity);//剩余额度 + if (zcgj_remainingquota.compareTo(BigDecimal.ZERO) == 0) { + // 当剩余额度为零时的处理逻辑 + this.addFatalErrorMessage(dataEnt, "借款金额超过剩余额度!剩余额度为:" + 0); + return; + } else if (zcgj_remainingquota.compareTo(loanAmount) < 0) { this.addFatalErrorMessage(dataEnt, "借款金额超过剩余额度!剩余额度为:" + zcgj_remainingquota); return; } @@ -149,4 +167,31 @@ public class DailyLoanBillSubValidatorOp extends AbstractOperationServicePlugIn } } } + + /** + * 计算剩余额度 + * + * @param entryEntity 分录实体 + * @return 剩余额度 + */ + private BigDecimal calculateRemainingQuota(DynamicObject entryEntity) { + DynamicObjectCollection zcgj_dailyloanbilldatas = entryEntity.getDynamicObjectCollection("zcgj_dailyloanbilldatas");//被引用的借款单数据 + BigDecimal totalRemainingAmount = BigDecimal.ZERO;//初始化已使用金额 + for (DynamicObject zcgj_dailyloanbilldata : zcgj_dailyloanbilldatas) { + Object zcgj_dailyLoanBillDataId = zcgj_dailyloanbilldata.getDynamicObject("fbasedataid").getPkValue();//借款单id + QFilter[] qFilters = new QFilter[]{new QFilter("id", QCP.equals, zcgj_dailyLoanBillDataId)}; + DynamicObject er_dailyloanbill = BusinessDataServiceHelper.loadSingle("er_dailyloanbill", "id,loanamount,returnedamount", qFilters);//借款单 + if (er_dailyloanbill == null) { + continue; + } + BigDecimal loanAmount = er_dailyloanbill.getBigDecimal("loanamount");//借款金额 + BigDecimal returnedAmount = er_dailyloanbill.getBigDecimal("returnedamount");//还款金额 + BigDecimal usedamount = er_dailyloanbill.getBigDecimal("usedamount");//已报销金额 + BigDecimal remainingAmount = loanAmount.subtract(returnedAmount.add(usedamount)); + if (remainingAmount.compareTo(BigDecimal.ZERO) > 0) { + totalRemainingAmount = totalRemainingAmount.add(remainingAmount); + } + } + return entryEntity.getBigDecimal("zcgj_quota").subtract(totalRemainingAmount); + } } diff --git a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/operate/LoanSlipReserveFundReverserOp.java b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/operate/LoanSlipReserveFundReverserOp.java index 100ac9c..6c6b3f9 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/operate/LoanSlipReserveFundReverserOp.java +++ b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/operate/LoanSlipReserveFundReverserOp.java @@ -66,21 +66,21 @@ public class LoanSlipReserveFundReverserOp extends AbstractOperationServicePlugI if (person.getPkValue().equals(applier.getPkValue())) { if (operationKey.equals("submit")) { //提交 - BigDecimal zcgj_usedquota = entryEntity.getBigDecimal("zcgj_usedquota").add(loanAmount);//已使用+借款金额 - entryEntity.set("zcgj_usedquota", zcgj_usedquota);//已使用 - BigDecimal zcgj_quota = entryEntity.getBigDecimal("zcgj_quota");//额度 - BigDecimal zcgj_remainingquota = zcgj_quota.subtract(entryEntity.getBigDecimal("zcgj_usedquota"));//额度-已使用 - entryEntity.set("zcgj_remainingquota", zcgj_remainingquota);//剩余额度 +// BigDecimal zcgj_usedquota = entryEntity.getBigDecimal("zcgj_usedquota").add(loanAmount);//已使用+借款金额 +// entryEntity.set("zcgj_usedquota", zcgj_usedquota);//已使用 +// BigDecimal zcgj_quota = entryEntity.getBigDecimal("zcgj_quota");//额度 +// BigDecimal zcgj_remainingquota = zcgj_quota.subtract(entryEntity.getBigDecimal("zcgj_usedquota"));//额度-已使用 +// entryEntity.set("zcgj_remainingquota", zcgj_remainingquota);//剩余额度 DynamicObject newCurrency = new DynamicObject(zcgj_dailyloanbilldatas.getDynamicObjectType()); newCurrency.set("fbasedataId", er_dailyLoanBill); zcgj_dailyloanbilldatas.add(newCurrency); entryEntity.set("zcgj_dailyloanbilldatas", zcgj_dailyloanbilldatas);//借款单 } else if (operationKey.equals("unsubmit") || operationKey.equals("unaudit")) { //撤销、反审核 - BigDecimal zcgj_usedquota = entryEntity.getBigDecimal("zcgj_usedquota").subtract(er_dailyLoanBill.getBigDecimal("loanamount"));//已使用+借款金额 - entryEntity.set("zcgj_usedquota", zcgj_usedquota);//已使用 - BigDecimal zcgj_remainingquota = entryEntity.getBigDecimal("zcgj_quota").subtract(entryEntity.getBigDecimal("zcgj_usedquota"));//额度-已使用 - entryEntity.set("zcgj_remainingquota", zcgj_remainingquota);//剩余额度 +// BigDecimal zcgj_usedquota = entryEntity.getBigDecimal("zcgj_usedquota").subtract(er_dailyLoanBill.getBigDecimal("loanamount"));//已使用+借款金额 +// entryEntity.set("zcgj_usedquota", zcgj_usedquota);//已使用 +// BigDecimal zcgj_remainingquota = entryEntity.getBigDecimal("zcgj_quota").subtract(entryEntity.getBigDecimal("zcgj_usedquota"));//额度-已使用 +// entryEntity.set("zcgj_remainingquota", zcgj_remainingquota);//剩余额度 Iterator iterator = zcgj_dailyloanbilldatas.iterator(); while (iterator.hasNext()) { DynamicObject dynamicObject = iterator.next(); @@ -116,21 +116,21 @@ public class LoanSlipReserveFundReverserOp extends AbstractOperationServicePlugI DynamicObjectCollection zcgj_dailyloanbilldatas = entryEntity.getDynamicObjectCollection("zcgj_dailyloanbilldatas");//借款单 if (operationKey.equals("submit")) { //提交 - BigDecimal zcgj_usedquota = entryEntity.getBigDecimal("zcgj_usedquota").add(loanAmount);//已使用+借款金额 - entryEntity.set("zcgj_usedquota", zcgj_usedquota);//已使用 - BigDecimal zcgj_quota = entryEntity.getBigDecimal("zcgj_quota");//额度 - BigDecimal zcgj_remainingquota = zcgj_quota.subtract(entryEntity.getBigDecimal("zcgj_usedquota"));//额度-已使用 - entryEntity.set("zcgj_remainingquota", zcgj_remainingquota);//剩余额度 +// BigDecimal zcgj_usedquota = entryEntity.getBigDecimal("zcgj_usedquota").add(loanAmount);//已使用+借款金额 +// entryEntity.set("zcgj_usedquota", zcgj_usedquota);//已使用 +// BigDecimal zcgj_quota = entryEntity.getBigDecimal("zcgj_quota");//额度 +// BigDecimal zcgj_remainingquota = zcgj_quota.subtract(entryEntity.getBigDecimal("zcgj_usedquota"));//额度-已使用 +// entryEntity.set("zcgj_remainingquota", zcgj_remainingquota);//剩余额度 DynamicObject newCurrency = new DynamicObject(zcgj_dailyloanbilldatas.getDynamicObjectType()); newCurrency.set("fbasedataId", er_dailyLoanBill); zcgj_dailyloanbilldatas.add(newCurrency); entryEntity.set("zcgj_dailyloanbilldatas", zcgj_dailyloanbilldatas);//借款单 } else if (operationKey.equals("unsubmit") || operationKey.equals("unaudit")) { //撤销、反审核 - BigDecimal zcgj_usedquota = entryEntity.getBigDecimal("zcgj_usedquota").subtract(er_dailyLoanBill.getBigDecimal("loanamount"));//已使用+借款金额 - entryEntity.set("zcgj_usedquota", zcgj_usedquota);//已使用 - BigDecimal zcgj_remainingquota = entryEntity.getBigDecimal("zcgj_quota").subtract(entryEntity.getBigDecimal("zcgj_usedquota"));//额度-已使用 - entryEntity.set("zcgj_remainingquota", zcgj_remainingquota);//剩余额度 +// BigDecimal zcgj_usedquota = entryEntity.getBigDecimal("zcgj_usedquota").subtract(er_dailyLoanBill.getBigDecimal("loanamount"));//已使用+借款金额 +// entryEntity.set("zcgj_usedquota", zcgj_usedquota);//已使用 +// BigDecimal zcgj_remainingquota = entryEntity.getBigDecimal("zcgj_quota").subtract(entryEntity.getBigDecimal("zcgj_usedquota"));//额度-已使用 +// entryEntity.set("zcgj_remainingquota", zcgj_remainingquota);//剩余额度 Iterator iterator = zcgj_dailyloanbilldatas.iterator(); while (iterator.hasNext()) { DynamicObject dynamicObject = iterator.next();