DbJobPersistence.cs 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. namespace Admin.NET.Core.Service;
  2. /// <summary>
  3. /// 作业持久化(数据库)
  4. /// </summary>
  5. public class DbJobPersistence : IJobPersistence
  6. {
  7. private readonly IServiceProvider _serviceProvider;
  8. public DbJobPersistence(IServiceProvider serviceProvider)
  9. {
  10. _serviceProvider = serviceProvider;
  11. }
  12. /// <summary>
  13. /// 作业调度服务启动时
  14. /// </summary>
  15. /// <returns></returns>
  16. public IEnumerable<SchedulerBuilder> Preload()
  17. {
  18. // 扫描所有实现IJob的作业任务
  19. return App.EffectiveTypes.ScanToBuilders();
  20. }
  21. /// <summary>
  22. /// 作业计划初始化通知
  23. /// </summary>
  24. /// <param name="builder"></param>
  25. /// <returns></returns>
  26. public SchedulerBuilder OnLoading(SchedulerBuilder builder)
  27. {
  28. using var serviceScope = _serviceProvider.CreateScope();
  29. var rep = serviceScope.ServiceProvider.GetService<SqlSugarRepository<SysJobDetail>>();
  30. if (builder.Behavior == PersistenceBehavior.Removed)
  31. {
  32. rep.Delete(u => u.JobId == builder.GetJobBuilder().JobId);
  33. return builder.Removed();
  34. }
  35. if (rep.IsAny(u => u.JobId == builder.GetJobBuilder().JobId))
  36. {
  37. return builder.Updated();
  38. }
  39. return builder.Appended();
  40. }
  41. /// <summary>
  42. /// 作业计划Scheduler的JobDetail变化时
  43. /// </summary>
  44. /// <param name="context"></param>
  45. public void OnChanged(PersistenceContext context)
  46. {
  47. using var serviceScope = _serviceProvider.CreateScope();
  48. var db = serviceScope.ServiceProvider.GetService<ISqlSugarClient>();
  49. var jobDetail = context.JobDetail.Adapt<SysJobDetail>();
  50. if (context.Behavior == PersistenceBehavior.Appended)
  51. {
  52. db.Insertable(jobDetail).ExecuteCommand();
  53. }
  54. else if (context.Behavior == PersistenceBehavior.Updated)
  55. {
  56. db.Updateable(jobDetail).WhereColumns(u => new { u.JobId }).ExecuteCommand();
  57. }
  58. else if (context.Behavior == PersistenceBehavior.Removed)
  59. {
  60. db.Deleteable<SysJobDetail>().Where(u => u.JobId == jobDetail.JobId).ExecuteCommand();
  61. }
  62. }
  63. /// <summary>
  64. /// 作业计划Scheduler的触发器Trigger变化时
  65. /// </summary>
  66. /// <param name="context"></param>
  67. public void OnTriggerChanged(PersistenceTriggerContext context)
  68. {
  69. using var serviceScope = _serviceProvider.CreateScope();
  70. var db = serviceScope.ServiceProvider.GetService<ISqlSugarClient>();
  71. var jobTrigger = context.Trigger.Adapt<SysJobTrigger>();
  72. if (context.Behavior == PersistenceBehavior.Appended)
  73. {
  74. db.Insertable(jobTrigger).ExecuteCommand();
  75. }
  76. else if (context.Behavior == PersistenceBehavior.Updated)
  77. {
  78. db.Updateable(jobTrigger).WhereColumns(u => new { u.TriggerId, u.JobId }).ExecuteCommand();
  79. }
  80. else if (context.Behavior == PersistenceBehavior.Removed)
  81. {
  82. db.Deleteable<SysJobTrigger>().Where(u => u.TriggerId == jobTrigger.TriggerId && u.JobId == jobTrigger.JobId).ExecuteCommand();
  83. }
  84. }
  85. }