Parcourir la source

外呼流程优化

吴树波 il y a 2 semaines
Parent
commit
31b3254da7

+ 2 - 0
fs-service/src/main/java/com/fs/company/domain/CompanyVoiceRobotic.java

@@ -110,6 +110,8 @@ public class CompanyVoiceRobotic {
     @TableField(exist = false)
     private List<String> userIds;
     @TableField(exist = false)
+    private String nowTask;
+    @TableField(exist = false)
     private List<RoboticWxVo> qwUserList;
 
     @TableField(exist = false)

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

@@ -1,5 +1,6 @@
 package com.fs.company.service;
 
+import com.baomidou.mybatisplus.extension.service.IService;
 import com.fs.aicall.domain.apiresult.PushIIntentionResult;
 import com.fs.company.domain.CompanyVoiceRobotic;
 import com.fs.company.vo.AddWxClientVo;
@@ -13,8 +14,7 @@ import java.util.List;
  * @author fs
  * @date 2024-12-04
  */
-public interface ICompanyVoiceRoboticService 
-{
+public interface ICompanyVoiceRoboticService extends IService<CompanyVoiceRobotic> {
     /**
      * 查询机器人外呼任务
      * 

+ 1 - 1
fs-wx-task/src/main/java/com/fs/FsWxTaskApplication.java

@@ -13,7 +13,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
 @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
 @EnableTransactionManagement
 @EnableAsync
-@EnableScheduling
+//@EnableScheduling
 public class FsWxTaskApplication
 {
     public static void main(String[] args){

+ 4 - 0
fs-wx-task/src/main/java/com/fs/app/controller/CommonController.java

@@ -42,5 +42,9 @@ public class CommonController {
     public void isCheckContact(String formUser, Long accountId){
         companyWxAccountService.isCheckContact(formUser, accountId);
     }
+    @GetMapping("cellRun")
+    public void cellRun(){
+        taskService.cellRun();
+    }
 
 }

+ 58 - 0
fs-wx-task/src/main/java/com/fs/app/service/WxTaskService.java

@@ -3,10 +3,15 @@ package com.fs.app.service;
 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.core.redis.RedisCacheT;
 import com.fs.common.utils.PubFun;
+import com.fs.common.utils.StringUtils;
+import com.fs.company.domain.CompanyVoiceRobotic;
 import com.fs.company.domain.CompanyWxAccount;
 import com.fs.company.domain.CompanyWxClient;
 import com.fs.company.domain.CompanyWxDialog;
+import com.fs.company.mapper.CompanyVoiceRoboticMapper;
 import com.fs.company.service.ICompanyVoiceRoboticService;
 import com.fs.company.service.ICompanyWxAccountService;
 import com.fs.company.service.ICompanyWxClientService;
@@ -27,8 +32,10 @@ import org.springframework.stereotype.Service;
 import java.time.LocalDateTime;
 import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 @Slf4j
@@ -44,6 +51,13 @@ public class WxTaskService {
     private final ObjectPlaceholderResolver objectPlaceholderResolver;
     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";
 
     public void addWx(List<Long> accountIdList) {
         String json = sysConfigService.selectConfigByKey("wx.config");
@@ -131,6 +145,50 @@ public class WxTaskService {
     }
 
     public void cellRun() {
+        log.info("===========CID任务开始执行===========");
+        List<CompanyVoiceRobotic> list = companyVoiceRoboticMapper.selectList(new QueryWrapper<CompanyVoiceRobotic>().eq("task_status", 1));
+        List<CompanyVoiceRobotic> successList = list.stream().filter(e -> StringUtils.isNotEmpty(e.getRunTaskFlow()) && e.getTaskFlow().length() == e.getRunTaskFlow().length()).collect(Collectors.toList());
+        List<CompanyVoiceRobotic> waitList = list.stream().filter(e -> StringUtils.isEmpty(e.getRunTaskFlow()) || e.getTaskFlow().length() != e.getRunTaskFlow().length()).collect(Collectors.toList());
+        successList.forEach(e -> e.setTaskStatus(3));
+        if(!successList.isEmpty()){
+            log.info("已经完成任务:{}", successList.size());
+            companyVoiceRoboticService.updateBatchById(successList);
+        }
+        waitList.forEach(e -> {
+            log.info("ROBOTIC-ID:{},开始执行小任务:{}", e.getId(), e.getName());
+            List<String> taskFlow = new ArrayList<>(Arrays.asList(e.getTaskFlow().split(",")));
+            log.info("ROBOTIC-ID:{},当前任务顺序:{}", e.getId(), e.getTaskFlow());
+            String runTaskFlow = e.getRunTaskFlow();
+            log.info("ROBOTIC-ID:{},已有任务:{}", e.getId(), e.getRunTaskFlow());
+            if(StringUtils.isNotEmpty(runTaskFlow)){
+                Arrays.asList(runTaskFlow.split(",")).forEach(taskFlow::remove);
+            }
+            log.info("ROBOTIC-ID:{},当前还剩余任务:{}", e.getId(), taskFlow);
+            e.setNowTask(taskFlow.get(0));
+            log.info("ROBOTIC-ID:{},当前需要执行任务:{}", e.getId(), e.getNowTask());
+        });
+        Function<CompanyVoiceRobotic, String> getKey = e -> 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());
+            try {
+                switch (e.getNowTask()) {
+                    case CELL_PHONE:
 
+                        break;
+                    case ADD_WX:
+                        break;
+                    case SEND_MSG:
+                        break;
+                }
+            }catch (Exception exception){
+                log.error("ROBOTIC-ID:{},任务执行失败", e.getId(), exception);
+                redisCache.deleteObject(getKey.apply(e));
+            }
+        });
+        log.info("===========CID任务执行完成===========");
     }
 }

+ 1 - 1
fs-wx-task/src/main/java/com/fs/app/task/WxTask.java

@@ -33,7 +33,7 @@ public class WxTask {
         taskService.initAccountMsg();
     }
 
-    @Scheduled(cron = "0 10 * * * ?")
+    @Scheduled(cron = "0 0/10 * * * ?")
     public void cellRun() {
         taskService.cellRun();
     }