diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/form/CimIntBillBatchFormPlugin.java b/main/java/shjh/jhzj7/fi/fi/plugin/form/CimIntBillBatchFormPlugin.java new file mode 100644 index 0000000..48a8a5d --- /dev/null +++ b/main/java/shjh/jhzj7/fi/fi/plugin/form/CimIntBillBatchFormPlugin.java @@ -0,0 +1,95 @@ +package shjh.jhzj7.fi.fi.plugin.form; + +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.form.plugin.AbstractFormPlugin; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.sdk.plugin.Plugin; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.EventObject; + +/** + * 理财批量预提表单插件 + */ +public class CimIntBillBatchFormPlugin extends AbstractFormPlugin implements Plugin { + + @Override + public void afterBindData(EventObject e) { + super.afterBindData(e); + if ("A".equals((String) this.getModel().getValue("billstatus"))) { + DynamicObjectCollection entryEntity = this.getModel().getEntryEntity("entry"); + if (entryEntity != null && entryEntity.size() != 0) { + for (int i = 0; i < entryEntity.size(); i++) { + // 申购单id + long id = entryEntity.get(i).getLong("finbillid"); + if (id != 0L) { + DynamicObject finsubscribe = BusinessDataServiceHelper.loadSingle(id, "cim_finsubscribe"); + if (finsubscribe != null) { + String cashManagementProducts = finsubscribe.getString("shjh_xjglcp"); + this.getModel().setValue("shjh_amountcontrl", cashManagementProducts, i); + if ("1".equals(cashManagementProducts)) { + // 预提日期 + Date preintdate = (Date) this.getModel().getValue("preintdate"); + if (preintdate != null) { + // 表头购买日净值 + BigDecimal iopv = finsubscribe.getBigDecimal("iopv"); + // 表头购买日份数 + BigDecimal buycopies = finsubscribe.getBigDecimal("buycopies"); + DynamicObjectCollection valuationentry = finsubscribe.getDynamicObjectCollection("valuationentry"); + + if (valuationentry != null && valuationentry.size() != 0) { + DynamicObject targetValuation = null; + + // 1. 如果只有一条估值数据,直接使用 + if (valuationentry.size() == 1) { + targetValuation = valuationentry.get(0); + } + // 2. 如果有多条,找到离预提日期最近的估值数据 + else { + // 初始化最近日期和最小时间差 + long minDiff = Long.MAX_VALUE; + + for (int j = 0; j < valuationentry.size(); j++) { + DynamicObject valuation = valuationentry.get(j); + Date valuationDate = valuation.getDate("e_valuationdate"); + + if (valuationDate != null) { + // 计算时间差(绝对值) + long diff = Math.abs(valuationDate.getTime() - preintdate.getTime()); + + // 如果找到更接近的日期,更新目标数据 + if (diff < minDiff) { + minDiff = diff; + targetValuation = valuation; + } + } + } + } + + // 3. 计算本次预算预提收益 + if (targetValuation != null) { + BigDecimal currentIopv = targetValuation.getBigDecimal("e_iopv"); + BigDecimal currentSurpcopies = targetValuation.getBigDecimal("e_surpcopies"); + + if (currentIopv != null && currentSurpcopies != null && iopv != null && buycopies != null) { + // 计算公式:预提收益 = (预提日净值 * 剩余份数) - (购买日净值 * 购买日份数) + BigDecimal preIncome = currentIopv.multiply(currentSurpcopies) + .subtract(iopv.multiply(buycopies)); + + // 将计算结果设置到模型 + this.getModel().setValue("interestamt", preIncome, i); + } + } + } + } + } + } + } + } + this.getView().invokeOperation("save"); + } + } + } +} \ No newline at end of file