|
@@ -25,11 +25,11 @@ import com.fs.live.domain.LiveWatchUser;
|
|
|
import com.fs.live.mapper.*;
|
|
import com.fs.live.mapper.*;
|
|
|
import com.fs.live.param.LiveIsAddKfParam;
|
|
import com.fs.live.param.LiveIsAddKfParam;
|
|
|
import com.fs.live.service.ILiveWatchUserService;
|
|
import com.fs.live.service.ILiveWatchUserService;
|
|
|
-import com.fs.live.vo.LiveWatchUserEntry;
|
|
|
|
|
-import com.fs.live.vo.LiveTagItemVO;
|
|
|
|
|
-import com.fs.live.vo.LiveWatchUserStatistics;
|
|
|
|
|
-import com.fs.live.vo.LiveWatchUserVO;
|
|
|
|
|
|
|
+import com.fs.live.vo.*;
|
|
|
import com.fs.qw.domain.QwExternalContact;
|
|
import com.fs.qw.domain.QwExternalContact;
|
|
|
|
|
+import com.fs.qwApi.domain.QwResult;
|
|
|
|
|
+import com.fs.qwApi.param.QwEditUserTagParam;
|
|
|
|
|
+import com.fs.qwApi.service.QwApiService;
|
|
|
import com.fs.qw.domain.QwGroupChat;
|
|
import com.fs.qw.domain.QwGroupChat;
|
|
|
import com.fs.qw.domain.QwGroupChatUser;
|
|
import com.fs.qw.domain.QwGroupChatUser;
|
|
|
import com.fs.qw.mapper.QwExternalContactMapper;
|
|
import com.fs.qw.mapper.QwExternalContactMapper;
|
|
@@ -83,6 +83,8 @@ public class LiveWatchUserServiceImpl implements ILiveWatchUserService {
|
|
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
|
LiveTagConfigMapper liveTagConfigMapper;
|
|
LiveTagConfigMapper liveTagConfigMapper;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private com.fs.qwApi.service.QwApiService qwApiService;
|
|
|
|
|
|
|
|
|
|
|
|
|
private static final Logger logger = LoggerFactory.getLogger(LiveWatchUserServiceImpl.class);
|
|
private static final Logger logger = LoggerFactory.getLogger(LiveWatchUserServiceImpl.class);
|
|
@@ -759,4 +761,116 @@ public class LiveWatchUserServiceImpl implements ILiveWatchUserService {
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 对企微用户打标签
|
|
|
|
|
+ * @param userTagVOS 用户标签列表,包含外部联系人ID和要添加的标签列表
|
|
|
|
|
+ */
|
|
|
|
|
+ private void test(List<HandleUserTagVO> userTagVOS) {
|
|
|
|
|
+ if (CollUtil.isEmpty(userTagVOS)) {
|
|
|
|
|
+ log.warn("用户标签列表为空,跳过打标签操作");
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ int successCount = 0;
|
|
|
|
|
+ int failCount = 0;
|
|
|
|
|
+
|
|
|
|
|
+ for (HandleUserTagVO userTagVO : userTagVOS) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ // 参数校验
|
|
|
|
|
+ if (userTagVO.getExternalId() == null) {
|
|
|
|
|
+ log.warn("外部联系人ID为空,跳过该用户");
|
|
|
|
|
+ failCount++;
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (CollUtil.isEmpty(userTagVO.getTags())) {
|
|
|
|
|
+ log.warn("标签列表为空,跳过该用户: externalId={}", userTagVO.getExternalId());
|
|
|
|
|
+ failCount++;
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 根据外部联系人ID查询企微外部联系人信息
|
|
|
|
|
+ QwExternalContact qwExternalContact = qwExternalContactMapper.selectQwExternalContactById(userTagVO.getExternalId());
|
|
|
|
|
+ if (qwExternalContact == null) {
|
|
|
|
|
+ log.warn("未找到企微外部联系人: externalId={}", userTagVO.getExternalId());
|
|
|
|
|
+ failCount++;
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 校验必要字段
|
|
|
|
|
+ if (StringUtils.isEmpty(qwExternalContact.getUserId())
|
|
|
|
|
+ || StringUtils.isEmpty(qwExternalContact.getExternalUserId())
|
|
|
|
|
+ || StringUtils.isEmpty(qwExternalContact.getCorpId())) {
|
|
|
|
|
+ log.warn("企微外部联系人信息不完整: externalId={}, userId={}, externalUserId={}, corpId={}",
|
|
|
|
|
+ userTagVO.getExternalId(),
|
|
|
|
|
+ qwExternalContact.getUserId(),
|
|
|
|
|
+ qwExternalContact.getExternalUserId(),
|
|
|
|
|
+ qwExternalContact.getCorpId());
|
|
|
|
|
+ failCount++;
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 构建打标签参数
|
|
|
|
|
+ QwEditUserTagParam qwEditUserTagParam = new QwEditUserTagParam();
|
|
|
|
|
+ qwEditUserTagParam.setUserid(qwExternalContact.getUserId());
|
|
|
|
|
+ qwEditUserTagParam.setExternal_userid(qwExternalContact.getExternalUserId());
|
|
|
|
|
+ qwEditUserTagParam.setAdd_tag(userTagVO.getTags());
|
|
|
|
|
+
|
|
|
|
|
+ // 调用企微API打标签
|
|
|
|
|
+ QwResult qwResult = qwApiService.editUserTag(qwEditUserTagParam, qwExternalContact.getCorpId());
|
|
|
|
|
+
|
|
|
|
|
+ if (qwResult != null && qwResult.getErrcode() == 0) {
|
|
|
|
|
+ // 打标签成功,更新数据库中的标签信息
|
|
|
|
|
+ String existingTagIds = qwExternalContact.getTagIds();
|
|
|
|
|
+ Set<String> uniqueTagIds = new HashSet<>();
|
|
|
|
|
+
|
|
|
|
|
+ // 合并现有标签
|
|
|
|
|
+ if (StringUtils.isNotEmpty(existingTagIds)) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ List<String> parsedTags = JSON.parseArray(existingTagIds, String.class);
|
|
|
|
|
+ if (CollUtil.isNotEmpty(parsedTags)) {
|
|
|
|
|
+ uniqueTagIds.addAll(parsedTags);
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.warn("解析现有标签失败: externalId={}, tagIds={}, error={}",
|
|
|
|
|
+ userTagVO.getExternalId(), existingTagIds, e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 添加新标签
|
|
|
|
|
+ uniqueTagIds.addAll(userTagVO.getTags());
|
|
|
|
|
+
|
|
|
|
|
+ // 更新数据库
|
|
|
|
|
+ QwExternalContact updateContact = new QwExternalContact();
|
|
|
|
|
+ updateContact.setId(qwExternalContact.getId());
|
|
|
|
|
+ updateContact.setTagIds(JSON.toJSONString(new ArrayList<>(uniqueTagIds)));
|
|
|
|
|
+ qwExternalContactMapper.updateQwExternalContact(updateContact);
|
|
|
|
|
+
|
|
|
|
|
+ successCount++;
|
|
|
|
|
+ log.info("成功为用户打标签: externalId={}, userId={}, externalUserId={}, tags={}",
|
|
|
|
|
+ userTagVO.getExternalId(),
|
|
|
|
|
+ qwExternalContact.getUserId(),
|
|
|
|
|
+ qwExternalContact.getExternalUserId(),
|
|
|
|
|
+ userTagVO.getTags());
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 打标签失败
|
|
|
|
|
+ failCount++;
|
|
|
|
|
+ String errorMsg = qwResult != null ? qwResult.getErrmsg() : "未知错误";
|
|
|
|
|
+ log.error("为用户打标签失败: externalId={}, userId={}, externalUserId={}, error={}",
|
|
|
|
|
+ userTagVO.getExternalId(),
|
|
|
|
|
+ qwExternalContact.getUserId(),
|
|
|
|
|
+ qwExternalContact.getExternalUserId(),
|
|
|
|
|
+ errorMsg);
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ failCount++;
|
|
|
|
|
+ log.error("为用户打标签异常: externalId={}, error={}",
|
|
|
|
|
+ userTagVO.getExternalId(), e.getMessage(), e);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ log.info("打标签操作完成: 总数={}, 成功={}, 失败={}",
|
|
|
|
|
+ userTagVOS.size(), successCount, failCount);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
}
|
|
}
|