feat: 优化图片资源删除管理,生图任务列表管理
This commit is contained in:
@@ -30,10 +30,11 @@ server/
|
||||
│ │ ├── GET·POST /api/products 商品列表 / 新建
|
||||
│ │ ├── GET·PATCH·DELETE /api/products/{id} 详情 / 自动保存 / 删除(软删 archived | 硬删)
|
||||
│ │ └── POST /api/products/{id}/copy 复制为新变体(重置货号/图片防冲突)
|
||||
│ ├── suite.py 【326 ✅核心·Phase B】
|
||||
│ ├── suite.py 【✅核心·Phase B】
|
||||
│ │ ├── POST /api/suite/plan DeepSeek 出图方案规划(同步,数秒级)
|
||||
│ │ ├── POST /api/suite/generate 一键生成:方案展开→内存任务→串行生图→回写 generated 素材
|
||||
│ │ ├── GET /api/suites/{id} 任务状态轮询(前端 3s 一次)
|
||||
│ │ ├── POST /api/suite/generate 一键生成:方案展开→持久化子任务→Worker 生图→回写 generated 素材
|
||||
│ │ ├── GET /api/suites/{id} 任务状态轮询(前端 3s 一次)/ cancel / retry
|
||||
│ │ ├── GET /api/products/{id}/suites 恢复商品活动任务
|
||||
│ │ ├── GET /api/suites/{id}/zip 生成结果打包下载(中文文件名)
|
||||
│ │ └── POST /api/suite/image-edit 单张 AI 生图(试算页每图按钮,append=true 回写素材)
|
||||
│ ├── export.py 【121 ✅】POST /api/export/images 采集图片打包 ZIP(标题/分组/SKU规格 文件夹结构)
|
||||
@@ -47,8 +48,8 @@ server/
|
||||
│ └── ozon.py 【5 🧊冻结】空占位(远期直传重启时用)
|
||||
│
|
||||
├── services/ ──────────────────────── 业务逻辑层
|
||||
│ ├── generator.py 【494 ✅核心】三大生图 provider(doubao 火山 / tongyi 通义 / rightapi 中转)
|
||||
│ │ + asyncio.Lock 全局串行队列 + run_suite 任务执行 + 参考图解析
|
||||
│ ├── generator.py 【✅核心】生图 provider(doubao / tongyi / rightapi / pcore)
|
||||
│ │ + 可恢复的 submit/poll 推进器 + 参考图解析
|
||||
│ │ (variant 精确匹配 SKU 图 → 回退 main 首张;≤2 张转 data-URI)
|
||||
│ ├── planner.py 【227 ✅核心】DeepSeek 出图方案规划器
|
||||
│ │ (单行 JSON 解析 / kind 白名单 / count 钳 0-3 / 幻觉 SKU 丢弃绑定 / 截断修复)
|
||||
@@ -59,7 +60,9 @@ server/
|
||||
│ │ ├── gpt.py gpt-image-2「edits 保真」语义:以参考图为准,禁止按文案重造商品
|
||||
│ │ ├── google.py nano-banana「主体保持」语义:一句话钉死主体 + 自然语言指令
|
||||
│ │ └── doubao.py 豆包(复用 alibaba)
|
||||
│ ├── tasks.py 【70 ✅】套图内存任务注册表(⚠️ server 重启丢任务状态;已落盘图片不丢)
|
||||
│ ├── jobs.py 【✅核心】持久化任务仓库、租约领取、取消/失败重试、任务视图
|
||||
│ ├── job_worker.py【✅核心】独立 Worker:逐图提交/轮询外部模型、落图与回写素材
|
||||
│ ├── tasks.py 【兼容】旧内存任务执行器,活跃 API 不再使用
|
||||
│ ├── watermark.py 【122 ✅】Pillow 水印合成(图片徽章/文字,右下角,失败回退原图)
|
||||
│ ├── deepseek.py 【182 ✅】DeepSeek chat 封装(俄文文案 + 出图规划共用;JSON 容错解析)
|
||||
│ ├── models_catalog.py【84 ✅】读 config/models.yaml(俄文文案模型白名单:快/省、质量两档)
|
||||
@@ -141,7 +144,7 @@ extensions/collector 采集
|
||||
→ 试算页 /trial/{id}(studio)
|
||||
├─ 01/02/03 编辑 → PATCH /api/products/{id} 自动保存(raw/pricing/copy JSON)
|
||||
├─ 04 生图:POST /api/suite/plan(planner+deepseek)→ POST /api/suite/generate
|
||||
│ → tasks 内存任务 → generator(prompts 家族 → provider API → watermark → storage)
|
||||
│ → background_jobs / items → 独立 Worker → generator(prompts 家族 → provider API → watermark → storage)
|
||||
│ → 每张成功回写 product_assets(generated) → 前端轮询 GET /api/suites/{id} + 刷新素材
|
||||
└─ 05 登记(localStorage)→ 导出 CSV / 组合码(纯前端)
|
||||
```
|
||||
@@ -150,8 +153,8 @@ extensions/collector 采集
|
||||
|
||||
| 项 | 说明 |
|
||||
|---|---|
|
||||
| 套图任务在内存 | `tasks.py` 进程内注册表:server 重启丢任务状态(前端提示重新生成);已落盘图片不丢 |
|
||||
| 生图全局串行 | `generator.py` 的 `asyncio.Lock`:一次只跑一个生成队列(防中转限流,ISS 同款) |
|
||||
| 生图任务依赖独立 Worker | `start.command` 已自动启动 `python server/worker.py`;手动启动 uvicorn 时也必须启动 Worker |
|
||||
| 外部任务恢复 | Pcore、RightAPI、通义万相的 provider task id 会保存到数据库,重启后继续轮询原任务;同步 provider 无外部 id 时只能重试 |
|
||||
| 全部接口无鉴权 | V2.1 决策:先功能后鉴权;重新引入时从 `deps.py` + 路由依赖层加 |
|
||||
| 残留可删 | `schemas/auth.py`(无引用);`api/ozon.py`(空占位,随冻结链路保留) |
|
||||
| 密钥 | `.env`:DEEPSEEK_API_KEY(规划+文案)、RIGHTAPI_API_KEY(gpt/nano 生图)、DASHSCOPE_API_KEY(通义)、ARK_API_KEY(豆包,可选) |
|
||||
|
||||
Reference in New Issue
Block a user