diff --git a/code/tmc/kdsz-zyf25-tmc-cfm/src/main/java/kdsz/zyf25/tmc/cfm/plugin/form/cdm/CdmBillTypeBillPlugin.java b/code/tmc/kdsz-zyf25-tmc-cfm/src/main/java/kdsz/zyf25/tmc/cfm/plugin/form/cdm/CdmBillTypeBillPlugin.java index af7f6a4..efa7481 100644 --- a/code/tmc/kdsz-zyf25-tmc-cfm/src/main/java/kdsz/zyf25/tmc/cfm/plugin/form/cdm/CdmBillTypeBillPlugin.java +++ b/code/tmc/kdsz-zyf25-tmc-cfm/src/main/java/kdsz/zyf25/tmc/cfm/plugin/form/cdm/CdmBillTypeBillPlugin.java @@ -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> billTypeMap = new HashMap<>(); + //费用类型对象map;key编码,value费用类型对象 + private HashMap feeTypeMap = new HashMap<>(); + static { + ArrayList 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 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 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()); + } + } + } + } } \ No newline at end of file