diff --git a/settings.gradle b/settings.gradle index 2ad02c4..5d3c85f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -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') diff --git a/yem-base/yem-base-common/src/main/java/yem/base/common/utils/OrgUtil.java b/yem-base/yem-base-common/src/main/java/yem/base/common/utils/OrgUtil.java new file mode 100644 index 0000000..89f7e71 --- /dev/null +++ b/yem-base/yem-base-common/src/main/java/yem/base/common/utils/OrgUtil.java @@ -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 getOrgPattern(){ + DynamicObjectCollection typeColl = QueryServiceHelper.query("bos_org_pattern", "id,number", + new QFilter[]{new QFilter("patterntype", "in", new String[]{"1", "2"})}); + List patternList = typeColl.stream().map(x -> x.getLong("id")).collect(Collectors.toList()); + return patternList; + } +} diff --git a/yem-cosmic-debug/build.gradle b/yem-cosmic-debug/build.gradle index 3c2d383..d51e4c1 100644 --- a/yem-cosmic-debug/build.gradle +++ b/yem-cosmic-debug/build.gradle @@ -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') + } \ No newline at end of file diff --git a/yem-wm/yem-wm-bd/build.gradle b/yem-wm/yem-wm-bd/build.gradle new file mode 100644 index 0000000..ddbc00e --- /dev/null +++ b/yem-wm/yem-wm-bd/build.gradle @@ -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') +} + + diff --git a/yem-wm/yem-wm-bd/build/tmp/compileJava/compileTransaction/stash-dir/FieldMapBillPlugin.class.uniqueId0 b/yem-wm/yem-wm-bd/build/tmp/compileJava/compileTransaction/stash-dir/FieldMapBillPlugin.class.uniqueId0 new file mode 100644 index 0000000..6839a4d Binary files /dev/null and b/yem-wm/yem-wm-bd/build/tmp/compileJava/compileTransaction/stash-dir/FieldMapBillPlugin.class.uniqueId0 differ diff --git a/yem-wm/yem-wm-bd/build/tmp/compileJava/previous-compilation-data.bin b/yem-wm/yem-wm-bd/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000..e728118 Binary files /dev/null and b/yem-wm/yem-wm-bd/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/yem-wm/yem-wm-bd/build/tmp/jar/MANIFEST.MF b/yem-wm/yem-wm-bd/build/tmp/jar/MANIFEST.MF new file mode 100644 index 0000000..a098bd8 --- /dev/null +++ b/yem-wm/yem-wm-bd/build/tmp/jar/MANIFEST.MF @@ -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 + diff --git a/yem-wm/yem-wm-bd/build/tmp/sourcesJar/MANIFEST.MF b/yem-wm/yem-wm-bd/build/tmp/sourcesJar/MANIFEST.MF new file mode 100644 index 0000000..59499bc --- /dev/null +++ b/yem-wm/yem-wm-bd/build/tmp/sourcesJar/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/addcompany/dynamic/AddCompanyDynamicPlugin.java b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/addcompany/dynamic/AddCompanyDynamicPlugin.java new file mode 100644 index 0000000..055b5ad --- /dev/null +++ b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/addcompany/dynamic/AddCompanyDynamicPlugin.java @@ -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(); + } +} diff --git a/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/addcustomer/dynamic/AddCustomerDynamicPlugin.java b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/addcustomer/dynamic/AddCustomerDynamicPlugin.java new file mode 100644 index 0000000..a3bf5ea --- /dev/null +++ b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/addcustomer/dynamic/AddCustomerDynamicPlugin.java @@ -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; + } + } +} diff --git a/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/addsupplier/dynamic/AddSupplierDynamicPlugin.java b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/addsupplier/dynamic/AddSupplierDynamicPlugin.java new file mode 100644 index 0000000..4f07e2f --- /dev/null +++ b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/addsupplier/dynamic/AddSupplierDynamicPlugin.java @@ -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; + } + } +} diff --git a/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/bulkbilltpl/form/BulkbilltplFiDBillPlugin.java b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/bulkbilltpl/form/BulkbilltplFiDBillPlugin.java new file mode 100644 index 0000000..18892eb --- /dev/null +++ b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/bulkbilltpl/form/BulkbilltplFiDBillPlugin.java @@ -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; + } + } +} diff --git a/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/companybankinfor/dynamic/CompanyBankInforDynamicPlugin.java b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/companybankinfor/dynamic/CompanyBankInforDynamicPlugin.java new file mode 100644 index 0000000..0a96798 --- /dev/null +++ b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/companybankinfor/dynamic/CompanyBankInforDynamicPlugin.java @@ -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"); + } +} diff --git a/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/companyinfo/operation/CompanyInfoSaveOpService.java b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/companyinfo/operation/CompanyInfoSaveOpService.java new file mode 100644 index 0000000..11cb351 --- /dev/null +++ b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/companyinfo/operation/CompanyInfoSaveOpService.java @@ -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 fieldKeys = e.getFieldKeys(); + fieldKeys.add("yem_isdefaultbank");//{银行信息}--【默认】 + fieldKeys.add("yem_isdefaultlinkman");//{联系人信息}--【默认】 + } + + @Override + public void onAddValidators(AddValidatorsEventArgs e) { + e.addValidator(new CompanyInfoSaveValidator()); + } +} diff --git a/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/companyinfo/validator/CompanyInfoSaveValidator.java b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/companyinfo/validator/CompanyInfoSaveValidator.java new file mode 100644 index 0000000..96b9bc2 --- /dev/null +++ b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/companyinfo/validator/CompanyInfoSaveValidator.java @@ -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 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 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, "联系人信息中需要有一个默认的联系人。"); + } + } +} diff --git a/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/companymaninfor/dynamic/CompanyManInforDynamicPlugin.java b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/companymaninfor/dynamic/CompanyManInforDynamicPlugin.java new file mode 100644 index 0000000..a00862d --- /dev/null +++ b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/companymaninfor/dynamic/CompanyManInforDynamicPlugin.java @@ -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 list = new ArrayList<>(); + for (int rowIndex : selectRows) { + DynamicObject entryRowEntity = this.getModel().getEntryRowEntity("yem_entryentity", rowIndex); + list.add(entryRowEntity); + } + + List 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"); + } +} diff --git a/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/createbasedata/form/FieldMapBillPlugin.java b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/createbasedata/form/FieldMapBillPlugin.java new file mode 100644 index 0000000..c584c1d --- /dev/null +++ b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/createbasedata/form/FieldMapBillPlugin.java @@ -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 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);//【源单字段】 + } +} diff --git a/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/createbasedata/operation/CreateContractAuditOpPlugin.java b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/createbasedata/operation/CreateContractAuditOpPlugin.java new file mode 100644 index 0000000..6e973ba --- /dev/null +++ b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/createbasedata/operation/CreateContractAuditOpPlugin.java @@ -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 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()); + } + } +} diff --git a/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/createbasedata/operation/CreateDealAuditOpPlugin.java b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/createbasedata/operation/CreateDealAuditOpPlugin.java new file mode 100644 index 0000000..f6d4153 --- /dev/null +++ b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/createbasedata/operation/CreateDealAuditOpPlugin.java @@ -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 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()); + } + } +} diff --git a/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/createbasedata/operation/CreateInsuranceAuditOpPlugin.java b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/createbasedata/operation/CreateInsuranceAuditOpPlugin.java new file mode 100644 index 0000000..d4e2132 --- /dev/null +++ b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/createbasedata/operation/CreateInsuranceAuditOpPlugin.java @@ -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 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()); + } + } +} diff --git a/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/createbasedata/operation/CreateInvoiceAuditOpPlugin.java b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/createbasedata/operation/CreateInvoiceAuditOpPlugin.java new file mode 100644 index 0000000..a7b8cdc --- /dev/null +++ b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/createbasedata/operation/CreateInvoiceAuditOpPlugin.java @@ -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 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()); + } + } +} diff --git a/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/createbasedata/operation/DeleteInsuranceOpPlugin.java b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/createbasedata/operation/DeleteInsuranceOpPlugin.java new file mode 100644 index 0000000..253bb34 --- /dev/null +++ b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/createbasedata/operation/DeleteInsuranceOpPlugin.java @@ -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 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[]{})); + } + } + } +} diff --git a/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/customerbankinfor/dynamic/CusBankDynamicPlugin.java b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/customerbankinfor/dynamic/CusBankDynamicPlugin.java new file mode 100644 index 0000000..c737f1e --- /dev/null +++ b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/customerbankinfor/dynamic/CusBankDynamicPlugin.java @@ -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"); + } +} diff --git a/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/customermaninfor/dynamic/CusManDynamicPlugin.java b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/customermaninfor/dynamic/CusManDynamicPlugin.java new file mode 100644 index 0000000..8139a3b --- /dev/null +++ b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/customermaninfor/dynamic/CusManDynamicPlugin.java @@ -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"); + } +} diff --git a/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/qrcode/form/QRCodeFormPlugin.java b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/qrcode/form/QRCodeFormPlugin.java new file mode 100644 index 0000000..8692780 --- /dev/null +++ b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/qrcode/form/QRCodeFormPlugin.java @@ -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() { + } +} diff --git a/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/supplierbankinfor/dynamic/SupBankDynamicPlugin.java b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/supplierbankinfor/dynamic/SupBankDynamicPlugin.java new file mode 100644 index 0000000..f264ab9 --- /dev/null +++ b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/supplierbankinfor/dynamic/SupBankDynamicPlugin.java @@ -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"); + } +} diff --git a/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/suppliermaninfor/dynamic/SupManDynamicPlugin.java b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/suppliermaninfor/dynamic/SupManDynamicPlugin.java new file mode 100644 index 0000000..1e393f1 --- /dev/null +++ b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/suppliermaninfor/dynamic/SupManDynamicPlugin.java @@ -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"); + } +} diff --git a/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/util/BothCardHelper.java b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/util/BothCardHelper.java new file mode 100644 index 0000000..bba7b43 --- /dev/null +++ b/yem-wm/yem-wm-bd/src/main/java/yem/wm/bd/util/BothCardHelper.java @@ -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 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 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 data = (List) 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 linkman = data.stream().map(x -> x.getString(name)).collect(Collectors.toList()); + model.setValue(name, String.join(";", linkman)); + } + } + + List 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 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 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 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 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); + } + } + } + } +}