2
schangxiang@126.com
2024-06-12 84e21901f4548f6f2df3560668a0c5a45b51d5b5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
using iWare.Wms.Core;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.SignalR;
 
namespace iWare.Wms.Application
{
    /// <summary>
    /// 消息发送服务
    /// </summary>
    [ApiDescriptionSettings(Name = "Message", Order = 100)]
    [Route("api")]
    public class SendMessageService : ISendMessageService, IDynamicApiController, ITransient
    {
        private readonly ISysCacheService _sysCacheService;
        private readonly IHubContext<ChatHub, IChatClient> _chatHubContext;
 
        public SendMessageService(ISysCacheService sysCacheService, IHubContext<ChatHub, IChatClient> chatHubContext)
        {
            _sysCacheService = sysCacheService;
            _chatHubContext = chatHubContext;
        }
 
        /// <summary>
        /// 发送消息给所有人
        /// </summary>
        /// <param name="title">发送标题</param>
        /// <param name="message">发送内容</param>
        /// <param name="type">消息类型</param>
        /// <returns></returns>
        [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 });
        }
 
        /// <summary>
        /// 发送消息给除了发送人的其他人
        /// </summary>
        /// <param name="title">发送标题</param>
        /// <param name="message">发送内容</param>
        /// <param name="userId">发送人</param>
        /// <param name="type">消息类型</param>
        /// <returns></returns>
        [HttpGet("sysMessage/otherUser")]
        public async Task SendMessageToOtherUser(string title, string message, MessageType type, long userId)
        {
            var onlineuserlist = await _sysCacheService.GetAsync<List<OnlineUser>>(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 });
            }
        }
 
        /// <summary>
        /// 发送消息给某个人
        /// </summary>
        /// <param name="title">发送标题</param>
        /// <param name="message">发送内容</param>
        /// <param name="userId">接收人</param>
        /// <param name="type">消息类型</param>
        /// <returns></returns>
        [HttpGet("sysMessage/user")]
        public async Task SendMessageToUser(string title, string message, MessageType type, long userId)
        {
            var onlineuserlist = await _sysCacheService.GetAsync<List<OnlineUser>>(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 });
                }
            }
        }
 
        /// <summary>
        /// 发送消息给某些人
        /// </summary>
        /// <param name="title">发送标题</param>
        /// <param name="message">发送内容</param>
        /// <param name="userId">接收人列表</param>
        /// <param name="type">消息类型</param>
        /// <returns></returns>
        [HttpGet("sysMessage/users")]
        public async Task SendMessageToUsers(string title, string message, MessageType type, List<long> userId)
        {
            var onlineuserlist = await _sysCacheService.GetAsync<List<OnlineUser>>(CommonConst.CACHE_KEY_ONLINE_USER);
 
            List<string> userlist = new List<string>();
 
            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 });
        }
    }
}