67 lines
2.7 KiB
C#
67 lines
2.7 KiB
C#
|
|
using Quartz;
|
|||
|
|
using Microsoft.AspNetCore.Identity;
|
|||
|
|
using LMS.Repository.Models.DB;
|
|||
|
|
using Microsoft.Extensions.Logging;
|
|||
|
|
using LMS.Repository.DB;
|
|||
|
|
using LMS.DAO;
|
|||
|
|
using LMS.Common.Enums;
|
|||
|
|
using Microsoft.EntityFrameworkCore;
|
|||
|
|
using LMS.Repository.Options;
|
|||
|
|
|
|||
|
|
namespace LMS.Tools.TaskScheduler;
|
|||
|
|
|
|||
|
|
[DisallowConcurrentExecution]
|
|||
|
|
public class ResetUserFreeCount(ILogger<ResetUserFreeCount> logger, UserManager<User> userManager, ApplicationDbContext context) : IJob
|
|||
|
|
{
|
|||
|
|
private readonly ILogger<ResetUserFreeCount> _logger = logger;
|
|||
|
|
private readonly UserManager<User> _userManager = userManager;
|
|||
|
|
private readonly ApplicationDbContext _context = context;
|
|||
|
|
|
|||
|
|
public async Task Execute(IJobExecutionContext context)
|
|||
|
|
{
|
|||
|
|
_logger.LogInformation($"开始执行月度任务 - 当前时间: {DateTime.Now}");
|
|||
|
|
await ProcessResetUserFreeCount();
|
|||
|
|
_logger.LogInformation($"月度任务执行完成 - 当前时间: {DateTime.Now}");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private async Task ProcessResetUserFreeCount()
|
|||
|
|
{
|
|||
|
|
using var transaction = await _context.Database.BeginTransactionAsync();
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
// 这里是您的业务逻辑
|
|||
|
|
_logger.LogInformation("正在重置用户余换绑次数数据...");
|
|||
|
|
|
|||
|
|
// 加载Options
|
|||
|
|
Options? options = await _context.Options.FirstOrDefaultAsync(x => x.Key == OptionKeyName.ResetFreeCountSetting) ?? throw new Exception("未找到重置用户免费次数的设置,请检查!");
|
|||
|
|
|
|||
|
|
ResetUserFreeCountSettingModel resetFreeCountSetting = options.GetValueObject<ResetUserFreeCountSettingModel>() ?? new ResetUserFreeCountSettingModel();
|
|||
|
|
if (resetFreeCountSetting.EnableMonthlyReset == false)
|
|||
|
|
{
|
|||
|
|
// 不允许重置
|
|||
|
|
_logger.LogInformation("未开启用户重置换绑次数,有需要请开启!");
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 获取所有用户
|
|||
|
|
List<User> users = await _userManager.Users.ToListAsync();
|
|||
|
|
|
|||
|
|
// 修改所有的用户的免费次数
|
|||
|
|
foreach (User user in users)
|
|||
|
|
{
|
|||
|
|
long machineCount = user.AllDeviceCount;
|
|||
|
|
user.FreeCount = resetFreeCountSetting.OnceFreeCount * machineCount;
|
|||
|
|
await _userManager.UpdateAsync(user);
|
|||
|
|
}
|
|||
|
|
await transaction.CommitAsync();
|
|||
|
|
await _context.SaveChangesAsync();
|
|||
|
|
_logger.LogInformation("重置用户余换绑次数数据成功!");
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
await transaction.RollbackAsync();
|
|||
|
|
_logger.LogError(ex, "月度任务执行失败");
|
|||
|
|
throw; // 重新抛出异常以便 Quartz 记录作业失败
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|