| 
					
				 | 
			
			
				@@ -0,0 +1,472 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+package com.fs.aiob.service.impl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.hutool.core.util.IdUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.hutool.json.JSONUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.alibaba.fastjson.JSON; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.aicall.params.AiobImportPhoneParam; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.aicall.utils.AiobApiUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.aicall.utils.AiobPhoneEncryption; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.aicall.vo.AiobCalleData; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.aicall.vo.AiobImportPhoneVo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.aicall.vo.AiobTaskData; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.aiob.domain.AiobBaiduEncryption; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.aiob.domain.AiobBaiduTask; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.aiob.mapper.AiobBaiduTaskMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.aiob.service.IAiobBaiduEncryptionService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.aiob.service.IAiobBaiduTaskService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.common.core.domain.BaseEntityTow; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.common.exception.base.BaseException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.common.service.ISmsService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.common.utils.DateUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.common.utils.PubFun; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.common.utils.StringUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.company.domain.CompanySmsTemp; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.company.domain.CompanyVoiceRoboticCallees; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.company.domain.CompanyVoiceRoboticWx; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.company.domain.CompanyWxClient; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.company.mapper.CompanyVoiceRoboticCalleesMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.company.mapper.CompanyVoiceRoboticWxMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.company.service.ICompanySmsTempService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.company.service.ICompanyVoiceRoboticCalleesService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.company.service.ICompanyVoiceRoboticWxService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.company.service.impl.CompanyWxClientServiceImpl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.crm.domain.CrmCustomer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.crm.mapper.CrmCustomerMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.common.param.SmsSendParam; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.crm.service.impl.CrmCustomerServiceImpl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.his.config.AddWxConfig; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.qw.domain.QwWorkLink; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.qw.service.IQwWorkLinkService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.system.mapper.SysDictDataMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.system.service.ISysConfigService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import lombok.AllArgsConstructor; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import lombok.extern.slf4j.Slf4j; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.stereotype.Service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.ArrayList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.Map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.concurrent.atomic.AtomicInteger; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.stream.Collectors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 百度AI外呼任务Service业务层处理 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @author fs 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @date 2025-03-20 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@Slf4j 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@Service 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@AllArgsConstructor 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+public class AiobBaiduTaskServiceImpl extends ServiceImpl<AiobBaiduTaskMapper, AiobBaiduTask> implements IAiobBaiduTaskService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private final AiobApiUtils aiobApiUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private final IAiobBaiduEncryptionService aiobBaiduEncryptionService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private final CrmCustomerServiceImpl crmCustomerService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private final CompanyVoiceRoboticCalleesMapper companyVoiceRoboticCalleesMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private final ICompanyVoiceRoboticCalleesService companyVoiceRoboticCalleesService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private final CrmCustomerMapper crmCustomerMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private final ICompanyVoiceRoboticWxService companyVoiceRoboticWxService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private final CompanyWxClientServiceImpl companyWxClientServiceImpl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private final ISysConfigService configService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private final SysDictDataMapper sysDictDataMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private final CompanyVoiceRoboticWxMapper companyVoiceRoboticWxMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private final IQwWorkLinkService qwWorkLinkService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private final ISmsService smsService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private final ICompanySmsTempService smsTempService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 查询百度AI外呼任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     *  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param id 百度AI外呼任务主键 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 百度AI外呼任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public AiobBaiduTask selectAiobBaiduTaskById(Long id) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return baseMapper.selectAiobBaiduTaskById(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 查询百度AI外呼任务列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     *  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param aiobBaiduTask 百度AI外呼任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 百度AI外呼任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public List<AiobBaiduTask> selectAiobBaiduTaskList(AiobBaiduTask aiobBaiduTask) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return baseMapper.selectAiobBaiduTaskList(aiobBaiduTask); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 新增百度AI外呼任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     *  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param aiobBaiduTask 百度AI外呼任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 结果 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public int insertAiobBaiduTask(AiobBaiduTask aiobBaiduTask){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<CrmCustomer> customerList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(StringUtils.isNotEmpty(aiobBaiduTask.getUserIds())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            customerList = crmCustomerService.selectCrmCustomerListByIds(String.join(",", aiobBaiduTask.getUserIds())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            customerList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        if(customerList.isEmpty()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            throw new BaseException("拨打电话不能为空"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        aiobBaiduTask.setCreateTime(DateUtils.getNowDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 创建任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        aiobApiUtils.createTask(aiobBaiduTask); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int insert = baseMapper.insert(aiobBaiduTask); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 保存外呼电话列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<CompanyVoiceRoboticCallees> calleesList = customerList.stream().map(e -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            CompanyVoiceRoboticCallees entity = new CompanyVoiceRoboticCallees(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            entity.setUserId(e.getCustomerId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            entity.setType(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            entity.setUserName(e.getCustomerName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            entity.setPhone(e.getMobile()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            entity.setRoboticId(aiobBaiduTask.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return entity; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        companyVoiceRoboticCalleesMapper.deleteByRoboticId(aiobBaiduTask.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(!calleesList.isEmpty()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            companyVoiceRoboticCalleesMapper.insertCompanyVoiceRoboticCalleesList(calleesList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<AiobBaiduEncryption> list = aiobBaiduEncryptionService.list(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(list.isEmpty()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BaseException("密码加密不能为空"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        AiobBaiduEncryption aiobBaiduEncryption = list.get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(!calleesList.isEmpty()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            AiobImportPhoneParam phoneVo = new AiobImportPhoneParam(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            phoneVo.setTaskId(aiobBaiduTask.getTaskId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            phoneVo.setSecretType(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            phoneVo.setSecretId(aiobBaiduEncryption.getSecretId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            phoneVo.setCustomerInfoList(calleesList.stream().map(e -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                AiobImportPhoneParam.CustomerInfoList info = new AiobImportPhoneParam.CustomerInfoList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                info.setExtJson(e.getId().toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                info.setMobile(AiobPhoneEncryption.encryptAES(e.getPhone(), aiobBaiduEncryption.getSecretKey())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return info; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }).collect(Collectors.toList())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Map<String, CompanyVoiceRoboticCallees> calleesMap = PubFun.listToMapByGroupObject(calleesList, e -> e.getId().toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<AiobImportPhoneVo> importPhoneVos = aiobApiUtils.importPhone(phoneVo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            importPhoneVos.forEach(e -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                CompanyVoiceRoboticCallees callees = calleesMap.get(e.getExtJson()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                callees.setTaskMemberId(e.getTaskMemberId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                callees.setImportStatus(e.getStatus()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                callees.setReason(e.getReason()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            companyVoiceRoboticCalleesService.updateBatchById(calleesList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        addQw(aiobBaiduTask); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(aiobBaiduTask.getType() == 2){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dispenseQw(aiobBaiduTask.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            new Thread(() -> dispenseQw(aiobBaiduTask.getId())).start(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return insert; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void addQw(AiobBaiduTask task) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<CompanyVoiceRoboticWx> collect; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(task.getType() == 1){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 设置加微微信列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            collect = task.getQwUserList().stream().map(e -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                CompanyVoiceRoboticWx entity = new CompanyVoiceRoboticWx(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                entity.setAddType(task.getType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                entity.setIntention(e.getIntention()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                entity.setAccountId(e.getCompanyUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                entity.setWxDialogId(e.getWxDialogId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return entity; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            collect = task.getWorkUrl().stream().map(e -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                CompanyVoiceRoboticWx entity = new CompanyVoiceRoboticWx(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                entity.setAddType(task.getType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                entity.setIntention(e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return entity; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        collect.forEach(e -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            e.setRoboticId(task.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            e.setType(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        companyVoiceRoboticWxService.saveBatch(collect); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 修改百度AI外呼任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     *  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param aiobBaiduTask 百度AI外呼任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 结果 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public int updateAiobBaiduTask(AiobBaiduTask aiobBaiduTask) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        aiobBaiduTask.setUpdateTime(DateUtils.getNowDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return baseMapper.updateAiobBaiduTask(aiobBaiduTask); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 批量删除百度AI外呼任务 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     *  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param ids 需要删除的百度AI外呼任务主键 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 结果 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public int deleteAiobBaiduTaskByIds(Long[] ids){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<AiobBaiduTask> taskList = list(new QueryWrapper<AiobBaiduTask>().in("id", ids)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(taskList.stream().anyMatch(e -> e.getTaskStatus() == 2)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BaseException("任务正在执行无法删除"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int i = baseMapper.deleteAiobBaiduTaskByIds(ids); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        aiobApiUtils.deleteTask(PubFun.listToNewList(taskList, AiobBaiduTask::getTaskId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return i; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 删除百度AI外呼任务信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     *  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param id 百度AI外呼任务主键 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 结果 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public int deleteAiobBaiduTaskById(Long id) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return baseMapper.deleteAiobBaiduTaskById(id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void back(AiobCalleData vo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        log.info("进入外呼回调:{}", JSON.toJSONString(vo)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 接通 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(vo.getEndType() == 1) pushDialogContent(vo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 未接通 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(vo.getEndType() == 0) pushBilling(vo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 是否全部回调完毕 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        CompanyVoiceRoboticCallees callee = getResultCalleeInfo(vo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        AiobBaiduTask byId = getById(callee.getRoboticId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 企微 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(byId.getType() == 2){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            CrmCustomer crmCustomer = crmCustomerMapper.selectCrmCustomerById(callee.getUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            SmsSendParam param = new SmsSendParam(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            param.setCustomerId(crmCustomer.getCustomerId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            param.setTempCode("aiob-wok-link"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            param.setCompanyId(crmCustomer.getCompanyId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            param.setCompanyUserId(crmCustomer.getCustomerUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            param.setSmsType(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            param.setMobile(callee.getPhone()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            CompanySmsTemp temp=smsTempService.selectCompanySmsTempByCode(param.getTempCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            param.setContent(temp.getContent()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            CompanyWxClient one = companyWxClientServiceImpl.getOne(new QueryWrapper<CompanyWxClient>().eq("add_type", 2).eq("robotic_id", callee.getRoboticId()).eq("customer_id", callee.getUserId())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            param.setWorkUrl(one.getWorkUrl()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            smsService.sendSms(param); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(byId.getType() == 1){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            long count = companyVoiceRoboticCalleesMapper.countByRoboticIdNotUuid(callee.getRoboticId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(count == 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                new Thread(() -> dispenseWx(callee.getRoboticId())).start(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void updateStatus(AiobTaskData vo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(vo.getTaskId() == null) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        AiobBaiduTask task = getOne(new QueryWrapper<AiobBaiduTask>().eq("task_id", vo.getTaskId())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(task == null) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        task.setTaskStatus(vo.getTaskStatus()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        task.setUpdateReason(vo.getReason()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        updateById(task); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void changeStatus(String taskId, Integer status) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        aiobApiUtils.changeStatus(taskId, status); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        AiobTaskData vo = new AiobTaskData(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        vo.setTaskId(Long.parseLong(taskId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        vo.setTaskStatus(status); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        vo.setReason("等待任务状态同步中"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        updateStatus(vo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void pushDialogContent(AiobCalleData vo){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String intention = "无"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String tagName = "意向等级"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(vo.getTagExtractInfo() != null && !vo.getTagExtractInfo().isEmpty() && vo.getTagExtractInfo().containsKey(tagName) && vo.getTagExtractInfo().get(tagName) != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            intention = vo.getTagExtractInfo().get(tagName).toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        CompanyVoiceRoboticCallees callee = getResultCalleeInfo(vo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        callee.setUuid(vo.getSessionId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        callee.setIntention(intention); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(vo.getRecord() != null && !vo.getRecord().isEmpty()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            callee.setJson(JSON.toJSONString(vo.getRecord())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        callee.setResult(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        companyVoiceRoboticCalleesMapper.updateById(callee); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        CrmCustomer crmCustomer = crmCustomerMapper.selectCrmCustomerById(callee.getUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        crmCustomer.setIntention(intention); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        crmCustomerMapper.updateById(crmCustomer); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void pushBilling(AiobCalleData vo){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        CompanyVoiceRoboticCallees callee = getResultCalleeInfo(vo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        callee.setResult(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        companyVoiceRoboticCalleesMapper.updateById(callee); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public CompanyVoiceRoboticCallees getResultCalleeInfo(AiobCalleData vo){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(StringUtils.isEmpty(vo.getExtJson())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.error("回调错误,未找到拨打手机号记录:{}", vo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BaseException("回调错误"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        CompanyVoiceRoboticCallees callee = companyVoiceRoboticCalleesMapper.selectCompanyVoiceRoboticCalleesById(Long.parseLong(vo.getExtJson())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(callee == null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.error("回调错误,未找到拨打手机号记录:{}", vo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new BaseException("回调错误"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return callee; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void dispenseQw(Long roboticId){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 拨打电话列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<CompanyVoiceRoboticCallees> calleesList = companyVoiceRoboticCalleesMapper.selectByRoboticId(roboticId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 分配任务列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<CompanyVoiceRoboticWx> roboticWxList = companyVoiceRoboticWxMapper.selectByRoboticId(roboticId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 客户列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<CrmCustomer> customerList = crmCustomerMapper.selectCrmCustomerListByIds(calleesList.stream().map(e -> e.getUserId().toString()).collect(Collectors.joining(","))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<Long, CrmCustomer> customerMap = PubFun.listToMapByGroupObject(customerList, CrmCustomer::getCustomerId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Long> workIds = PubFun.listToNewList(roboticWxList, e -> Long.parseLong(e.getIntention())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<QwWorkLink> workLinkList = qwWorkLinkService.list(new QueryWrapper<QwWorkLink>().in("id", workIds)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<Long, QwWorkLink> workLinkMap = PubFun.listToMapByGroupObject(workLinkList, BaseEntityTow::getId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        AtomicInteger i = new AtomicInteger(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<CompanyWxClient> collect = calleesList.stream().map(e -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            int index = i.getAndIncrement(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(index == roboticWxList.size() - 1){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                i.set(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            CompanyVoiceRoboticWx wx = roboticWxList.get(index); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            CrmCustomer customers = customerMap.get(e.getUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            e.setDistribute(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            CompanyWxClient companyWxClient = new CompanyWxClient(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            wx.setNum(wx.getNum() + 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            companyWxClient.setRoboticWxId(wx.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 任务ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            companyWxClient.setRoboticId(roboticId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            companyWxClient.setAddType(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 客户名称 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            companyWxClient.setNickName(customers.getCustomerName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 手机号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            companyWxClient.setPhone(customers.getMobile()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 微信号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            companyWxClient.setWxNo(customers.getWeixin()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 微信号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            companyWxClient.setCustomerId(customers.getCustomerId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            companyWxClient.setIntention(wx.getIntention()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return companyWxClient; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        List<CompanyWxClient> collect = roboticWxList.stream().map(e -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            CompanyVoiceRoboticCallees companyVoiceRoboticCallees = calleesList.get(i.getAndIncrement()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            CrmCustomer customers = customerMap.get(companyVoiceRoboticCallees.getUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            companyVoiceRoboticCallees.setDistribute(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            CompanyWxClient companyWxClient = new CompanyWxClient(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            // 任务ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            companyWxClient.setRoboticId(roboticId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            companyWxClient.setAddType(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            // 客户名称 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            companyWxClient.setNickName(customers.getCustomerName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            // 手机号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            companyWxClient.setPhone(customers.getMobile()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            // 微信号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            companyWxClient.setWxNo(customers.getWeixin()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            // 微信号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            companyWxClient.setCustomerId(customers.getCustomerId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            companyWxClient.setIntention(e.getIntention()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            return companyWxClient; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        }).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        companyVoiceRoboticCalleesService.updateBatchById(calleesList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        companyVoiceRoboticWxService.updateBatchById(roboticWxList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        companyWxClientServiceImpl.saveBatch(collect); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        collect.forEach(e -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            QwWorkLink qwWorkLink = workLinkMap.get(Long.parseLong(e.getIntention())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            e.setWorkShortNo("QW-" + IdUtil.simpleUUID()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            String url = qwWorkShortLinkService.addWxLink(qwWorkLink, e.getWorkShortNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            e.setWorkUrl(url); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        companyWxClientServiceImpl.updateBatchById(collect); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void dispenseWx(Long roboticId){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String json=configService.selectConfigByKey("add.wx"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        AddWxConfig bean = JSONUtil.toBean(json, AddWxConfig.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Integer addWxNum = bean.getDayAddNum(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 任务详情 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 拨打电话列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<CompanyVoiceRoboticCallees> calleesList = companyVoiceRoboticCalleesMapper.selectByRoboticId(roboticId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(calleesList.isEmpty()) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        calleesList = calleesList.stream().filter(e -> StringUtils.isNotEmpty(e.getIntention()) && e.getDistribute() == 0).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(calleesList.isEmpty()) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<Long, CompanyVoiceRoboticCallees> calleesMap = PubFun.listToMapByGroupObject(calleesList, CompanyVoiceRoboticCallees::getUserId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 分配任务列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<CompanyVoiceRoboticWx> roboticWxList = companyVoiceRoboticWxMapper.selectByRoboticId(roboticId).stream().filter(e-> e.getAddNum() < addWxNum).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 客户列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<CrmCustomer> customerList = crmCustomerMapper.selectCrmCustomerListByIds(calleesList.stream().map(e -> e.getUserId().toString()).collect(Collectors.joining(","))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, List<CrmCustomer>> customerMap = PubFun.listToMapByGroupList(customerList, CrmCustomer::getIntention); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, List<CompanyVoiceRoboticWx>> roboticWxMap = PubFun.listToMapByGroupList(roboticWxList, CompanyVoiceRoboticWx::getIntention); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 循环客户 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<CompanyWxClient> collect = customerMap.entrySet().stream().filter(e -> roboticWxMap.containsKey(e.getKey())).flatMap(map -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String k = map.getKey(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<CrmCustomer> v = map.getValue(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 对应销售账号列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<CompanyVoiceRoboticWx> wxList = roboticWxMap.get(k); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 组装任务数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return v.stream().map(e -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                CompanyVoiceRoboticCallees companyVoiceRoboticCallees = calleesMap.get(e.getCustomerId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                companyVoiceRoboticCallees.setDistribute(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                CompanyWxClient companyWxClient = new CompanyWxClient(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 绑定销售 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                bindCompany(companyWxClient, wxList, addWxNum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 任务ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                companyWxClient.setRoboticId(roboticId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                companyWxClient.setAddType(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 客户名称 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                companyWxClient.setNickName(e.getCustomerName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 手机号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                companyWxClient.setPhone(e.getMobile()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 微信号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                companyWxClient.setWxNo(e.getWeixin()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 微信号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                companyWxClient.setCustomerId(e.getCustomerId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 意向 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                companyWxClient.setIntention(e.getIntention()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return companyWxClient; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        companyVoiceRoboticCalleesService.updateBatchById(calleesList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        companyVoiceRoboticWxService.updateBatchById(roboticWxList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        companyWxClientServiceImpl.saveBatch(collect); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 绑定销售 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private static void bindCompany(CompanyWxClient client, List<CompanyVoiceRoboticWx> wxList, Integer addWxNum) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<CompanyVoiceRoboticWx> wx = wxList.stream().filter(f -> f.getNum() < addWxNum).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 绑定销售,添加值达到阈值后设置为空,等待下次绑定 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!wx.isEmpty()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            CompanyVoiceRoboticWx companyVoiceRoboticWx = wx.get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            companyVoiceRoboticWx.setNum(companyVoiceRoboticWx.getNum() + 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            client.setDialogId(companyVoiceRoboticWx.getWxDialogId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            client.setRoboticWxId(companyVoiceRoboticWx.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |