feat: 完成条件
This commit is contained in:
@@ -1,24 +1,26 @@
|
||||
using Volo.Abp.Application.Dtos;
|
||||
using Yi.Framework.AiHub.Domain.Shared.Enums;
|
||||
using Yi.Framework.Ddd.Application.Contracts;
|
||||
|
||||
namespace Yi.Framework.AiHub.Application.Contracts.Dtos.Chat;
|
||||
|
||||
/// <summary>
|
||||
/// 图片任务分页查询输入
|
||||
/// </summary>
|
||||
public class ImageTaskPageInput
|
||||
public class ImageMyTaskPageInput: PagedAllResultRequestDto
|
||||
{
|
||||
/// <summary>
|
||||
/// 页码(从1开始)
|
||||
/// 提示词
|
||||
/// </summary>
|
||||
public int PageIndex { get; set; } = 1;
|
||||
|
||||
/// <summary>
|
||||
/// 每页数量
|
||||
/// </summary>
|
||||
public int PageSize { get; set; } = 10;
|
||||
|
||||
public string? Prompt { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 任务状态筛选(可选)
|
||||
/// </summary>
|
||||
public TaskStatusEnum? TaskStatus { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 发布状态
|
||||
/// </summary>
|
||||
public PublishStatusEnum? PublishStatus { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
using Volo.Abp.Application.Dtos;
|
||||
using Yi.Framework.AiHub.Domain.Shared.Enums;
|
||||
using Yi.Framework.Ddd.Application.Contracts;
|
||||
|
||||
namespace Yi.Framework.AiHub.Application.Contracts.Dtos.Chat;
|
||||
|
||||
/// <summary>
|
||||
/// 图片任务分页查询输入
|
||||
/// </summary>
|
||||
public class ImagePlazaPageInput: PagedAllResultRequestDto
|
||||
{
|
||||
/// <summary>
|
||||
/// 分类
|
||||
/// </summary>
|
||||
public string? Categories { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 提示词
|
||||
/// </summary>
|
||||
public string? Prompt { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 任务状态筛选(可选)
|
||||
/// </summary>
|
||||
public TaskStatusEnum? TaskStatus { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 用户名
|
||||
/// </summary>
|
||||
public string? UserName{ get; set; }
|
||||
}
|
||||
@@ -61,4 +61,14 @@ public class ImageTaskOutput
|
||||
/// 错误信息
|
||||
/// </summary>
|
||||
public string? ErrorInfo { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 用户名称
|
||||
/// </summary>
|
||||
public string? UserName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 用户名称Id
|
||||
/// </summary>
|
||||
public Guid UserId { get; set; }
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ public class ImageGenerationJob : AsyncBackgroundJob<ImageGenerationJobArgs>, IT
|
||||
// 构建 Gemini API 请求对象
|
||||
var parts = new List<object>
|
||||
{
|
||||
new { role="user",text = task.Prompt }
|
||||
new { text = task.Prompt }
|
||||
};
|
||||
|
||||
// 添加参考图(如果有)
|
||||
@@ -64,7 +64,7 @@ public class ImageGenerationJob : AsyncBackgroundJob<ImageGenerationJobArgs>, IT
|
||||
{
|
||||
contents = new[]
|
||||
{
|
||||
new { parts }
|
||||
new { role = "user", parts }
|
||||
}
|
||||
};
|
||||
|
||||
@@ -77,9 +77,9 @@ public class ImageGenerationJob : AsyncBackgroundJob<ImageGenerationJobArgs>, IT
|
||||
task.ModelId,
|
||||
request,
|
||||
task.UserId,
|
||||
tokenId:task.TokenId);
|
||||
tokenId: task.TokenId);
|
||||
|
||||
|
||||
|
||||
_logger.LogInformation("图片生成任务完成,TaskId: {TaskId}", args.TaskId);
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
||||
@@ -3,6 +3,7 @@ using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using SqlSugar;
|
||||
using Volo.Abp;
|
||||
using Volo.Abp.Application.Services;
|
||||
using Volo.Abp.BackgroundJobs;
|
||||
@@ -104,6 +105,7 @@ public class AiImageService : ApplicationService
|
||||
ReferenceImagesUrl = new List<string>(),
|
||||
TaskStatus = TaskStatusEnum.Processing,
|
||||
UserId = userId,
|
||||
UserName = CurrentUser.UserName,
|
||||
TokenId = input.TokenId,
|
||||
ModelId = input.ModelId
|
||||
};
|
||||
@@ -147,7 +149,6 @@ public class AiImageService : ApplicationService
|
||||
Categories = task.Categories,
|
||||
CreationTime = task.CreationTime,
|
||||
ErrorInfo = task.ErrorInfo,
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
@@ -238,26 +239,23 @@ public class AiImageService : ApplicationService
|
||||
/// 分页查询我的任务列表
|
||||
/// </summary>
|
||||
[HttpGet("ai-image/my-tasks")]
|
||||
public async Task<PagedResult<ImageTaskOutput>> GetMyTaskPageAsync([FromQuery] ImageTaskPageInput input)
|
||||
public async Task<PagedResult<ImageTaskOutput>> GetMyTaskPageAsync([FromQuery] ImageMyTaskPageInput input)
|
||||
{
|
||||
var userId = CurrentUser.GetId();
|
||||
|
||||
var query = _imageTaskRepository._DbQueryable
|
||||
RefAsync<int> total = 0;
|
||||
var output = await _imageTaskRepository._DbQueryable
|
||||
.Where(x => x.UserId == userId)
|
||||
.WhereIF(input.TaskStatus.HasValue, x => x.TaskStatus == input.TaskStatus!.Value)
|
||||
.OrderByDescending(x => x.CreationTime);
|
||||
|
||||
var total = await query.CountAsync();
|
||||
var items = await query
|
||||
.Skip((input.PageIndex - 1) * input.PageSize)
|
||||
.Take(input.PageSize)
|
||||
.WhereIF(input.TaskStatus is not null, x => x.TaskStatus == input.TaskStatus)
|
||||
.WhereIF(!string.IsNullOrWhiteSpace(input.Prompt), x => x.Prompt.Contains(input.Prompt))
|
||||
.WhereIF(input.PublishStatus is not null, x => x.PublishStatus == input.PublishStatus)
|
||||
.WhereIF(input.StartTime is not null && input.EndTime is not null,
|
||||
x => x.CreationTime >= input.StartTime && x.CreationTime <= input.EndTime)
|
||||
.OrderByDescending(x => x.CreationTime)
|
||||
.Select(x => new ImageTaskOutput
|
||||
{
|
||||
Id = x.Id,
|
||||
Prompt = x.Prompt,
|
||||
// ReferenceImagesBase64 = x.ReferenceImagesBase64,
|
||||
// ReferenceImagesUrl = x.ReferenceImagesUrl,
|
||||
// StoreBase64 = x.StoreBase64,
|
||||
StoreUrl = x.StoreUrl,
|
||||
TaskStatus = x.TaskStatus,
|
||||
PublishStatus = x.PublishStatus,
|
||||
@@ -265,9 +263,10 @@ public class AiImageService : ApplicationService
|
||||
CreationTime = x.CreationTime,
|
||||
ErrorInfo = x.ErrorInfo
|
||||
})
|
||||
.ToListAsync();
|
||||
.ToPageListAsync(input.SkipCount, input.MaxResultCount, total);
|
||||
|
||||
return new PagedResult<ImageTaskOutput>(total, items);
|
||||
|
||||
return new PagedResult<ImageTaskOutput>(total, output);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -275,32 +274,36 @@ public class AiImageService : ApplicationService
|
||||
/// </summary>
|
||||
[HttpGet("ai-image/plaza")]
|
||||
[AllowAnonymous]
|
||||
public async Task<PagedResult<ImageTaskOutput>> GetPlazaPageAsync([FromQuery] ImageTaskPageInput input)
|
||||
public async Task<PagedResult<ImageTaskOutput>> GetPlazaPageAsync([FromQuery] ImagePlazaPageInput input)
|
||||
{
|
||||
var query = _imageTaskRepository._DbQueryable
|
||||
RefAsync<int> total = 0;
|
||||
var output = await _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)
|
||||
.WhereIF(input.TaskStatus is not null, x => x.TaskStatus == input.TaskStatus)
|
||||
.WhereIF(!string.IsNullOrWhiteSpace(input.Prompt), x => x.Prompt.Contains(input.Prompt))
|
||||
.WhereIF(!string.IsNullOrWhiteSpace(input.Categories), x => SqlFunc.JsonLike(x.Categories, input.Categories))
|
||||
.WhereIF(!string.IsNullOrWhiteSpace(input.UserName),x=>x.UserName.Contains(input.UserName) )
|
||||
.WhereIF(input.StartTime is not null && input.EndTime is not null,
|
||||
x => x.CreationTime >= input.StartTime && x.CreationTime <= input.EndTime)
|
||||
.OrderByDescending(x => x.CreationTime)
|
||||
.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
|
||||
CreationTime = x.CreationTime,
|
||||
UserName = x.UserName,
|
||||
UserId = x.UserId,
|
||||
})
|
||||
.ToListAsync();
|
||||
.ToPageListAsync(input.SkipCount, input.MaxResultCount, total);
|
||||
;
|
||||
|
||||
return new PagedResult<ImageTaskOutput>(total, items);
|
||||
|
||||
return new PagedResult<ImageTaskOutput>(total, output);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -16,16 +16,16 @@ public class ImageStoreTaskAggregateRoot : FullAuditedAggregateRoot<Guid>
|
||||
/// <summary>
|
||||
/// 参考图PrefixBase64(带前缀,如 data:image/png;base64,xxx)
|
||||
/// </summary>
|
||||
[SugarColumn(IsJson = true,ColumnDataType = StaticConfig.CodeFirst_BigString)]
|
||||
[SugarColumn(IsJson = true, ColumnDataType = StaticConfig.CodeFirst_BigString)]
|
||||
public List<string> ReferenceImagesPrefixBase64 { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 参考图url
|
||||
/// </summary>
|
||||
[SugarColumn(IsJson = true)]
|
||||
public List<string> ReferenceImagesUrl { get; set; }
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 图片绝对路径
|
||||
/// </summary>
|
||||
@@ -41,6 +41,11 @@ public class ImageStoreTaskAggregateRoot : FullAuditedAggregateRoot<Guid>
|
||||
/// </summary>
|
||||
public Guid UserId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 用户名称
|
||||
/// </summary>
|
||||
public string? UserName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 模型id
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user