Prechádzať zdrojové kódy

在职转接提示词优化

xw 2 dní pred
rodič
commit
38964e4719

+ 6 - 0
fs-company/src/main/java/com/fs/company/controller/qw/QwExternalContactController.java

@@ -532,6 +532,9 @@ public class QwExternalContactController extends BaseController
         if (param.getIds() == null || param.getIds().isEmpty()) {
             return R.error("请选择需要分配的客户");
         }
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        param.setOperatorCompanyUserId(loginUser.getUser().getUserId());
+        param.setCompanyId(loginUser.getCompany().getCompanyId());
         return qwExternalContactService.resignedTransfer(param);
     }
 
@@ -549,6 +552,9 @@ public class QwExternalContactController extends BaseController
         if (param.getIds() == null || param.getIds().isEmpty()) {
             return R.error("请选择需要分配的客户");
         }
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        param.setOperatorCompanyUserId(loginUser.getUser().getUserId());
+        param.setCompanyId(loginUser.getCompany().getCompanyId());
         return qwExternalContactService.transfer(param);
     }
     /**

+ 4 - 0
fs-service/src/main/java/com/fs/qw/param/ResignedTransferParam.java

@@ -19,4 +19,8 @@ public class ResignedTransferParam {
     private Integer addType;
     /** 列表筛选条件 */
     private QwExternalContactParam param;
+    /** 操作人公司用户ID(用于转接结果通知) */
+    private Long operatorCompanyUserId;
+    /** 公司ID(用于转接结果通知) */
+    private Long companyId;
 }

+ 4 - 0
fs-service/src/main/java/com/fs/qw/param/TransferParam.java

@@ -20,4 +20,8 @@ public class TransferParam {
     private Integer addType;
     /** 列表筛选条件 */
     private QwExternalContactParam param;
+    /** 操作人公司用户ID(用于转接结果通知) */
+    private Long operatorCompanyUserId;
+    /** 公司ID(用于转接结果通知) */
+    private Long companyId;
 }

+ 205 - 115
fs-service/src/main/java/com/fs/qw/service/impl/QwExternalContactServiceImpl.java

@@ -36,7 +36,9 @@ import com.fs.course.service.IFsUserCourseVideoService;
 import com.fs.course.service.IUserProjectRepeatMaintainService;
 import com.fs.course.vo.FsUserCourseVideoQVO;
 import com.fs.crm.domain.CrmCustomer;
+import com.fs.crm.domain.CrmMsg;
 import com.fs.crm.mapper.CrmCustomerMapper;
+import com.fs.crm.service.ICrmMsgService;
 import com.fs.his.domain.FsUser;
 import com.fs.his.mapper.FsUserMapper;
 import com.fs.his.utils.PhoneUtil;
@@ -166,6 +168,8 @@ public class QwExternalContactServiceImpl extends ServiceImpl<QwExternalContactM
     @Autowired
     CrmCustomerMapper crmCustomerMapper;
     @Autowired
+    private ICrmMsgService crmMsgService;
+    @Autowired
     QwAutoTagsLogsMapper qwAutoTagsLogsMapper;
     @Autowired
     IAdHtmlClickLogService  iAdHtmlClickLogService;
@@ -1248,131 +1252,217 @@ public class QwExternalContactServiceImpl extends ServiceImpl<QwExternalContactM
 
     @Override
     public R resignedTransfer(ResignedTransferParam param) {
-
         QwUser qwUser = qwUserMapper.selectQwUserById(param.getUserId());
-        Integer err = 0;
-        Integer suc = 0;
-        if (qwUser != null) {
-            List<Long> ids = param.getIds();
-            for (Long id : ids) {
-                QwExternalContact qwExternalContact = qwExternalContactMapper.selectQwExternalContactById(id);
-
-                if (qwExternalContact == null || qwExternalContact.getUserId().equals(qwUser.getQwUserId())) {
-                    err++;
-                } else {
-                    QwTransferCustomerResignedParam qwTransferCustomerParam = new QwTransferCustomerResignedParam();
-                    qwTransferCustomerParam.setHandover_userid(qwExternalContact.getUserId());
-                    qwTransferCustomerParam.setTakeover_userid(qwUser.getQwUserId());
-                    qwTransferCustomerParam.setExternal_userid(Arrays.asList(qwExternalContact.getExternalUserId()));
-                    QwTransferCustomerResignedResult qwTransferCustomerResignedParam = qwApiService.resignedTransferCustomer(qwTransferCustomerParam, param.getCorpId());
-
-                    if (qwTransferCustomerResignedParam.getErrcode() == 0) {
-                        List<QwCustomer> customer = qwTransferCustomerResignedParam.getCustomer();
-                        if (customer != null && customer.size() > 0) {
-                            for (QwCustomer qwCustomer : customer) {
-                                if (qwCustomer.getErrcode() == 0) {
-                                    QwExternalContactTransferLog qwExternalContactTransferLog = new QwExternalContactTransferLog();
-                                    // qwExternalContactTransferLog.setCompanyId(param.getCorpId());
-                                    qwExternalContactTransferLog.setExternalContactId(id);
-                                    qwExternalContactTransferLog.setCompanyUserId(qwExternalContact.getCompanyUserId());
-                                    qwExternalContactTransferLog.setCreateTime(new Date());
-                                    qwExternalContactTransferLog.setStatus(2);
-                                    qwExternalContactTransferLog.setQwUserId(qwUser.getId());
-                                    qwExternalContactTransferLog.setHandoverUserId(qwExternalContact.getUserId());
-                                    qwExternalContactTransferLog.setTakeoverUserId(qwUser.getQwUserId());
-                                    qwExternalContactTransferLog.setCorpId(param.getCorpId());
-                                    qwExternalContactTransferLog.setExternalUserId(qwCustomer.getExternal_userid());
-                                    qwExternalContactTransferLog.setHandoverQwUserId(qwExternalContact.getQwUserId());
-                                    qwExternalContactTransferLog.setNeedClearTag(param.getNeedClearTag());
-                                    qwExternalContactTransferLog.setFsUserId(qwExternalContact.getFsUserId());
-                                    qwExternalContactTransferLogMapper.insertQwExternalContactTransferLog(qwExternalContactTransferLog);
-                                    QwExternalContact qwExternal = new QwExternalContact();
-                                    qwExternal.setStatus(2);
-                                    qwExternal.setTransferStatus(2);
-                                    qwExternal.setId(qwExternalContact.getId());
-                                    qwExternalContactMapper.updateQwExternalContact(qwExternal);
-                                    suc++;
-                                } else {
-                                    err++;
-                                }
-                            }
-                        } else {
-                            err++;
-                        }
-                    } else {
-                        err++;
-                    }
-                }
+        if (qwUser == null) {
+            return R.error("接替员工不存在");
+        }
+        TransferBatchStats stats = new TransferBatchStats();
+        for (Long id : param.getIds()) {
+            QwExternalContact qwExternalContact = qwExternalContactMapper.selectQwExternalContactById(id);
+            if (qwExternalContact == null) {
+                stats.recordFailure("未知客户", -1);
+                continue;
             }
-        }
-        return R.ok("接替成功:" + suc + ",接替失败:" + err);
+            if (qwExternalContact.getUserId().equals(qwUser.getQwUserId())) {
+                stats.recordFailure(qwExternalContact.getName(), -2);
+                continue;
+            }
+            QwTransferCustomerResignedParam qwTransferCustomerParam = new QwTransferCustomerResignedParam();
+            qwTransferCustomerParam.setHandover_userid(qwExternalContact.getUserId());
+            qwTransferCustomerParam.setTakeover_userid(qwUser.getQwUserId());
+            qwTransferCustomerParam.setExternal_userid(Arrays.asList(qwExternalContact.getExternalUserId()));
+            QwTransferCustomerResignedResult transferResult = qwApiService.resignedTransferCustomer(qwTransferCustomerParam, param.getCorpId());
+            handleResignedTransferResult(transferResult, qwExternalContact, qwUser, id, param, stats);
+        }
+        saveTransferCrmMsg("离职转接", stats, param.getOperatorCompanyUserId(), param.getCompanyId());
+        return R.ok(buildTransferSummary(stats));
     }
 
     @Override
     public R transfer(TransferParam param) {
-
         QwUser qwUser = qwUserMapper.selectQwUserById(param.getUserId());
-        Integer err = 0;
-        Integer suc = 0;
-        if (qwUser != null) {
-            List<Long> ids = param.getIds();
-            for (Long id : ids) {
-                QwExternalContact qwExternalContact = qwExternalContactMapper.selectQwExternalContactById(id);
-                if (qwExternalContact == null || qwExternalContact.getUserId().equals(qwUser.getQwUserId())) {
-                    err++;
-                } else {
-                    QwTransferCustomerParam qwTransferCustomerParam = new QwTransferCustomerParam();
-                    String content =param.getContent();
-                    if(content==null||content.isEmpty()){
-                        content="您好,您的服务已升级,后续将由我的同事接替我的工作,继续为您服务。";
-                    }
-                    qwTransferCustomerParam.setTransfer_success_msg(content);
-                    qwTransferCustomerParam.setHandover_userid(qwExternalContact.getUserId());
-                    qwTransferCustomerParam.setTakeover_userid(qwUser.getQwUserId());
-                    qwTransferCustomerParam.setExternal_userid(Arrays.asList(qwExternalContact.getExternalUserId()));
-                    QwTransferCustomerResult qwTransferCustomerResult = qwApiService.transferCustomer(qwTransferCustomerParam, param.getCorpId());
-//                    logger.info("返回:{}",qwTransferCustomerResult);
-
-                    if (qwTransferCustomerResult.getErrcode() == 0) {
-                        List<QwCustomer> customer = qwTransferCustomerResult.getCustomer();
-                        if (customer != null && customer.size() > 0) {
-                            for (QwCustomer qwCustomer : customer) {
-                                if (qwCustomer.getErrcode() == 0) {
-                                    QwExternalContactTransferLog qwExternalContactTransferLog = new QwExternalContactTransferLog();
-                                    // qwExternalContactTransferLog.setCompanyId(param.getCorpId());
-                                    qwExternalContactTransferLog.setExternalContactId(id);
-                                    qwExternalContactTransferLog.setCompanyUserId(qwExternalContact.getCompanyUserId());
-                                    qwExternalContactTransferLog.setCreateTime(new Date());
-                                    qwExternalContactTransferLog.setStatus(2);
-                                    qwExternalContactTransferLog.setQwUserId(qwUser.getId());
-                                    qwExternalContactTransferLog.setHandoverUserId(qwExternalContact.getUserId());
-                                    qwExternalContactTransferLog.setTakeoverUserId(qwUser.getQwUserId());
-                                    qwExternalContactTransferLog.setCorpId(param.getCorpId());
-                                    qwExternalContactTransferLog.setExternalUserId(qwCustomer.getExternal_userid());
-                                    qwExternalContactTransferLog.setHandoverQwUserId(qwExternalContact.getQwUserId());
-                                    qwExternalContactTransferLog.setFsUserId(qwExternalContact.getFsUserId());
-                                    qwExternalContactTransferLog.setNeedClearTag(param.getNeedClearTag());
-                                    qwExternalContactTransferLogMapper.insertQwExternalContactTransferLog(qwExternalContactTransferLog);
-                                    QwExternalContact qwExternal = new QwExternalContact();
-                                    qwExternal.setStatus(2);
-                                    qwExternal.setTransferStatus(2);
-                                    qwExternal.setId(qwExternalContact.getId());
-                                    qwExternalContactMapper.updateQwExternalContact(qwExternal);
-                                    suc++;
-                                } else {
-                                    err++;
-                                }
-                            }
-                        } else {
-                            err++;
-                        }
-                    } else {
-                        err++;
-                    }
+        if (qwUser == null) {
+            return R.error("接替员工不存在");
+        }
+        TransferBatchStats stats = new TransferBatchStats();
+        String content = param.getContent();
+        if (content == null || content.isEmpty()) {
+            content = "您好,您的服务已升级,后续将由我的同事接替我的工作,继续为您服务。";
+        }
+        for (Long id : param.getIds()) {
+            QwExternalContact qwExternalContact = qwExternalContactMapper.selectQwExternalContactById(id);
+            if (qwExternalContact == null) {
+                stats.recordFailure("未知客户", -1);
+                continue;
+            }
+            if (qwExternalContact.getUserId().equals(qwUser.getQwUserId())) {
+                stats.recordFailure(qwExternalContact.getName(), -2);
+                continue;
+            }
+            QwTransferCustomerParam qwTransferCustomerParam = new QwTransferCustomerParam();
+            qwTransferCustomerParam.setTransfer_success_msg(content);
+            qwTransferCustomerParam.setHandover_userid(qwExternalContact.getUserId());
+            qwTransferCustomerParam.setTakeover_userid(qwUser.getQwUserId());
+            qwTransferCustomerParam.setExternal_userid(Arrays.asList(qwExternalContact.getExternalUserId()));
+            QwTransferCustomerResult transferResult = qwApiService.transferCustomer(qwTransferCustomerParam, param.getCorpId());
+            handleActiveTransferResult(transferResult, qwExternalContact, qwUser, id, param, stats);
+        }
+        saveTransferCrmMsg("在职转接", stats, param.getOperatorCompanyUserId(), param.getCompanyId());
+        return R.ok(buildTransferSummary(stats));
+    }
+
+    private void handleActiveTransferResult(QwTransferCustomerResult transferResult, QwExternalContact qwExternalContact,
+                                            QwUser qwUser, Long id, TransferParam param, TransferBatchStats stats) {
+        String customerName = getTransferCustomerName(qwExternalContact);
+        if (transferResult == null) {
+            stats.recordFailure(customerName, -3);
+            return;
+        }
+        if (transferResult.getErrcode() != 0) {
+            stats.recordFailure(customerName, transferResult.getErrcode());
+            logger.warn("在职转接失败 contactId={}, errcode={}, errmsg={}", id, transferResult.getErrcode(), transferResult.getErrmsg());
+            return;
+        }
+        List<QwCustomer> customers = transferResult.getCustomer();
+        if (customers == null || customers.isEmpty()) {
+            stats.recordFailure(customerName, -3);
+            return;
+        }
+        for (QwCustomer qwCustomer : customers) {
+            if (qwCustomer.getErrcode() == 0) {
+                saveTransferLog(qwExternalContact, qwUser, id, param.getCorpId(), param.getNeedClearTag(), qwCustomer.getExternal_userid());
+                stats.recordSuccess();
+            } else {
+                stats.recordFailure(customerName, qwCustomer.getErrcode());
+                logger.warn("在职转接单个客户失败 contactId={}, externalUserId={}, errcode={}",
+                        id, qwCustomer.getExternal_userid(), qwCustomer.getErrcode());
+            }
+        }
+    }
+
+    private void handleResignedTransferResult(QwTransferCustomerResignedResult transferResult, QwExternalContact qwExternalContact,
+                                              QwUser qwUser, Long id, ResignedTransferParam param, TransferBatchStats stats) {
+        String customerName = getTransferCustomerName(qwExternalContact);
+        if (transferResult == null) {
+            stats.recordFailure(customerName, -3);
+            return;
+        }
+        if (transferResult.getErrcode() != 0) {
+            stats.recordFailure(customerName, transferResult.getErrcode());
+            logger.warn("离职转接失败 contactId={}, errcode={}, errmsg={}", id, transferResult.getErrcode(), transferResult.getErrmsg());
+            return;
+        }
+        List<QwCustomer> customers = transferResult.getCustomer();
+        if (customers == null || customers.isEmpty()) {
+            stats.recordFailure(customerName, -3);
+            return;
+        }
+        for (QwCustomer qwCustomer : customers) {
+            if (qwCustomer.getErrcode() == 0) {
+                saveTransferLog(qwExternalContact, qwUser, id, param.getCorpId(), param.getNeedClearTag(), qwCustomer.getExternal_userid());
+                stats.recordSuccess();
+            } else {
+                stats.recordFailure(customerName, qwCustomer.getErrcode());
+                logger.warn("离职转接单个客户失败 contactId={}, externalUserId={}, errcode={}",
+                        id, qwCustomer.getExternal_userid(), qwCustomer.getErrcode());
+            }
+        }
+    }
+
+    private String getTransferCustomerName(QwExternalContact qwExternalContact) {
+        if (qwExternalContact == null || StringUtils.isEmpty(qwExternalContact.getName())) {
+            return "未知客户";
+        }
+        return qwExternalContact.getName();
+    }
+
+    private void saveTransferLog(QwExternalContact qwExternalContact, QwUser qwUser, Long id, String corpId,
+                                 Integer needClearTag, String externalUserId) {
+        QwExternalContactTransferLog qwExternalContactTransferLog = new QwExternalContactTransferLog();
+        qwExternalContactTransferLog.setExternalContactId(id);
+        qwExternalContactTransferLog.setCompanyUserId(qwExternalContact.getCompanyUserId());
+        qwExternalContactTransferLog.setCreateTime(new Date());
+        qwExternalContactTransferLog.setStatus(2);
+        qwExternalContactTransferLog.setQwUserId(qwUser.getId());
+        qwExternalContactTransferLog.setHandoverUserId(qwExternalContact.getUserId());
+        qwExternalContactTransferLog.setTakeoverUserId(qwUser.getQwUserId());
+        qwExternalContactTransferLog.setCorpId(corpId);
+        qwExternalContactTransferLog.setExternalUserId(externalUserId);
+        qwExternalContactTransferLog.setHandoverQwUserId(qwExternalContact.getQwUserId());
+        qwExternalContactTransferLog.setNeedClearTag(needClearTag);
+        qwExternalContactTransferLog.setFsUserId(qwExternalContact.getFsUserId());
+        qwExternalContactTransferLogMapper.insertQwExternalContactTransferLog(qwExternalContactTransferLog);
+        QwExternalContact qwExternal = new QwExternalContact();
+        qwExternal.setStatus(2);
+        qwExternal.setTransferStatus(2);
+        qwExternal.setId(qwExternalContact.getId());
+        qwExternalContactMapper.updateQwExternalContact(qwExternal);
+    }
+
+    private void saveTransferCrmMsg(String title, TransferBatchStats stats, Long companyUserId, Long companyId) {
+        if (companyUserId == null) {
+            return;
+        }
+        CrmMsg crmMsg = new CrmMsg();
+        crmMsg.setMsgType(4);
+        crmMsg.setTitle(title);
+        crmMsg.setContent(buildTransferSummary(stats));
+        crmMsg.setCompanyId(companyId);
+        crmMsg.setCompanyUserId(companyUserId);
+        crmMsg.setIsRead(0);
+        crmMsgService.insertCrmMsg(crmMsg);
+    }
+
+    private String buildTransferSummary(TransferBatchStats stats) {
+        StringBuilder sb = new StringBuilder();
+        sb.append("转接成功:").append(stats.suc).append(",转接失败:").append(stats.err);
+        if (!stats.failures.isEmpty()) {
+            sb.append("。失败原因:");
+            for (int i = 0; i < stats.failures.size(); i++) {
+                TransferFailureDetail detail = stats.failures.get(i);
+                if (i > 0) {
+                    sb.append("、");
                 }
+                sb.append(detail.getCustomerName()).append("(").append(detail.getCode()).append(")");
             }
+            sb.append(";");
+        }
+        return sb.toString();
+    }
+
+    private static class TransferFailureDetail {
+        private final String customerName;
+        private final int code;
+
+        TransferFailureDetail(String customerName, int code) {
+            this.customerName = customerName;
+            this.code = code;
+        }
+
+        String getCustomerName() {
+            return customerName;
+        }
+
+        int getCode() {
+            return code;
+        }
+    }
+
+    private static class TransferBatchStats {
+        private int suc = 0;
+        private int err = 0;
+        private final List<TransferFailureDetail> failures = new ArrayList<>();
+
+        void recordSuccess() {
+            suc++;
+        }
+
+        void recordFailure(String customerName, int code) {
+            err++;
+            failures.add(new TransferFailureDetail(
+                    StringUtils.isNotEmpty(customerName) ? customerName : "未知客户",
+                    code));
         }
-        return R.ok("接替成功:" + suc + ",接替失败:" + err);
     }
 
     @Override

+ 31 - 0
fs-service/src/main/java/com/fs/qwApi/service/impl/QwApiServiceImpl.java

@@ -1554,6 +1554,10 @@ public class QwApiServiceImpl implements QwApiService {
                             continue;
                         } else {
                             log.error("代理接口请求错误:{}", result.getMsg());
+                            String qwErrorJson = buildQwErrorJsonFromProxyMsg(result.getMsg());
+                            if (qwErrorJson != null) {
+                                return qwErrorJson;
+                            }
                             return null;
                         }
                     }
@@ -1601,6 +1605,33 @@ public class QwApiServiceImpl implements QwApiService {
         return null;
     }
 
+    private Integer parseQwErrcodeFromProxyMsg(String msg) {
+        if (StringUtils.isEmpty(msg)) {
+            return null;
+        }
+        java.util.regex.Matcher matcher = java.util.regex.Pattern.compile("code[::](\\d+)").matcher(msg);
+        if (matcher.find()) {
+            return Integer.parseInt(matcher.group(1));
+        }
+        return null;
+    }
+
+    private String buildQwErrorJsonFromProxyMsg(String msg) {
+        Integer errcode = parseQwErrcodeFromProxyMsg(msg);
+        if (errcode == null) {
+            return null;
+        }
+        JSONObject json = new JSONObject();
+        json.put("errcode", errcode);
+        int idx = msg.indexOf("msg:");
+        if (idx < 0) {
+            idx = msg.indexOf("msg:");
+        }
+        String errmsg = idx >= 0 ? msg.substring(idx + 4).trim() : msg;
+        json.put("errmsg", errmsg);
+        return json.toJSONString();
+    }
+
 
     public String sendPost(String url,Object param,String corpId){