diff --git a/Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj b/Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj index 517fd894..ab71dab5 100644 --- a/Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj +++ b/Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj @@ -18,9 +18,9 @@ - - - + + + diff --git a/Admin.NET/Admin.NET.Core/Entity/SysOnlineUser.cs b/Admin.NET/Admin.NET.Core/Entity/SysOnlineUser.cs index 28cc53c1..4f960f7d 100644 --- a/Admin.NET/Admin.NET.Core/Entity/SysOnlineUser.cs +++ b/Admin.NET/Admin.NET.Core/Entity/SysOnlineUser.cs @@ -4,8 +4,6 @@ // // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! -using Org.BouncyCastle.Crypto; - namespace Admin.NET.Core; /// @@ -71,11 +69,13 @@ public partial class SysOnlineUser : EntityTenantId /// /// 登录模式 /// - [SugarColumn(ColumnDescription = "登陆模式")] + [SugarColumn(ColumnDescription = "登录模式")] public LoginModeEnum? LoginMode { get; set; } - [SugarColumn(ColumnDescription = "设备")] + /// + /// 登录设备 + /// + [SugarColumn(ColumnDescription = "登录设备", Length = 256)] [MaxLength(256)] public string? Device { get; set; } - } \ No newline at end of file diff --git a/Admin.NET/Admin.NET.Core/Hub/OnlineUserHub.cs b/Admin.NET/Admin.NET.Core/Hub/OnlineUserHub.cs index c00ffdd1..8bef0735 100644 --- a/Admin.NET/Admin.NET.Core/Hub/OnlineUserHub.cs +++ b/Admin.NET/Admin.NET.Core/Hub/OnlineUserHub.cs @@ -65,18 +65,15 @@ public class OnlineUserHub : Hub }; await _sysOnlineUerRep.InsertAsync(user); - // _sysCacheService.HashAdd(CacheConst.KeyUserOnline, user.UserId.ToString(), user); - // 是否开启单用户登录 if (await _sysConfigService.GetConfigValue(ConfigConst.SysSingleLogin)) { - _sysCacheService.HashAdd(CacheConst.KeyUserOnline,""+user.UserId + loginMode, user); + _sysCacheService.HashAdd(CacheConst.KeyUserOnline, "" + user.UserId + loginMode, user); } - else //非单用户登录则绑定用户设备信息 + else // 非单用户登录则绑定用户设备信息 { _sysCacheService.HashAdd(CacheConst.KeyUserOnline, user.UserId + device, user); } - // 以租户Id进行分组 var groupName = $"{GROUP_ONLINE}{user.TenantId}"; @@ -112,13 +109,13 @@ public class OnlineUserHub : Hub if (await _sysConfigService.GetConfigValue(ConfigConst.SysSingleLogin)) { _sysCacheService.HashDel(CacheConst.KeyUserOnline, "" + user.UserId + user.LoginMode); - // _sysCacheService.Remove(CacheConst.KeyUserOnline + user.UserId); + // _sysCacheService.Remove(CacheConst.KeyUserOnline + user.UserId); } else { var device = httpContext.GetClientDeviceInfo().Trim(); _sysCacheService.HashDel(CacheConst.KeyUserOnline, user.UserId + device); - // _sysCacheService.Remove(CacheConst.KeyUserOnline + user.UserId + device); + // _sysCacheService.Remove(CacheConst.KeyUserOnline + user.UserId + device); } // 通知当前组用户变动 diff --git a/Admin.NET/Admin.NET.Core/Service/Cache/SysCacheService.cs b/Admin.NET/Admin.NET.Core/Service/Cache/SysCacheService.cs index 6c699aca..7637d7cc 100644 --- a/Admin.NET/Admin.NET.Core/Service/Cache/SysCacheService.cs +++ b/Admin.NET/Admin.NET.Core/Service/Cache/SysCacheService.cs @@ -4,7 +4,6 @@ // // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! -using NewLife.Caching.Models; using NewLife.Reflection; using Newtonsoft.Json; @@ -276,7 +275,6 @@ public class SysCacheService : IDynamicApiController, ISingleton foreach (var v in dic) { hash.Add(v); - } return true; } diff --git a/Admin.NET/Admin.NET.Core/Service/Message/SysMessageService.cs b/Admin.NET/Admin.NET.Core/Service/Message/SysMessageService.cs index f46e4579..adae3c31 100644 --- a/Admin.NET/Admin.NET.Core/Service/Message/SysMessageService.cs +++ b/Admin.NET/Admin.NET.Core/Service/Message/SysMessageService.cs @@ -5,7 +5,6 @@ // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! using Microsoft.AspNetCore.SignalR; -using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; namespace Admin.NET.Core.Service; @@ -48,8 +47,8 @@ public class SysMessageService : IDynamicApiController, ITransient public async Task SendOtherUser(MessageInput input) { var hashKey = _sysCacheService.HashGetAll(CacheConst.KeyUserOnline); - var exceptRecevieUsers = hashKey.Where(t => t.Value.UserId == input.ReceiveUserId).Select(t => t.Value).ToList(); - await _chatHubContext.Clients.AllExcept(exceptRecevieUsers.Select(t=>t.ConnectionId)).ReceiveMessage(input); + var exceptRecevieUsers = hashKey.Where(u => u.Value.UserId == input.ReceiveUserId).Select(u => u.Value).ToList(); + await _chatHubContext.Clients.AllExcept(exceptRecevieUsers.Select(t => t.ConnectionId)).ReceiveMessage(input); } /// @@ -61,8 +60,8 @@ public class SysMessageService : IDynamicApiController, ITransient public async Task SendUser(MessageInput input) { var hashKey = _sysCacheService.HashGetAll(CacheConst.KeyUserOnline); - var recevieUsers = hashKey.Where(t => t.Value.UserId == input.ReceiveUserId).Select(t => t.Value).ToList(); - await recevieUsers.ForEachAsync(t => _chatHubContext.Clients.Client(t.ConnectionId).ReceiveMessage(input)); + var recevieUsers = hashKey.Where(u => u.Value.UserId == input.ReceiveUserId).Select(u => u.Value).ToList(); + await recevieUsers.ForEachAsync(u => _chatHubContext.Clients.Client(u.ConnectionId).ReceiveMessage(input)); } /// @@ -74,7 +73,7 @@ public class SysMessageService : IDynamicApiController, ITransient public async Task SendUsers(MessageInput input) { var hashKey = _sysCacheService.HashGetAll(CacheConst.KeyUserOnline); - var recevieUsers = hashKey.Where(t => input.UserIds.Any(c => c == t.Value.UserId)).Select(t => t.Value).ToList(); - await recevieUsers.ForEachAsync(t => _chatHubContext.Clients.Client(t.ConnectionId).ReceiveMessage(input)); + var recevieUsers = hashKey.Where(u => input.UserIds.Any(a => a == u.Value.UserId)).Select(u => u.Value).ToList(); + await recevieUsers.ForEachAsync(u => _chatHubContext.Clients.Client(u.ConnectionId).ReceiveMessage(input)); } } \ No newline at end of file diff --git a/Admin.NET/Admin.NET.Core/Service/Org/SysOrgService.cs b/Admin.NET/Admin.NET.Core/Service/Org/SysOrgService.cs index 06e9e9b7..e92a1489 100644 --- a/Admin.NET/Admin.NET.Core/Service/Org/SysOrgService.cs +++ b/Admin.NET/Admin.NET.Core/Service/Org/SysOrgService.cs @@ -302,7 +302,7 @@ public class SysOrgService : IDynamicApiController, ITransient [NonAction] public async Task> GetUserOrgIdList(long userId, long userOrgId) { - return await _sysCacheService.AdGetAsync(CacheConst.KeyUserOrg, async (i1, i2) => + return await _sysCacheService.AdGetAsync(CacheConst.KeyUserOrg, async (_, _) => { // 本人创建机构集合 var orgList0 = await _sysOrgRep.AsQueryable().Where(u => u.CreateUserId == userId).Select(u => u.Id).ToListAsync(); @@ -311,7 +311,11 @@ public class SysOrgService : IDynamicApiController, ITransient // 角色机构集合 var orgList2 = await GetUserRoleOrgIdList(userId, userOrgId); // 机构并集 - return orgList1.Select(u => u.OrgId).Union(orgList2).Union(orgList0).ToList(); + var orgIdList = orgList1.Select(u => u.OrgId).Union(orgList2).Union(orgList0).ToList(); + // 当前所属机构 + if (!orgIdList.Contains(userOrgId)) + orgIdList.Add(userOrgId); + return orgIdList; }, userId, userOrgId); }