客商准入功能
This commit is contained in:
parent
678508f626
commit
e1721fa55f
@ -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')
|
||||
|
@ -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')
|
||||
|
||||
}
|
14
yem-wmzh/yem-wmzh-csm/build.gradle
Normal file
14
yem-wmzh/yem-wmzh-csm/build.gradle
Normal file
@ -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')
|
||||
}
|
||||
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
16
yem-wmzh/yem-wmzh-csm/build/tmp/jar/MANIFEST.MF
Normal file
16
yem-wmzh/yem-wmzh-csm/build/tmp/jar/MANIFEST.MF
Normal file
@ -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
|
||||
|
2
yem-wmzh/yem-wmzh-csm/build/tmp/sourcesJar/MANIFEST.MF
Normal file
2
yem-wmzh/yem-wmzh-csm/build/tmp/sourcesJar/MANIFEST.MF
Normal file
@ -0,0 +1,2 @@
|
||||
Manifest-Version: 1.0
|
||||
|
@ -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<String, Object> maps = showParameter.getCustomParams();
|
||||
Map<String, Object> parenrow = (Map) maps.get("row");//父页面选中行
|
||||
model.setValue("yem_addressnumber",parenrow.get("yem_addressnumber"));
|
||||
model.setValue("yem_addressname",parenrow.get("yem_addressname"));
|
||||
Map<String,Object> yemTradeterms = (Map<String,Object>)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<String,Object> yemTimezone = ( Map<String,Object>)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<String,Object> yemCustomeraddrsspur = (Map<String,Object>)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<String, Object> maps = showParameter.getCustomParams();
|
||||
Map<String, Object> parenrow = (Map) maps.get("row");//父页面选中行
|
||||
int parenseq = (int) parenrow.get("seq");//父页面选中行号
|
||||
int indexof = parenseq - 1;
|
||||
Map<String, Object> 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);
|
||||
}
|
||||
}
|
||||
|
@ -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<String, Object> map = this.showInfoForm();
|
||||
showParameter.setCustomParams(map);
|
||||
showParameter.setCloseCallBack(new CloseCallBack(this, button));
|
||||
showParameter.setFormId(dynamicform);
|
||||
this.getView().showForm(showParameter);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Description: 构建向动态表单传递的数据集
|
||||
*/
|
||||
|
||||
private Map<String, Object> showInfoForm() {
|
||||
Map<String, Object> 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<String, Object> values = (HashMap<String, Object>) returnData;
|
||||
this.setInwardInfo(values);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @Description: 分录赋值
|
||||
* @purposes 将动态表单数据回填到对应行上
|
||||
*/
|
||||
|
||||
private void setInwardInfo(Map<String, Object> 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<String> 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<String> loadAdminOrgNames() {
|
||||
String adminOrgFields = "number,name"; // 查询字段:编码和名称
|
||||
DynamicObject[] adminOrgs = BusinessDataServiceHelper.load("bos_adminorg", adminOrgFields, null);
|
||||
|
||||
List<String> adminOrgNames = new ArrayList<>();
|
||||
for (DynamicObject adminOrg : adminOrgs) {
|
||||
String name = adminOrg.getLocaleString("name").getLocaleValue();
|
||||
adminOrgNames.add(name);
|
||||
}
|
||||
return adminOrgNames;
|
||||
}
|
||||
}
|
@ -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<Object, Object> linkmanMap = getDefaultLinkManentry(linkmaninfo);
|
||||
//联系人分录信息(以id为主键)
|
||||
Map<Object, Map<String, Object>> linkmanentryMap = getLinkManentry(linkmaninfo, false);
|
||||
//获取银行信息默认行币别
|
||||
DynamicObject bankCurrency = getBankCurrency(bankinfo);
|
||||
//银行分录信息(以id为主键)
|
||||
Map<Object, Map<String, Object>> 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<DynamicObject> 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<Long,DynamicObject> warehouseMap = new HashMap<>();//仓库id集合
|
||||
List<Long> 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<DynamicObject> 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<DynamicObject> 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<DynamicObject> 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<Object, Object> linkmanMap, Map<Object,
|
||||
Map<String, Object>> linkmanentryMap,DynamicObject bankCurrency, Map<Object, Map<String, Object>> 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<Object, Object> linkmanMap, Map<Object,
|
||||
Map<String, Object>> linkmanentryMap, DynamicObject bankCurrency, Map<Object, Map<String, Object>> 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<Object, Object> linkmanMap,
|
||||
Map<Object, Map<String, Object>> linkmanentryMap, Map<Object, Map<String, Object>> 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<Object, Map<String, Object>> outerEntry : linkmanentryMap.entrySet()) {
|
||||
Map<String, Object> 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<Object, Object> linkmanMap, Map<Object,
|
||||
Map<String, Object>> linkmanentryMap,Map<Object, Map<String, Object>> 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<Object, Map<String, Object>> outerEntry : linkmanentryMap.entrySet()) {
|
||||
Map<String, Object> 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<Object, Map<String, Object>> linkmanentryMap, DynamicObject merchantApply,
|
||||
DynamicObject bankCurrency, DynamicObject supplierstatus, Map<Object, Object> linkmanMap, Map<Object, Map<String, Object>> bankentryMap) {
|
||||
DynamicObjectCollection entryLinkmans = supplier.getDynamicObjectCollection("entry_linkman");
|
||||
Map<Object, Map<String, Object>> 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<Object, Map<String, Object>> entryLinkmaneninfo = getLinkManentry(entryLinkmanentrys, true);
|
||||
Set<Object> entrylistid = entryLinkmaneninfo.keySet();//客户分录来源单据id
|
||||
//更新供应商户单据头数据
|
||||
addCustomerInfo(suppliers,merchantApply,bankCurrency,supplierstatus,linkmanMap,false);
|
||||
|
||||
//更新供应商联系人分录数据
|
||||
for (Map.Entry<Object, Map<String, Object>> outerEntry : linkmanentryMap.entrySet()) {
|
||||
Map<String, Object> innerMap = outerEntry.getValue();//客商准入联系人分录行数据
|
||||
Long customeraccessid = (Long) innerMap.get("id"); //客商准入联系人分录id
|
||||
String yemAddressnumber = (String) innerMap.get("yem_addressnumber");//客商准入联系人分录地址信息编码
|
||||
List<String> 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<String> deladdress(需要删除的地址基础资料集合)后根据客商准入分录信息新增地址基础资料 [处理客商准入分录修改地址信息后同步修改客户关联地址]
|
||||
* 不匹配:判断【客商准入的地址信息编码】不为空且【客户基础资料关联地址】为空,新增地址信息 [ 处理第一次生成客户未录入地址信息,之后补充]
|
||||
* 判断【客商准入的地址编码为空】且【客户关联地址编码不为空】 将记录客户该行的关联地址到 List<String> 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<Object, Map<String, Object>> linkmanentryMap,DynamicObject merchantApply,
|
||||
DynamicObject bankCurrency,DynamicObject customerstatus,Map<Object, Object> linkmanMap,Map<Object, Map<String, Object>> bankentryMap) {
|
||||
DynamicObjectCollection entryLinkmans = customer.getDynamicObjectCollection("entry_linkman");
|
||||
Map<Object, Map<String, Object>> 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<Object, Map<String, Object>> entryLinkmaneninfo = getLinkManentry(entryLinkmanentrys, true);
|
||||
Set<Object> entrylistid = entryLinkmaneninfo.keySet();//客户分录来源单据id
|
||||
//更新客户单据头数据
|
||||
addCustomerInfo(customers,merchantApply,bankCurrency,customerstatus,linkmanMap,true);
|
||||
//更新客户联系人分录数据
|
||||
for (Map.Entry<Object, Map<String, Object>> outerEntry : linkmanentryMap.entrySet()) {
|
||||
Map<String, Object> innerMap = outerEntry.getValue();//客商准入联系人分录行数据
|
||||
Long customeraccessid = (Long) innerMap.get("id"); //客商准入联系人分录id
|
||||
String yemAddressnumber = (String) innerMap.get("yem_addressnumber");//客商准入联系人分录地址信息编码
|
||||
List<String> 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<Object, Object> 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<String, Object> 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<Object, Map<String, Object>> bankentryMap,DynamicObject bdCustomer){
|
||||
for (Map.Entry<Object, Map<String, Object>> outerEntry : bankentryMap.entrySet()) {
|
||||
DynamicObjectCollection entrybank = bdCustomer.getDynamicObjectCollection("entry_bank");
|
||||
DynamicObject creatbank = entrybank.addNew();
|
||||
Map<String, Object> 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<String, Object> 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<Object, Map<String, Object>> linkmanentryMap, DynamicObjectCollection entryLinkmans , Map<Object, Map<String, Object>> linkManentry) {
|
||||
OperateOption create = OperateOption.create();
|
||||
//客商准入联系人分录id集合
|
||||
List<Long> addressnumberList = getEntryInfo(linkmanentryMap,false);
|
||||
//客户联系人分录id
|
||||
List<Long> bdaddressnumberList = getEntryInfo(linkManentry,true);
|
||||
|
||||
//addressnumberList bdaddressnumberList 不存在的值
|
||||
List<Long> result = new ArrayList<>();
|
||||
for (Long number : bdaddressnumberList) {
|
||||
if (!addressnumberList.contains(number)) { // 检查是否不存在
|
||||
result.add(number);
|
||||
}
|
||||
}
|
||||
//删除联系人分录对应行
|
||||
List<DynamicObject> deleterow= new ArrayList<>();
|
||||
List<String> 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<Long>
|
||||
*/
|
||||
/**
|
||||
* @Description: 获取分录id集合
|
||||
* @param linkmanentryMap 分录数据集合
|
||||
* @param flag true: 客户或供应商基础资料 false:客商准入单
|
||||
* @return java.util.List<java.lang.Long>
|
||||
*/
|
||||
|
||||
private List<Long> getEntryInfo(Map<Object, Map<String, Object>> linkmanentryMap,boolean flag){
|
||||
List<Long> addressnumberMap = new ArrayList<>();
|
||||
for (Map.Entry<Object, Map<String, Object>> outerEntry : linkmanentryMap.entrySet()) {
|
||||
Map<String, Object> 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<java.lang.Object,java.lang.Object>
|
||||
*/
|
||||
private Map<Object, Object> getDefaultLinkManentry(DynamicObjectCollection linkmaninfo){
|
||||
Map<Object, Object> 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<java.lang.Object,java.util.Map<java.lang.String,java.lang.Object>>
|
||||
*/
|
||||
private Map<Object, Map<String,Object>> getLinkManentry(DynamicObjectCollection linkmaninfo,Boolean flag){
|
||||
Map<Object, Map<String,Object>> linkmanentryMap = new HashMap<>();
|
||||
for (DynamicObject linkman : linkmaninfo) {
|
||||
Map<String, Object> 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;
|
||||
}
|
||||
|
||||
}
|
@ -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());
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user