using Furion.EventBus; using Microsoft.Extensions.DependencyInjection; using Myshipping.Core.Entity; using System; using System.Linq; using System.Threading.Tasks; namespace Myshipping.Core; public class LogEventSubscriber : IEventSubscriber { public LogEventSubscriber(IServiceProvider services) { Services = services; } public IServiceProvider Services { get; } [EventSubscribe("Create:OpLog")] public async Task CreateOpLog(EventHandlerExecutingContext context) { using var scope = Services.CreateScope(); var _repository = scope.ServiceProvider.GetRequiredService>(); var log = (SysLogOp)context.Source.Payload; var logId = await _repository.InsertReturnIdentityAsync(log); // 保存关联业务日志 if (log.BusinessId != null || log.BusinessIdList != null) { var _repositoryBuss = scope.ServiceProvider.GetRequiredService>(); if (log.BusinessId != null) { await _repositoryBuss.InsertAsync(new SysLogOpBuss { LogId = logId, BusinessId = (long)log.BusinessId }); } else if (log.BusinessIdList != null) { await _repositoryBuss.InsertAsync(log.BusinessIdList.Select(x => new SysLogOpBuss() { LogId = logId, BusinessId = x })); } } } [EventSubscribe("Create:ExLog")] public async Task CreateExLog(EventHandlerExecutingContext context) { using var scope = Services.CreateScope(); var _repository = scope.ServiceProvider.GetRequiredService>(); var log = (SysLogEx)context.Source.Payload; await _repository.InsertAsync(log); } [EventSubscribe("Create:VisLog")] public async Task CreateVisLog(EventHandlerExecutingContext context) { using var scope = Services.CreateScope(); var _repository = scope.ServiceProvider.GetRequiredService>(); var log = (SysLogVis)context.Source.Payload; await _repository.InsertAsync(log); } [EventSubscribe("Update:UserLoginInfo")] public async Task UpdateUserLoginInfo(EventHandlerExecutingContext context) { using var scope = Services.CreateScope(); var _repository = scope.ServiceProvider.GetRequiredService>(); var log = (SysUser)context.Source.Payload; await _repository.UpdateAsync(a => a.Id == log.Id, a => new SysUser { LastLoginTime = log.LastLoginTime, LastLoginIp = log.LastLoginIp }); } [EventSubscribe("Delete:OpLog")] public async Task DeleteOpLog(EventHandlerExecutingContext context) { using var scope = Services.CreateScope(); var _repository = scope.ServiceProvider.GetRequiredService>(); var dayRemain = (int)context.Source.Payload; await _repository.DeleteAsync(x => x.OpTime < DateTime.Now.AddDays(dayRemain * -1)); } }