SysUserOnlineController.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using Microsoft.AspNetCore.Mvc;
  2. using Microsoft.AspNetCore.SignalR;
  3. using ZR.Model;
  4. using ZR.Model.System.Dto;
  5. using ZR.ServiceCore.Signalr;
  6. namespace ZR.Admin.WebApi.Controllers.monitor
  7. {
  8. /// <summary>
  9. /// 在线用户
  10. /// </summary>
  11. [Route("monitor/online")]
  12. [ApiExplorerSettings(GroupName = "sys")]
  13. public class SysUserOnlineController : BaseController
  14. {
  15. private readonly IHubContext<MessageHub> HubContext;
  16. public SysUserOnlineController(IHubContext<MessageHub> hubContext)
  17. {
  18. HubContext = hubContext;
  19. }
  20. /// <summary>
  21. /// 获取在线用户列表
  22. /// </summary>
  23. /// <param name="parm"></param>
  24. /// <returns></returns>
  25. [HttpGet("list")]
  26. public IActionResult Index([FromQuery] PagerInfo parm)
  27. {
  28. var result = MessageHub.OnlineClients.Values
  29. .OrderByDescending(f => f.LoginTime)
  30. .Skip(parm.PageNum - 1).Take(parm.PageSize);
  31. return SUCCESS(new { result, totalNum = MessageHub.OnlineClients.Values.Count });
  32. }
  33. /// <summary>
  34. /// 单个强退
  35. /// </summary>
  36. /// <returns></returns>
  37. [HttpDelete("force")]
  38. [Log(Title = "强退", BusinessType = BusinessType.FORCE)]
  39. [ActionPermissionFilter(Permission = "monitor:online:forceLogout")]
  40. public async Task<IActionResult> Force([FromBody] LockUserDto dto)
  41. {
  42. if (dto == null) { return ToResponse(ResultCode.PARAM_ERROR); }
  43. await HubContext.Clients.Client(dto.ConnnectionId)
  44. .SendAsync(HubsConstant.ForceUser, new { dto.Reason, dto.Time });
  45. //var expirTime = DateTimeHelper.GetUnixTimeSeconds(DateTime.Now.AddMinutes(dto.Time));
  46. ////PC 端采用设备 + 用户名的方式进行封锁
  47. //CacheService.SetLockUser(dto.ClientId + dto.Name, expirTime, dto.Time);
  48. return SUCCESS(1);
  49. }
  50. /// <summary>
  51. /// 批量强退
  52. /// </summary>
  53. /// <returns></returns>
  54. [HttpDelete("batchForce")]
  55. [Log(Title = "强退", BusinessType = BusinessType.FORCE)]
  56. [ActionPermissionFilter(Permission = "monitor:online:batchLogout")]
  57. public async Task<IActionResult> BatchforceLogout([FromBody] LockUserDto dto)
  58. {
  59. if (dto == null) { return ToResponse(ResultCode.PARAM_ERROR); }
  60. await HubContext.Clients.All.SendAsync(HubsConstant.ForceUser, new { dto.Reason });
  61. return SUCCESS(1);
  62. }
  63. }
  64. }