票据管理分应用默认费用明细行

This commit is contained in:
XiangLingFeng 2025-12-02 16:22:45 +08:00
parent 71521179de
commit 6a414ac7af
1 changed files with 115 additions and 5 deletions

View File

@ -2,6 +2,9 @@ package kdsz.zyf25.tmc.cfm.plugin.form.cdm;
import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.entity.datamodel.events.ChangeData;
import kd.bos.entity.datamodel.events.PropertyChangedArgs;
import kd.bos.form.FormShowParameter;
import kd.bos.form.field.BasedataEdit;
import kd.bos.form.field.events.BeforeF7SelectEvent;
@ -13,7 +16,11 @@ import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.sdk.plugin.Plugin;
import org.apache.commons.lang3.StringUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.EventObject;
import java.util.HashMap;
/**
* 票据管理开票/收票登记开票申请票据类型根据单据发布应用决定票据类型过滤默认票据类型
@ -21,6 +28,9 @@ import java.util.EventObject;
public class CdmBillTypeBillPlugin extends AbstractBillPlugIn implements Plugin, BeforeF7SelectListener {
private static final String XZY_NUM = "CDMT-8D5DCE08";//票据类型信用证编码
private static final String GYL_NUM = "CDMT-25826125";//票据类型供应链金融编码
private static final String TYPE_XYZ = "kdsz_lcm";//应用编码_信用证
private static final String TYPE_GYL = "kdsz_scmf";//应用编码_供应链金融
private static final String TYPE_COMMON = "cdm";//应用编码_票据管理
@Override
public void afterCreateNewData(EventObject e) {
super.afterCreateNewData(e);
@ -30,11 +40,11 @@ public class CdmBillTypeBillPlugin extends AbstractBillPlugIn implements Plugin,
String billTypeNum = "";
switch (appId){
//信用证
case "kdsz_lcm":
case TYPE_XYZ:
billTypeNum = XZY_NUM;
break;
//供应链金融
case "kdsz_scmf":
case TYPE_GYL:
billTypeNum = GYL_NUM;
break;
}
@ -56,11 +66,11 @@ public class CdmBillTypeBillPlugin extends AbstractBillPlugIn implements Plugin,
String propertyName = beforeF7SelectEvent.getProperty().getName();
if ("draftbilltype".equals(propertyName)) {
QFilter filter = null;
if ("kdsz_lcm".equals(appId)){
if (TYPE_XYZ.equals(appId)){
filter = new QFilter("number", QCP.equals, XZY_NUM);
} else if ("kdsz_scmf".equals(appId)) {
} else if (TYPE_GYL.equals(appId)) {
filter = new QFilter("number", QCP.equals, GYL_NUM);
} else if ("cdm".equals(appId)) {
} else if (TYPE_COMMON.equals(appId)) {
filter = new QFilter("number", QCP.not_equals, GYL_NUM)
.and("number", QCP.not_equals, XZY_NUM);
}
@ -77,4 +87,104 @@ public class CdmBillTypeBillPlugin extends AbstractBillPlugIn implements Plugin,
BasedataEdit fieldEdit = this.getView().getControl("draftbilltype");
fieldEdit.addBeforeF7SelectListener(this);
}
//单据分类费用类型对应关系
private static HashMap<String, ArrayList<String>> billTypeMap = new HashMap<>();
//费用类型对象mapkey编码value费用类型对象
private HashMap<String, DynamicObject > feeTypeMap = new HashMap<>();
static {
ArrayList<String> types = new ArrayList<>();
//票据管理-默认费用类型
types.add("FY_016");//敞口费率
types.add("FY_017");//其他费率
types.add("FY_002");//手续费
types.add("FY_001");//中收费
types.add("FY_014");//减免费用
billTypeMap.put(TYPE_COMMON, types);
//信用证管理-默认费用类型
types = new ArrayList<>();
types.add("FY_011");//利率
types.add("FY_017");//其他费率
types.add("FY_002");//手续费
types.add("FY_001");//中收费
billTypeMap.put(TYPE_XYZ, types);
//供应链金融管理-默认费用类型
types = new ArrayList<>();
types.add("FY_013");//平台费
types.add("FY_011");//利率
types.add("FY_012");//费率
types.add("FY_001");//中收费
types.add("FY_014");//减免费用
types.add("FY_015");//综合利率
billTypeMap.put(TYPE_GYL, types);
}
@Override
public void propertyChanged(PropertyChangedArgs e) {
super.propertyChanged(e);
String propertyName = e.getProperty().getName();
//费用明细默认分录
if ("amount".equals(propertyName)){
BigDecimal amount = (BigDecimal)this.getModel().getValue("amount");
if (amount != null && BigDecimal.ZERO.compareTo( amount) != 0){
FormShowParameter showParameter = this.getView().getFormShowParameter();
String appId = showParameter.getAppId();
defaultFeeType(appId);
}
}
//费用明细-费用金额改变
if ("feeamt".equals(propertyName)){
ChangeData changeData = e.getChangeSet()[0];
BigDecimal newValue = (BigDecimal)changeData.getNewValue();
BigDecimal oldValue = (BigDecimal)changeData.getOldValue();
int rowIndex = changeData.getRowIndex();
DynamicObject changeRowFeeType = (DynamicObject)this.getModel().getValue("feetype", rowIndex);
//综合利率行 费用金额改变不处理
if (changeRowFeeType == null || changeRowFeeType.getString("number").equals("FY_015"))return;
if (newValue != null && oldValue != null){
BigDecimal diffValue = newValue.subtract(oldValue);//新旧差值
DynamicObjectCollection feeDetail = this.getModel().getEntryEntity("feedetail");
for (int i = 0; i < feeDetail.size(); i++) {
DynamicObject feeType = feeDetail.get(i).getDynamicObject("feetype");
if (feeType == null)continue;
String feeTypeNum = feeType.getString("number");
if (!"FY_015".equals(feeTypeNum))continue;
BigDecimal feeAmt = (BigDecimal)this.getModel().getValue("feeamt", i);
feeAmt = feeAmt.add(diffValue);
this.getModel().setValue("feeamt", feeAmt, i);
}
}
}
}
private void defaultFeeType(String appId){
//费用明细分录为空则默认
DynamicObjectCollection feeDetails = this.getModel().getEntryEntity("feedetail");
if (feeDetails != null && feeDetails.size() == 0){
if (TYPE_COMMON.equals(appId) || TYPE_XYZ.equals(appId) || TYPE_GYL.equals(appId)){
for (String billType : billTypeMap.keySet()) {
ArrayList<String> feeTypeNumList = billTypeMap.get(billType);
for (String feeTypeNum : feeTypeNumList) {
DynamicObject feeType = feeTypeMap.get(feeTypeNum);
if (feeType != null)continue;
feeType = BusinessDataServiceHelper.loadSingle("fbd_feetype", "id",
new QFilter[]{new QFilter("number", QCP.equals, feeTypeNum)});
feeTypeMap.put(feeTypeNum, feeType);
}
}
ArrayList<String> types = billTypeMap.get(appId);
StringBuilder message = new StringBuilder();
for (String type : types) {
DynamicObject feeType = feeTypeMap.get(type);
if (feeType != null){
int newIndex = this.getModel().createNewEntryRow("feedetail");//新增行index
this.getModel().setValue("feetype",feeType,newIndex);
}else {
message.append("编码为:").append(type).append("的费用类型不存在!");
}
}
if (message.length() > 0){
this.getView().showMessage(message.toString());
}
}
}
}
}