69 lines
4.8 KiB
Markdown
69 lines
4.8 KiB
Markdown
---
|
||
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`。
|