diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application.Contracts/Dtos/Chat/ImageTaskOutput.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application.Contracts/Dtos/Chat/ImageTaskOutput.cs
index aba37169..0f2e5a6f 100644
--- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application.Contracts/Dtos/Chat/ImageTaskOutput.cs
+++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application.Contracts/Dtos/Chat/ImageTaskOutput.cs
@@ -30,7 +30,7 @@ public class ImageTaskOutput
///
/// 生成图片PrefixBase64(包含前缀)
///
- public string? StorePrefixBase64 { get; set; }
+ // public string? StorePrefixBase64 { get; set; }
///
/// 生成图片URL
diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application/Services/Chat/AiImageService.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application/Services/Chat/AiImageService.cs
index 2be038a6..0297e1c0 100644
--- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application/Services/Chat/AiImageService.cs
+++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Application/Services/Chat/AiImageService.cs
@@ -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 _aiModelRepository;
public AiImageService(
ISqlSugarRepository 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 aiModelRepository)
{
_imageTaskRepository = imageTaskRepository;
_backgroundJobManager = backgroundJobManager;
@@ -50,6 +53,7 @@ public class AiImageService : ApplicationService
_guidGenerator = guidGenerator;
_webHostEnvironment = webHostEnvironment;
_tokenManager = tokenManager;
+ _aiModelRepository = aiModelRepository;
}
///
@@ -224,12 +228,10 @@ public class AiImageService : ApplicationService
}
///
- /// 分页查询任务列表
+ /// 分页查询我的任务列表
///
- /// 分页查询参数
- /// 任务列表
- [HttpGet("ai-image/tasks")]
- public async Task> GetTaskPageAsync([FromQuery] ImageTaskPageInput input)
+ [HttpGet("ai-image/my-tasks")]
+ public async Task> GetMyTaskPageAsync([FromQuery] ImageTaskPageInput input)
{
var userId = CurrentUser.GetId();
@@ -257,6 +259,92 @@ public class AiImageService : ApplicationService
return new PagedResult(total, items);
}
+
+ ///
+ /// 分页查询图片广场(已发布的图片)
+ ///
+ [HttpGet("ai-image/plaza")]
+ [AllowAnonymous]
+ public async Task> 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(total, items);
+ }
+
+ ///
+ /// 发布图片到广场
+ ///
+ [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();
+
+ await _imageTaskRepository.UpdateAsync(task);
+ }
+
+ ///
+ /// 获取图片模型列表
+ ///
+ ///
+ [HttpPost("ai-image/model")]
+ public async Task> 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;
+ }
}
///