From e1721fa55f0be82d1fd9cb2b781dc04f6cdab42a Mon Sep 17 00:00:00 2001 From: LHB-rabbit <1154063606@qq.com> Date: Sat, 15 Feb 2025 17:49:09 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=A2=E5=95=86=E5=87=86=E5=85=A5=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- settings.gradle | 8 + yem-cosmic-debug/build.gradle | 6 + yem-wmzh/yem-wmzh-csm/build.gradle | 14 + ...erchantRepositorOpPlugin$1.class.uniqueId1 | Bin 0 -> 3580 bytes ...tMerchantRepositorOpPlugin.class.uniqueId0 | Bin 0 -> 28598 bytes .../compileJava/previous-compilation-data.bin | Bin 0 -> 98069 bytes .../yem-wmzh-csm/build/tmp/jar/MANIFEST.MF | 16 + .../build/tmp/sourcesJar/MANIFEST.MF | 2 + .../dynamic/CusdressFormPlugin.java | 170 +++ .../from/CustomeraccessBillPlugin.java | 296 ++++++ .../op/CreatMerchantRepositorOpPlugin.java | 992 ++++++++++++++++++ .../op/CustomeraccessSubmitOpPlugin.java | 25 + .../CustomeraccessSubmitValidator.java | 53 + 13 files changed, 1582 insertions(+) create mode 100644 yem-wmzh/yem-wmzh-csm/build.gradle create mode 100644 yem-wmzh/yem-wmzh-csm/build/tmp/compileJava/compileTransaction/stash-dir/CreatMerchantRepositorOpPlugin$1.class.uniqueId1 create mode 100644 yem-wmzh/yem-wmzh-csm/build/tmp/compileJava/compileTransaction/stash-dir/CreatMerchantRepositorOpPlugin.class.uniqueId0 create mode 100644 yem-wmzh/yem-wmzh-csm/build/tmp/compileJava/previous-compilation-data.bin create mode 100644 yem-wmzh/yem-wmzh-csm/build/tmp/jar/MANIFEST.MF create mode 100644 yem-wmzh/yem-wmzh-csm/build/tmp/sourcesJar/MANIFEST.MF create mode 100644 yem-wmzh/yem-wmzh-csm/src/main/java/yem/wmzh/csm/customeraccess/dynamic/CusdressFormPlugin.java create mode 100644 yem-wmzh/yem-wmzh-csm/src/main/java/yem/wmzh/csm/customeraccess/from/CustomeraccessBillPlugin.java create mode 100644 yem-wmzh/yem-wmzh-csm/src/main/java/yem/wmzh/csm/customeraccess/opplugin/op/CreatMerchantRepositorOpPlugin.java create mode 100644 yem-wmzh/yem-wmzh-csm/src/main/java/yem/wmzh/csm/customeraccess/opplugin/op/CustomeraccessSubmitOpPlugin.java create mode 100644 yem-wmzh/yem-wmzh-csm/src/main/java/yem/wmzh/csm/customeraccess/opplugin/validator/CustomeraccessSubmitValidator.java 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 0000000000000000000000000000000000000000..6831047e93701ebaad94ca607b4a3de175d2ba30 GIT binary patch literal 3580 zcmb_fTTm2N8vYKqZieRK2qxoh65Dl($3#}|H3 z2lY`s9Mxk(;eOAtVnak#W>CHX%MhsQnT7S(K1j`QM-SZuJ+VwjU_R;f(_p?$MK$m6B>Spw*(3-L&G@U zCxvsF5GWfo4$P+d(R3}?&Pe!h!gR*M&oKl~a#Jl0Wss>8C%LW8m+0IjAl6Hdf3M&V z8cyPal$}}fQp#k(=P<3|L;NvgDE%%YqTr~8Q}~DhXM%Myr<$oajgJK$nT;(~jGGfy z)R4Y!oH=u4YVyOW>wlV_JTv{tiRtkZGgq!opFTN#>D-O+iPYoNx05q}o&4W-CvRT9 zaO2|-rmp>Y>bozd$G`gV?0F4m@QFb4%$YB5jGvnM;&@u_^vSHsl{YU>%>3oj%}eKR ze13WQ)WwwG569lo@Tny2Gkh-4nDXNRt@3Q%Vep+@Snj&CeE0 z_TE}|7ht~UIXh`d$;qm8eq7TTwIb%Q86`pC%?b8tesf3~`crSV`fu3zqqc7Jvy02l zzxythvrOeR*|z&6@6NlpN>Z77KmTGn=17wcby#4svBXS^+kt&G6| z)ba~*8NXyjRh7InxhmjaJsQAn$JGWt%bh^Oif3R{Y6iff9_iS3Ow#cNtiLM2HQ zw<;ke$c6HEr~<7jpGuPm`~zjJr9rLe8p`(;UgZ$12v&tkCor%7TLfDJ!TI-kRYncf zNz}AzTr7}_@)fNW1ud1KiXOnzloYm9)>KN!dHJ4y z@@Jk1X&13pgvu{swFm_+V1)>kUBJ?YP{~y++&h6^1%I8yV1(0^pjciq8#)p-$I?Qdr^+=#aZ-{Ec$q{`1;m2lA}UMj&@=`#|9LW%>Z|5$<}hR z^fY4@iwbNIP1q>fu}SR1N};3M=Q@ruEEmmq zin0ox7R#uu1u8nkLae2pQfj?TUCp$31XF0`s*D!?L*32LXy@N(=c*jFq7Ca=VwfbSdcOuOJn-`K3`ccT>R@1<(4Zt^R`R q)NdCBwBWkN+e}HGrvEcbh1f=01=x-qoQu$dUWB;{(4VE8`STMjI$j?D literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..38cc83baaa3bc90f41bf70fa42940e3ed8cdaaf9 GIT binary patch literal 28598 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..12ac0eb8e8737f4399078d02bb931327580e6b84 GIT binary patch literal 98069 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 literal 0 HcmV?d00001 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); + } +}