客商准入功能

This commit is contained in:
LHB-rabbit 2025-02-15 17:49:09 +08:00
parent 678508f626
commit e1721fa55f
13 changed files with 1582 additions and 0 deletions

View File

@ -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')

View File

@ -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')
}

View 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')
}

View 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

View File

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

View File

@ -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);
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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());
}
}

View File

@ -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);
}
}