Files
AIGC/demo/USER_WORKS_SYSTEM_README.md
AIGC Developer b5820d9be2 feat: 使用banana模型生成分镜图片,修复数据库列类型问题
- 修改RealAIService.submitTextToImageTask使用nano-banana/nano-banana-hd模型
- 支持根据hdMode参数选择模型(标准/高清)
- 修复数据库列类型:将result_url等字段改为TEXT类型以支持Base64图片
- 添加数据库修复SQL脚本(fix_database_columns.sql, update_database_schema.sql)
- 改进StoryboardVideoService的错误处理和空值检查
- 添加GlobalExceptionHandler全局异常处理
- 优化图片URL提取逻辑,支持url和b64_json两种格式
- 改进响应格式验证,确保data字段不为空
2025-11-05 18:18:53 +08:00

4.0 KiB

用户作品管理系统

概述

用户作品管理系统实现了任务完成后自动保存结果到"我的作品"中的功能,用户可以管理自己的视频作品,包括查看、编辑、删除、分享等操作。

系统特性

🎬 作品管理

  • 自动保存: 任务完成后自动创建作品记录
  • 作品分类: 支持文生视频和图生视频两种类型
  • 状态管理: 处理中、已完成、失败、已删除四种状态
  • 软删除: 支持作品软删除,保留数据完整性

📊 作品统计

  • 浏览统计: 记录作品浏览次数
  • 点赞功能: 支持作品点赞
  • 下载统计: 记录作品下载次数
  • 积分记录: 记录作品消耗的积分

🔍 作品发现

  • 公开作品: 支持作品公开分享
  • 搜索功能: 根据提示词搜索作品
  • 标签系统: 支持标签分类和搜索
  • 热门排行: 按浏览次数排序的热门作品

API接口

我的作品管理

获取我的作品列表

GET /api/works/my-works?page=0&size=10
Authorization: Bearer <token>

获取作品详情

GET /api/works/{workId}
Authorization: Bearer <token>

更新作品信息

PUT /api/works/{workId}
Authorization: Bearer <token>
Content-Type: application/json

删除作品

DELETE /api/works/{workId}
Authorization: Bearer <token>

作品互动

点赞作品

POST /api/works/{workId}/like
Authorization: Bearer <token>

下载作品

POST /api/works/{workId}/download
Authorization: Bearer <token>

公开作品浏览

获取公开作品列表

GET /api/works/public?page=0&size=10&type=TEXT_TO_VIDEO&sort=popular

搜索公开作品

GET /api/works/search?keyword=小猫&page=0&size=10

根据标签搜索作品

GET /api/works/tag/可爱?page=0&size=10

工作流程

1. 任务完成流程

任务完成 → 扣除积分 → 创建作品 → 更新任务状态

2. 作品创建流程

获取任务信息 → 提取作品数据 → 生成作品标题 → 保存作品记录

3. 作品管理流程

查看作品 → 编辑信息 → 设置公开 → 分享作品

集成说明

TaskQueueService 集成

TaskQueueService.updateTaskAsCompleted() 方法中集成了作品创建:

private void updateTaskAsCompleted(TaskQueue taskQueue, String resultUrl) {
    // 扣除冻结的积分
    userService.deductFrozenPoints(taskQueue.getTaskId());

    // 创建用户作品
    try {
        UserWork work = userWorkService.createWorkFromTask(taskQueue.getTaskId(), resultUrl);
        logger.info("创建用户作品成功: {}, 任务ID: {}", work.getId(), taskQueue.getTaskId());
    } catch (Exception workException) {
        logger.error("创建用户作品失败: {}", taskQueue.getTaskId(), workException);
        // 作品创建失败不影响任务完成状态
    }

    // 更新原始任务状态
    updateOriginalTaskStatus(taskQueue, "COMPLETED", resultUrl, null);
}

前端集成示例

获取我的作品列表

const getMyWorks = async (page = 0, size = 10) => {
  const response = await fetch(`/api/works/my-works?page=${page}&size=${size}`, {
    headers: {
      'Authorization': `Bearer ${token}`
    }
  });
  const data = await response.json();
  return data;
};

更新作品信息

const updateWork = async (workId, updateData) => {
  const response = await fetch(`/api/works/${workId}`, {
    method: 'PUT',
    headers: {
      'Authorization': `Bearer ${token}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify(updateData)
  });
  const data = await response.json();
  return data;
};

注意事项

  1. 数据一致性: 确保任务状态与作品状态一致
  2. 异常处理: 作品创建失败不影响任务完成
  3. 存储管理: 定期清理过期的失败作品
  4. 性能监控: 监控作品查询和统计性能
  5. 用户体验: 提供友好的作品管理界面