TasksExtension.cs 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. using Quartz.Spi;
  2. using SqlSugar;
  3. using SqlSugar.IOC;
  4. using ZR.Model.System;
  5. using ZR.Tasks;
  6. namespace ZR.Admin.WebApi.Extensions
  7. {
  8. /// <summary>
  9. /// 定时任务扩展方法
  10. /// </summary>
  11. public static class TasksExtension
  12. {
  13. /// <summary>
  14. /// 注册任务
  15. /// </summary>
  16. /// <param name="services"></param>
  17. /// <exception cref="ArgumentNullException"></exception>
  18. public static void AddTaskSchedulers(this IServiceCollection services)
  19. {
  20. if (services == null) throw new ArgumentNullException(nameof(services));
  21. //添加Quartz服务
  22. services.AddSingleton<IJobFactory, JobFactory>();
  23. services.AddTransient<ITaskSchedulerServer, TaskSchedulerServer>();
  24. }
  25. /// <summary>
  26. /// 程序启动后添加任务计划
  27. /// </summary>
  28. /// <param name="app"></param>
  29. /// <returns></returns>
  30. public static IApplicationBuilder UseAddTaskSchedulers(this IApplicationBuilder app)
  31. {
  32. ITaskSchedulerServer _schedulerServer = app.ApplicationServices.GetRequiredService<ITaskSchedulerServer>();
  33. var tasks = DbScoped.SugarScope.Queryable<SysTasks>()
  34. .Where(m => m.IsStart == 1).ToListAsync();
  35. //程序启动后注册所有定时任务
  36. foreach (var task in tasks.Result)
  37. {
  38. var result = _schedulerServer.AddTaskScheduleAsync(task);
  39. if (result.Result.IsSuccess())
  40. {
  41. Console.WriteLine($"注册任务[{task.Name}]ID:{task.ID}成功");
  42. }
  43. }
  44. return app;
  45. }
  46. /// <summary>
  47. /// 初始化字典
  48. /// </summary>
  49. /// <param name="app"></param>
  50. /// <returns></returns>
  51. public static IApplicationBuilder UseInit(this IApplicationBuilder app)
  52. {
  53. var mainDb = App.Configuration["mainDb"];
  54. //var tenantId = App.GetCurrentTenantId();
  55. //Console.WriteLine("初始化字典数据...");
  56. var db = DbScoped.SugarScope.GetConnection(mainDb);
  57. var types = db.Queryable<SysDictType>()
  58. .Where(it => it.Status == "0")
  59. .Select(it => it.DictType)
  60. .ToList();
  61. //上面有耗时操作写在Any上面,保证程序启动后只执行一次
  62. if (!db.ConfigQuery.Any())
  63. {
  64. foreach (var type in types)
  65. {
  66. db.ConfigQuery.SetTable<SysDictData>(it => SqlFunc.ToString(it.DictValue), it => it.DictLabel, type, it => it.DictType == type);
  67. }
  68. }
  69. return app;
  70. }
  71. }
  72. }