From bfc9144226f279f5105e4782c363117fc532a49d Mon Sep 17 00:00:00 2001 From: 16358 <1635849544@qq.com> Date: Tue, 29 Apr 2025 12:49:35 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BA=BA=EF=BC=9A?= =?UTF-8?q?=E5=88=98=E6=A3=AE=E6=BE=B3=20=E6=97=A5=E6=9C=9F=EF=BC=9A2025/4?= =?UTF-8?q?/28=2015=EF=BC=9A30=20=E5=86=85=E5=AE=B9=EF=BC=9A1=E3=80=81?= =?UTF-8?q?=E5=80=BA=E5=88=B8=E5=8F=91=E8=A1=8C=E8=AE=A1=E5=88=92=E8=BF=87?= =?UTF-8?q?=E6=BB=A4F7=E9=80=BB=E8=BE=91=E4=BF=AE=E5=A4=8D=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/tmc/BondSelectEntryOrgPlugin.java | 35 +++++++++++++++++-- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/tmc/BondSelectEntryOrgPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/tmc/BondSelectEntryOrgPlugin.java index 1ef3835..00af45d 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/tmc/BondSelectEntryOrgPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/tmc/BondSelectEntryOrgPlugin.java @@ -10,6 +10,7 @@ import kd.bos.form.field.events.BeforeF7SelectListener; import kd.bos.list.ListShowParameter; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.org.OrgUnitServiceHelper; import kd.bos.servicehelper.org.OrgViewType; import kd.sdk.plugin.Plugin; @@ -68,9 +69,37 @@ public class BondSelectEntryOrgPlugin extends AbstractBillPlugIn implements Plug dataFilter.add(accountQFilter.and(accountQFilter2)); } if("shkd_enryborrower".equals(name)){ - List allSubordinateOrgs = OrgUnitServiceHelper.getAllSubordinateOrgs(OrgViewType.BDControl, Collections.singletonList(orgId), true); - QFilter accountQFilter = new QFilter("id", QCP.in, allSubordinateOrgs); - dataFilter.add(accountQFilter); + String number = org.getString("number"); + List allSubordinateOrgs = new ArrayList<>(); + //编码为SIG0010000的组织要找到SIG0000000的所有子集 + if("SIG0010000".equals(number)){ + QFilter qFilter = new QFilter("number", "=", "SIG0000000"); + DynamicObject bos_org = BusinessDataServiceHelper.loadSingle("bos_org","id",qFilter.toArray()); + allSubordinateOrgs = OrgUnitServiceHelper.getAllSubordinateOrgs(OrgViewType.BDControl, Collections.singletonList((Long)bos_org.getPkValue()), false); + QFilter accountQFilter = new QFilter("id", QCP.in, allSubordinateOrgs); + dataFilter.add(accountQFilter); + }else{ + QFilter qFilter = new QFilter("number", "=", number+"-uatierp"); + DynamicObject bos_org = BusinessDataServiceHelper.loadSingle("bos_org","id",qFilter.toArray()); + if(bos_org == null){ + //未找到后缀为uatierp的合并层 正常拿下级 + allSubordinateOrgs = OrgUnitServiceHelper.getAllSubordinateOrgs(OrgViewType.BDControl, Collections.singletonList(orgId), true); + QFilter accountQFilter = new QFilter("id", QCP.in, allSubordinateOrgs); + dataFilter.add(accountQFilter); + }else { + //找到了后缀为uatierp的合并层 用其当上级找所有下级 然后过滤掉所有后缀为uatierp的值 + allSubordinateOrgs = OrgUnitServiceHelper.getAllSubordinateOrgs(OrgViewType.BDControl, Collections.singletonList((Long)bos_org.getPkValue()), false); + List demoArr = new ArrayList<>(); + for (Long subId : allSubordinateOrgs) { + QFilter qFilter1 = new QFilter("id", "=", subId); + DynamicObject tempOrg = BusinessDataServiceHelper.loadSingle("bos_org","id,number",qFilter1.toArray()); + if(tempOrg.getString("number").contains("uatierp"))continue; + demoArr.add((Long)tempOrg.getPkValue()); + } + QFilter accountQFilter = new QFilter("id", QCP.in, demoArr); + dataFilter.add(accountQFilter); + } + } } formShowParameter.getListFilterParameter().getQFilters().addAll(dataFilter); } From b80131d5b7cea39625fc463a9b6c33010e48bed9 Mon Sep 17 00:00:00 2001 From: 16358 <1635849544@qq.com> Date: Tue, 29 Apr 2025 15:20:16 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BA=BA=EF=BC=9A?= =?UTF-8?q?=E5=88=98=E6=A3=AE=E6=BE=B3=20=E6=97=A5=E6=9C=9F=EF=BC=9A2025/4?= =?UTF-8?q?/29=2015=EF=BC=9A19=20=E5=86=85=E5=AE=B9=EF=BC=9A1=E3=80=81?= =?UTF-8?q?=E8=9E=8D=E8=B5=84=E5=8A=A8=E6=80=81=E6=9F=A5=E8=AF=A2=E6=98=8E?= =?UTF-8?q?=E7=BB=86=E8=A1=A8=E6=9F=A5=E8=AF=A2=E8=BF=87=E6=BB=A4BUG?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D/jar=E6=9B=B4=E6=96=B0=E4=B8=BA=E6=AD=A3?= =?UTF-8?q?=E5=BC=8F=E7=8E=AF=E5=A2=83=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../report/TradefinanceSelectPlugin.java | 88 ++++--------------- 1 file changed, 15 insertions(+), 73 deletions(-) diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/TradefinanceSelectPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/TradefinanceSelectPlugin.java index 8814664..0c50eee 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/TradefinanceSelectPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/report/TradefinanceSelectPlugin.java @@ -96,11 +96,10 @@ public class TradefinanceSelectPlugin extends AbstractTmcTreeReportDataPlugin { DataSet interestRateDS = TradeFinanceFilterHelper.interestRateDS(loanBillIds, this.cutoffdate, clazz); rows = rows.leftJoin(interestRateDS).on("loanbillid", "loanbillid").select(rows.getRowMeta().getFieldNames(), new String[]{"intrate"}).finish(); rows = this.addFeeAmtDs(rows, loanBillIds); - rows = this.addCalIntAmtDs(rows, loanBillIds); // DynamicObjectCollection rowData = ORM.create().toPlainDynamicObjectCollection(rows); return rows; - + } } } @@ -143,7 +142,8 @@ public class TradefinanceSelectPlugin extends AbstractTmcTreeReportDataPlugin { } protected List orinalAmountField() { - return Arrays.asList("contractamt", "drawamount", "unpaidamt", "unpaidintamt", "paidamt", "estinterestamt", "paidintamt", "feeamt", "compamt" ); + return Arrays.asList("contractamt", "drawamount", "unpaidamt", "unpaidintamt", "paidamt", "estinterestamt", "paidintamt", "feeamt", "compamt" ,"shkd_contractamt","shkd_drawamount_statccy","shkd_remainingamount","shkd_paidamt"); + } protected String getReportField(String field) { @@ -287,7 +287,7 @@ public class TradefinanceSelectPlugin extends AbstractTmcTreeReportDataPlugin { //剩余提款金额:合同份额金额 - 剩余提款金额 DataSet copy = main_balanceDataSet2.copy(); - DataSet main_balanceDataSet3 = copy.addField("shkd_contractamt - shkd_drawamount_statccy", "shkd_drawamount"); + DataSet main_balanceDataSet3 = copy.addField("shkd_contractamt - shkd_drawamount_statccy", "shkd_remainingamount"); //本年还款金额 MainEntityType dataEntityType3 = MetadataServiceHelper.getDataEntityType("cfm_loancontractbill"); @@ -441,14 +441,22 @@ public class TradefinanceSelectPlugin extends AbstractTmcTreeReportDataPlugin { "unpaidamt_statccy", "estinterestamt_statccy", "paidintamt_statccy", - "unpaidintamt_statccy" + "unpaidintamt_statccy", + "shkd_contractamt", + "shkd_drawamount_statccy", + "shkd_remainingamount", + "shkd_paidamt" }, new String[]{String.format("round(drawamount_statccy, %s)", amtPrecision), String.format("round(paidamt_statccy, %s)", amtPrecision), String.format("round(unpaidamt_statccy, %s)", amtPrecision), String.format("round(estinterestamt_statccy, %s)", amtPrecision), String.format("round(paidintamt_statccy, %s)", amtPrecision), - String.format("round(unpaidintamt_statccy, %s)", amtPrecision) + String.format("round(unpaidintamt_statccy, %s)", amtPrecision), + String.format("round(shkd_contractamt, %s)", amtPrecision), + String.format("round(shkd_drawamount_statccy, %s)", amtPrecision), + String.format("round(shkd_remainingamount, %s)", amtPrecision), + String.format("round(shkd_paidamt, %s)", amtPrecision) }); } @@ -593,78 +601,12 @@ public class TradefinanceSelectPlugin extends AbstractTmcTreeReportDataPlugin { return loanBillDS.addField("estinterestamt + feeamt", "compamt"); } - protected DataSet addCalIntAmtDs(DataSet loanBillDS, List loanBillIds) { - List field = new ArrayList(2); - field.add(new Field("loanbillid", DataType.LongType)); - field.add(new Field("calintamt", DataType.BigDecimalType)); - RowMeta rowMeta = new RowMeta((Field[])field.toArray(new Field[0])); - DataSetBuilder datasetBuilder = Algo.create("calIntAmt").createDataSetBuilder(rowMeta); - loanBillIds = (List)loanBillIds.stream().distinct().collect(Collectors.toList()); - List> loanBillIdLists = ListUtils.splitList(loanBillIds, 100L); - StringBuilder noRateLoanBillSB = new StringBuilder(); - Iterator var8 = loanBillIdLists.iterator(); - - label43: - while(var8.hasNext()) { - List loanBillIdList = (List)var8.next(); - List loanBills = InterestCalcHelper.getLoanBills(loanBillIdList); - Iterator var11 = loanBills.iterator(); - - while(true) { - while(true) { - if (!var11.hasNext()) { - continue label43; - } - - DynamicObject loanBill = (DynamicObject)var11.next(); - long loanBillId = loanBill.getLong("id"); - if (RepaymentWayEnum.isHbfx(loanBill.getString("repaymentway"))) { - loanBill.set("repaymentway", RepaymentWayEnum.bqhblsbq.getValue()); - } - - DynamicObjectCollection rateadjust_entry = loanBill.getDynamicObjectCollection("rateadjust_entry"); - if (rateadjust_entry.size() > 0) { - rateadjust_entry.sort(Comparator.comparing((r) -> { - return r.getDate("ra_effectdate"); - })); - Date startIntDate = loanBill.getDate("startintdate"); - if (startIntDate.compareTo(((DynamicObject)rateadjust_entry.get(0)).getDate("ra_effectdate")) < 0) { - noRateLoanBillSB.append(loanBill.getString("billno")).append(","); - continue; - } - } - - IntBillExtInfo intBill; - try { - intBill = InterestCalcHelper.callInt(loanBill); - } catch (TmcBizException var18) { - TmcBizException e = var18; - logger.error("计算利息失败: loanBillId={}, error: {}", loanBillId, e.getMessage()); - continue; - } - - if (EmptyUtil.isNoEmpty(intBill) && EmptyUtil.isNoEmpty(intBill.getDetails())) { - Object[] row = new Object[]{loanBillId, intBill.getAmount()}; - datasetBuilder.append(row); - } - } - } - } - - String LoanBills = noRateLoanBillSB.toString(); - logger.error("利息计算开始日必须要有可用利率: " + LoanBills); - DataSet calIntAmtDs = datasetBuilder.build(); - loanBillDS = loanBillDS.leftJoin(calIntAmtDs).on("loanbillid", "loanbillid").select(loanBillDS.getRowMeta().getFieldNames(), new String[]{"calintamt"}).finish().updateField("calintamt", "case when calintamt is null then 0 else calintamt end"); - loanBillDS = loanBillDS.updateField("calintamt", "case when loantype in ('sl', 'bond') then calintamt*(drawamount/drawamount1) + feeamt else calintamt + feeamt end"); - return loanBillDS; - } - public DataSet reDealResultDataSet(DataSet dataSet, ReportQueryParam queryParam) { if (dataSet != null && !dataSet.isEmpty()) { dataSet = dataSet.addField("case when unpaidamt=0 and cleardate is not null then cleardate else expiredate end", "comprateenddate"); DataSet compDs = this.buildCompCalcDs(dataSet.copy()); dataSet = dataSet.leftJoin(compDs).on("loanbillid", "compid").select(dataSet.getRowMeta().getFieldNames(), new String[]{"compyearday", "compdays"}).finish(); - dataSet = dataSet.addField("case when drawamount=0 or compdays=0 then 0 else calintamt * 100 * compyearday /(drawamount * compdays) end", "comprate_statccy"); + dataSet = dataSet.addField("case when drawamount_statccy=0 or compdays=0 then 0 else compamt_statccy * 100 * compyearday /(drawamount_statccy * compdays) end", "comprate_statccy"); DataSet totalDs = dataSet.filter("sumlevel=2"); dataSet = dataSet.filter("sumlevel!=2"); dataSet = dataSet.orderBy((String[])this.orderByFields().toArray(new String[0])); From e9b94e36233e5996119dfd6a47b81cf980a85cbe Mon Sep 17 00:00:00 2001 From: 16358 <1635849544@qq.com> Date: Wed, 30 Apr 2025 16:13:51 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BA=BA=EF=BC=9A?= =?UTF-8?q?=E5=88=98=E6=A3=AE=E6=BE=B3=20=E6=97=A5=E6=9C=9F=EF=BC=9A2025/4?= =?UTF-8?q?/30=2014=EF=BC=9A13=20=E5=86=85=E5=AE=B9=EF=BC=9A1=E3=80=81?= =?UTF-8?q?=E9=93=B6=E8=A1=8C=E5=80=9F=E6=AC=BE=E5=90=88=E5=90=8C=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E6=8F=90=E6=AC=BE=E9=87=91=E9=A2=9D=E5=88=97=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/tmc/BankContractGetDataPlugin.java | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/tmc/BankContractGetDataPlugin.java 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