SysMessageService.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. using FluentEmail.Core;
  2. using Microsoft.AspNetCore.SignalR;
  3. namespace Admin.NET.Core.Service;
  4. /// <summary>
  5. /// 系统消息发送服务
  6. /// </summary>
  7. [ApiDescriptionSettings(Order = 370)]
  8. public class SysMessageService : IDynamicApiController, ITransient
  9. {
  10. private readonly SysCacheService _sysCacheService;
  11. private readonly EmailOptions _emailOptions;
  12. private readonly IFluentEmail _fluentEmail;
  13. private readonly IHubContext<OnlineUserHub, IOnlineUserHub> _chatHubContext;
  14. public SysMessageService(SysCacheService sysCacheService,
  15. IOptions<EmailOptions> emailOptions,
  16. IFluentEmail fluentEmail,
  17. IHubContext<OnlineUserHub, IOnlineUserHub> chatHubContext)
  18. {
  19. _sysCacheService = sysCacheService;
  20. _emailOptions = emailOptions.Value;
  21. _fluentEmail = fluentEmail;
  22. _chatHubContext = chatHubContext;
  23. }
  24. /// <summary>
  25. /// 发送消息给所有人
  26. /// </summary>
  27. /// <param name="input"></param>
  28. /// <returns></returns>
  29. [ApiDescriptionSettings(Name = "SendAllUser")]
  30. [DisplayName("发送消息给所有人")]
  31. public async Task SendAllUser(MessageInput input)
  32. {
  33. await _chatHubContext.Clients.All.ReceiveMessage(input);
  34. }
  35. /// <summary>
  36. /// 发送消息给除了发送人的其他人
  37. /// </summary>
  38. /// <param name="input"></param>
  39. /// <returns></returns>
  40. [ApiDescriptionSettings(Name = "SendOtherUser")]
  41. [DisplayName("发送消息给除了发送人的其他人")]
  42. public async Task SendOtherUser(MessageInput input)
  43. {
  44. var onlineuserlist = _sysCacheService.Get<List<SysOnlineUser>>(CacheConst.KeyOnlineUser);
  45. var user = onlineuserlist.Where(x => x.UserId == input.UserId).ToList();
  46. if (user != null)
  47. {
  48. await _chatHubContext.Clients.AllExcept(user[0].ConnectionId).ReceiveMessage(input);
  49. }
  50. }
  51. /// <summary>
  52. /// 发送消息给某个人
  53. /// </summary>
  54. /// <param name="input"></param>
  55. /// <returns></returns>
  56. [ApiDescriptionSettings(Name = "SendUser")]
  57. [DisplayName("发送消息给某个人")]
  58. public async Task SendUser(MessageInput input)
  59. {
  60. var onlineuserlist = _sysCacheService.Get<List<SysOnlineUser>>(CacheConst.KeyOnlineUser);
  61. var user = onlineuserlist.Where(x => x.UserId == input.UserId).ToList();
  62. if (user == null) return;
  63. foreach (var item in user)
  64. {
  65. await _chatHubContext.Clients.Client(item.ConnectionId).ReceiveMessage(input);
  66. }
  67. }
  68. /// <summary>
  69. /// 发送消息给某些人
  70. /// </summary>
  71. /// <param name="input"></param>
  72. /// <returns></returns>
  73. [ApiDescriptionSettings(Name = "SendUsers")]
  74. [DisplayName("发送消息给某些人")]
  75. public async Task SendUsers(MessageInput input)
  76. {
  77. var onlineuserlist = _sysCacheService.Get<List<SysOnlineUser>>(CacheConst.KeyOnlineUser);
  78. var userlist = new List<string>();
  79. foreach (var item in onlineuserlist)
  80. {
  81. if (input.UserIds.Contains(item.UserId))
  82. userlist.Add(item.ConnectionId);
  83. }
  84. await _chatHubContext.Clients.Clients(userlist).ReceiveMessage(input);
  85. }
  86. /// <summary>
  87. /// 发送邮件
  88. /// </summary>
  89. /// <param name="message"></param>
  90. /// <returns></returns>
  91. [ApiDescriptionSettings(Name = "SendEmail")]
  92. [DisplayName("发送邮件")]
  93. public async Task SendEmail([Required] string message)
  94. {
  95. await _fluentEmail.To(_emailOptions.DefaultToEmail).Body(message).SendAsync();
  96. }
  97. }