using Infrastructure.Constant; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.SignalR; using ZR.Admin.WebApi.Filters; using ZR.Admin.WebApi.Hubs; using ZR.Model; using ZR.Model.System.Dto; using ZR.Service.System; namespace ZR.Admin.WebApi.Controllers.monitor { [Verify] [Route("monitor/online")] [Tags("在线用户SysUserOnline")] [ApiExplorerSettings(GroupName = "sys")] public class SysUserOnlineController : BaseController { private readonly IHubContext HubContext; public SysUserOnlineController(IHubContext hubContext) { HubContext = hubContext; } /// /// 获取在线用户列表 /// /// /// [HttpGet("list")] public IActionResult Index([FromQuery] PagerInfo parm) { var result = MessageHub.clientUsers .OrderByDescending(f => f.LoginTime) .Skip(parm.PageNum - 1).Take(parm.PageSize); return SUCCESS(new { result, totalNum = MessageHub.clientUsers.Count }); } /// /// 强退 /// /// [HttpDelete("lock")] [Log(Title = "强退", BusinessType = BusinessType.FORCE)] public async Task Lock([FromBody] LockUserDto dto) { if (dto == null) { return ToResponse(ResultCode.PARAM_ERROR); } await HubContext.Clients.Client(dto.ConnnectionId).SendAsync(HubsConstant.LockUser, new { dto.Reason, dto.Time }); var expirTime = DateTimeHelper.GetUnixTimeSeconds(DateTime.Now.AddMinutes(dto.Time)); CacheService.SetLockUser(dto.ClientId, expirTime, dto.Time); return SUCCESS(new { expirTime }); } } }