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

55 lines
3.9 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-670
title: 导入采集单条任务软删除
status: DONE
phase: 7
deps: []
created: 2026-07-20
---
# T-670 导入采集单条任务软删除
## 问题 / 背景
①目前只能软删除整个批次。运营遇到 Excel 中误导入的单个商品、商品失效或不再需要处理的记录时,无法只移除该行,只能保留它或删除整个批次。当前 SQLite 仅有批次级删除标记,任务行没有独立软删除语义;因此不能只在界面上隐藏一行。
## 方案
- 在①任务表右键时先选中命中行,再打开中文右键菜单;第一版仅提供「删除本条记录」。右键本身不得直接弹确认框或执行删除。
- 点击菜单项后显示确认框,明确商品 ID、店铺/别名、所属批次;若记录已提交线上,额外提示“仅删除本地记录,不会回滚蝦皮线上商品”。确认框还须说明不会删除原 Excel、本地图片或账号 Chrome 数据。
- 为 `tasks` 增加 `deleted_at/deleted_reason` 任务级软删除字段及兼容迁移;新增受事务保护的任务软删除 API。默认任务查询、单条读取、①②③筛选、采集/生成/更新候选、运行日志统计和 Excel 回写都排除已软删除任务。已删除任务不物理删除,不改原 Excel、图片路径、生成结果、提交历史或线上商品。
- 删除操作仅允许作用于当前可见的一条活动任务;①采集或回写运行中禁用入口。数据库 API 必须拒绝已软删除任务和正在处理的任务,避免并发 Worker 对已移除任务继续写入;失败时保留原数据并显示中文原因。
- 删除成功后刷新①/②/③相关列表和当前批次进度摘要,状态栏提示「已删除本地记录:商品 ID」。不提供批量删除、恢复入口或图片目录清理;软删除记录由数据库保留以便后续维护工具处理。
## 验收标准
- [x] 右键任务行只弹菜单,点击「删除本条记录」后才弹确认框;取消不改变任何数据。
- [x] 确认后任务被软删除,立即不再出现在①、②、③列表、筛选、采集、生成、更新、回写和默认统计中;其他同批次任务保持不变。
- [x] 已提交线上任务的确认框说明本地删除不回滚线上;原 Excel、本地图片与任务历史字段均未被物理删除。
- [x] 已删除或正在处理任务不能被重复删除,相关 API 事务安全且不产生半删除状态。
- [x] `tests/test_db.py` 覆盖 schema 迁移、默认排除、单条读取和重复/运行中保护;`tests/test_gui.py` 覆盖右键选中、确认/取消、已提交提示和删除后刷新。
## 验证
```bash
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 自动化选择器或线上更新逻辑。
## 执行记录
- 为 `tasks` 增加 `deleted_at/deleted_reason` 兼容迁移和索引,新增事务化 `db.delete_task()`;默认 `list_tasks/get_task` 同时排除已删除批次和已删除任务,历史商品状态迁移也跳过已删除任务。
- ①任务表新增右键「删除本条记录」菜单和确认框,已提交线上任务显示不回滚提示;成功后刷新①并通过既有回调刷新②/③。运行中入口禁用,数据库拒绝 `running` 或已删除任务。
- 更新架构、API 和路由文档,明确单条软删除不删除 Excel、图片、账号 Chrome 数据或线上商品。
- 验证通过:`py -3.10 -m unittest discover -s tests`(623 项)、`py -3.10 -m ruff check app tests main.py`、`py -3.10 -m compileall app main.py`、`git diff --check`。