Bladeren bron

群执行优化

吴树波 1 week geleden
bovenliggende
commit
3d209f626d

+ 16 - 0
fs-common/src/main/java/com/fs/common/constant/Constants.java

@@ -172,4 +172,20 @@ public class Constants
     public static final String LOOKUP_LDAP = "ldap://";
 
     public static final Integer PAGE_SIZE =10;
+    /**
+     * CID 执行任务ID
+     */
+    public static final String TASK_ID = "cid:task:";
+    /**
+     * 外呼机器人打电话
+     */
+    public static final String CELL_PHONE = "cellPhone";
+    /**
+     * 添加微信
+     */
+    public static final String ADD_WX = "addWx";
+    /**
+     * 发送短信
+     */
+    public static final String SEND_MSG = "sendMsg";
 }

+ 2 - 1
fs-service/src/main/java/com/fs/company/service/ICompanyVoiceRoboticService.java

@@ -2,6 +2,7 @@ package com.fs.company.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fs.aicall.domain.apiresult.PushIIntentionResult;
+import com.fs.aicall.domain.result.CalltaskcreateaiCustomizeResult;
 import com.fs.company.domain.CompanyVoiceRobotic;
 import com.fs.company.vo.AddWxClientVo;
 import com.fs.company.vo.CompanyVoiceRoboticQwUserListVo;
@@ -39,6 +40,7 @@ public interface ICompanyVoiceRoboticService extends IService<CompanyVoiceRoboti
      * @return 结果
      */
     public int insertCompanyVoiceRobotic(CompanyVoiceRobotic companyVoiceRobotic);
+    CalltaskcreateaiCustomizeResult addTask(CompanyVoiceRobotic companyVoiceRobotic);
 
     /**
      * 修改机器人外呼任务
@@ -69,7 +71,6 @@ public interface ICompanyVoiceRoboticService extends IService<CompanyVoiceRoboti
 
     void callerResult(PushIIntentionResult result);
 
-    void test(Long id);
     void dispenseWx(Long id);
 
     void addCompany(AddWxClientVo vo);

+ 8 - 20
fs-service/src/main/java/com/fs/company/service/impl/CompanyVoiceRoboticServiceImpl.java

@@ -13,8 +13,10 @@ import com.fs.aicall.domain.param.CalltaskcreateaiCustomizeDomain;
 import com.fs.aicall.domain.result.CalltaskcreateaiCustomizeResult;
 import com.fs.aicall.service.AiCallService;
 import com.fs.common.annotation.DataScope;
+import com.fs.common.constant.Constants;
 import com.fs.common.core.domain.entity.SysDictData;
 import com.fs.common.core.domain.model.LoginUser;
+import com.fs.common.core.redis.RedisCacheT;
 import com.fs.common.exception.base.BaseException;
 import com.fs.common.utils.*;
 import com.fs.company.domain.*;
@@ -39,6 +41,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 
@@ -62,6 +65,7 @@ public class CompanyVoiceRoboticServiceImpl extends ServiceImpl<CompanyVoiceRobo
     private final ICompanyWxAccountService companyWxAccountService;
 
     private final CompanyVoiceRoboticWxMapper companyVoiceRoboticWxMapper;
+    private final RedisCacheT<Long> redisCache;
 
     private final CompanyVoiceRoboticWxServiceImpl companyVoiceRoboticWxService;
 
@@ -268,29 +272,10 @@ public class CompanyVoiceRoboticServiceImpl extends ServiceImpl<CompanyVoiceRobo
         return callee;
     }
 
-    @Override
-    public void test(Long id) {
-        List<String> list = Arrays.asList("A", "B", "C", "D", "E", "F");
-        List<CompanyVoiceRoboticCallees> calleesList = companyVoiceRoboticCalleesMapper.selectByRoboticId(id);
-        Map<Long, CompanyVoiceRoboticCallees> callMap = PubFun.listToMapByGroupObject(calleesList, CompanyVoiceRoboticCallees::getUserId);
-
-        List<CrmCustomer> customerList = crmCustomerMapper.selectList(new QueryWrapper<CrmCustomer>().in("customer_id", PubFun.listToNewList(calleesList, CompanyVoiceRoboticCallees::getUserId)));
-        customerList.forEach(e -> {
-            CompanyVoiceRoboticCallees companyVoiceRoboticCallees = callMap.get(e.getCustomerId());
-            Collections.shuffle(list);
-            e.setIntention(list.get(0));
-            companyVoiceRoboticCallees.setIntention(e.getIntention());
-            companyVoiceRoboticCallees.setUuid(IdUtil.randomUUID());
-        });
-        companyVoiceRoboticCalleesService.updateBatchById(calleesList);
-        crmCustomerService.updateBatchById(customerList);
-
-    }
-
     @Override
     public void dispenseWx(Long roboticId){
         // 任务详情
-//        CompanyVoiceRobotic robotic = getById(roboticId);
+        CompanyVoiceRobotic robotic = getById(roboticId);
         // 拨打电话列表
         List<CompanyVoiceRoboticCallees> calleesList = companyVoiceRoboticCalleesMapper.selectByRoboticId(roboticId);
         if(calleesList.isEmpty()) return;
@@ -333,6 +318,9 @@ public class CompanyVoiceRoboticServiceImpl extends ServiceImpl<CompanyVoiceRobo
         }).collect(Collectors.toList());
         companyVoiceRoboticWxService.updateBatchById(roboticWxList);
         companyWxClientServiceImpl.saveBatch(collect);
+        robotic.setRunTaskFlow((StringUtils.isEmpty(robotic.getRunTaskFlow()) ? "" : robotic.getRunTaskFlow() + ",") + Constants.CELL_PHONE);
+        companyVoiceRoboticMapper.updateById(robotic);
+        redisCache.deleteObject(Constants.TASK_ID + robotic.getId());
     }
 
     @Override

+ 6 - 5
fs-service/src/main/java/com/fs/wxcid/service/FriendService.java

@@ -7,7 +7,6 @@ import com.fs.wxcid.dto.friend.*;
 import com.fs.wxcid.vo.AddContactVo;
 import com.fs.wxcid.vo.VerifyUserVo;
 
-import javax.validation.constraints.NotBlank;
 import java.util.List;
 
 /**
@@ -55,9 +54,11 @@ public interface FriendService {
 
     /**
      * 添加联系人
-     * @param id     账号ID
-     * @param mobile 手机号
-     * @param txt 招呼内容
+     *
+     * @param id       账号ID
+     * @param mobile   手机号
+     * @param txt      招呼内容
+     * @param clientId
      */
-    AddContactVo addContact(Long id, String mobile, String txt);
+    AddContactVo addContact(Long id, String mobile, String txt, Long clientId);
 }

+ 2 - 2
fs-service/src/main/java/com/fs/wxcid/service/impl/FriendServiceImpl.java

@@ -84,7 +84,7 @@ public class FriendServiceImpl implements FriendService {
     }
 
     @Override
-    public AddContactVo addContact(Long id, String mobile, String txt) {
+    public AddContactVo addContact(Long id, String mobile, String txt, Long clientId) {
         AddContactVo resultVo = new AddContactVo();
         try {
             SearchContactResponse searchContactResponse = searchContact(id, mobile);
@@ -103,7 +103,7 @@ public class FriendServiceImpl implements FriendService {
             resultVo.setSuccess(response.getRet() == 0);
             return resultVo;
         }catch (Exception e){
-            log.error("添加好友失败:{}-手机号:{}", id, mobile, e);
+            log.error("CLIENT-ID:{}添加好友失败:{}-手机号:{}", clientId, id, mobile, e);
             return  resultVo;
         }
     }

+ 37 - 26
fs-wx-task/src/main/java/com/fs/app/service/WxTaskService.java

@@ -4,6 +4,7 @@ import cn.hutool.core.util.RandomUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.fs.common.constant.Constants;
 import com.fs.common.core.redis.RedisCacheT;
 import com.fs.common.utils.PubFun;
 import com.fs.common.utils.StringUtils;
@@ -26,7 +27,6 @@ import com.fs.wxcid.service.FriendService;
 import com.fs.wxcid.vo.AddContactVo;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
@@ -52,26 +52,25 @@ public class WxTaskService {
     private final ICrmCustomerService crmCustomerService;
     private final FriendService friendService;
     private final CompanyVoiceRoboticMapper companyVoiceRoboticMapper;
-    private final RedisCacheT<Long> redisCache;
-
-    private static final String TASK_ID = "cid:task:";
-    private static final String CELL_PHONE = "cellPhone";
-    private static final String ADD_WX = "addWx";
-    private static final String SEND_MSG = "sendMsg";
+    private final RedisCacheT<String> redisCache;
 
     public void addWx(List<Long> accountIdList) {
+        log.info("==========执行加微信任务开始==========");
         String json = sysConfigService.selectConfigByKey("wx.config");
         WxConfig config = JSONUtil.toBean(json, WxConfig.class);
         // 需要添加微信的列表
         List<CompanyWxClient> list = companyWxClientService.getAddWxList(accountIdList);
+        log.info("需要添加微信的数量:{}", list.size());
         if(list.isEmpty()) return;
         List<CompanyWxClient> addList = new ArrayList<>();
         Map<Long, CompanyWxClient> clientMap = PubFun.listToMapByGroupObject(list, CompanyWxClient::getAccountId);
         List<CompanyWxAccount> accountList = new ArrayList<>(companyWxAccountService.listByIds(clientMap.keySet()));
+        log.info("查询加微的账号数量:{}", list.size());
         List<CompanyWxAccount> addAccountList = accountList.stream().filter(e -> {
             int newAddWxMinute = RandomUtil.randomInt(config.getNewAccountAddWxMin(), config.getNewAccountAddWxMax());
             int addWxMinute = RandomUtil.randomInt(config.getAccountAddWxMin(), config.getAccountAddWxMax());
             if (e.getLastAddWxTime() == null) {
+                log.info("加微时间为空,可以加微:{}", e.getWxNickName());
                 return true;
             }
             int minute = addWxMinute;
@@ -79,24 +78,35 @@ public class WxTaskService {
                 minute = newAddWxMinute;
             }
             long until = e.getLastAddWxTime().until(LocalDateTime.now(), ChronoUnit.MINUTES);
+            log.info("判断{}是否达到最低加微时间:上次加微时间:{},时间间隔:{},当前时间:{}", e.getWxNickName(), e.getLastAddWxTime(), until, LocalDateTime.now());
             return until > minute;
         }).collect(Collectors.toList());
+        log.info("实际加微的账号数量:{}", addAccountList.size());
         addAccountList.forEach(e -> {
             CompanyWxClient client = clientMap.get(e.getId());
             if(client != null){
-                CompanyWxDialog dialog = companyWxDialogService.getById(client.getDialogId());
-                CrmCustomer crmCustomer = crmCustomerService.selectCrmCustomerById(client.getCustomerId());
-                String newTxt = objectPlaceholderResolver.resolvePlaceholders(crmCustomer, dialog.getTemplateDetails());
-                AddContactVo vo = friendService.addContact(e.getId(), crmCustomer.getMobile(), newTxt);
-                if(vo.isSuccess()){
-                    e.setLastAddWxTime(LocalDateTime.now());
-                    e.setIsAddNum(e.getIsAddNum() + 1);
-                    client.setIsAdd(2);
-                    client.setAddTime(LocalDateTime.now());
-                    client.setWxV3(vo.getV3());
-                    client.setWxV4(vo.getV4());
-                    addList.add(client);
+                String task = redisCache.getCacheObject(Constants.TASK_ID + client.getRoboticId());
+                log.info("ROBOTIC-ID:{},CLIENT-ID:{},当前任务执行状态:{}", client.getRoboticId(), client.getId(), task);
+                if(StringUtils.isNotEmpty(task) && Constants.ADD_WX.equals(task)){
+                    CompanyWxDialog dialog = companyWxDialogService.getById(client.getDialogId());
+                    CrmCustomer crmCustomer = crmCustomerService.selectCrmCustomerById(client.getCustomerId());
+                    String newTxt = objectPlaceholderResolver.resolvePlaceholders(crmCustomer, dialog.getTemplateDetails());
+                    AddContactVo vo = friendService.addContact(e.getId(), crmCustomer.getMobile(), newTxt, client.getId());
+                    log.info("ROBOTIC-ID:{},CLIENT-ID:{},执行加微:{},客户:{}-{},使用话术:{}", client.getRoboticId(), client.getId(), e.getId(), client.getCustomerId(), crmCustomer.getCustomerName(), dialog.getName());
+                    if(vo.isSuccess()){
+                        e.setLastAddWxTime(LocalDateTime.now());
+                        e.setIsAddNum(e.getIsAddNum() + 1);
+                        client.setIsAdd(2);
+                        client.setAddTime(LocalDateTime.now());
+                        client.setWxV3(vo.getV3());
+                        client.setWxV4(vo.getV4());
+                        addList.add(client);
+                    }else{
+                        log.error("ROBOTIC-ID:{},加微失败:{}", client.getRoboticId(), vo);
+                    }
                 }
+            }else{
+                log.error("当前账号暂无需要添加微信:{}-{}", e.getId(), e.getWxNickName());
             }
         });
         if(!addList.isEmpty()){
@@ -167,27 +177,28 @@ public class WxTaskService {
             e.setNowTask(taskFlow.get(0));
             log.info("ROBOTIC-ID:{},当前需要执行任务:{}", e.getId(), e.getNowTask());
         });
-        Function<CompanyVoiceRobotic, String> getKey = e -> TASK_ID + e.getId();
+        Function<CompanyVoiceRobotic, String> getKey = e -> Constants.TASK_ID + e.getId();
         waitList.forEach(e -> {
             if(redisCache.getCacheObject(getKey.apply(e)) != null){
                 log.info("ROBOTIC-ID:{},已有正在执行任务", e.getId());
                 return;
             }
-            redisCache.setCacheObject(getKey.apply(e), e.getTaskId());
+            redisCache.setCacheObject(getKey.apply(e), e.getNowTask());
             try {
                 switch (e.getNowTask()) {
-                    case CELL_PHONE:
-
+                    case Constants.CELL_PHONE:
+                        companyVoiceRoboticService.addTask(e);
+                        log.info("ROBOTIC-ID:{},打电话任务创建完成", e.getId());
                         break;
-                    case ADD_WX:
+                    case Constants.ADD_WX:
 
                         break;
-                    case SEND_MSG:
+                    case Constants.SEND_MSG:
 
                         break;
                 }
             }catch (Exception exception){
-                log.error("ROBOTIC-ID:{},任务执行失败", e.getId(), exception);
+                log.error("ROBOTIC-ID:{},任务执行失败:{}", e.getId(), e.getNowTask(), exception);
                 redisCache.deleteObject(getKey.apply(e));
             }
         });