Files
cmshoppe/docs/tasks/T-662b.md
T

69 lines
4.8 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-662b
title: 导入采集范围确认与商品状态汇总
status: DONE
phase: 7
deps: [T-662a]
created: 2026-07-18
---
# T-662b 导入采集范围确认与商品状态汇总
## 问题 / 背景
客户不希望非正常状态商品继续进入付费生成流程。首次导入时商品状态尚未检测,程序不能在打开详情页前知道哪些商品正常,因此①需要在每轮采集开始前让用户选择处理范围,并在页面内先检测、保存状态,再决定是否继续读取标题和封面。
## 方案
- 保持现有批次、店铺、商品ID和任务状态筛选;本任务不在①②③增加商品状态下拉框。
- `collect_old_data()` 完成“当前筛选存在候选任务”检查后、创建 `CollectWorker` 前,弹出中文采集范围对话框:
- `只采集状态正常的商品`:默认按钮;
- `采集所有状态的商品`:红色文字(需求定稿,与②「生成所有状态的商品」样式一致);
- `取消`:关闭弹窗且不创建线程、不打开页面。
- 弹窗说明:程序仍会逐个打开详情页检测并保存状态;“采集所有状态”包括未上架、审核中和状态未知商品,可能增加采集时间,但本步骤不消耗 AI 点数。
- 使用稳定策略代码 `normal_only/all` 传给 Worker,不把按钮中文作为业务值;运行期间策略冻结,不记忆为全局默认,下次仍默认 `normal_only`。
- 每条任务打开详情页后必须先检测并独立保存商品状态:
- `normal_only`:仅 `normal` 继续读取标题、下载封面;`unlisted/reviewing/unknown` 以业务略过结束,不算技术失败,不覆盖旧标题/封面;
- `all`:四种状态均继续现有标题与封面采集流程。
- 重新采集时不使用旧状态预过滤;所有当前筛选候选都重新打开页面检测,确保状态可以从异常恢复为正常。
- 不新增商品状态列;本轮日志和行结果使用中文说明“未上架,按本轮范围略过”“审核中,按本轮范围略过”“状态未知,按本轮范围略过”。需要查看诊断时,可从日志读取状态说明和检测时间。
- 采集结束汇总由本轮 Worker 结果累计,不扫描当前表格或历史数据库:正常、未上架、审核中、未知、按范围略过、技术失败分别统计;同一任务只计一次主结果。
## 验收标准
- [ ] 没有候选任务时保持现有提示,不弹范围框;点击取消不创建 Worker、不写 DB、不打开 Chrome 页面。
- [ ] 弹窗默认焦点为“只采集状态正常的商品”,回车不能触发“采集所有状态”,危险选择不会跨轮记忆。
- [ ] `normal_only` 仍逐条检测并保存状态,仅正常商品继续采集内容;其他状态不下载封面、不覆盖旧内容、不算技术失败。
- [ ] `all` 保存四类状态并继续现有采集流程;两种策略均不依据旧状态提前排除。
- [ ] 本轮日志、行结果和汇总准确区分四类状态、范围略过与技术失败,取消和范围略过不影响原失败统计。
- [ ] 不增加商品状态筛选控件,不改变采集顺序、账号并行、停止、重试、失效商品和 tab 关闭逻辑。
## 测试与文档
- `tests/test_gui.py` 覆盖无候选、默认按钮、两种策略、取消、策略不记忆、Worker 参数和汇总。
- `tests/test_workers.py` 覆盖四类状态在两种策略下的继续/略过矩阵、状态独立落库、旧内容保留和技术失败统计。
- 更新 `docs/routes.md`、`docs/04-architecture.md` 和 `docs/api.md`。
## 验证
```bash
py -3.10 -m unittest tests.test_gui
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
```
## 非目标
- 不新增商品状态列或筛选,不自动删除异常商品,不回写商品状态到 Excel。
- 本任务只决定是否采集标题和封面;是否进入付费生成由 T-662c 独立确认。
## 执行记录
- 已实现采集范围确认框:默认“只采集状态正常的商品”,红色“采集所有状态的商品”,取消不启动 Worker。
- `CollectWorker` 将范围策略冻结在本轮运行日志中;逐条先读取并保存商品状态。默认范围仅采集正常商品,异常/未知商品保留旧标题和封面并按范围略过;全部范围继续采集四类状态。
- 汇总、行结果和运行日志分别统计四类状态与按范围略过数,账号预检略过统计不再把业务范围略过误报为“其他”。
- 已更新 `docs/routes.md`、`docs/04-architecture.md`、`docs/api.md`。
- 验证通过:`py -3.10 -m unittest tests.test_editor_login tests.test_workers tests.test_gui`(267 项)、`py -3.10 -m unittest discover -s tests`(605 项)、`py -3.10 -m ruff check app tests main.py`、`py -3.10 -m compileall app main.py`、`git diff --check`。