using Microsoft.Extensions.Logging; using Volo.Abp.Domain.Services; using Yi.Framework.AiHub.Domain.Entities; using Yi.Framework.AiHub.Domain.Entities.OpenApi; using Yi.Framework.AiHub.Domain.Shared.Consts; using Yi.Framework.Rbac.Application.Contracts.IServices; using Yi.Framework.SqlSugarCore.Abstractions; namespace Yi.Framework.AiHub.Domain.Managers; public class AiRechargeManager : DomainService { private readonly ISqlSugarRepository _rechargeRepository; private readonly IRoleService _roleService; private readonly ISqlSugarRepository _tokenRepository; private readonly ILogger _logger; public AiRechargeManager(ISqlSugarRepository rechargeRepository, ISqlSugarRepository tokenRepository, ILogger logger, IRoleService roleService) { _rechargeRepository = rechargeRepository; _tokenRepository = tokenRepository; _logger = logger; _roleService = roleService; } public async Task RemoveVipRoleByExpireAsync() { _logger.LogInformation("开始执行VIP过期自动卸载任务"); // 获取当前时间 var currentTime = DateTime.Now; // 查找过期的充值记录 var expiredRecharges = await _rechargeRepository._DbQueryable .Where(x => x.ExpireDateTime.HasValue && x.ExpireDateTime.Value < currentTime) .ToListAsync(); if (!expiredRecharges.Any()) { _logger.LogInformation("没有找到过期的VIP用户"); return; } // 获取过期用户的ID列表 var expiredUserIds = expiredRecharges.Select(x => x.UserId).Distinct().ToList(); _logger.LogInformation($"找到 {expiredUserIds.Count} 个过期的VIP用户"); // 获取YiXinAi-Vip角色ID await _roleService.RemoveUserRoleByRoleCodeAsync(expiredUserIds, AiHubConst.VipRole); // 删除过期用户的Token密钥 var removedTokenCount = await _tokenRepository.DeleteAsync(x => expiredUserIds.Contains(x.UserId)); _logger.LogInformation($"成功删除 {removedTokenCount} 个用户的Token密钥"); _logger.LogInformation($"VIP过期自动卸载任务执行完成,共处理 {expiredUserIds.Count} 个过期用户"); } }