using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Volo.Abp.Application.Services; using Volo.Abp.Users; using Yi.Framework.AiHub.Application.Contracts.Dtos.FileMaster; using Yi.Framework.AiHub.Domain.Managers; using Yi.Framework.AiHub.Domain.Shared.Dtos.OpenAi; namespace Yi.Framework.AiHub.Application.Services.FileMaster; public class FileMasterService : ApplicationService { private readonly IHttpContextAccessor _httpContextAccessor; private readonly AiGateWayManager _aiGateWayManager; private readonly AiBlacklistManager _aiBlacklistManager; public FileMasterService(IHttpContextAccessor httpContextAccessor, AiGateWayManager aiGateWayManager, AiBlacklistManager aiBlacklistManager) { _httpContextAccessor = httpContextAccessor; _aiGateWayManager = aiGateWayManager; _aiBlacklistManager = aiBlacklistManager; } /// /// 校验下一步 /// /// [HttpPost("FileMaster/VerifyNext")] public Task VerifyNextAsync(VerifyNextInput input) { if (!CurrentUser.IsAuthenticated) { if (input.DirectoryCount + input.FileCount >= 20) { throw new UserFriendlyException("未登录用户,文件夹与文件数量不能大于20个,请登录后解锁全部功能"); } } else { if (input.DirectoryCount + input.FileCount >= 100) { throw new UserFriendlyException("为防止无限制暴力使用,当前文件整理大师Vip最多支持100文件与文件夹数量"); } } return Task.FromResult("success"); } /// /// 对话 /// /// /// [HttpPost("FileMaster/chat/completions")] public async Task ChatCompletionsAsync([FromBody] ThorChatCompletionsRequest input, CancellationToken cancellationToken) { if (CurrentUser.IsAuthenticated) { input.Model = "gpt-5-chat"; } else { input.Model = "gpt-5-chat"; } Guid? userId = CurrentUser.IsAuthenticated ? CurrentUser.GetId() : null; if (userId is not null) { await _aiBlacklistManager.VerifiyAiBlacklist(userId.Value); } //ai网关代理httpcontext if (input.Stream == true) { await _aiGateWayManager.CompleteChatStreamForStatisticsAsync(_httpContextAccessor.HttpContext, input, userId, null, null, cancellationToken); } else { await _aiGateWayManager.CompleteChatForStatisticsAsync(_httpContextAccessor.HttpContext, input, userId, null, null, cancellationToken); } } }