理财申购单新增两个功能按钮

This commit is contained in:
李贵强 2025-07-17 11:01:16 +08:00
parent 64d7eb4feb
commit aaa92f87da
1 changed files with 119 additions and 0 deletions

View File

@ -0,0 +1,119 @@
package shjh.jhzj7.fi.fi.plugin.form;
import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.db.DB;
import kd.bos.db.DBRoute;
import kd.bos.form.control.events.ItemClickEvent;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper;
import kd.sdk.plugin.Plugin;
import java.math.BigDecimal;
import java.util.EventObject;
/**
* 单据界面插件
* 理财申购单表单插件
*/
public class CimFinancialBillPlugin extends AbstractBillPlugIn implements Plugin {
private static final String DELETE = "delete from t_cim_finsubscribe_v where fentryid=?;";
private static final String UPDATE = "update t_cim_finsubscribe set fexpiredate = ?,fterm = ?,fplanamount = ? where fid=?;";
@Override
public void registerListener(EventObject e) {
super.registerListener(e);
this.addItemClickListeners("tbmain");
}
@Override
public void itemClick(ItemClickEvent evt) {
super.itemClick(evt);
switch (evt.getItemKey()){
//删除最新估值行
case "shjh_deletevalue":
this.deleteValue();
break;
//更新到期日期限预计收益金额
case "shjh_updatedate":
this.updateBillInfo();
break;
}
}
private void deleteValue() {
DynamicObject financialBill = BusinessDataServiceHelper.loadSingle(this.getModel().getValue("id"), this.getModel().getDataEntityType().getName());
if (financialBill !=null){
// 获取估值分录
DynamicObjectCollection entryEntity = financialBill.getDynamicObjectCollection("valuationentry");
if (entryEntity == null || entryEntity.size()<=1) {
this.getView().showTipNotification("无可删除数据!");
return;
}
DynamicObject maxSeqItem = findMaxSeqItem(entryEntity);
if (maxSeqItem!=null){
DynamicObject redeemBill = maxSeqItem.getDynamicObject("shjh_shdh");
if (redeemBill!=null){
this.getView().showTipNotification("最新估值分录存在已审核赎回单!");
}else {
entryEntity.remove(maxSeqItem);
DynamicObject newMaxSeqItem = findMaxSeqItem(entryEntity);
if (newMaxSeqItem!=null){
BigDecimal e_surpcopies = newMaxSeqItem.getBigDecimal("e_surpcopies");
financialBill.set("surpluscopies",e_surpcopies);
SaveServiceHelper.update(financialBill);
}
DB.update(DBRoute.of("fi"),DELETE,new Object[]{maxSeqItem.getPkValue()});
this.getView().invokeOperation("refresh");
}
}
}
}
private void updateBillInfo() {
boolean dataChanged = this.getModel().getDataChanged();
if (dataChanged){
int update = DB.update(DBRoute.of("fi"), UPDATE, new Object[]{
this.getModel().getValue("expiredate"),
this.getModel().getValue("term"),
this.getModel().getValue("planamount"),
this.getModel().getValue("id")
});
if (update==1){
this.getView().showMessage("已更新到期日、期限、预计收益金额");
this.getView().invokeOperation("refresh");
}
}
}
/**
* 从分录中查找行号最大的记录
* @param entryEntity 分录集合
* @return 行号最大的记录如果没有记录则返回null
*/
private DynamicObject findMaxSeqItem(DynamicObjectCollection entryEntity) {
if (entryEntity == null || entryEntity.isEmpty()) {
return null;
}
DynamicObject maxSeqItem = null;
int maxSeq = -1;
for (DynamicObject item : entryEntity) {
int currentSeq = item.getInt("seq");
if (currentSeq==0){
throw new RuntimeException("初始行不可删除!");
}
if (currentSeq > maxSeq) {
maxSeq = currentSeq;
maxSeqItem = item;
}
}
return maxSeqItem;
}
}