using EasyCaching.Core; using IRaCIS.Core.Domain.Share; using Microsoft.EntityFrameworkCore.SqlServer.Query.Internal; using Microsoft.Extensions.Logging; namespace IRaCIS.Application.Services.BackGroundJob { public interface IIRaCISCacheHangfireJob { Task ProjectStartCache(); Task MemoryCacheTrialStatus(); Task MemoryCacheAnonymizeData(); Task CacheUserTypePermission(Guid? cacheUserTypeId); } public class IRaCISCacheHangfireJob: IIRaCISCacheHangfireJob { private readonly IRepository _trialRepository; private readonly IEasyCachingProvider _provider; private readonly ILogger _logger; private readonly IRepository _systemAnonymizationRepository; private readonly IRepository _userTypeMenuRepository; public IRaCISCacheHangfireJob(IRepository trialRepository, IRepository systemAnonymizationRepository, IRepository userTypeMenuRepository, IEasyCachingProvider provider,ILogger logger) { _trialRepository = trialRepository; _provider = provider; _logger = logger; _systemAnonymizationRepository = systemAnonymizationRepository; _userTypeMenuRepository = userTypeMenuRepository; } public async Task ProjectStartCache() { _logger.LogInformation("hangfire 定时缓存项目状态任务开始~"); try { await MemoryCacheTrialStatus(); await MemoryCacheAnonymizeData(); await CacheUserTypePermission(); } catch (Exception e) { _logger.LogError("hangfire 定时任务执行失败" + e.Message); } _logger.LogInformation("hangfire 定时任务执行结束"); } public async Task MemoryCacheTrialStatus() { var list = await _trialRepository.Select(t => new { TrialId = t.Id, TrialStatusStr = t.TrialStatusStr }) .ToListAsync(); list.ForEach(t => _provider.Set(t.TrialId.ToString(), t.TrialStatusStr, TimeSpan.FromDays(7))); } public async Task MemoryCacheAnonymizeData() { var systemAnonymizationList = await _systemAnonymizationRepository.Where(t => t.IsEnable).ToListAsync(); _provider.Set(StaticData.Anonymize.Anonymize_AddFixedFiled, systemAnonymizationList.Where(t => t.IsAdd && t.IsFixed).ToList(), TimeSpan.FromDays(7)); _provider.Set(StaticData.Anonymize.Anonymize_AddIRCInfoFiled, systemAnonymizationList.Where(t => t.IsAdd && t.IsFixed == false).ToList(), TimeSpan.FromDays(7)); _provider.Set(StaticData.Anonymize.Anonymize_FixedField, systemAnonymizationList.Where(t => t.IsAdd == false && t.IsFixed).ToList(), TimeSpan.FromDays(7)); _provider.Set(StaticData.Anonymize.Anonymize_IRCInfoField, systemAnonymizationList.Where(t => t.IsAdd == false && t.IsFixed == false).ToList(), TimeSpan.FromDays(7)); } public async Task CacheUserTypePermission(Guid? cacheUserTypeId=null) { var permissionList = await _userTypeMenuRepository.Where(t => t.Menu.MenuType == "F") .WhereIf(cacheUserTypeId != null, t => t.UserTypeId == cacheUserTypeId.Value).Select(t => new { t.UserTypeId, t.Menu.PermissionStr }).ToListAsync(); foreach (var userTypeGroup in permissionList.GroupBy(t => t.UserTypeId)) { _provider.Set($"{StaticData.CacheKey.UserTypeId}_{userTypeGroup.Key}", userTypeGroup.Select(t => t.PermissionStr).ToList(), TimeSpan.FromDays(7)); } } } }