using Mapster; using Microsoft.Extensions.Logging; using Volo.Abp.DependencyInjection; using Volo.Abp.Domain.Repositories; using Volo.Abp.EventBus; using Volo.Abp.Uow; using Yi.Framework.Rbac.Domain.Entities; using Yi.Framework.Rbac.Domain.Shared.Etos; namespace Yi.Framework.Rbac.Domain.EventHandlers; /// /// 登录成功后写 LoginLog;写库失败不得影响登录接口(如泰额 host 库无 LoginLog 表)。 /// public class LoginEventHandler : ILocalEventHandler, ITransientDependency { private readonly ILogger _logger; private readonly IRepository _loginLogRepository; public LoginEventHandler( ILogger logger, IRepository loginLogRepository) { _logger = logger; _loginLogRepository = loginLogRepository; } [UnitOfWork(isTransactional: false)] public async Task HandleEventAsync(LoginEventArgs eventData) { try { _logger.LogInformation("用户【{UserId}:{UserName}】登入系统", eventData.UserId, eventData.UserName); var loginLogEntity = eventData.Adapt(); loginLogEntity.LogMsg = eventData.UserName + "登录系统"; loginLogEntity.LoginUser = eventData.UserName; loginLogEntity.CreatorId = eventData.UserId; await _loginLogRepository.InsertAsync(loginLogEntity, autoSave: true); } catch (Exception ex) { _logger.LogWarning( ex, "LoginLog insert skipped for user {UserId} ({UserName}); current database may not have LoginLog table.", eventData.UserId, eventData.UserName); } } }