Kaynağa Gözat

禁用以前的任务

吴树波 4 gün önce
ebeveyn
işleme
68f3161454

+ 27 - 16
fs-service/src/main/java/com/fs/company/service/impl/CompanyVoiceRoboticServiceImpl.java

@@ -298,8 +298,11 @@ public class CompanyVoiceRoboticServiceImpl extends ServiceImpl<CompanyVoiceRobo
      * @return 结果
      */
     @Override
-    public int deleteCompanyVoiceRoboticByIds(Long[] ids)
-    {
+    public int deleteCompanyVoiceRoboticByIds(Long[] ids){
+        List<Long> idList = Arrays.asList(ids);
+        companyWxClientServiceImpl.remove(new QueryWrapper<CompanyWxClient>().in("robotic_id", idList));
+        companyVoiceRoboticWxService.remove(new QueryWrapper<CompanyVoiceRoboticWx>().in("robotic_id", idList));
+        companyVoiceRoboticCalleesService.remove(new QueryWrapper<CompanyVoiceRoboticCallees>().in("robotic_id", idList));
         return companyVoiceRoboticMapper.deleteCompanyVoiceRoboticByIds(ids);
     }
 
@@ -334,11 +337,15 @@ public class CompanyVoiceRoboticServiceImpl extends ServiceImpl<CompanyVoiceRobo
         if("pushDialogContent".equals(notify.getType())) pushDialogContent(result);
         if("billing".equals(notify.getType())) pushBilling(result);
 //        // 是否全部回调完毕
-//        CompanyVoiceRoboticCallees callee = getResultCalleeInfo(notify);
-//        long count = companyVoiceRoboticCalleesMapper.countByRoboticIdNotUuid(callee.getRoboticId());
-//        if(count == 0){
+        CompanyVoiceRoboticCallees callee = getResultCalleeInfo(notify);
+        long count = companyVoiceRoboticCalleesMapper.countByRoboticIdNotUuid(callee.getRoboticId());
+        if(count == 0){
 //            new Thread(() -> dispenseWx(callee.getRoboticId())).start();
-//        }
+            CompanyVoiceRobotic robotic = getById(callee.getRoboticId());
+            robotic.setRunTaskFlow((StringUtils.isEmpty(robotic.getRunTaskFlow()) ? "" : robotic.getRunTaskFlow() + ",") + Constants.CELL_PHONE);
+            companyVoiceRoboticMapper.updateById(robotic);
+            redisCache.deleteObject(Constants.TASK_ID + robotic.getId());
+        }
     }
 
     public void pushDialogContent(PushIIntentionResult result){
@@ -359,20 +366,23 @@ public class CompanyVoiceRoboticServiceImpl extends ServiceImpl<CompanyVoiceRobo
         crmCustomer.setIntention(intention);
         crmCustomerMapper.updateById(crmCustomer);
         List<CompanyVoiceRoboticWx> roboticWxList = companyVoiceRoboticWxMapper.selectByRoboticId(callee.getRoboticId(), intention);
+        List<CompanyWxAccount> accountList = new ArrayList<>(companyWxAccountService.listByIds(PubFun.listToNewList(roboticWxList, CompanyVoiceRoboticWx::getAccountId)));
+        Map<Long, CompanyWxAccount> accountMap = PubFun.listToMapByGroupObject(accountList, CompanyWxAccount::getId);
+        roboticWxList.forEach(e -> e.setAccount(accountMap.get(e.getAccountId())));
         CompanyWxClient companyWxClient = companyWxClientServiceImpl.getOne(new QueryWrapper<CompanyWxClient>().eq("robotic_id", callee.getRoboticId()).eq("customer_id", callee.getUserId()));
         if(companyWxClient == null){
             companyWxClient = new CompanyWxClient();
-            // 任务ID
-            companyWxClient.setRoboticId(callee.getRoboticId());
-            // 客户名称
-            companyWxClient.setNickName(callee.getUserName());
-            // 手机号
-            companyWxClient.setPhone(callee.getPhone());
-            // 微信号
-            companyWxClient.setCustomerId(callee.getUserId());
-            // 意向
-            companyWxClient.setIntention(intention);
         }
+        // 任务ID
+        companyWxClient.setRoboticId(callee.getRoboticId());
+        // 客户名称
+        companyWxClient.setNickName(callee.getUserName());
+        // 手机号
+        companyWxClient.setPhone(callee.getPhone());
+        // 微信号
+        companyWxClient.setCustomerId(callee.getUserId());
+        // 意向
+        companyWxClient.setIntention(intention);
         bindCompany(companyWxClient, roboticWxList);
         companyWxClientServiceImpl.saveOrUpdate(companyWxClient);
     }
@@ -508,6 +518,7 @@ public class CompanyVoiceRoboticServiceImpl extends ServiceImpl<CompanyVoiceRobo
             account.setId(companyVoiceRoboticWx.getAccount().getId());
             account.setAllocateNum(companyVoiceRoboticWx.getAccount().getAllocateNum() + 1);
             companyWxAccountService.updateById(account);
+            companyVoiceRoboticWxService.updateById(companyVoiceRoboticWx);
         }
     }
 }

+ 2 - 1
fs-service/src/main/resources/mapper/company/CompanyVoiceRoboticWxMapper.xml

@@ -43,7 +43,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         left join company_wx_dialog c on a.wx_dialog_id = c.id
         where a.robotic_id = #{id}
         <if test="intention != null and intention != ''">
-            a.intention = #{intention}
+            and a.intention = #{intention}
         </if>
     </select>
 
@@ -104,6 +104,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         select a.*
         from company_voice_robotic_wx a
         where a.robotic_id = #{id}
+        group by a.account_id
     </select>
     
 </mapper>

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

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

+ 52 - 43
fs-wx-task/src/main/java/com/fs/app/service/WxTaskService.java

@@ -11,10 +11,7 @@ import com.fs.common.core.redis.RedisCacheT;
 import com.fs.common.utils.PubFun;
 import com.fs.common.utils.StringUtils;
 import com.fs.company.domain.*;
-import com.fs.company.mapper.CompanyVoiceRoboticCalleesMapper;
-import com.fs.company.mapper.CompanyVoiceRoboticMapper;
-import com.fs.company.mapper.CompanyVoiceRoboticWxMapper;
-import com.fs.company.mapper.CompanyWxClientMapper;
+import com.fs.company.mapper.*;
 import com.fs.company.service.ICompanyVoiceRoboticService;
 import com.fs.company.service.ICompanyWxAccountService;
 import com.fs.company.service.ICompanyWxClientService;
@@ -61,6 +58,7 @@ public class WxTaskService {
     private final CompanyVoiceRoboticWxMapper companyVoiceRoboticWxMapper;
     private final CompanyWxClientMapper companyWxClientMapper;
     private final CompanyVoiceRoboticWxServiceImpl companyVoiceRoboticWxServiceImpl;
+    private final CompanyWxAccountMapper companyWxAccountMapper;
     private RedissonClient redissonClient;
 
     private final ExecutorService cidExcutor = new ThreadPoolExecutor(
@@ -214,42 +212,43 @@ public class WxTaskService {
                     case Constants.ADD_WX:
                         //第一步是调用添加微信步骤
                         if(StringUtils.isBlank(e.getRunTaskFlow()) && StringUtils.isNotBlank(e.getTaskFlow()) && e.getTaskFlow().startsWith(Constants.ADD_WX)){
-                            CompletableFuture.supplyAsync(()->{
-                                //分配个微账号
-                                return allocateWx(e);
-                            },cidExcutor).thenApply(result->{
-                                //逐条添加微信,且判定是否任务
-                                for (CompanyWxClient client : result) {
-                                    ArrayList<Long> addWxParamList = new ArrayList<>();
-                                    addWxParamList.add(client.getAccountId());
-                                    //添加微信 todo 暂时注释掉 不在添加微信 发布时需要开放
-//                                    addWx(addWxParamList);
-                                    //判定任务是否有加微后等待时间设定,加入到待执行任务redis
-                                    if(null != e.getAddWxTime() && e.getAddWxTime() > 0){
-                                        long endT = System.currentTimeMillis() + e.getAddWxTime() * 60 * 1000;
-                                        //通过任务+用户id找到calles记录
-                                        CompanyVoiceRoboticCallees callees = companyVoiceRoboticCalleesMapper.getCalleesByUserIdAndTaskId(client.getCustomerId(), e.getId());
-                                        if(null != callees && !ObjectUtil.isEmpty(callees)){
-                                            Long calleesId = callees.getId();
-                                            StringBuilder sb = new StringBuilder(Constants.CID_NEXT_TASK_ID).append(e.getId()).append(":").append(calleesId);
-                                            redisCache.setCacheObject(sb.toString(), String.valueOf(endT),e.getAddWxTime() + 5, TimeUnit.MINUTES);
-                                            if(StringUtils.isNotBlank(callees.getRunTaskFlow())){
-                                                callees.setRunTaskFlow(callees.getRunTaskFlow() + "," + Constants.ADD_WX);
-                                            }else{
-                                                callees.setRunTaskFlow(Constants.ADD_WX);
-                                            }
-                                            companyVoiceRoboticCalleesMapper.updateById(callees);
-                                        }
-                                    }
-                                    e.setRunTaskFlow(Constants.ADD_WX);
-                                    //更新任务 已跑任务值
-                                    companyVoiceRoboticMapper.updateById(e);
-                                }
-                                return null;
-                            }).exceptionally(ex -> {
-                                log.error("ROBOTIC-ID:{},任务执行异常:{}", e.getId(), e.getNowTask(), ex);
-                                return null;
-                            });
+                            allocateWx(e);
+//                            CompletableFuture.supplyAsync(()->{
+//                                //分配个微账号
+//                                return allocateWx(e);
+//                            },cidExcutor).thenApply(result->{
+//                                //逐条添加微信,且判定是否任务
+//                                for (CompanyWxClient client : result) {
+//                                    ArrayList<Long> addWxParamList = new ArrayList<>();
+//                                    addWxParamList.add(client.getAccountId());
+//                                    //添加微信 todo 暂时注释掉 不在添加微信 发布时需要开放
+////                                    addWx(addWxParamList);
+//                                    //判定任务是否有加微后等待时间设定,加入到待执行任务redis
+//                                    if(null != e.getAddWxTime() && e.getAddWxTime() > 0){
+//                                        long endT = System.currentTimeMillis() + e.getAddWxTime() * 60 * 1000;
+//                                        //通过任务+用户id找到calles记录
+//                                        CompanyVoiceRoboticCallees callees = companyVoiceRoboticCalleesMapper.getCalleesByUserIdAndTaskId(client.getCustomerId(), e.getId());
+//                                        if(null != callees && !ObjectUtil.isEmpty(callees)){
+//                                            Long calleesId = callees.getId();
+//                                            StringBuilder sb = new StringBuilder(Constants.CID_NEXT_TASK_ID).append(e.getId()).append(":").append(calleesId);
+//                                            redisCache.setCacheObject(sb.toString(), String.valueOf(endT),e.getAddWxTime() + 5, TimeUnit.MINUTES);
+//                                            if(StringUtils.isNotBlank(callees.getRunTaskFlow())){
+//                                                callees.setRunTaskFlow(callees.getRunTaskFlow() + "," + Constants.ADD_WX);
+//                                            }else{
+//                                                callees.setRunTaskFlow(Constants.ADD_WX);
+//                                            }
+//                                            companyVoiceRoboticCalleesMapper.updateById(callees);
+//                                        }
+//                                    }
+//                                    e.setRunTaskFlow(Constants.ADD_WX);
+//                                    //更新任务 已跑任务值
+//                                    companyVoiceRoboticMapper.updateById(e);
+//                                }
+//                                return null;
+//                            }).exceptionally(ex -> {
+//                                log.error("ROBOTIC-ID:{},任务执行异常:{}", e.getId(), e.getNowTask(), ex);
+//                                return null;
+//                            });
                         }else{
                             //todo 接入原有加微逻辑
                         }
@@ -275,6 +274,8 @@ public class WxTaskService {
         List<CompanyWxClient> resArr = new ArrayList<>();
         //找到任务指定的微信用户
         List<CompanyVoiceRoboticWx> companyVoiceRoboticWxes = companyVoiceRoboticWxMapper.selectByRoboticIdWithGroupBy(robotic.getId());
+        List<CompanyWxAccount> accountIds = companyWxAccountMapper.selectBatchIds(PubFun.listToNewList(companyVoiceRoboticWxes, CompanyVoiceRoboticWx::getAccountId));
+        Map<Long, CompanyWxAccount> accountMap = PubFun.listToMapByGroupObject(accountIds, CompanyWxAccount::getId);
         Integer totalSize = 0;
         if (null != companyVoiceRoboticWxes && !companyVoiceRoboticWxes.isEmpty()) {
             totalSize = companyVoiceRoboticWxes.size();
@@ -283,6 +284,9 @@ public class WxTaskService {
             throw new RuntimeException("没有找到任务指定的微信用户");
         }
         List<CompanyWxClient> companyWxClients = companyWxClientMapper.selectListByRoboticId(robotic.getId());
+        List<Long> ids = PubFun.listToNewList(companyWxClients, CompanyWxClient::getCustomerId);
+        List<CrmCustomer> crmCustomerList = crmCustomerService.selectCrmCustomerListByIds(ids.stream().map(e -> e + "").collect(Collectors.joining(",")));
+        Map<Long, CrmCustomer> customerMap = PubFun.listToMapByGroupObject(crmCustomerList, CrmCustomer::getCustomerId);
         if (null == companyWxClients || companyWxClients.isEmpty()) {
             log.error("分配个微空,数据异常");
             throw new RuntimeException("没有找到需要分配微信用户");
@@ -291,11 +295,16 @@ public class WxTaskService {
         List<CompanyVoiceRoboticWx> updateCompanyVoiceRoboticWxList = new ArrayList<>();
         //分配客户
         for (CompanyWxClient companyWxClient : companyWxClients) {
-            CompanyVoiceRoboticWx wx = new CompanyVoiceRoboticWx();
-            wx = companyVoiceRoboticWxes.get(allocateIndex++ % totalSize);
+            new CompanyVoiceRoboticWx();
+            CompanyVoiceRoboticWx wx = companyVoiceRoboticWxes.get(allocateIndex++ % totalSize);
+            CompanyWxAccount account = accountMap.get(wx.getAccountId());
+            CrmCustomer crmCustomer = customerMap.get(companyWxClient.getCustomerId());
             companyWxClient.setRoboticWxId(wx.getId());
             companyWxClient.setAccountId(wx.getAccountId());
             companyWxClient.setDialogId(wx.getWxDialogId());
+            companyWxClient.setCompanyUserId(account.getCompanyUserId());
+            companyWxClient.setNickName(crmCustomer.getCustomerName());
+            companyWxClient.setPhone(crmCustomer.getMobile());
             resArr.add(companyWxClient);
             if (wx.getNum() == null) {
                 wx.setNum(1);
@@ -399,7 +408,7 @@ public class WxTaskService {
             log.info("===========CID扫描执行下一个任务任务执行开始===========");
             long l = System.currentTimeMillis();
             Collection<String> keys = redisCache.keys(Constants.CID_NEXT_TASK_ID + "*");
-            keys.forEach(key -> {
+            keys.parallelStream().forEach(key -> {
                 String[] keyArr = key.split(":");
                 String taskId = keyArr[keyArr.length - 2];
                 String callerId = keyArr[keyArr.length - 1];