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