using FreeSql; using LiveForum.IService.Cdk; using LiveForum.IService.Others; using LiveForum.Model; using LiveForum.Model.Dto.Cdk; namespace LiveForum.Service.Cdk { /// /// CDK服务实现 /// public class CdkService : ICdkService { private readonly IBaseRepository _cdkRepository; private readonly IBaseRepository _userRepository; private readonly ISystemSettingsService _systemSettingsService; /// /// CDK功能开关配置键 /// public const string CDK_ENABLED_KEY = "cdk_enabled"; /// /// 构造函数 /// public CdkService( IBaseRepository cdkRepository, IBaseRepository userRepository, ISystemSettingsService systemSettingsService) { _cdkRepository = cdkRepository; _userRepository = userRepository; _systemSettingsService = systemSettingsService; } /// /// 检查CDK状态 /// public async Task CheckCdkStatusAsync(long userId) { // 获取CDK功能是否启用 var cdkEnabled = await _systemSettingsService.GetSettingAsync(CDK_ENABLED_KEY); var isCdkEnabled = string.Equals(cdkEnabled, "true", StringComparison.OrdinalIgnoreCase); // 获取用户CDK激活状态 var user = await _userRepository.Select .Where(x => x.Id == userId) .FirstAsync(); var isActivated = user?.IsCdkActivated ?? false; return new CdkStatusDto { CdkEnabled = isCdkEnabled, IsActivated = isActivated }; } /// /// 激活CDK /// public async Task ActivateCdkAsync(long userId, string code) { if (string.IsNullOrWhiteSpace(code)) { return "请输入有效 CDK"; } // 查找CDK var cdk = await _cdkRepository.Select .Where(x => x.Code == code.Trim()) .FirstAsync(); // CDK不存在 if (cdk == null) { return "请输入有效 CDK"; } // CDK已被使用 if (cdk.Status == 1) { return "该 CDK 已被激活"; } // 获取用户 var user = await _userRepository.Select .Where(x => x.Id == userId) .FirstAsync(); if (user == null) { return "用户不存在"; } // 用户已激活 if (user.IsCdkActivated) { return "您已激活过 CDK"; } var now = DateTime.Now; // 更新CDK状态 cdk.Status = 1; cdk.UsedByUserId = userId; cdk.UsedAt = now; await _cdkRepository.UpdateAsync(cdk); // 更新用户CDK激活状态 user.IsCdkActivated = true; user.CdkActivatedAt = now; await _userRepository.UpdateAsync(user); return "CDK 激活成功"; } /// /// 检查用户是否需要CDK激活才能进行互动操作 /// public async Task RequiresCdkActivationAsync(long userId) { // 获取CDK功能是否启用 var cdkEnabled = await _systemSettingsService.GetSettingAsync(CDK_ENABLED_KEY); var isCdkEnabled = string.Equals(cdkEnabled, "true", StringComparison.OrdinalIgnoreCase); // 如果CDK功能未启用,不需要激活 if (!isCdkEnabled) { return false; } // 获取用户CDK激活状态 var user = await _userRepository.Select .Where(x => x.Id == userId) .FirstAsync(); // 如果用户已激活,不需要激活 if (user?.IsCdkActivated == true) { return false; } // 需要激活但未激活 return true; } } }