MessageService.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. using Microsoft.AspNetCore.SignalR;
  2. using NETCore.MailKit.Core;
  3. namespace Admin.NET.Core.Service;
  4. /// <summary>
  5. /// 消息发送服务
  6. /// </summary>
  7. [ApiDescriptionSettings(Name = "消息发送", Order = 101)]
  8. public class MessageService : IMessageService, IDynamicApiController, ITransient
  9. {
  10. private readonly ISysCacheService _sysCacheService;
  11. private readonly IHubContext<ChatHub, IChatClient> _chatHubContext;
  12. private readonly EmailOptions _emailOptions;
  13. private readonly IEmailService _emailService;
  14. public MessageService(ISysCacheService sysCacheService,
  15. IHubContext<ChatHub, IChatClient> chatHubContext,
  16. IOptions<EmailOptions> emailOptions,
  17. IEmailService emailService)
  18. {
  19. _sysCacheService = sysCacheService;
  20. _chatHubContext = chatHubContext;
  21. _emailOptions = emailOptions.Value;
  22. _emailService = emailService;
  23. }
  24. /// <summary>
  25. /// 发送消息给所有人
  26. /// </summary>
  27. /// <param name="title">发送标题</param>
  28. /// <param name="message">发送内容</param>
  29. /// <param name="type">消息类型</param>
  30. /// <returns></returns>
  31. [HttpGet("sysMessage/allUser")]
  32. public async Task SendMessageToAllUser(string title, string message, MessageTypeEnum type)
  33. {
  34. await _chatHubContext.Clients.All.ReceiveMessage(new { Title = title, Message = message, Messagetype = type });
  35. }
  36. /// <summary>
  37. /// 发送消息给除了发送人的其他人
  38. /// </summary>
  39. /// <param name="title">发送标题</param>
  40. /// <param name="message">发送内容</param>
  41. /// <param name="userId">发送人</param>
  42. /// <param name="type">消息类型</param>
  43. /// <returns></returns>
  44. [HttpGet("sysMessage/otherUser")]
  45. public async Task SendMessageToOtherUser(string title, string message, MessageTypeEnum type, long userId)
  46. {
  47. var onlineuserlist = await _sysCacheService.GetAsync<List<SysOnlineUser>>(CacheConst.KeyOnlineUser);
  48. var user = onlineuserlist.Where(x => x.UserId == userId).ToList();
  49. if (user != null)
  50. {
  51. await _chatHubContext.Clients.AllExcept(user[0].ConnectionId).ReceiveMessage(new { Title = title, Message = message, Messagetype = type });
  52. }
  53. }
  54. /// <summary>
  55. /// 发送消息给某个人
  56. /// </summary>
  57. /// <param name="title">发送标题</param>
  58. /// <param name="message">发送内容</param>
  59. /// <param name="userId">接收人</param>
  60. /// <param name="type">消息类型</param>
  61. /// <returns></returns>
  62. [HttpGet("sysMessage/user")]
  63. public async Task SendMessageToUser(string title, string message, MessageTypeEnum type, long userId)
  64. {
  65. var onlineuserlist = await _sysCacheService.GetAsync<List<SysOnlineUser>>(CacheConst.KeyOnlineUser);
  66. var user = onlineuserlist.Where(x => x.UserId == userId).ToList();
  67. if (user != null)
  68. {
  69. foreach (var item in user)
  70. {
  71. await _chatHubContext.Clients.Client(item.ConnectionId).ReceiveMessage(new { Title = title, Message = message, Messagetype = type });
  72. }
  73. }
  74. }
  75. /// <summary>
  76. /// 发送消息给某些人
  77. /// </summary>
  78. /// <param name="title">发送标题</param>
  79. /// <param name="message">发送内容</param>
  80. /// <param name="userId">接收人列表</param>
  81. /// <param name="type">消息类型</param>
  82. /// <returns></returns>
  83. [HttpGet("sysMessage/users")]
  84. public async Task SendMessageToUsers(string title, string message, MessageTypeEnum type, List<long> userId)
  85. {
  86. var onlineuserlist = await _sysCacheService.GetAsync<List<SysOnlineUser>>(CacheConst.KeyOnlineUser);
  87. var userlist = new List<string>();
  88. foreach (var item in onlineuserlist)
  89. {
  90. if (userId.Contains(item.UserId))
  91. userlist.Add(item.ConnectionId);
  92. }
  93. await _chatHubContext.Clients.Clients(userlist).ReceiveMessage(new { Title = title, Message = message, Messagetype = type });
  94. }
  95. /// <summary>
  96. /// 发送邮件
  97. /// </summary>
  98. /// <returns></returns>
  99. [HttpPost("/email/send")]
  100. public async Task SendEmail(string message)
  101. {
  102. //// 设置发送人邮件地址和名称
  103. //var sendInfo = new SenderInfo
  104. //{
  105. // SenderEmail = _emailOptions.SenderEmail,
  106. // SenderName = _emailOptions.SenderName,
  107. //};
  108. await _emailService.SendAsync(_emailOptions.ToEmail, _emailOptions.SenderName, message);
  109. }
  110. }