UserTokenExpirationWorker.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using Abp.BackgroundJobs;
  2. using Abp.Domain.Repositories;
  3. using Abp.Domain.Uow;
  4. using Abp.Extensions;
  5. using Abp.Threading.BackgroundWorkers;
  6. using Abp.Threading.Timers;
  7. using Abp.Timing;
  8. using VberZero.BaseSystem.MultiTenancy;
  9. using VberZero.BaseSystem.Users;
  10. namespace VberZero.Authorization.Users;
  11. /// <summary>
  12. /// UserToken 过期工作者
  13. /// </summary>
  14. public class UserTokenExpirationWorker : PeriodicBackgroundWorkerBase
  15. {
  16. private readonly IRepository<UserToken, long> _userTokenRepository;
  17. private readonly IRepository<Tenant> _tenantRepository;
  18. private readonly IUnitOfWorkManager _unitOfWorkManager;
  19. public UserTokenExpirationWorker(
  20. AbpTimer timer,
  21. IRepository<UserToken, long> userTokenRepository,
  22. IBackgroundJobConfiguration backgroundJobConfiguration,
  23. IUnitOfWorkManager unitOfWorkManager,
  24. IRepository<Tenant> tenantRepository)
  25. : base(timer)
  26. {
  27. _userTokenRepository = userTokenRepository;
  28. _unitOfWorkManager = unitOfWorkManager;
  29. _tenantRepository = tenantRepository;
  30. Timer.Period = backgroundJobConfiguration.UserTokenExpirationPeriod?.TotalMilliseconds.To<int>()
  31. //?? backgroundJobConfiguration.CleanUserTokenPeriod
  32. ?? TimeSpan.FromHours(1).TotalMilliseconds.To<int>();
  33. }
  34. protected override void DoWork()
  35. {
  36. try
  37. {
  38. List<int> tenantIds;
  39. var utcNow = Clock.Now.ToUniversalTime();
  40. using (var uow = _unitOfWorkManager.Begin())
  41. {
  42. using (_unitOfWorkManager.Current.SetTenantId(null))
  43. {
  44. _userTokenRepository.Delete(t => t.ExpireDate <= utcNow);
  45. tenantIds = _tenantRepository.GetAll().Select(t => t.Id).ToList();
  46. uow.Complete();
  47. }
  48. }
  49. foreach (var tenantId in tenantIds)
  50. {
  51. using var uow = _unitOfWorkManager.Begin();
  52. using (_unitOfWorkManager.Current.SetTenantId(tenantId))
  53. {
  54. _userTokenRepository.Delete(t => t.ExpireDate <= utcNow);
  55. uow.Complete();
  56. }
  57. }
  58. }
  59. catch (Exception e)
  60. {
  61. Console.WriteLine(e);
  62. }
  63. }
  64. }