SysMessageService.cs 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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. [DisplayName("发送消息给所有人")]
  30. public async Task SendAllUser(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. [DisplayName("发送消息给除了发送人的其他人")]
  40. public async Task SendOtherUser(MessageInput input)
  41. {
  42. var user = _sysCacheService.Get<SysOnlineUser>(CacheConst.KeyOnlineUser + input.UserId);
  43. if (user != null)
  44. {
  45. await _chatHubContext.Clients.AllExcept(user.ConnectionId).ReceiveMessage(input);
  46. }
  47. }
  48. /// <summary>
  49. /// 发送消息给某个人
  50. /// </summary>
  51. /// <param name="input"></param>
  52. /// <returns></returns>
  53. [DisplayName("发送消息给某个人")]
  54. public async Task SendUser(MessageInput input)
  55. {
  56. var user = _sysCacheService.Get<SysOnlineUser>(CacheConst.KeyOnlineUser + input.UserId);
  57. if (user == null) return;
  58. await _chatHubContext.Clients.Client(user.ConnectionId).ReceiveMessage(input);
  59. }
  60. /// <summary>
  61. /// 发送消息给某些人
  62. /// </summary>
  63. /// <param name="input"></param>
  64. /// <returns></returns>
  65. [DisplayName("发送消息给某些人")]
  66. public async Task SendUsers(MessageInput input)
  67. {
  68. var userlist = new List<string>();
  69. foreach (var userid in input.UserIds)
  70. {
  71. var user = _sysCacheService.Get<SysOnlineUser>(CacheConst.KeyOnlineUser + userid);
  72. if (user!=null) userlist.Add(user.ConnectionId);
  73. }
  74. await _chatHubContext.Clients.Clients(userlist).ReceiveMessage(input);
  75. }
  76. /// <summary>
  77. /// 发送邮件
  78. /// </summary>
  79. /// <param name="message"></param>
  80. /// <returns></returns>
  81. [DisplayName("发送邮件")]
  82. public async Task SendEmail([Required] string message)
  83. {
  84. await _fluentEmail.To(_emailOptions.DefaultToEmail).Body(message).SendAsync();
  85. }
  86. }