yaodaoseng 2 weeks ago
parent
commit
4500ace480

+ 1 - 1
risk-control-core/src/main/java/com/tzld/piaoquan/risk/control/service/impl/RiskUserHandleService.java

@@ -66,7 +66,7 @@ public class RiskUserHandleService {
                         log.info("handleRiskUser, chatIdToRoomId , staff: {}, riskUserInfo: {}", staff, riskUserInfo);
                         RiskRuleConfigService.FixedRuleResult ruleResult = riskRuleConfigService.getFixedRulesForThisChat(riskUserInfo.getChatId(),roomId +"");
                         log.info("handleRiskUser, ruleResult: {}, roomInfo: {}", ruleResult, roomInfo);
-                        if(ruleResult.isNormalCountEnough && !ruleResult.isAbnormalRatioHighEnough) {//正常进入用户满足需求,且异常率符合阈值
+                            if(ruleResult.isNormalCountEnough && !ruleResult.isAbnormalRatioHighEnough) {//正常进入用户满足需求,且异常率符合阈值
                             boolean success = riskUserOperateService.kick(staff,Long.parseLong(roomInfo.getRoomId()),externalVid);
                             if (success) {
                                 log.info("handleRiskUser to be kick user, vid: {},name: {},chatId: {},chatName:{} ", externalVid,riskUserInfo.getExternalNickname(),riskUserInfo.getChatId(),riskUserInfo.getGroupName());

+ 36 - 3
risk-control-core/src/main/java/com/tzld/piaoquan/risk/control/service/impl/RiskUserOperateService.java

@@ -96,37 +96,70 @@ public class RiskUserOperateService {
         )
 );
 
+    /**
+     * 快速踢人功能 - 当检测到新成员加入群聊时,立即执行踢人操作
+     *
+     * @param message 群聊新增成员消息,包含新加入的成员信息
+     * @param uuid 企业微信用户的唯一标识符
+     * @return true-踢人成功,false-踢人失败或不满足踢人条件
+     */
     public boolean quickKick(RoomAddMemberMessage message,String uuid) {
+        // 检查是否为群聊消息(isRoom=1表示群聊,0表示私聊)
         if(message.getIsRoom() == 1) {
+            // 构建请求参数
             Map<String, Object> requestBody = new HashMap<>();
-            requestBody.put("uuid", uuid);
-            requestBody.put("oprType", 1);
+            requestBody.put("uuid", uuid);        // 操作者的企业微信UUID
+            requestBody.put("oprType", 1);        // 操作类型:1-踢出用户
+
+            // 检查成员列表是否为空
             if(message.getMemberList().isEmpty()) {
                 return false;
             }
+
+            // 获取第一个新加入的成员VID(企业微信内部用户ID)
             long vid = message.getMemberList().get(0);
+
+            // 黑名单检查 - 如果用户不在黑名单中,则跳过踢人操作(保护重要用户)
             if(!BLACKLIST_VID.contains(vid)) {
                 LOGGER.info("quickKick, vid: {} is in blacklist, skip kick", vid);
                 return false;
             }
+
             // 如果是群聊,直接踢出
             LOGGER.info("quickKick, message: {}, uuid: {}", message, uuid);
+
+            // 设置要踢出的用户VID列表
             requestBody.put("blacklist_vid",Arrays.asList(message.getMemberList().get(0)));
+
+            // 将请求参数转换为JSON字符串
             String params = JSON.toJSONString(requestBody);
+
+            // 调用第三方企业微信管理工具的踢人接口
             Optional<String> response = httpPoolClientDefault.postJson(qywxConfig.getDomain() + qywxConfig.getPath("kick-external"), params);
+
+            // 处理API响应结果
             if (response.isPresent()) {
+                // 解析响应JSON
                 QwCommonResModel<RoomListResponse> roomInfo = QwCommonResModel.parseResponse(response.get(), RoomListResponse.class);
+
+                // 检查操作是否成功(errcode=0表示成功)
                 if (roomInfo.getErrcode() == 0) {
                     LOGGER.info("quick Kick external user {} from room {} successfully", vid);
                     return true;
                 } else {
+                    // 踢人失败,记录错误信息
                     LOGGER.error("Failed to kick external user {} f: {}", vid, roomInfo.getErrmsg());
                 }
             } else {
+                // API调用失败,没有收到响应
                 LOGGER.error("Failed to kick external user {} from : No response", vid);
             }
+
+            // 默认返回失败
             return false;
         }
+
+        // 如果不是群聊消息,直接返回失败
         return false;
     }
 
@@ -146,7 +179,7 @@ public class RiskUserOperateService {
     public boolean kick(UserBase staff, long roomId, long vid) {
         if(BLACKLIST_VID.contains(vid)) {
             LOGGER.info("kick, vid: {} is in blacklist, skip normal kick", vid);
-            return false;
+            return true;
         }
         Map<String, Object> requestBody = new HashMap<>();
         requestBody.put("uuid", staff.getUuid());