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

3.2 KiB

id, title, status, phase, deps, created
id title status phase deps created
T-670 导入采集单条任务软删除 TODO 7
2026-07-20

T-670 导入采集单条任务软删除

问题 / 背景

①目前只能软删除整个批次。运营遇到 Excel 中误导入的单个商品、商品失效或不再需要处理的记录时,无法只移除该行,只能保留它或删除整个批次。当前 SQLite 仅有批次级删除标记,任务行没有独立软删除语义;因此不能只在界面上隐藏一行。

方案

  • 在①任务表右键时先选中命中行,再打开中文右键菜单;第一版仅提供「删除本条记录」。右键本身不得直接弹确认框或执行删除。
  • 点击菜单项后显示确认框,明确商品 ID、店铺/别名、所属批次;若记录已提交线上,额外提示“仅删除本地记录,不会回滚蝦皮线上商品”。确认框还须说明不会删除原 Excel、本地图片或账号 Chrome 数据。
  • 为 tasks 增加 deleted_at/deleted_reason 任务级软删除字段及兼容迁移;新增受事务保护的任务软删除 API。默认任务查询、单条读取、①②③筛选、采集/生成/更新候选、运行日志统计和 Excel 回写都排除已软删除任务。已删除任务不物理删除,不改原 Excel、图片路径、生成结果、提交历史或线上商品。
  • 删除操作仅允许作用于当前可见的一条活动任务;①采集或回写运行中禁用入口。数据库 API 必须拒绝已软删除任务和正在处理的任务,避免并发 Worker 对已移除任务继续写入;失败时保留原数据并显示中文原因。
  • 删除成功后刷新①/②/③相关列表和当前批次进度摘要,状态栏提示「已删除本地记录:商品 ID」。不提供批量删除、恢复入口或图片目录清理;软删除记录由数据库保留以便后续维护工具处理。

验收标准

  • 右键任务行只弹菜单,点击「删除本条记录」后才弹确认框;取消不改变任何数据。
  • 确认后任务被软删除,立即不再出现在①、②、③列表、筛选、采集、生成、更新、回写和默认统计中;其他同批次任务保持不变。
  • 已提交线上任务的确认框说明本地删除不回滚线上;原 Excel、本地图片与任务历史字段均未被物理删除。
  • 已删除或正在处理任务不能被重复删除,相关 API 事务安全且不产生半删除状态。
  • tests/test_db.py 覆盖 schema 迁移、默认排除、单条读取和重复/运行中保护;tests/test_gui.py 覆盖右键选中、确认/取消、已提交提示和删除后刷新。

验证

py -3.10 -m unittest discover -s tests -p "test_db.py"
py -3.10 -m unittest discover -s tests -p "test_gui.py"
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

非目标

  • 不物理删除 SQLite 任务、Excel、本地图片、账号目录或蝦皮线上商品。
  • 不新增批量删除、恢复页面、右键菜单的其他操作或跨批次删除。
  • 不修改商品状态检测、AI 模型、CDP/Shopee 自动化选择器或线上更新逻辑。

执行记录

  • 待实现。