QuartzFactory.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. using OASystem.API.OAMethodLib.Quartz.Jobs;
  2. using Quartz;
  3. using Quartz.Spi;
  4. namespace QuzrtzJob.Factory
  5. {
  6. public class QuartzFactory
  7. {
  8. //1、声明一个调度工厂
  9. private ISchedulerFactory _schedulerFactory;
  10. private IScheduler _scheduler;
  11. private IJobFactory _IOCjobFactory;
  12. public QuartzFactory(ISchedulerFactory schedulerFactory, IJobFactory jobFactory)
  13. {
  14. _schedulerFactory = schedulerFactory;
  15. _IOCjobFactory = jobFactory;
  16. }
  17. public async Task<string> Start()
  18. {
  19. //2、通过调度工厂获得调度器
  20. _scheduler = await _schedulerFactory.GetScheduler();
  21. //这里是指定容器仓库
  22. _scheduler.JobFactory = _IOCjobFactory;
  23. //3、开启调度器
  24. await _scheduler.Start();
  25. //4、创建一个触发器
  26. var trigger = TriggerBuilder.Create()
  27. //.WithSimpleSchedule(x => x.WithIntervalInSeconds(2).RepeatForever())//每两秒执行一次
  28. .WithCronSchedule("0 15 9 * * ?")
  29. .Build();
  30. var taskTrigger = TriggerBuilder.Create()
  31. //.WithSimpleSchedule(x => x.WithIntervalInSeconds(60).RepeatForever())//每六十秒执行一次
  32. .WithCronSchedule("0 0 9,18 * * ?") //每天早上九点和下午六点触发
  33. .Build();
  34. var taskMsgTrigger = TriggerBuilder.Create()
  35. //.WithSimpleSchedule(x => x.WithIntervalInSeconds(60).RepeatForever())//每六十秒执行一次
  36. .WithCronSchedule("0 0 9,18 * * ?") //每天早上九点和下午六点触发
  37. .Build();
  38. var teamCurrencyTrigger = TriggerBuilder.Create()
  39. //.WithSimpleSchedule(x => x.WithIntervalInSeconds(60).RepeatForever())//每六十秒执行一次
  40. .WithCronSchedule("0 0 0 * * ? ") //每天零点零分点触发
  41. .Build();
  42. var performanceTrigger = TriggerBuilder.Create()
  43. .WithCronSchedule("0 0 5 1 * ?") // 每月1号5点执行
  44. .Build();
  45. var hotmailSummaryTrigger = TriggerBuilder.Create()
  46. .WithCronSchedule("0 0 8 * * ?") // 每月1号5点执行
  47. .Build();
  48. //5、创建任务
  49. var jobDetail = JobBuilder.Create<ALiYunPostMessageJob>().WithIdentity("job1", "group").Build();
  50. var taskJobDetail = JobBuilder.Create<TaskJob>().WithIdentity("job2", "group").Build();
  51. var taskMsgJobDetail = JobBuilder.Create<TaskNewsFeedJob>().WithIdentity("job3", "group").Build();
  52. var performanceJobDetail = JobBuilder.Create<PerformanceJob>().WithIdentity("job5", "group").Build();
  53. var hotmailSummaryJobDetail = JobBuilder.Create<ProcessAndNotifySummaryJob>().WithIdentity("job8", "group").Build();
  54. //6、将触发器和任务器绑定到调度器中
  55. await _scheduler.ScheduleJob(jobDetail, trigger);
  56. await _scheduler.ScheduleJob(taskJobDetail, taskTrigger);
  57. await _scheduler.ScheduleJob(taskMsgJobDetail, taskMsgTrigger);
  58. await _scheduler.ScheduleJob(performanceJobDetail, performanceTrigger);
  59. await _scheduler.ScheduleJob(hotmailSummaryJobDetail, hotmailSummaryTrigger);
  60. // 币种信息 每天 凌晨零点更新
  61. await CreateAndScheduleJob<GroupTeamCurrencyJob>("job4", "group", CreateTrigger("0 0 0 * * ?"));
  62. // 团组流程提示、预警 企业微信消息通知 每天早上九点触发
  63. await CreateAndScheduleJob<GroupProcessNodeJob>("job6", "group", CreateTrigger("0 0 9 * * ?"));
  64. // 每周五下午4点执行
  65. await CreateAndScheduleJob<WeeklyFridayJob>("job7", "group", CreateTrigger("0 0 16 ? * FRI"));
  66. // hotmail 邮件汇总 每天早上八点
  67. return await Task.FromResult("将触发器和任务器绑定到调度器中完成");
  68. }
  69. private async Task CreateAndScheduleJob<T>(string jobName, string groupName, ITrigger trigger) where T : IJob
  70. {
  71. var jobDetail = JobBuilder.Create<T>()
  72. .WithIdentity(jobName, groupName)
  73. .Build();
  74. await _scheduler.ScheduleJob(jobDetail, trigger);
  75. }
  76. private ITrigger CreateTrigger(string cronExpression)
  77. {
  78. return TriggerBuilder.Create()
  79. .WithCronSchedule(cronExpression)
  80. .Build();
  81. }
  82. /// <summary>
  83. /// 立即触发指定任务(用于手动执行)
  84. /// </summary>
  85. /// <param name="jobName">任务名称,如 job7</param>
  86. /// <param name="groupName">分组名称,默认 group</param>
  87. public async Task TriggerJobNow(string jobName, string groupName = "group")
  88. {
  89. if (_scheduler == null) return;
  90. var jobKey = new JobKey(jobName, groupName);
  91. await _scheduler.TriggerJob(jobKey);
  92. }
  93. }
  94. }