using Hangfire; using Hangfire.Storage; using IRaCIS.Core.Application.Helper; using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Domain.Share; using MassTransit; using MassTransit.Scheduling; using Microsoft.Extensions.Logging; namespace IRaCIS.Core.Application.Service.BackGroundJob { public interface IIRaCISHangfireJob { Task InitHangfireJobTaskAsync(); } public class IRaCISCHangfireJob(ILogger _logger, IRepository _internationalizationRepository, IRepository _trialEmailNoticeConfigRepository, IMessageScheduler _IMessageScheduler ) : IIRaCISHangfireJob { public static string JsonFileFolder = Path.Combine(AppContext.BaseDirectory, StaticData.Folder.Resources); public async Task InitHangfireJobTaskAsync() { _logger.LogInformation("项目启动 hangfire 任务初始化 执行开始~"); //初始化国际化 //查询数据库的数据 var toJsonList = await _internationalizationRepository.Where(t => t.InternationalizationType == 1).Select(t => new IRCGlobalInfoDTO() { Code = t.Code, Value = t.Value, ValueCN = t.ValueCN, Description = t.Description }).ToListAsync(); await InternationalizationHelper.BatchAddJsonKeyValueAsync(toJsonList); //创建邮件定时任务 await InitSysAndTrialCronJobAsync(); _logger.LogInformation("项目启动 hangfire 任务初始化 执行结束"); } public async Task InitSysAndTrialCronJobAsync() { var taskInfoList = await _trialEmailNoticeConfigRepository.Where(t => t.Trial.TrialStatusStr == StaticData.TrialState.TrialOngoing && t.EmailCron != string.Empty && t.IsAutoSend) .Select(t => new { t.Id, t.Code, t.EmailCron, t.BusinessScenarioEnum, t.TrialId }) .ToListAsync(); foreach (var task in taskInfoList) { //利用主键作为任务Id var jobId = $"{task.TrialId}_{task.Id}"; switch (task.BusinessScenarioEnum) { case EmailBusinessScenario.QCTask: break; case EmailBusinessScenario.CRCToQCQuestion: break; case EmailBusinessScenario.QCToCRCImageQuestion: break; default: break; } HangfireJobHelper.AddOrUpdateTrialCronJob(jobId, task.TrialId, task.BusinessScenarioEnum, task.EmailCron); } } } }