|
@@ -9,7 +9,9 @@ import com.baomidou.mybatisplus.core.toolkit.Assert;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.StringPool;
|
|
import com.baomidou.mybatisplus.core.toolkit.StringPool;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
|
|
+import com.cyksj.common.constant.Constant;
|
|
|
import com.cyksj.common.exception.BusinessRuntimeException;
|
|
import com.cyksj.common.exception.BusinessRuntimeException;
|
|
|
|
|
+import com.cyksj.common.snowflake.Sequence;
|
|
|
import com.cyksj.common.task.GlobalThreadPoolTaskExecutor;
|
|
import com.cyksj.common.task.GlobalThreadPoolTaskExecutor;
|
|
|
import com.cyksj.common.util.Jsons;
|
|
import com.cyksj.common.util.Jsons;
|
|
|
import com.cyksj.common.util.StringUtil;
|
|
import com.cyksj.common.util.StringUtil;
|
|
@@ -28,6 +30,7 @@ import com.cyksj.service.corp.CorpMsgBulkTaskService;
|
|
|
import com.cyksj.service.corp.CorpService;
|
|
import com.cyksj.service.corp.CorpService;
|
|
|
import com.cyksj.service.corp.CorpUserSendRecordService;
|
|
import com.cyksj.service.corp.CorpUserSendRecordService;
|
|
|
import com.cyksj.service.corp.WxCorpOps;
|
|
import com.cyksj.service.corp.WxCorpOps;
|
|
|
|
|
+import com.cyksj.service.sys.SysConfigService;
|
|
|
import com.cyksj.xxljob.XxlJobInfo;
|
|
import com.cyksj.xxljob.XxlJobInfo;
|
|
|
import com.cyksj.xxljob.XxlJobUtil;
|
|
import com.cyksj.xxljob.XxlJobUtil;
|
|
|
import com.google.common.collect.Lists;
|
|
import com.google.common.collect.Lists;
|
|
@@ -74,10 +77,14 @@ public class CorpMsgBulkTaskServiceImpl extends ServiceImpl<CorpMsgBulkTaskMappe
|
|
|
|
|
|
|
|
private final CorpMsgBulkTaskTagRelationMapper corpMsgBulkTaskTagRelationMapper;
|
|
private final CorpMsgBulkTaskTagRelationMapper corpMsgBulkTaskTagRelationMapper;
|
|
|
|
|
|
|
|
|
|
+ private final SysConfigService sysConfigService;
|
|
|
|
|
+
|
|
|
private final RedisService redisService;
|
|
private final RedisService redisService;
|
|
|
|
|
|
|
|
private final int LIMIT = 10000;
|
|
private final int LIMIT = 10000;
|
|
|
|
|
|
|
|
|
|
+ private static final Sequence SEQUENCE = new Sequence(0);
|
|
|
|
|
+
|
|
|
private static final GlobalThreadPoolTaskExecutor TASK_EXECUTOR = GlobalThreadPoolTaskExecutor.getInstance();
|
|
private static final GlobalThreadPoolTaskExecutor TASK_EXECUTOR = GlobalThreadPoolTaskExecutor.getInstance();
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -155,7 +162,17 @@ public class CorpMsgBulkTaskServiceImpl extends ServiceImpl<CorpMsgBulkTaskMappe
|
|
|
WxCorpApp wxCorpApp = wxCorpAppMapper.selectById(corpMsgBulkTask.getWxCorpId());
|
|
WxCorpApp wxCorpApp = wxCorpAppMapper.selectById(corpMsgBulkTask.getWxCorpId());
|
|
|
Assert.notNull(wxCorpApp, "企业微信未配置");
|
|
Assert.notNull(wxCorpApp, "企业微信未配置");
|
|
|
List<String> tagIds = Jsons.parseList(corpMsgBulkTask.getChooseTagStr(), String.class);
|
|
List<String> tagIds = Jsons.parseList(corpMsgBulkTask.getChooseTagStr(), String.class);
|
|
|
- List<CorpUserFollowRelationDto> corpUserFollowRelations = corpUserFollowRelationMapper.selectCorpUserFollowRelationByTagIds(tagIds, wxCorpApp.getId());
|
|
|
|
|
|
|
+ //客服集合
|
|
|
|
|
+ List<String> service_follow_ids = null;
|
|
|
|
|
+ SysConfig serviceConfig = sysConfigService.getOne(Wrappers.lambdaQuery(SysConfig.class)
|
|
|
|
|
+ .eq(SysConfig::getSysKey, Constant.CORP_SERVICE_FOLLOWS_KEY).last("limit 1"));
|
|
|
|
|
+ if (serviceConfig != null && StrUtil.isNotBlank(serviceConfig.getSysValue())) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ service_follow_ids = Jsons.parseList(serviceConfig.getSysValue(), String.class);
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ List<CorpUserFollowRelationDto> corpUserFollowRelations = corpUserFollowRelationMapper.selectCorpUserFollowRelationByTagIds(tagIds, wxCorpApp.getId(), service_follow_ids);
|
|
|
//将成员与客户相同关联聚合
|
|
//将成员与客户相同关联聚合
|
|
|
Map<String, List<CorpUserFollowRelationDto>> userRelationMap = corpUserFollowRelations.stream().collect(Collectors.groupingBy(CorpUserFollowRelationDto::getFollowId));
|
|
Map<String, List<CorpUserFollowRelationDto>> userRelationMap = corpUserFollowRelations.stream().collect(Collectors.groupingBy(CorpUserFollowRelationDto::getFollowId));
|
|
|
//附件
|
|
//附件
|
|
@@ -218,6 +235,7 @@ public class CorpMsgBulkTaskServiceImpl extends ServiceImpl<CorpMsgBulkTaskMappe
|
|
|
corpMsgTemplate.setText(text);
|
|
corpMsgTemplate.setText(text);
|
|
|
}
|
|
}
|
|
|
// 每一万条发一次
|
|
// 每一万条发一次
|
|
|
|
|
+ Long sendId = SEQUENCE.nextId();
|
|
|
collect.forEach((followId, val) -> {
|
|
collect.forEach((followId, val) -> {
|
|
|
try {
|
|
try {
|
|
|
List<String> extendIds = new ArrayList<>(val.size());
|
|
List<String> extendIds = new ArrayList<>(val.size());
|
|
@@ -227,7 +245,7 @@ public class CorpMsgBulkTaskServiceImpl extends ServiceImpl<CorpMsgBulkTaskMappe
|
|
|
}
|
|
}
|
|
|
for (CorpUserFollowRelationDto dto : val) {
|
|
for (CorpUserFollowRelationDto dto : val) {
|
|
|
extendIds.add(dto.getCorpUserId());
|
|
extendIds.add(dto.getCorpUserId());
|
|
|
- if (dto.getUserId() != null) {
|
|
|
|
|
|
|
+ if (userIds != null && dto.getUserId() != null) {
|
|
|
userIds.add(dto.getUserId());
|
|
userIds.add(dto.getUserId());
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -245,6 +263,7 @@ public class CorpMsgBulkTaskServiceImpl extends ServiceImpl<CorpMsgBulkTaskMappe
|
|
|
corpMsgBulkTaskRecord.setTotal(corpUserIdList.size());
|
|
corpMsgBulkTaskRecord.setTotal(corpUserIdList.size());
|
|
|
//该企业微信下的企业成员id
|
|
//该企业微信下的企业成员id
|
|
|
corpMsgBulkTaskRecord.setFollowId(followId);
|
|
corpMsgBulkTaskRecord.setFollowId(followId);
|
|
|
|
|
+ corpMsgBulkTaskRecord.setSendId(sendId);
|
|
|
//该企业微信群发任务返回的msgid
|
|
//该企业微信群发任务返回的msgid
|
|
|
corpMsgTemplate.setExternalUserid(null);
|
|
corpMsgTemplate.setExternalUserid(null);
|
|
|
String content = Jsons.toJson(corpMsgTemplate);
|
|
String content = Jsons.toJson(corpMsgTemplate);
|