feat: 新增VIP充值接口并支持通过角色代码为用户分配角色

This commit is contained in:
ccnetcore
2025-08-10 11:53:28 +08:00
parent a9c3a1bcec
commit 7038d31c53
8 changed files with 181 additions and 58 deletions

View File

@@ -32,19 +32,40 @@ public class AiRechargeManager : DomainService
// 获取当前时间
var currentTime = DateTime.Now;
// 查找过期的充值记录
var expiredRecharges = await _rechargeRepository._DbQueryable
.Where(x => x.ExpireDateTime.HasValue && x.ExpireDateTime.Value < currentTime)
// 查找所有充值记录,按用户分组
var allRecharges = await _rechargeRepository._DbQueryable
.ToListAsync();
if (!expiredRecharges.Any())
if (!allRecharges.Any())
{
_logger.LogInformation("没有找到任何充值记录");
return;
}
// 按用户分组,找出真正过期的用户
var expiredUserIds = allRecharges
.GroupBy(x => x.UserId)
.Where(group =>
{
// 如果用户有任何一个过期时间为空的记录说明是永久VIP不过期
if (group.Any(x => !x.ExpireDateTime.HasValue))
return false;
// 找到用户最大的过期时间
var maxExpireTime = group.Max(x => x.ExpireDateTime);
// 如果最大过期时间小于当前时间,说明用户已过期
return maxExpireTime.HasValue && maxExpireTime.Value < currentTime;
})
.Select(group => group.Key)
.ToList();
if (!expiredUserIds.Any())
{
_logger.LogInformation("没有找到过期的VIP用户");
return;
}
// 获取过期用户的ID列表
var expiredUserIds = expiredRecharges.Select(x => x.UserId).Distinct().ToList();
_logger.LogInformation($"找到 {expiredUserIds.Count} 个过期的VIP用户");
// 获取YiXinAi-Vip角色ID