BackgroundJobStore.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. using Abp.BackgroundJobs;
  2. using Abp.Dependency;
  3. using Abp.Domain.Repositories;
  4. using Abp.Domain.Uow;
  5. using Abp.Timing;
  6. namespace VberZero.BackgroundJobs;
  7. /// <summary>
  8. /// 实现 <see cref="IBackgroundJobStore"/>存储库
  9. /// </summary>
  10. public class BackgroundJobStore : IBackgroundJobStore, ITransientDependency
  11. {
  12. private readonly IRepository<BackgroundJobInfo, long> _backgroundJobRepository;
  13. private readonly IUnitOfWorkManager _unitOfWorkManager;
  14. public BackgroundJobStore(
  15. IRepository<BackgroundJobInfo, long> backgroundJobRepository,
  16. IUnitOfWorkManager unitOfWorkManager)
  17. {
  18. _backgroundJobRepository = backgroundJobRepository;
  19. _unitOfWorkManager = unitOfWorkManager;
  20. }
  21. public async Task<BackgroundJobInfo> GetAsync(long jobId)
  22. {
  23. return await _unitOfWorkManager.WithUnitOfWorkAsync(async () =>
  24. await _backgroundJobRepository.GetAsync(jobId)
  25. );
  26. }
  27. public BackgroundJobInfo Get(long jobId)
  28. {
  29. return _unitOfWorkManager.WithUnitOfWork(() =>
  30. _backgroundJobRepository.Get(jobId)
  31. );
  32. }
  33. public async Task InsertAsync(BackgroundJobInfo jobInfo)
  34. {
  35. await _unitOfWorkManager.WithUnitOfWorkAsync(async () =>
  36. await _backgroundJobRepository.InsertAsync(jobInfo)
  37. );
  38. }
  39. public void Insert(BackgroundJobInfo jobInfo)
  40. {
  41. _unitOfWorkManager.WithUnitOfWork(() =>
  42. {
  43. _backgroundJobRepository.Insert(jobInfo);
  44. });
  45. }
  46. public virtual async Task<List<BackgroundJobInfo>> GetWaitingJobsAsync(int maxResultCount)
  47. {
  48. var waitingJobs = _unitOfWorkManager.WithUnitOfWork(() =>
  49. {
  50. return _backgroundJobRepository.GetAll()
  51. .Where(t => !t.IsAbandoned && t.NextTryTime <= Clock.Now)
  52. .OrderByDescending(t => t.Priority)
  53. .ThenBy(t => t.TryCount)
  54. .ThenBy(t => t.NextTryTime)
  55. .Take(maxResultCount)
  56. .ToList();
  57. });
  58. return await Task.FromResult(waitingJobs);
  59. }
  60. public virtual List<BackgroundJobInfo> GetWaitingJobs(int maxResultCount)
  61. {
  62. return _unitOfWorkManager.WithUnitOfWork(() =>
  63. {
  64. return _backgroundJobRepository.GetAll()
  65. .Where(t => !t.IsAbandoned && t.NextTryTime <= Clock.Now)
  66. .OrderByDescending(t => t.Priority)
  67. .ThenBy(t => t.TryCount)
  68. .ThenBy(t => t.NextTryTime)
  69. .Take(maxResultCount)
  70. .ToList();
  71. });
  72. }
  73. public async Task DeleteAsync(BackgroundJobInfo jobInfo)
  74. {
  75. await _unitOfWorkManager.WithUnitOfWorkAsync(async () =>
  76. await _backgroundJobRepository.DeleteAsync(jobInfo)
  77. );
  78. }
  79. public void Delete(BackgroundJobInfo jobInfo)
  80. {
  81. _unitOfWorkManager.WithUnitOfWork(() =>
  82. {
  83. _backgroundJobRepository.Delete(jobInfo);
  84. });
  85. }
  86. public async Task UpdateAsync(BackgroundJobInfo jobInfo)
  87. {
  88. await _unitOfWorkManager.WithUnitOfWorkAsync(async () =>
  89. await _backgroundJobRepository.UpdateAsync(jobInfo)
  90. );
  91. }
  92. public void Update(BackgroundJobInfo jobInfo)
  93. {
  94. _unitOfWorkManager.WithUnitOfWork(() =>
  95. {
  96. _backgroundJobRepository.Update(jobInfo);
  97. });
  98. }
  99. }