using iWare.Wms.Core; using Furion.DependencyInjection; using Furion.DynamicApiController; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.SignalR; namespace iWare.Wms.Application { /// /// 消息发送服务 /// [ApiDescriptionSettings(Name = "Message", Order = 100)] [Route("api")] public class SendMessageService : ISendMessageService, IDynamicApiController, ITransient { private readonly ISysCacheService _sysCacheService; private readonly IHubContext _chatHubContext; public SendMessageService(ISysCacheService sysCacheService, IHubContext chatHubContext) { _sysCacheService = sysCacheService; _chatHubContext = chatHubContext; } /// /// 发送消息给所有人 /// /// 发送标题 /// 发送内容 /// 消息类型 /// [HttpGet("sysMessage/allUser")] public async Task SendMessageToAllUser(string title, string message, MessageType type) { await _chatHubContext.Clients.All.ReceiveMessage(new { title = title, message = message, messagetype = type }); } /// /// 发送消息给除了发送人的其他人 /// /// 发送标题 /// 发送内容 /// 发送人 /// 消息类型 /// [HttpGet("sysMessage/otherUser")] public async Task SendMessageToOtherUser(string title, string message, MessageType type, long userId) { var onlineuserlist = await _sysCacheService.GetAsync>(CommonConst.CACHE_KEY_ONLINE_USER); var user = onlineuserlist.Where(x => x.UserId == userId).ToList(); if (user != null) { await _chatHubContext.Clients.AllExcept(user[0].ConnectionId).ReceiveMessage(new { title = title, message = message, messagetype = type }); } } /// /// 发送消息给某个人 /// /// 发送标题 /// 发送内容 /// 接收人 /// 消息类型 /// [HttpGet("sysMessage/user")] public async Task SendMessageToUser(string title, string message, MessageType type, long userId) { var onlineuserlist = await _sysCacheService.GetAsync>(CommonConst.CACHE_KEY_ONLINE_USER); var user = onlineuserlist.Where(x => x.UserId == userId).ToList(); if (user != null) { foreach (var item in user) { await _chatHubContext.Clients.Client(item.ConnectionId).ReceiveMessage(new { title = title, message = message, messagetype = type }); } } } /// /// 发送消息给某些人 /// /// 发送标题 /// 发送内容 /// 接收人列表 /// 消息类型 /// [HttpGet("sysMessage/users")] public async Task SendMessageToUsers(string title, string message, MessageType type, List userId) { var onlineuserlist = await _sysCacheService.GetAsync>(CommonConst.CACHE_KEY_ONLINE_USER); List userlist = new List(); foreach (var item in onlineuserlist) { if (userId.Contains(item.UserId)) { userlist.Add(item.ConnectionId); } } await _chatHubContext.Clients.Clients(userlist).ReceiveMessage(new { title = title, message = message, messagetype = type }); } } }