Browse Source

feat: the user can specify the notification distributor.

pull/667/head
cKey 3 years ago
parent
commit
88402afcee
  1. 8
      aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/INotificationSender.cs
  2. 18
      aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/Internal/NotificationSender.cs
  3. 8
      aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NotificationEto.cs
  4. 12
      aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/EventBus/Distributed/NotificationEventHandler.cs
  5. 18
      aspnet-core/tests/LINGYUN.Abp.Notifications.Tests/LINGYUN/Abp/Notifications/FakeNotificationSender.cs

8
aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/INotificationSender.cs

@ -17,13 +17,15 @@ namespace LINGYUN.Abp.Notifications
/// <param name="users">用户列表,为空标识发给所有订阅用户</param> /// <param name="users">用户列表,为空标识发给所有订阅用户</param>
/// <param name="tenantId">租户</param> /// <param name="tenantId">租户</param>
/// <param name="severity">严重级别</param> /// <param name="severity">严重级别</param>
/// <param name="useProviders">使用通知提供程序</param>
/// <returns>通知标识</returns> /// <returns>通知标识</returns>
Task<string> SendNofiterAsync( Task<string> SendNofiterAsync(
string name, string name,
NotificationData data, NotificationData data,
IEnumerable<UserIdentifier> users = null, IEnumerable<UserIdentifier> users = null,
Guid? tenantId = null, Guid? tenantId = null,
NotificationSeverity severity = NotificationSeverity.Info); NotificationSeverity severity = NotificationSeverity.Info,
IEnumerable<string> useProviders = null);
/// <summary> /// <summary>
/// 发送模板通知 /// 发送模板通知
/// </summary> /// </summary>
@ -32,12 +34,14 @@ namespace LINGYUN.Abp.Notifications
/// <param name="users">用户列表,为空标识发给所有订阅用户</param> /// <param name="users">用户列表,为空标识发给所有订阅用户</param>
/// <param name="tenantId">租户</param> /// <param name="tenantId">租户</param>
/// <param name="severity">严重级别</param> /// <param name="severity">严重级别</param>
/// <param name="useProviders">使用通知提供程序</param>
/// <returns></returns> /// <returns></returns>
Task<string> SendNofiterAsync( Task<string> SendNofiterAsync(
string name, string name,
NotificationTemplate template, NotificationTemplate template,
IEnumerable<UserIdentifier> users = null, IEnumerable<UserIdentifier> users = null,
Guid? tenantId = null, Guid? tenantId = null,
NotificationSeverity severity = NotificationSeverity.Info); NotificationSeverity severity = NotificationSeverity.Info,
IEnumerable<string> useProviders = null);
} }
} }

18
aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/Internal/NotificationSender.cs

@ -61,9 +61,10 @@ namespace LINGYUN.Abp.Notifications
NotificationData data, NotificationData data,
IEnumerable<UserIdentifier> users = null, IEnumerable<UserIdentifier> users = null,
Guid? tenantId = null, Guid? tenantId = null,
NotificationSeverity severity = NotificationSeverity.Info) NotificationSeverity severity = NotificationSeverity.Info,
IEnumerable<string> useProviders = null)
{ {
return await PublishNofiterAsync(name, data, users, tenantId, severity); return await PublishNofiterAsync(name, data, users, tenantId, severity, useProviders);
} }
public async virtual Task<string> SendNofiterAsync( public async virtual Task<string> SendNofiterAsync(
@ -71,9 +72,10 @@ namespace LINGYUN.Abp.Notifications
NotificationTemplate template, NotificationTemplate template,
IEnumerable<UserIdentifier> users = null, IEnumerable<UserIdentifier> users = null,
Guid? tenantId = null, Guid? tenantId = null,
NotificationSeverity severity = NotificationSeverity.Info) NotificationSeverity severity = NotificationSeverity.Info,
IEnumerable<string> useProviders = null)
{ {
return await PublishNofiterAsync(name, template, users, tenantId, severity); return await PublishNofiterAsync(name, template, users, tenantId, severity, useProviders);
} }
protected async virtual Task<string> PublishNofiterAsync<TData>( protected async virtual Task<string> PublishNofiterAsync<TData>(
@ -81,16 +83,18 @@ namespace LINGYUN.Abp.Notifications
TData data, TData data,
IEnumerable<UserIdentifier> users = null, IEnumerable<UserIdentifier> users = null,
Guid? tenantId = null, Guid? tenantId = null,
NotificationSeverity severity = NotificationSeverity.Info) NotificationSeverity severity = NotificationSeverity.Info,
IEnumerable<string> useProviders = null)
{ {
var eto = new NotificationEto<TData>(data) var eto = new NotificationEto<TData>(data)
{ {
Id = DistributedIdGenerator.Create(), Id = DistributedIdGenerator.Create(),
TenantId = tenantId, TenantId = tenantId,
Users = users?.ToList(), Users = users?.ToList() ?? new List<UserIdentifier>(),
Name = name, Name = name,
CreationTime = Clock.Now, CreationTime = Clock.Now,
Severity = severity Severity = severity,
UseProviders = useProviders?.ToList() ?? new List<string>()
}; };
if (UnitOfWorkManager.Current != null) if (UnitOfWorkManager.Current != null)

8
aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NotificationEto.cs

@ -40,6 +40,14 @@ namespace LINGYUN.Abp.Notifications
/// 如果未指定用户列表,应该在事件订阅程序中过滤所有订阅此通知的用户 /// 如果未指定用户列表,应该在事件订阅程序中过滤所有订阅此通知的用户
/// </remarks> /// </remarks>
public List<UserIdentifier> Users { get; set; } = new List<UserIdentifier>(); public List<UserIdentifier> Users { get; set; } = new List<UserIdentifier>();
/// <summary>
/// 用户指定通知提供程序列表
/// </summary>
/// <remarks>
/// 注:<br/>
/// 如果指定了通知提供程序,将只使用特定的提供程序发布通知
/// </remarks>
public List<string> UseProviders { get; set; } = new List<string>();
public NotificationEto() : base() public NotificationEto() : base()
{ {
} }

12
aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/EventBus/Distributed/NotificationEventHandler.cs

@ -159,7 +159,11 @@ namespace LY.MicroService.RealtimeMessage.EventBus.Distributed
var providers = Enumerable.Reverse(NotificationPublishProviderManager.Providers); var providers = Enumerable.Reverse(NotificationPublishProviderManager.Providers);
// 过滤用户指定提供者 // 过滤用户指定提供者
if (notification.Providers.Any()) if (eventData.UseProviders.Any())
{
providers = providers.Where(p => eventData.UseProviders.Contains(p.Name));
}
else if (notification.Providers.Any())
{ {
providers = providers.Where(p => notification.Providers.Contains(p.Name)); providers = providers.Where(p => notification.Providers.Contains(p.Name));
} }
@ -203,7 +207,11 @@ namespace LY.MicroService.RealtimeMessage.EventBus.Distributed
var providers = Enumerable.Reverse(NotificationPublishProviderManager.Providers); var providers = Enumerable.Reverse(NotificationPublishProviderManager.Providers);
// 过滤用户指定提供者 // 过滤用户指定提供者
if (notification.Providers.Any()) if (eventData.UseProviders.Any())
{
providers = providers.Where(p => eventData.UseProviders.Contains(p.Name));
}
else if (notification.Providers.Any())
{ {
providers = providers.Where(p => notification.Providers.Contains(p.Name)); providers = providers.Where(p => notification.Providers.Contains(p.Name));
} }

18
aspnet-core/tests/LINGYUN.Abp.Notifications.Tests/LINGYUN/Abp/Notifications/FakeNotificationSender.cs

@ -60,7 +60,8 @@ public class FakeNotificationSender : INotificationSender, ITransientDependency
NotificationData data, NotificationData data,
IEnumerable<UserIdentifier> users = null, IEnumerable<UserIdentifier> users = null,
Guid? tenantId = null, Guid? tenantId = null,
NotificationSeverity severity = NotificationSeverity.Info) NotificationSeverity severity = NotificationSeverity.Info,
IEnumerable<string> useProviders = null)
{ {
var notification = NotificationDefinitionManager.GetOrNull(name); var notification = NotificationDefinitionManager.GetOrNull(name);
if (notification == null) if (notification == null)
@ -88,7 +89,11 @@ public class FakeNotificationSender : INotificationSender, ITransientDependency
var providers = Enumerable.Reverse(NotificationPublishProviderManager.Providers); var providers = Enumerable.Reverse(NotificationPublishProviderManager.Providers);
if (notification.Providers.Any()) if (useProviders?.Any() == true)
{
providers = providers.Where(p => useProviders.Contains(p.Name));
}
else if (notification.Providers.Any())
{ {
providers = providers.Where(p => notification.Providers.Contains(p.Name)); providers = providers.Where(p => notification.Providers.Contains(p.Name));
} }
@ -106,7 +111,8 @@ public class FakeNotificationSender : INotificationSender, ITransientDependency
NotificationTemplate template, NotificationTemplate template,
IEnumerable<UserIdentifier> users = null, IEnumerable<UserIdentifier> users = null,
Guid? tenantId = null, Guid? tenantId = null,
NotificationSeverity severity = NotificationSeverity.Info) NotificationSeverity severity = NotificationSeverity.Info,
IEnumerable<string> useProviders = null)
{ {
var notification = NotificationDefinitionManager.GetOrNull(name); var notification = NotificationDefinitionManager.GetOrNull(name);
if (notification == null) if (notification == null)
@ -149,7 +155,11 @@ public class FakeNotificationSender : INotificationSender, ITransientDependency
var providers = Enumerable.Reverse(NotificationPublishProviderManager.Providers); var providers = Enumerable.Reverse(NotificationPublishProviderManager.Providers);
// 过滤用户指定提供者 // 过滤用户指定提供者
if (notification.Providers.Any()) if (useProviders?.Any() == true)
{
providers = providers.Where(p => useProviders.Contains(p.Name));
}
else if (notification.Providers.Any())
{ {
providers = providers.Where(p => notification.Providers.Contains(p.Name)); providers = providers.Where(p => notification.Providers.Contains(p.Name));
} }

Loading…
Cancel
Save