4.3 KiB
4.3 KiB
108 安全移除勾选的本地任务记录
- 类型:需求
- 父级大工单:#1
- 所属 MVP / 版本:#2
- 状态:已完成,用户验收通过
- 日期:2026-08-10
- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/108
背景与目标
PDD 任务表已经支持批量勾选,但没有移除本地记录的安全入口。直接物理删除任务会 连带删除执行记录和 Outbox,破坏审计、防重复领取和采购恢复依据。
本任务增加“删除”按钮。删除只让符合条件的终态任务不再显示,数据库中的任务、 执行记录和上报历史仍永久保留。
最终方案
- SQLite 升级到 v4,为
pdd_tasks增加可空的removed_at字段和可见列表索引。 - 普通任务列表和计数固定查询
removed_at IS NULL;按任务编号读取详情和唯一约束 不变,已移除任务不会被当成新任务再次领取。 - Repository 在一个事务中校验整批稳定任务编号。只允许
succeeded、failed、cancelled,要求所有 Outbox 已发送,并拒绝任何进入不可逆阶段的执行记录。 任一任务不满足条件时整批回滚。 - 任务页在“重新上报”右边增加 Fluent“删除”按钮。确认框显示准确数量,默认聚焦 “暂不删除”;取消、关闭或按 Escape 都不执行删除。
- 数据库操作由
QObject + moveToThreadWorker 执行。成功后清除对应勾选、刷新 当前筛选并更新底部状态;失败时保留勾选并显示中文原因。 - 删除过程不调用 Admin,不检查或操作 Android,也不修改任务状态和 Outbox 状态。
实现与建单方案一致。
改了哪些
client/src/db_schema.py:增加 SQLite v4 软删除迁移和索引。client/src/task_repository.py:增加批量原子安全校验与软删除,列表默认排除已移除任务。client/src/pdd_ui.py:增加删除按钮、信号、勾选和忙碌状态。client/src/pdd_ui_event.py:增加确认交互、后台 Worker、结果反馈和关闭收尾。client/test/test_db.py:验证首次建库和 v3 到 v4 迁移。client/test/test_task_repository.py:验证软删除、审计保留、全有或全无、Outbox 和不可逆门禁。client/test/test_pdd_ui.py:验证按钮布局、启用条件和稳定任务编号信号。client/test/test_pdd_ui_event.py:验证取消、成功刷新、混合批量拒绝及无外部调用。docs/client/03-data-model.md:记录removed_at、默认查询和安全校验规则。docs/client/05-ui-specification.md:记录删除按钮、确认框和批量交互规范。
验收结果
| 验收标准 | 结果 |
|---|---|
| 未勾选时删除禁用,勾选后启用且位于重新上报右边 | 通过 |
| 确认框包含准确数量,安全取消默认聚焦,取消不修改数据 | 通过 |
| 合法终态任务软删除后不再出现在普通列表 | 通过 |
| 任务、执行记录、Outbox 和任务编号唯一性完整保留 | 通过 |
| 非终态、未完成 Outbox 和不可逆任务给出中文原因并拒绝 | 通过 |
| 混合批量采用全有或全无事务 | 通过 |
| 不请求 Admin、不操作 Android、不修改业务状态 | 通过 |
| 首次建库、上一版本迁移和 Client 全量测试通过 | 通过 |
测试
- 执行的命令:
C:/Python310/python.exe -m pytest test/test_db.py test/test_task_repository.py test/test_pdd_ui.py test/test_pdd_ui_event.py -qC:/Python310/python.exe -m pytest test -qC:/Python310/python.exe -m py_compile src/db_schema.py src/task_repository.py src/pdd_ui.py src/pdd_ui_event.py- 设置
QT_QPA_PLATFORM=offscreen后创建并关闭MainWindow的离屏冒烟命令 git diff --check
- 结果:专项测试 80 项通过;Client 全量测试 304 项通过;语法和差异检查通过;
离屏冒烟输出
OK。现有 PyQt/qfluentwidgets 弃用警告和离屏字体提示不影响结果。 - 没验证到的部分:未使用真实历史数据库手工升级后重启 Client;未人工检查 Windows 不同 DPI、浅色、深色和高对比度下确认框的视觉位置;未用鼠标实际点击 对话框关闭按钮和按 Escape(自动化测试覆盖了取消返回路径和安全默认焦点)。
相关提交
b272107feat: 安全移除本地任务记录 (#108)