using Hangfire; using Hangfire.Storage; using IRaCIS.Core.Application.Helper; using IRaCIS.Core.Application.MassTransit.Consumer; using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Domain.Share; using MassTransit; using MassTransit.Mediator; 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, IBus _bus ) : IIRaCISHangfireJob { public static string JsonFileFolder = Path.Combine(AppContext.BaseDirectory, StaticData.Folder.Resources); public async Task InitHangfireJobTaskAsync() { _logger.LogInformation("项目启动 hangfire 任务初始化 执行开始~"); //创建邮件定时任务 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; } //var schedulerEndpoint = await _bus.GetSendEndpoint(new Uri("queue:hangfire")); //await schedulerEndpoint.ScheduleRecurringSend(new Uri("queue:mt-message-queue"), new QCImageQuestionSchedule() { ScheduleId = jobId, CronExpression = "0 0/1 * 1/1 * ? *" }, new PollExternalSystem { }); //await schedulerEndpoint.ScheduleRecurringSend(new Uri("queue:hangfire"), new QCImageQuestionSchedule() { ScheduleId = jobId + jobId, CronExpression = "0 0/1 * 1/1 * ? *" }, new PollExternalSystem { }); HangfireJobHelper.AddOrUpdateTrialCronJob(jobId, task.TrialId, task.BusinessScenarioEnum, task.EmailCron); } } public class PollExternalSystem { } } }