From f02fb9117526e75036fa93637230962b7496853e Mon Sep 17 00:00:00 2001 From: chenchun Date: Thu, 30 Oct 2025 19:51:56 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E9=82=80=E8=AF=B7?= =?UTF-8?q?=E7=A0=81=E6=AF=8F=E5=91=A8=E4=BD=BF=E7=94=A8=E4=B8=8A=E9=99=90?= =?UTF-8?q?=E5=B9=B6=E8=B0=83=E6=95=B4=E7=BF=BB=E7=89=8C=E8=A7=84=E5=88=99?= =?UTF-8?q?=EF=BC=88=E6=89=A9=E5=B1=95=E5=85=8D=E8=B4=B9=E6=AC=A1=E6=95=B0?= =?UTF-8?q?=E3=80=81=E7=A7=BB=E9=99=A4=E8=B5=A0=E9=80=81=E7=BF=BB=E7=89=8C?= =?UTF-8?q?=E4=B8=8E=E7=BF=BB=E5=80=8D=E6=8F=90=E7=A4=BA=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dtos/CardFlip/FlipCardOutput.cs | 5 ---- .../Services/CardFlipService.cs | 3 +-- .../Entities/CardFlipTaskAggregateRoot.cs | 12 +++++----- .../Managers/CardFlipManager.cs | 15 +----------- .../Managers/InviteCodeManager.cs | 23 ++++++++++++------- 5 files changed, 23 insertions(+), 35 deletions(-) diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application.Contracts/Dtos/CardFlip/FlipCardOutput.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application.Contracts/Dtos/CardFlip/FlipCardOutput.cs index af6e0167..b817edf3 100644 --- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application.Contracts/Dtos/CardFlip/FlipCardOutput.cs +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application.Contracts/Dtos/CardFlip/FlipCardOutput.cs @@ -25,11 +25,6 @@ public class FlipCardOutput /// public string? RewardDesc { get; set; } - /// - /// 是否显示翻倍包提示(第9次中奖后显示) - /// - public bool ShowDoubleRewardTip { get; set; } - /// /// 剩余可翻次数 /// diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application/Services/CardFlipService.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application/Services/CardFlipService.cs index ec8d15ae..d7bb6ba8 100644 --- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application/Services/CardFlipService.cs +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application/Services/CardFlipService.cs @@ -58,7 +58,7 @@ public class CardFlipService : ApplicationService, ICardFlipService { TotalFlips = task?.TotalFlips ?? 0, RemainingFreeFlips = CardFlipManager.MAX_FREE_FLIPS - (task?.FreeFlipsUsed ?? 0), - RemainingBonusFlips = CardFlipManager.MAX_BONUS_FLIPS - (task?.BonusFlipsUsed ?? 0), + RemainingBonusFlips = 0, // 已废弃 RemainingInviteFlips = CardFlipManager.MAX_INVITE_FLIPS - (task?.InviteFlipsUsed ?? 0), CanFlip = _cardFlipManager.CanFlipCard(task), MyInviteCode = inviteCode?.Code, @@ -97,7 +97,6 @@ public class CardFlipService : ApplicationService, ICardFlipService IsWin = result.IsWin, RewardAmount = result.RewardAmount, RewardDesc = result.RewardDesc, - ShowDoubleRewardTip = result.ShowDoubleRewardTip, RemainingFlips = CardFlipManager.TOTAL_MAX_FLIPS - input.FlipNumber }; diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Entities/CardFlipTaskAggregateRoot.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Entities/CardFlipTaskAggregateRoot.cs index 3bce9f1b..3adaba7e 100644 --- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Entities/CardFlipTaskAggregateRoot.cs +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Entities/CardFlipTaskAggregateRoot.cs @@ -46,17 +46,17 @@ public class CardFlipTaskAggregateRoot : FullAuditedAggregateRoot public int TotalFlips { get; set; } /// - /// 已使用的免费次数(最多5次) + /// 已使用的免费次数(最多7次) /// public int FreeFlipsUsed { get; set; } /// - /// 已使用的赠送次数(最多3次) + /// 已使用的赠送次数(已废弃,保持为0) /// public int BonusFlipsUsed { get; set; } /// - /// 已使用的邀请解锁次数(最多2次) + /// 已使用的邀请解锁次数(最多3次) /// public int InviteFlipsUsed { get; set; } @@ -171,17 +171,17 @@ public class CardFlipTaskAggregateRoot : FullAuditedAggregateRoot public enum FlipType { /// - /// 免费翻牌(1-5次) + /// 免费翻牌(1-7次) /// Free = 0, /// - /// 赠送翻牌(6-8次) + /// 赠送翻牌(已废弃) /// Bonus = 1, /// - /// 邀请解锁翻牌(9-10次) + /// 邀请解锁翻牌(8-10次) /// Invite = 2 } diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/CardFlipManager.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/CardFlipManager.cs index 6e355c96..60166bba 100644 --- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/CardFlipManager.cs +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/CardFlipManager.cs @@ -16,7 +16,6 @@ public class CardFlipManager : DomainService // 翻牌规则配置 public const int MAX_FREE_FLIPS = 7; // 免费翻牌次数 - public const int MAX_BONUS_FLIPS = 0; // 赠送翻牌次数(已废弃) public const int MAX_INVITE_FLIPS = 3; // 邀请解锁翻牌次数 public const int TOTAL_MAX_FLIPS = 10; // 总最大翻牌次数 @@ -180,10 +179,6 @@ public class CardFlipManager : DomainService { return FlipType.Free; } - else if (task.BonusFlipsUsed < MAX_BONUS_FLIPS) - { - return FlipType.Bonus; - } else { return FlipType.Invite; @@ -198,7 +193,6 @@ public class CardFlipManager : DomainService return flipType switch { FlipType.Free => task.FreeFlipsUsed < MAX_FREE_FLIPS, - FlipType.Bonus => task.BonusFlipsUsed < MAX_BONUS_FLIPS, FlipType.Invite => task.InviteFlipsUsed < MAX_INVITE_FLIPS, _ => false }; @@ -213,8 +207,7 @@ public class CardFlipManager : DomainService var result = new FlipResult { FlipNumber = 0, // 稍后会被设置为实际的卡片序号 - IsWin = false, - ShowDoubleRewardTip = false + IsWin = false }; // 前7次固定失败 @@ -259,7 +252,6 @@ public class CardFlipManager : DomainService return flipType switch { FlipType.Free => "免费翻牌次数已用完", - FlipType.Bonus => "赠送翻牌次数已用完", FlipType.Invite => "需要使用邀请码解锁更多次数", _ => "无法翻牌" }; @@ -338,9 +330,4 @@ public class FlipResult /// 奖励描述 /// public string RewardDesc { get; set; } = string.Empty; - - /// - /// 是否显示翻倍奖励提示 - /// - public bool ShowDoubleRewardTip { get; set; } } diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/InviteCodeManager.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/InviteCodeManager.cs index 35188763..797f1053 100644 --- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/InviteCodeManager.cs +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/InviteCodeManager.cs @@ -131,28 +131,35 @@ public class InviteCodeManager : DomainService throw new UserFriendlyException("该用户已被邀请,邀请码无效"); } - // 检查当前用户是否已被邀请 + // 验证本周邀请码使用次数 + var weekStart = CardFlipManager.GetWeekStartDate(DateTime.Now); + var weeklyUseCount = await _invitationRecordRepository._DbQueryable + .Where(x => x.InvitedUserId == userId) + .Where(x => x.InvitationTime >= weekStart) + .CountAsync(); + + if (weeklyUseCount >= CardFlipManager.MAX_INVITE_FLIPS) + { + throw new UserFriendlyException($"本周邀请码使用次数已达上限({CardFlipManager.MAX_INVITE_FLIPS}次),请下周再来"); + } + + // 检查当前用户的邀请码信息 var myInviteCode = await _inviteCodeRepository._DbQueryable .Where(x => x.UserId == userId) .FirstAsync(); - if (myInviteCode?.IsUserInvited == true) - { - throw new UserFriendlyException("您已使用过邀请码,无法重复使用"); - } - // 标记邀请码为已使用 inviteCodeEntity.MarkAsUsed(userId); await _inviteCodeRepository.UpdateAsync(inviteCodeEntity); - // 标记当前用户已被邀请 + // 标记当前用户已被邀请(仅第一次使用邀请码时标记) if (myInviteCode == null) { myInviteCode = new InviteCodeAggregateRoot(userId, GenerateUniqueInviteCode()); myInviteCode.MarkUserAsInvited(); await _inviteCodeRepository.InsertAsync(myInviteCode); } - else + else if (!myInviteCode.IsUserInvited) { myInviteCode.MarkUserAsInvited(); await _inviteCodeRepository.UpdateAsync(myInviteCode);