feat: 激活码与VIP充值支持按天计费

- 新增 VIP 天数概念,支持月数与天数组合计算过期时间
- 激活码商品新增 VipDays 配置,并新增 1 天会员试用组合包
- VIP 充值统一按天数计算(1 个月 = 31 天),兼容原有逻辑
- 激活码兑换时支持仅天数或天月组合的 VIP 充值
This commit is contained in:
ccnetcore
2025-12-28 17:44:33 +08:00
parent bdaa53bac8
commit 4b9f845fae
4 changed files with 37 additions and 11 deletions

View File

@@ -55,13 +55,24 @@ namespace Yi.Framework.AiHub.Application.Services
/// </summary>
/// <param name="input">充值输入参数</param>
/// <returns></returns>
[HttpPost("recharge/vip")]
[RemoteService(isEnabled:false)]
public async Task RechargeVipAsync(RechargeCreateInput input)
{
DateTime? expireDateTime = null;
// 如果传入了月数,计算过期时间
// 计算总天数1个月 = 31天
int totalDays = 0;
if (input.Months.HasValue && input.Months.Value > 0)
{
totalDays += input.Months.Value * 31;
}
if (input.Days.HasValue && input.Days.Value > 0)
{
totalDays += input.Days.Value;
}
// 如果有天数,计算过期时间
if (totalDays > 0)
{
// 直接查询该用户最大的过期时间
var maxExpireTime = await _repository._DbQueryable
@@ -75,9 +86,9 @@ namespace Yi.Framework.AiHub.Application.Services
? maxExpireTime.Value
: DateTime.Now;
// 计算新的过期时间
expireDateTime = baseDateTime.AddMonths(input.Months.Value);
expireDateTime = baseDateTime.AddDays(totalDays);
}
// 如果月数为空或0表示永久VIPExpireDateTime保持为null
// 如果总天数为0表示永久VIPExpireDateTime保持为null
// 创建充值记录
var rechargeRecord = new AiRechargeAggregateRoot