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