using Prism.Events; using YY.Admin.Core; using YY.Admin.Core.Services; using static YY.Admin.Core.SysUserEvents; namespace YY.Admin.EventBus; /// /// 本地用户事件订阅器:记录本地 CRUD 操作日志。 /// 注意:本地操作不触发 mirror pull(拉取会覆盖本地改动), /// 后端→桌面的实时同步由 JeecgUserSyncCoordinator 统一负责。 /// 实现 ISingletonDependency 使其由程序集扫描自动注册为单例。 /// public class SysUserEventSubscriber : IDisposable, ISingletonDependency { private readonly IEventAggregator _eventAggregator; private readonly ILoggerService _logger; private readonly List _subscriptions = new(); public SysUserEventSubscriber( IEventAggregator eventAggregator, ILoggerService logger) { _eventAggregator = eventAggregator; _logger = logger; SubscribeEvents(); } private void SubscribeEvents() { _subscriptions.Add(_eventAggregator.GetEvent().Subscribe(OnAddUser, ThreadOption.BackgroundThread)); _subscriptions.Add(_eventAggregator.GetEvent().Subscribe(OnUpdateUser, ThreadOption.BackgroundThread)); _subscriptions.Add(_eventAggregator.GetEvent().Subscribe(OnDeleteUser, ThreadOption.BackgroundThread)); _subscriptions.Add(_eventAggregator.GetEvent().Subscribe(OnSetUserStatus, ThreadOption.BackgroundThread)); _subscriptions.Add(_eventAggregator.GetEvent().Subscribe(OnChangePwd, ThreadOption.BackgroundThread)); _subscriptions.Add(_eventAggregator.GetEvent().Subscribe(OnResetPwd, ThreadOption.BackgroundThread)); _subscriptions.Add(_eventAggregator.GetEvent().Subscribe(OnUnlockUserLogin, ThreadOption.BackgroundThread)); _subscriptions.Add(_eventAggregator.GetEvent().Subscribe(OnRegisterUser, ThreadOption.BackgroundThread)); _subscriptions.Add(_eventAggregator.GetEvent().Subscribe(OnLoginUser, ThreadOption.BackgroundThread)); _subscriptions.Add(_eventAggregator.GetEvent().Subscribe(OnLoginOut, ThreadOption.BackgroundThread)); _subscriptions.Add(_eventAggregator.GetEvent().Subscribe(OnUpdateUserRole, ThreadOption.BackgroundThread)); } public void OnAddUser(SysUser payload) { _logger.Information($"[本地] 新增用户: {payload?.Account}"); } public void OnRegisterUser(SysUser payload) { _logger.Information($"[本地] 用户注册: {payload?.Account}"); } public void OnUpdateUser((SysUser Original, SysUser Updated) payload) { _logger.Information($"[本地] 修改用户: {payload.Updated?.Account}"); } public void OnDeleteUser(SysUser payload) { _logger.Information($"[本地] 删除用户: {payload?.Account}"); } public void OnSetUserStatus((SysUser User, StatusEnum NewStatus) payload) { _logger.Information($"[本地] 设置状态: {payload.User?.Account} → {payload.NewStatus}"); } public void OnChangePwd(SysUser payload) { _logger.Information($"[本地] 修改密码: {payload?.Account}"); } public void OnResetPwd(SysUser payload) { _logger.Information($"[本地] 重置密码: {payload?.Account}"); } public void OnUpdateUserRole((SysUser User, List RoleIds) payload) { _logger.Information($"[本地] 更新角色: {payload.User?.Account}"); } public void OnUnlockUserLogin(SysUser payload) { _logger.Information($"[本地] 解除锁定: {payload?.Account}"); } public void OnLoginUser(SysUser payload) { _logger.Information($"[本地] 登录成功: {payload?.Account ?? ""}"); } public void OnLoginOut(SysUser payload) { // 勿抛异常:Prism 事件总线上若此处抛错,可能影响同事件其它订阅者 _logger.Information($"[本地] 用户登出: {payload?.Account ?? ""}"); } public void Dispose() { foreach (var token in _subscriptions) { token.Dispose(); } } }