From ef841a3e5d2dfec3c1a3cdcceecc2748db1fe2b1 Mon Sep 17 00:00:00 2001 From: wells <123456@qq.com> Date: Sun, 9 Aug 2026 08:35:18 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BE=A4=E4=B8=BB=E8=AE=BE=E7=BD=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=91=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/tailbet/controller/OpsController.java | 29 +++++++++++++++++++ .../service/impl/GroupServiceImpl.java | 16 ++++++++++ 2 files changed, 45 insertions(+) diff --git a/src/main/java/com/tailbet/controller/OpsController.java b/src/main/java/com/tailbet/controller/OpsController.java index 4a4f4b4..cd4f5c1 100644 --- a/src/main/java/com/tailbet/controller/OpsController.java +++ b/src/main/java/com/tailbet/controller/OpsController.java @@ -1,6 +1,7 @@ package com.tailbet.controller; import com.tailbet.model.dto.CreateGroupDTO; +import com.tailbet.model.dto.GroupMemberOperateDTO; import com.tailbet.model.dto.PointsDTO; import com.tailbet.model.dto.PullGroupDTO; import com.tailbet.model.entity.Group; @@ -78,4 +79,32 @@ public class OpsController { return R.ok(); } + + /** + * 群主设置管理员 + *
+ * 操作人需为该群群主;同时本地与 OpenIM 角色都会更新(OpenIM roleLevel=60=管理员), + * OpenIM 同步失败会抛异常回滚本地事务,保证本地与 IM 角色一致。 + *
+ */ + @PostMapping("/group/set-admin") + public R+ * 操作人需为该群群主;同时本地与 OpenIM 角色都会更新(OpenIM roleLevel=20=普通成员), + * OpenIM 同步失败会抛异常回滚本地事务,保证本地与 IM 角色一致。 + *
+ */ + @PostMapping("/group/remove-admin") + public R+ * 本地更新群成员角色后,调用 OpenIM 接口同步角色(roleLevel=60=管理员)。 + * OpenIM 调用失败会抛异常回滚本地事务,保证本地与 IM 角色一致。 + *
*/ @Override @Transactional @@ -274,6 +278,10 @@ public class GroupServiceImpl implements IGroupService { member.setUpdateTime(LocalDateTime.now()); groupMemberMapper.updateById(member); + // OpenIM 同步:roleLevel=60 表示管理员 + openIMApiClient.setGroupMemberRole( + String.valueOf(groupId), String.valueOf(targetUserId), 60); + // 审计日志 auditService.log(groupId, null, operatorId, "SET_ADMIN", String.format("{\"targetUserId\":%d}", targetUserId)); @@ -281,6 +289,10 @@ public class GroupServiceImpl implements IGroupService { /** * 取消管理员 + *+ * 本地更新群成员角色后,调用 OpenIM 接口同步角色(roleLevel=20=普通成员)。 + * OpenIM 调用失败会抛异常回滚本地事务,保证本地与 IM 角色一致。 + *
*/ @Override @Transactional @@ -303,6 +315,10 @@ public class GroupServiceImpl implements IGroupService { member.setUpdateTime(LocalDateTime.now()); groupMemberMapper.updateById(member); + // OpenIM 同步:roleLevel=20 表示普通成员 + openIMApiClient.setGroupMemberRole( + String.valueOf(groupId), String.valueOf(targetUserId), 20); + // 审计日志 auditService.log(groupId, null, operatorId, "REMOVE_ADMIN", String.format("{\"targetUserId\":%d}", targetUserId));