feat: 完成条件

This commit is contained in:
ccnetcore
2026-01-03 16:00:18 +08:00
parent a3259ad36f
commit 12878ba022
6 changed files with 95 additions and 44 deletions

View File

@@ -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; }
}

View File

@@ -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; }
}

View File

@@ -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; }
}

View File

@@ -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)

View File

@@ -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>

View File

@@ -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>