From 965a162a3fd130d60a5a00ce6e1dcba9786dbee7 Mon Sep 17 00:00:00 2001 From: xuhaihui <2098865055@qq.com> Date: Mon, 29 Dec 2025 15:45:01 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=A0=87=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SupplierBankInfoClickBillPluginExt.java | 206 ++++++++++++++++++ 1 file changed, 206 insertions(+) create mode 100644 code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/SupplierBankInfoClickBillPluginExt.java diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/SupplierBankInfoClickBillPluginExt.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/SupplierBankInfoClickBillPluginExt.java new file mode 100644 index 0000000..b3e9b9c --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/SupplierBankInfoClickBillPluginExt.java @@ -0,0 +1,206 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package zcgj.zcdev.zcdev.pr.plugin.form; + +import java.util.ArrayList; +import java.util.EventObject; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import kd.bos.bill.AbstractBillPlugIn; +import kd.bos.context.RequestContext; +import kd.bos.data.ParameterHelper; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.dataentity.resource.ResManager; +import kd.bos.entity.datamodel.ListSelectedRowCollection; +import kd.bos.entity.list.option.ListUserOption; +import kd.bos.entity.plugin.Plugin; +import kd.bos.form.CloseCallBack; +import kd.bos.form.FormConfig; +import kd.bos.form.FormMetadataCache; +import kd.bos.form.ShowFormHelper; +import kd.bos.form.control.Control; +import kd.bos.form.events.ClosedCallBackEvent; +import kd.bos.form.field.TextEdit; +import kd.bos.list.ListFilterParameter; +import kd.bos.list.ListShowParameter; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; + +/* + * 付款申请单(项目资金)供应商银行信息字段点击系统插件二开 + */ +public class SupplierBankInfoClickBillPluginExt extends AbstractBillPlugIn { + public SupplierBankInfoClickBillPluginExt() { + } + + public void registerListener(EventObject e) { + super.registerListener(e); + TextEdit payeebanknum = (TextEdit) this.getView().getControl("bankaccount"); + payeebanknum.addButtonClickListener(this); + } + + public void click(EventObject evt) { + super.click(evt); + Control c = (Control) evt.getSource(); + switch (c.getKey().toLowerCase()) { + case "bankaccount": + this.showBankInfoF7(); + default: + } + } + + public void closedCallBack(ClosedCallBackEvent closedCallBackEvent) { + super.closedCallBack(closedCallBackEvent); + String actionId = closedCallBackEvent.getActionId(); + if ("payeeaccountbank".equals(actionId)) { + Object returnData = closedCallBackEvent.getReturnData(); + if (returnData != null) { + int row = this.getModel().getEntryCurrentRowIndex("entryentity"); + ListSelectedRowCollection rowInfo = (ListSelectedRowCollection) returnData; + Object entryKey = rowInfo.getEntryPrimaryKeyValues()[0]; + DynamicObject bankRowObject = this.loadBankInfo((Long) entryKey); + this.getPageCache().put("bankaccountcache-" + row, bankRowObject.getString("bankaccount")); + this.getModel().setValue("bankname", bankRowObject.getDynamicObject("bank").getString("name"), row); + this.getModel().setValue("bankaccount", bankRowObject.getString("bankaccount"), row); + this.getModel().setValue("bebank", bankRowObject.getDynamicObject("bank").getPkValue(), row); + } + } + + } + + private void showBankInfoF7() { + int row = this.getModel().getEntryCurrentRowIndex("entryentity"); + DynamicObject contract = (DynamicObject) this.getModel().getValue("contract", row); + DynamicObject partner = null; + if (this.isSupplier()) { + partner = contract.getDynamicObject("partb"); + } else { + partner = contract.getDynamicObject("parta"); + } + + boolean hasDefaultBankInfo = this.hasDefaultBankInfo(partner); + if (!hasDefaultBankInfo) { + if (this.isSupplier()) { + this.getView().showTipNotification(ResManager.loadKDString("请维护对应供应商的银行信息。", "SupplierBankInfoClickBillPlugin_0", "ec-contract-formplugin", new Object[0])); + } else { + this.getView().showTipNotification(ResManager.loadKDString("请维护对应客户的银行信息。", "SupplierBankInfoClickBillPlugin_1", "ec-contract-formplugin", new Object[0])); + } + + } else { + ListShowParameter lsp = null; + lsp = this.getSupplierBankInfoShowParameter(partner.getPkValue()); + CloseCallBack closeCallBack = new CloseCallBack(this, "payeeaccountbank"); + lsp.setCloseCallBack(closeCallBack); + this.getView().showForm(lsp); + } + } + + private boolean hasDefaultBankInfo(DynamicObject supplier) { + if (supplier == null) { + return false; + } else { + String entity = supplier.getDataEntityType().getName(); + supplier = BusinessDataServiceHelper.loadSingleFromCache(supplier.getPkValue(), entity); + DynamicObjectCollection bankColls = supplier.getDynamicObjectCollection("entry_bank"); + DynamicObject defaultBankAccountInfo = null; + + for (int i = 0; i < bankColls.size(); ++i) { + if (i == 0 || ((DynamicObject) bankColls.get(i)).getBoolean("isdefault_bank")) { + defaultBankAccountInfo = (DynamicObject) bankColls.get(i); + } + } + + if (defaultBankAccountInfo != null) { + return true; + } else { + return false; + } + } + } + + private ListShowParameter createDynamicListShowParameter(String entity, String entry, List showFields) { + ListShowParameter lsp = ShowFormHelper.createShowListForm(entity, false, 2); + lsp.setCustomParam("entity", entity); + lsp.setCustomParam("entry", entry); + lsp.setCustomParam("isEntryMain", true); + lsp.setCustomParam("showFields", showFields); + this.clearPlugins(lsp); + this.registerScript("kingdee.ec.cont.mainpage.ecdynamiclistscriptplugin", lsp); + this.setMergeRow(false, lsp); + lsp.setAppId("cont"); + return lsp; + } + + private void registerScript(String script, ListShowParameter lsp) { + List plugins = this.getOrCreateFormConfig(lsp).getPlugins(); + Plugin p = new Plugin(); + p.setClassName(script); + p.setType(1); + plugins.add(p); + } + + private void clearPlugins(ListShowParameter lsp) { + List plugins = this.getOrCreateFormConfig(lsp).getPlugins(); + plugins.clear(); + } + + private void setMergeRow(boolean mergeRow, ListShowParameter lsp) { + Map listUserOptions = ParameterHelper.getListOptions(Long.parseLong(RequestContext.get().getUserId()), lsp.getBillFormId(), this.getOrCreateFormConfig(lsp).getListUserOption(), (String) null); + ListUserOption listUserOption = new ListUserOption(listUserOptions); + listUserOption.setMergeRow(mergeRow); + lsp.setListUserOption(listUserOption); + } + + private FormConfig getOrCreateFormConfig(ListShowParameter lsp) { + FormConfig formConfig = lsp.getFormConfig(); + if (formConfig == null) { + formConfig = FormMetadataCache.getFormConfig(lsp.getFormId()); + lsp.setFormConfig(formConfig); + } + + return formConfig; + } + + private ListShowParameter getSupplierBankInfoShowParameter(Object pk) { + List showFields = new ArrayList(); + showFields.add("bank.name"); + showFields.add("bankaccount"); + showFields.add("accountname"); + showFields.add("currency.name"); + showFields.add("isdefault_bank"); + ListShowParameter lsp = this.createDynamicListShowParameter(this.isSupplier() ? "bd_supplier" : "bd_customer", "entry_bank", showFields); + ListFilterParameter lfp = new ListFilterParameter(); + lfp.setFilter(new QFilter("id", "=", pk)); + lsp.setListFilterParameter(lfp); + lsp.setCaption(this.isSupplier() ? ResManager.loadKDString("供应商-银行信息", "SupplierBankInfoClickBillPlugin_2", "ec-contract-formplugin", new Object[0]) : ResManager.loadKDString("客户-银行信息", "SupplierBankInfoClickBillPlugin_3", "ec-contract-formplugin", new Object[0])); + return lsp; + } + + public DynamicObject loadBankInfo(Long entryPk) { + DynamicObject customerOrSupplier = BusinessDataServiceHelper.loadSingle(this.isSupplier() ? "bd_supplier" : "bd_customer", "bankaccount,accountname,bank,currency,isdefault_bank", new QFilter[]{new QFilter("entry_bank.id", "=", entryPk)}); + if (customerOrSupplier != null) { + DynamicObjectCollection entryBanks = customerOrSupplier.getDynamicObjectCollection("entry_bank"); + Iterator var4 = entryBanks.iterator(); + + while (var4.hasNext()) { + DynamicObject row = (DynamicObject) var4.next(); + if (row.getPkValue().equals(entryPk)) { + return row; + } + } + } + + return null; + } + + private boolean isSupplier() { + String formId = this.getView().getEntityId(); + return !"ec_incomeapply".equals(formId); + } +} From f41f997baa6a75471ff7052c94aaec6e7f8601e4 Mon Sep 17 00:00:00 2001 From: xuhaihui <2098865055@qq.com> Date: Mon, 29 Dec 2025 17:02:00 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=AE=9A=E9=A2=9D=E5=A4=87=E7=94=A8?= =?UTF-8?q?=E9=87=91=E5=88=9D=E5=A7=8B=E5=8F=B0=E8=B4=A6=E8=B7=B3=E8=BD=AC?= =?UTF-8?q?=E5=80=9F=E6=AC=BE=E5=8D=95=E5=88=97=E8=A1=A8=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../form/QuotaImprestLedgerBillPlugin.java | 49 +++++++++++++++++++ .../LoanSlipReserveFundReverserOp.java | 25 ++++++++++ 2 files changed, 74 insertions(+) create mode 100644 code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/QuotaImprestLedgerBillPlugin.java 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 new file mode 100644 index 0000000..5651313 --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/QuotaImprestLedgerBillPlugin.java @@ -0,0 +1,49 @@ +package zcgj.zcdev.zcdev.fs.plugin.form; + +import kd.bos.bill.AbstractBillPlugIn; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.form.ShowType; +import kd.bos.form.control.EntryGrid; +import kd.bos.form.events.HyperLinkClickEvent; +import kd.bos.form.events.HyperLinkClickListener; +import kd.bos.list.ListShowParameter; +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.EventObject; +import java.util.List; + +/* + * 定额备用金初始台账表单插件 + */ +public class QuotaImprestLedgerBillPlugin extends AbstractBillPlugIn implements HyperLinkClickListener { + + @Override + public void registerListener(EventObject e) { + super.registerListener(e); + EntryGrid entryGrid = this.getView().getControl("zcgj_entryentity"); + entryGrid.addHyperClickListener(this); + } + + public void hyperLinkClick(HyperLinkClickEvent hyperLinkClickEvent) { + String fieldName = hyperLinkClickEvent.getFieldName(); + if (StringUtils.equals(fieldName, "zcgj_usedquota")) { + //已使用 + List dailyLoanBillDataIds = new ArrayList<>(); + int rowIndex = hyperLinkClickEvent.getRowIndex(); + DynamicObjectCollection entryEntityCollection = this.getModel().getDataEntity(true).getDynamicObjectCollection("zcgj_entryentity");//分录 + 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()); + } + ListShowParameter listShowParameter = new ListShowParameter(); + listShowParameter.setFormId("bos_list"); //列表界面 + listShowParameter.setBillFormId("er_dailyloanbill"); //单据的标识 + listShowParameter.getOpenStyle().setShowType(ShowType.MainNewTabPage); + dailyLoanBillDataIds.forEach(listShowParameter::addLinkQueryPkId); + this.getView().showForm(listShowParameter); + } + } +} 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 e3d0df3..100ac9c 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 @@ -16,6 +16,7 @@ import java.time.LocalDate; import java.time.ZoneId; import java.util.ArrayList; import java.util.Date; +import java.util.Iterator; import java.util.List; /** @@ -61,6 +62,7 @@ public class LoanSlipReserveFundReverserOp extends AbstractOperationServicePlugI if (person == null) { continue; } + DynamicObjectCollection zcgj_dailyloanbilldatas = entryEntity.getDynamicObjectCollection("zcgj_dailyloanbilldatas");//借款单 if (person.getPkValue().equals(applier.getPkValue())) { if (operationKey.equals("submit")) { //提交 @@ -69,12 +71,23 @@ public class LoanSlipReserveFundReverserOp extends AbstractOperationServicePlugI 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);//剩余额度 + Iterator iterator = zcgj_dailyloanbilldatas.iterator(); + while (iterator.hasNext()) { + DynamicObject dynamicObject = iterator.next(); + if (er_dailyLoanBill.get("billno").equals(dynamicObject.getDynamicObject("fbasedataid").get("billno"))) { + iterator.remove(); + } + } } break; } @@ -100,6 +113,7 @@ public class LoanSlipReserveFundReverserOp extends AbstractOperationServicePlugI // DynamicObject person = entryEntity.getDynamicObject("zcgj_person");//人员 DynamicObject zcgj_personType = entryEntity.getDynamicObject("zcgj_persontype");//人员类型 if (zcgj_personType != null && zcgj_personType.getString("number").equals("项目筹备")) { + DynamicObjectCollection zcgj_dailyloanbilldatas = entryEntity.getDynamicObjectCollection("zcgj_dailyloanbilldatas");//借款单 if (operationKey.equals("submit")) { //提交 BigDecimal zcgj_usedquota = entryEntity.getBigDecimal("zcgj_usedquota").add(loanAmount);//已使用+借款金额 @@ -107,12 +121,23 @@ public class LoanSlipReserveFundReverserOp extends AbstractOperationServicePlugI 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);//剩余额度 + Iterator iterator = zcgj_dailyloanbilldatas.iterator(); + while (iterator.hasNext()) { + DynamicObject dynamicObject = iterator.next(); + if (er_dailyLoanBill.get("billno").equals(dynamicObject.getDynamicObject("fbasedataid").get("billno"))) { + iterator.remove(); + } + } } break; } From 4ea564dc5d29a8287ac22c5c9ad44a00d79f6d53 Mon Sep 17 00:00:00 2001 From: xuhaihui <2098865055@qq.com> Date: Mon, 29 Dec 2025 17:02:38 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E4=BB=98=E6=AC=BE=E7=94=B3=E8=AF=B7?= =?UTF-8?q?=E5=8D=95=E4=BE=9B=E5=BA=94=E5=95=86=E8=BF=87=E6=BB=A4=E6=94=B6?= =?UTF-8?q?=E6=AC=BE=E8=B4=A6=E5=8F=B7=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pr/plugin/form/PaymentapplyGeneralPlugin.java | 4 ++++ .../form/SupplierBankInfoClickBillPluginExt.java | 14 ++++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PaymentapplyGeneralPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PaymentapplyGeneralPlugin.java index 709c987..3d81979 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PaymentapplyGeneralPlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/PaymentapplyGeneralPlugin.java @@ -121,6 +121,10 @@ public class PaymentapplyGeneralPlugin extends AbstractBillPlugIn implements Plu this.getModel().setValue("zcgj_isshowcgsq",isshowcgsq); this.getView().updateView("zcgj_isshowcgsq"); } + } else if (name.equals("zcgj_supplier")) { + //供应商 + int rowIndex = changeData.getRowIndex(); + this.getModel().setValue("bankaccount", null, rowIndex);//收款账号 } } } diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/SupplierBankInfoClickBillPluginExt.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/SupplierBankInfoClickBillPluginExt.java index b3e9b9c..4ccbe7c 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/SupplierBankInfoClickBillPluginExt.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/SupplierBankInfoClickBillPluginExt.java @@ -78,11 +78,21 @@ public class SupplierBankInfoClickBillPluginExt extends AbstractBillPlugIn { int row = this.getModel().getEntryCurrentRowIndex("entryentity"); DynamicObject contract = (DynamicObject) this.getModel().getValue("contract", row); DynamicObject partner = null; - if (this.isSupplier()) { + //二开添加↓ + partner = (DynamicObject) this.getModel().getValue("zcgj_supplier", row);//供应商 + if (partner == null) { + if (this.isSupplier()) { + partner = contract.getDynamicObject("partb");//合同乙方 + } else { + partner = contract.getDynamicObject("parta");//合同甲方 + } + } + //二开添加↑ +/* if (this.isSupplier()) { partner = contract.getDynamicObject("partb"); } else { partner = contract.getDynamicObject("parta"); - } + }*///源码 boolean hasDefaultBankInfo = this.hasDefaultBankInfo(partner); if (!hasDefaultBankInfo) {