Browse Source

refactor: 😀改用Furion框架的事件总线实现系统用户操作事件发布订阅

喵你个旺呀 1 year ago
parent
commit
0d524a14ca

+ 103 - 0
Admin.NET/Admin.NET.Application/EventBus/SysUserEventSubscriber.cs

@@ -0,0 +1,103 @@
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+//
+// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
+//
+// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
+
+using Furion.EventBus;
+
+namespace Admin.NET.Application;
+
+/// <summary>
+/// 系统用户操作事件订阅
+/// </summary>
+public class SysUserEventSubscriber : IEventSubscriber, ISingleton, IDisposable
+{
+    public SysUserEventSubscriber()
+    {
+    }
+
+    /// <summary>
+    /// 增加系统用户
+    /// </summary>
+    /// <param name="context"></param>
+    /// <returns></returns>
+    [EventSubscribe(SysUserEventTypeEnum.Add)]
+    public Task AddUser(EventHandlerExecutingContext context)
+    {
+        return Task.CompletedTask;
+    }
+
+    /// <summary>
+    /// 注册用户
+    /// </summary>
+    /// <param name="context"></param>
+    /// <returns></returns>
+    [EventSubscribe(SysUserEventTypeEnum.Register)]
+    public Task RegisterUser(EventHandlerExecutingContext context)
+    {
+        return Task.CompletedTask;
+    }
+
+    /// <summary>
+    /// 更新系统用户
+    /// </summary>
+    /// <param name="context"></param>
+    /// <returns></returns>
+    [EventSubscribe(SysUserEventTypeEnum.Update)]
+    public Task UpdateUser(EventHandlerExecutingContext context)
+    {
+        return Task.CompletedTask;
+    }
+
+    /// <summary>
+    /// 删除系统用户
+    /// </summary>
+    /// <param name="context"></param>
+    /// <returns></returns>
+    [EventSubscribe(SysUserEventTypeEnum.Delete)]
+    public Task DeleteUser(EventHandlerExecutingContext context)
+    {
+        return Task.CompletedTask;
+    }
+
+    /// <summary>
+    /// 设置系统用户状态
+    /// </summary>
+    /// <param name="context"></param>
+    /// <returns></returns>
+    [EventSubscribe(SysUserEventTypeEnum.SetStatus)]
+    public Task SetUserStatus(EventHandlerExecutingContext context)
+    {
+        return Task.CompletedTask;
+    }
+
+    /// <summary>
+    /// 授权用户角色
+    /// </summary>
+    /// <param name="context"></param>
+    /// <returns></returns>
+    [EventSubscribe(SysUserEventTypeEnum.UpdateRole)]
+    public Task UpdateUserRole(EventHandlerExecutingContext context)
+    {
+        return Task.CompletedTask;
+    }
+
+    /// <summary>
+    /// 解除登录锁定
+    /// </summary>
+    /// <param name="context"></param>
+    /// <returns></returns>
+    [EventSubscribe(SysUserEventTypeEnum.UnlockLogin)]
+    public Task UnlockUserLogin(EventHandlerExecutingContext context)
+    {
+        return Task.CompletedTask;
+    }
+
+    /// <summary>
+    /// 释放服务作用域
+    /// </summary>
+    public void Dispose()
+    {
+    }
+}

+ 0 - 32
Admin.NET/Admin.NET.Application/Startup.cs

@@ -18,37 +18,5 @@ public class Startup : AppStartup
 
     public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
     {
-        // 订阅用户操作事件
-        App.GetRequiredService<SysUserEventHandler>().Subscribe(OnEvent);
-    }
-
-    // 用户操作事件
-    private void OnEvent(object sender, EventArgs e)
-    {
-        // 用户操作事件处理
-        var args = e as SysUserEventArgs;
-        switch (args.EventType)
-        {
-            case SysUserEventTypeEnum.Add:
-                // TODO 新增用户
-                // xxxService.AddUserEvent(args.Input);
-                break;
-            case SysUserEventTypeEnum.Delete:
-                // TODO 删除用户
-                // xxxService.DeleteUserEvent(args.Input);
-                break;
-            case SysUserEventTypeEnum.Update:
-                // TODO 更新用户
-                // xxxService.UpdateUserEvent(args.Input);
-                break;
-            case SysUserEventTypeEnum.ChangePwd:
-                // TODO 用户修改密码
-                // xxxService.ChangePwdUserEvent(args.Input);
-                break;
-            case SysUserEventTypeEnum.ResetPwd:
-                // TODO 重置用户密码
-                // xxxService.ResetPwdUserEvent(args.Input);
-                break;
-        }
     }
 }

+ 0 - 30
Admin.NET/Admin.NET.Core/Service/User/Dto/SysUserEventArgs.cs

@@ -1,30 +0,0 @@
-// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
-//
-// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
-//
-// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
-
-namespace Admin.NET.Core.Service;
-
-/// <summary>
-/// 系统用户操作事件参数
-/// </summary>
-public class SysUserEventArgs : EventArgs
-{
-    /// <summary>
-    /// 事件类型
-    /// </summary>
-    [Required]
-    public SysUserEventTypeEnum EventType { get; set; }
-
-    /// <summary>
-    /// 接口输入参数
-    /// </summary>
-    public object Input { get; set; }
-
-    public SysUserEventArgs(SysUserEventTypeEnum eventType, object input)
-    {
-        this.EventType = eventType;
-        this.Input = input;
-    }
-}

+ 0 - 32
Admin.NET/Admin.NET.Core/Service/User/SysUserEventHandler.cs

@@ -1,32 +0,0 @@
-// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
-//
-// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
-//
-// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
-
-namespace Admin.NET.Core.Service;
-
-/// <summary>
-/// 系统用户事件处理类
-/// </summary>
-public class SysUserEventHandler : ISingleton
-{
-    private event EventHandler Event;
-
-    /// <summary>
-    /// 订阅
-    /// </summary>
-    /// <param name="eventHandler"></param>
-    public void Subscribe(EventHandler eventHandler) => Event += eventHandler;
-
-    /// <summary>
-    /// 发布事件
-    /// </summary>
-    /// <param name="sender"></param>
-    /// <param name="eventType"></param>
-    /// <param name="input"></param>
-    public void OnEvent(object sender, SysUserEventTypeEnum eventType, object input)
-    {
-        Event?.Invoke(sender, new SysUserEventArgs(eventType, input));
-    }
-}

+ 56 - 22
Admin.NET/Admin.NET.Core/Service/User/SysUserService.cs

@@ -22,7 +22,7 @@ public class SysUserService : IDynamicApiController, ITransient
     private readonly SysCacheService _sysCacheService;
     private readonly SysUserLdapService _sysUserLdapService;
     private readonly SqlSugarRepository<SysUser> _sysUserRep;
-    private readonly SysUserEventHandler _sysUserEventHandler;
+    private readonly IEventPublisher _eventPublisher;
 
     public SysUserService(UserManager userManager,
         SysOrgService sysOrgService,
@@ -34,7 +34,7 @@ public class SysUserService : IDynamicApiController, ITransient
         SysUserLdapService sysUserLdapService,
         SqlSugarRepository<SysUser> sysUserRep,
         SysUserMenuService sysUserMenuService,
-        SysUserEventHandler sysUserEventHandler)
+        IEventPublisher eventPublisher)
     {
         _userManager = userManager;
         _sysOrgService = sysOrgService;
@@ -46,7 +46,7 @@ public class SysUserService : IDynamicApiController, ITransient
         _sysUserLdapService = sysUserLdapService;
         _sysUserMenuService = sysUserMenuService;
         _sysUserRep = sysUserRep;
-        _sysUserEventHandler = sysUserEventHandler;
+        _eventPublisher = eventPublisher;
     }
 
     /// <summary>
@@ -59,7 +59,7 @@ public class SysUserService : IDynamicApiController, ITransient
     {
         // 获取用户拥有的机构集合
         var userOrgIdList = await _sysOrgService.GetUserOrgIdList();
-        List<long> orgList = null;
+        List<long> orgList;
         if (input.OrgId > 0) // 指定机构查询时
         {
             orgList = await _sysOrgService.GetChildIdListWithSelfById(input.OrgId);
@@ -120,8 +120,12 @@ public class SysUserService : IDynamicApiController, ITransient
         if (!string.IsNullOrWhiteSpace(input.DomainAccount))
             await _sysUserLdapService.AddUserLdap(newUser.TenantId!.Value, newUser.Id, newUser.Account, input.DomainAccount);
 
-        // 执行订阅事件
-        _sysUserEventHandler.OnEvent(this, SysUserEventTypeEnum.Add, input);
+        // 发布系统用户操作事件
+        await _eventPublisher.PublishAsync(SysUserEventTypeEnum.Add, new
+        {
+            Entity = newUser,
+            Input = input
+        });
 
         return newUser.Id;
     }
@@ -155,8 +159,12 @@ public class SysUserService : IDynamicApiController, ITransient
         if (!string.IsNullOrWhiteSpace(input.DomainAccount))
             await _sysUserLdapService.AddUserLdap(newUser.TenantId!.Value, newUser.Id, newUser.Account, input.DomainAccount);
 
-        // 执行订阅事件
-        _sysUserEventHandler.OnEvent(this, SysUserEventTypeEnum.Register, input);
+        // 发布系统用户操作事件
+        await _eventPublisher.PublishAsync(SysUserEventTypeEnum.Register, new
+        {
+            Entity = newUser,
+            Input = input
+        });
 
         return newUser.Id;
     }
@@ -194,8 +202,12 @@ public class SysUserService : IDynamicApiController, ITransient
         // 更新域账号
         await _sysUserLdapService.AddUserLdap(user.TenantId!.Value, user.Id, user.Account, input.DomainAccount);
 
-        // 执行订阅事件
-        _sysUserEventHandler.OnEvent(this, SysUserEventTypeEnum.Update, input);
+        // 发布系统用户操作事件
+        await _eventPublisher.PublishAsync(SysUserEventTypeEnum.Update, new
+        {
+            Entity = user,
+            Input = input
+        });
     }
 
     /// <summary>
@@ -249,8 +261,12 @@ public class SysUserService : IDynamicApiController, ITransient
         // 删除用户收藏菜单
         await _sysUserMenuService.DeleteUserMenuList(input.Id);
 
-        // 执行订阅事件
-        _sysUserEventHandler.OnEvent(this, SysUserEventTypeEnum.Delete, input);
+        // 发布系统用户操作事件
+        await _eventPublisher.PublishAsync(SysUserEventTypeEnum.Delete, new
+        {
+            Entity = user,
+            Input = input
+        });
     }
 
     /// <summary>
@@ -309,8 +325,13 @@ public class SysUserService : IDynamicApiController, ITransient
         user.Status = input.Status;
         var rows = await _sysUserRep.AsUpdateable(user).UpdateColumns(u => new { u.Status }).ExecuteCommandAsync();
 
-        // 执行订阅事件
-        if (rows > 0) _sysUserEventHandler.OnEvent(this, SysUserEventTypeEnum.SetStatus, input);
+        // 发布系统用户操作事件
+        if (rows > 0)
+            await _eventPublisher.PublishAsync(SysUserEventTypeEnum.SetStatus, new
+            {
+                Entity = user,
+                Input = input
+            });
 
         return rows;
     }
@@ -330,8 +351,8 @@ public class SysUserService : IDynamicApiController, ITransient
 
         await _sysUserRoleService.GrantUserRole(input);
 
-        // 执行订阅事件
-        _sysUserEventHandler.OnEvent(this, SysUserEventTypeEnum.UpdateRole, input);
+        // 发布系统用户操作事件
+        await _eventPublisher.PublishAsync(SysUserEventTypeEnum.UpdateRole, input);
     }
 
     /// <summary>
@@ -375,8 +396,13 @@ public class SysUserService : IDynamicApiController, ITransient
 
         var rows = await _sysUserRep.AsUpdateable(user).UpdateColumns(u => u.Password).ExecuteCommandAsync();
 
-        // 执行订阅事件
-        if (rows > 0) _sysUserEventHandler.OnEvent(this, SysUserEventTypeEnum.ChangePwd, input);
+        // 发布系统用户操作事件
+        if (rows > 0)
+            await _eventPublisher.PublishAsync(SysUserEventTypeEnum.ChangePwd, new
+            {
+                Entity = user,
+                Input = input
+            });
 
         return rows;
     }
@@ -398,8 +424,12 @@ public class SysUserService : IDynamicApiController, ITransient
         var keyErrorPasswordCount = $"{CacheConst.KeyPasswordErrorTimes}{user.Account}";
         _sysCacheService.Remove(keyErrorPasswordCount);
 
-        // 执行订阅事件
-        _sysUserEventHandler.OnEvent(this, SysUserEventTypeEnum.ResetPwd, input);
+        // 发布系统用户操作事件
+        await _eventPublisher.PublishAsync(SysUserEventTypeEnum.ResetPwd, new
+        {
+            Entity = user,
+            Input = input
+        });
 
         return password;
     }
@@ -418,8 +448,12 @@ public class SysUserService : IDynamicApiController, ITransient
         var keyPasswordErrorTimes = $"{CacheConst.KeyPasswordErrorTimes}{user.Account}";
         _sysCacheService.Remove(keyPasswordErrorTimes);
 
-        // 执行订阅事件
-        _sysUserEventHandler.OnEvent(this, SysUserEventTypeEnum.UnlockLogin, input);
+        // 发布系统用户操作事件
+        await _eventPublisher.PublishAsync(SysUserEventTypeEnum.UnlockLogin, new
+        {
+            Entity = user,
+            Input = input
+        });
     }
 
     /// <summary>