提交内容:计划科目过滤、内部账户带出银行类别序号、名称自动生成

时间:2025-11-24 11:00
提交人:邹江涛
This commit is contained in:
zoujiangtao 2025-11-24 11:02:49 +08:00
parent b37bbe126d
commit fe18fc0500
2 changed files with 165 additions and 0 deletions

View File

@ -0,0 +1,66 @@
package shkd.sys.sys.plugin.form;
import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.utils.StringUtils;
import kd.bos.form.field.BasedataEdit;
import kd.bos.form.field.events.BeforeF7SelectEvent;
import kd.bos.form.field.events.BeforeF7SelectListener;
import kd.bos.list.ListShowParameter;
import kd.bos.logging.Log;
import kd.bos.logging.LogFactory;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.sdk.plugin.Plugin;
import java.util.EventObject;
import java.util.List;
/**
* 付款处理表单插件
* 计划科目过滤
*/
public class FkclBillPlugin extends AbstractBillPlugIn implements Plugin, BeforeF7SelectListener {
private static final Log logger = LogFactory.getLog(FkclBillPlugin.class);
@Override
public void registerListener(EventObject e) {
super.registerListener(e);
// 侦听-基础资料选择按钮
BasedataEdit shkd_jhkm = this.getView().getControl("shkd_jhkm");
shkd_jhkm.addBeforeF7SelectListener(this);
}
@Override
public void beforeF7Select(BeforeF7SelectEvent beforeF7SelectEvent) {
// 获取点击的基础资料字段按钮的基础资料标识
String propertyName = beforeF7SelectEvent.getProperty().getName();
// 都是这样获取对象然后通过此对象设置过滤条件
ListShowParameter formShowParameter = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter();
// 判断点击的按钮是否是我们想要过滤的基础资料
if (StringUtils.equals("shkd_jhkm", propertyName)) {
logger.info("点击基础资料按钮:{}", propertyName);
DynamicObject org = (DynamicObject) this.getModel().getValue("org");
String org_name = org.getString("name");
logger.info("组织名称:{}", org_name);
QFilter qFilter1 = null;
if ("四川能源发展集团有限责任公司".equals(org_name)) {
DynamicObject[] dynamicObjects = BusinessDataServiceHelper.load("fpm_bodysysmanage", "id,number", new QFilter("number", QCP.equals, "SYS-008").toArray());
if (dynamicObjects != null && dynamicObjects.length > 0) {
DynamicObject company = dynamicObjects[0];
logger.info("体系:{}", company);
qFilter1 = new QFilter("bodysystem", QCP.equals, company.getPkValue());
}
} else {
DynamicObject[] dynamicObjects = BusinessDataServiceHelper.load("fpm_bodysysmanage", "id,number", new QFilter("number", QCP.equals, "SYS-009").toArray());
if (dynamicObjects != null && dynamicObjects.length > 0) {
DynamicObject company = dynamicObjects[0];
logger.info("体系:{}", company);
qFilter1 = new QFilter("bodysystem", QCP.equals, company.getPkValue());
}
}
// 获取列表的过滤条件,然后再赋值过滤条件
formShowParameter.getListFilterParameter().setFilter(qFilter1);
}
}
}

View File

@ -0,0 +1,99 @@
package shkd.sys.sys.plugin.form;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.entity.datamodel.events.PropertyChangedArgs;
import kd.bos.form.plugin.AbstractFormPlugin;
import kd.bos.logging.Log;
import kd.bos.logging.LogFactory;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.sdk.plugin.Plugin;
import java.util.ArrayList;
import java.util.List;
/**
* 内部账户带出银行类别序号名称自动生成
*/
public class NbzhglBillPlugin extends AbstractFormPlugin implements Plugin {
private static final Log logger = LogFactory.getLog(NbzhglBillPlugin.class);
@Override
public void propertyChanged(PropertyChangedArgs e) {
super.propertyChanged(e);
String propName = e.getProperty().getName();
Object newValue = e.getChangeSet()[0].getNewValue();
logger.info("内部账户 → 内部账户管理 → 关联账户:" + newValue);
if (propName.equals("relationacc") && newValue != null){
DynamicObject dataEntity = this.getModel().getDataEntity(true);
DynamicObject company = dataEntity.getDynamicObject("company");//申请公司
String companyName = company.getString("name");//申请公司名称
DynamicObjectCollection dynamicObjectCollection = (DynamicObjectCollection) newValue;
if (!dynamicObjectCollection.isEmpty()) {
logger.info("关联账户:" + dynamicObjectCollection);
long relationacc_id = dynamicObjectCollection.get(0).getLong("fbasedataid_Id");//银行账户
DynamicObject[] bd_accountbanks = BusinessDataServiceHelper.load("bd_accountbanks", "id,bankaccountnumber,bank", new QFilter("id", QCP.equals, relationacc_id).toArray());
String bankaccountnumber = bd_accountbanks[0].getString("bankaccountnumber");//关联账户银行账号
// 获取银行账号后四位
String lastFourDigits = "";
if (bankaccountnumber != null && bankaccountnumber.length() >= 4) {
lastFourDigits = bankaccountnumber.substring(bankaccountnumber.length() - 4);
}
DynamicObject bank_cate = bd_accountbanks[0].getDynamicObject("bank").getDynamicObject("bank_cate");
String bank_cate_name = bank_cate.getString("name");//银行类别
DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(bank_cate.getPkValue(), "bd_bankcgsetting");
this.getModel().setValue("name", companyName + "-" + bank_cate_name + "-" + lastFourDigits);
Object shkdXuhao = dynamicObject.get("shkd_xuhao");
if (shkdXuhao != null) {
String xuhaoString = shkdXuhao.toString();
this.getModel().setValue("shkd_yhlbxh", xuhaoString);
}
}
}
}
/**
* 生成断号补偿流水号
* @param numbers 已存在的编号列表
* @return 补偿后的流水号格式为两位数字
*/
private String generateSequentialNumber(List<String> numbers) {
if (numbers == null || numbers.isEmpty()) {
return "01";
}
// 转换为整数并排序
List<Integer> numberInts = new ArrayList<>();
for (String number : numbers) {
try {
numberInts.add(Integer.parseInt(number));
} catch (NumberFormatException e) {
// 忽略无法解析的编号
}
}
if (numberInts.isEmpty()) {
return "01";
}
// 排序
numberInts.sort(null);
// 查找第一个缺失的编号
for (int i = 0; i < numberInts.size(); i++) {
if (numberInts.get(i) != (i + 1)) {
return String.format("%02d", i + 1);
}
}
// 如果没有断号则返回下一个编号
return String.format("%02d", numberInts.size() + 1);
}
}