From 4bd2fc357d9049aeeb41efa23173fffa61a49acc Mon Sep 17 00:00:00 2001 From: ccnetcore Date: Fri, 14 Nov 2025 23:53:29 +0800 Subject: [PATCH 01/13] =?UTF-8?q?refactor:=20=E9=82=80=E8=AF=B7=E7=A0=81?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E8=B0=83=E6=95=B4=EF=BC=8C=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=8F=8C=E6=96=B9=E5=A1=AB=E5=86=99/=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E9=82=80=E8=AF=B7=E7=A0=81=E7=BB=9F=E8=AE=A1=EF=BC=8C=E5=B9=B6?= =?UTF-8?q?=E7=A7=BB=E9=99=A4=E5=B7=B2=E8=A2=AB=E9=82=80=E8=AF=B7=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dtos/CardFlip/CardFlipStatusOutput.cs | 12 ++-- .../Services/CardFlipService.cs | 16 +++--- .../Entities/InviteCodeAggregateRoot.cs | 17 +----- .../Managers/InviteCodeManager.cs | 56 ++++++------------- Yi.Ai.Vue3/.eslintrc-auto-import.json | 2 - 5 files changed, 32 insertions(+), 71 deletions(-) diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application.Contracts/Dtos/CardFlip/CardFlipStatusOutput.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application.Contracts/Dtos/CardFlip/CardFlipStatusOutput.cs index 3594dbb8..082c20f9 100644 --- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application.Contracts/Dtos/CardFlip/CardFlipStatusOutput.cs +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application.Contracts/Dtos/CardFlip/CardFlipStatusOutput.cs @@ -39,12 +39,7 @@ public class CardFlipStatusOutput /// 本周邀请人数 /// public int InvitedCount { get; set; } - - /// - /// 是否已被邀请(被邀请后不可再提供邀请码) - /// - public bool IsInvited { get; set; } - + /// /// 翻牌记录 /// @@ -54,6 +49,11 @@ public class CardFlipStatusOutput /// 下次可翻牌提示 /// public string? NextFlipTip { get; set; } + + /// + /// 当前用户是否已经填写过邀请码 + /// + public bool IsFilledInviteCode { 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 4adc8dfc..feefd4ba 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 @@ -51,9 +51,8 @@ public class CardFlipService : ApplicationService, ICardFlipService // 统计本周邀请人数 var invitedCount = await _inviteCodeManager.GetWeeklyInvitationCountAsync(userId, weekStart); - // 检查用户是否已被邀请 - var isInvited = await _inviteCodeManager.IsUserInvitedAsync(userId); - + //当前用户是否已填写过邀请码 + var isFilledInviteCode = await _inviteCodeManager.IsFilledInviteCodeAsync(userId); var output = new CardFlipStatusOutput { TotalFlips = task?.TotalFlips ?? 0, @@ -63,8 +62,8 @@ public class CardFlipService : ApplicationService, ICardFlipService CanFlip = _cardFlipManager.CanFlipCard(task), MyInviteCode = inviteCode?.Code, InvitedCount = invitedCount, - IsInvited = isInvited, - FlipRecords = BuildFlipRecords(task) + FlipRecords = BuildFlipRecords(task), + IsFilledInviteCode = isFilledInviteCode }; // 生成提示信息 @@ -87,7 +86,7 @@ public class CardFlipService : ApplicationService, ICardFlipService // 如果中奖,发放奖励 if (result.IsWin) { - await GrantRewardAsync(userId, result.RewardAmount, $"翻牌活动第{input.FlipNumber}次中奖"); + await GrantRewardAsync(userId, result.RewardAmount, $"翻牌活动-序号{input.FlipNumber}中奖"); } // 构建输出 @@ -147,7 +146,6 @@ public class CardFlipService : ApplicationService, ICardFlipService { MyInviteCode = inviteCode?.Code, InvitedCount = invitedCount, - IsInvited = inviteCode?.IsUserInvited ?? false, InvitationHistory = invitationHistory.Select(x => new InvitationHistoryItem { InvitedUserName = x.InvitedUserName, @@ -237,10 +235,10 @@ public class CardFlipService : ApplicationService, ICardFlipService { if (status.TotalFlips >= 7) { - return $"本周使用他人邀请码可解锁{status.RemainingInviteFlips}次翻牌,且必中大奖!每次中奖最大额度将翻倍!"; + return $"本周使用他人邀请码或他人使用你的邀请码,可解锁{status.RemainingInviteFlips}次翻牌,且必中大奖!每次中奖最大额度将翻倍!"; } - return $"本周使用他人邀请码可解锁{status.RemainingInviteFlips}次翻牌,必中大奖!每次中奖最大额度将翻倍!"; + return $"本周使用他人邀请码或他人使用你的邀请码,可解锁{status.RemainingInviteFlips}次翻牌,必中大奖!每次中奖最大额度将翻倍!"; } return "继续加油!"; diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Entities/InviteCodeAggregateRoot.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Entities/InviteCodeAggregateRoot.cs index 44346b23..bcd310af 100644 --- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Entities/InviteCodeAggregateRoot.cs +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Entities/InviteCodeAggregateRoot.cs @@ -19,7 +19,6 @@ public class InviteCodeAggregateRoot : FullAuditedAggregateRoot { UserId = userId; Code = code; - IsUserInvited = false; UsedCount = 0; } @@ -33,12 +32,7 @@ public class InviteCodeAggregateRoot : FullAuditedAggregateRoot /// [SugarColumn(Length = 50)] public string Code { get; set; } = string.Empty; - - /// - /// 邀请码拥有者是否已被他人邀请(被邀请后不可再提供邀请码) - /// - public bool IsUserInvited { get; set; } - + /// /// 被使用次数(统计用,一个邀请码可以被多人使用) /// @@ -49,12 +43,5 @@ public class InviteCodeAggregateRoot : FullAuditedAggregateRoot /// [SugarColumn(Length = 500, IsNullable = true)] public string? Remark { get; set; } - - /// - /// 标记用户已被邀请 - /// - public void MarkUserAsInvited() - { - IsUserInvited = true; - } + } 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 95057111..9fae5e81 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 @@ -63,14 +63,19 @@ public class InviteCodeManager : DomainService } /// - /// 统计用户本周邀请人数(别人填写我的邀请码的次数) + /// 统计用户本周邀请人数(别人填写我的邀请码的次数/或者我填写别人邀请码) /// public async Task GetWeeklyInvitationCountAsync(Guid userId, DateTime weekStart) { - return await _invitationRecordRepository._DbQueryable + var inviterCount= await _invitationRecordRepository._DbQueryable .Where(x => x.InviterId == userId) .Where(x => x.InvitationTime >= weekStart) .CountAsync(); + var invitedUserIdCount= await _invitationRecordRepository._DbQueryable + .Where(x => x.InvitedUserId == userId) + .Where(x => x.InvitationTime >= weekStart) + .CountAsync(); + return inviterCount + invitedUserIdCount; } /// @@ -118,45 +123,19 @@ public class InviteCodeManager : DomainService { throw new UserFriendlyException("不能使用自己的邀请码"); } - - // 验证邀请码拥有者是否已被邀请 - if (inviteCodeEntity.IsUserInvited) - { - throw new UserFriendlyException("该用户已被邀请,邀请码无效"); - } - + // 检查当前用户是否已经填写过别人的邀请码(一辈子只能填写一次) - var hasUsedOthersCode = await _invitationRecordRepository._DbQueryable - .Where(x => x.InvitedUserId == userId) - .AnyAsync(); + var hasUsedOthersCode = await IsFilledInviteCodeAsync(userId); if (hasUsedOthersCode) { throw new UserFriendlyException("您已经填写过别人的邀请码了,每个账号只能填写一次"); } - - // 检查当前用户的邀请码信息 - var myInviteCode = await _inviteCodeRepository._DbQueryable - .Where(x => x.UserId == userId) - .FirstAsync(); - + // 增加邀请码被使用次数 inviteCodeEntity.UsedCount++; await _inviteCodeRepository.UpdateAsync(inviteCodeEntity); - - // 标记当前用户已被邀请(一辈子只能填写一次) - if (myInviteCode == null) - { - myInviteCode = new InviteCodeAggregateRoot(userId, GenerateUniqueInviteCode()); - myInviteCode.MarkUserAsInvited(); - await _inviteCodeRepository.InsertAsync(myInviteCode); - } - else if (!myInviteCode.IsUserInvited) - { - myInviteCode.MarkUserAsInvited(); - await _inviteCodeRepository.UpdateAsync(myInviteCode); - } - + // 创建邀请记录(双方都会因为这条记录增加一次翻牌机会) var invitationRecord = new InvitationRecordAggregateRoot( inviteCodeEntity.UserId, @@ -170,15 +149,14 @@ public class InviteCodeManager : DomainService } /// - /// 检查用户是否已被邀请 + /// 检查用户是否已填写过邀请码 /// - public async Task IsUserInvitedAsync(Guid userId) + public async Task IsFilledInviteCodeAsync(Guid userId) { - var inviteCode = await _inviteCodeRepository._DbQueryable - .Where(x => x.UserId == userId) - .FirstAsync(); - - return inviteCode?.IsUserInvited ?? false; + // 检查当前用户是否已经填写过别人的邀请码(一辈子只能填写一次) + return await _invitationRecordRepository._DbQueryable + .Where(x => x.InvitedUserId == userId) + .AnyAsync(); } /// diff --git a/Yi.Ai.Vue3/.eslintrc-auto-import.json b/Yi.Ai.Vue3/.eslintrc-auto-import.json index 313e6711..af1083b7 100644 --- a/Yi.Ai.Vue3/.eslintrc-auto-import.json +++ b/Yi.Ai.Vue3/.eslintrc-auto-import.json @@ -5,8 +5,6 @@ "ComputedRef": true, "DirectiveBinding": true, "EffectScope": true, - "ElMessage": true, - "ElMessageBox": true, "ExtractDefaultPropTypes": true, "ExtractPropTypes": true, "ExtractPublicPropTypes": true, From ffb2f2fb4c75c2151b741c3347ec133afccd2e1a Mon Sep 17 00:00:00 2001 From: ccnetcore Date: Sun, 16 Nov 2025 21:32:41 +0800 Subject: [PATCH 02/13] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=B0=8A?= =?UTF-8?q?=E4=BA=AB=E5=8C=85=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6=E5=B9=B6?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=97=B6=E9=97=B4=E8=8C=83=E5=9B=B4=E7=AD=9B?= =?UTF-8?q?=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/UsageStatisticsService.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application/Services/UsageStatisticsService.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application/Services/UsageStatisticsService.cs index ffb49bb9..feedf690 100644 --- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application/Services/UsageStatisticsService.cs +++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application/Services/UsageStatisticsService.cs @@ -155,8 +155,10 @@ public class UsageStatisticsService : ApplicationService, IUsageStatisticsServic // 获取尊享包Token信息 var entities = await _premiumPackageRepository._DbQueryable .Where(x => x.UserId == userId) - .WhereIF(input.IsFree == true, x => x.PurchaseAmount > 0) - .WhereIF(input.IsFree == false, x => x.PurchaseAmount == 0) + .WhereIF(input.IsFree == false, x => x.PurchaseAmount > 0) + .WhereIF(input.IsFree == true, x => x.PurchaseAmount == 0) + .WhereIF(input.StartTime is not null && input.EndTime is not null, + x => x.CreationTime >= input.StartTime && x.CreationTime <= input.EndTime) .OrderByDescending(x => x.CreationTime) .ToPageListAsync(input.SkipCount, input.MaxResultCount, total); return new PagedResultDto(total, From d95c14c9035c8580f69d30bfb6c9f6882e1138ff Mon Sep 17 00:00:00 2001 From: Gsh <15170702455@163.com> Date: Sun, 16 Nov 2025 21:30:37 +0800 Subject: [PATCH 03/13] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E5=B0=8A?= =?UTF-8?q?=E4=BA=AB=E5=8C=85=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Yi.Ai.Vue3/.eslintrc-auto-import.json | 2 + Yi.Ai.Vue3/src/api/user/index.ts | 8 + .../components/PremiumUsageList.vue | 257 +++++------------- 3 files changed, 77 insertions(+), 190 deletions(-) diff --git a/Yi.Ai.Vue3/.eslintrc-auto-import.json b/Yi.Ai.Vue3/.eslintrc-auto-import.json index af1083b7..313e6711 100644 --- a/Yi.Ai.Vue3/.eslintrc-auto-import.json +++ b/Yi.Ai.Vue3/.eslintrc-auto-import.json @@ -5,6 +5,8 @@ "ComputedRef": true, "DirectiveBinding": true, "EffectScope": true, + "ElMessage": true, + "ElMessageBox": true, "ExtractDefaultPropTypes": true, "ExtractPropTypes": true, "ExtractPublicPropTypes": true, diff --git a/Yi.Ai.Vue3/src/api/user/index.ts b/Yi.Ai.Vue3/src/api/user/index.ts index a19f0073..6b9d6b8d 100644 --- a/Yi.Ai.Vue3/src/api/user/index.ts +++ b/Yi.Ai.Vue3/src/api/user/index.ts @@ -22,6 +22,10 @@ export interface PremiumTokenUsageDto { purchaseAmount: number; /** 备注 */ remark?: string; + /** 创建时间 */ + creationTime?: string; + /** 创建者ID */ + creatorId?: string; } // 查询参数接口 - 匹配后端 PagedAllResultRequestDto @@ -38,6 +42,10 @@ export interface PremiumTokenUsageQueryParams { skipCount?: number; /** 最大返回数量(分页) */ maxResultCount?: number; + /** 是否免费 */ + isFree?: boolean; + // 是否为升序排序 + isAscending?: boolean; } // 分页响应接口 diff --git a/Yi.Ai.Vue3/src/components/userPersonalCenter/components/PremiumUsageList.vue b/Yi.Ai.Vue3/src/components/userPersonalCenter/components/PremiumUsageList.vue index f3b21e3a..341e608d 100644 --- a/Yi.Ai.Vue3/src/components/userPersonalCenter/components/PremiumUsageList.vue +++ b/Yi.Ai.Vue3/src/components/userPersonalCenter/components/PremiumUsageList.vue @@ -1,21 +1,12 @@ diff --git a/Yi.Ai.Vue3/src/components/SystemAnnouncementDialog/index.vue b/Yi.Ai.Vue3/src/components/SystemAnnouncementDialog/index.vue index 13fedee7..8a728e6f 100644 --- a/Yi.Ai.Vue3/src/components/SystemAnnouncementDialog/index.vue +++ b/Yi.Ai.Vue3/src/components/SystemAnnouncementDialog/index.vue @@ -52,7 +52,7 @@ function handleClose(type: CloseType) { announcementStore.closeDialog(type); const messages = { - today: '今日内不再显示', + today: '一周内不再显示', permanent: '公告已关闭', }; @@ -199,7 +199,7 @@ function getActivityStatus(activity: AnnouncementLogDto): 'active' | 'expired' {