Files
cmshoppe/docs/tasks/T-620.md
T

55 lines
4.6 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-620
title: 采集略过原因可见化与结束分类汇总
phase: 2
deps: [T-563, T-515]
status: DONE
created: 2026-07-13
---
## 问题 / 背景
T-563 已修复 `NO_SESSION_COOKIE`、CDP短暂异常等不确定登录状态导致同账号任务批量“略过”的问题,但①「导入采集」列表主要显示“略过”这一结果,普通用户仍需要查看运行日志或任务详情才能判断是Excel别名未匹配,还是账号明确进入登录页。采集完成弹窗也只显示成功/失败/略过总数,无法直接判断下一步应修Excel还是补登录。
本任务只优化略过原因的可见性和本轮汇总,不改变T-563的登录容错、账号级略过条件或CDP采集流程。
## 方案
1. 为采集略过原因定义纯逻辑分类,至少覆盖:
- `alias_unmatched`:Excel别名未匹配本地账号;
- `login_required`:明确检测到Shopee登录页,需要去④补登录;
- `other`:其它保留的略过原因。
分类优先使用本轮worker已知的结构化分支,不通过模糊搜索任意日志猜测;历史任务只能读取 `last_error` 时,集中在单一helper做兼容映射。
2. ①任务列表对 `status=skipped` 的记录显示简短中文原因,例如“略过 · 别名未匹配”“略过 · 账号未登录”;单元格tooltip展示完整脱敏 `last_error`。成功、失败、待采集等现有阶段文案和语义色保持不变,不增加容易挤压商品ID/标题的宽列。
3. `CollectWorker` 在本轮执行时累计略过原因计数,summary增加结构化 `skip_reason_counts`,但不修改SQLite schema,不改变 `status=skipped`、`stage` 或现有 `last_error` 写库语义。
4. 采集结束弹窗在略过数大于0时追加分类摘要,例如:`略过3:别名未匹配2,账号未登录1`。账号未登录分类继续列出需要补登录的账号;别名未匹配分类提示检查Excel别名与④账号别名。略过为0时不增加空的原因段落。
5. 运行日志继续保留逐条原因,所有界面文案使用中文;不得展示Cookie值、密码、token、完整登录态或未脱敏异常。
## 验收要点
- 别名未匹配的任务在①列表直接显示“略过 · 别名未匹配”,tooltip可看到完整原因。
- 明确进入登录页而略过的任务显示“略过 · 账号未登录”,且结束弹窗继续提示对应账号补登录。
- 单次或连续 `NO_SESSION_COOKIE` 仍按T-563继续尝试采集,不计入略过原因,也不会显示成账号未登录。
- 同一批同时存在两类略过时,结束弹窗的分类数量之和等于本轮 `skipped` 总数。
- 历史略过记录刷新列表后也能通过集中兼容helper显示合理原因;未知原因显示“略过 · 其他原因”,不隐藏完整tooltip。
- 不改变采集任务筛选、重试、Excel回写、数据库状态、CDP选择器或账号登录判定。
## 测试要求
- 增加纯逻辑测试,覆盖三类略过原因和未知/空原因兜底。
- 更新GUI/CollectWorker测试,覆盖列表文案、tooltip、summary分类计数、结束弹窗分类摘要,以及T-563的 `NO_SESSION_COOKIE` 不略过回归。
- 运行 `python -m ruff check app tests main.py`、`py -3.10 -m compileall app main.py`、`py -3.10 -m unittest discover -s tests`、`git diff --check`。
## 边界(不改什么)
- 不修改T-563登录检测重试次数、明确未登录判据或账号级略过策略。
- 不修改CDP、Shopee选择器、采集tab前后台行为、Excel schema或SQLite schema。
- 不把“略过”改成“失败”,不自动登录,不绕过验证码、风控或权限校验。
## 执行记录
- 2026-07-13:新增 `app/collect_skip.py` 集中处理历史略过原因分类、阶段短文案、分类计数归一化和结束摘要;明确 `NO_SESSION_COOKIE` 归入未知兼容类型,不作为账号未登录依据。
- 2026-07-13:①列表阶段列显示“略过 · 别名未匹配 / 账号未登录 / 其他原因”,tooltip展示脱敏完整原因;未新增列,也未修改数据库字段。
- 2026-07-13:`CollectWorker` 按现有别名未匹配、采集前明确未登录、采集中明确掉登录三个结构化分支累计 `skip_reason_counts`;采集结束弹窗增加分类摘要和对应处理指引。
- 2026-07-13:增加纯逻辑、表格历史记录、Worker分类汇总、结束弹窗及T-563 `NO_SESSION_COOKIE` 回归测试。为隔离工作区其它未提交改动,在仅含T-620差异的干净worktree验证:`python -m ruff check app tests main.py`、`py -3.10 -m compileall app main.py`、`py -3.10 -m unittest discover -s tests`(424项通过)、`git diff --check`,结果全部通过。