DbJobPersistence.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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. return App.EffectiveTypes.ScanToBuilders();
  19. }
  20. /// <summary>
  21. /// 作业计划初始化通知
  22. /// </summary>
  23. /// <param name="builder"></param>
  24. /// <returns></returns>
  25. public SchedulerBuilder OnLoading(SchedulerBuilder builder)
  26. {
  27. return builder;
  28. }
  29. /// <summary>
  30. /// 作业计划Scheduler的JobDetail变化时
  31. /// </summary>
  32. /// <param name="context"></param>
  33. public void OnChanged(PersistenceContext context)
  34. {
  35. using var serviceScope = _serviceProvider.CreateScope();
  36. var db = serviceScope.ServiceProvider.GetService<ISqlSugarClient>();
  37. var jobDetail = context.JobDetail.Adapt<SysJobDetail>();
  38. if (context.Behavior == PersistenceBehavior.Appended)
  39. {
  40. db.Insertable(jobDetail).ExecuteCommand();
  41. }
  42. else if (context.Behavior == PersistenceBehavior.Updated)
  43. {
  44. db.Updateable(jobDetail).WhereColumns(u => new { u.JobId }).IgnoreColumns(u => new { u.Id }).ExecuteCommand();
  45. }
  46. else if (context.Behavior == PersistenceBehavior.Removed)
  47. {
  48. db.Deleteable<SysJobDetail>().Where(u => u.JobId == jobDetail.JobId).ExecuteCommand();
  49. }
  50. }
  51. /// <summary>
  52. /// 作业计划Scheduler的触发器Trigger变化时
  53. /// </summary>
  54. /// <param name="context"></param>
  55. public void OnTriggerChanged(PersistenceTriggerContext context)
  56. {
  57. using var serviceScope = _serviceProvider.CreateScope();
  58. var db = serviceScope.ServiceProvider.GetService<ISqlSugarClient>();
  59. var jobTrigger = context.Trigger.Adapt<SysJobTrigger>();
  60. if (context.Behavior == PersistenceBehavior.Appended)
  61. {
  62. db.Insertable(jobTrigger).ExecuteCommand();
  63. }
  64. else if (context.Behavior == PersistenceBehavior.Updated)
  65. {
  66. db.Updateable(jobTrigger).WhereColumns(u => new { u.TriggerId, u.JobId }).IgnoreColumns(u => new { u.Id }).ExecuteCommand();
  67. }
  68. else if (context.Behavior == PersistenceBehavior.Removed)
  69. {
  70. db.Deleteable<SysJobTrigger>().Where(u => u.TriggerId == jobTrigger.TriggerId && u.JobId == jobTrigger.JobId).ExecuteCommand();
  71. }
  72. }
  73. }