From 21c72d0d931085351a701d46d85e5546400fac87 Mon Sep 17 00:00:00 2001 From: chengma Date: Sat, 18 Jul 2026 16:19:14 +0800 Subject: [PATCH] docs(tasks): T-662b collect-all option uses red text per requirement Co-Authored-By: Claude Fable 5 --- docs/tasks/T-662b.md | 47 ++++++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/docs/tasks/T-662b.md b/docs/tasks/T-662b.md index 2a0f338..c26f7e2 100644 --- a/docs/tasks/T-662b.md +++ b/docs/tasks/T-662b.md @@ -1,43 +1,47 @@ --- id: T-662b -title: 导入采集商品状态展示、筛选与汇总 +title: 导入采集范围确认与商品状态汇总 status: TODO phase: 7 deps: [T-662a] created: 2026-07-18 --- -# T-662b 导入采集商品状态展示、筛选与汇总 +# T-662b 导入采集范围确认与商品状态汇总 ## 问题 / 背景 -T-662a 落库商品状态后,①导入采集需要让运营看见状态快照、按状态定位记录,并在本轮采集结束时知道异常商品数量。 +客户不希望非正常状态商品继续进入付费生成流程。首次导入时商品状态尚未检测,程序不能在打开详情页前知道哪些商品正常,因此①需要在每轮采集开始前让用户选择处理范围,并在页面内先检测、保存状态,再决定是否继续读取标题和封面。 ## 方案 -- ①任务表增加「商品状态」列,显示 `正常/未上架/审核中/未知`。 -- `未上架/审核中` 使用警示色,`未知` 使用中性提示色;不使用红色冒充任务失败。 -- tooltip 显示状态说明、`product_status_note` 和快照时间;note 为空时不展示空段落。 -- 现有「状态」标签改为「任务状态」,新增独立「商品状态」下拉,避免两个状态含义混淆;**「商品状态」下拉放在「任务状态」label 左边**(需求定稿位置)。 -- 商品状态筛选:`全部`(默认)/`正常`/`未上架`/`审核中`/`未知`;与批次、店铺、商品ID、任务状态叠加。 -- 选项术语与平台原文对齐:用「审核中」不用「未审核」(编辑页横幅原文「審核中」、卖家中心页签同名);未知桶叫「未知」不叫「其他」(含历史 NULL、检测失败与未识别横幅,不代表异常)。 -- ①默认「全部」的理由必须保持:新导入商品状态均为未知,若默认筛「正常」首轮采集列表为空;「筛正常再采集」是重采场景的用法。 -- **商品状态筛选与既有筛选一致,参与圈定采集候选**:采集执行当前筛选结果(`collect_old_data()` 取 `model.tasks` 的现机制不变),用户筛「正常」后点采集即只重采正常商品。本任务不改动候选圈定机制本身,也不改变执行顺序。 -- 采集结束汇总增加:异常状态总数、未上架数、审核中数、未知数;只统计本轮成功完成状态检测的结果,不把采集失败重复算入异常。 -- 运行中禁用新增筛选,结束后恢复。 +- 保持现有批次、店铺、商品ID和任务状态筛选;本任务不在①②③增加商品状态下拉框。 +- `collect_old_data()` 完成“当前筛选存在候选任务”检查后、创建 `CollectWorker` 前,弹出中文采集范围对话框: + - `只采集状态正常的商品`:默认按钮; + - `采集所有状态的商品`:红色文字(需求定稿,与②「生成所有状态的商品」样式一致); + - `取消`:关闭弹窗且不创建线程、不打开页面。 +- 弹窗说明:程序仍会逐个打开详情页检测并保存状态;“采集所有状态”包括未上架、审核中和状态未知商品,可能增加采集时间,但本步骤不消耗 AI 点数。 +- 使用稳定策略代码 `normal_only/all` 传给 Worker,不把按钮中文作为业务值;运行期间策略冻结,不记忆为全局默认,下次仍默认 `normal_only`。 +- 每条任务打开详情页后必须先检测并独立保存商品状态: + - `normal_only`:仅 `normal` 继续读取标题、下载封面;`unlisted/reviewing/unknown` 以业务略过结束,不算技术失败,不覆盖旧标题/封面; + - `all`:四种状态均继续现有标题与封面采集流程。 +- 重新采集时不使用旧状态预过滤;所有当前筛选候选都重新打开页面检测,确保状态可以从异常恢复为正常。 +- 不新增商品状态列;本轮日志和行结果使用中文说明“未上架,按本轮范围略过”“审核中,按本轮范围略过”“状态未知,按本轮范围略过”。需要查看诊断时,可从日志读取状态说明和检测时间。 +- 采集结束汇总由本轮 Worker 结果累计,不扫描当前表格或历史数据库:正常、未上架、审核中、未知、按范围略过、技术失败分别统计;同一任务只计一次主结果。 ## 验收标准 -- [ ] 历史 NULL 显示「未知」,不会崩溃或隐藏。 -- [ ] 状态列颜色、tooltip 和筛选结果正确,刷新后保持仍有效的筛选值;「商品状态」下拉位于「任务状态」左边。 -- [ ] 商品状态筛选参与采集候选:筛「正常」后点采集,未知/异常记录不进 CollectWorker;默认「全部」时新导入(未知)商品正常可采。 -- [ ] 汇总区分未上架、审核中和未知,不改变原成功/失败/略过统计。 -- [ ] 1180x760 与最小窗口下筛选栏、表格标题不重叠或截断。 -- [ ] 本任务只展示与筛选,不阻断采集、不修改 stage/status/Excel。 +- [ ] 没有候选任务时保持现有提示,不弹范围框;点击取消不创建 Worker、不写 DB、不打开 Chrome 页面。 +- [ ] 弹窗默认焦点为“只采集状态正常的商品”,回车不能触发“采集所有状态”,危险选择不会跨轮记忆。 +- [ ] `normal_only` 仍逐条检测并保存状态,仅正常商品继续采集内容;其他状态不下载封面、不覆盖旧内容、不算技术失败。 +- [ ] `all` 保存四类状态并继续现有采集流程;两种策略均不依据旧状态提前排除。 +- [ ] 本轮日志、行结果和汇总准确区分四类状态、范围略过与技术失败,取消和范围略过不影响原失败统计。 +- [ ] 不增加商品状态筛选控件,不改变采集顺序、账号并行、停止、重试、失效商品和 tab 关闭逻辑。 ## 测试与文档 -- `tests/test_gui.py` 覆盖列显示、颜色、tooltip、组合筛选、运行态和汇总。 +- `tests/test_gui.py` 覆盖无候选、默认按钮、两种策略、取消、策略不记忆、Worker 参数和汇总。 +- `tests/test_workers.py` 覆盖四类状态在两种策略下的继续/略过矩阵、状态独立落库、旧内容保留和技术失败统计。 - 更新 `docs/routes.md`、`docs/04-architecture.md` 和 `docs/api.md`。 ## 验证 @@ -52,7 +56,8 @@ git diff --check ## 非目标 -- 不改变②③行为,不自动删除异常商品,不回写商品状态到 Excel。 +- 不新增商品状态列或筛选,不自动删除异常商品,不回写商品状态到 Excel。 +- 本任务只决定是否采集标题和封面;是否进入付费生成由 T-662c 独立确认。 ## 执行记录