4.9 KiB
4.9 KiB
id, title, status, phase, deps, created
| id | title | status | phase | deps | created | |||
|---|---|---|---|---|---|---|---|---|
| T-666 | 历史批次商品状态重检与更新引导 | TODO | 7 |
|
2026-07-18 |
T-666 历史批次商品状态重检与更新引导
问题 / 背景
商品状态字段在 T-662a 才加入 SQLite。此前已采集、已生成新标题或新封面的历史任务,其 product_status/product_status_at 均为 NULL。T-662d 正确地将 NULL 归为状态未知并阻止③更新,避免未经状态确认的商品被提交线上;但③现有提示“回到①重新确认商品状态”无法执行,因为 CollectWorker 只处理 stage=imported,历史 stage=generated/applied 任务不会进入采集 Worker。直接把历史 NULL 批量写成 normal 没有页面事实依据,不能作为修复方案。
方案
- 在①导入采集增加独立批处理入口「重新检测商品状态」,作用于当前筛选结果中未软删除的任务,允许
imported/collected/generated/applied/failed/skipped等已有阶段参与;运行中禁用与采集相同的筛选及批处理控件。 - 点击后先显示中文确认,明确本次只打开商品详情页读取并保存状态,不读取/覆盖旧标题、旧封面、新标题、新封面,不改变
stage/status/committed、Excel、生成结果或线上商品;取消不创建 Worker、不打开 Chrome。 - 新建专用状态重检 Worker/编辑器入口,复用①已验证的账号 Chrome 就绪、登录检测、详情页打开、状态 DOM 读取、自动新建 tab 关闭和诊断日志能力;不得复用会调用
db.set_collected()的完整采集路径。 - 逐条成功时仅调用
db.set_product_status(task_id, status, note, detected_at);保留现有任务阶段、结果、标题、封面、提交标记和 Excel。执行期间及完成后刷新①/②/③表格。 - 技术失败(账号未就绪、登录失败、打开详情页失败、CDP/DOM 异常)不把任务假设为
normal,不覆盖已有有效状态快照,不改变任务主流程状态;在本轮运行日志、汇总和本地脱敏诊断中记录失败原因。只有详情页状态读取成功时才写入normal/unlisted/reviewing/unknown快照。 - ③预检继续严格拦截
unlisted/reviewing/unknown和历史 NULL;禁止新增“强制更新异常商品”或“忽略状态”选项。对原始product_status为 NULL/空的记录单独显示“尚未检测商品状态”,与已检测但结果为unknown的“状态未知”分开统计;中止文案明确引导到①「重新检测商品状态」。 - 完成重检后,状态为
normal且更新内容完整的历史生成任务可按现有③预检进入更新;未上架、审核中、真实未知仍保持拦截。①正常采集继续在首次采集时写状态,重检仅补历史/需复核任务,不记忆为全局策略。 - 运行日志使用独立
run_type=status_recheck或等价稳定标识,记录当前范围、状态分类计数、成功/失败/取消数量和示例商品 ID;不记录 Cookie、token 或页面 HTML 明文。
验收标准
- 历史
generated批次的 NULL 状态任务可在①重检,成功后只更新product_status/product_status_note/product_status_at/updated_at,新标题、新封面、阶段、结果、提交标记和 Excel 均不变。 - ③对未重检的历史 NULL 显示“尚未检测商品状态”并阻止更新;重检为正常后可进入原有标题/封面预检;未上架、审核中、真实未知仍不可更新。
- 账号、登录、商品页或 DOM 技术失败不会把记录写成正常,也不会覆盖已有有效状态快照或改变主流程状态。
- 新建 tab 的关闭、复用用户 tab 不关闭、账号就绪逻辑、取消、运行日志和诊断脱敏符合①既有约定。
- 不新增状态强制更新入口,不改 cmhub、AI生成、封面上传、Excel 回写、CDP 选择器或③真实提交逻辑。
测试与文档
tests/test_workers.py覆盖历史generated重检、仅状态字段写入、四类状态、技术失败保留旧快照、取消和运行日志汇总。tests/test_gui.py覆盖当前筛选范围、确认/取消、控件禁用、Worker 参数、③历史 NULL 与真实未知的不同中文引导、重检后可更新。- 更新
docs/routes.md、docs/04-architecture.md、docs/api.md;如新增运行日志类型,同步更新app/db.py的中文显示映射和文档合约。
验证
py -3.10 -m unittest tests.test_workers tests.test_gui tests.test_product_status
py -3.10 -m unittest discover -s tests
py -3.10 -m ruff check app tests main.py
py -3.10 -m compileall app main.py
git diff --check
非目标
- 不根据历史标题、封面、生成时间或人工猜测把 NULL 自动迁移成
normal。 - 不重新下载旧封面、不重新生成内容、不回写 Excel、不改变线上商品、不提供“跳过状态检查后更新”。
执行记录
- 待实现。