|
@@ -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());
|