using Hangfire; using IRaCIS.Core.Application.MassTransit.Consumer; using IRaCIS.Core.Domain.Share; using MassTransit.Mediator; namespace IRaCIS.Core.Application.Helper { public static class HangfireJobHelper { //public static void AddOrUpdateCronJob(string jobId, string queueName, Expression methodCall, string cron) //{ // RecurringJob.AddOrUpdate(jobId, queueName, methodCall, cron); //} //添加 或者更新定时任务 Id 要唯一标识一个定义任务 public static void AddOrUpdateCronJob(string jobId, Expression> methodCall, string cron, string queueName = "default") { RecurringJob.AddOrUpdate(jobId, queueName, methodCall, cron, new RecurringJobOptions() { TimeZone = TimeZoneInfo.Local }); } public static void AddOrUpdateInitCronJob(string jobId, Expression> methodCall, string cron) { RecurringJob.AddOrUpdate(jobId, "sys_init", methodCall, cron, new RecurringJobOptions() { TimeZone = TimeZoneInfo.Local }); } public static void RemoveCronJob(string jobId) { RecurringJob.RemoveIfExists(jobId); } public static void ImmediatelyOnceOnlyJob(Expression methodCall) { BackgroundJob.Enqueue("immediately_once", methodCall); } public static void ImmediatelyOnceOnlyJob(Expression> methodCall) { BackgroundJob.Enqueue("immediately_once", methodCall); } public static void NotImmediatelyOnceOnlyJob(Expression methodCall, TimeSpan timeSpan) { BackgroundJob.Schedule("not_immediately_once", methodCall, timeSpan); } public static void NotImmediatelyOnceOnlyJob(Expression> methodCall, TimeSpan timeSpan) { BackgroundJob.Schedule("not_immediately_once", methodCall, timeSpan); } public static void AddOrUpdateTrialCronJob(string jobId, Guid trialId, EmailBusinessScenario businessScenario, string emailCron) { switch (businessScenario) { case EmailBusinessScenario.QCTask: HangfireJobHelper.AddOrUpdateCronJob(jobId, t => t.Send(new ImageQCRecurringEvent() { TrialId = trialId }, default), emailCron); break; case EmailBusinessScenario.CRCToQCQuestion: HangfireJobHelper.AddOrUpdateCronJob(jobId, t => t.Send(new CRCImageQuestionRecurringEvent() { TrialId = trialId }, default), emailCron); break; case EmailBusinessScenario.QCToCRCImageQuestion: HangfireJobHelper.AddOrUpdateCronJob(jobId, t => t.Send(new QCImageQuestionRecurringEvent() { TrialId = trialId }, default), emailCron); break; //加急阅片 10分钟 case EmailBusinessScenario.ExpeditedReading: HangfireJobHelper.AddOrUpdateCronJob(jobId, t => t.Send(new UrgentIRUnReadTaskRecurringEvent() { TrialId = trialId }, default), emailCron); break; default: break; } } public static void AddOrUpdateTimingCronJob(string jobId, EmailBusinessScenario businessScenario, string emailCron) { switch (businessScenario) { case EmailBusinessScenario.GeneralTraining_ExpirationNotification: HangfireJobHelper.AddOrUpdateCronJob(jobId, t => t.Send(new SystemDocumentErverDayEvent() { }, default), emailCron); break; case EmailBusinessScenario.TrialTraining_ExpirationNotification: Console.WriteLine("更新项目到期job"); HangfireJobHelper.AddOrUpdateCronJob(jobId, t => t.Send(new TrialDocumentErverDayEvent() { }, default), emailCron); break; default: break; } } } }