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