using Hangfire; using IRaCIS.Core.Application.Service; using IRaCIS.Core.Domain.Share; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; using NPOI.SS.Formula.Functions; using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; 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); } public static void AddOrUpdateInitCronJob(string jobId, Expression> methodCall, string cron) { RecurringJob.AddOrUpdate(jobId, "sys_init", methodCall, cron); } 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.SendTrialImageQCTaskEmailAsync(trialId), emailCron); break; case EmailBusinessScenario.QCQuestion: HangfireJobHelper.AddOrUpdateCronJob(jobId, t => t.SendTrialQCQuestionEmailAsync(trialId), emailCron); break; case EmailBusinessScenario.ImageQuestion: HangfireJobHelper.AddOrUpdateCronJob(jobId, t => t.SendTrialImageQuestionAsync(trialId), emailCron); break; default: break; } } } }