--- 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`。