创建{bd}模块、添加抬头信息、生成核算维度

This commit is contained in:
zhangh 2025-02-15 17:12:51 +08:00
parent ac406666e1
commit 9394b44f78
28 changed files with 2475 additions and 29 deletions

View File

@ -19,6 +19,9 @@ include(
':yem-wm-es',
':yem-wm-is',
':yem-wm-ct',
':yem-wm-bd',
)
// -------------- --------------
@ -43,3 +46,8 @@ project(':yem-wm-es').projectDir = new File('yem-wm/yem-wm-es')
project(':yem-wm-is').projectDir = new File('yem-wm/yem-wm-is')
// -------------- wm云-ct应用模块 --------------
project(':yem-wm-ct').projectDir = new File('yem-wm/yem-wm-ct')
// -------------- wm云-bd应用模块 --------------
project(':yem-wm-bd').projectDir = new File('yem-wm/yem-wm-bd')

View File

@ -0,0 +1,22 @@
package yem.base.common.utils;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.QueryServiceHelper;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Description 组织帮助类
* @Author: zhangh
* @CreateTime: 2025-02-08 11:13
*/
public class OrgUtil {
public static List<Long> getOrgPattern(){
DynamicObjectCollection typeColl = QueryServiceHelper.query("bos_org_pattern", "id,number",
new QFilter[]{new QFilter("patterntype", "in", new String[]{"1", "2"})});
List<Long> patternList = typeColl.stream().map(x -> x.getLong("id")).collect(Collectors.toList());
return patternList;
}
}

View File

@ -1,30 +1,34 @@
/*
* This is a kingdee cosmic template project that is automatically generated by the Kingdee cosmic development assistant plugin.
* If there are any issues during the use process, you can provide feedback to the kingdee developer community website.
* Website: https://developer.kingdee.com/developer?productLineId=29
* Author: liebin.zheng
* Generate Date: 2024-04-19 14:42:16
*/
dependencies {
//
implementation project(':yem-base-common')
// wmc云 - ydn应用模块
implementation project(':yem-wmc-ydn')
// wmc云 ca应用模块
implementation project(':yem-wmc-ca')
// wmc云 imc应用模块
implementation project(':yem-wmc-imc')
// wm云 cm应用模块
implementation project(':yem-wm-cm')
// wm云 es应用模块
implementation project(':yem-wm-es')
// wm云 is应用模块
implementation project(':yem-wm-is')
// wm云 ct应用模块
implementation project(':yem-wm-ct')
/*
* This is a kingdee cosmic template project that is automatically generated by the Kingdee cosmic development assistant plugin.
* If there are any issues during the use process, you can provide feedback to the kingdee developer community website.
* Website: https://developer.kingdee.com/developer?productLineId=29
* Author: liebin.zheng
* Generate Date: 2024-04-19 14:42:16
*/
dependencies {
//
implementation project(':yem-base-common')
// wmc云 - ydn应用模块
implementation project(':yem-wmc-ydn')
// wmc云 ca应用模块
implementation project(':yem-wmc-ca')
// wmc云 imc应用模块
implementation project(':yem-wmc-imc')
// wm云 cm应用模块
implementation project(':yem-wm-cm')
// wm云 es应用模块
implementation project(':yem-wm-es')
// wm云 is应用模块
implementation project(':yem-wm-is')
// wm云 ct应用模块
implementation project(':yem-wm-ct')
// wm云 bd应用模块
implementation project(':yem-wm-bd')
}

View File

@ -0,0 +1,13 @@
/*
* This is a kingdee cosmic template project that is automatically generated by the Kingdee cosmic development assistant plugin.
* If there are any issues during the use process, you can provide feedback to the kingdee developer community website.
* Website: https://developer.kingdee.com/developer?productLineId=29
* Author: liebin.zheng
* Generate Date: 2025-02-07 11:06:50
*/
dependencies {
api project(':yem-base-common')
}

View File

@ -0,0 +1,16 @@
Manifest-Version: 1.0
Jar-Id:
Project-Name: yem-wm-bd
Build-Tool: Gradle 7.6.3
Build-Date: 2025-02-15 10:49:38
Built-By: Kingdee Cosmic Developer Tools
Build-Num: 20250215104938457
App-Name:
Git-Branch: yem_goodday_zh
Cloud-Name:
Group-Name: yem.cosmic
Bundle-Version: 1.0.0
Git-Commit-Hash: 20330ae5e80eca3fd4d5412f4f4d9e814230fa0f
Build-Image:
Build-Jdk: 1.8.0_131

View File

@ -0,0 +1,2 @@
Manifest-Version: 1.0

View File

@ -0,0 +1,157 @@
package yem.wm.bd.addcompany.dynamic;
import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.entity.datamodel.IDataModel;
import kd.bos.entity.datamodel.events.ChangeData;
import kd.bos.entity.datamodel.events.PropertyChangedArgs;
import kd.bos.form.IFormView;
import kd.bos.form.control.Control;
import kd.bos.form.events.ClosedCallBackEvent;
import kd.bos.form.field.BasedataEdit;
import kd.bos.list.ListShowParameter;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import yem.base.common.utils.OrgUtil;
import yem.base.common.utils.YEM;
import yem.wm.bd.util.BothCardHelper;
import java.util.EventObject;
/**
* @Description 添加公司抬头--表单插件
* 1加载界面时默认获取单据中的{抬头明细(隐藏)}中的公司抬头信息自动给界面赋值
* 2切换公司重新加载公司的默认信息
* 3点击确定给父页面返回数据
* @Author: zhangh
* @CreateTime: 2025-02-08 10:14
*/
public class AddCompanyDynamicPlugin extends AbstractBillPlugIn {
@Override
public void afterCreateNewData(EventObject e) {
BothCardHelper.init(this);//加载父页面的信息携带到动态表单上
}
@Override
public void registerListener(EventObject e) {
this.addClickListeners("yem_companybank", "yem_companylinkman");
this.addClickListeners("btnok");
this.initF7();
}
/**
* @return void
* @Description: 对公司进行添加事件的注册以及过滤
* @function 功能
* @purposes 用途
*/
public void initF7() {
String orgtype = (String) this.getModel().getValue("yem_orgtype");//判断系统使用的是业务单元还是公司抬头
if ("bos_org".equals(orgtype)) {
BasedataEdit orgF7 = this.getControl("yem_org");//获取公司抬头控件
orgF7.addBeforeF7SelectListener((beforeF7SelectEvent) -> {
ListShowParameter showParameter = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter();
QFilter qFilter = new QFilter("orgpattern", "in", OrgUtil.getOrgPattern());
showParameter.getListFilterParameter().setFilter(qFilter);//列表添加条件判断公司组织形态中的组织类型是否是法人企业法人分支机构
});
}
}
@Override
public void click(EventObject evt) {
super.click(evt);
Control c = (Control) evt.getSource();
String key = c.getKey().toLowerCase();
switch (key) {
case "yem_companylinkman"://联系人
BothCardHelper.showChangePage(this, "yem_bd_companymaninfor");//跳转动态表单
break;
case "yem_companybank"://开户行
BothCardHelper.showChangePage(this, "yem_bd_companybankinfor");//跳转动态表单
break;
case "btnok"://确定按钮
this.btnOk();//点击确定给父页面返回数据
break;
}
}
@Override
public void propertyChanged(PropertyChangedArgs e) {
String key = e.getProperty().getName();
ChangeData[] changeData = e.getChangeSet();
Object newValue = changeData[0].getNewValue();
switch (key) {
case "yem_org"://组织
this.companyChanged(newValue);//切换组织根据默认逻辑给公司信息赋值
break;
}
}
/**
* @Description: 切换公司组织公司信息进行重新赋值
* @function 功能
* @purposes 用途
*/
public void companyChanged(Object newValue) {
DynamicObject company = (DynamicObject) newValue;
if (company != null) {
String orgtype = (String) this.getModel().getValue("yem_orgtype");//获取组织类型
company = BusinessDataServiceHelper.loadSingleFromCache(company.getLong("id"), company.getDataEntityType().getName());
DynamicObject org = null;
if ("bos_org".equals(orgtype)) {
org = company;//判断是业务单元默认取值为公司
} else {
org = company.getDynamicObject("yem_org");//判断是公司抬头取值为公司抬头中的组织
}
if (org != null) {
BothCardHelper.fillCoInfo(this.getModel(), org);////默认给表单所有信息赋值
}
}
}
@Override
public void closedCallBack(ClosedCallBackEvent e) {
String id = e.getActionId();
Object returnData = e.getReturnData();
switch (id) {
case "yem_bd_companymaninfor"://公司联系人信息表单标识
BothCardHelper.setCompanyManInfor(this, returnData, null);//点击公司联系人信息之后给父页面的信息赋值
break;
case "yem_bd_companybankinfor"://公司银行信息表单标识
BothCardHelper.setCompanyBankInfor(this, returnData);//点击公司银行信息之后给父页面的信息赋值
break;
}
}
/**
* @return void
* @Description: 点击确定给父页面返回信息
* @function 功能
* @purposes 用途
*/
public void btnOk() {
IFormView view = this.getView();
IDataModel model = this.getModel();
IFormView parentView = view.getParentView();
IDataModel parentModel = parentView.getModel();
BothCardHelper.btnOkParent(this);//将动态表单的信息返回给付页面
String defaultInfor = this.getView().getPageCache().get("data");
if (YEM.isNotEmpty(defaultInfor)) {
parentModel.setValue("yem_isdefaultinfor", defaultInfor);//默认信息(公司)
}
DynamicObject company = (DynamicObject) model.getValue("yem_org");
String companyName = company != null ? company.getString("name") : "";
parentModel.setValue("yem_companyname", companyName);//公司名称
view.sendFormAction(parentView);
view.close();
}
}

View File

@ -0,0 +1,135 @@
package yem.wm.bd.addcustomer.dynamic;
import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.entity.datamodel.IDataModel;
import kd.bos.entity.datamodel.events.ChangeData;
import kd.bos.entity.datamodel.events.PropertyChangedArgs;
import kd.bos.form.IFormView;
import kd.bos.form.control.Control;
import kd.bos.form.events.ClosedCallBackEvent;
import kd.bos.form.field.BasedataEdit;
import kd.bos.list.ListShowParameter;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.basedata.BaseDataServiceHelper;
import yem.wm.bd.util.BothCardHelper;
import java.util.EventObject;
/**
* @Description 添加客户
* 1加载界面时默认获取单据中的{抬头明细(隐藏)}中的客户信息自动给界面赋值
* 2切换客户重新加载客户的默认信息
* 3点击确定给父页面返回数据
* @Author: zhangh
* @CreateTime: 2025-02-08 15:15
*/
public class AddCustomerDynamicPlugin extends AbstractBillPlugIn {
@Override
public void afterCreateNewData(EventObject e) {
BothCardHelper.init(this);//加载父页面的信息携带到动态表单上
}
@Override
public void registerListener(EventObject e) {
super.registerListener(e);
this.addClickListeners("yem_customerbank", "yem_customerlinkman");
this.addClickListeners("btnok");
this.initF7();
}
/**
* @return void
* @Description: 对客户进行添加事件的注册以及过滤
* @function 功能
* @purposes 用途
*/
private void initF7() {
IFormView parentView = this.getView().getParentView();
IDataModel parentModel = parentView.getModel();
DynamicObject org = (DynamicObject) parentModel.getValue("org");//获取父页面的组织
BasedataEdit baseDataCtr = this.getControl("yem_customer");//获取客户字段控件
baseDataCtr.addBeforeF7SelectListener((beforeF7SelectEvent) -> {
ListShowParameter showParameter = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter();
if (org != null) {
QFilter filter = BaseDataServiceHelper.getBaseDataFilter(showParameter.getBillFormId(), org.getLong("id"));//根据组织客户字段进行过滤
if (filter != null) {
filter.and(new QFilter("status", "=", "C"));
} else {
filter = new QFilter("status", "=", "C");
}
showParameter.getListFilterParameter().getQFilters().add(filter);
}
});
}
/**
* @param e
* @return void
* @Description: 切换字段发生只改变
* @function 切换客户发生改变
* @purposes 用途
*/
@Override
public void propertyChanged(PropertyChangedArgs e) {
String key = e.getProperty().getName();
switch (key) {
case "yem_customer"://客户
BothCardHelper.setCustomerInfor(this);//切换客户根据默认逻辑给客户信息赋值
break;
}
}
@Override
public void click(EventObject evt) {
Control c = (Control) evt.getSource();
String key = c.getKey().toLowerCase();
switch (key) {
case "yem_customerbank":// 开户行
BothCardHelper.showChangePage(this, "yem_bd_customerbankinfor");//跳转动态表单
break;
case "yem_customerlinkman":// 点击联系人
BothCardHelper.showChangePage(this, "yem_bd_customermaninfor");//跳转动态表单
break;
case "btnok"://确定按钮
this.btnOk();//点击确定给父页面返回数据
break;
}
}
/**
* @return void
* @Description: 点击确定给父页面返回信息
* @function 功能
* @purposes 用途
*/
private void btnOk() {
IFormView view = this.getView();
IDataModel model = this.getModel();
IFormView parentView = view.getParentView();
IDataModel parentModel = parentView.getModel();
BothCardHelper.btnOkParent(this);//将动态表单的信息返回给付页面
DynamicObject customer = (DynamicObject) model.getValue("yem_customer");
String companyName = customer != null ? customer.getString("name") : "";
parentModel.setValue("yem_customername", companyName);//客户名称
view.sendFormAction(parentView);
view.close();
}
@Override
public void closedCallBack(ClosedCallBackEvent e) {
String id = e.getActionId();
Object returnData = e.getReturnData();
switch (id) {
case "yem_bd_customerbankinfor"://客户银行信息回填
BothCardHelper.setCustBankInfor(this, returnData);//点击客户银行信息之后给父页面的信息赋值
break;
case "yem_bd_customermaninfor"://客户联系人信息回填
BothCardHelper.setCustManInfor(this, returnData);//点击客户联系人信息之后给父页面的信息赋值
break;
}
}
}

View File

@ -0,0 +1,138 @@
package yem.wm.bd.addsupplier.dynamic;
import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.entity.datamodel.IDataModel;
import kd.bos.entity.datamodel.events.PropertyChangedArgs;
import kd.bos.form.IFormView;
import kd.bos.form.control.Control;
import kd.bos.form.events.ClosedCallBackEvent;
import kd.bos.form.field.BasedataEdit;
import kd.bos.list.ListShowParameter;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.basedata.BaseDataServiceHelper;
import yem.wm.bd.util.BothCardHelper;
import java.util.EventObject;
/**
* @Description 添加供应商
* 1加载界面时默认获取单据中的{抬头明细(隐藏)}中的供应商信息自动给界面赋值
* 2切换供应商重新加载供应商的默认信息
* 3点击确定给父页面返回数据
* @Author: zhangh
* @CreateTime: 2025-02-08 16:32
*/
public class AddSupplierDynamicPlugin extends AbstractBillPlugIn {
@Override
public void afterCreateNewData(EventObject e) {
BothCardHelper.init(this);//加载父页面的信息携带到动态表单上
}
@Override
public void registerListener(EventObject e) {
super.registerListener(e);
this.addClickListeners("yem_supplierbank", "yem_supplierlinkman");
this.addClickListeners("btnok");
this.initF7();
}
/**
* @return void
* @Description: 对供应商进行添加事件的注册以及过滤
* @function 功能
* @purposes 用途
*/
private void initF7() {
IFormView parentView = this.getView().getParentView();
IDataModel parentModel = parentView.getModel();
DynamicObject org = (DynamicObject) parentModel.getValue("org");//获取父页面的组织
BasedataEdit baseDataCtr = this.getControl("yem_supplier");//获取供应商字段控件
if (baseDataCtr == null) {
return;
}
baseDataCtr.addBeforeF7SelectListener((beforeF7SelectEvent) -> {
ListShowParameter showParameter = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter();
if (org != null) {
QFilter filter = BaseDataServiceHelper.getBaseDataFilter(showParameter.getBillFormId(), org.getLong("id"));//根据组织供应商字段进行过滤
if (filter != null) {
filter.and(new QFilter("status", "=", "C"));
} else {
filter = new QFilter("status", "=", "C");
}
showParameter.getListFilterParameter().getQFilters().add(filter);
}
});
}
/**
* @param e
* @return void
* @Description: 切换字段发生只改变
* @function 切换供应商发生改变
* @purposes 用途
*/
@Override
public void propertyChanged(PropertyChangedArgs e) {
String key = e.getProperty().getName();
switch (key) {
case "yem_supplier"://供应商
BothCardHelper.setSupplierInfor(this);
break;
}
}
@Override
public void click(EventObject evt) {
Control c = (Control) evt.getSource();
String key = c.getKey().toLowerCase();
switch (key) {
case "yem_supplierbank":// 开户行
BothCardHelper.showChangePage(this, "yem_bd_supplierbankinfor");//跳转动态表单
break;
case "yem_supplierlinkman":// 点击联系人
BothCardHelper.showChangePage(this, "yem_bd_suppliermaninfor");//跳转动态表单
break;
case "btnok"://确定按钮
this.btnOk();//点击确定按钮返回数据
break;
}
}
/**
* @return void
* @Description: 点击确定给父页面返回信息
* @function 功能
* @purposes 用途
*/
private void btnOk() {
IFormView view = this.getView();
IDataModel model = this.getModel();
IFormView parentView = view.getParentView();
IDataModel parentModel = parentView.getModel();
BothCardHelper.btnOkParent(this);//将动态表单的信息返回给付页面
DynamicObject supplier = (DynamicObject) model.getValue("yem_supplier");//获取供应商
String companyName = supplier != null ? supplier.getString("name") : "";
parentModel.setValue("yem_suppliername", companyName);//供应商名称
view.sendFormAction(parentView);
view.close();
}
@Override
public void closedCallBack(ClosedCallBackEvent e) {
String id = e.getActionId();
Object returnData = e.getReturnData();
switch (id) {
case "yem_bd_supplierbankinfor":
BothCardHelper.setSuppBankInfor(this, returnData);
break;
// 联系人信息回填
case "yem_bd_suppliermaninfor":
BothCardHelper.setCustManInfor(this, returnData);//点击供应商联系人信息之后给父页面的信息赋值
break;
}
}
}

View File

@ -0,0 +1,117 @@
package yem.wm.bd.bulkbilltpl.form;
import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.form.control.Control;
import kd.bos.form.events.ClosedCallBackEvent;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.QueryServiceHelper;
import yem.base.common.utils.OrgUtil;
import yem.wm.bd.util.BothCardHelper;
import java.util.EventObject;
/**
* @Description 抬头信息加载功能
* 1在新增单据时抬头信息根据公司加载公司的默认信息
* 2点击客户供应商公司面板弹动态表单在动态表单上填写信息然后回填到单据上
* 3在打开单据时以及动态表单回传单据时给抬头信息中的标签默认赋值
* @Author: zhangh
* @CreateTime: 2025-02-07 18:20
*/
public class BulkbilltplFiDBillPlugin extends AbstractBillPlugIn {
/**
* @param e
* @return void
* @Description: 在新增单据时默认给{抬头明细(隐藏)}赋默认值
* @function 根据公司默认赋值
* @purposes
*/
@Override
public void afterCreateNewData(EventObject e) {
DynamicObject org = (DynamicObject) this.getModel().getValue("org");//公司
if (org != null) {
QFilter[] qFilters = new QFilter[]{new QFilter("orgpattern", "in", OrgUtil.getOrgPattern()),
new QFilter("id", "=", org.getPkValue())};//添加公司的判断条件在公司的条件下判断公司组织形态中的组织类型是否是法人企业法人分支机构
if (QueryServiceHelper.exists("bos_org", qFilters)) {//判断业务单元的数据是否满足条件
BothCardHelper.fillCoInfo(this.getModel(), org);//默认给{抬头明细(隐藏)}信息赋值
}
}
}
/**
* @param e
* @return void
* @Description: 打开单据默认给标签赋值
* @function 在打开单据时根据{抬头明细(隐藏)}信息中的字段数据默认给客户供应商公司标签赋默认值
* @purposes 用途
*/
@Override
public void afterBindData(EventObject e) {
BothCardHelper.setCoLabel(this);//默认给公司的标签赋值
BothCardHelper.setSupplierLabel(this);//默认给供应商的标签赋值
BothCardHelper.setCustomerLabel(this);//默认给客户的标签赋值
}
/**
* @param e
* @return void
* @Description: 注册标签添加事件
* @function 功能
* @purposes 在click中可以触发
*/
@Override
public void registerListener(EventObject e) {
this.addClickListeners("yem_card_addgys", "yem_addgys1", "yem_addgys2",
"yem_card_addco", "yem_addco1", "yem_addco2",
"yem_card_addkh", "yem_addpayer", "yem_addpayer1",
"yem_changegys", "yem_changeco", "yem_changepayer");
}
@Override
public void click(EventObject evt) {
String key = ((Control) evt.getSource()).getKey();
String name = this.getModel().getDataEntityType().getName();
switch (key) {
case "yem_card_addco"://添加公司的图标
case "yem_addco1"://添加公司的标签+
case "yem_addco2"://添加公司的标签添加
case "yem_changeco"://切换公司的标签切换
BothCardHelper.showChangePage(this, "yem_bd_addcompany");//跳转动态表单
break;
case "yem_card_addgys"://添加供应商的图标
case "yem_addgys1"://添加供应商的标签+
case "yem_addgys2"://添加供应商的标签添加
case "yem_changegys"://切换供应商的标签切换
BothCardHelper.showChangePage(this, "yem_bd_addsupplier");//跳转动态表单
break;
case "yem_card_addkh"://添加客户的图标
case "yem_addpayer"://添加客户的标签+
case "yem_addpayer1"://添加客户的标签添加
case "yem_changepayer"://切换客户的标签切换
BothCardHelper.showChangePage(this, "yem_bd_addcustomer");//跳转动态表单
break;
default:
break;
}
}
@Override
public void closedCallBack(ClosedCallBackEvent e) {
String id = e.getActionId();
switch (id) {
case "yem_bd_addcompany"://添加公司抬头动态表单标识
BothCardHelper.setCoLabel(this);//默认给公司的标签赋值
break;
case "yem_bd_addsupplier"://添加供应商动态表单标识
BothCardHelper.setSupplierLabel(this);//默认给供应商的标签赋值
break;
case "yem_bd_addcustomer"://添加客户动态表单标识
BothCardHelper.setCustomerLabel(this);//默认给客户的标签赋值
break;
}
}
}

View File

@ -0,0 +1,86 @@
package yem.wm.bd.companybankinfor.dynamic;
import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.entity.datamodel.IDataModel;
import kd.bos.form.IFormView;
import kd.bos.form.control.Control;
import kd.bos.form.control.EntryGrid;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import yem.wm.bd.util.BothCardHelper;
import java.util.EventObject;
/**
* @Description 公司银行信息
* 1加载界面时默认获取公司抬头中的{银行信息}自动给单据体赋值
* 2选中行数据之后点击确定给父页面返回数据
* @Author: zhangh
* @CreateTime: 2025-02-08 11:42
*/
public class CompanyBankInforDynamicPlugin extends AbstractBillPlugIn {
@Override
public void afterCreateNewData(EventObject e) {
IFormView view = this.getView();
IDataModel model = view.getModel();
IFormView parentView = view.getParentView();
IDataModel parentModel = parentView.getModel();
DynamicObject company = (DynamicObject) parentModel.getValue("yem_org");//获取父页面的公司抬头
if (company != null) {
String orgtype = (String) parentModel.getValue("yem_orgtype");//获取父页面的组织类型
DynamicObject org = null;
if ("bos_org".equals(orgtype)) {
org = BothCardHelper.queryCompany(company);//系统参数是业务单元根据业务单元获取公司抬头
} else {
org = BusinessDataServiceHelper.loadSingleFromCache(company.getLong("id"), company.getDataEntityType().getName());
}
DynamicObjectCollection banksentry = org.getDynamicObjectCollection("yem_banksentry");//获取公司抬头中的{银行信息}
for (DynamicObject bank : banksentry) {
int row = model.createNewEntryRow("yem_entryentity");//动态表单添加行
model.setValue("yem_account", bank.get("yem_account"), row);//银行账号
model.setValue("yem_accountnumber", bank.get("yem_accountnumber"), row);//银行账号
model.setValue("yem_accountname", bank.get("yem_accountname"), row);//账户名称
model.setValue("yem_bankaccount", bank.get("yem_bankaccount"), row);//开户银行
model.setValue("yem_bankaddress", bank.get("yem_bankaddress"), row);//银行地址
model.setValue("yem_swiftcode", bank.get("yem_swiftcode"), row);//swift code
}
}
}
@Override
public void click(EventObject evt) {
super.click(evt);
String key = ((Control) evt.getSource()).getKey();
switch (key) {
case "btnok"://点击确定按钮
this.btnOk();//点击确定按钮返回数据
break;
}
}
/**
* @return void
* @Description: 点击确定给父页面返回信息
* @function 功能
* @purposes 用途
*/
private void btnOk() {
IFormView view = this.getView();
IDataModel model = this.getModel();
int selectRows = ((EntryGrid) view.getControl("yem_entryentity")).getEntryState().getFocusRow();//获取选中行的行数
DynamicObject row = model.getEntryRowEntity("yem_entryentity", selectRows);//获取选中行的数据
view.returnDataToParent(row);
view.close();
}
@Override
public void registerListener(EventObject e) {
super.registerListener(e);
this.addClickListeners("btnok");
}
}

View File

@ -0,0 +1,28 @@
package yem.wm.bd.companyinfo.operation;
import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
import kd.bos.entity.plugin.AddValidatorsEventArgs;
import kd.bos.entity.plugin.PreparePropertysEventArgs;
import yem.wm.bd.companyinfo.validator.CompanyInfoSaveValidator;
import java.util.List;
/**
* @Description 公司抬头保存操作
* 校验{银行信息}{联系人信息}有且有唯一的默认值
* @Author: zhangh
* @CreateTime: 2025-02-08 17:05
*/
public class CompanyInfoSaveOpService extends AbstractOperationServicePlugIn {
@Override
public void onPreparePropertys(PreparePropertysEventArgs e) {
List<String> fieldKeys = e.getFieldKeys();
fieldKeys.add("yem_isdefaultbank");//{银行信息}--默认
fieldKeys.add("yem_isdefaultlinkman");//{联系人信息}--默认
}
@Override
public void onAddValidators(AddValidatorsEventArgs e) {
e.addValidator(new CompanyInfoSaveValidator());
}
}

View File

@ -0,0 +1,48 @@
package yem.wm.bd.companyinfo.validator;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.entity.ExtendedDataEntity;
import kd.bos.entity.validate.AbstractValidator;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Description 公司抬头保存校验
* 校验{银行信息}{联系人信息}有且有唯一的默认值
* @Author: zhangh
* @CreateTime: 2025-02-08 17:09
*/
public class CompanyInfoSaveValidator extends AbstractValidator {
@Override
public void validate() {
for (ExtendedDataEntity extendedDataEntity : this.getDataEntities()) {
checkDefault(extendedDataEntity);
}
}
/**
* @Description: 校验逻辑
* @function 校验{银行信息}{联系人信息}有且仅有唯一的默认值
* @purposes 用途
* @param extendedDataEntity
* @return void
*/
public void checkDefault(ExtendedDataEntity extendedDataEntity) {
DynamicObject dataEntity = extendedDataEntity.getDataEntity();//获取单据的实体
DynamicObjectCollection banksentry = dataEntity.getDynamicObjectCollection("yem_banksentry");//获取公司抬头--{银行信息}
List<DynamicObject> isdefaultbank = banksentry.stream().filter(x -> x.getBoolean("yem_isdefaultbank") == true).collect(Collectors.toList());//获取公司抬头--{银行信息}默认为是的集合
if (banksentry.size() > 0 && (isdefaultbank.size() > 1 || isdefaultbank.size() == 0)) {
this.addErrorMessage(extendedDataEntity, "银行信息中需要有一个默认。");
}
DynamicObjectCollection linkmanentry = dataEntity.getDynamicObjectCollection("yem_linkmanentry");//获取公司抬头--{联系人信息}
List<DynamicObject> isdefaultlinkman = linkmanentry.stream().filter(x -> x.getBoolean("yem_isdefaultlinkman") == true).collect(Collectors.toList());//获取公司抬头--{联系人信息}默认为是的集合
if (linkmanentry.size() > 0 && (isdefaultlinkman.size() > 1 || isdefaultlinkman.size() == 0)) {
this.addErrorMessage(extendedDataEntity, "联系人信息中需要有一个默认的联系人。");
}
}
}

View File

@ -0,0 +1,99 @@
package yem.wm.bd.companymaninfor.dynamic;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.entity.datamodel.IDataModel;
import kd.bos.form.IFormView;
import kd.bos.form.control.Control;
import kd.bos.form.control.EntryGrid;
import kd.bos.form.plugin.AbstractFormPlugin;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import yem.wm.bd.util.BothCardHelper;
import java.util.ArrayList;
import java.util.EventObject;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Description 公司人员信息--表单插件
* 1加载界面时默认获取公司抬头中的{联系人信息}自动给单据体赋值
* 2选中行数据之后点击确定给父页面返回数据
* @Author: zhangh
* @CreateTime: 2025-02-08 14:39
*/
public class CompanyManInforDynamicPlugin extends AbstractFormPlugin {
@Override
public void afterCreateNewData(EventObject e) {
IFormView view = this.getView();//动态表单的view视图
IDataModel model = view.getModel();//动态表单的model模型
IFormView parentView = view.getParentView();//获取父页面的view视图
IDataModel parentModel = parentView.getModel();//获取父页面的model模型
DynamicObject company = (DynamicObject) parentModel.getValue("yem_org");//获取父页面的公司字段
if (company != null) {
String orgtype = (String) parentModel.getValue("yem_orgtype");//获取父页面的组织类型
DynamicObject org = null;
if ("bos_org".equals(orgtype)) {
org = BothCardHelper.queryCompany(company);//系统参数是业务单元获取公司抬头
} else {
org = BusinessDataServiceHelper.loadSingleFromCache(company.getLong("id"), company.getDataEntityType().getName());
}
if (org != null) {
DynamicObjectCollection linkmanentry = org.getDynamicObjectCollection("yem_linkmanentry");//公司抬头信息中{联系人信息}
for (DynamicObject linkman : linkmanentry) {
int row = model.createNewEntryRow("yem_entryentity");//动态表单单据体添加行
model.setValue("yem_companylinkman", linkman.get("yem_contactperson"), row);//人员
model.setValue("yem_companytel", linkman.get("yem_phonenum"), row);//电话
model.setValue("yem_companyemail", linkman.get("yem_addemail"), row);//E-Mail
model.setValue("yem_companyvx", linkman.get("yem_suppliervx"), row);//微信
model.setValue("yem_companyqq", linkman.get("yem_supplierqq"), row);//QQ
model.setValue("yem_companyfax", org.get("yem_fax"), row);//传真
}
}
}
}
@Override
public void click(EventObject evt) {
super.click(evt);
String key = ((Control) evt.getSource()).getKey();
switch (key) {
case "btnok"://确定按钮
this.btnOk();//点击确定按钮返回数据
break;
}
}
/**
* @Description: 点击确定给父页面返回信息
* @function 功能
* @purposes 用途
* @return void
*/
public void btnOk() {
EntryGrid entryGrid = this.getView().getControl("yem_entryentity");//获取单据体控件
int[] selectRows = entryGrid.getSelectRows();//获取选中的行数
List<DynamicObject> list = new ArrayList<>();
for (int rowIndex : selectRows) {
DynamicObject entryRowEntity = this.getModel().getEntryRowEntity("yem_entryentity", rowIndex);
list.add(entryRowEntity);
}
List<DynamicObject> defaultInfor = list.stream().filter(x -> x.getBoolean("yem_default") == true).collect(Collectors.toList());//判断选中的行数中是否勾选了默认
if (defaultInfor.size() == 0 || defaultInfor.size() > 1){
this.getView().showErrorNotification("公司联系人信息中需要有勾选一个默认的联系人。");
return;
}
this.getView().returnDataToParent(list);
this.getView().close();
}
@Override
public void registerListener(EventObject e) {
super.registerListener(e);
this.addClickListeners("btnok");
}
}

View File

@ -0,0 +1,284 @@
package yem.wm.bd.createbasedata.form;
import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.LocaleString;
import kd.bos.dataentity.metadata.IDataEntityProperty;
import kd.bos.dataentity.metadata.IDataEntityType;
import kd.bos.dataentity.metadata.dynamicobject.DynamicProperty;
import kd.bos.dataentity.serialization.SerializationUtils;
import kd.bos.dataentity.utils.StringUtils;
import kd.bos.designer.botp.BillTreeBuildParameter;
import kd.bos.designer.botp.EntityParseHelper;
import kd.bos.designer.query.QueryEntityParseHelper;
import kd.bos.designer.query.QueryEntityTreeBuildParameter;
import kd.bos.entity.EntityType;
import kd.bos.entity.MainEntityType;
import kd.bos.entity.botp.CRFormula;
import kd.bos.entity.botp.plugin.args.LoadFuncTypesEventArgs;
import kd.bos.entity.botp.runtime.ConvertFuncLoader;
import kd.bos.entity.datamodel.events.ChangeData;
import kd.bos.entity.datamodel.events.PropertyChangedArgs;
import kd.bos.entity.function.FunctionTypes;
import kd.bos.entity.property.AttachmentProp;
import kd.bos.entity.property.IFieldHandle;
import kd.bos.entity.tree.TreeNode;
import kd.bos.form.CloseCallBack;
import kd.bos.form.FormShowParameter;
import kd.bos.form.ShowType;
import kd.bos.form.control.Control;
import kd.bos.form.events.ClosedCallBackEvent;
import kd.bos.servicehelper.MetadataServiceHelper;
import yem.base.common.utils.YEM;
import java.util.ArrayList;
import java.util.EventObject;
import java.util.List;
/**
* @Description 字段映射配置-表单插件
* 1选择目标实体自动带出目标实体中的所有字段
* 2值改变清空源单字段计算公式自动清空与之对应的隐藏字段
* 3点击源单字段之后跳转选择单据字段然后在选择单据字段中点击确定之后携带信息到表单上
* 4点击计算公式之后跳转表达式然后在表达式中点击确定之后携带信息到单据上
* @Author: zhangh
* @CreateTime: 2025-02-13 14:19
*/
public class FieldMapBillPlugin extends AbstractBillPlugIn {
@Override
public void propertyChanged(PropertyChangedArgs e) {
String name = e.getProperty().getName();
ChangeData[] changeSet = e.getChangeSet();
Object newValue = changeSet[0].getNewValue();
int rowIndex = changeSet[0].getRowIndex();
switch (name) {
case "yem_targetentity"://目标实体
setTargetVAlue();//选择目标实体自动带出目标实体对应的所有字段
break;
case "yem_sourcefield":
if (YEM.isEmpty(newValue)) {
this.getModel().setValue("yem_sourcekey", "", rowIndex);//清空源单字段清空隐藏的源单字段标识
}
break;
case "yem_formulas":
if (YEM.isEmpty(newValue)) {
this.getModel().setValue("yem_math", "", rowIndex);//清空计算公式清空隐藏的公式
}
break;
default:
break;
}
}
/**
* @return void
* @Description: 选择目标实体自动带出目标实体对应的所有字段
* @function
* @purposes
*/
public void setTargetVAlue() {
this.getModel().deleteEntryData("yem_fieldcontrast_e");//先清楚{字段对照}单据体所有数据
DynamicObject targetentity = (DynamicObject) this.getModel().getValue("yem_targetentity");//获取目标实体
if (targetentity == null) return;
MainEntityType dataEntityType = MetadataServiceHelper.getDataEntityType(targetentity.getString("number"));//获取元数据模型主要用于读取字段类型和字段模型相关
for (EntityType entityType : dataEntityType.getAllEntities().values()) {//遍历字段类型
for (IDataEntityProperty property : entityType.getFields().values()) {
if (!(property instanceof IFieldHandle)) continue;
int rowIndex = this.getModel().createNewEntryRow("yem_fieldcontrast_e");//{字段对照}添加行
DynamicProperty field = (DynamicProperty) property;
String targetFieldKey = field.getName();//获取字段标识
String targetFieldName = buildPropFullCaption(property);//获取字段名称
this.getModel().setValue("yem_targetkey", targetFieldKey, rowIndex);
this.getModel().setValue("yem_targetfield", targetFieldName, rowIndex);
}
}
}
/**
* @Description: 获取字段的名称
* @function 功能
* @purposes 用途
* @param property 字段实体属性
* @return String 返回字段名称(包含单据体名称)
*/
public String buildPropFullCaption(IDataEntityProperty property) {
List<String> captions = new ArrayList();
IDataEntityType parentType = property.getParent(); //获取字段的上级控件
LocaleString displayCaption;
if (parentType instanceof MainEntityType) {//判断上级控件是实体
captions.add("单据头");
} else if (parentType instanceof EntityType) {//判断上级控件是单据体
displayCaption = (parentType).getDisplayName();//获取单据体的名称
captions.add(displayCaption == null ? "" : displayCaption.toString());
}
if (property instanceof DynamicProperty) {
displayCaption = property.getDisplayName();
captions.add(displayCaption == null ? property.getName() : displayCaption.toString());
} else {
captions.add(property.getName());
}
return StringUtils.join(captions.toArray(), ".");
}
@Override
public void registerListener(EventObject e) {
this.addClickListeners("yem_sourcefield", "yem_formulas");
}
@Override
public void click(EventObject evt) {
String key = ((Control) evt.getSource()).getKey();
switch (key) {
case "yem_sourcefield"://源单字段
showSourceField();//点击源单字段跳转选择单据字段
break;
case "yem_formulas"://计算公式
showFormula();//点击计算公式跳转表达式
break;
}
}
/**
* @Description: 跳转表达式
* @function 创建树形结构然后跳转选择单据字段携带参数
* @purposes
* @return void
*/
public void showFormula() {
DynamicObject sourceentity = (DynamicObject) this.getModel().getValue("yem_sourceentity");//获取源单实体
if (sourceentity == null) {
this.getView().showErrorNotification("请先填写源单实体。");
return;
}
DynamicObject targetentity = (DynamicObject) this.getModel().getValue("yem_targetentity");//获取目标单实体
MainEntityType targeEntityType = MetadataServiceHelper.getDataEntityType(targetentity.getString("number"));//获取元数据模型主要用于读取字段类型和字段模型相关
int row = this.getModel().getEntryCurrentRowIndex("yem_fieldcontrast_e");
String targetPropName = (String) this.getModel().getValue("yem_targetkey", row);
IDataEntityProperty targetProperty = targeEntityType.findProperty(targetPropName);
if (targetProperty == null || (targetProperty instanceof AttachmentProp)) return;
MainEntityType sourceMainType = MetadataServiceHelper.getDataEntityType(sourceentity.getString("number"));//获取元数据模型主要用于读取字段类型和字段模型相关
BillTreeBuildParameter parameter = new BillTreeBuildParameter(sourceMainType);//创建树性结构的参数
parameter.setIncludePKField(true);//是否包含单据id
TreeNode billTreeNode = EntityParseHelper.buildBillTreeNodes(parameter);//创建树性结构
String billNodeJson = SerializationUtils.toJsonString(billTreeNode);//序列化树形结构
String formula = (String) this.getModel().getValue("yem_math", row);//获取计算公式
if (StringUtils.isBlank(formula)) {
CRFormula crFormula = new CRFormula();
formula = SerializationUtils.toJsonString(crFormula);//序列话计算公式
}
FunctionTypes functionTypes = FunctionTypes.getCommonFuncs();//输出预置的公共函数
FunctionTypes cloudFunc = ConvertFuncLoader.loadBizCloudFuncTypes();
functionTypes.getFunctionGroups().addAll(cloudFunc.getFunctionGroups());//添加函数分组集合
functionTypes.getFunctionTypes().addAll(cloudFunc.getFunctionTypes());//添加函数定义集合
LoadFuncTypesEventArgs args = new LoadFuncTypesEventArgs(functionTypes);
String funcsXML = FunctionTypes.serializeToXML(args.getFuncTypes());//对预置的函数进行序列化
FormShowParameter showParameter = new FormShowParameter();
showParameter.setFormId("botp_formula");//跳转表达式
showParameter.getCustomParams().put("formula", formula);//传参计算公式的参数
showParameter.getCustomParams().put("entitynumber", sourceentity.getString("number"));//传参 单据标识
showParameter.getCustomParams().put("treenodes", billNodeJson);//传参序列化的树形结构
showParameter.getCustomParams().put("functiontypes", funcsXML);//传参序列化的预置函数
showParameter.setCloseCallBack(new CloseCallBack(this, "yem_formulas"));
showParameter.getOpenStyle().setShowType(ShowType.Modal);
this.getView().showForm(showParameter);
}
/**
* @Description: 跳转选择单据字段
* @function 创建树形结构然后跳转选择单据字段携带参数
* @purposes 用途
* @return void
*/
public void showSourceField() {
DynamicObject sourceentity = (DynamicObject) this.getModel().getValue("yem_sourceentity");//获取源单实体
if (sourceentity == null) {
this.getView().showErrorNotification("请先填写源单实体。");
return;
}
DynamicObject targetentity = (DynamicObject) this.getModel().getValue("yem_targetentity");//获取目标单实体
MainEntityType targeEntityType = MetadataServiceHelper.getDataEntityType(targetentity.getString("number"));//获取元数据模型主要用于读取字段类型和字段模型相关
int row = this.getModel().getEntryCurrentRowIndex("yem_fieldcontrast_e");//获取当前焦点行
String targetFieldValue = (String) this.getModel().getValue("yem_targetkey", row);//获取目标字段的标识
IDataEntityProperty targetProperty = targeEntityType.findProperty(targetFieldValue);///需要过滤显示的字段类型根据目标字段进行过滤
if (targetProperty == null) return;
MainEntityType sourceMainType = MetadataServiceHelper.getDataEntityType(sourceentity.getString("number"));//获取元数据模型主要用于读取字段类型和字段模型相关
BillTreeBuildParameter parameter = new BillTreeBuildParameter(sourceMainType, null, targetProperty);//创建树性结构的参数树形结构显示的字段类型和目标字段一致
parameter.setIncludePKField(true);//是否包含单据id
TreeNode billTreeNode = EntityParseHelper.buildBillTreeNodes(parameter);//创建树性结构
FormShowParameter showParameter = new FormShowParameter();
showParameter.setFormId("botp_selectfield");
String nodesJson = SerializationUtils.toJsonString(billTreeNode);//序列化
showParameter.getCustomParams().put("treenodes", nodesJson);//传参
showParameter.setCloseCallBack(new CloseCallBack(this, "yem_sourcefield"));
showParameter.getOpenStyle().setShowType(ShowType.Modal);
this.getView().showForm(showParameter);
}
@Override
public void closedCallBack(ClosedCallBackEvent e) {
String actionId = e.getActionId();
Object returnData = e.getReturnData();
switch (actionId) {
case "yem_sourcefield"://源单字段
setSourceInfor((String) returnData);//选择单据字段点击确定之后将信息返回到单据上
break;
case "yem_formulas":
setForMulas((String) returnData);
break;
}
}
/**
* @Description: 表达式点击确定之后将信息返回到单据上
* @function 功能
* @purposes 用途
* @param returnData 表达式的返回值(序列化后的计算表达式)
* @return void
*/
public void setForMulas(String returnData) {
if (StringUtils.isNotBlank(returnData)) {
CRFormula formula = SerializationUtils.fromJsonString(returnData, CRFormula.class);//将返回值转换成计算公式
int row = this.getModel().getEntryCurrentRowIndex("yem_fieldcontrast_e");//获取选中的焦点行
this.getModel().setValue("yem_math", returnData, row);//计算公式序列话后的数据
this.getModel().setValue("yem_formulas", formula.getExprDesc(), row);//输出合并后的计算公式描述
}
}
/**
* @Description: 选择单据字段点击确定之后将信息返回到单据上
* @function 功能
* @purposes 用途
* @param returnData 选择单据字段的返回值(字段标识)
* @return void
*/
public void setSourceInfor(String returnData) {
DynamicObject sourceentity = (DynamicObject) this.getModel().getValue("yem_sourceentity");//获取源单实体
MainEntityType sourceMainType = MetadataServiceHelper.getDataEntityType(sourceentity.getString("number"));//获取元数据模型主要用于读取字段类型和字段模型相关
IDataEntityProperty property = null;
for (EntityType entityType : sourceMainType.getAllEntities().values()) {
if (!entityType.getFields().containsKey(returnData)) continue;//判断返回的字段标识是否存在
property = entityType.getFields().get(returnData);
}
if (property == null) return;
int rowIndex = this.getModel().getEntryCurrentRowIndex("yem_fieldcontrast_e");//获取选中的焦点行
this.getModel().setValue("yem_sourcekey", returnData, rowIndex);//源单字段标识
this.getModel().setValue("yem_sourcefield", buildPropFullCaption(property), rowIndex);//源单字段
}
}

View File

@ -0,0 +1,110 @@
package yem.wm.bd.createbasedata.operation;
import kd.bos.dataentity.OperateOption;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.metadata.IDataEntityType;
import kd.bos.dataentity.serialization.SerializationUtils;
import kd.bos.entity.EntityType;
import kd.bos.entity.MainEntityType;
import kd.bos.entity.botp.CRFormula;
import kd.bos.entity.formula.BOSExpressionContext;
import kd.bos.entity.formula.CalcExprParser;
import kd.bos.entity.formula.RowDataModel;
import kd.bos.entity.function.FunctionManage;
import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
import kd.bos.entity.plugin.args.EndOperationTransactionArgs;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.MetadataServiceHelper;
import kd.bos.servicehelper.operation.OperationServiceHelper;
import yem.base.common.utils.DynamicObjectUtil;
import yem.base.common.utils.YEM;
import java.util.ArrayList;
import java.util.List;
/**
* @Description 审核生成合同资料
* 1第一次点击审核生成合同资料
* 2第二次点击审核以及合同变更更新合同资料
* @Author: zhangh
* @CreateTime: 2025-02-13 10:04
*/
public class CreateContractAuditOpPlugin extends AbstractOperationServicePlugIn {
@Override
public void endOperationTransaction(EndOperationTransactionArgs e) {
DynamicObject[] dataEntities = e.getDataEntities();
for (DynamicObject dataEntity : dataEntities) {
String name = dataEntity.getDataEntityType().getName();
dataEntity = BusinessDataServiceHelper.loadSingleFromCache(dataEntity.getLong("id"), name);//变更方案确认之后添加泵更更新的逻辑
createDataBase(dataEntity, name);//生成以及跟新合同资料
}
}
/**
* @param dataEntity 合同实体
* @param name 合同标识
* @return void
* @Description: 生成以及更新合同资料
* @function 审核时生成合同资料以及更新合同资料
* @purposes 用途
*/
public void createDataBase(DynamicObject dataEntity, String name) {
List<QFilter> qFilters = new ArrayList<>();
qFilters.add(new QFilter("yem_billkey", QCP.equals, name));//合同资料单据标识条件
qFilters.add(new QFilter("yem_billid", QCP.equals, dataEntity.getLong("id")));
String selectfields = DynamicObjectUtil.getSelectfields("yem_bd_contractinfor", false);
DynamicObject baseData = BusinessDataServiceHelper.loadSingle("yem_bd_contractinfor", selectfields, qFilters.toArray(new QFilter[]{}));//根据条件查询合同资料
if (baseData == null) {//如果查询到的合同资料为空则创建合同资料实体
baseData = BusinessDataServiceHelper.newDynamicObject("yem_bd_contractinfor");
}
qFilters.clear();
qFilters.add(new QFilter("yem_sourceentity.number", QCP.equals, name));
qFilters.add(new QFilter("yem_targetentity.number", QCP.equals, "yem_bd_contractinfor"));
String selectfield = DynamicObjectUtil.getSelectfields("yem_bd_fieldmap", false);
selectfield = DynamicObjectUtil.getEntrySelectfields(selectfield, "yem_bd_fieldmap", "yem_fieldcontrast_e", false);
DynamicObject fieldmap = BusinessDataServiceHelper.loadSingle("yem_bd_fieldmap", selectfield, qFilters.toArray(new QFilter[]{}));//查询字段映射配置
if (fieldmap != null) {
DynamicObjectCollection fieldcontrastEntry = fieldmap.getDynamicObjectCollection("yem_fieldcontrast_e");//获取字段映射配置中的{字段对照}
MainEntityType dataEntityType = MetadataServiceHelper.getDataEntityType(name);//获取元数据模型主要用于读取字段类型和字段模型相关
for (DynamicObject entry : fieldcontrastEntry) {
String sourcekey = entry.getString("yem_sourcekey");//获取字段映射配置{字段对照}源单标识字段
String math = entry.getString("yem_math");//获取字段映射配置{字段对照}计算公式字段
Object value = null;
if (YEM.isNotEmpty(sourcekey)) {
for (EntityType type : dataEntityType.getAllEntities().values()) {
if (!(type instanceof MainEntityType)) continue;//判断是否属于单据头如果是单据体则跳出循环
if (!type.getFields().containsKey(sourcekey)) continue;;//判断源单字段是否是单据头字段如果不是单据头字段则跳出本次循环
value = dataEntity.get(sourcekey);
}
} else if (YEM.isNotEmpty(math)) {
CRFormula formula = SerializationUtils.fromJsonString(math, CRFormula.class);//计算公式进行序列话
String expression = formula.getExpression();//获取计算公式的表达式
//RowDataModel第一个入参要传入当前的实体名如解析单据体的数据则传入单据体标识
RowDataModel rowDataModel = new RowDataModel(name, dataEntityType);
rowDataModel.setRowContext(dataEntity);
BOSExpressionContext bosExpressionContext = new BOSExpressionContext(rowDataModel);//创建表达式运行上下文对象
value = CalcExprParser.getExpressionValue(expression, bosExpressionContext, FunctionManage.get());//根据表达式取值
}
//目标字段
String targetfieidexp = entry.getString("yem_targetkey");
MainEntityType dataTarEntityType = MetadataServiceHelper.getDataEntityType("yem_bd_contractinfor");//获取元数据模型主要用于读取字段类型和字段模型相关
for (EntityType entityType : dataTarEntityType.getAllEntities().values()) {
if (!(entityType instanceof MainEntityType)) continue;//判断是否属于单据头如果是单据体则跳出循环
if (!entityType.getFields().containsKey(targetfieidexp)) continue;//判断源单字段是否是单据头字段如果不是单据头字段则跳出本次循环
baseData.set(targetfieidexp, value);
}
}
OperationServiceHelper.executeOperate("save", "yem_bd_contractinfor", new DynamicObject[]{baseData}, OperateOption.create());
}
}
}

View File

@ -0,0 +1,108 @@
package yem.wm.bd.createbasedata.operation;
import kd.bos.dataentity.OperateOption;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.serialization.SerializationUtils;
import kd.bos.entity.EntityType;
import kd.bos.entity.MainEntityType;
import kd.bos.entity.botp.CRFormula;
import kd.bos.entity.formula.BOSExpressionContext;
import kd.bos.entity.formula.CalcExprParser;
import kd.bos.entity.formula.RowDataModel;
import kd.bos.entity.function.FunctionManage;
import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
import kd.bos.entity.plugin.args.EndOperationTransactionArgs;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.MetadataServiceHelper;
import kd.bos.servicehelper.operation.OperationServiceHelper;
import yem.base.common.utils.DynamicObjectUtil;
import yem.base.common.utils.YEM;
import java.util.ArrayList;
import java.util.List;
/**
* @Description 审核生成协议资料
* 1第一次点击审核生成协议资料
* 2第二次点击审核以及合同变更更新协议资料
* @Author: zhangh
* @CreateTime: 2025-02-14 18:12
*/
public class CreateDealAuditOpPlugin extends AbstractOperationServicePlugIn {
@Override
public void endOperationTransaction(EndOperationTransactionArgs e) {
DynamicObject[] dataEntities = e.getDataEntities();
for (DynamicObject dataEntity : dataEntities) {
String name = dataEntity.getDataEntityType().getName();
dataEntity = BusinessDataServiceHelper.loadSingleFromCache(dataEntity.getLong("id"), name);//变更方案确认之后添加泵更更新的逻辑
createDataBase(dataEntity, name);//生成以及跟新协议资料
}
}
/**
* @param dataEntity 合同实体
* @param name 合同标识
* @return void
* @Description: 生成以及更新协议资料
* @function 审核时生成协议资料以及更新协议资料
* @purposes 用途
*/
public void createDataBase(DynamicObject dataEntity, String name) {
List<QFilter> qFilters = new ArrayList<>();
qFilters.add(new QFilter("yem_billkey", QCP.equals, name));//协议资料单据标识条件
qFilters.add(new QFilter("yem_billid", QCP.equals, dataEntity.getLong("id")));
String selectfields = DynamicObjectUtil.getSelectfields("yem_bd_agreementinfo", false);
DynamicObject baseData = BusinessDataServiceHelper.loadSingle("yem_bd_agreementinfo", selectfields, qFilters.toArray(new QFilter[]{}));//根据条件查询协议资料
if (baseData == null) {//如果查询到的协议资料为空则创建协议资料实体
baseData = BusinessDataServiceHelper.newDynamicObject("yem_bd_agreementinfo");
}
qFilters.clear();
qFilters.add(new QFilter("yem_sourceentity.number", QCP.equals, name));
qFilters.add(new QFilter("yem_targetentity.number", QCP.equals, "yem_bd_agreementinfo"));
String selectfield = DynamicObjectUtil.getSelectfields("yem_bd_fieldmap", false);
selectfield = DynamicObjectUtil.getEntrySelectfields(selectfield, "yem_bd_fieldmap", "yem_fieldcontrast_e", false);
DynamicObject fieldmap = BusinessDataServiceHelper.loadSingle("yem_bd_fieldmap", selectfield, qFilters.toArray(new QFilter[]{}));//查询字段映射配置
if (fieldmap != null) {
DynamicObjectCollection fieldcontrastEntry = fieldmap.getDynamicObjectCollection("yem_fieldcontrast_e");//获取字段映射配置中的{字段对照}
MainEntityType dataEntityType = MetadataServiceHelper.getDataEntityType(name);//获取元数据模型主要用于读取字段类型和字段模型相关
for (DynamicObject entry : fieldcontrastEntry) {
String sourcekey = entry.getString("yem_sourcekey");//获取字段映射配置{字段对照}源单标识字段
String math = entry.getString("yem_math");//获取字段映射配置{字段对照}计算公式字段
Object value = null;
if (YEM.isNotEmpty(sourcekey)) {
for (EntityType type : dataEntityType.getAllEntities().values()) {
if (!(type instanceof MainEntityType)) continue;//判断是否属于单据头如果是单据体则跳出循环
if (!type.getFields().containsKey(sourcekey)) continue;;//判断源单字段是否是单据头字段如果不是单据头字段则跳出本次循环
value = dataEntity.get(sourcekey);
}
} else if (YEM.isNotEmpty(math)) {
CRFormula formula = SerializationUtils.fromJsonString(math, CRFormula.class);//计算公式进行序列话
String expression = formula.getExpression();//获取计算公式的表达式
//RowDataModel第一个入参要传入当前的实体名如解析单据体的数据则传入单据体标识
RowDataModel rowDataModel = new RowDataModel(name, dataEntityType);
rowDataModel.setRowContext(dataEntity);
BOSExpressionContext bosExpressionContext = new BOSExpressionContext(rowDataModel);//创建表达式运行上下文对象
value = CalcExprParser.getExpressionValue(expression, bosExpressionContext, FunctionManage.get());//根据表达式取值
}
//目标字段
String targetfieidexp = entry.getString("yem_targetkey");
MainEntityType dataTarEntityType = MetadataServiceHelper.getDataEntityType("yem_bd_agreementinfo");//获取元数据模型主要用于读取字段类型和字段模型相关
for (EntityType entityType : dataTarEntityType.getAllEntities().values()) {
if (!(entityType instanceof MainEntityType)) continue;//判断是否属于单据头如果是单据体则跳出循环
if (!entityType.getFields().containsKey(targetfieidexp)) continue;//判断源单字段是否是单据头字段如果不是单据头字段则跳出本次循环
baseData.set(targetfieidexp, value);
}
}
OperationServiceHelper.executeOperate("save", "yem_bd_agreementinfo", new DynamicObject[]{baseData}, OperateOption.create());
}
}
}

View File

@ -0,0 +1,108 @@
package yem.wm.bd.createbasedata.operation;
import kd.bos.dataentity.OperateOption;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.serialization.SerializationUtils;
import kd.bos.entity.EntityType;
import kd.bos.entity.MainEntityType;
import kd.bos.entity.botp.CRFormula;
import kd.bos.entity.formula.BOSExpressionContext;
import kd.bos.entity.formula.CalcExprParser;
import kd.bos.entity.formula.RowDataModel;
import kd.bos.entity.function.FunctionManage;
import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
import kd.bos.entity.plugin.args.EndOperationTransactionArgs;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.MetadataServiceHelper;
import kd.bos.servicehelper.operation.OperationServiceHelper;
import yem.base.common.utils.DynamicObjectUtil;
import yem.base.common.utils.YEM;
import java.util.ArrayList;
import java.util.List;
/**
* @Description 审核生成保险资料
* 1第一次点击审核生成保险资料
* 2第二次点击审核以及合同变更更新保险资料
* @Author: zhangh
* @CreateTime: 2025-02-14 18:20
*/
public class CreateInsuranceAuditOpPlugin extends AbstractOperationServicePlugIn {
@Override
public void endOperationTransaction(EndOperationTransactionArgs e) {
DynamicObject[] dataEntities = e.getDataEntities();
for (DynamicObject dataEntity : dataEntities) {
String name = dataEntity.getDataEntityType().getName();
dataEntity = BusinessDataServiceHelper.loadSingleFromCache(dataEntity.getLong("id"), name);//变更方案确认之后添加泵更更新的逻辑
createDataBase(dataEntity, name);//生成以及跟新保险资料
}
}
/**
* @param dataEntity 合同实体
* @param name 合同标识
* @return void
* @Description: 生成以及更新保险资料
* @function 审核时生成保险资料以及更新保险资料
* @purposes 用途
*/
public void createDataBase(DynamicObject dataEntity, String name) {
List<QFilter> qFilters = new ArrayList<>();
qFilters.add(new QFilter("yem_billkey", QCP.equals, name));//保险资料单据标识条件
qFilters.add(new QFilter("yem_billid", QCP.equals, dataEntity.getLong("id")));
String selectfields = DynamicObjectUtil.getSelectfields("yem_bd_insuranceinfor", false);
DynamicObject baseData = BusinessDataServiceHelper.loadSingle("yem_bd_insuranceinfor", selectfields, qFilters.toArray(new QFilter[]{}));//根据条件查询保险资料
if (baseData == null) {//如果查询到的保险资料为空则创建保险资料实体
baseData = BusinessDataServiceHelper.newDynamicObject("yem_bd_insuranceinfor");
}
qFilters.clear();
qFilters.add(new QFilter("yem_sourceentity.number", QCP.equals, name));
qFilters.add(new QFilter("yem_targetentity.number", QCP.equals, "yem_bd_insuranceinfor"));
String selectfield = DynamicObjectUtil.getSelectfields("yem_bd_fieldmap", false);
selectfield = DynamicObjectUtil.getEntrySelectfields(selectfield, "yem_bd_fieldmap", "yem_fieldcontrast_e", false);
DynamicObject fieldmap = BusinessDataServiceHelper.loadSingle("yem_bd_fieldmap", selectfield, qFilters.toArray(new QFilter[]{}));//查询字段映射配置
if (fieldmap != null) {
DynamicObjectCollection fieldcontrastEntry = fieldmap.getDynamicObjectCollection("yem_fieldcontrast_e");//获取字段映射配置中的{字段对照}
MainEntityType dataEntityType = MetadataServiceHelper.getDataEntityType(name);//获取元数据模型主要用于读取字段类型和字段模型相关
for (DynamicObject entry : fieldcontrastEntry) {
String sourcekey = entry.getString("yem_sourcekey");//获取字段映射配置{字段对照}源单标识字段
String math = entry.getString("yem_math");//获取字段映射配置{字段对照}计算公式字段
Object value = null;
if (YEM.isNotEmpty(sourcekey)) {
for (EntityType type : dataEntityType.getAllEntities().values()) {
if (!(type instanceof MainEntityType)) continue;//判断是否属于单据头如果是单据体则跳出循环
if (!type.getFields().containsKey(sourcekey)) continue;;//判断源单字段是否是单据头字段如果不是单据头字段则跳出本次循环
value = dataEntity.get(sourcekey);
}
} else if (YEM.isNotEmpty(math)) {
CRFormula formula = SerializationUtils.fromJsonString(math, CRFormula.class);//计算公式进行序列话
String expression = formula.getExpression();//获取计算公式的表达式
//RowDataModel第一个入参要传入当前的实体名如解析单据体的数据则传入单据体标识
RowDataModel rowDataModel = new RowDataModel(name, dataEntityType);
rowDataModel.setRowContext(dataEntity);
BOSExpressionContext bosExpressionContext = new BOSExpressionContext(rowDataModel);//创建表达式运行上下文对象
value = CalcExprParser.getExpressionValue(expression, bosExpressionContext, FunctionManage.get());//根据表达式取值
}
//目标字段
String targetfieidexp = entry.getString("yem_targetkey");
MainEntityType dataTarEntityType = MetadataServiceHelper.getDataEntityType("yem_bd_insuranceinfor");//获取元数据模型主要用于读取字段类型和字段模型相关
for (EntityType entityType : dataTarEntityType.getAllEntities().values()) {
if (!(entityType instanceof MainEntityType)) continue;//判断是否属于单据头如果是单据体则跳出循环
if (!entityType.getFields().containsKey(targetfieidexp)) continue;//判断源单字段是否是单据头字段如果不是单据头字段则跳出本次循环
baseData.set(targetfieidexp, value);
}
}
OperationServiceHelper.executeOperate("save", "yem_bd_insuranceinfor", new DynamicObject[]{baseData}, OperateOption.create());
}
}
}

View File

@ -0,0 +1,109 @@
package yem.wm.bd.createbasedata.operation;
import kd.bos.dataentity.OperateOption;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.serialization.SerializationUtils;
import kd.bos.entity.EntityType;
import kd.bos.entity.MainEntityType;
import kd.bos.entity.botp.CRFormula;
import kd.bos.entity.formula.BOSExpressionContext;
import kd.bos.entity.formula.CalcExprParser;
import kd.bos.entity.formula.RowDataModel;
import kd.bos.entity.function.FunctionManage;
import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
import kd.bos.entity.plugin.args.EndOperationTransactionArgs;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.MetadataServiceHelper;
import kd.bos.servicehelper.operation.OperationServiceHelper;
import yem.base.common.utils.DynamicObjectUtil;
import yem.base.common.utils.YEM;
import java.util.ArrayList;
import java.util.List;
/**
* @Description 审核生成发票资料
* 1第一次点击审核生成发票资料
* 2第二次点击审核以及合同变更更新发票资料
* @Author: zhangh
* @CreateTime: 2025-02-14 18:06
*/
public class CreateInvoiceAuditOpPlugin extends AbstractOperationServicePlugIn {
@Override
public void endOperationTransaction(EndOperationTransactionArgs e) {
DynamicObject[] dataEntities = e.getDataEntities();
for (DynamicObject dataEntity : dataEntities) {
String name = dataEntity.getDataEntityType().getName();
dataEntity = BusinessDataServiceHelper.loadSingleFromCache(dataEntity.getLong("id"), name);//变更方案确认之后添加泵更更新的逻辑
createDataBase(dataEntity, name);//生成以及跟新发票资料
}
}
/**
* @param dataEntity 合同实体
* @param name 合同标识
* @return void
* @Description: 生成以及更新发票资料
* @function 审核时生成发票资料以及更新发票资料
* @purposes 用途
*/
public void createDataBase(DynamicObject dataEntity, String name) {
List<QFilter> qFilters = new ArrayList<>();
qFilters.add(new QFilter("yem_billkey", QCP.equals, name));//发票资料单据标识条件
qFilters.add(new QFilter("yem_billid", QCP.equals, dataEntity.getLong("id")));
String selectfields = DynamicObjectUtil.getSelectfields("yem_bd_invoiceinfor", false);
DynamicObject baseData = BusinessDataServiceHelper.loadSingle("yem_bd_invoiceinfor", selectfields, qFilters.toArray(new QFilter[]{}));//根据条件查询发票资料
if (baseData == null) {//如果查询到的发票资料为空则创建发票资料实体
baseData = BusinessDataServiceHelper.newDynamicObject("yem_bd_invoiceinfor");
}
qFilters.clear();
qFilters.add(new QFilter("yem_sourceentity.number", QCP.equals, name));
qFilters.add(new QFilter("yem_targetentity.number", QCP.equals, "yem_bd_invoiceinfor"));
String selectfield = DynamicObjectUtil.getSelectfields("yem_bd_fieldmap", false);
selectfield = DynamicObjectUtil.getEntrySelectfields(selectfield, "yem_bd_fieldmap", "yem_fieldcontrast_e", false);
DynamicObject fieldmap = BusinessDataServiceHelper.loadSingle("yem_bd_fieldmap", selectfield, qFilters.toArray(new QFilter[]{}));//查询字段映射配置
if (fieldmap != null) {
DynamicObjectCollection fieldcontrastEntry = fieldmap.getDynamicObjectCollection("yem_fieldcontrast_e");//获取字段映射配置中的{字段对照}
MainEntityType dataEntityType = MetadataServiceHelper.getDataEntityType(name);//获取元数据模型主要用于读取字段类型和字段模型相关
for (DynamicObject entry : fieldcontrastEntry) {
String sourcekey = entry.getString("yem_sourcekey");//获取字段映射配置{字段对照}源单标识字段
String math = entry.getString("yem_math");//获取字段映射配置{字段对照}计算公式字段
Object value = null;
if (YEM.isNotEmpty(sourcekey)) {
for (EntityType type : dataEntityType.getAllEntities().values()) {
if (!(type instanceof MainEntityType)) continue;//判断是否属于单据头如果是单据体则跳出循环
if (!type.getFields().containsKey(sourcekey)) continue;;//判断源单字段是否是单据头字段如果不是单据头字段则跳出本次循环
value = dataEntity.get(sourcekey);
}
} else if (YEM.isNotEmpty(math)) {
CRFormula formula = SerializationUtils.fromJsonString(math, CRFormula.class);//计算公式进行序列话
String expression = formula.getExpression();//获取计算公式的表达式
//RowDataModel第一个入参要传入当前的实体名如解析单据体的数据则传入单据体标识
RowDataModel rowDataModel = new RowDataModel(name, dataEntityType);
rowDataModel.setRowContext(dataEntity);
BOSExpressionContext bosExpressionContext = new BOSExpressionContext(rowDataModel);//创建表达式运行上下文对象
value = CalcExprParser.getExpressionValue(expression, bosExpressionContext, FunctionManage.get());//根据表达式取值
}
//目标字段
String targetfieidexp = entry.getString("yem_targetkey");
MainEntityType dataTarEntityType = MetadataServiceHelper.getDataEntityType("yem_bd_invoiceinfor");//获取元数据模型主要用于读取字段类型和字段模型相关
for (EntityType entityType : dataTarEntityType.getAllEntities().values()) {
if (!(entityType instanceof MainEntityType)) continue;//判断是否属于单据头如果是单据体则跳出循环
if (!entityType.getFields().containsKey(targetfieidexp)) continue;//判断源单字段是否是单据头字段如果不是单据头字段则跳出本次循环
baseData.set(targetfieidexp, value);
}
}
OperationServiceHelper.executeOperate("save", "yem_bd_invoiceinfor", new DynamicObject[]{baseData}, OperateOption.create());
}
}
}

View File

@ -0,0 +1,38 @@
package yem.wm.bd.createbasedata.operation;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
import kd.bos.entity.plugin.args.BeforeOperationArgs;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.operation.DeleteServiceHelper;
import java.util.ArrayList;
import java.util.List;
/**
* @Description 删除核算维度数据
* 合同单据在点击删除时同步删除核算维度资料
* @Author: zhangh
* @CreateTime: 2025-02-14 18:22
*/
public class DeleteInsuranceOpPlugin extends AbstractOperationServicePlugIn {
@Override
public void beforeExecuteOperationTransaction(BeforeOperationArgs e) {
for (DynamicObject dataEntity : e.getDataEntities()) {
//需要判断是否是变更单如果是变更单据则跳出
String name = dataEntity.getDataEntityType().getName();
dataEntity = BusinessDataServiceHelper.loadSingleFromCache(dataEntity.getLong("id"), name);
DynamicObject fieldmap = BusinessDataServiceHelper.loadSingle("yem_bd_fieldmap", "id,yem_targetentity", new QFilter[]{new QFilter("yem_sourceentity.number", QCP.equals, name)});//查询核算维度字段映射配置
if (fieldmap != null) {
List<QFilter> qFilters = new ArrayList<>();
qFilters.add(new QFilter("yem_billkey", QCP.equals, name));
qFilters.add(new QFilter("yem_billid", QCP.equals, dataEntity.getLong("id")));
DeleteServiceHelper.delete(fieldmap.getDynamicObject("yem_targetentity").getString("number"), qFilters.toArray(new QFilter[]{}));
}
}
}
}

View File

@ -0,0 +1,76 @@
package yem.wm.bd.customerbankinfor.dynamic;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.entity.datamodel.IDataModel;
import kd.bos.form.IFormView;
import kd.bos.form.control.Control;
import kd.bos.form.control.EntryGrid;
import kd.bos.form.plugin.AbstractFormPlugin;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import java.util.EventObject;
/**
* @Description 客户银行信息
* 1加载界面时默认获取客户中的{银行信息}自动给单据体赋值
* 2选中行数据之后点击确定给父页面返回数据
* @Author: zhangh
* @CreateTime: 2025-02-08 16:03
*/
public class CusBankDynamicPlugin extends AbstractFormPlugin {
@Override
public void afterCreateNewData(EventObject e) {
IFormView view = this.getView();
IDataModel model = view.getModel();
IFormView parentView = view.getParentView();
IDataModel parentModel = parentView.getModel();
DynamicObject customer = (DynamicObject) parentModel.getValue("yem_customer");//获取父页面的客户字段
if (customer != null) {
customer = BusinessDataServiceHelper.loadSingleFromCache(customer.getLong("id"), customer.getDataEntityType().getName());
DynamicObjectCollection banksentry = customer.getDynamicObjectCollection("entry_bank");//客户中的{银行信息}
for (DynamicObject bank : banksentry) {
int row = model.createNewEntryRow("yem_entryentity");//动态表单单据体添加行数
model.setValue("yem_accountnumber", bank.get("bankaccount"), row);//银行账号
model.setValue("yem_accountname", bank.get("accountname"), row);//账户名称
model.setValue("yem_bankaccount", bank.get("bank"), row);//开户银行
}
}
}
@Override
public void click(EventObject evt) {
super.click(evt);
String key = ((Control) evt.getSource()).getKey();
switch (key) {
case "btnok"://确定按钮
this.btnOk();//点击确定按钮返回数据
break;
}
}
/**
* @Description: 点击确定给父页面返回信息
* @function 功能
* @purposes 用途
* @return void
*/
private void btnOk() {
IFormView view = this.getView();
IDataModel model = this.getModel();
int selectRows = ((EntryGrid) view.getControl("yem_entryentity")).getEntryState().getFocusRow();//获取选中行的行数
DynamicObject row = model.getEntryRowEntity("yem_entryentity", selectRows);//获取选中行的数据
view.returnDataToParent(row);
view.close();
}
@Override
public void registerListener(EventObject e) {
super.registerListener(e);
this.addClickListeners("btnok");
}
}

View File

@ -0,0 +1,85 @@
package yem.wm.bd.customermaninfor.dynamic;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.entity.datamodel.IDataModel;
import kd.bos.form.IFormView;
import kd.bos.form.control.Control;
import kd.bos.form.control.EntryGrid;
import kd.bos.form.plugin.AbstractFormPlugin;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import java.util.EventObject;
/**
* @Description 客户人员信息
* 1加载界面时默认获取客户中的{联系人信息}以及{联系人信息}关联地值属性详细地址微信QQ自动给单据体赋值
* 2选中行数据之后点击确定给父页面返回数据
* @Author: zhangh
* @CreateTime: 2025-02-08 16:12
*/
public class CusManDynamicPlugin extends AbstractFormPlugin {
@Override
public void afterCreateNewData(EventObject e) {
IFormView view = this.getView();
IDataModel model = view.getModel();
IFormView parentView = view.getParentView();
IDataModel parentModel = parentView.getModel();
DynamicObject customer = (DynamicObject) parentModel.getValue("yem_customer");//获取父页面的客户字段
if (customer != null) {
customer = BusinessDataServiceHelper.loadSingleFromCache(customer.getLong("id"), customer.getDataEntityType().getName());
DynamicObjectCollection linkmanentry = customer.getDynamicObjectCollection("entry_linkman");//客户中的{联系人信息}
for (DynamicObject linkman : linkmanentry) {
int row = model.createNewEntryRow("yem_entryentity");//动态表单单据体添加行数
model.setValue("yem_customeruser", linkman.get("contactperson"), row);//人员
model.setValue("yem_customertel", linkman.get("phone"), row);//电话
model.setValue("yem_customeremail", linkman.get("email"), row);//E-Mail
model.setValue("yem_customerfax", linkman.get("fax"), row);//传真
DynamicObject associatedaddress = linkman.getDynamicObject("associatedaddress");//关联地址
if (associatedaddress != null) {
associatedaddress = BusinessDataServiceHelper.loadSingleFromCache(associatedaddress.getLong("id"), associatedaddress.getDataEntityType().getName());
model.setValue("yem_customervx", associatedaddress.get("yem_suppliervx"), row);//微信(公司)--微信
model.setValue("yem_customerqq", associatedaddress.get("yem_supplierqq"), row);//QQ(公司)--QQ
model.setValue("yem_customeraddr", associatedaddress.get("detailaddress"), row);//地址(客户)--详细地址
}
}
}
}
@Override
public void click(EventObject evt) {
super.click(evt);
String key = ((Control) evt.getSource()).getKey();
switch (key) {
case "btnok"://确定按钮
this.btnOk();//点击确定按钮返回数据
break;
}
}
/**
* @Description: 点击确定给父页面返回信息
* @function 功能
* @purposes 用途
* @return void
*/
public void btnOk() {
IFormView view = this.getView();
IDataModel model = this.getModel();
int selectRows = ((EntryGrid) view.getControl("yem_entryentity")).getEntryState().getFocusRow();//获取选中行的行数
DynamicObject row = model.getEntryRowEntity("yem_entryentity", selectRows);//获取选中行的数据
view.returnDataToParent(row);
view.close();
}
@Override
public void registerListener(EventObject e) {
super.registerListener(e);
this.addClickListeners("btnok");
}
}

View File

@ -0,0 +1,31 @@
package yem.wm.bd.qrcode.form;
import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.form.control.Control;
import java.util.EventObject;
/**
* @Description
* @Author: zhangh
* @CreateTime: 2025-02-15 15:43
*/
public class QRCodeFormPlugin extends AbstractBillPlugIn {
@Override
public void registerListener(EventObject e) {
this.addClickListeners(new String[]{"yem_field"});
}
@Override
public void click(EventObject e) {
String key = ((Control) e.getSource()).getKey();
switch (key) {
case "yem_field":
showFiled();
break;
}
}
public void showFiled() {
}
}

View File

@ -0,0 +1,76 @@
package yem.wm.bd.supplierbankinfor.dynamic;
import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.entity.datamodel.IDataModel;
import kd.bos.form.IFormView;
import kd.bos.form.control.Control;
import kd.bos.form.control.EntryGrid;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import java.util.EventObject;
/**
* @Description 供应商银行信息-表单插件
* 1加载界面时默认获取供应商中的{银行信息}自动给单据体赋值
* 2选中行数据之后点击确定给父页面返回数据
* @Author: zhangh
* @CreateTime: 2025-02-08 16:52
*/
public class SupBankDynamicPlugin extends AbstractBillPlugIn {
@Override
public void afterCreateNewData(EventObject e) {
IFormView view = this.getView();
IDataModel model = view.getModel();
IFormView parentView = view.getParentView();
IDataModel parentModel = parentView.getModel();
DynamicObject supplier = (DynamicObject) parentModel.getValue("yem_supplier");//获取父页面的供应商字段
if (supplier != null) {
supplier = BusinessDataServiceHelper.loadSingleFromCache(supplier.getLong("id"), supplier.getDataEntityType().getName());
DynamicObjectCollection banksentry = supplier.getDynamicObjectCollection("entry_bank");//获取供应商中的{银行信息}
for (DynamicObject bank : banksentry) {
int row = model.createNewEntryRow("yem_entryentity");//动态表单单据体添加行数
model.setValue("yem_accountnumber", bank.get("bankaccount"), row);//银行账号
model.setValue("yem_accountname", bank.get("accountname"), row);//账户名称
model.setValue("yem_bankaccount", bank.get("bank"), row);//开户银行
}
}
}
@Override
public void click(EventObject evt) {
super.click(evt);
String key = ((Control) evt.getSource()).getKey();
switch (key) {
case "btnok"://确定按钮
this.btnOk();//点击确定按钮返回数据
break;
}
}
/**
* @Description: 点击确定给父页面返回信息
* @function 功能
* @purposes 用途
* @return void
*/
private void btnOk() {
IFormView view = this.getView();
IDataModel model = this.getModel();
int selectRows = ((EntryGrid) view.getControl("yem_entryentity")).getEntryState().getFocusRow();//获取选中行的行数
DynamicObject row = model.getEntryRowEntity("yem_entryentity", selectRows);//获取选中行的数据
view.returnDataToParent(row);
view.close();
}
@Override
public void registerListener(EventObject e) {
super.registerListener(e);
this.addClickListeners("btnok");
}
}

View File

@ -0,0 +1,84 @@
package yem.wm.bd.suppliermaninfor.dynamic;
import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.entity.datamodel.IDataModel;
import kd.bos.form.IFormView;
import kd.bos.form.control.Control;
import kd.bos.form.control.EntryGrid;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import java.util.EventObject;
/**
* @Description 供应商人员信息-表单插件
* 1加载界面时默认获取供应商中的{人员信息}以及{人员信息}关联地址属性详细地址微信QQ自动给单据体赋值
* 2选中行数据之后点击确定给父页面返回数据
* @Author: zhangh
* @CreateTime: 2025-02-08 16:57
*/
public class SupManDynamicPlugin extends AbstractBillPlugIn {
@Override
public void afterCreateNewData(EventObject e) {
IFormView view = this.getView();
IDataModel model = view.getModel();
IFormView parentView = view.getParentView();
IDataModel parentModel = parentView.getModel();
DynamicObject supplier = (DynamicObject) parentModel.getValue("yem_supplier");//获取父页面的供应商字段
if (supplier != null) {
supplier = BusinessDataServiceHelper.loadSingleFromCache(supplier.getLong("id"), supplier.getDataEntityType().getName());
DynamicObjectCollection linkmanentry = supplier.getDynamicObjectCollection("entry_linkman");//获取供应商中的{联系人信息}
for (DynamicObject linkman : linkmanentry) {
int row = model.createNewEntryRow("yem_entryentity");//动态表单单据体添加行数
model.setValue("yem_supplieruser", linkman.get("contactperson"), row);//人员
model.setValue("yem_suppliertel", linkman.get("phone"), row);//电话
model.setValue("yem_supplieremail", linkman.get("email"), row);//E-Mail
model.setValue("yem_supplierfax", linkman.get("fax"), row);//传真
DynamicObject associatedaddress = linkman.getDynamicObject("associatedaddress");//关联地址
if (associatedaddress != null) {
associatedaddress = BusinessDataServiceHelper.loadSingleFromCache(associatedaddress.getLong("id"), associatedaddress.getDataEntityType().getName());
model.setValue("yem_suppliervx", associatedaddress.get("yem_suppliervx"), row);//微信(公司)--微信
model.setValue("yem_supplierqq", associatedaddress.get("yem_supplierqq"), row);//QQ(公司)--QQ
model.setValue("yem_supplieraddr", associatedaddress.get("detailaddress"), row);//地址(客户)--详细地址
}
}
}
}
@Override
public void click(EventObject evt) {
super.click(evt);
String key = ((Control) evt.getSource()).getKey();
switch (key) {
case "btnok"://确定按钮
this.btnOk();//点击确定按钮返回数据
break;
}
}
/**
* @Description: 点击确定给父页面返回信息
* @function 功能
* @purposes 用途
* @return void
*/
public void btnOk() {
IFormView view = this.getView();
IDataModel model = this.getModel();
int selectRows = ((EntryGrid) view.getControl("yem_entryentity")).getEntryState().getFocusRow();//获取选中行的行数
DynamicObject row = model.getEntryRowEntity("yem_entryentity", selectRows);//获取选中行的数据
view.returnDataToParent(row);
view.close();
}
@Override
public void registerListener(EventObject e) {
super.registerListener(e);
this.addClickListeners("btnok");
}
}

View File

@ -0,0 +1,464 @@
package yem.wm.bd.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.bill.OperationStatus;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.metadata.IDataEntityProperty;
import kd.bos.dataentity.metadata.clr.DataEntityPropertyCollection;
import kd.bos.dataentity.serialization.SerializationUtils;
import kd.bos.entity.datamodel.IDataModel;
import kd.bos.form.CloseCallBack;
import kd.bos.form.FormShowParameter;
import kd.bos.form.IFormView;
import kd.bos.form.ShowType;
import kd.bos.form.control.Label;
import kd.bos.form.plugin.AbstractFormPlugin;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.parameter.SystemParamServiceHelper;
import yem.base.common.utils.DynamicObjectUtil;
import yem.base.common.utils.YEM;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Description 抬头信息帮助类
* @Author: zhangh
* @CreateTime: 2025-02-07 18:32
*/
public class BothCardHelper {
private static final String ADD_CO = "yem_flex_addco";
private static final String INFO_CO = "yem_flex_coinfo";
private static final String ADD_GYS = "yem_flex_addgys";
private static final String INFO_GYS = "yem_flex_gysinfo1";
private static final String ADD_KH = "yem_flex_addbuyer";
private static final String INFO_KH = "yem_flex_buyerinfo1";
/**
* @param form 基类类名
* @param formId 跳转动态表单的标识
* @Description: 跳转动态表单(无参数 没有给子页面传递任何参数)
* @function
* @purposes 多处调用防止代码的重复型
*/
public static void showChangePage(AbstractBillPlugIn form, String formId) {
IFormView view = form.getView();//获取单据的view视图
FormShowParameter parameter = new FormShowParameter();
parameter.getOpenStyle().setShowType(ShowType.Modal);//界面显示分格为弹窗模态显示
parameter.setFormId(formId);//添加跳转的动态表单标识
parameter.setStatus(OperationStatus.ADDNEW);//打开表单的界面状态为新增
parameter.setCloseCallBack(new CloseCallBack(form, formId));//回调
view.showForm(parameter);
}
/**
* @param form 基类名称(AbstractBillPlugIn)
* @Description: 公司抬头信息标签赋值
* @function 根据{抬头信息}隐藏字段给标签赋值
* @purposes 套打等可以使用
*/
public static void setCoLabel(AbstractBillPlugIn form) {
IDataModel model = form.getView().getModel();//获取单据的model
DynamicObject company = (DynamicObject) model.getValue("yem_org");//获取单据{抬头明细(隐藏)}中的公司抬头
if (YEM.isEmpty(company)) {
form.getView().setVisible(Boolean.TRUE, ADD_CO);//判断公司为空显示添加公司的图标
form.getView().setVisible(Boolean.FALSE, INFO_CO);//判断公司为空隐藏编辑公司的图标
} else {
((Label) form.getControl("yem_conamelabel")).setText((String) model.getValue("yem_companyname"));//公司名称
((Label) form.getControl("yem_cotin")).setText((String) model.getValue("yem_companytin"));//纳税人识别号(公司)
((Label) form.getControl("yem_cobank")).setText((String) model.getValue("yem_companybank"));//开户行(公司)
((Label) form.getControl("yem_coacct")).setText((String) model.getValue("yem_companyacct"));//账号(公司)
((Label) form.getControl("yem_coaddr")).setText((String) model.getValue("yem_companyaddr"));//地址(公司)
String isdefaultinfor = (String) model.getValue("yem_isdefaultinfor");//获取默认信息(公司)
JSONObject jsonObject = JSON.parseObject(isdefaultinfor);//将String类型转换成JSONObject
String colinkman = (String) (YEM.isEmpty(isdefaultinfor) ? model.getValue("yem_companylinkman") : jsonObject.get("yem_companylinkman"));//联系人
((Label) form.getControl("yem_colinkman")).setText(colinkman);//联系人(公司)
String cotel = (String) (YEM.isEmpty(isdefaultinfor) ? model.getValue("yem_companytel") : jsonObject.get("yem_companytel"));//电话
((Label) form.getControl("yem_cotel")).setText(cotel);//电话(公司)
String coemail = (String) (YEM.isEmpty(isdefaultinfor) ? model.getValue("yem_companyemail") : jsonObject.get("yem_companyemail"));//E-Mail
((Label) form.getControl("yem_coemail")).setText(coemail);//E-Mail(公司)
String covx = (String) (YEM.isEmpty(isdefaultinfor) ? model.getValue("yem_companyvx") : jsonObject.get("yem_companyvx"));//微信
((Label) form.getControl("yem_covx")).setText(covx);//微信(公司)
String coqq = (String) (YEM.isEmpty(isdefaultinfor) ? model.getValue("yem_companyqq") : jsonObject.get("yem_companyqq"));//QQ
((Label) form.getControl("yem_coqq")).setText(coqq);//QQ(公司)
String cofax = (String) (YEM.isEmpty(isdefaultinfor) ? model.getValue("yem_companyfax") : jsonObject.get("yem_companyfax"));//传真
((Label) form.getControl("yem_cofax")).setText(cofax);//传真(公司)
form.getView().setVisible(Boolean.FALSE, ADD_CO);//判断公司不为空隐藏添加公司的图标
form.getView().setVisible(Boolean.TRUE, INFO_CO);//判断公司不为空显示编辑公司的图标
}
}
/**
* @param form 基类名称
* @Description: 供应商抬头信息标签赋值
* @function 根据{抬头信息}隐藏字段给标签赋值
* @purposes 套打等可以使用
*/
public static void setSupplierLabel(AbstractBillPlugIn form) {
IDataModel model = form.getView().getModel();//获取view中的model
DynamicObject supplier = (DynamicObject) model.getValue("yem_supplier");//获取单据{抬头明细(隐藏)}中的供应商
if (YEM.isEmpty(supplier)) {
form.getView().setVisible(Boolean.TRUE, ADD_GYS);//判断供应商为空显示供应商添加的图标
form.getView().setVisible(Boolean.FALSE, INFO_GYS);//判断供应商为空隐藏供应商编辑的图标
} else {
((Label) form.getControl("yem_gysname")).setText((String) model.getValue("yem_suppliername"));//供应商名称
((Label) form.getControl("yem_gystin")).setText((String) model.getValue("yem_suppliertin"));//纳税人识别号(供应商)
((Label) form.getControl("yem_gysbank")).setText((String) model.getValue("yem_supplierbank"));//开户行(供应商)
((Label) form.getControl("yem_gysacct")).setText((String) model.getValue("yem_supplieracct"));//账号(供应商)
((Label) form.getControl("yem_gyslinkman")).setText((String) model.getValue("yem_supplierlinkman"));//联系人(供应商)
((Label) form.getControl("yem_gystel")).setText((String) model.getValue("yem_suppliertel"));//电话(供应商)
((Label) form.getControl("yem_gysaddr")).setText((String) model.getValue("yem_supplieraddr"));//地址(供应商)
((Label) form.getControl("yem_gysemail")).setText((String) model.getValue("yem_supplieremail"));//E-Mail(供应商)
((Label) form.getControl("yem_gysvx")).setText((String) model.getValue("yem_suppliervx"));//微信(供应商)
((Label) form.getControl("yem_gysqq")).setText((String) model.getValue("yem_supplierqq"));//QQ(供应商)
((Label) form.getControl("yem_gysfax")).setText((String) model.getValue("yem_supplierfax"));//传真(供应商)
form.getView().setVisible(Boolean.FALSE, ADD_GYS);//判断供应商不为空隐藏供应商添加的图标
form.getView().setVisible(Boolean.TRUE, INFO_GYS);//判断供应商不为空显示供应商编辑的图标
}
}
/**
* @param form 基类名称
* @Description: 客户抬头信息标签赋值
* @function 根据{抬头信息}隐藏字段给标签赋值
* @purposes 套打等可以使用
*/
public static void setCustomerLabel(AbstractBillPlugIn form) {
IDataModel model = form.getView().getModel();//获取view中的model
DynamicObject customer = (DynamicObject) model.getValue("yem_customer");//获取单据{抬头明细(隐藏)}中的客户
if (YEM.isEmpty(customer)) {
form.getView().setVisible(Boolean.TRUE, ADD_KH);//判断客户为空显示客户添加的图标
form.getView().setVisible(Boolean.FALSE, INFO_KH);//判断客户为空隐藏客户编辑的图标
} else {
((Label) form.getControl("yem_payername")).setText((String) model.getValue("yem_customername"));//客户名称
((Label) form.getControl("yem_payertin")).setText((String) model.getValue("yem_customertin"));//纳税人识别号(客户)
((Label) form.getControl("yem_payerbank")).setText((String) model.getValue("yem_customerbank"));//开户行(客户)
((Label) form.getControl("yem_payeracct")).setText((String) model.getValue("yem_customeracct"));//账号(客户)
((Label) form.getControl("yem_payerlinkman")).setText((String) model.getValue("yem_customerlinkman"));//联系人(客户)
((Label) form.getControl("yem_payertel")).setText((String) model.getValue("yem_customertel"));//电话(客户)
((Label) form.getControl("yem_payeraddr")).setText((String) model.getValue("yem_customeraddr"));//地址(客户)
((Label) form.getControl("yem_payeremail")).setText((String) model.getValue("yem_customeremail"));//E-Mail(客户)
((Label) form.getControl("yem_payervx")).setText((String) model.getValue("yem_customervx"));//微信(客户)
((Label) form.getControl("yem_payerqq")).setText((String) model.getValue("yem_customerqq"));//QQ(客户)
((Label) form.getControl("yem_payerfax")).setText((String) model.getValue("yem_customerfax"));//传真(客户)
form.getView().setVisible(Boolean.FALSE, ADD_KH);//判断客户不为空隐藏客户添加的图标
form.getView().setVisible(Boolean.TRUE, INFO_KH);//判断客户不为空显示客户编辑的图标
}
}
/**
* @Description: 公司抬头信息实体赋值
* @function 新增单据时默认给{公司抬头}赋值
* @purposes 用途
*/
public static void fillCoInfo(IDataModel model, DynamicObject org) {
boolean viewBill = SystemParamServiceHelper.isViewBill("");//获取系统参数后边进行调整
String orgKey = viewBill ? "yem_bd_companyinfo" : "bos_org";//根据系统参数获取系统是使用业务单元还是公司抬头
model.setValue("yem_orgtype", orgKey); //组织类型
model.setValue("yem_org", org.getLong("id"));//公司抬头
model.setValue("yem_companyname", org.getString("name"));//公司名称
DynamicObject companyinfo = queryCompany(org);//根据业务单元查询公司抬头
if (companyinfo != null) {//判断公司抬头实体是否为空
model.setValue("yem_companytin", companyinfo.get("yem_negocionum"));//纳税人识别号(公司)--纳税识别号
model.setValue("yem_companyaddr", companyinfo.getString("yem_addresscn"));//地址(公司)--地址
model.setValue("yem_companyfax", companyinfo.getString("yem_fax"));//传真(公司)--传真
DynamicObjectCollection banksentry = companyinfo.getDynamicObjectCollection("yem_banksentry");//公司抬头中的{银行信息}
List<DynamicObject> banksentryDefault = banksentry.stream().filter(x -> x.getBoolean("yem_isdefaultbank") == true).collect(Collectors.toList());//获取公司抬头{银行信息}中的默认数据
if (banksentryDefault.size() > 0) {
DynamicObject row = banksentryDefault.get(0);//公司抬头中的{银行信息}默认数据只有唯一一个
String bankaccount = row.getDynamicObject("yem_bankaccount") != null ? row.getDynamicObject("yem_bankaccount").getString("name") : "";//获取开户银行
model.setValue("yem_companybank", bankaccount);//开户行(公司)--开户银行
model.setValue("yem_companyacct", row.get("yem_accountnumber"));//账号(公司)--银行账户
}
DynamicObjectCollection linkmanentry = companyinfo.getDynamicObjectCollection("yem_linkmanentry");//公司抬头中的{联系人信息}
List<DynamicObject> manentryDefault = linkmanentry.stream().filter(x -> x.getBoolean("yem_isdefaultlinkman") == true).collect(Collectors.toList());//获取公司抬头{联系人信息}中的默认数据
if (manentryDefault.size() > 0) {
DynamicObject row = manentryDefault.get(0);//公司抬头中的{联系人信息}默认数据只有唯一一个
model.setValue("yem_companylinkman", row.getString("yem_contactperson"));//联系人(公司)--名称
model.setValue("yem_companytel", row.get("yem_phonenum"));//电话(公司)--联系电话
model.setValue("yem_companyemail", row.get("yem_addemail"));//E-Mail(公司)--电子邮箱
model.setValue("yem_companyvx", row.get("yem_suppliervx"));//微信(公司)--微信
model.setValue("yem_companyqq", row.get("yem_supplierqq"));//QQ(公司)--QQ
}
}
}
/**
* @param org 业务单元实体
* @return DynamicObject 返回的是公司抬头实体
* @Description: 查询单据
* @function 根据业务单元查询获取公司抬头
* @purposes
*/
public static DynamicObject queryCompany(DynamicObject org) {
String selectfields = DynamicObjectUtil.getSelectfields("yem_bd_companyinfo", false);//获取公司抬头表头字段标识
selectfields = DynamicObjectUtil.getEntrySelectfields(selectfields, "yem_bd_companyinfo", "yem_banksentry", false);//获取公司抬头{银行信息}分录所有字段标识
selectfields = DynamicObjectUtil.getEntrySelectfields(selectfields, "yem_bd_companyinfo", "yem_linkmanentry", false);//获取公司抬头{联系人信息}分录所有字段标识
DynamicObject companyinfo = BusinessDataServiceHelper.loadSingle("yem_bd_companyinfo", selectfields, new QFilter[]{new QFilter("yem_org", QCP.equals, org.getLong("id"))});//根据公司条件查询公司抬头
return companyinfo;
}
/**
* @param form 基类类名
* @Description: 加载动态表单的逻辑处理
* @function 将父页面的信息携带到动态表单上
* @purposes
*/
public static void init(AbstractFormPlugin form) {
IFormView view = form.getView();//获取动态表单的view视图
IDataModel model = view.getModel();//获取动态表单的模型model
IFormView parentView = view.getParentView();//获取父页面的view视图
IDataModel parentModel = parentView.getModel();//获取父页面的模型model
DataEntityPropertyCollection properties = model.getDataEntityType().getProperties();//获取动态表单上的所有字段控件
for (IDataEntityProperty property : properties) {
String propName = property.getName();//获取字段控件的标识
if (parentModel.getProperty(propName) != null) {//判断该字段标识在父页面中是否存在
Object propValue = parentModel.getValue(propName);//如果存在获取在父页面中的值
if (propValue instanceof DynamicObject) {//类型是实体
DynamicObject obj = (DynamicObject) propValue;//获取实体id
model.setValue(propName, obj.getPkValue());
} else {
model.setValue(propName, propValue);
}
}
}
}
/**
* @Description: 回填银行信息
* @function 公司银行信息点击确定之后回填公司银行信息
* @purposes 用途
*/
public static void setCompanyBankInfor(AbstractFormPlugin form, Object returnData) {
DynamicObject data = (DynamicObject) returnData;
IFormView view = form.getView();
IDataModel model = view.getModel();
if (data != null) {
DynamicObject bankaccount = data.getDynamicObject("yem_bankaccount");
String bank = bankaccount != null ? bankaccount.getString("name") : "";
model.setValue("yem_companybank", bank);//开户行
model.setValue("yem_companyacct", data.getString("yem_accountnumber"));//账号
}
}
/**
* @Description: 回填联系人信息
* @function 公司人员信息点击确定之后回填公司联系人信息
* @purposes 用途
*/
public static void setCompanyManInfor(AbstractFormPlugin form, Object returnData, DynamicObject isdefaultInfor) {
List<DynamicObject> data = (List<DynamicObject>) returnData;
IFormView view = form.getView();
IDataModel model = view.getModel();
if (data != null && data.size() > 0) {
DataEntityPropertyCollection properties = data.get(0).getDataEntityType().getProperties();//获取{联系人信息}单据体的所有字段
for (IDataEntityProperty property : properties) {//适用于实体字段给单据的表头字段赋值
String name = property.getName();//获取实体字段的标识
if (model.getProperty(name) != null) {
List<String> linkman = data.stream().map(x -> x.getString(name)).collect(Collectors.toList());
model.setValue(name, String.join(";", linkman));
}
}
List<DynamicObject> defaultManInfor = data.stream().filter(x -> x.getBoolean("yem_default") == true).collect(Collectors.toList());//获取公司联系人信息回填的默认信息
if (defaultManInfor.size() > 0) {
view.getPageCache().put("data", SerializationUtils.toJsonString(defaultManInfor.get(0)));//将默认信息放在缓存李在回传的时候可以使用
}
}
}
/**
* @Description: 切换客户客户信息值改变
* @function 切换客户之后客户信息根据赋值逻辑重新赋值
* @purposes 用途
*/
public static void setCustomerInfor(AbstractFormPlugin form) {
IFormView view = form.getView();
IDataModel model = view.getModel();
DynamicObject customer = (DynamicObject) model.getValue("yem_customer");
if (customer != null) {
customer = BusinessDataServiceHelper.loadSingleFromCache(customer.getLong("id"), customer.getDataEntityType().getName());
model.setValue("yem_customertin", customer.getString("societycreditcode"));//纳税人识别号(供应商)--纳税人识别号(供应商)
DynamicObjectCollection entry_bank = customer.getDynamicObjectCollection("entry_bank");//银行信息
List<DynamicObject> bankentryDefault = entry_bank.stream().filter(x -> x.getBoolean("isdefault_bank") == true).collect(Collectors.toList());
if (bankentryDefault.size() > 0) {
DynamicObject row = bankentryDefault.get(0);
String bank = row.getDynamicObject("bank") != null ? row.getDynamicObject("bank").getString("name") : "";
model.setValue("yem_customerbank", bank);//开户行(公司)--开户银行
model.setValue("yem_customeracct", row.get("bankaccount"));//账号(公司)--银行账户
}
DynamicObjectCollection linkmanentry = customer.getDynamicObjectCollection("entry_linkman");//联系人信息
List<DynamicObject> manentryDefault = linkmanentry.stream().filter(x -> x.getBoolean("isdefault_linkman") == true).collect(Collectors.toList());
if (manentryDefault.size() > 0) {
DynamicObject row = manentryDefault.get(0);
model.setValue("yem_customerlinkman", row.getString("contactperson"));//联系人(公司)--名称
model.setValue("yem_customertel", row.get("phone"));//电话(公司)--联系电话
model.setValue("yem_customeremail", row.get("email"));//E-Mail(公司)--电子邮箱
model.setValue("yem_customerfax", row.get("fax"));//传真(公司)--传真
DynamicObject associatedaddress = row.getDynamicObject("associatedaddress");//关联地址
if (associatedaddress != null) {
associatedaddress = BusinessDataServiceHelper.loadSingleFromCache(associatedaddress.getLong("id"), associatedaddress.getDataEntityType().getName());
model.setValue("yem_customervx", associatedaddress.get("yem_suppliervx"));//微信(公司)--微信
model.setValue("yem_customerqq", associatedaddress.get("yem_supplierqq"));//QQ(公司)--QQ
model.setValue("yem_customeraddr", associatedaddress.get("detailaddress"));//地址(客户)--详细地址
}
}
}
}
/**
* @Description: 客户银行信息点击确定返回值
* @function 客户银行信息点击确定之后添加客户中的信息赋值
* @purposes 用途
*/
public static void setCustBankInfor(AbstractBillPlugIn form, Object returnData) {
DynamicObject data = (DynamicObject) returnData;
IFormView view = form.getView();
IDataModel model = view.getModel();
if (data != null) {
DynamicObject bankaccount = data.getDynamicObject("yem_bankaccount");//获取客户银行信息中的开户行
String bank = bankaccount != null ? bankaccount.getString("name") : "";
model.setValue("yem_customerbank", bank);//开户行
model.setValue("yem_customeracct", data.getString("yem_accountnumber"));//账号
}
}
/**
* @Description: 客户人员信息点击确定返回值
* @function 客户人员信息点击确定之后添加客户中的信息赋值
* @purposes 用途
*/
public static void setCustManInfor(AbstractBillPlugIn form, Object returnData) {
DynamicObject data = (DynamicObject) returnData;
IFormView view = form.getView();
IDataModel model = view.getModel();
if (data != null) {
DataEntityPropertyCollection properties = data.getDataEntityType().getProperties();//获取返回信息的所有字段标识(只有表头字段没有单据体字段)
for (IDataEntityProperty property : properties) {
String name = property.getName();//获取字段标识
if (model.getProperty(name) != null) {
model.setValue(name, data.get(name));//进行赋值
}
}
}
}
/**
* @Description: 切换供应商重新赋值
* @function 切换供应商之后根据赋值逻辑重新赋值
* @purposes 用途
*/
public static void setSupplierInfor(AbstractFormPlugin form) {
IFormView view = form.getView();
IDataModel model = view.getModel();
DynamicObject supplier = (DynamicObject) model.getValue("yem_supplier");//获取供应商字段
if (supplier != null) {
supplier = BusinessDataServiceHelper.loadSingleFromCache(supplier.getLong("id"), supplier.getDataEntityType().getName());
model.setValue("yem_suppliertin", supplier.getString("societycreditcode"));//纳税人识别号(供应商)--纳税人识别号(供应商)
DynamicObjectCollection entry_bank = supplier.getDynamicObjectCollection("entry_bank");//供应商--{银行信息}
List<DynamicObject> bankentryDefault = entry_bank.stream().filter(x -> x.getBoolean("isdefault_bank") == true).collect(Collectors.toList());//获取供应商{银行信息}的默认数据
if (bankentryDefault.size() > 0) {
DynamicObject row = bankentryDefault.get(0);
String bank = row.getDynamicObject("bank") != null ? row.getDynamicObject("bank").getString("name") : "";//开户行
model.setValue("yem_supplierbank", bank);//开户行(公司)--开户银行
model.setValue("yem_supplieracct", row.get("bankaccount"));//账号(公司)--银行账户
}
DynamicObjectCollection linkmanentry = supplier.getDynamicObjectCollection("entry_linkman");//供应商--联系人信息
List<DynamicObject> manentryDefault = linkmanentry.stream().filter(x -> x.getBoolean("isdefault_linkman") == true).collect(Collectors.toList());//获取供应商{联系人信息}的默认数据
if (manentryDefault.size() > 0) {
DynamicObject row = manentryDefault.get(0);
model.setValue("yem_supplierlinkman", row.getString("contactperson"));//联系人(公司)--名称
model.setValue("yem_suppliertel", row.get("phone"));//电话(公司)--联系电话
model.setValue("yem_supplieremail", row.get("email"));//E-Mail(公司)--电子邮箱
model.setValue("yem_supplierfax", row.get("fax"));//传真(公司)--传真
DynamicObject associatedaddress = row.getDynamicObject("associatedaddress");//关联地址
if (associatedaddress != null) {
associatedaddress = BusinessDataServiceHelper.loadSingleFromCache(associatedaddress.getLong("id"), associatedaddress.getDataEntityType().getName());
model.setValue("yem_suppliervx", associatedaddress.get("yem_suppliervx"));//微信(公司)--微信
model.setValue("yem_supplierqq", associatedaddress.get("yem_supplierqq"));//QQ(公司)--QQ
model.setValue("yem_supplieraddr", associatedaddress.get("detailaddress"));//地址(客户)--详细地址
}
}
}
}
/**
* @Description: 供应商银行信息点击确定返回值
* @function 供应商银行信息点击确定之后添加客户中的信息赋值
* @purposes 用途
*/
public static void setSuppBankInfor(AbstractBillPlugIn form, Object returnData) {
DynamicObject data = (DynamicObject) returnData;
IFormView view = form.getView();
IDataModel model = view.getModel();
if (data != null) {
DynamicObject bankaccount = data.getDynamicObject("yem_bankaccount");
String bank = bankaccount != null ? bankaccount.getString("name") : "";
model.setValue("yem_supplierbank", bank);//开户行
model.setValue("yem_supplieracct", data.getString("yem_accountnumber"));//账号
}
}
/**
* @param form 基类类名
* @return void
* @Description: 将动态表单的信息返回给父页面
* @function
* @purposes 用途
*/
public static void btnOkParent(AbstractFormPlugin form) {
IFormView view = form.getView();//获取动态表单view视图
IDataModel model = view.getModel();//获取动态表单模型model
IFormView parentView = view.getParentView();//获取父页面view视图
IDataModel parentModel = parentView.getModel();//获取父页面莫得了模型
DataEntityPropertyCollection properties = model.getDataEntityType().getProperties();//获取动态表单所有字段控件
for (IDataEntityProperty property : properties) {
String propName = property.getName();//获取字段标识
if (parentModel.getProperty(propName) != null) {
Object propValue = model.getValue(propName);//子啊动态表单上获取字段的值
if (propValue instanceof DynamicObject) {//判断值类型是否是DynamicObject实体
DynamicObject obj = (DynamicObject) propValue;
parentModel.setValue(propName, obj.getPkValue());
} else {
parentModel.setValue(propName, propValue);
}
}
}
}
}