Przeglądaj źródła

修改用户标签

yuhongqi 1 tydzień temu
rodzic
commit
77af62864d

+ 118 - 4
fs-service/src/main/java/com/fs/live/service/impl/LiveWatchUserServiceImpl.java

@@ -25,11 +25,11 @@ import com.fs.live.domain.LiveWatchUser;
 import com.fs.live.mapper.*;
 import com.fs.live.param.LiveIsAddKfParam;
 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.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.QwGroupChatUser;
 import com.fs.qw.mapper.QwExternalContactMapper;
@@ -83,6 +83,8 @@ public class LiveWatchUserServiceImpl implements ILiveWatchUserService {
 
     @Autowired
     LiveTagConfigMapper liveTagConfigMapper;
+    @Autowired
+    private com.fs.qwApi.service.QwApiService qwApiService;
 
 
     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);
+    }
+
 }

+ 1 - 1
fs-service/src/main/java/com/fs/live/vo/HandleUserTagVO.java

@@ -25,5 +25,5 @@ public class HandleUserTagVO {
     /**
      * 打标签列表
      */
-    private List<Long> tags;
+    private List<String> tags;
 }