feat: 完成token下拉框
This commit is contained in:
@@ -3,7 +3,7 @@ namespace Yi.Framework.AiHub.Application.Contracts.Dtos.Token;
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Token列表输出
|
/// Token列表输出
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class TokenListOutput
|
public class TokenGetListOutputDto
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Token Id
|
/// Token Id
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
namespace Yi.Framework.AiHub.Application.Contracts.Dtos.Token;
|
||||||
|
|
||||||
|
public class TokenSelectListOutputDto
|
||||||
|
{
|
||||||
|
public Guid TokenId { get; set; }
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
public bool IsDisabled { get; set; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
namespace Yi.Framework.AiHub.Application.Contracts.Dtos.UsageStatistics;
|
||||||
|
|
||||||
|
public class UsageStatisticsGetInput
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// tokenId
|
||||||
|
/// </summary>
|
||||||
|
public Guid? TokenId { get; set; }
|
||||||
|
}
|
||||||
@@ -11,13 +11,13 @@ public interface IUsageStatisticsService
|
|||||||
/// 获取当前用户近7天的Token消耗统计
|
/// 获取当前用户近7天的Token消耗统计
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>每日Token使用量列表</returns>
|
/// <returns>每日Token使用量列表</returns>
|
||||||
Task<List<DailyTokenUsageDto>> GetLast7DaysTokenUsageAsync();
|
Task<List<DailyTokenUsageDto>> GetLast7DaysTokenUsageAsync(UsageStatisticsGetInput input);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取当前用户各个模型的Token消耗量及占比
|
/// 获取当前用户各个模型的Token消耗量及占比
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>模型Token使用量列表</returns>
|
/// <returns>模型Token使用量列表</returns>
|
||||||
Task<List<ModelTokenUsageDto>> GetModelTokenUsageAsync();
|
Task<List<ModelTokenUsageDto>> GetModelTokenUsageAsync(UsageStatisticsGetInput input);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取当前用户尊享服务Token用量统计
|
/// 获取当前用户尊享服务Token用量统计
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using SqlSugar;
|
using SqlSugar;
|
||||||
|
using Volo.Abp.Application.Dtos;
|
||||||
using Volo.Abp.Application.Services;
|
using Volo.Abp.Application.Services;
|
||||||
using Volo.Abp.Users;
|
using Volo.Abp.Users;
|
||||||
using Yi.Framework.AiHub.Application.Contracts.Dtos.Token;
|
using Yi.Framework.AiHub.Application.Contracts.Dtos.Token;
|
||||||
@@ -8,6 +9,7 @@ using Yi.Framework.AiHub.Domain.Entities;
|
|||||||
using Yi.Framework.AiHub.Domain.Entities.OpenApi;
|
using Yi.Framework.AiHub.Domain.Entities.OpenApi;
|
||||||
using Yi.Framework.AiHub.Domain.Extensions;
|
using Yi.Framework.AiHub.Domain.Extensions;
|
||||||
using Yi.Framework.AiHub.Domain.Shared.Consts;
|
using Yi.Framework.AiHub.Domain.Shared.Consts;
|
||||||
|
using Yi.Framework.Ddd.Application.Contracts;
|
||||||
using Yi.Framework.SqlSugarCore.Abstractions;
|
using Yi.Framework.SqlSugarCore.Abstractions;
|
||||||
|
|
||||||
namespace Yi.Framework.AiHub.Application.Services;
|
namespace Yi.Framework.AiHub.Application.Services;
|
||||||
@@ -33,18 +35,19 @@ public class TokenService : ApplicationService
|
|||||||
/// 获取当前用户的Token列表
|
/// 获取当前用户的Token列表
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[HttpGet("token/list")]
|
[HttpGet("token/list")]
|
||||||
public async Task<List<TokenListOutput>> GetListAsync()
|
public async Task<PagedResultDto<TokenGetListOutputDto>> GetListAsync([FromQuery] PagedAllResultRequestDto input)
|
||||||
{
|
{
|
||||||
|
RefAsync<int> total = 0;
|
||||||
var userId = CurrentUser.GetId();
|
var userId = CurrentUser.GetId();
|
||||||
|
|
||||||
var tokens = await _tokenRepository._DbQueryable
|
var tokens = await _tokenRepository._DbQueryable
|
||||||
.Where(x => x.UserId == userId)
|
.Where(x => x.UserId == userId)
|
||||||
.OrderByDescending(x => x.CreationTime)
|
.OrderByDescending(x => x.CreationTime)
|
||||||
.ToListAsync();
|
.ToPageListAsync(input.SkipCount, input.MaxResultCount, total);
|
||||||
|
|
||||||
if (!tokens.Any())
|
if (!tokens.Any())
|
||||||
{
|
{
|
||||||
return new List<TokenListOutput>();
|
return new PagedResultDto<TokenGetListOutputDto>();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取尊享包模型ID列表
|
// 获取尊享包模型ID列表
|
||||||
@@ -65,7 +68,7 @@ public class TokenService : ApplicationService
|
|||||||
var result = tokens.Select(t =>
|
var result = tokens.Select(t =>
|
||||||
{
|
{
|
||||||
var usedQuota = usageStats.FirstOrDefault(u => u.TokenId == t.Id)?.UsedQuota ?? 0;
|
var usedQuota = usageStats.FirstOrDefault(u => u.TokenId == t.Id)?.UsedQuota ?? 0;
|
||||||
return new TokenListOutput
|
return new TokenGetListOutputDto
|
||||||
{
|
{
|
||||||
Id = t.Id,
|
Id = t.Id,
|
||||||
Name = t.Name,
|
Name = t.Name,
|
||||||
@@ -78,14 +81,32 @@ public class TokenService : ApplicationService
|
|||||||
};
|
};
|
||||||
}).ToList();
|
}).ToList();
|
||||||
|
|
||||||
return result;
|
return new PagedResultDto<TokenGetListOutputDto>(total, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpGet("token/select-list")]
|
||||||
|
public async Task<List<TokenSelectListOutputDto>> GetSelectListAsync()
|
||||||
|
{
|
||||||
|
var userId = CurrentUser.GetId();
|
||||||
|
var tokens = await _tokenRepository._DbQueryable
|
||||||
|
.Where(x => x.UserId == userId)
|
||||||
|
.OrderBy(x => x.IsDisabled)
|
||||||
|
.OrderByDescending(x => x.CreationTime)
|
||||||
|
.Select(x => new TokenSelectListOutputDto
|
||||||
|
{
|
||||||
|
TokenId = x.Id,
|
||||||
|
Name = x.Name,
|
||||||
|
IsDisabled = x.IsDisabled
|
||||||
|
}).ToListAsync();
|
||||||
|
return tokens;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 创建Token
|
/// 创建Token
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[HttpPost("token")]
|
[HttpPost("token")]
|
||||||
public async Task<TokenListOutput> CreateAsync([FromBody] TokenCreateInput input)
|
public async Task<TokenGetListOutputDto> CreateAsync([FromBody] TokenCreateInput input)
|
||||||
{
|
{
|
||||||
var userId = CurrentUser.GetId();
|
var userId = CurrentUser.GetId();
|
||||||
|
|
||||||
@@ -111,7 +132,7 @@ public class TokenService : ApplicationService
|
|||||||
|
|
||||||
await _tokenRepository.InsertAsync(token);
|
await _tokenRepository.InsertAsync(token);
|
||||||
|
|
||||||
return new TokenListOutput
|
return new TokenGetListOutputDto
|
||||||
{
|
{
|
||||||
Id = token.Id,
|
Id = token.Id,
|
||||||
Name = token.Name,
|
Name = token.Name,
|
||||||
@@ -213,4 +234,4 @@ public class TokenService : ApplicationService
|
|||||||
token.Disable();
|
token.Disable();
|
||||||
await _tokenRepository.UpdateAsync(token);
|
await _tokenRepository.UpdateAsync(token);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -44,7 +44,7 @@ public class UsageStatisticsService : ApplicationService, IUsageStatisticsServic
|
|||||||
/// 获取当前用户近7天的Token消耗统计
|
/// 获取当前用户近7天的Token消耗统计
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>每日Token使用量列表</returns>
|
/// <returns>每日Token使用量列表</returns>
|
||||||
public async Task<List<DailyTokenUsageDto>> GetLast7DaysTokenUsageAsync()
|
public async Task<List<DailyTokenUsageDto>> GetLast7DaysTokenUsageAsync([FromQuery]UsageStatisticsGetInput input)
|
||||||
{
|
{
|
||||||
var userId = CurrentUser.GetId();
|
var userId = CurrentUser.GetId();
|
||||||
var endDate = DateTime.Today;
|
var endDate = DateTime.Today;
|
||||||
@@ -55,6 +55,7 @@ public class UsageStatisticsService : ApplicationService, IUsageStatisticsServic
|
|||||||
.Where(x => x.UserId == userId)
|
.Where(x => x.UserId == userId)
|
||||||
.Where(x => x.Role == "assistant" || x.Role == "system")
|
.Where(x => x.Role == "assistant" || x.Role == "system")
|
||||||
.Where(x => x.CreationTime >= startDate && x.CreationTime < endDate.AddDays(1))
|
.Where(x => x.CreationTime >= startDate && x.CreationTime < endDate.AddDays(1))
|
||||||
|
.WhereIF(input.TokenId.HasValue,x => x.TokenId == input.TokenId)
|
||||||
.GroupBy(x => x.CreationTime.Date)
|
.GroupBy(x => x.CreationTime.Date)
|
||||||
.Select(g => new
|
.Select(g => new
|
||||||
{
|
{
|
||||||
@@ -84,13 +85,14 @@ public class UsageStatisticsService : ApplicationService, IUsageStatisticsServic
|
|||||||
/// 获取当前用户各个模型的Token消耗量及占比
|
/// 获取当前用户各个模型的Token消耗量及占比
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>模型Token使用量列表</returns>
|
/// <returns>模型Token使用量列表</returns>
|
||||||
public async Task<List<ModelTokenUsageDto>> GetModelTokenUsageAsync()
|
public async Task<List<ModelTokenUsageDto>> GetModelTokenUsageAsync([FromQuery]UsageStatisticsGetInput input)
|
||||||
{
|
{
|
||||||
var userId = CurrentUser.GetId();
|
var userId = CurrentUser.GetId();
|
||||||
|
|
||||||
// 从UsageStatistics表获取各模型的token消耗统计(按ModelId聚合,因为同一模型可能有多个TokenId的记录)
|
// 从UsageStatistics表获取各模型的token消耗统计(按ModelId聚合,因为同一模型可能有多个TokenId的记录)
|
||||||
var modelUsages = await _usageStatisticsRepository._DbQueryable
|
var modelUsages = await _usageStatisticsRepository._DbQueryable
|
||||||
.Where(x => x.UserId == userId)
|
.Where(x => x.UserId == userId)
|
||||||
|
.WhereIF(input.TokenId.HasValue,x => x.TokenId == input.TokenId)
|
||||||
.GroupBy(x => x.ModelId)
|
.GroupBy(x => x.ModelId)
|
||||||
.Select(x => new
|
.Select(x => new
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user