批量预提单改造

This commit is contained in:
李贵强 2025-07-01 16:31:37 +08:00
parent bb6bbae726
commit e72b378a09
1 changed files with 95 additions and 0 deletions

View File

@ -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");
}
}
}
}