using iWare.Wms.Core; using Furion.DatabaseAccessor; using Furion.DependencyInjection; using Furion.DynamicApiController; using Mapster; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.SignalR; using Microsoft.EntityFrameworkCore; namespace iWare.Wms.Application { /// /// 在线用户服务 /// [ApiDescriptionSettings(Name = "OnlineUser", Order = 100)] [Route("api")] public class SysOnlineUserService : ISysOnlineUserService, IDynamicApiController, ITransient { private readonly ISysCacheService _sysCacheService; private readonly IRepository _sysUserRep;// 用户表仓储 //private readonly IRepository _sysTenantRep;// 租户仓储 private readonly IHubContext _chatHubContext; public SysOnlineUserService(ISysCacheService sysCacheService, IRepository sysUerRep, //IRepository sysTenantRep, IHubContext chatHubContext) { _sysCacheService = sysCacheService; _sysUserRep = sysUerRep; //_sysTenantRep = sysTenantRep; _chatHubContext = chatHubContext; } /// /// 分页获取在线用户信息 /// /// /// [HttpGet("sysOnlineUser/page")] public async Task> QueryOnlineUserPageList([FromQuery] PageInputBase input) { var onlineUsers = await _sysCacheService.GetAsync>(CommonConst.CACHE_KEY_ONLINE_USER) ?? new List(); var currUser = _sysUserRep.FirstOrDefault(u => u.Id == CurrentUserInfo.UserId, false); var onlineUserOutputs = onlineUsers //.Where(!CurrentUserInfo.IsSuperAdmin, o => o.TenantId == currUser.TenantId) .Where(!string.IsNullOrWhiteSpace(input.SearchValue), o => o.Account.Contains(input.SearchValue) || o.Name.Contains(input.SearchValue)) .Select(o => o.Adapt()); var currentPageData = onlineUserOutputs.ToADPagedList(input.PageNo, input.PageSize); //填充租户名称 //var tenants = await _sysTenantRep.DetachedEntities.ToListAsync(); //currentPageData.Rows.ToList().ForEach(o => o.TenantName = tenants.FirstOrDefault(p => p.Id == o.TenantId)?.Name); return currentPageData; } /// /// 获取在线用户信息 /// /// [HttpGet("sysOnlineUser/list")] public async Task> List() { var onlineUsers = await _sysCacheService.GetAsync>(CommonConst.CACHE_KEY_ONLINE_USER) ?? new List(); var currUser = _sysUserRep.FirstOrDefault(u => u.Id == CurrentUserInfo.UserId, false); var onlineUserOutputs = onlineUsers //.Where(!CurrentUserInfo.IsSuperAdmin, o => o.TenantId == currUser.TenantId) .Select(o => o.Adapt()) .ToList(); //填充租户名称 //var tenants = await _sysTenantRep.DetachedEntities.ToListAsync(); //onlineUserOutputs.ForEach(o => o.TenantName = tenants.FirstOrDefault(p => p.Id == o.TenantId)?.Name); return onlineUserOutputs; } /// /// 强制下线 /// /// /// [HttpPost("sysOnlineUser/forceExist")] public async Task ForceExist([FromBody] OnlineUser user) { await _chatHubContext.Clients.Client(user.ConnectionId).ForceExist(); } /// /// 单用户登录强制下线 /// /// /// public async Task SingleLoginForceExist([FromBody] OnlineUser user) { await _chatHubContext.Clients.Client(user.ConnectionId).SingleLoginForceExist(); } } }