SysOnlineUserService.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using Microsoft.AspNetCore.SignalR;
  2. namespace Admin.NET.Core.Service;
  3. /// <summary>
  4. /// 系统在线用户服务
  5. /// </summary>
  6. [ApiDescriptionSettings(Order = 100)]
  7. public class SysOnlineUserService : ISysOnlineUserService, IDynamicApiController, ITransient
  8. {
  9. private readonly SqlSugarRepository<SysOnlineUser> _sysOnlineUerRep;
  10. private readonly IHubContext<ChatHub, IChatClient> _chatHubContext;
  11. private readonly SysConfigService _sysConfigService;
  12. public SysOnlineUserService(SqlSugarRepository<SysOnlineUser> sysOnlineUerRep,
  13. IHubContext<ChatHub, IChatClient> chatHubContext,
  14. SysConfigService sysConfigService)
  15. {
  16. _sysOnlineUerRep = sysOnlineUerRep;
  17. _chatHubContext = chatHubContext;
  18. _sysConfigService = sysConfigService;
  19. }
  20. /// <summary>
  21. /// 获取在线用户信息
  22. /// </summary>
  23. /// <returns></returns>
  24. [HttpGet("/sysOnlineUser/page")]
  25. public async Task<dynamic> List([FromQuery] BasePageInput input)
  26. {
  27. return await _sysOnlineUerRep.AsQueryable().ToPagedListAsync(input.Page, input.PageSize);
  28. }
  29. /// <summary>
  30. /// 强制下线
  31. /// </summary>
  32. /// <param name="user"></param>
  33. /// <returns></returns>
  34. [HttpPost("/sysOnlineUser/forceExist")]
  35. [NonValidation]
  36. public async Task ForceExist(SysOnlineUser user)
  37. {
  38. await _chatHubContext.Clients.Client(user.ConnectionId).ForceExist("00000000");
  39. await _sysOnlineUerRep.DeleteAsync(user);
  40. }
  41. /// <summary>
  42. /// 发送消息
  43. /// </summary>
  44. /// <param name="notice"></param>
  45. /// <param name="userIds"></param>
  46. /// <returns></returns>
  47. [NonAction]
  48. public async Task PushNotice(SysNotice notice, List<long> userIds)
  49. {
  50. var userList = await _sysOnlineUerRep.GetListAsync(m => userIds.Contains(m.UserId));
  51. if (userList.Any())
  52. {
  53. foreach (var item in userList)
  54. {
  55. await _chatHubContext.Clients.Client(item.ConnectionId).AppendNotice(notice);
  56. }
  57. }
  58. }
  59. /// <summary>
  60. /// 单用户登录
  61. /// </summary>
  62. /// <returns></returns>
  63. [NonAction]
  64. public async Task SignleLogin(long userId)
  65. {
  66. if (await _sysConfigService.GetConfigValue<bool>(CommonConst.SysSingleLogin))
  67. {
  68. var loginUser = await _sysOnlineUerRep.GetFirstAsync(u => u.UserId == userId);
  69. if (loginUser == null) return;
  70. await ForceExist(loginUser);
  71. }
  72. }
  73. }