Pārlūkot izejas kodu

合同佣金计算

zhangyao 4 nedēļas atpakaļ
vecāks
revīzija
5f31b45ae6

+ 33 - 0
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/controller/contractCommissionController.java

@@ -0,0 +1,33 @@
+package com.awspaas.user.apps.donenow_ctt.controller;
+
+import com.actionsoft.bpms.commons.mvc.view.ResponseObject;
+import com.actionsoft.bpms.server.UserContext;
+import com.actionsoft.bpms.server.bind.annotation.Controller;
+import com.actionsoft.bpms.server.bind.annotation.Mapping;
+import com.awspaas.user.apps.donenow_ctt.service.contractCommissionService;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * 合同拥挤,付款
+ */
+@Controller
+public class contractCommissionController {
+
+    /**
+     * 生成合同佣金
+     * @param uc
+     * @param commissionIds
+     * @return
+     */
+    @Mapping(value = "com.awspaas.user.apps.donenow_ctt.generateCommissions")
+    public ResponseObject generateCommissions(UserContext uc, String commissionIds, String contractId) {
+
+        if (StringUtils.isBlank(commissionIds) && StringUtils.isBlank(contractId))
+            return ResponseObject.newErrResponse("请选择合同佣金");
+
+        return contractCommissionService.getInstance().generateCommissions(uc, commissionIds, contractId);
+
+    }
+
+
+}

+ 1 - 0
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/service/InvoiceService.java

@@ -278,6 +278,7 @@ public class InvoiceService {
                 // 4.4 税务相关字段
                 detail.set("EFFECTIVE_TAX_RATE", ded.getDouble("EFFECTIVE_TAX_RATE") * 100);
                 detail.set("TAX_CATEGORY_NAME", ded.get("TAX_CATEGORY_NAME"));
+                detail.set("TAX_CATEGORY_ID", ded.get("TAX_CATEGORY_ID"));
                 detail.set("CONTRACT_ID", ded.get("CONTRACT_ID"));
                 // 4.5 保存明细
                 SDK.getBOAPI().createDataBO("BO_EU_DNCTT_INVOICE_DETAIL", detail, uc);

+ 305 - 0
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/service/contractCommissionService.java

@@ -0,0 +1,305 @@
+package com.awspaas.user.apps.donenow_ctt.service;
+
+import com.actionsoft.bpms.bo.engine.BO;
+import com.actionsoft.bpms.bpmn.engine.model.run.delegate.ProcessInstance;
+import com.actionsoft.bpms.commons.database.RowMap;
+import com.actionsoft.bpms.commons.mvc.view.ResponseObject;
+import com.actionsoft.bpms.server.UserContext;
+import com.actionsoft.bpms.util.DBSql;
+import com.actionsoft.bpms.util.TypeUtil;
+import com.actionsoft.sdk.local.SDK;
+import com.actionsoft.sdk.local.api.Logger;
+import org.apache.commons.lang3.StringUtils;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 合同佣金服务
+ */
+public class contractCommissionService {
+    private static final Logger serviceLogger = SDK.getLogAPI().getLogger(contractCommissionService.class);//记录日志
+    private final String[] excludesArray = new String[]{"ID", "ORGID", "BINDID", "CREATEDATE", "CREATEUSER", "UPDATEDATE", "UPDATEUSER", "PROCESSDEFID", "ISEND"};
+
+
+    private static volatile contractCommissionService instance;
+
+    private contractCommissionService() {
+        // Constructor logic here, if any.
+    }
+
+    public static contractCommissionService getInstance() {
+        if (instance == null) {
+            synchronized (contractCommissionService.class) {
+                if (instance == null) {
+                    instance = new contractCommissionService();
+                }
+            }
+        }
+        return instance;
+    }
+
+    /**
+     * 生成合同佣金
+     * @param uc
+     * @param commissionIds
+     * @param contractId
+     * @return
+     */
+    public ResponseObject generateCommissions(UserContext uc, String commissionIds, String contractId) {
+
+        if (StringUtils.isBlank(commissionIds) && StringUtils.isBlank(contractId))
+            return ResponseObject.newErrResponse("请选择合同佣金");
+
+        List<RowMap> commissions = DBSql.getMaps("select * from BO_EU_DNCTT_SALES_COMMISSION where find_in_set(ID,?) OR CONTRACT_ID=?", new Object[]{commissionIds, contractId});
+        int count = 0;
+        StringBuilder errorMsg = new StringBuilder();
+
+        Map<String, String> ccm = new java.util.HashMap<>();
+
+        for (RowMap commission : commissions) {
+            String CONTRACT_ID = commission.getString("CONTRACT_ID");
+            if (StringUtils.isBlank(CONTRACT_ID)) {
+                String BINDID = commission.getString("BINDID");
+                if (ccm.isEmpty() && ccm.containsKey(BINDID)) {
+                    commission.put("CONTRACT_ID", ccm.get(BINDID));
+                } else {
+                    CONTRACT_ID = DBSql.getString("select ID from BO_EU_DNCTT_CONTRACT where BINDID=?", new Object[]{BINDID});
+                    if (StringUtils.isBlank(CONTRACT_ID)) return ResponseObject.newErrResponse("请选择合同");
+                    else {
+                        ccm.put(BINDID, CONTRACT_ID);
+                        commission.put("CONTRACT_ID", CONTRACT_ID);
+                        DBSql.update("update BO_EU_DNCTT_SALES_COMMISSION set CONTRACT_ID=? where BINDID=?", new Object[]{CONTRACT_ID, BINDID});
+                    }
+                }
+            }
+            String RULE_CATE = commission.getString("RULE_CATE");//规则类别
+            BO period = new BO();
+            period.set("SALES_COMMISSION_ID", commission.getString("ID"));
+            period.set("CONTRACT_ID", commission.getString("CONTRACT_ID"));
+            period.set("ACCOUNT_ID", commission.getString("ACCOUNT_ID"));
+            period.set("PAYEE", commission.getString("PAYEE"));
+
+            RowMap account = StringUtils.isBlank(commission.getString("PAYEE")) ? null : DBSql.getMap("select ID,NAME from bo_eu_dncrm_account where id=?", new Object[]{commission.getString("PAYEE")});
+
+            period.set("RATIO", commission.getString("RATIO"));
+
+            BigDecimal COMMISSION_DOLLARS = BigDecimal.ZERO;//佣金金额
+
+            BigDecimal tax = BigDecimal.ZERO;//税率
+            String TAX_DEDUCT = commission.getString("TAX_DEDUCT");//税率
+            if (StringUtils.isNotBlank(TAX_DEDUCT)) {
+                RowMap taxcate = DBSql.getMap("SELECT NAME,EXT1 FROM BO_EU_DND_GENERAL WHERE OID = ? AND ORGID=?", new Object[]{TAX_DEDUCT, uc.getCompanyModel().getId()});
+                tax = TypeUtil.convert(taxcate.get("EXT1"), BigDecimal.class);
+            }
+
+            boolean isPeriod = false;
+
+            /**
+             * 4646	一次性
+             * 4647	销售额百分比
+             * 4648	销售净利百分比
+             * 4649	周期固定金额
+             */
+
+            if (RULE_CATE.equals("4646")) {
+                //一次性:整个合同生成一条,如果已经生成,再未付款的情况下,可以重新生成
+                if (DBSql.getInt("select count(1) from BO_EU_DNCTT_SALES_COMMISSION_PERIOD where SALES_COMMISSION_ID=? and PAY_AMOUNT>0 ", new Object[]{commission.getString("ID")}) > 0) {
+                    errorMsg.append(account.getString("NAME") + "的一次性佣金已付款,不可重新生成!");
+                    continue;
+                }
+
+                //删除旧数据
+                String comssionperiodBindId = DBSql.getString("select BINDID from BO_EU_DNCTT_SALES_COMMISSION_PERIOD where SALES_COMMISSION_ID=? ", new Object[]{commission.getString("ID")});
+                DBSql.update("delete from BO_EU_DNCTT_SALES_COMMISSION_PERIOD where SALES_COMMISSION_ID=?", new Object[]{commission.getString("ID")});
+                SDK.getProcessAPI().deleteById(comssionperiodBindId, uc.getUID());
+
+                RowMap contract = DBSql.getMap("select CONTRACT_START_DATE,CONTRACT_END_DATE from BO_EU_DNCTT_CONTRACT where ID=?", new Object[]{commission.getString("CONTRACT_ID")});
+
+                // a) 周期:与合同相同。用户付款后开始一次性计提(可能没有全部付款)
+                // b) 佣金金额=配置表的佣金金额/(1+配置表税率)
+                period.set("PERIOD_BEGIN_DATE", contract.get("CONTRACT_START_DATE"));//周期开始时间
+                period.set("PERIOD_END_DATE", contract.get("CONTRACT_END_DATE"));//周期结束时间
+
+                COMMISSION_DOLLARS = TypeUtil.convert(commission.get("COMMISSION_DOLLARS"), BigDecimal.class);
+
+                COMMISSION_DOLLARS = COMMISSION_DOLLARS.divide(BigDecimal.ONE.add(tax), 10, BigDecimal.ROUND_HALF_UP);
+
+                period.set("COMMISSION_DOLLARS", COMMISSION_DOLLARS);//佣金金额
+                isPeriod = true;
+            } else {
+
+                List<RowMap> bills = DBSql.getMaps("SELECT a.* FROM VIEW_EU_DNCTT_INVOICE_DETAIL a WHERE a.CONTRACT_ID =? AND a.RECEIVE_AMOUNT>0 AND  a.INVOICE_AMOUNT = 0 AND NOT EXISTS( SELECT 1 FROM BO_EU_DNCTT_SALES_COMMISSION_PERIOD b WHERE b.SALES_COMMISSION_ID =? AND b.CONTRACT_ID = a.CONTRACT_ID AND b.PAY_AMOUNT > 0 AND b.INVOICE_DETAIL_ID = a.ID)", new Object[]{commission.getString("CONTRACT_ID"), commission.getString("ID")});
+                for (RowMap bill : bills) {
+                    String ACCOUNT_DEDUCTION_ID = bill.getString("ACCOUNT_DEDUCTION_ID");//计费条目ID
+
+                    BigDecimal shou_tax = BigDecimal.ZERO;//税率-收
+                    BigDecimal fu_tax = BigDecimal.ZERO;//税率-付
+
+                    period.set("INVOICE_DETAIL_ID", bill.getString("ID"));
+
+                    //删除旧数据
+                    String comssionperiodBindId = DBSql.getString("select BINDID from BO_EU_DNCTT_SALES_COMMISSION_PERIOD where SALES_COMMISSION_ID=? and CONTRACT_ID=? and INVOICE_DETAIL_ID=? ", new Object[]{commission.getString("ID"), commission.getString("CONTRACT_ID"), bill.getString("ID")});
+                    DBSql.update("delete from BO_EU_DNCTT_SALES_COMMISSION_PERIOD where SALES_COMMISSION_ID=? and CONTRACT_ID=? and INVOICE_DETAIL_ID=? ", new Object[]{commission.getString("ID"), commission.getString("CONTRACT_ID"), bill.getString("ID")});
+                    SDK.getProcessAPI().deleteById(comssionperiodBindId, uc.getUID());
+
+
+                    //获取合同服务的周期
+                    RowMap service = DBSql.getMap("SELECT b.PERIOD_BEGIN_DATE,b.PERIOD_END_DATE,b.PERIOD_COST,b.CONTRACT_SERVICE_ID from BO_EU_DNCRM_ACCOUNT_DEDUCTION a JOIN BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD b ON a.OBJECT_ID=b.ID AND a.TYPE_ID=1325 AND a.ID=? ", new Object[]{ACCOUNT_DEDUCTION_ID});
+                    if (service != null) {
+                        period.set("CONTRACT_SERVICE_ID", service.get("CONTRACT_SERVICE_ID"));
+                        period.set("PERIOD_BEGIN_DATE", service.get("PERIOD_BEGIN_DATE"));//周期开始时间
+                        period.set("PERIOD_END_DATE", service.get("PERIOD_END_DATE"));//周期结束
+                        period.set("COST_INCLUDE_TAX", service.get("PERIOD_COST"));//本期成本(含税)
+
+                        //period.set("COST_BF_INCLUDE_TAX", bill.get(""));//上期结转成本(含税)
+
+                        //上期的成本-已收+上期结转成本(不含税)
+                        RowMap lastPeriod = DBSql.getMap("SELECT * FROM BO_EU_DNCTT_SALES_COMMISSION_PERIOD WHERE SALES_COMMISSION_ID=? AND CONTRACT_SERVICE_ID=? and INVOICE_DETAIL_ID=? ORDER BY PERIOD_BEGIN_DATE DESC", new Object[]{commission.getString("ID"), service.get("CONTRACT_SERVICE_ID"), bill.getString("ID")});
+                        if (lastPeriod != null) {
+                            BigDecimal RECEIVED_DOLLARS_INCLUDE_TAX = TypeUtil.convert(lastPeriod.get("RECEIVED_DOLLARS_INCLUDE_TAX"), BigDecimal.class);
+                            BigDecimal COST_INCLUDE_TAX = TypeUtil.convert(lastPeriod.get("COST_INCLUDE_TAX"), BigDecimal.class);
+
+                            COST_INCLUDE_TAX = COST_INCLUDE_TAX.subtract(RECEIVED_DOLLARS_INCLUDE_TAX);
+
+                            if (lastPeriod.get("COST_BF_INCLUDE_TAX") != null) {
+                                COST_INCLUDE_TAX = COST_INCLUDE_TAX.subtract(TypeUtil.convert(lastPeriod.get("COST_BF_INCLUDE_TAX"), BigDecimal.class));
+                            }
+
+                            if (COST_INCLUDE_TAX.compareTo(BigDecimal.ZERO) > 0) {
+                                period.set("COST_BF_INCLUDE_TAX", COST_INCLUDE_TAX);
+                            }
+                        }
+
+
+                        RowMap contractService = DBSql.getMap("SELECT IS_CTRTAX_APPLIED,TAX_CATEGORY_ID,VAT_TAX,PURCHASE_TAX_CATEGORY_ID FROM BO_EU_DNCTT_CONTRACT_SERVICE WHERE ID=?", new Object[]{service.get("CONTRACT_SERVICE_ID")});
+                        if (contractService != null) {
+
+                            //应收用的税
+                            RowMap taxcate = DBSql.getMap("SELECT NAME,EXT1 FROM BO_EU_DND_GENERAL WHERE OID = ? AND ORGID=?", new Object[]{contractService.getString("TAX_CATEGORY_ID"), uc.getCompanyModel().getId()});
+                            shou_tax = TypeUtil.convert(taxcate.get("EXT1"), BigDecimal.class);
+
+                            //付款用的税
+                            if (contractService.getString("VAT_TAX").equals("1")) {
+                                RowMap fu_taxcate = DBSql.getMap("SELECT NAME,EXT1 FROM BO_EU_DND_GENERAL WHERE OID = ? AND ORGID=?", new Object[]{contractService.getString("PURCHASE_TAX_CATEGORY_ID"), uc.getCompanyModel().getId()});
+                                fu_tax = TypeUtil.convert(fu_taxcate.get("EXT1"), BigDecimal.class);
+                            }
+                        }
+                    } else {
+                        period.set("PERIOD_BEGIN_DATE", bill.get("ITEM_DATE"));//计费日期
+                        period.set("PERIOD_END_DATE", bill.get("ITEM_DATE"));//计费日期
+                    }
+
+                    period.set("RECEIVABLE_DOLLARS_INCLUDE_TAX", bill.get("DOLLARS"));//本期应收款(含税)
+                    period.set("RECEIVED_DOLLARS_INCLUDE_TAX", bill.get("RECEIVE_AMOUNT"));//本期已收款(含税)
+                    //period.set("COST_INCLUDE_TAX", bill.get(""));//本期成本(含税)
+                    //period.set("COST_BF_INCLUDE_TAX", bill.get(""));//上期结转成本(含税)
+
+                    if (shou_tax.compareTo(BigDecimal.ZERO) > 0) {
+                        shou_tax = BigDecimal.ONE.add(shou_tax);
+                        period.set("RECEIVABLE_DOLLARS", TypeUtil.convert(period.get("RECEIVABLE_DOLLARS_INCLUDE_TAX"), BigDecimal.class).divide(shou_tax, 10, BigDecimal.ROUND_HALF_UP));//本期应收款(不含税)
+
+                        period.set("RECEIVED_DOLLARS", TypeUtil.convert(period.get("RECEIVED_DOLLARS_INCLUDE_TAX"), BigDecimal.class).divide(shou_tax, 10, BigDecimal.ROUND_HALF_UP));//本期已收款(不含税)
+                    }
+
+                    if (fu_tax.compareTo(BigDecimal.ZERO) > 0) {
+                        fu_tax = BigDecimal.ONE.add(fu_tax);
+                        if (period.containsKey("COST_INCLUDE_TAX") && period.get("COST_INCLUDE_TAX") != null)
+                            period.set("COST", TypeUtil.convert(period.get("COST_INCLUDE_TAX"), BigDecimal.class).divide(fu_tax, 10, BigDecimal.ROUND_HALF_UP));//本期成本(不含税)
+                        if (period.containsKey("COST_BF_INCLUDE_TAX") && period.get("COST_BF_INCLUDE_TAX") != null)
+                            period.set("COST_BF", TypeUtil.convert(period.get("COST_BF_INCLUDE_TAX"), BigDecimal.class).divide(fu_tax, 10, BigDecimal.ROUND_HALF_UP));//上期结转成本(不含税)
+                    }
+
+
+                    switch (RULE_CATE) {
+                        case "4647": {
+                            //销售额百分比:针对已经全部收款的合同服务进行生成,创建一条合同佣金周期记录
+                            //佣金金额:本期已收款(不含税)/(1+配置表税率),注意计费项必须是全部付款了,才能提佣金,已收款必须是完整支付的计费项的金额之和
+                            COMMISSION_DOLLARS = TypeUtil.convert(bill.get("RECEIVE_AMOUNT"), BigDecimal.class);
+
+                            BigDecimal RATIO = TypeUtil.convert(commission.get("RATIO"), BigDecimal.class);
+
+                            COMMISSION_DOLLARS = COMMISSION_DOLLARS.multiply(RATIO).divide(BigDecimal.valueOf(100), 10, BigDecimal.ROUND_HALF_UP);
+
+                            COMMISSION_DOLLARS = COMMISSION_DOLLARS.divide(BigDecimal.ONE.add(tax), 10, BigDecimal.ROUND_HALF_UP);
+                            period.set("COMMISSION_DOLLARS", COMMISSION_DOLLARS);//佣金金额
+                            isPeriod = true;
+                        }
+                        break;
+                        case "4648": {
+                            //销售净利百分比:针对已经全部收款的合同服务进行生成,创建一条合同佣金周期记录
+                            BigDecimal RATIO = TypeUtil.convert(commission.get("RATIO"), BigDecimal.class);
+
+                            COMMISSION_DOLLARS = TypeUtil.convert(bill.get("RECEIVE_AMOUNT"), BigDecimal.class);
+
+                            //本期成本(含税)
+                            if (period.containsKey("COST_INCLUDE_TAX") && period.get("COST_INCLUDE_TAX") != null)
+                                COMMISSION_DOLLARS = COMMISSION_DOLLARS.subtract(TypeUtil.convert(period.get("COST_INCLUDE_TAX"), BigDecimal.class));
+
+                            //上期结转成本(含税)
+                            if (period.containsKey("COST_BF_INCLUDE_TAX") && period.get("COST_BF_INCLUDE_TAX") != null)
+                                COMMISSION_DOLLARS = COMMISSION_DOLLARS.subtract(TypeUtil.convert(period.get("COST_BF_INCLUDE_TAX"), BigDecimal.class));
+
+                            period.set("NET_PROFIT", COMMISSION_DOLLARS);//利润
+
+                            COMMISSION_DOLLARS = COMMISSION_DOLLARS.multiply(RATIO).divide(BigDecimal.valueOf(100), 10, BigDecimal.ROUND_HALF_UP);
+
+                            COMMISSION_DOLLARS = COMMISSION_DOLLARS.divide(BigDecimal.ONE.add(tax), 10, BigDecimal.ROUND_HALF_UP);
+                            period.set("COMMISSION_DOLLARS", COMMISSION_DOLLARS);//佣金金额
+                            isPeriod = true;
+
+                        }
+                        break;
+                        case "4649": {
+                            //周期固定金额:根据合同的计费周期生成每个周期的佣金
+
+                            // a) 周期:上个月只要客户交费了,本月就要计提佣金。前提是某个或某些服务周期完整支付了,或者合同产品完整支付了
+                            // b) 佣金金额:配置表的佣金金额/(1+配置表税率)
+
+                            boolean is = false;
+                            if (commission.get("COMMISSION_DOLLARS") != null) {
+                                //固定佣金
+                                COMMISSION_DOLLARS = TypeUtil.convert(commission.get("COMMISSION_DOLLARS"), BigDecimal.class);
+                                if (COMMISSION_DOLLARS.compareTo(BigDecimal.ZERO) > 0) {
+                                    is = true;
+                                    COMMISSION_DOLLARS = COMMISSION_DOLLARS.divide(BigDecimal.ONE.add(tax), 10, BigDecimal.ROUND_HALF_UP);
+                                    period.set("COMMISSION_DOLLARS", COMMISSION_DOLLARS);//佣金金额
+                                    isPeriod = true;
+                                }
+                            }
+
+                            if (is == false && commission.get("RATIO") != null) {
+                                //百分比
+                                BigDecimal RATIO = TypeUtil.convert(commission.get("RATIO"), BigDecimal.class);
+                                COMMISSION_DOLLARS = TypeUtil.convert(bill.get("RECEIVE_AMOUNT"), BigDecimal.class);
+                                COMMISSION_DOLLARS = COMMISSION_DOLLARS.multiply(RATIO).divide(BigDecimal.valueOf(100), 10, BigDecimal.ROUND_HALF_UP);
+                                COMMISSION_DOLLARS = COMMISSION_DOLLARS.divide(BigDecimal.ONE.add(tax), 10, BigDecimal.ROUND_HALF_UP);
+                                period.set("COMMISSION_DOLLARS", COMMISSION_DOLLARS);//佣金金额
+                                isPeriod = true;
+                            }
+
+                        }
+                        break;
+                    }
+                }
+            }
+
+            if (isPeriod && period.containsKey("COMMISSION_DOLLARS")) {
+                count++;
+                ProcessInstance Instance = SDK.getProcessAPI().createBOProcessInstance("obj_bb54b127f0bd4b50802070fdaa42a9c3", uc.getUID(), "合同佣金");
+                period.setBindId(Instance.getId());
+                SDK.getBOAPI().create("BO_EU_DNCTT_SALES_COMMISSION_PERIOD", period, Instance, uc);
+                DBSql.update("UPDATE BO_EU_DNCTT_SALES_COMMISSION_PERIOD SET PERIOD_BEGIN_DATE = DATE(PERIOD_BEGIN_DATE), PERIOD_END_DATE = DATE(PERIOD_END_DATE) WHERE BINDID=? AND (PERIOD_BEGIN_DATE <> DATE(PERIOD_BEGIN_DATE) OR PERIOD_END_DATE <> DATE(PERIOD_END_DATE)) ", new Object[]{period.getBindId()});
+            }
+        }
+
+        if (count == 0) {
+            if (errorMsg.length() > 0) return ResponseObject.newErrResponse(errorMsg.toString());
+            return ResponseObject.newErrResponse("没有符合条件的佣金生成!");
+        }
+        return ResponseObject.newOkResponse().put("count", count);
+    }
+
+
+}

+ 11 - 4
com.awspaas.user.apps.donenow_sys/src/com/awspaas/user/apps/donenow_sys/controller/udfController.java

@@ -329,10 +329,12 @@ public class udfController {
         System.out.println("commentType=" + commentType);
 
         BOModel boModel = BOCache.getInstance().getModelByEntityName(boDefName);
-        if (boModel == null) return ResponseObject.newOkResponse("未配置");
+        if (boModel == null)
+            return ResponseObject.newOkResponse("未配置");
         String tableName = boModel.getName();
         RowMap boMap = DBSql.getMap("select * from " + tableName + " where ID=?", new Object[]{boId});
-        if (boMap == null) return ResponseObject.newOkResponse("未找到对象");
+        if (boMap == null)
+            return ResponseObject.newOkResponse("未找到对象");
 
 
         JSONObject json = JSON.parseObject(data);
@@ -520,8 +522,11 @@ public class udfController {
     @Mapping(value = "com.awspaas.user.apps.donenow_sys_getstreamInfo")
     public ResponseObject getstreamInfo(UserContext userContext, String streamId) {
         ResponseObject responseObject = ResponseObject.newOkResponse();
+
         //获取活动相关信息
         RowMap rowMap = DBSql.getMap("select * from BO_EU_DNCOM_ACTIVITY where STREAM_ID=? ", new Object[]{streamId});
+        if (rowMap == null)
+            return responseObject;
 
         String OBJECT_TYPE_ID = rowMap.getString("OBJECT_TYPE_ID");
         Map<String, String> resultMap = new HashMap<>();
@@ -535,7 +540,7 @@ public class udfController {
                 RowMap account = DBSql.getMap("select BINDID,NAME,NO from BO_EU_DNCRM_ACCOUNT WHERE ID=?", new Object[]{boId});
                 resultMap.put("NAME", account.getString("NAME"));
                 resultMap.put("NO", account.getString("NO"));
-
+                resultMap.put("TITLE", "客户");
                 String processUrl = SDK.getFormAPI().getFormURL(SDK.getPortalAPI().getPortalUrl(), userContext.getSessionId(), account.getString("BINDID"), null, 1, null, null, null, true);
                 resultMap.put("URL", processUrl);
             }
@@ -547,7 +552,7 @@ public class udfController {
                 boId = rowMap.getString("CONTACT_ID");
                 RowMap contact = DBSql.getMap("select BINDID,NAME from BO_EU_DNCRM_CONTACT WHERE ID=?", new Object[]{boId});
                 resultMap.put("NAME", contact.getString("NAME"));
-
+                resultMap.put("TITLE", "联系人");
                 String processUrl = SDK.getFormAPI().getFormURL(SDK.getPortalAPI().getPortalUrl(), userContext.getSessionId(), contact.getString("BINDID"), null, 1, null, null, null, true);
                 resultMap.put("URL", processUrl);
             }
@@ -559,6 +564,7 @@ public class udfController {
                 RowMap contract = DBSql.getMap("select BINDID,NAME,NO from BO_EU_DNCTT_CONTRACT WHERE ID=?", new Object[]{boId});
                 resultMap.put("NAME", contract.getString("NAME"));
                 resultMap.put("NO", contract.getString("NO"));
+                resultMap.put("TITLE", "合同");
 
                 String processUrl = SDK.getFormAPI().getFormURL(SDK.getPortalAPI().getPortalUrl(), userContext.getSessionId(), contract.getString("BINDID"), null, 1, null, null, null, true);
                 resultMap.put("URL", processUrl);
@@ -569,6 +575,7 @@ public class udfController {
             case "737"://商机
                 boId = rowMap.getString("OPPORTUNITY_ID");
 
+
                 break;
             default:
                 break;