SysMessageService.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. using Microsoft.AspNetCore.SignalR;
  2. using NETCore.MailKit.Core;
  3. namespace Admin.NET.Core.Service;
  4. /// <summary>
  5. /// 系统消息发送服务
  6. /// </summary>
  7. [ApiDescriptionSettings(Order = 101)]
  8. public class SysMessageService : ISysMessageService, 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 SysMessageService(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="input"></param>
  28. /// <returns></returns>
  29. [HttpPost("sysMessage/allUser")]
  30. public async Task SendMessageToAllUser(MessageInput input)
  31. {
  32. await _chatHubContext.Clients.All.ReceiveMessage(input);
  33. }
  34. /// <summary>
  35. /// 发送消息给除了发送人的其他人
  36. /// </summary>
  37. /// <param name="input"></param>
  38. /// <returns></returns>
  39. [HttpPost("sysMessage/otherUser")]
  40. public async Task SendMessageToOtherUser(MessageInput input)
  41. {
  42. var onlineuserlist = await _sysCacheService.GetAsync<List<SysOnlineUser>>(CacheConst.KeyOnlineUser);
  43. var user = onlineuserlist.Where(x => x.UserId == input.UserId).ToList();
  44. if (user != null)
  45. {
  46. await _chatHubContext.Clients.AllExcept(user[0].ConnectionId).ReceiveMessage(input);
  47. }
  48. }
  49. /// <summary>
  50. /// 发送消息给某个人
  51. /// </summary>
  52. /// <param name="input"></param>
  53. /// <returns></returns>
  54. [HttpPost("sysMessage/user")]
  55. public async Task SendMessageToUser(MessageInput input)
  56. {
  57. var onlineuserlist = await _sysCacheService.GetAsync<List<SysOnlineUser>>(CacheConst.KeyOnlineUser);
  58. var user = onlineuserlist.Where(x => x.UserId == input.UserId).ToList();
  59. if (user == null) return;
  60. foreach (var item in user)
  61. {
  62. await _chatHubContext.Clients.Client(item.ConnectionId).ReceiveMessage(input);
  63. }
  64. }
  65. /// <summary>
  66. /// 发送消息给某些人
  67. /// </summary>
  68. /// <param name="input"></param>
  69. /// <returns></returns>
  70. [HttpPost("sysMessage/users")]
  71. public async Task SendMessageToUsers(MessageInput input)
  72. {
  73. var onlineuserlist = await _sysCacheService.GetAsync<List<SysOnlineUser>>(CacheConst.KeyOnlineUser);
  74. var userlist = new List<string>();
  75. foreach (var item in onlineuserlist)
  76. {
  77. if (input.UserIds.Contains(item.UserId))
  78. userlist.Add(item.ConnectionId);
  79. }
  80. await _chatHubContext.Clients.Clients(userlist).ReceiveMessage(input);
  81. }
  82. /// <summary>
  83. /// 发送邮件
  84. /// </summary>
  85. /// <param name="message"></param>
  86. /// <returns></returns>
  87. [HttpPost("/email/send")]
  88. public async Task SendEmail(string message)
  89. {
  90. //// 设置发送人邮件地址和名称
  91. //var sendInfo = new SenderInfo
  92. //{
  93. // SenderEmail = _emailOptions.SenderEmail,
  94. // SenderName = _emailOptions.SenderName,
  95. //};
  96. await _emailService.SendAsync(_emailOptions.ToEmail, _emailOptions.SenderName, message);
  97. }
  98. }