清账单和明细单操作插件代码完善

This commit is contained in:
yuxueliang0813 2025-02-28 14:03:19 +08:00
parent ee1f69f9e4
commit 8d55cf498b
5 changed files with 379 additions and 20 deletions

View File

@ -1,21 +1,28 @@
package shjh.jhzj7.fi.fi.plugin.operate;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.db.DB;
import kd.bos.db.DBRoute;
import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
import kd.bos.entity.plugin.args.AfterOperationArgs;
import kd.bos.entity.plugin.args.BeforeOperationArgs;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper;
import kd.sdk.plugin.Plugin;
import shjh.jhzj7.fi.fi.utils.JhzjUtils;
import java.math.BigDecimal;
/**
* 清账明细单据操作插件
*/
public class ClearDetailBillOperation extends AbstractOperationServicePlugIn implements Plugin {
private static final String updateDetailByID = "update tk_shjh_clear_acctdetail set fbillstatus='A' where fid=?;";
private static final String updateDetailSave = "update tk_shjh_clear_acctdetail set fbillstatus='A' where fid=?;";
private static final String updateDetailReject = "update tk_shjh_clear_acctdetail set fbillstatus='E' where fid=?;";
private static final String updateClearBillSave = "update tk_shjh_clear_account set fbillstatus='A' where fbillstatus='B' and fid=?;";
private static final String clearBillName = "shjh_clear_account";//清账单
/**
* 操作校验通过之后开启事务之前触发此事件
@ -28,7 +35,8 @@ public class ClearDetailBillOperation extends AbstractOperationServicePlugIn imp
String eok = e.getOperationKey();
if("submit".equals(eok) || "revoke".equals(eok) || "reject".equals(eok)){
DynamicObject[] dos = e.getDataEntities();
DynamicObject prinfo;
DynamicObject prinfo;//清账明细单
DynamicObject clearBillInfo;//清账单
String billno;
for (int i = 0; i < dos.length; i++) {
//反审核操作之前系统未把info对象所有属性加载出来尤其是二开的字段需要在此处重新load一下
@ -36,7 +44,7 @@ public class ClearDetailBillOperation extends AbstractOperationServicePlugIn imp
billno = prinfo.getString("billno");
if("submit".equals(eok)){
if("B".equals(prinfo.getString("billstatus"))){
e.setCancelMessage(prinfo.getString("billno")+"单据已提交,不允许重复提交");
e.setCancelMessage(billno+"单据已提交,不允许重复提交");
e.setCancel(true);
}
//清账明细单未清金额+账扣金额+尾差金额本次核销金额合计
@ -44,24 +52,56 @@ public class ClearDetailBillOperation extends AbstractOperationServicePlugIn imp
e.setCancelMessage(billno+"【未清金额】+【账扣金额】+【尾差金额】≥【本次核销金额合计】,才允许提交");
e.setCancel(true);
}
//判断对应的清账单是否已提交如果是则不允许提交此明细单
clearBillInfo = BusinessDataServiceHelper.loadSingle(prinfo.getString("shjh_clearbillid"),clearBillName,"id,billno,billstatus");
if("B".equals(clearBillInfo.getString("billstatus"))){
e.setCancelMessage(clearBillInfo.getString("billno")+"清账单已提交,此明细单无需提交");
e.setCancel(true);
}
}else if("revoke".equals(eok) && !"B".equals(prinfo.getString("billstatus"))){
//清账明细单单据状态=已提交才允许撤销
e.setCancelMessage(billno+"【单据状态】=已提交,才允许撤销");
e.setCancel(true);
//若对应的清账单单据状态=已提交则不允许清账明细单撤销可联系财务驳回
}else if("reject".equals(eok) && !"B".equals(prinfo.getString("billstatus"))){
//清账明细单单据状态=已提交才允许点击驳回按钮
e.setCancelMessage(billno+"【单据状态】=已提交,才允许驳回");
e.setCancel(true);
}else if("reject".equals(eok)){
if(!"B".equals(prinfo.getString("billstatus"))){
//清账明细单单据状态=已提交才允许点击驳回按钮
e.setCancelMessage(billno+"【单据状态】=已提交,才允许驳回");
e.setCancel(true);
}
//判断对应的清账单是否已审核如果是则不允许驳回此明细单
clearBillInfo = BusinessDataServiceHelper.loadSingle(prinfo.getString("shjh_clearbillid"),clearBillName,"id,billno,billstatus");
if("C".equals(clearBillInfo.getString("billstatus"))){
e.setCancelMessage(clearBillInfo.getString("billno")+"清账单已审核,此明细单无需驳回");
e.setCancel(true);
}
}
}
}
}
private boolean checkAmount(DynamicObject prinfo){
//校验通过返回true
return true;
//TODO未清金额+账扣金额+尾差金额本次核销金额合计
BigDecimal billtotal = BigDecimal.ZERO;
BigDecimal a1 = prinfo.getBigDecimal("");
BigDecimal a2 = prinfo.getBigDecimal("");
BigDecimal a3 = prinfo.getBigDecimal("");
if(a1 != null){
billtotal = billtotal.add(a1);
}
//获取分录本次核销金额合计
BigDecimal entrytotal = BigDecimal.ZERO;
DynamicObjectCollection doc = prinfo.getDynamicObjectCollection("");//获取分录
for (int i = 0; i < doc.size(); i++) {
if(doc.get(i).getBigDecimal("") != null){
entrytotal = entrytotal.add(doc.get(i).getBigDecimal(""));//累计分录本次核销金额
}
}
if(billtotal.compareTo(entrytotal) >= 0){
//校验通过返回true
return true;
}
return false;
}
/**
@ -83,12 +123,85 @@ public class ClearDetailBillOperation extends AbstractOperationServicePlugIn imp
//提交具体实现
DynamicObject[] dos = e.getDataEntities();
DynamicObject prinfo;
String result;
for (int i = 0; i < dos.length; i++) {
prinfo = dos[i];
//TODO 将清账明细分录反写至清账单分录清账单收款金额+账扣+尾差本次核销金额合计
result = reWriteClearBill(prinfo);
if(!"success".equals(result)){
this.operationResult.setSuccess(false);
this.operationResult.setMessage("反写清账单失败,原因是:"+result);//前端界面提示内容
this.operationResult.setShowMessage(true);//前端界面 是否显示提示消息
continue;
}
//清账明细单的OA待办转成已办
JhzjUtils.handleOA(prinfo,"2", "0");
}
//将清账明细反写清账单清账单收款金额+账扣+尾差本次核销金额合计
}
private String reWriteClearBill(DynamicObject detailBillInfo){
//根据清账明细单反写清账单
String clearBillid = detailBillInfo.getString("shjh_clearbillid");
DynamicObject clearBillInfo = BusinessDataServiceHelper.loadSingle(clearBillid,clearBillName);
if(clearBillInfo == null){
return detailBillInfo.getString("shjh_clearbillno")+"清账单未找到";
}
//给清账单增加互斥锁如果失败反馈用户
String lockresult = JhzjUtils.lockBill(clearBillInfo);
if(!"success".equals(lockresult)){
return clearBillInfo.getString("billno")+lockresult;
}
//清账明细单分录
DynamicObjectCollection detaildoc = detailBillInfo.getDynamicObjectCollection("");
//清账单分录
DynamicObjectCollection cleardoc = clearBillInfo.getDynamicObjectCollection("");
DynamicObject detailEntryInfo;
DynamicObject clearEntryInfo;
for (int i = 0; i < detaildoc.size(); i++) {
detailEntryInfo = detaildoc.get(i);
clearEntryInfo = cleardoc.addNew();
clearEntryInfo.set("",detailEntryInfo.getString(""));//凭证号
clearEntryInfo.set("",detailEntryInfo.getString(""));//凭证类型
clearEntryInfo.set("",detailEntryInfo.getString(""));//凭证行项目号
clearEntryInfo.set("",detailEntryInfo.getString(""));//发票号
clearEntryInfo.set("",detailEntryInfo.getDate(""));//发票日期
clearEntryInfo.set("",detailEntryInfo.getString(""));// 总账科目
clearEntryInfo.set("",detailEntryInfo.getString(""));// 分配
clearEntryInfo.set("",detailEntryInfo.getString(""));// 参照
clearEntryInfo.set("",detailEntryInfo.getString(""));//参考代码1
clearEntryInfo.set("",detailEntryInfo.getString(""));// 参考代码2
clearEntryInfo.set("",detailEntryInfo.getString(""));// 文本
clearEntryInfo.set("",detailEntryInfo.getDate(""));// 过账日期
clearEntryInfo.set("",detailEntryInfo.getBigDecimal(""));//未核销金额
clearEntryInfo.set("",detailEntryInfo.getBigDecimal(""));//本次核销金额
clearEntryInfo.set("",detailEntryInfo.getString(""));//会计年度
clearEntryInfo.set("",detailEntryInfo.getString(""));// 清账凭证文本
}
//处理清账单账扣
BigDecimal q1 = JhzjUtils.addTwoAmount(clearBillInfo.getBigDecimal(""),
detailBillInfo.getBigDecimal(""));
clearBillInfo.set("",q1);
//处理清账单尾差
BigDecimal q2 = JhzjUtils.addTwoAmount(clearBillInfo.getBigDecimal(""),
detailBillInfo.getBigDecimal(""));
clearBillInfo.set("",q2);
//获取清账单收款金额
BigDecimal q3 =clearBillInfo.getBigDecimal("");
//获取清账单的本次核销金额合计
BigDecimal entrytotal = BigDecimal.ZERO;
for (int i = 0; i < cleardoc.size(); i++) {
clearEntryInfo = cleardoc.get(i);
entrytotal = entrytotal.add(clearEntryInfo.getBigDecimal(""));
}
//清账单的收款金额+账扣+尾差=本次核销金额合计即可提交
if(entrytotal.compareTo(q1.add(q2).add(q3)) == 0){
clearBillInfo.set("billstatus","B");
}
SaveServiceHelper.save(new DynamicObject[]{clearBillInfo});
//解除清账单互斥锁
JhzjUtils.unLockBill(clearBillInfo);
return "success";
}
private void handleRevoke(AfterOperationArgs e){
@ -98,15 +211,25 @@ public class ClearDetailBillOperation extends AbstractOperationServicePlugIn imp
DynamicObject prinfo;
for (int i = 0; i < dos.length; i++) {
prinfo = dos[i];
DB.update(DBRoute.of("fi"), updateDetailByID, new Object[]{prinfo.getLong("id")});
DB.update(DBRoute.of("fi"), updateDetailSave, new Object[]{prinfo.getLong("id")});
}
}
private void handleReject(AfterOperationArgs e){
//驳回具体实现
//清账明细单单据状态=驳回
//若清账单单据状态=提交则需调用清账单撤销清账单单据状态=暂存
//业务员可修改后再次提交驳回时对清账明细单创建人发送邮件通知OA待办
DynamicObject[] dos = e.getDataEntities();
DynamicObject prinfo;
for (int i = 0; i < dos.length; i++) {
prinfo = BusinessDataServiceHelper.loadSingle(dos[i].getPkValue(),dos[i].getDataEntityType().getName());
//若清账单单据状态=已提交则更新清账单单据状态=暂存
DB.update(DBRoute.of("fi"), updateClearBillSave, new Object[]{prinfo.getString("shjh_clearbillid")});
//清账明细单单据状态=驳回
DB.update(DBRoute.of("fi"), updateDetailReject, new Object[]{prinfo.getLong("id")});
//驳回时对清账明细单修改人发送邮件通知OA待办 业务员可修改后再次提交
JhzjUtils.sendEmail(prinfo.getDynamicObject("modifier").getString("email"),"请登录资金系统操作清账明细单",
prinfo.getString("billno")+"\n 详情页面"+JhzjUtils.getBillPCURL(prinfo),"清账明细单新增");
JhzjUtils.handleOA(prinfo,"0", "0");
}
}
}

View File

@ -0,0 +1,35 @@
package shjh.jhzj7.fi.fi.plugin.task;
import kd.bos.context.RequestContext;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.exception.KDException;
import kd.bos.logging.Log;
import kd.bos.logging.LogFactory;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.schedule.executor.AbstractTask;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.sdk.plugin.Plugin;
import java.math.BigDecimal;
import java.util.Map;
/**
* 定时任务更新资金计划收款实际数
*/
public class FundPlanCollectionTask extends AbstractTask implements Plugin {
private static final String entityName = "bd_accountview";
private static final Log logger = LogFactory.getLog(FundPlanCollectionTask.class);
@Override
public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
//查询当月已审核收款类资金计划收款不区分公司当月应只有一个
QFilter qFilter = new QFilter("receredtype", QCP.equals, "0");
qFilter.and("creditamount", QCP.not_equals, BigDecimal.ZERO);
qFilter.and("claimnoticebillno", QCP.equals, "");
qFilter.and("billno", QCP.equals, "20250211-0000000094");
DynamicObject[] collection = BusinessDataServiceHelper.load(entityName, "id", qFilter.toArray());
}
}

View File

@ -0,0 +1,39 @@
package shjh.jhzj7.fi.fi.plugin.task;
import kd.bos.context.RequestContext;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.entity.operate.result.OperationResult;
import kd.bos.exception.KDException;
import kd.bos.logging.Log;
import kd.bos.logging.LogFactory;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.schedule.executor.AbstractTask;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.sdk.plugin.Plugin;
import shjh.jhzj7.fi.fi.utils.JhzjUtils;
import java.math.BigDecimal;
import java.util.Map;
/**
* 定时任务收款单自动下推生成清账单
*/
public class ReceBillToClearBillTask extends AbstractTask implements Plugin {
private static final String srcEntityName = "cas_recbill";//源单 收款单
private static final String destEntityName = "shjh_clear_account";//目标单 清账单
private static final Log logger = LogFactory.getLog(FundPlanCollectionTask.class);
@Override
public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
//设置定时任务按时下推清账单T+1日下推T及T之前收款单生成清账单
QFilter qFilter = new QFilter("receredtype", QCP.equals, "0");
qFilter.and("creditamount", QCP.not_equals, BigDecimal.ZERO);
qFilter.and("claimnoticebillno", QCP.equals, "");
qFilter.and("billno", QCP.equals, "20250211-0000000094");
DynamicObject[] collection = BusinessDataServiceHelper.load(srcEntityName, "id", qFilter.toArray());
OperationResult operationResult3 = JhzjUtils.push(srcEntityName, destEntityName, null);
}
}

View File

@ -2,15 +2,20 @@ package shjh.jhzj7.fi.fi.utils;
import kd.bos.context.RequestContext;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.ILocaleString;
import kd.bos.dataentity.entity.LocaleString;
import kd.bos.logging.Log;
import kd.bos.logging.LogFactory;
import kd.bos.message.api.EmailInfo;
import kd.bos.message.api.MessageChannels;
import kd.bos.message.service.handler.EmailHandler;
import kd.bos.mutex.DataMutex;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.*;
import kd.bos.data.BusinessDataReader;
import kd.bos.dataentity.OperateOption;
@ -27,8 +32,8 @@ import kd.bos.entity.operate.result.IOperateInfo;
import kd.bos.entity.operate.result.OperationResult;
import kd.bos.exception.KDBizException;
import kd.bos.servicehelper.botp.ConvertServiceHelper;
import java.util.ArrayList;
import java.util.List;
import kd.bos.servicehelper.workflow.MessageCenterServiceHelper;
import kd.bos.workflow.engine.msg.info.MessageInfo;
public class JhzjUtils {
@ -36,10 +41,23 @@ public class JhzjUtils {
public static final Long GROUPID = 100000l;//组织根节点ID
public static final Long CNY = 1l;//人民币-币别ID
private static final String groupId = "default_netctrl";//单据网络互斥默认分组
private static final Log logger = LogFactory.getLog(JhzjUtils.class);
public static boolean isEmpty(String value) {
return value == null || value.trim().length() <= 0;
}
/**
* 保存接口调用过程中的日志
* @param billno 单据编号
* @param jkname 接口名称
* @param inputs 接口入参
* @param outputs 接口出参
* @param isSuccess 接口是否调用成功
* @param operation 上游操作触发
*/
public static void saveLog(String billno,String jkname,String inputs,String outputs,boolean isSuccess,String operation){
//保存星瀚与第三方接口调用之间的日志记录
//参数说明单据编号接口名称接口入参接口返回值接口执行结果是否成功操作名称auditunaudit等
@ -74,6 +92,40 @@ public class JhzjUtils {
saveLog(email,"邮件",content,(String)sendResult.get("description"),(Boolean)sendResult.get("result"),operation);
}
/**
* 组装入参给指定人员发企微消息
* @param email 邮箱地址
* @param title1 邮件主题
* @param content1 邮件内容
* @param operation 上游操作触发
*/
public static void sendWEIXINQY(String email, String title1, String content1,String operation){
//构建消息体发送
MessageInfo message = new MessageInfo();
//信息title
ILocaleString title = new LocaleString("测试消息主题");
message.setMessageTitle(title);
//信息主体
ILocaleString content = new LocaleString("消息主体内容,请登录资金系统处理业务");
message.setMessageContent(content);
//信息接收人
ArrayList<Long> receivers = new ArrayList<>();
receivers.add(RequestContext.get().getCurrUserId());
message.setUserIds(receivers);
//信息标签
ILocaleString tag = new LocaleString("消息提醒");
message.setTag(tag.getLocaleValue_zh_CN());
message.setMessageTag(tag);
//信息发送人
message.setSenderId(RequestContext.get().getCurrUserId());
message.setType(MessageInfo.TYPE_MESSAGE);
StringBuilder notifyType = new StringBuilder();
notifyType.append(MessageChannels.WEIXINQY).append(",");
notifyType.append(MessageChannels.EMAIL);
message.setNotifyType(notifyType.toString());
MessageCenterServiceHelper.sendMessage(message);
}
/**
* 组装入参处理OA接口调用
* @param prinfo 清账明细单
@ -111,6 +163,100 @@ public class JhzjUtils {
OAUtils.thirdParty(thirdPartyMap);
}
/**
* 根据指定的对象增加网络互斥让其他人不可修改
* @param prinfo 具体对象可以是收付款单清账单和明细单
**/
public static String lockBill(DynamicObject prinfo){
try (DataMutex dataMutex = DataMutex.create()) {
//如果需要和标准操作如保存提交审核互斥则可使用default_netctrl(默认分组)不需要和标准操作互斥则需要用自定义的groupId
String entityKey = prinfo.getDataEntityType().getName();
List mutexRequireList = new ArrayList<>(1);
Map requireParam = new HashMap<>();
requireParam.put(DataMutex.PARAMNAME_DATAOBJID, prinfo.getString("id"));//数据id
requireParam.put(DataMutex.PARAMNAME_GROUPID, groupId);
requireParam.put(DataMutex.PARAMNAME_ENTITYKEY, entityKey);
requireParam.put(DataMutex.PARAMNAME_OPERATIONKEY, "modify");
requireParam.put(DataMutex.PARAMNAME_ISSTRICT, true);
//建议设置自定义标识用于后续区分标准操作和自定义申请的网控
requireParam.put(DataMutex.PARAMNAME_DATA_CALL_SOURCE, "reWriteClearBill");
mutexRequireList.add(requireParam);
Map mutexResult = dataMutex.batchrequire(mutexRequireList);
Iterator it = mutexResult.entrySet().iterator();
if(it.hasNext()){
Map.Entry next = (Map.Entry) it.next();
// String key = (String) next.getKey();
if ((Boolean) next.getValue()) {
//申请互斥成功的
return "success";
} else {
return "清账单锁定失败,已被其他人占用";
// Map lockInfo = dataMutex.getLockInfo(key, groupId, entityKey);
// if (lockInfo != null) {
// //申请锁失败提示已经存在的锁信息
// }
}
}
return "清账单锁定异常,请稍后再试";
} catch (Exception e) {
logger.error(e);
return "清账单锁定异常,请稍后再试";
}
}
/**
* 根据指定的对象清除网络互斥让其他人可修改
* @param prinfo 具体对象可以是收付款单清账单和明细单
**/
public static void unLockBill(DynamicObject prinfo){
try (DataMutex dataMutex = DataMutex.create()) {
List mutexRequireList = new ArrayList<>(1);
Map requireParam = new HashMap<>();
requireParam.put(DataMutex.PARAMNAME_DATAOBJID, prinfo.getString("id"));
requireParam.put(DataMutex.PARAMNAME_GROUPID, groupId);
requireParam.put(DataMutex.PARAMNAME_ENTITYKEY, prinfo.getDataEntityType().getName());
requireParam.put(DataMutex.PARAMNAME_OPERATIONKEY, "modify");
mutexRequireList.add(requireParam);
dataMutex.batchRelease(mutexRequireList);
// Set set = mutexResult.entrySet();
// Iterator it = set.iterator();
// while(it.hasNext()){
// Map.Entry next = (Map.Entry) it.next();
// String key = (String) next.getKey();
// Boolean value = (Boolean) next.getValue();
// if (value) {
// //申请互斥成功的
// } else {
// Map lockInfo = dataMutex.getLockInfo(key, groupId, entityKey);
// if (lockInfo != null) {
// //申请锁失败提示已经存在的锁信息
// }
// }
// }
} catch (Exception e) {
logger.error(e);
}
}
/*
* 两个金额字段相加如果两个都为null返回0
* 两个有一个为null返回其中一个值两个都不为null则相加
* */
public static BigDecimal addTwoAmount(BigDecimal a1, BigDecimal a2){
if(a1 == null && a2 != null){
return a2;
}else if(a2 == null && a1 != null){
return a1;
}else if(a1 != null && a2 != null){
return a1.add(a2);
}
return BigDecimal.ZERO;
}
/**
* 根据指定的对象获取其详情界面的url
* @param prinfo 具体对象可以是收付款单清账单和明细单
**/
public static String getBillPCURL(DynamicObject prinfo){
//获得单据的pc详情url
//https://ip:port/ierp/index.html?formId=er_tripreqbill&pkId=721810009540800512
@ -121,6 +267,8 @@ public class JhzjUtils {
/**
* 收款单下推清账单-默认下推
* @param oribill 源单标识-收款单
* @param tobill 目标单标识-清账单
**/
public static OperationResult push(String oribill, String tobill, String oribillid) {
// 生成下推参数PushArgs

View File

@ -214,6 +214,8 @@ public class PersonControler implements Serializable {
// itemInfo.put("message","");
//更新人员对应客户的银行信息
handlePersonForCustomer(result);
//TODO 处理人员金蝶id和企微id的对应关系
handlePersonImmapping(result);
}
}
}
@ -250,6 +252,18 @@ public class PersonControler implements Serializable {
}
}
private void handlePersonImmapping(UserParam ups){
/*
* 这里可以使用企业微信同步用户也可以直接在系统库中t_bas_immapping表插入数据需要苍穹中用户的主键和微信中用户的openId可以在苍穹的系统库使用sql
insert into t_bas_immapping (fid, FIMTYPEID, FOPENID) value (主键, 类型暂时随便给值也可以, '微信公众号用户的openId');
update t_bas_immapping SET FUSERID = (select fid from t_sec_user where fphone = '用户手机号') where fid = '用户手机号';
如果没有同步用户即t_bas_immapping表中查不到数据则会跳转到苍穹登陆界面用户输入信息之后苍穹会自动在t_bas_immapping中获取openid并存储
* 此逻辑在kd.bos.login.thirdauth.app.tencent.WxgzhLoginAfter中目前标准代码存在bug多系统对接对于同一个fuserid会替换openid
* 导致单点登录到别的系统失败多系统对接需要修改总部标准代码或者联系总部出私包解决
* */
}
private void handlePersonForCustomer(UserParam ups){
String cusnumber = (String) ups.getDataMap().get("number");//客户编号-即是 人员的编号
DynamicObject currentCus = BusinessDataServiceHelper.loadSingle(cusEntityName,new QFilter[]{new QFilter("number","=",cusnumber)});