From aad7f3df40a07ae6db156799fd278dc6f7dedfde Mon Sep 17 00:00:00 2001 From: youngq Date: Sat, 14 Sep 2024 14:10:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=88=BF=E9=97=B4=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=91=98=E8=A7=92=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Frontend/RoomController.cs | 21 +++++++++---------- WGShare.Domain/Enums/RoleEnums.cs | 2 ++ 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/WGShare.API/Controllers/Frontend/RoomController.cs b/WGShare.API/Controllers/Frontend/RoomController.cs index cf6423c..ba884ec 100644 --- a/WGShare.API/Controllers/Frontend/RoomController.cs +++ b/WGShare.API/Controllers/Frontend/RoomController.cs @@ -63,9 +63,9 @@ namespace WGShare.API.Controllers.Frontend public async Task SetRoomManager([FromBody] RoomManagerInputDTO inputDTO) { var users = RedisHelper.Instance.HVals(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, inputDTO.RoomNum)); - if (users.Count(x => x.IsRoomManager || x.RoleId == ((int)RoleEnums.Admin).ToString()) >= 32) + if (users.Count(x => x.IsRoomManager || x.RoleId == ((int)RoleEnums.Admin).ToString() || x.RoleId == ((int)RoleEnums.RoomManager).ToString()) >= 12) { - throw Oops.Oh("房间已达到20个发言人限制。请移除一位或联系管理员。"); + throw Oops.Oh("房间已达到12个发言人限制。请移除一位发言人"); } var user = users.FirstOrDefault(x => x.UID == inputDTO.UserId); if (user == null) @@ -103,7 +103,7 @@ namespace WGShare.API.Controllers.Frontend { // 取消显示用户,设置显示管理员 var users = RedisHelper.Instance.HVals(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, inputDTO.RoomNum)); - var showUser = users.FirstOrDefault(x => x.RoleId == ((int)RoleEnums.Admin).ToString() || x.IsRoomManager); + var showUser = users.FirstOrDefault(x => x.RoleId == ((int)RoleEnums.Admin).ToString() || x.IsRoomManager || x.RoleId == ((int)RoleEnums.RoomManager).ToString()); if (showUser != null) { RedisHelper.Instance.HSet(RedisKeyConstant.SessionManage.GetChannelShowUserKey(TenantId), inputDTO.RoomNum, showUser.UID); @@ -397,7 +397,7 @@ namespace WGShare.API.Controllers.Frontend using (var pipe = RedisHelper.Instance.StartPipe()) { - if (RoleId == RoleEnums.Admin) + if (RoleId == RoleEnums.Admin || RoleId == RoleEnums.RoomManager) { // 管理员进房,如果没有全员看ta,则设置 var script = @"local hashKey = KEYS[1] @@ -421,12 +421,11 @@ namespace WGShare.API.Controllers.Frontend var results = pipe.EndPipe(); // 判断,如果有全员看ta,则通知 - if (RoleId == RoleEnums.Admin && !results.IsNullOrEmpty() && results[0].ObjToInt() == 1) - await _hubContext.Clients.Group(roomNum).ShowUser(UId, UserName, UId, UserName); + if ((RoleId == RoleEnums.Admin || RoleId == RoleEnums.RoomManager) && !results.IsNullOrEmpty() && results[0].ObjToInt() == 1) + await _hubContext.Clients.Group(roomNum).ShowUser(UId, UserName, string.Empty, string.Empty); } await _hubContext.Groups.AddToGroupAsync(ConnectionId, roomNum); await _hubContext.Clients.GroupExcept(roomNum, ConnectionId).UserJoined(userInfo); - } /// @@ -454,7 +453,7 @@ namespace WGShare.API.Controllers.Frontend if (!result.IsNullOrEmpty() && result[0].ObjToInt() != -1) { var users = RedisHelper.Instance.HVals(RedisKeyConstant.SessionManage.GetChannelUserKey(TenantId, roomNum)); - var showUser = users.FirstOrDefault(x => x.RoleId == ((int)RoleEnums.Admin).ToString() || x.IsRoomManager); + var showUser = users.FirstOrDefault(x => x.RoleId == ((int)RoleEnums.Admin).ToString() || x.IsRoomManager || x.RoleId == ((int)RoleEnums.RoomManager).ToString()); if (showUser != null) { // 通知全员看ta @@ -509,7 +508,7 @@ namespace WGShare.API.Controllers.Frontend var polledUserIdsSet = new HashSet(polledUserIds); // 排除管理员和发言人 - var candidates = channelUserInfos.Where(x => x.RoleId != ((int)RoleEnums.Admin).ToString() && !x.IsRoomManager); + var candidates = channelUserInfos.Where(x => x.RoleId != ((int)RoleEnums.Admin).ToString() && !x.IsRoomManager && x.RoleId != ((int)RoleEnums.RoomManager).ToString()); // 使用 HashSet 提高查找效率 var userInfos = new List(); @@ -559,7 +558,7 @@ namespace WGShare.API.Controllers.Frontend { return; } - var connectionIds = channelUsers.Where(x => x.RoleId == ((int)RoleEnums.Admin).ToString()).Select(x => x.ConnectId); + var connectionIds = channelUsers.Where(x => x.RoleId == ((int)RoleEnums.Admin).ToString() || x.RoleId == ((int)RoleEnums.RoomManager).ToString()).Select(x => x.ConnectId); if (connectionIds.Any()) { @@ -567,7 +566,7 @@ namespace WGShare.API.Controllers.Frontend } } - + #region 文件分享 /// /// 分享上传文件 diff --git a/WGShare.Domain/Enums/RoleEnums.cs b/WGShare.Domain/Enums/RoleEnums.cs index f830798..0908383 100644 --- a/WGShare.Domain/Enums/RoleEnums.cs +++ b/WGShare.Domain/Enums/RoleEnums.cs @@ -17,5 +17,7 @@ namespace WGShare.Domain.Enums Admin = 1, [Description("普通用户")] User = 2, + [Description("房间管理员")] + RoomManager = 3 } }