feat: 新增图片广场、发布及模型查询接口
- 图片任务列表区分为“我的任务”和“图片广场(已发布)” - 新增图片发布到广场接口,支持分类 - 新增图片模型列表查询接口 - 注释掉图片 Base64 前缀字段,统一使用 URL - 调整相关依赖注入,支持模型仓储查询
This commit is contained in:
@@ -30,7 +30,7 @@ public class ImageTaskOutput
|
||||
/// <summary>
|
||||
/// 生成图片PrefixBase64(包含前缀)
|
||||
/// </summary>
|
||||
public string? StorePrefixBase64 { get; set; }
|
||||
// public string? StorePrefixBase64 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 生成图片URL
|
||||
|
||||
@@ -8,9 +8,11 @@ using Volo.Abp.Application.Services;
|
||||
using Volo.Abp.BackgroundJobs;
|
||||
using Volo.Abp.Guids;
|
||||
using Volo.Abp.Users;
|
||||
using Yi.Framework.AiHub.Application.Contracts.Dtos;
|
||||
using Yi.Framework.AiHub.Application.Contracts.Dtos.Chat;
|
||||
using Yi.Framework.AiHub.Application.Jobs;
|
||||
using Yi.Framework.AiHub.Domain.Entities.Chat;
|
||||
using Yi.Framework.AiHub.Domain.Entities.Model;
|
||||
using Yi.Framework.AiHub.Domain.Extensions;
|
||||
using Yi.Framework.AiHub.Domain.Managers;
|
||||
using Yi.Framework.AiHub.Domain.Shared.Consts;
|
||||
@@ -33,6 +35,7 @@ public class AiImageService : ApplicationService
|
||||
private readonly IGuidGenerator _guidGenerator;
|
||||
private readonly IWebHostEnvironment _webHostEnvironment;
|
||||
private readonly TokenManager _tokenManager;
|
||||
private readonly ISqlSugarRepository<AiModelEntity> _aiModelRepository;
|
||||
public AiImageService(
|
||||
ISqlSugarRepository<ImageStoreTaskAggregateRoot> imageTaskRepository,
|
||||
IBackgroundJobManager backgroundJobManager,
|
||||
@@ -40,7 +43,7 @@ public class AiImageService : ApplicationService
|
||||
PremiumPackageManager premiumPackageManager,
|
||||
ModelManager modelManager,
|
||||
IGuidGenerator guidGenerator,
|
||||
IWebHostEnvironment webHostEnvironment, TokenManager tokenManager)
|
||||
IWebHostEnvironment webHostEnvironment, TokenManager tokenManager, ISqlSugarRepository<AiModelEntity> aiModelRepository)
|
||||
{
|
||||
_imageTaskRepository = imageTaskRepository;
|
||||
_backgroundJobManager = backgroundJobManager;
|
||||
@@ -50,6 +53,7 @@ public class AiImageService : ApplicationService
|
||||
_guidGenerator = guidGenerator;
|
||||
_webHostEnvironment = webHostEnvironment;
|
||||
_tokenManager = tokenManager;
|
||||
_aiModelRepository = aiModelRepository;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -224,12 +228,10 @@ public class AiImageService : ApplicationService
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 分页查询任务列表
|
||||
/// 分页查询我的任务列表
|
||||
/// </summary>
|
||||
/// <param name="input">分页查询参数</param>
|
||||
/// <returns>任务列表</returns>
|
||||
[HttpGet("ai-image/tasks")]
|
||||
public async Task<PagedResult<ImageTaskOutput>> GetTaskPageAsync([FromQuery] ImageTaskPageInput input)
|
||||
[HttpGet("ai-image/my-tasks")]
|
||||
public async Task<PagedResult<ImageTaskOutput>> GetMyTaskPageAsync([FromQuery] ImageTaskPageInput input)
|
||||
{
|
||||
var userId = CurrentUser.GetId();
|
||||
|
||||
@@ -257,6 +259,92 @@ public class AiImageService : ApplicationService
|
||||
|
||||
return new PagedResult<ImageTaskOutput>(total, items);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 分页查询图片广场(已发布的图片)
|
||||
/// </summary>
|
||||
[HttpGet("ai-image/plaza")]
|
||||
[AllowAnonymous]
|
||||
public async Task<PagedResult<ImageTaskOutput>> GetPlazaPageAsync([FromQuery] ImageTaskPageInput input)
|
||||
{
|
||||
var query = _imageTaskRepository._DbQueryable
|
||||
.Where(x => x.PublishStatus == PublishStatusEnum.Published)
|
||||
.Where(x => x.TaskStatus == TaskStatusEnum.Success)
|
||||
.OrderByDescending(x => x.CreationTime);
|
||||
|
||||
var total = await query.CountAsync();
|
||||
var items = await query
|
||||
.Skip((input.PageIndex - 1) * input.PageSize)
|
||||
.Take(input.PageSize)
|
||||
.Select(x => new ImageTaskOutput
|
||||
{
|
||||
Id = x.Id,
|
||||
Prompt = x.Prompt,
|
||||
// ReferenceImagesPrefixBase64 = x.ReferenceImagesPrefixBase64,
|
||||
// ReferenceImagesUrl = x.ReferenceImagesUrl,
|
||||
StoreUrl = x.StoreUrl,
|
||||
TaskStatus = x.TaskStatus,
|
||||
PublishStatus = x.PublishStatus,
|
||||
Categories = x.Categories,
|
||||
CreationTime = x.CreationTime
|
||||
})
|
||||
.ToListAsync();
|
||||
|
||||
return new PagedResult<ImageTaskOutput>(total, items);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 发布图片到广场
|
||||
/// </summary>
|
||||
[HttpPost("ai-image/publish")]
|
||||
public async Task PublishAsync([FromBody] PublishImageInput input)
|
||||
{
|
||||
var userId = CurrentUser.GetId();
|
||||
|
||||
var task = await _imageTaskRepository.GetFirstAsync(x => x.Id == input.TaskId && x.UserId == userId);
|
||||
if (task == null)
|
||||
{
|
||||
throw new UserFriendlyException("任务不存在或无权访问");
|
||||
}
|
||||
|
||||
if (task.TaskStatus != TaskStatusEnum.Success)
|
||||
{
|
||||
throw new UserFriendlyException("只有已完成的任务才能发布");
|
||||
}
|
||||
|
||||
if (task.PublishStatus == PublishStatusEnum.Published)
|
||||
{
|
||||
throw new UserFriendlyException("该任务已发布");
|
||||
}
|
||||
|
||||
task.PublishStatus = PublishStatusEnum.Published;
|
||||
task.Categories = input.Categories ?? new List<string>();
|
||||
|
||||
await _imageTaskRepository.UpdateAsync(task);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取图片模型列表
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost("ai-image/model")]
|
||||
public async Task<List<ModelGetListOutput>> GetModelAsync()
|
||||
{
|
||||
var output = await _aiModelRepository._DbQueryable
|
||||
.Where(x => x.ModelType == ModelTypeEnum.Image)
|
||||
.Where(x => x.ModelApiType == ModelApiTypeEnum.OpenAi)
|
||||
.OrderByDescending(x => x.OrderNum)
|
||||
.Select(x => new ModelGetListOutput
|
||||
{
|
||||
Id = x.Id,
|
||||
ModelId = x.ModelId,
|
||||
ModelName = x.Name,
|
||||
ModelDescribe = x.Description,
|
||||
Remark = x.Description,
|
||||
IsPremiumPackage = PremiumPackageConst.ModeIds.Contains(x.ModelId)
|
||||
}).ToListAsync();
|
||||
return output;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user