using Admin.NET.Core;
using Furion.DatabaseAccessor;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.SignalR;
using Microsoft.EntityFrameworkCore;
namespace Admin.NET.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();
}
}
}