feat(collect): support soft deletion of one task

This commit is contained in:
chengma
2026-07-20 10:27:21 +08:00
parent a92f1c86f4
commit 9852b1c9c1
8 changed files with 333 additions and 10 deletions
+4 -1
View File
@@ -292,12 +292,15 @@ CREATE TABLE tasks (
generated_at TEXT,
applied_at TEXT,
updated_at TEXT NOT NULL,
deleted_at TEXT, -- T-670 单条任务软删除时间;默认业务查询排除
deleted_reason TEXT, -- 软删除原因/来源
UNIQUE(batch_id, source_file_abs, source_sheet, source_row)
);
CREATE INDEX idx_tasks_batch_stage_status ON tasks(batch_id, stage, status);
CREATE INDEX idx_tasks_alias ON tasks(alias);
CREATE INDEX idx_tasks_item ON tasks(item_id);
CREATE INDEX idx_tasks_deleted_at ON tasks(deleted_at);
```
运行日志(T-504):
@@ -595,6 +598,6 @@ cmshopee/
- 别名是账号↔任务唯一关联键。
- 密码与 AI Key 本地明文保存,保存/变更时弹窗提示;UI 打码、不外传、不写日志/导出;不自动登录。
- AI 生成内容直接进入 ③ 更新候选;③ 批量确认后提交,新图本地留档 + 回写 Excel 以备追溯。
- 批次删除是软删除:写 `batches.deleted_at/deleted_reason`,不物理删除 `batches/tasks`;默认 `list_batches/list_tasks/get_task` 与 ①/②/③ 页面和执行入口都排除已删除批次。
- 批次删除是软删除:写 `batches.deleted_at/deleted_reason`,不物理删除 `batches/tasks`;默认 `list_batches/list_tasks/get_task` 与 ①/②/③ 页面和执行入口都排除已删除批次。T-670 后①还可对单条非运行任务写 `tasks.deleted_at/deleted_reason`;默认 `list_tasks/get_task` 和所有工作流候选同样排除该任务,不删除 Excel、图片或线上商品。
- 高风险模块先单独验证,再接入流水线。
- GUI 只通过 signal/slot 接收 worker 进度;禁止后台线程直接操作 Qt widget 或共享 SQLite connection。
+3 -1
View File
@@ -102,10 +102,12 @@ delete_account(alias) -> None
insert_tasks(batch_id, rows, path=None) -> int # 写输入列;rows 含 source_file_abs/source_sheet/source_row/row_key
list_tasks(batch_id=None, stage=None, status=None, alias=None, path=None, include_deleted=False) -> list[Task]
get_task(task_id, path=None, include_deleted=False) -> Task | None
# 默认排除已软删除批次;include_deleted 仅供内部诊断/测试使用
# 默认排除已软删除批次和任务;include_deleted 仅供内部诊断/测试使用
delete_batch(batch_id, reason=None, path=None) -> dict
# T-206 软删除:写 batches.deleted_at/deleted_reason,不物理删除 batches/tasks;默认业务列表和执行流程不可见/不可调用;返回任务数、committed 数和关联图片路径
delete_task(task_id, reason=None, path=None) -> dict
# T-670 软删除单条非 running 任务:写 tasks.deleted_at/deleted_reason;不删除 Excel、图片或线上商品,默认业务查询和执行入口不可见/不可调用
mark_running(task_id, phase) -> None
mark_failed(task_id, phase, error) -> None # status=failed,stage 不前进,对应 attempts+1
mark_skipped(task_id, reason) -> None # status=skipped,stage 不前进
+1
View File
@@ -81,6 +81,7 @@
- 别名未匹配账号 → 该行 skipped 并记原因,不为未匹配别名启动 Chrome。账号预检或采集中途明确进入登录页 → 该账号剩余任务整组 skipped 并记原因,结束汇总列出需补登录的账号;`NO_SESSION_COOKIE` 等不确定检测结果只写日志和诊断信息,不触发整组 skipped。`T-207` 接入后,① 采集会像③更新一样写 `run_logs/run_log_events`,并把完整脱敏 traceback 写入本地 `data/logs/`,用于定位失败卡在哪个步骤。
- 「删除批次」位于①批次筛选旁,只能对当前选中的具体批次执行,不能在“全部批次”下执行;运行中禁用。删除是软删除:写本地批次删除标记,不物理删除 DB 记录,不删除原 Excel,不回滚蝦皮。删除后该批次不再出现在①/②/③任何批次下拉、任务列表、筛选、采集、生成、更新、回写入口中。确认框必须显示任务数、已上线任务数,并提示软删除只隐藏本地批次、不会回滚线上修改。
- ①任务表右键先选中命中行并打开菜单,第一版仅提供「删除本条记录」;右键本身不弹确认框。点击后才确认商品 ID、店铺和批次;已提交线上时明确提示仅删除本地记录、不回滚蝦皮。单条删除写 `tasks.deleted_at/deleted_reason`,运行中禁用且数据库拒绝 `running` 任务;删除后该记录不再进入①/②/③列表、筛选、采集、生成、更新、回写和默认统计,不删除 Excel、本地图片或账号 Chrome 数据。
## ② AI生成
左右布局:左侧约 1/4 放提示词,右侧放筛选 + 任务列表。
+10 -7
View File
@@ -1,7 +1,7 @@
---
id: T-670
title: 导入采集单条任务软删除
status: TODO
status: DONE
phase: 7
deps: []
created: 2026-07-20
@@ -23,11 +23,11 @@ created: 2026-07-20
## 验收标准
- [ ] 右键任务行只弹菜单,点击「删除本条记录」后才弹确认框;取消不改变任何数据。
- [ ] 确认后任务被软删除,立即不再出现在①、②、③列表、筛选、采集、生成、更新、回写和默认统计中;其他同批次任务保持不变。
- [ ] 已提交线上任务的确认框说明本地删除不回滚线上;原 Excel、本地图片与任务历史字段均未被物理删除。
- [ ] 已删除或正在处理任务不能被重复删除,相关 API 事务安全且不产生半删除状态。
- [ ] `tests/test_db.py` 覆盖 schema 迁移、默认排除、单条读取和重复/运行中保护;`tests/test_gui.py` 覆盖右键选中、确认/取消、已提交提示和删除后刷新。
- [x] 右键任务行只弹菜单,点击「删除本条记录」后才弹确认框;取消不改变任何数据。
- [x] 确认后任务被软删除,立即不再出现在①、②、③列表、筛选、采集、生成、更新、回写和默认统计中;其他同批次任务保持不变。
- [x] 已提交线上任务的确认框说明本地删除不回滚线上;原 Excel、本地图片与任务历史字段均未被物理删除。
- [x] 已删除或正在处理任务不能被重复删除,相关 API 事务安全且不产生半删除状态。
- [x] `tests/test_db.py` 覆盖 schema 迁移、默认排除、单条读取和重复/运行中保护;`tests/test_gui.py` 覆盖右键选中、确认/取消、已提交提示和删除后刷新。
## 验证
@@ -48,4 +48,7 @@ git diff --check
## 执行记录
- 待实现。
- 为 `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`。