Files
cmshoppe/docs/tasks/T-593.md
T

48 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
id: T-593
title: AI工场部分导出、JPEG 转码与已存在商品目录安全处理
phase: 7
deps: [T-592]
status: DONE
created: 2026-07-11
---
## 问题 / 背景
用户可在主图/详情图未满目标数量时导出当前终选。导出要让用户选择父目录,再创建商品 ID 子目录;目标已存在不能简单合并,否则旧序号图片会残留,也不能递归清空可能包含用户文件的目录。
## 方案
- 点击导出用目录选择框选父目录,在其下创建 `<商品ID>/`。
- 按连续终选顺序实际转码并写:`商品ID_主图_1.jpg`、`商品ID_详情图_1.jpg`;质量沿用应用图片质量设置,透明图按已验证规则铺白底。
- 主/详情总数为 0 禁止;其他未满组合均允许,确认框显示 X/目标数。
- 导出前预检全部源文件和解码,使用 staging 写完整后再发布,失败不留下半套结果。
- 目标目录存在时只提供:
- 覆盖本软件导出的图片:仅匹配当前商品命名规则的旧主图/详情图文件,保留其他文件;默认仍需确认。
- 新建带时间目录:`商品ID_YYYYMMDD_HHMMSS/`。
- 取消(默认)。
- 不提供合并;成功后提示实际路径和数量,并提供打开目录。
## 验收要点
- 只主图、只详情、两类部分、满额和零图片场景均正确。
- PNG/WebP 真正输出可解码 JPEG,不是改后缀;序号与终选顺序一致。
- 已存在目录三选正确;覆盖只删除受管命名文件,用户其他文件保持字节不变。
- 某源图缺失/损坏时导出前失败,原目标不被部分改写。
- 路径穿越、非法商品 ID、只读目录、同秒时间目录冲突和文件锁有中文错误。
## 边界(不改什么)
- 不递归清空用户选择目录,不提供合并。
- 不要求达到 9/12,不上传或修改蝦皮。
- 不导出原始任务密钥、提示词、日志或 SQLite 数据。
## 执行记录
- 2026-07-11:完成 AI工场终选本地导出。
- 新增 `app/image_studio_export.py`:读取 AI工场主图/详情图终选顺序,预检源文件和图片解码,按 `商品ID_主图_1.jpg` / `商品ID_详情图_1.jpg` 连续命名转码为真正 JPEG,透明图铺白底。
- 目录安全:默认目标为用户选择父目录下的 `<商品ID>/`;目录已存在时支持“覆盖本软件导出的图片”(仅删除当前商品受管命名文件,保留用户其它文件)或“新建带时间目录”;不提供合并、不递归清空目录。
- GUI:⑥ AI工场底部新增「导出终选」按钮,允许部分导出,0 张阻断;导出通过 `ImageStudioExportWorker` 后台执行,成功后中文提示主图/详情图数量、目录,并可打开目录。
- 更新 `docs/routes.md` 和 `docs/04-architecture.md`,明确导出服务职责和不自动上传蝦皮边界。
- 验证:主工作区 targeted 测试通过;因无关默认提示词脏文件仍会影响全量 unittest,已在干净 worktree 仅套用 T-593 diff 后运行 `python -m ruff check app tests main.py`、`py -3.10 -m compileall app main.py`、`py -3.10 -m unittest discover -s tests`(367 tests)和 `git diff --check`,全部通过。