diff --git a/settings.gradle b/settings.gradle index 2ad02c4..e47887c 100644 --- a/settings.gradle +++ b/settings.gradle @@ -19,6 +19,9 @@ include( ':yem-wm-es', ':yem-wm-is', ':yem-wm-ct', + ':yem-wmzh-csm', + + ':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') + +project(':yem-wmzh-csm').projectDir = new File('yem-wmzh/yem-wmzh-csm') + +// -------------- 引入wm云-bd应用模块 -------------- +project(':yem-wm-bd').projectDir = new File('yem-wm/yem-wm-bd') diff --git a/yem-cosmic-debug/build.gradle b/yem-cosmic-debug/build.gradle index 3c2d383..5bedc0a 100644 --- a/yem-cosmic-debug/build.gradle +++ b/yem-cosmic-debug/build.gradle @@ -26,5 +26,11 @@ dependencies { implementation project(':yem-wm-is') // 引入wm云 ct应用模块 implementation project(':yem-wm-ct') + // 引入wm云 bd应用模块 + implementation project(':yem-wmzh-csm') + + + // 引入wm云 bd应用模块 + implementation project(':yem-wm-bd') } \ No newline at end of file diff --git a/yem-wmzh/yem-wmzh-csm/build.gradle b/yem-wmzh/yem-wmzh-csm/build.gradle new file mode 100644 index 0000000..8eb8ec4 --- /dev/null +++ b/yem-wmzh/yem-wmzh-csm/build.gradle @@ -0,0 +1,14 @@ +/* + * 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 14:05:03 + */ + +dependencies { + api project(':yem-base-common') +// api project(':yem-base-helper') +} + + diff --git a/yem-wmzh/yem-wmzh-csm/build/tmp/compileJava/compileTransaction/stash-dir/CreatMerchantRepositorOpPlugin$1.class.uniqueId1 b/yem-wmzh/yem-wmzh-csm/build/tmp/compileJava/compileTransaction/stash-dir/CreatMerchantRepositorOpPlugin$1.class.uniqueId1 new file mode 100644 index 0000000..6831047 Binary files /dev/null and b/yem-wmzh/yem-wmzh-csm/build/tmp/compileJava/compileTransaction/stash-dir/CreatMerchantRepositorOpPlugin$1.class.uniqueId1 differ diff --git a/yem-wmzh/yem-wmzh-csm/build/tmp/compileJava/compileTransaction/stash-dir/CreatMerchantRepositorOpPlugin.class.uniqueId0 b/yem-wmzh/yem-wmzh-csm/build/tmp/compileJava/compileTransaction/stash-dir/CreatMerchantRepositorOpPlugin.class.uniqueId0 new file mode 100644 index 0000000..38cc83b Binary files /dev/null and b/yem-wmzh/yem-wmzh-csm/build/tmp/compileJava/compileTransaction/stash-dir/CreatMerchantRepositorOpPlugin.class.uniqueId0 differ diff --git a/yem-wmzh/yem-wmzh-csm/build/tmp/compileJava/previous-compilation-data.bin b/yem-wmzh/yem-wmzh-csm/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000..12ac0eb Binary files /dev/null and b/yem-wmzh/yem-wmzh-csm/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/yem-wmzh/yem-wmzh-csm/build/tmp/jar/MANIFEST.MF b/yem-wmzh/yem-wmzh-csm/build/tmp/jar/MANIFEST.MF new file mode 100644 index 0000000..562d142 --- /dev/null +++ b/yem-wmzh/yem-wmzh-csm/build/tmp/jar/MANIFEST.MF @@ -0,0 +1,16 @@ +Manifest-Version: 1.0 +Jar-Id: +Project-Name: yem-wmzh-csm +Build-Tool: Gradle 7.6.3 +Build-Date: 2025-02-15 16:08:12 +Built-By: Kingdee Cosmic Developer Tools +Build-Num: 20250215160812478 +App-Name: +Git-Branch: yem_rabbit_lhb +Cloud-Name: +Group-Name: yem.cosmic +Bundle-Version: 1.0.0 +Git-Commit-Hash: 678508f62693a02be59f8ff86bf43f2731423ab1 +Build-Image: +Build-Jdk: 1.8.0_201 + diff --git a/yem-wmzh/yem-wmzh-csm/build/tmp/sourcesJar/MANIFEST.MF b/yem-wmzh/yem-wmzh-csm/build/tmp/sourcesJar/MANIFEST.MF new file mode 100644 index 0000000..59499bc --- /dev/null +++ b/yem-wmzh/yem-wmzh-csm/build/tmp/sourcesJar/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/yem-wmzh/yem-wmzh-csm/src/main/java/yem/wmzh/csm/customeraccess/dynamic/CusdressFormPlugin.java b/yem-wmzh/yem-wmzh-csm/src/main/java/yem/wmzh/csm/customeraccess/dynamic/CusdressFormPlugin.java new file mode 100644 index 0000000..55fcc8f --- /dev/null +++ b/yem-wmzh/yem-wmzh-csm/src/main/java/yem/wmzh/csm/customeraccess/dynamic/CusdressFormPlugin.java @@ -0,0 +1,170 @@ +package yem.wmzh.csm.customeraccess.dynamic; + +import com.alibaba.nacos.common.utils.StringUtils; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.ILocaleString; +import kd.bos.entity.datamodel.IDataModel; +import kd.bos.entity.datamodel.events.PropertyChangedArgs; +import kd.bos.form.FormShowParameter; +import kd.bos.form.IFormView; +import kd.bos.form.control.Control; +import kd.bos.form.plugin.AbstractFormPlugin; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import yem.base.common.utils.YEM; + +import java.util.EventObject; +import java.util.HashMap; +import java.util.Map; + +/** + * @Description 客商地址动态表单插件 + * @Author: LiuHB + * @CreateTime: 2025-02-10 10:53 + */ +public class CusdressFormPlugin extends AbstractFormPlugin { + + /** + * @Description: 在此事件,可以侦听各个控件的插件事件 + * @function 1.侦听确认和取消按钮 + * @purposes 用户与界面上的控件进行交互时,触发此事件。 + */ + @Override + public void registerListener(EventObject e) { + super.registerListener(e); + this.addClickListeners("btnok", "btncancel"); // 侦听确认和取消按钮 + } + + /** + * @Description: 界面初始化 + * @function 加载客商准入单数据到动态表单 + * @purposes 对已创建好的模型数据包进一步加工 + */ + @Override + public void afterCreateNewData(EventObject e) { + super.afterCreateNewData(e); + init(); + } + + @Override + public void propertyChanged(PropertyChangedArgs e) { + super.propertyChanged(e); + IFormView view = this.getView(); + IDataModel model = this.getModel(); + String name = e.getProperty().getName(); + switch (name) { + case "yem_addressnumber": + DynamicObject bd_address = BusinessDataServiceHelper.loadSingle("bd_address", new QFilter[]{new QFilter("number", QCP.equals, (String) model.getValue("yem_addressnumber"))}); + if(null!= bd_address){ + model.setValue("yem_addressnumber",null); + view.showErrorNotification("编码重复请重新填写"); + } + } + + } + + /** + * @Description: 插件可以在此相应点击事件,如弹出单独的编辑界面。 + * @function 回填客商地址基础资料数据到分录 + * @purposes 点击文本字段的按钮时,触发此事件 + */ + @Override + public void click(EventObject evt) { + super.click(evt); + // 获取被点击的控件对象 + Control source = (Control) evt.getSource(); + String key = source.getKey(); + if (StringUtils.equals("btnok", key)) { + //回传地址信息 + setaddressinformation(); + this.getView().close(); + return; + } else { + this.getView().close(); + return; + } + } + + /** + * @Description: 初始化动态表单数据 + * @purposes 加载客商准入单数据到动态表单 + */ + + private void init() { + FormShowParameter showParameter = this.getView().getFormShowParameter(); + IDataModel model = this.getModel(); + Map maps = showParameter.getCustomParams(); + Map parenrow = (Map) maps.get("row");//父页面选中行 + model.setValue("yem_addressnumber",parenrow.get("yem_addressnumber")); + model.setValue("yem_addressname",parenrow.get("yem_addressname")); + Map yemTradeterms = (Map)parenrow.get("yem_tradeterms"); + Long yemTradetermsid = null != yemTradeterms ? (Long)yemTradeterms.get("id") : 0L; + model.setValue("yem_tradeterms",yemTradetermsid); + model.setValue("yem_clearanceco",parenrow.get("yem_clearanceco")); + model.setValue("yem_forwarderco",parenrow.get("yem_forwarderco")); + model.setValue("yem_addressphone",parenrow.get("yem_addressphone")); + model.setValue("yem_zipcode",parenrow.get("yem_zipcode")); + model.setValue("yem_linkman",parenrow.get("yem_linkman")); + Map yemTimezone = ( Map)parenrow.get("yem_timezone"); + long yemTimezoneid = null != yemTimezone ? (Long) yemTimezone.get("id") : 0L; + model.setValue("yem_timezone",yemTimezoneid); + model.setValue("yem_addressenable",parenrow.get("yem_addressenable")); + model.setValue("yem_addressdefault",parenrow.get("yem_addressdefault")); + String admindivision = (String) parenrow.get("yem_admindivision"); + Long yemadmindivisionid = 0L; + if(!YEM.isEmpty(admindivision)){ + yemadmindivisionid = Long.valueOf(admindivision); + } + model.setValue("yem_admindivision",yemadmindivisionid); + model.setValue("yem_detailaddress",parenrow.get("yem_detailaddress")); + Map yemCustomeraddrsspur = (Map)parenrow.get("yem_customeraddrsspur"); + Long yemCustomeraddrsspurid = null != yemCustomeraddrsspur ? (Long)yemCustomeraddrsspur.get("id") : 0L; + model.setValue("yem_customeraddrsspur",yemCustomeraddrsspurid); + } + + /** + * @Description: 回传地址信息到客商准入单 + */ + private void setaddressinformation() { + IDataModel model = this.getModel(); + FormShowParameter showParameter = this.getView().getFormShowParameter(); + Map maps = showParameter.getCustomParams(); + Map parenrow = (Map) maps.get("row");//父页面选中行 + int parenseq = (int) parenrow.get("seq");//父页面选中行号 + int indexof = parenseq - 1; + Map hashMap = new HashMap<>(); + String yemAddressnumber = (String) model.getValue("yem_addressnumber");//编码 + ILocaleString yemAddressname = (ILocaleString) model.getValue("yem_addressname");//名称 + DynamicObject yemTradeterms = (DynamicObject) model.getValue("yem_tradeterms");//贸易术语 + String yemClearanceco = (String) model.getValue("yem_clearanceco");//清关公司 + String yemForwarderco = (String) model.getValue("yem_forwarderco");//货代公司 + ILocaleString yemAddressphone = (ILocaleString) model.getValue("yem_addressphone");//联系电话 + String yemZipcode = (String) model.getValue("yem_zipcode");//邮政编码 + String yemLinkman = (String) model.getValue("yem_linkman");//传真 + DynamicObject yemTimezone = (DynamicObject) model.getValue("yem_timezone");//时区 + String yemAddressenable = (String) model.getValue("yem_addressenable");//使用状态 + Boolean yemAddressdefault = (Boolean) model.getValue("yem_addressdefault");//默认 + String yemAdmindivision = (String) model.getValue("yem_admindivision");//行政区划 + ILocaleString yemDetailaddress = (ILocaleString) model.getValue("yem_detailaddress");//详细地址 + DynamicObject yemCustomeraddrsspur = (DynamicObject) model.getValue("yem_customeraddrsspur");//客户地址用途 + hashMap.put("yem_associatedaddress", yemAddressname); + hashMap.put("yem_addressnumber", yemAddressnumber); + hashMap.put("yem_addressname", yemAddressname); + hashMap.put("yem_tradeterms", yemTradeterms); + hashMap.put("yem_clearanceco", yemClearanceco); + hashMap.put("yem_forwarderco", yemForwarderco); + hashMap.put("yem_addressphone", yemAddressphone); + hashMap.put("yem_zipcode", yemZipcode); + hashMap.put("yem_linkman", yemLinkman); + hashMap.put("yem_timezone", yemTimezone); + hashMap.put("yem_addressenable", yemAddressenable); + hashMap.put("yem_addressdefault", yemAddressdefault); + hashMap.put("yem_admindivision", yemAdmindivision); + hashMap.put("yem_detailaddress", yemDetailaddress); + hashMap.put("yem_customeraddrsspur", yemCustomeraddrsspur); + hashMap.put("indexof", indexof); + this.getView().returnDataToParent(hashMap); + } +} + diff --git a/yem-wmzh/yem-wmzh-csm/src/main/java/yem/wmzh/csm/customeraccess/from/CustomeraccessBillPlugin.java b/yem-wmzh/yem-wmzh-csm/src/main/java/yem/wmzh/csm/customeraccess/from/CustomeraccessBillPlugin.java new file mode 100644 index 0000000..a2eff81 --- /dev/null +++ b/yem-wmzh/yem-wmzh-csm/src/main/java/yem/wmzh/csm/customeraccess/from/CustomeraccessBillPlugin.java @@ -0,0 +1,296 @@ +package yem.wmzh.csm.customeraccess.from; + +import com.alibaba.druid.util.StringUtils; +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.entity.ILocaleString; +import kd.bos.entity.datamodel.IDataModel; +import kd.bos.entity.datamodel.events.ChangeData; +import kd.bos.entity.datamodel.events.PropertyChangedArgs; +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.EntryGrid; +import kd.bos.form.events.ClosedCallBackEvent; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.user.UserServiceHelper; +import yem.base.common.utils.YEM; + +import java.util.*; + +/** + * @Description 客商准入单表单插件 + * @Author: LiuHB + * @CreateTime: 2025-02-07 14:40 + */ +public class CustomeraccessBillPlugin extends AbstractBillPlugIn { + + /** + * @Description: 在此事件,可以侦听各个控件的插件事件 + * @function 1.侦听【客商地址】字段点击 + * @purposes 用户与界面上的控件进行交互时,触发此事件。 + */ + + @Override + public void registerListener(EventObject e) { + super.registerListener(e); + this.addClickListeners("yem_associatedaddress"); //监听【客商地址】 + } + + /** + * @Description: 界面初始化 + * @function 根据当前人员携带所在部门 + * @purposes 对已创建好的模型数据包进一步加工 + */ + @Override + public void afterCreateNewData(EventObject e) { + super.afterCreateNewData(e); + IDataModel model = this.getModel(); + IFormView view = this.getView(); + //获取当前登录人所在部门 + Long dptid = getdepartmentid(); + model.setValue("yem_department", dptid); + + } + + /** + * @Description: 根据当前登陆人获取所在部门 + * @function 获取当前登录人部门id + * @purposes 客商准入单初始化【部门】赋值 + */ + + private Long getdepartmentid() { + // 获取当前登录人id + long userId = UserServiceHelper.getCurrentUserId(); + //查询人员 + DynamicObject user = BusinessDataServiceHelper.loadSingle("bos_user", new QFilter[]{new QFilter("id", QCP.equals, userId)}); + DynamicObjectCollection entryentity = user.getDynamicObjectCollection("entryentity"); + Long dptid = 0L; + if (entryentity.size() > 0) { + for (DynamicObject userow : entryentity) { + DynamicObject dpt = (DynamicObject) userow.get("dpt"); + dptid = null != dpt ? dpt.getLong("id") : null; + break; + } + } + return dptid; + } + + /** + * @description: 值改变事件 + * @function 1.内部业务单元校验 + * 2.去除客商名称中的空格,如果都是中文字符去除所有空格,包含其他字符则去除前后空格 + * 3.去除客商英文名称前后空格 + * @purposes 通知插件字段发生了改变,可以同步调整其他字段值 + */ + @Override + public void propertyChanged(PropertyChangedArgs e) { + super.propertyChanged(e); + String key = e.getProperty().getName(); + ChangeData changeData = e.getChangeSet()[0]; + int index = changeData.getRowIndex(); + IDataModel model = this.getModel(); + IFormView view = this.getView(); + switch (key) { + case "yem_internal": + case "yem_merchantstname": + ILocaleString yemMerchantstnamed = (ILocaleString) this.getModel().getValue("yem_merchantstname"); + String yemMerchantstnames = yemMerchantstnamed.getLocaleValue(); + Boolean yemInternal = (Boolean) model.getValue("yem_internal");//内部业务单元 + //去除客商名称中的空格 + String merchantstnames = nameprocessing(yemMerchantstnames); + //校验必须有与客商名称匹配的组织 + matchOrganizations(yemInternal, merchantstnames); + break; + case "yem_merchantstnames_en": + String yemMerchantstnamesEns = (String) this.getModel().getValue("yem_merchantstnames_en"); + String trimmedString = yemMerchantstnamesEns.trim(); + this.getModel().setValue("yem_merchantstnames_en", trimmedString); + break; + + } + } + + /** + * @Description: 插件可以在此相应点击事件,如弹出单独的编辑界面。 + * @function 1.弹出{客商地址}动态表单,回填联系人分录 + * @purposes 点击文本字段的按钮时,触发此事件 + */ + + @Override + public void click(EventObject evt) { + super.click(evt); + addresspasswd("yem_wmzh_cusadress", "yem_associatedaddress"); + } + + + /** + * @Description: 弹出{客商地址}动态表单 + */ + private void addresspasswd(String dynamicform, String button) { + FormShowParameter showParameter = new FormShowParameter(); + showParameter.setStatus(OperationStatus.ADDNEW); + showParameter.getOpenStyle().setShowType(ShowType.Modal); + Map map = this.showInfoForm(); + showParameter.setCustomParams(map); + showParameter.setCloseCallBack(new CloseCallBack(this, button)); + showParameter.setFormId(dynamicform); + this.getView().showForm(showParameter); + } + + /** + * @Description: 构建向动态表单传递的数据集 + */ + + private Map showInfoForm() { + Map map = new HashMap<>(); + DynamicObjectCollection yem_contactinfo_e = this.getModel().getEntryEntity("yem_linkmaninfo_e"); + EntryGrid contactinfo = this.getControl("yem_linkmaninfo_e"); + int[] selectRows = contactinfo.getSelectRows(); + if (selectRows != null) { + for (int selectRow : selectRows) { + DynamicObject yem_contactinfo = yem_contactinfo_e.get(selectRow); // 获取选中行的单据体数据 + map.put("row", yem_contactinfo); + } + } + return map; + } + + /** + * @Description: 动态表单关闭回调事件 + */ + + @Override + public void closedCallBack(ClosedCallBackEvent closedCallBackEvent) { + // super.closedCallBack(closedCallBackEvent); + Object returnData = closedCallBackEvent.getReturnData(); + // 判断标识是否匹配,并验证动态表单返回数据不为空,不验证返回值可能会报空指针 + if (StringUtils.equals(closedCallBackEvent.getActionId(), "yem_associatedaddress") + && null != closedCallBackEvent.getReturnData()) { + // 这里返回对象为Object,可强转成相应的其他类型, + HashMap values = (HashMap) returnData; + this.setInwardInfo(values); + } + } + + /** + * @Description: 分录赋值 + * @purposes 将动态表单数据回填到对应行上 + */ + + private void setInwardInfo(Map values) { + IDataModel model = this.getModel(); + int indexof = (int) values.get("indexof"); + model.setValue("yem_associatedaddress", values.get("yem_addressname"), indexof); + model.setValue("yem_addressnumber", values.get("yem_addressnumber"), indexof); + model.setValue("yem_addressname", values.get("yem_addressname"), indexof); + model.setValue("yem_tradeterms", values.get("yem_tradeterms"), indexof); + model.setValue("yem_clearanceco", values.get("yem_clearanceco"), indexof); + model.setValue("yem_forwarderco", values.get("yem_forwarderco"), indexof); + model.setValue("yem_addressphone", values.get("yem_addressphone"), indexof); + model.setValue("yem_zipcode", values.get("yem_zipcode"), indexof); + model.setValue("yem_linkman", values.get("yem_linkman"), indexof); + model.setValue("yem_timezone", values.get("yem_timezone"), indexof); + model.setValue("yem_addressenable", values.get("yem_addressenable"), indexof); + model.setValue("yem_addressdefault", values.get("yem_addressdefault"), indexof); + model.setValue("yem_admindivision", values.get("yem_admindivision"), indexof); + model.setValue("yem_detailaddress", values.get("yem_detailaddress"), indexof); + model.setValue("yem_customeraddrsspur", values.get("yem_customeraddrsspur"), indexof); + } + + /** + * @Description: 去除客商名称中的空格 + * @function 去除客商名称中的空格, 如果都是中文字符去除所有空格,包含其他字符则去除前后空格 + */ + private String nameprocessing(String yemMerchantstnames) { + String merchantstnames = ""; + // 检查是否包含中文字符 + boolean containsChinese = yemMerchantstnames.codePoints() + .anyMatch(codePoint -> (codePoint >= 0x4e00 && codePoint <= 0x9fa5) || // 基本汉字 + (codePoint >= 0x3400 && codePoint <= 0x4dbf) || // 扩展A + (codePoint >= 0xf900 && codePoint <= 0xfaff) || // 兼容汉字 + (codePoint >= 0x20000 && codePoint <= 0x2a6df) || // 扩展B + (codePoint >= 0x2a700 && codePoint <= 0x2b73f) || // 扩展C + (codePoint >= 0x2b740 && codePoint <= 0x2b81f) || // 扩展D + (codePoint >= 0x2b820 && codePoint <= 0x2ceaf)); // 扩展E + // 检查是否包含空格 + boolean containsSpace = yemMerchantstnames.contains(" "); + // 判断是否同时包含中文字符和空格 + boolean isAllChinese = containsChinese && containsSpace; + if (isAllChinese) { + //字符串全部由中文字符组成 + //去除客商名称空格 + merchantstnames = removeSpacesFromString(yemMerchantstnames); + this.getModel().setValue("yem_merchantstname", merchantstnames); + } else { + //字符串包含非中文字符 + merchantstnames = yemMerchantstnames.trim(); + this.getModel().setValue("yem_merchantstname", merchantstnames); + } + return merchantstnames; + } + + + /** + * @Description: 去除客商名称空格 + * @function 删除空格 + * @purposes 避免客户输入失误 + */ + private String removeSpacesFromString(String yemMerchantstnames) { + if (yemMerchantstnames == null) { + return null; + } + // 去除字符串中的所有空格并返回结果 + return yemMerchantstnames.replace(" ", ""); + } + + /** + * @Description: 内部业务单元校验 + * @function 1.校验必须有与客商名称匹配的组织 + * 2.校验内部业务单元客商和准入组织名称是否相同 + * @purposes 确保该客商在系统的行政组织中 + */ + private void matchOrganizations(Boolean yemInternal, String yemMerchantstnames) { + IDataModel model = this.getModel(); + // 如果 内部业务单元 为 false 或 客商中文名称 为空,直接返回 + if (!yemInternal || YEM.isEmpty(yemMerchantstnames)) { + return; + } + //获取当前单据准入组织 + DynamicObject org = (DynamicObject)model.getValue("org"); + String name = null != org ? org.getString("name") : ""; + // 加载行政组织信息 + List adminOrgNames = loadAdminOrgNames(); + // 1.检查 客商名称 是否在行政组织列表中 + //2.检查客商名称 是否和准入组织相同 + if (!adminOrgNames.contains(yemMerchantstnames)) { + model.setValue("yem_merchantstname",""); + this.getView().showErrorNotification("未找到与之匹配的组织,请重新检查相关信息。"); + }if(!name.equals(yemMerchantstnames)){ + model.setValue("yem_merchantstname",""); + this.getView().showErrorNotification("该内部业务单元客商:"+yemMerchantstnames+"与准入组织不符,请检查!"); + } + } + + /** + * @Description: 获取所有组织名称 + * @function 查询行政组织 + * @purposes 辅助方法:加载行政组织名称列表 + */ + private List loadAdminOrgNames() { + String adminOrgFields = "number,name"; // 查询字段:编码和名称 + DynamicObject[] adminOrgs = BusinessDataServiceHelper.load("bos_adminorg", adminOrgFields, null); + + List adminOrgNames = new ArrayList<>(); + for (DynamicObject adminOrg : adminOrgs) { + String name = adminOrg.getLocaleString("name").getLocaleValue(); + adminOrgNames.add(name); + } + return adminOrgNames; + } +} diff --git a/yem-wmzh/yem-wmzh-csm/src/main/java/yem/wmzh/csm/customeraccess/opplugin/op/CreatMerchantRepositorOpPlugin.java b/yem-wmzh/yem-wmzh-csm/src/main/java/yem/wmzh/csm/customeraccess/opplugin/op/CreatMerchantRepositorOpPlugin.java new file mode 100644 index 0000000..1b7c11e --- /dev/null +++ b/yem-wmzh/yem-wmzh-csm/src/main/java/yem/wmzh/csm/customeraccess/opplugin/op/CreatMerchantRepositorOpPlugin.java @@ -0,0 +1,992 @@ +package yem.wmzh.csm.customeraccess.opplugin.op; + +import kd.bos.dataentity.OperateOption; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.dataentity.entity.ILocaleString; +import kd.bos.dataentity.metadata.IDataEntityProperty; +import kd.bos.dataentity.metadata.clr.DataEntityPropertyCollection; +import kd.bos.dataentity.metadata.dynamicobject.DynamicObjectType; +import kd.bos.entity.ExtendedDataEntity; +import kd.bos.entity.operate.result.OperationResult; +import kd.bos.entity.plugin.AbstractOperationServicePlugIn; +import kd.bos.entity.plugin.AddValidatorsEventArgs; +import kd.bos.entity.plugin.args.BeforeOperationArgs; +import kd.bos.entity.validate.AbstractValidator; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.operation.DeleteServiceHelper; +import kd.bos.servicehelper.operation.OperationServiceHelper; +import kd.bos.servicehelper.operation.SaveServiceHelper; +import kd.bos.servicehelper.user.UserServiceHelper; +import yem.base.common.utils.DynamicObjectUtil; +import yem.base.common.utils.YEM; + +import java.sql.Array; +import java.util.*; + +/** + * @Description 客商准入单操作:生成客户供应商仓库 + * @Author: LiuHB + * @CreateTime: 2025-02-14 09:33 + */ +public class CreatMerchantRepositorOpPlugin extends AbstractOperationServicePlugIn { + + @Override + public void onAddValidators(AddValidatorsEventArgs e) { + super.onAddValidators(e); + e.addValidator(new AbstractValidator() { + @Override + public void validate() { + String operateKey = this.getOperateKey(); + ExtendedDataEntity[] dataEntities = this.getDataEntities(); + for (ExtendedDataEntity extendedDataEntity : dataEntities) { + DynamicObject merchantApply = extendedDataEntity.getDataEntity(); + String merchantstname = merchantApply.getLocaleString("yem_merchantstname").getLocaleValue(); + //客商准入单id + Long merchantApplyid = (Long) merchantApply.get("id"); + //客户基础资料 + DynamicObject customer = BusinessDataServiceHelper.loadSingle("bd_customer", new QFilter[]{new QFilter("yem_customeraccessid", QCP.equals, merchantApplyid)}); + //供应商基础资料 + DynamicObject supplier = BusinessDataServiceHelper.loadSingle("bd_supplier", new QFilter[]{new QFilter("yem_customeraccessid", QCP.equals, merchantApplyid)}); + //客户分类 + DynamicObject yemClassifycustomer = merchantApply.getDynamicObject("yem_classifycustomer"); + //供应商分类 + DynamicObject yemClassifysupplier = merchantApply.getDynamicObject("yem_classifysupplier"); + switch (operateKey) { + case "merchantrepository": + if((null==yemClassifycustomer&&null==yemClassifysupplier)&&(null!=customer&&null!=supplier)) { + this.addWarningMessage(extendedDataEntity,"由于供应商分类和客户分类为空,该操作会删除"+merchantstname+"生成的客户和供应商,请确认是否删除。"); + }else if(null==yemClassifycustomer && null!= customer){ + this.addWarningMessage(extendedDataEntity,"由于客户分类为空,该操作会删除"+merchantstname+"生成的客户,请确认是否删除。"); + }else if(null==yemClassifysupplier && null!=supplier){ + this.addWarningMessage(extendedDataEntity,"由于供应商分类为空,该操作会删除"+merchantstname+"生成的供应商,请确认是否删除。"); + } + break; + } + } + } + }); + } + + /** + * @Description: 对操作结果进行整理,或者执行其他无需事务保护的逻辑。 + * @function 客户、供应商、仓库的 生成更新逻辑 + * @purposes 操作执行完毕,事务提交之后触发 + */ + + @Override + public void beforeExecuteOperationTransaction(BeforeOperationArgs e) { + super.beforeExecuteOperationTransaction(e); + processCustomerAccessEntities(e,e.getDataEntities()); + } + + /** + * @Description: 客户、供应商、仓库的 生成更新主方法 + * @param Customeraccess 客商准入选中数据集 + * @return void + */ + + private void processCustomerAccessEntities(BeforeOperationArgs e,DynamicObject[] Customeraccess) { + for (DynamicObject merchantApply : Customeraccess) { + //客商准入单id + Long merchantApplyid = (Long) merchantApply.get("id"); + //客户基础资料 + DynamicObject customer = BusinessDataServiceHelper.loadSingle("bd_customer", new QFilter[]{new QFilter("yem_customeraccessid", QCP.equals, merchantApplyid)}); + //供应商基础资料 + DynamicObject supplier = BusinessDataServiceHelper.loadSingle("bd_supplier", new QFilter[]{new QFilter("yem_customeraccessid", QCP.equals, merchantApplyid)}); + //仓库基础资料 + String selectfields = DynamicObjectUtil.getSelectfields("bd_warehouse", false); + DynamicObject[] warehouse = BusinessDataServiceHelper.load("bd_warehouse",selectfields,new QFilter[]{new QFilter("yem_customeraccessid", QCP.equals, merchantApplyid)}); + //当前登陆人id + long userId = UserServiceHelper.getCurrentUserId(); + //客户状态(正常) + DynamicObject customerstatus = BusinessDataServiceHelper.loadSingle("bd_customerstatus", new QFilter[]{new QFilter("number", QCP.equals, "ZSKH")});//查询客户状态 + //供应商状态(正常) + DynamicObject supplierstatus = BusinessDataServiceHelper.loadSingle("bd_supplierstatus", new QFilter[]{new QFilter("number", QCP.equals, "ZCGYS")});//查询客户状态 + //联系人分录 + DynamicObjectCollection linkmaninfo = merchantApply.getDynamicObjectCollection("yem_linkmaninfo_e"); + //银行信息分录 + DynamicObjectCollection bankinfo = merchantApply.getDynamicObjectCollection("yem_bankinfo_e"); + //仓库信息分录 + DynamicObjectCollection warehouseinfo = merchantApply.getDynamicObjectCollection("yem_warehouseinfo_e"); + //联系人分录默认行信息 + Map linkmanMap = getDefaultLinkManentry(linkmaninfo); + //联系人分录信息(以id为主键) + Map> linkmanentryMap = getLinkManentry(linkmaninfo, false); + //获取银行信息默认行币别 + DynamicObject bankCurrency = getBankCurrency(bankinfo); + //银行分录信息(以id为主键) + Map> bankentryMap = getLinkManentry(bankinfo, false);//银行分录信息(以行id为主键) + //客户分类 + DynamicObject yemClassifycustomer = merchantApply.getDynamicObject("yem_classifycustomer"); + //供应商分类 + DynamicObject yemClassifysupplier = merchantApply.getDynamicObject("yem_classifysupplier"); + //删除地址基础资料和客户,供应商的关联信息 + delRelatedInfo(merchantApply,yemClassifycustomer,yemClassifysupplier,customer,supplier); + //生成/更新客户 + if(null!=yemClassifycustomer){ + creatOrUpdateCustomer(customer, merchantApply,customerstatus, userId, linkmanMap, linkmanentryMap, bankCurrency, bankentryMap); + } else if(null!=customer){ + //客户分类为空删除已生成的客户 + OperationServiceHelper.executeOperate("delete", "bd_customer", new DynamicObject[]{customer}, OperateOption.create()); + } + //生成/更新供应商 + if(null!=yemClassifysupplier){ + creatOrUpdateSupplier(supplier, merchantApply,supplierstatus,userId,linkmanMap,linkmanentryMap,bankCurrency,bankentryMap); + } else if(null!=supplier){ + //供应商分类为空删除已生成的客户 + OperationServiceHelper.executeOperate("delete", "bd_supplier", new DynamicObject[]{supplier}, OperateOption.create()); + } + //生成/更新仓库 + creatOrUpdateWarehouse(warehouse, merchantApply,warehouseinfo); + } + } +/** + * @Description: 生成/更新仓库 + * @param merchantApply 客商准入单 + * @param warehouse 客商准入对应的仓库集合 + * @param warehouseinfo 客商准入仓库信息分录 + * @return void + */ + + private void creatOrUpdateWarehouse(DynamicObject[] warehouse, DynamicObject merchantApply, DynamicObjectCollection warehouseinfo) { + + if(null!=warehouse){ + //更新 + updateWarehouse(merchantApply,warehouse,warehouseinfo); + + }else { + //新增 + creatwarehouse( merchantApply, warehouseinfo); + + } + + } + + +/** + * @Description: 更新仓库 + * @function 1.删除客商准入单不存在但是在仓库基础资料中存在的仓库 + * 2.判断客户的【仓库主数据】是否为空 + * 为空新增仓库 + * 不为空获取仓库实体更新数据 + * @param merchantApply 客商准入单 + * @param warehouse 客商准入对应的仓库集合 + * @param warehouseinfo 客商准入仓库信息分录 + * @return void + */ + + private void updateWarehouse(DynamicObject merchantApply,DynamicObject[] warehouse, DynamicObjectCollection warehouseinfo) { + deleteWarehouse(warehouse,warehouseinfo); + List warehouseentry = new ArrayList<>(); + for (DynamicObject warehouserowid : warehouseinfo) { + DynamicObject yemWarehouse = warehouserowid.getDynamicObject("yem_warehouse"); + if (null != yemWarehouse) { + yemWarehouse.set("name", warehouserowid.get("yem_warehousename")); + yemWarehouse.set("group", warehouserowid.get("yem_warehousegroup")); + if (!YEM.isEmpty(warehouserowid.get("yem_citycounty"))) { + yemWarehouse.set("address", warehouserowid.get("yem_citycounty")); + } else { + yemWarehouse.set("address", null); + } + yemWarehouse.set("detailaddress", warehouserowid.get("yem_address")); + yemWarehouse.set("principal", warehouserowid.get("yem_contact")); + yemWarehouse.set("telephone", warehouserowid.get("yem_warehousetel")); + warehouseentry.add(yemWarehouse); + }else { + //新增仓库 + creatwarehouse(merchantApply,warehouseinfo); + } + + } + SaveServiceHelper.save(new DynamicObject[]{merchantApply}); + SaveServiceHelper.save(warehouseentry.toArray(new DynamicObject[0])); + } + + /** + * @Description: 删除仓库 + * @function 功能 + * @purposes 用途 + * @param warehouse 客商准入生成仓库集合 + * @param warehouseinfo 客商准入仓库分录 + * @return void + */ + private void deleteWarehouse(DynamicObject[] warehouse, DynamicObjectCollection warehouseinfo) { + Map warehouseMap = new HashMap<>();//仓库id集合 + List merchantWarehouserowid = new ArrayList();//客商准入仓库id集合 + for (DynamicObject depot : warehouse) { + warehouseMap.put((Long)depot.get("id"),depot); + } + for (DynamicObject warehouserowid : warehouseinfo) { + DynamicObject yemWarehouse = warehouserowid.getDynamicObject("yem_warehouse"); + long id = null != yemWarehouse ? yemWarehouse.getLong("id") : 0L; + merchantWarehouserowid.add(id); + } + //warehouselist存在 bdaddressnumberList 不存在的值 + List result = new ArrayList<>();// + for (Long number : warehouseMap.keySet()) { + if (!merchantWarehouserowid.contains(number)) { // 检查是否不存在 + result.add(warehouseMap.get(number)); + } + } + OperationServiceHelper.executeOperate("delete", "bd_warehouse", result.toArray(new DynamicObject[0]), OperateOption.create()); + } + + + /** + * @Description: 新建仓库 + * @param merchantApply 客商准入单 + * @param warehouseinfo 客商准入联系人分类 + * @return void + */ + private void creatwarehouse(DynamicObject merchantApply, DynamicObjectCollection warehouseinfo) { + List warehouseentry = new ArrayList<>(); + for (DynamicObject warehouseinforow : warehouseinfo) { + DynamicObject bdwarehouse = BusinessDataServiceHelper.newDynamicObject("bd_warehouse"); + bdwarehouse.set("yem_customeraccessid",merchantApply.get("id")); + bdwarehouse.set("createorg", merchantApply.get("org")); + bdwarehouse.set("ctrlstrategy","5"); + bdwarehouse.set("enable","1"); + bdwarehouse.set("status","A"); + bdwarehouse.set("name",warehouseinforow.get("yem_warehousename")); + bdwarehouse.set("group",warehouseinforow.get("yem_warehousegroup")); + bdwarehouse.set("useorg",merchantApply.get("org")); + if(!YEM.isEmpty(warehouseinforow.get("yem_citycounty"))){ + bdwarehouse.set("address",warehouseinforow.get("yem_citycounty")); + }else{ + bdwarehouse.set("address",null); + } + bdwarehouse.set("detailaddress",warehouseinforow.get("yem_address")); + bdwarehouse.set("principal",warehouseinforow.get("yem_contact")); + bdwarehouse.set("telephone",warehouseinforow.get("yem_warehousetel")); + warehouseentry.add(bdwarehouse); + OperationServiceHelper.executeOperate("save", "bd_warehouse", new DynamicObject[]{bdwarehouse}, OperateOption.create()); + warehouseinforow.set("yem_warehouse",bdwarehouse); + } + SaveServiceHelper.save(new DynamicObject[]{merchantApply}); + } + + + + /** + * @Description: 删除地址基础资料和客户,供应商的关联信息 + * @function 根据客户,供应商分类删除对应基础资料的地址关联信息 + * @purposes 方便之后逻辑删除地址数据 + * @param merchantApply 客商准入单 + * @param yemClassifycustomer 客户分类 + * @param yemClassifysupplier 供应商分类 + * @param customer 客户 + * @param supplier 供应商 + * @return void + */ + + private void delRelatedInfo(DynamicObject merchantApply, DynamicObject yemClassifycustomer, DynamicObject yemClassifysupplier, DynamicObject customer, DynamicObject supplier) { + //客商准入联系人分录 + List bd_address = new ArrayList<>(); + DynamicObjectCollection yem_linkmaninfo_e = merchantApply.getDynamicObjectCollection("yem_linkmaninfo_e"); + for (DynamicObject yem_linkmaninf : yem_linkmaninfo_e) { + String addressnumber = (String) yem_linkmaninf.get("yem_addressnumber"); + DynamicObject address = BusinessDataServiceHelper.loadSingle("bd_address", new QFilter[]{new QFilter("number", QCP.equals, addressnumber)}); + if((null==yemClassifycustomer&&null==yemClassifysupplier)&&(null!=customer&&null!=supplier)) { + address.set("supplierid", null); + address.set("customerid", null); + address.set("iscustomeradd", null); + address.set("issupplieradd", null); + address.set("supplier", null); + address.set("customer", null); + bd_address.add(address); + }else if(null==yemClassifycustomer && null!= customer){ + address.set("iscustomeradd", null); + address.set("customer", null); + address.set("customerid", null); + bd_address.add(address); + }else if(null==yemClassifysupplier && null!=supplier){ + address.set("supplier", null); + address.set("issupplieradd", null); + address.set("supplierid", null); + bd_address.add(address); + } + } + SaveServiceHelper.save(bd_address.toArray(new DynamicObject[0])); + } + + + + /** + * @Description: 生成/更新供应商基础资料 + * @function 1.存在客商准入id与客商准入单相同的客户则更新不存在新增 + * @param supplier 供应商基础资料 + * @param merchantApply 客商准入单 + * @param supplierstatus 供应商状态 + * @param userId 当前登录人id + * @param linkmanMap 联系人分录默认行信息 + * @param linkmanentryMap 联系人分录信息(以准入单行id为key) + * @param bankCurrency 银行信息默认行币别 + * @param bankentryMap 银行分录信息(以准入单行id为key) + * @return void + */ + + private void creatOrUpdateSupplier(DynamicObject supplier, DynamicObject merchantApply,DynamicObject supplierstatus,long userId,Map linkmanMap, Map> linkmanentryMap,DynamicObject bankCurrency, Map> bankentryMap) { + if(null!=supplier){ + //更新供应商 + updatesupplier(supplier,linkmanentryMap,merchantApply,bankCurrency,supplierstatus,linkmanMap,bankentryMap); + } + else{ + //新建供应商 + createsupplier(userId,merchantApply,bankCurrency,supplierstatus,linkmanMap,linkmanentryMap,bankentryMap); + } + } + + + + + /** + * @Description: 生成/更新客户基础资料 + * @function 1.存在客商准入id与客商准入单相同的客户则更新不存在新增 + * @param customer 客户基础资料 + * @param merchantApply 客商准入单 + * @param customerstatus 客户状态 + * @param userId 当前登录人id + * @param linkmanMap 联系人分录默认行信息 + * @param linkmanentryMap 联系人分录信息(以准入单行id为key) + * @param bankCurrency 银行信息默认行币别 + * @param bankentryMap 银行分录信息(以准入单行id为key) + * @return void + */ + + private void creatOrUpdateCustomer(DynamicObject customer, DynamicObject merchantApply, DynamicObject customerstatus, long userId, Map linkmanMap, Map> linkmanentryMap, DynamicObject bankCurrency, Map> bankentryMap) { + if (null != customer) { + //更新客户 + updateCustomer(customer,linkmanentryMap,merchantApply,bankCurrency,customerstatus,linkmanMap,bankentryMap); + } + else { + //新建客户 + createCustomer(userId,merchantApply,bankCurrency,customerstatus,linkmanMap,linkmanentryMap,bankentryMap); + } + } + + /** + * @Description: 新增供应商基础资料 + * @param userId 当前登录人id + * @param merchantApply 客商准入单 + * @param bankCurrency 银行信息默认行币别 + * @param supplierstatus 供应商状态 + * @param linkmanMap 联系人分录默认行信息 + * @param linkmanentryMap 联系人分录信息(以准入单行id为key) + * @param bankentryMap 银行分录信息(以准入单行id为key) + * @return void + */ + private void createsupplier(long userId, DynamicObject merchantApply, DynamicObject bankCurrency, DynamicObject supplierstatus, Map linkmanMap, + Map> linkmanentryMap, Map> bankentryMap) { + //获取联系人默认行信息、银行信息分录默认行信息及单据体数据,构建客户基础资料表头 + DynamicObject bdSupplier = BusinessDataServiceHelper.newDynamicObject("bd_supplier");//新建客户基础资料 + bdSupplier.set("status", "A"); + bdSupplier.set("enable", "1"); + bdSupplier.set("creator", userId); + bdSupplier.set("yem_customeraccessid", merchantApply.get("id")); + bdSupplier.set("ctrlstrategy","5"); + bdSupplier.set("createorg", merchantApply.get("org")); + addCustomerInfo(bdSupplier,merchantApply,bankCurrency,supplierstatus,linkmanMap,false); + OperationServiceHelper.executeOperate("save", "bd_customer", new DynamicObject[]{bdSupplier}, OperateOption.create()); + //从客商准入联系人分录获取地址信息新建地址基础资料 + for (Map.Entry> outerEntry : linkmanentryMap.entrySet()) { + Map innerMap = outerEntry.getValue(); + String yemAddressnumber = (String) innerMap.get("yem_addressnumber"); + DynamicObject bdaddress = null; + if (!YEM.isEmpty(yemAddressnumber)) { + bdaddress = creatAddressr(bdSupplier,innerMap,yemAddressnumber,false); + } + //新建地址信息后从联系人分录获取数据赋值 + DynamicObjectCollection entryAddress = bdSupplier.getDynamicObjectCollection("entry_linkman"); + DynamicObject creatlinkman = entryAddress.addNew(); + //新增客户分录行数据 + creatCustomerEntry(innerMap,creatlinkman,bdaddress); + } + //从客商准入联系人分录获取银行信息新建银行信息分录 + creatBankInfo(bankentryMap,bdSupplier); + + SaveServiceHelper.save(new DynamicObject[]{bdSupplier}); + } + + + /** + * @Description: 新增客户基础资料 + * @param userId 当前登录人id + * @param merchantApply 客商准入单 + * @param bankCurrency 银行信息默认行币别 + * @param customerstatus 客户状态 + * @param linkmanMap 联系人分录默认行信息 + * @param linkmanentryMap 联系人分录信息(以准入单行id为key) + * @param bankentryMap 银行分录信息(以准入单行id为key) + * @return void + */ + private void createCustomer(long userId,DynamicObject merchantApply,DynamicObject bankCurrency,DynamicObject customerstatus,Map linkmanMap, Map> linkmanentryMap,Map> bankentryMap ) { + /** + *特殊字段 + * 注意处理付款币别(取银行分录默认行)√ + * 客户状态需查询客户状态(bd_customerstatus)基础资料,赋默认值“正常” √ + * 工商信息中客户信息字段取默认行 √ + */ + //获取联系人默认行信息、银行信息分录默认行信息及单据体数据,构建客户基础资料表头 + DynamicObject bdCustomer = BusinessDataServiceHelper.newDynamicObject("bd_customer");//新建客户基础资料 + bdCustomer.set("status", "A"); + bdCustomer.set("enable", "1"); + bdCustomer.set("creator", userId); + bdCustomer.set("yem_customeraccessid", merchantApply.get("id")); + bdCustomer.set("ctrlstrategy","5"); + bdCustomer.set("createorg", merchantApply.get("org")); + addCustomerInfo(bdCustomer,merchantApply,bankCurrency,customerstatus,linkmanMap,true); + OperationResult bd_customer = OperationServiceHelper.executeOperate("save", "bd_customer", new DynamicObject[]{bdCustomer}, OperateOption.create()); + + //从客商准入联系人分录获取地址信息新建地址基础资料 + for (Map.Entry> outerEntry : linkmanentryMap.entrySet()) { + Map innerMap = outerEntry.getValue(); + String yemAddressnumber = (String) innerMap.get("yem_addressnumber"); + DynamicObject bdaddress = null; + if (!YEM.isEmpty(yemAddressnumber)) { + bdaddress = creatAddressr(bdCustomer,innerMap,yemAddressnumber,true); + } + //新建地址信息后从联系人分录获取数据赋值 + DynamicObjectCollection entryAddress = bdCustomer.getDynamicObjectCollection("entry_linkman"); + DynamicObject creatlinkman = entryAddress.addNew(); + //新增客户分录行数据 + creatCustomerEntry(innerMap,creatlinkman,bdaddress); + } + //从客商准入联系人分录获取银行信息新建银行信息分录 + creatBankInfo(bankentryMap,bdCustomer); + + SaveServiceHelper.save(new DynamicObject[]{bdCustomer}); + } + + + /** + * @Description: 更新供应商数据 + * @function 同客户更新方案 + * @purposes 客商准入单做修改时同步更新供应商基础班资料数据 + * @param supplier 供应商 + * @param linkmanentryMap 联系人分录信息(以准入单行id为key) + * @param merchantApply 客商准入单 + * @param bankCurrency 银行信息默认行币别 + * @param supplierstatus 供应商状态 + * @param linkmanMap 联系人分录默认行信息 + * @param bankentryMap 银行分录信息(以准入单行id为key) + * @return void + */ + + private void updatesupplier(DynamicObject supplier, Map> linkmanentryMap, DynamicObject merchantApply, + DynamicObject bankCurrency, DynamicObject supplierstatus, Map linkmanMap, Map> bankentryMap) { + DynamicObjectCollection entryLinkmans = supplier.getDynamicObjectCollection("entry_linkman"); + Map> linkManentry = getLinkManentry(entryLinkmans, true); + DynamicObjectCollection entryBanks = supplier.getDynamicObjectCollection("entry_bank"); + deleteEntryLinkmans(linkmanentryMap, entryLinkmans, linkManentry); + entryBanks.clear(); + SaveServiceHelper.save(new DynamicObject[]{supplier}); + + //重新获取供应商基础资料及分录 + DynamicObject suppliers = BusinessDataServiceHelper.loadSingle("bd_supplier", new QFilter[]{new QFilter("yem_customeraccessid", QCP.equals, (Long) merchantApply.get("id"))}); + DynamicObjectCollection entryLinkmanentrys = suppliers.getDynamicObjectCollection("entry_linkman"); + //获取供应商分录数据集合(以来源单据行id为key) + Map> entryLinkmaneninfo = getLinkManentry(entryLinkmanentrys, true); + Set entrylistid = entryLinkmaneninfo.keySet();//客户分录来源单据id + //更新供应商户单据头数据 + addCustomerInfo(suppliers,merchantApply,bankCurrency,supplierstatus,linkmanMap,false); + + //更新供应商联系人分录数据 + for (Map.Entry> outerEntry : linkmanentryMap.entrySet()) { + Map innerMap = outerEntry.getValue();//客商准入联系人分录行数据 + Long customeraccessid = (Long) innerMap.get("id"); //客商准入联系人分录id + String yemAddressnumber = (String) innerMap.get("yem_addressnumber");//客商准入联系人分录地址信息编码 + List deladdress = new ArrayList<>(); //需要删除的地址信息编号 + DynamicObject bd_address = null; + + if (entryLinkmanentrys.size() < linkmanentryMap.size()) { + DynamicObject bdaddress = null; + if (!YEM.isEmpty(yemAddressnumber) && !entrylistid.contains(customeraccessid)) { + DynamicObject creatlinkman = entryLinkmanentrys.addNew(); + bdaddress = creatAddressr(suppliers,innerMap,yemAddressnumber,false); + creatCustomerEntry(innerMap,creatlinkman,bdaddress); + } + } + else { + for (DynamicObject entryLinkmanentry : entryLinkmanentrys) { + Long linkmaninfoid = (Long) entryLinkmanentry.get("yem_linkmaninfoid");//客户联系人分录来源单据分录id + String number = ""; + DynamicObject bdaddress = null; + if(customeraccessid.equals(linkmaninfoid)){ + //匹配后优先更新基础数据 + entryLinkmanentry.set("contactperson",innerMap.get("yem_name")); + entryLinkmanentry.set("contactpersonpost",innerMap.get("yem_office")); + DynamicObject departments = (DynamicObject) innerMap.get("yem_departments"); + ILocaleString depname = null != departments ? departments.getLocaleString("name") : null; + entryLinkmanentry.set("dept",depname); + entryLinkmanentry.set("phone",innerMap.get("yem_phone")); + entryLinkmanentry.set("fax",innerMap.get("yem_fax")); + entryLinkmanentry.set("email",innerMap.get("yem_email")); + entryLinkmanentry.set("isdefault_linkman",innerMap.get("yem_isdefault_linkman")); + entryLinkmanentry.set("yem_linkmaninfoid",innerMap.get("id")); + bdaddress = entryLinkmanentry.getDynamicObject("associatedaddress"); + number = null != bdaddress ? (String) bdaddress.get("number") : ""; //客户联系人分录关联地址编码 + if(null!=bdaddress) { + bdaddress = BusinessDataServiceHelper.loadSingleFromCache(bdaddress.getPkValue(), "bd_address"); + } + if(!YEM.isEmpty(number)) { + if (yemAddressnumber.equals(number)) { + bdaddress.set("name", innerMap.get("yem_addressname")); + bdaddress.set("hihn_tradeterms", innerMap.get("yem_tradeterms")); + bdaddress.set("hihn_clearanceco", innerMap.get("yem_clearanceco")); + bdaddress.set("hihn_forwarderco", innerMap.get("yem_forwarderco")); + bdaddress.set("customeraddrsspurpose", innerMap.get("yem_customeraddrsspur")); + bdaddress.set("admindivision", innerMap.get("yem_admindivision")); + bdaddress.set("detailaddress", innerMap.get("yem_detailaddress")); + bdaddress.set("linkman", innerMap.get("yem_linkman")); + bdaddress.set("yem_suppliervx", innerMap.get("yem_wechat")); + bdaddress.set("yem_supplierqq", innerMap.get("yem_qq")); + bdaddress.set("phone", innerMap.get("yem_phone")); + bdaddress.set("addemail", innerMap.get("yem_email")); + bdaddress.set("zipcode", innerMap.get("yem_zipcode")); + bdaddress.set("timezone", innerMap.get("yem_timezone")); + bdaddress.set("default", innerMap.get("yem_addressdefault")); + bdaddress.set("admindivisiondata", innerMap.get("yem_admindivision")); + SaveServiceHelper.save(new DynamicObject[]{bdaddress}); + }else{ + deladdress.add((String)bdaddress.get("number")); + bd_address = creatAddressr(suppliers,innerMap,yemAddressnumber,false); + entryLinkmanentry.set("associatedaddress",bd_address); + } + } + if(!YEM.isEmpty(yemAddressnumber)&&YEM.isEmpty(number)){ + bd_address = creatAddressr(suppliers,innerMap,yemAddressnumber,false); + entryLinkmanentry.set("associatedaddress", bd_address); + } + } + if(YEM.isEmpty(yemAddressnumber)&&!YEM.isEmpty(number)){ + if(null!=bdaddress) { + deladdress.add((String)bdaddress.get("number")); + entryLinkmanentry.set("associatedaddress", null); + } + } + } + } + DeleteServiceHelper.delete("bd_address",new QFilter[]{new QFilter("number",QCP.in,deladdress.toArray())}); + } + //从客商准入联系人分录获取银行信息新建银行信息分录 + creatBankInfo(bankentryMap,suppliers); + SaveServiceHelper.save(new DynamicObject[]{suppliers}); + } + + /** + * @Description: 更新客户数据 + * @function + * 客商准入-客户:客商准入id 联系人分录: 客商准入联系人分录id - 客户联系人分录来源单据分录id + * 1.根据【联系人分录id】获取到【客商准入不存在的分录id】但在【客户分录存在的分录id】的分录行DynamicObject并删除,从获取到的需要删除的DynamicObject中获取关联地值基础资料的DynamicObject,判断不为空删除 + * 2.清空银行信息分录 + * 3,更新客户单据头数据 + * 4.遍历获取到的客商准入联系人分录数据更新联系人分录基础数据,获取当前行的id以及地址信息编码 + * 判断【客户联系人分录】的size()是否大于【客商准入联系人分录】的size(), + * 小于则判断 (【客商准入联系人分录地址信息编码】且【客户分录来源单据id】不包含当前行的【客商准入联系人分录id】)则新增 [处理客商准入分录行大于客户分录行数,进行新增地址信息和联系人分录] + * 大于遍历客户分录判断【客商准入id】是否匹配, + * 匹配:判断客户当前行【关联地址编码】不为空后判断客商准入的地址编码和客户【关联地址编码】是否相同, + * 相同: 更新【地址基础资料】数据。 + * 不相同:记录【关联地址】到 List deladdress(需要删除的地址基础资料集合)后根据客商准入分录信息新增地址基础资料 [处理客商准入分录修改地址信息后同步修改客户关联地址] + * 不匹配:判断【客商准入的地址信息编码】不为空且【客户基础资料关联地址】为空,新增地址信息 [ 处理第一次生成客户未录入地址信息,之后补充] + * 判断【客商准入的地址编码为空】且【客户关联地址编码不为空】 将记录客户该行的关联地址到 List deladdress(需要删除的地址基础资料集合) [客商准入已清空地址信息但是客户仍存在] + * 遍历完成后删除list中的地址基础资料 + * 5.新增银行信息分录并保存客户基础资料 + * + * @purposes 客商准入单做修改时同步更新客户基础班资料数据 + * @param customer 客户实体 + * @param linkmanentryMap 联系人分录信息(以准入单行id为key) + * @param merchantApply 客商准入单 + * @param bankCurrency 银行信息默认行币别 + * @param customerstatus 客户状态 + * @param linkmanMap 联系人分录默认行信息 + * @param bankentryMap 银行分录信息(以准入单行id为key) + * @return void + */ + private void updateCustomer(DynamicObject customer, Map> linkmanentryMap,DynamicObject merchantApply, + DynamicObject bankCurrency,DynamicObject customerstatus,Map linkmanMap,Map> bankentryMap) { + DynamicObjectCollection entryLinkmans = customer.getDynamicObjectCollection("entry_linkman"); + Map> linkManentry = getLinkManentry(entryLinkmans, true); + DynamicObjectCollection entryBanks = customer.getDynamicObjectCollection("entry_bank"); + deleteEntryLinkmans(linkmanentryMap, entryLinkmans, linkManentry); + entryBanks.clear(); + SaveServiceHelper.save(new DynamicObject[]{customer}); + + //重新获取客户基础资料及分录 + DynamicObject customers = BusinessDataServiceHelper.loadSingle("bd_customer", new QFilter[]{new QFilter("yem_customeraccessid", QCP.equals, (Long) merchantApply.get("id"))}); + DynamicObjectCollection entryLinkmanentrys = customers.getDynamicObjectCollection("entry_linkman"); + //获取客户分录数据集合(以来源单据行id为key) + Map> entryLinkmaneninfo = getLinkManentry(entryLinkmanentrys, true); + Set entrylistid = entryLinkmaneninfo.keySet();//客户分录来源单据id + //更新客户单据头数据 + addCustomerInfo(customers,merchantApply,bankCurrency,customerstatus,linkmanMap,true); + //更新客户联系人分录数据 + for (Map.Entry> outerEntry : linkmanentryMap.entrySet()) { + Map innerMap = outerEntry.getValue();//客商准入联系人分录行数据 + Long customeraccessid = (Long) innerMap.get("id"); //客商准入联系人分录id + String yemAddressnumber = (String) innerMap.get("yem_addressnumber");//客商准入联系人分录地址信息编码 + List deladdress = new ArrayList<>(); //需要删除的地址信息编号 + DynamicObject bd_address = null; + + if (entryLinkmanentrys.size() < linkmanentryMap.size()) { + DynamicObject bdaddress = null; + if (!YEM.isEmpty(yemAddressnumber) && !entrylistid.contains(customeraccessid)) { + DynamicObject creatlinkman = entryLinkmanentrys.addNew(); + bdaddress = creatAddressr(customers,innerMap,yemAddressnumber,true); + creatCustomerEntry(innerMap,creatlinkman,bdaddress); + } + } + else { + //遍历客户联系人分录 + for (DynamicObject entryLinkmanentry : entryLinkmanentrys) { + Long linkmaninfoid = (Long)entryLinkmanentry.get("yem_linkmaninfoid");//客户联系人分录来源单据分录id + String number = ""; + DynamicObject bdaddress = null; + if(customeraccessid.equals(linkmaninfoid)){ + //匹配后优先更新基础数据 + entryLinkmanentry.set("contactperson",innerMap.get("yem_name")); + entryLinkmanentry.set("contactpersonpost",innerMap.get("yem_office")); + DynamicObject departments = (DynamicObject) innerMap.get("yem_departments"); + ILocaleString depname = null != departments ? departments.getLocaleString("name") : null; + entryLinkmanentry.set("dept",depname); + entryLinkmanentry.set("phone",innerMap.get("yem_phone")); + entryLinkmanentry.set("fax",innerMap.get("yem_fax")); + entryLinkmanentry.set("email",innerMap.get("yem_email")); + entryLinkmanentry.set("isdefault_linkman",innerMap.get("yem_isdefault_linkman")); + entryLinkmanentry.set("yem_linkmaninfoid",innerMap.get("id")); + + bdaddress = entryLinkmanentry.getDynamicObject("associatedaddress"); + number = null != bdaddress ? (String) bdaddress.get("number") : ""; //客户联系人分录关联地址编码 + if(null!=bdaddress) { + bdaddress = BusinessDataServiceHelper.loadSingleFromCache(bdaddress.getPkValue(), "bd_address"); + } + if(!YEM.isEmpty(number)) { + if (yemAddressnumber.equals(number)) { + bdaddress.set("name", innerMap.get("yem_addressname")); + bdaddress.set("hihn_tradeterms", innerMap.get("yem_tradeterms")); + bdaddress.set("hihn_clearanceco", innerMap.get("yem_clearanceco")); + bdaddress.set("hihn_forwarderco", innerMap.get("yem_forwarderco")); + bdaddress.set("customeraddrsspurpose", innerMap.get("yem_customeraddrsspur")); + bdaddress.set("admindivision", innerMap.get("yem_admindivision")); + bdaddress.set("detailaddress", innerMap.get("yem_detailaddress")); + bdaddress.set("linkman", innerMap.get("yem_linkman")); + bdaddress.set("yem_suppliervx", innerMap.get("yem_wechat")); + bdaddress.set("yem_supplierqq", innerMap.get("yem_qq")); + bdaddress.set("phone", innerMap.get("yem_phone")); + bdaddress.set("addemail", innerMap.get("yem_email")); + bdaddress.set("zipcode", innerMap.get("yem_zipcode")); + bdaddress.set("timezone", innerMap.get("yem_timezone")); + bdaddress.set("default", innerMap.get("yem_addressdefault")); + bdaddress.set("admindivisiondata", innerMap.get("yem_admindivision")); + SaveServiceHelper.save(new DynamicObject[]{bdaddress}); + }else{ + deladdress.add((String)bdaddress.get("number")); + bd_address = creatAddressr(customers,innerMap,yemAddressnumber,true); + entryLinkmanentry.set("associatedaddress",bd_address); + } + } + if(!YEM.isEmpty(yemAddressnumber)&&YEM.isEmpty(number)){ + bd_address = creatAddressr(customers,innerMap,yemAddressnumber,true); + entryLinkmanentry.set("associatedaddress", bd_address); + } + } + if(YEM.isEmpty(yemAddressnumber)&&!YEM.isEmpty(number)){ + if(null!=bdaddress) { + deladdress.add((String)bdaddress.get("number")); + entryLinkmanentry.set("associatedaddress", null); + } + } + } + } + DeleteServiceHelper.delete("bd_address",new QFilter[]{new QFilter("number",QCP.in,deladdress.toArray())}); + } + //从客商准入联系人分录获取银行信息新建银行信息分录 + creatBankInfo(bankentryMap,customers); + SaveServiceHelper.save(new DynamicObject[]{customers}); + + } + + + /** + * @Description: 新建联系人单据体部分数据 + * @return void + */ + private void addCustomerInfo(DynamicObject bdCustomer,DynamicObject merchantApply,DynamicObject bankCurrency,DynamicObject customerstatus,Map linkmanMap,Boolean info){ + Boolean flag = (Boolean)merchantApply.get("yem_internal"); + if(flag){ + bdCustomer.set("internal_company", merchantApply.get("org")); + } + bdCustomer.set("name", merchantApply.get("yem_merchantstname")); + bdCustomer.set("group", merchantApply.get("yem_classifycustomer")); + bdCustomer.set("yem_customeraccessid", merchantApply.get("id")); + bdCustomer.set("country", merchantApply.get("yem_country")); + bdCustomer.set("societycreditcode", merchantApply.get("yem_societycreditcode")); + bdCustomer.set("tx_register_no", merchantApply.get("yem_registerno")); + bdCustomer.set("artificialperson", merchantApply.get("yem_artificialperson")); + bdCustomer.set("bizpartner_address", merchantApply.get("yem_businessaddress")); + bdCustomer.set("businessscope", merchantApply.get("yem_businessscope")); + bdCustomer.set("paymentcurrency", bankCurrency); + if(info){ + bdCustomer.set("customerstatus", customerstatus); + }else{ + bdCustomer.set("supplier_status", customerstatus); + } + bdCustomer.set("linkman", linkmanMap.get("yem_name")); + bdCustomer.set("bizpartner_phone", linkmanMap.get("yem_phone")); + bdCustomer.set("bizpartner_fax", linkmanMap.get("yem_fax")); + bdCustomer.set("postal_code", linkmanMap.get("yem_email")); + bdCustomer.set("admindivision", linkmanMap.get("yem_admindivision")); + bdCustomer.set("bizpartner_address", linkmanMap.get("yem_detailaddress")); + } + + + + /** + * @Description: 新增客户分录数据 + * @return void + */ + + private void creatCustomerEntry(Map innerMap,DynamicObject creatlinkman,DynamicObject bdaddress){ + creatlinkman.set("contactperson",innerMap.get("yem_name")); + creatlinkman.set("contactpersonpost",innerMap.get("yem_office")); + DynamicObject departments = (DynamicObject) innerMap.get("yem_departments"); + ILocaleString depname = null != departments ? departments.getLocaleString("name") : null; + creatlinkman.set("dept",depname); + creatlinkman.set("phone",innerMap.get("yem_phone")); + creatlinkman.set("fax",innerMap.get("yem_fax")); + creatlinkman.set("email",innerMap.get("yem_email")); + creatlinkman.set("isdefault_linkman",innerMap.get("yem_isdefault_linkman")); + creatlinkman.set("associatedaddress",bdaddress); + creatlinkman.set("yem_linkmaninfoid",innerMap.get("id")); + } + + + /** + * @Description: 新增银行信息分录数据 + * @return void + */ + private void creatBankInfo(Map> bankentryMap,DynamicObject bdCustomer){ + for (Map.Entry> outerEntry : bankentryMap.entrySet()) { + DynamicObjectCollection entrybank = bdCustomer.getDynamicObjectCollection("entry_bank"); + DynamicObject creatbank = entrybank.addNew(); + Map bankMap = outerEntry.getValue(); // 获取内层 Map + creatbank.set("bankaccount",bankMap.get("yem_bankaccount")); + creatbank.set("accountname",bankMap.get("yem_accountname")); + creatbank.set("iban",bankMap.get("yem_iban")); + creatbank.set("bank",bankMap.get("yem_bank")); + creatbank.set("currency",bankMap.get("yem_currency")); + creatbank.set("isdefault_bank",bankMap.get("yem_isdefault_bank")); + } + } + + + /** + * @Description: 新增地址基础资料 + * @param customers 客户 + * @param innerMap 客商准入分录行数据 + * @return kd.bos.dataentity.entity.DynamicObject + */ + private DynamicObject creatAddressr(DynamicObject customers,Map innerMap, String yemAddressnumber,Boolean flag){ + DynamicObject address = BusinessDataServiceHelper.loadSingle("bd_address", new QFilter[]{new QFilter("number", QCP.equals, yemAddressnumber)}); + DynamicObject bdaddress = BusinessDataServiceHelper.newDynamicObject("bd_address"); + if(null!=address) { + if(flag){ + address.set("customer", customers); + address.set("iscustomeradd", true); + address.set("customerid", customers.get("id")); + + }else { + address.set("supplier", customers); + address.set("issupplieradd",true); + address.set("supplierid", customers.get("id")); + } + OperationServiceHelper.executeOperate("save", "bd_address", new DynamicObject[]{address}, OperateOption.create()); + return address; + } + if(flag){ + bdaddress.set("customer", customers); + bdaddress.set("iscustomeradd", true); + bdaddress.set("customerid", customers.get("id")); + }else { + bdaddress.set("supplier", customers); + bdaddress.set("issupplieradd",true); + bdaddress.set("supplierid", customers.get("id")); + } + bdaddress.set("number", innerMap.get("yem_addressnumber")); + bdaddress.set("name", innerMap.get("yem_addressname")); + bdaddress.set("hihn_tradeterms", innerMap.get("yem_tradeterms")); + bdaddress.set("hihn_clearanceco", innerMap.get("yem_clearanceco")); + bdaddress.set("hihn_forwarderco", innerMap.get("yem_forwarderco")); + bdaddress.set("customeraddrsspurpose", innerMap.get("yem_customeraddrsspur")); + bdaddress.set("admindivision", innerMap.get("yem_admindivision")); + bdaddress.set("detailaddress", innerMap.get("yem_detailaddress")); + bdaddress.set("linkman", innerMap.get("yem_linkman")); + bdaddress.set("yem_suppliervx", innerMap.get("yem_wechat")); + bdaddress.set("yem_supplierqq", innerMap.get("yem_qq")); + bdaddress.set("phone", innerMap.get("yem_phone")); + bdaddress.set("addemail", innerMap.get("yem_email")); + bdaddress.set("zipcode", innerMap.get("yem_zipcode")); + bdaddress.set("timezone", innerMap.get("yem_timezone")); + bdaddress.set("default", innerMap.get("yem_addressdefault")); + + bdaddress.set("status", "C"); + if(!YEM.isEmpty(innerMap.get("yem_admindivision"))){ + bdaddress.set("admindivisiondata",innerMap.get("yem_admindivision")); + }else{ + bdaddress.set("admindivisiondata",null); + } + bdaddress.set("createorg", innerMap.get("org")); + bdaddress.set("enable", "1"); + + + OperationServiceHelper.executeOperate("save", "bd_address", new DynamicObject[]{bdaddress}, OperateOption.create()); + return bdaddress; + } + + /** + * @Description: 根据联系人分录id获取到客商准入不存在的分录id但在客户分录存在的分录id的分录行DynamicObject同时获取关联地值基础资料的DynamicObject,判断不为空删除 + * @param linkmanentryMap 联系人分录信息(以准入单行id为key) + * @param entryLinkmans 客户/供应商基础资料联系人分录数据集合 + * @return void + */ + private void deleteEntryLinkmans(Map> linkmanentryMap, DynamicObjectCollection entryLinkmans , Map> linkManentry) { + OperateOption create = OperateOption.create(); + //客商准入联系人分录id集合 + List addressnumberList = getEntryInfo(linkmanentryMap,false); + //客户联系人分录id + List bdaddressnumberList = getEntryInfo(linkManentry,true); + + //addressnumberList bdaddressnumberList 不存在的值 + List result = new ArrayList<>(); + for (Long number : bdaddressnumberList) { + if (!addressnumberList.contains(number)) { // 检查是否不存在 + result.add(number); + } + } + //删除联系人分录对应行 + List deleterow= new ArrayList<>(); + List deleteassociatedaddress= new ArrayList<>(); + for (DynamicObject entryLinkman : entryLinkmans) { + Long yem_linkmaninfoid = (Long)entryLinkman.get("yem_linkmaninfoid"); + if(result.contains(yem_linkmaninfoid)){ + deleterow.add(entryLinkman); + DynamicObject associatedaddress = (DynamicObject)entryLinkman.get("associatedaddress"); + if(null!=associatedaddress){ + DynamicObject address = BusinessDataServiceHelper.loadSingleFromCache(associatedaddress.getPkValue(), "bd_address"); + if(null!=address) { + deleteassociatedaddress.add((String) address.get("number")); + } + } + + } + } + //删除地址基础资料 + DeleteServiceHelper.delete("bd_address",new QFilter[]{new QFilter("number",QCP.in,deleteassociatedaddress.toArray())}); + //删除联系人分录对应行 + entryLinkmans.removeAll(deleterow); + } + + + /** + * @Description: 获取分录id集合 + * @return List + */ + /** + * @Description: 获取分录id集合 + * @param linkmanentryMap 分录数据集合 + * @param flag true: 客户或供应商基础资料 false:客商准入单 + * @return java.util.List + */ + + private List getEntryInfo(Map> linkmanentryMap,boolean flag){ + List addressnumberMap = new ArrayList<>(); + for (Map.Entry> outerEntry : linkmanentryMap.entrySet()) { + Map linkManMap = outerEntry.getValue(); + if(flag){ + Long linkmaninfoid = (Long) linkManMap.get("yem_linkmaninfoid"); + addressnumberMap.add(linkmaninfoid); + + }else{ + Long id = (Long) linkManMap.get("id"); + addressnumberMap.add(id); + + } + } + return addressnumberMap; + } + + + /** + * @Description: 获取银行信息默认行币别 + * @param bankinfo 银行信息分录 + * @return kd.bos.dataentity.entity.DynamicObject + */ + private DynamicObject getBankCurrency(DynamicObjectCollection bankinfo){ + DynamicObject yemCurrency = null;//银行分录默认行币别 + for (DynamicObject bank : bankinfo) { + boolean yemIsdefaultBank = bank.getBoolean("yem_isdefault_bank"); + if (yemIsdefaultBank) { + yemCurrency = bank.getDynamicObject("yem_currency"); + } + } + return yemCurrency; + } + + + /** + * @Description: 获取分录默认行信息 + * @param linkmaninfo 分录信息 + * @return java.util.Map + */ + private Map getDefaultLinkManentry(DynamicObjectCollection linkmaninfo){ + Map linkmanMap = new HashMap<>(); + for (DynamicObject linkman : linkmaninfo) { + Boolean yemIsdefaultLinkman = (Boolean) linkman.get("yem_isdefault_linkman"); + if (yemIsdefaultLinkman) { + DynamicObjectType dynamicObjectType = linkman.getDynamicObjectType(); + DataEntityPropertyCollection properties = dynamicObjectType.getProperties(); + for (IDataEntityProperty property : properties) { + String name = property.getName(); + Object value = linkman.get(name); + linkmanMap.put(name, value); + } + } + } + return linkmanMap; + } + + + /** + * @Description: 获取分录所有信息(以准入单行id为主键) + * @param linkmaninfo 分录信息 + * @param flag true: 客户或供应商基础资料 false:客商准入单 + * @return java.util.Map> + */ + private Map> getLinkManentry(DynamicObjectCollection linkmaninfo,Boolean flag){ + Map> linkmanentryMap = new HashMap<>(); + for (DynamicObject linkman : linkmaninfo) { + Map map = new HashMap<>(); + Object id = null; + if(flag) { + id = (Object) linkman.get("yem_linkmaninfoid"); + }else{ + id = (Object) linkman.get("id"); + } + DynamicObjectType dynamicObjectType = linkman.getDynamicObjectType(); + DataEntityPropertyCollection properties = dynamicObjectType.getProperties(); + for (IDataEntityProperty property : properties) { + String name = property.getName(); + Object value = linkman.get(name); + map.put(name, value); + } + linkmanentryMap.put(id,map); + } + return linkmanentryMap; + } + +} diff --git a/yem-wmzh/yem-wmzh-csm/src/main/java/yem/wmzh/csm/customeraccess/opplugin/op/CustomeraccessSubmitOpPlugin.java b/yem-wmzh/yem-wmzh-csm/src/main/java/yem/wmzh/csm/customeraccess/opplugin/op/CustomeraccessSubmitOpPlugin.java new file mode 100644 index 0000000..4d3c1af --- /dev/null +++ b/yem-wmzh/yem-wmzh-csm/src/main/java/yem/wmzh/csm/customeraccess/opplugin/op/CustomeraccessSubmitOpPlugin.java @@ -0,0 +1,25 @@ +package yem.wmzh.csm.customeraccess.opplugin.op; + +import kd.bos.entity.plugin.AbstractOperationServicePlugIn; +import kd.bos.entity.plugin.AddValidatorsEventArgs; +import yem.wmzh.csm.customeraccess.opplugin.validator.CustomeraccessSubmitValidator; + +/** + * @Description 客商准入单提交校验及操作功能 + * @Author: LiuHB + * @CreateTime: 2025-02-07 17:23 + */ +public class CustomeraccessSubmitOpPlugin extends AbstractOperationServicePlugIn { + + /** + * @Description: 自定义操作校验器 + * @function 1.【内部业务单元】=true,且字段【境内/境外】=境内时,统一社会信用代码必填 + * @purposes 构建好操作校验器之后,操作校验之前,触发校验 + */ + + @Override + public void onAddValidators(AddValidatorsEventArgs e) { + super.onAddValidators(e); + e.addValidator(new CustomeraccessSubmitValidator()); + } +} diff --git a/yem-wmzh/yem-wmzh-csm/src/main/java/yem/wmzh/csm/customeraccess/opplugin/validator/CustomeraccessSubmitValidator.java b/yem-wmzh/yem-wmzh-csm/src/main/java/yem/wmzh/csm/customeraccess/opplugin/validator/CustomeraccessSubmitValidator.java new file mode 100644 index 0000000..fbccbcd --- /dev/null +++ b/yem-wmzh/yem-wmzh-csm/src/main/java/yem/wmzh/csm/customeraccess/opplugin/validator/CustomeraccessSubmitValidator.java @@ -0,0 +1,53 @@ +package yem.wmzh.csm.customeraccess.opplugin.validator; + +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.entity.ExtendedDataEntity; +import kd.bos.entity.validate.AbstractValidator; +import yem.base.common.utils.YEM; + +/** + * @Description 客商准入单提交校验 + * @Author: LiuHB + * @CreateTime: 2025-02-07 17:26 + */ +public class CustomeraccessSubmitValidator extends AbstractValidator { + /** + * @Description: 自定义校验器 + * @function 1.【内部业务单元】=true,且字段【境内/境外】=境内时,统一社会信用代码必填 + * @purposes 重写系统validate方法在提交节点增加控制 + */ + @Override + public void validate() { + // 如果操作键不是 "submit",直接返回 + if (!"submit".equals(this.getOperateKey())) { + return; + } + ExtendedDataEntity[] dataEntities = this.getDataEntities(); + // 遍历每个数据实体并进行校验 + for (ExtendedDataEntity entity : dataEntities) { + DynamicObject customerAccess = entity.getDataEntity(); + validateCustomerInternalInfo(customerAccess, entity); + } + } + + /** + * @Description: 校验客户内部信息 + */ + private void validateCustomerInternalInfo(DynamicObject customerAccess, ExtendedDataEntity entity) { + // 获取内部业务单元、境内/境外、统一社会信用代码 + boolean yemInternal = customerAccess.getBoolean("yem_internal"); + String domesticOrOverseas = customerAccess.getString("yem_domesticoroverseas"); + String societyCreditCode = customerAccess.getString("yem_societycreditcode"); + // 如果是内部业务单元且位于境内,检查统一社会信用代码是否为空 + if (isInternalAndDomestic(yemInternal, domesticOrOverseas) && YEM.isEmpty(societyCreditCode)) { + this.addMessage(entity, "请填写【统一社会信用代码】"); + } + } + + /** + * @Description: 判断是否为内部业务单元且位于境内 + */ + private boolean isInternalAndDomestic(boolean yemInternal, String domesticOrOverseas) { + return yemInternal && "A".equals(domesticOrOverseas); + } +}