diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/tmc/BankContractGetDataPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/tmc/BankContractGetDataPlugin.java new file mode 100644 index 0000000..190a5e6 --- /dev/null +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/tmc/BankContractGetDataPlugin.java @@ -0,0 +1,85 @@ +package shkd.sys.sys.plugin.tmc; + +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.entity.datamodel.events.BeforePackageDataEvent; +import kd.bos.form.events.BeforeCreateListDataProviderArgs; +import kd.bos.list.plugin.AbstractListPlugin; +import kd.bos.mvc.list.ListDataProvider; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.plugin.sample.bill.list.template.BeforeCreateListDataProvider; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.sdk.plugin.Plugin; + +import java.math.BigDecimal; +import java.util.*; + +/** + * 银行借款合同————给字段’提款金额‘赋值 + * 标准单据列表插件 + */ +public class BankContractGetDataPlugin extends AbstractListPlugin implements Plugin { + @Override + public void beforePackageData(BeforePackageDataEvent e) { + super.beforePackageData(e); + DynamicObjectCollection pageData = e.getPageData(); + // 1. 收集所有合同号 + Set billnoSet = new HashSet<>(); + for (DynamicObject demoObj : pageData) { + billnoSet.add(demoObj.getString("billno")); + } + // 2. 一次性查出所有下游单据 + QFilter billnoFilter = new QFilter("loancontractbill.number", QCP.in, billnoSet.toArray()); + QFilter statusFilter = new QFilter("billstatus", QCP.equals, "C"); + DynamicObject[] sourceDyobjs = BusinessDataServiceHelper.load("cfm_loanbill", + "id,loancontractbill.number,banksyndicate_entry,banksyndicate_entry.e_bank,banksyndicate_entry.e_shareamount", + billnoFilter.and(statusFilter).toArray()); + // 3. 建立Map<合同号, List<下游单据>> + Map> billnoToLoanbills = new HashMap<>(); + for (DynamicObject obj : sourceDyobjs) { + String billno = obj.getDynamicObject("loancontractbill").getString("number"); + billnoToLoanbills.computeIfAbsent(billno, k -> new ArrayList<>()).add(obj); + } + // 4. 主循环 + for (DynamicObject demoObj : pageData) { + DynamicObject bank = demoObj.getDynamicObject("banksyndicate_entry.e_bank"); + if (bank == null) continue; + Long bankId = (Long)bank.getPkValue(); + String contraciBillno = demoObj.getString("billno"); + BigDecimal resultAmount = BigDecimal.ZERO; + List loanbills = billnoToLoanbills.get(contraciBillno); + if (loanbills != null) { + for (DynamicObject loanbill : loanbills) { + DynamicObjectCollection bankentrys = loanbill.getDynamicObjectCollection("banksyndicate_entry"); + for (DynamicObject bankentry : bankentrys) { + if (bankId.equals(bankentry.getDynamicObject("e_bank").getLong("id"))) { + resultAmount = resultAmount.add(bankentry.getBigDecimal("e_shareamount")); + } + } + } + } + demoObj.set("banksyndicate_entry.e_loanamount", resultAmount); + } + e.setPageData(pageData); + } + + @Override + public void beforeCreateListDataProvider(BeforeCreateListDataProviderArgs args) { + super.beforeCreateListDataProvider(args); +// ListDataProvider listDataProvider = new ListDataProvider(){ +// @Override +// public DynamicObjectCollection getData(int start,int limit){ +// DynamicObjectCollection rows = super.getData(start, limit); +// if(rows.isEmpty()){ +// return rows; +// } +// for (DynamicObject row : rows) { +// row.set("e_loanamount","11111"); +// } +// return rows; +// } +// }; +// args.setListDataProvider(listDataProvider); + } +} \ No newline at end of file