封面历史对比挑选功能拆四任务:T-566 数据层(重置归档改名、 update_generated_cover 状态语义、候选枚举排序、维持批次软删); T-567 画廊查看+单选保存+原图弹窗;T-568 单任务重生+并发守卫 (含 fresh task 防跳过);T-569 上下条切换+未保存三态拦截。 含 Codex 评审修正与 title/cover committed 处理不对称的设计说明。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
3.7 KiB
3.7 KiB
id, title, phase, deps, status, created
| id | title | phase | deps | status | created | |
|---|---|---|---|---|---|---|
| T-568 | ②封面画廊单任务重新生成与并发守卫 | 7 |
|
TODO | 2026-07-09 |
问题 / 背景
T-567 只提供候选封面查看与保存。运营在对比时仍需要对当前商品单独再生成一张新封面,并在画廊中立即看到新候选。该能力涉及 AI 点数、DB 归档、任务状态和后台 worker 并发,必须单独拆出,避免 T-567 弹窗基础功能过大。
方案(改哪个文件、改成什么)
重新生成按钮
- 在 T-567 的封面画廊弹窗底部新增「重新生成」按钮。
- 点击后弹确认框:
- 文案说明将重新生成当前商品封面,可能消耗 cmhub 点数;
- 用户取消则无副作用。
- 用户确认后:
- 调用
db.reset_generated(task_id, reset_title=False, reset_cover=True),由 T-566 归档当前new_cover_path并清空封面指针; - reset 成功后必须重新
db.get_task(task_id)获取最新任务对象,不能复用弹窗打开时的旧 task(旧对象可能还带旧new_cover_path,导致generate_batch()判断无需补封面); - 启动单任务
GenerateWorker([fresh_task]),沿用当前②页面的提示词、cmhub配置、生成参数和“生成封面图片”语义,但本任务强制只补当前任务缺失封面,不重生标题; - 弹窗左下状态 label 显示“开始重新生成商品 <item_id> 的封面图片”。
- 调用
完成/失败刷新
- 单任务生成完成:
- 刷新②列表该行;
- 重新调用
list_task_cover_candidates()刷新画廊; - 新生成的规范名
_new.jpg应成为 DB 当前new_cover_path,画廊默认选中它; - 状态 label 显示“封面重新生成完成”。
- 失败:
- 保留已归档旧图;
- 列表按既有生成失败口径显示;
- 状态 label 显示失败摘要;
- 画廊继续显示历史候选,允许用户选择历史图保存。
- 若
reset_generated()因 Windows 文件占用导致归档改名失败:- 中止重新生成;
- 不启动
GenerateWorker; - 弹中文提示“请先关闭正在查看的封面图片再重试”。
并发守卫
- ②批量生成运行中时,画廊「重新生成」按钮禁用,并显示 tooltip。
- 画廊单任务重新生成运行中时,②主界面「开始生成」按钮也应禁用或阻断,避免两个
GenerateWorker同时写同一 DB/图片目录。 - 同一画廊弹窗运行中再次点击「重新生成」无效。
- 本任务不新增 cmhub cancel 接口;关闭弹窗时若单任务仍在运行,只允许隐藏/关闭视图,不强杀服务端任务,遵守 T-564 续查语义。
验收要点
- 重新生成确认取消 → 不归档、不启动 worker、不改 DB。
- 确认后先归档旧图,再用 fresh task 启动单任务生成;不会因旧 task 对象残留
new_cover_path而跳过封面生成。 - 成功后画廊出现新图并默认选中;②列表刷新为新封面路径。
- 失败后历史候选仍可选择保存。
- 归档改名失败时不清 DB 指针、不启动 worker。
- 批量生成和单任务重生互斥,不允许两个 GenerateWorker 并行。
- 验证命令:
py -3.10 -m unittest tests.test_gui tests.test_dbpython -m ruff check app tests main.pypy -3.10 -m compileall app main.pypy -3.10 -m unittest discover -s testsgit diff --check
边界(不改什么)
- 不改 T-566 数据层契约。
- 不改 cmhub submit/poll/download 逻辑。
- 不做上一条/下一条切换和未保存拦截(T-569)。
- 不改 ③更新/Excel/CDP/Shopee。
执行记录
(做完在这里写:改了什么文件、跑了什么验证命令及结果、遇到的阻塞、关键决策。)