fix(t243): allow deleting unreferenced procurement drafts

This commit is contained in:
QiuSW
2026-07-29 16:45:25 +08:00
parent 62eee74a70
commit 24eef29076
12 changed files with 504 additions and 102 deletions
+23 -11
View File
@@ -4,7 +4,7 @@ title: 允许货运删除清理未完成采购需求草稿
phase: 2
deps:
- T-242
status: TODO
status: DONE
created: 2026-07-29
context_ref: e5f403f
work_branch: null
@@ -55,16 +55,16 @@ T-242 把任意 `procurement_requests` 记录都视为“已进入采购流程
## 验收要点
- [ ] 仅含 `NEEDS_IMAGE` 且无参考图/任务的货运单可删除,草稿需求、商品和订单同事务消失。
- [ ] `BLOCKED` 及无参考图的 `SOURCE_CHANGED` 草稿遵守相同删除规则。
- [ ] 已绑定参考图但未生成任务返回 409 `FREIGHT_ORDER_HAS_REFERENCE`,全部记录不变化。
- [ ] 已生成采购任务返回 409 `FREIGHT_ORDER_HAS_PURCHASE_TASK`,全部采购链路不变化。
- [ ] 同单同时存在两类保护关联时优先报告已生成采购任务。
- [ ] 未知或不一致需求不能被静默删除。
- [ ] 采购任务列表仍只展示 `purchase_tasks`;货运详情准确说明需求尚未生成任务。
- [ ] Web 成功、参考图冲突和任务冲突反馈明确,CSRF、确认和响应式交互不回归。
- [ ] 删除不影响 ERP、同步历史、水位和 T-242 图片文件清理。
- [ ] 标准 Go 测试、race、vet 和三个入口构建通过。
- [x] 仅含 `NEEDS_IMAGE` 且无参考图/任务的货运单可删除,草稿需求、商品和订单同事务消失。
- [x] `BLOCKED` 及无参考图的 `SOURCE_CHANGED` 草稿遵守相同删除规则。
- [x] 已绑定参考图但未生成任务返回 409 `FREIGHT_ORDER_HAS_REFERENCE`,全部记录不变化。
- [x] 已生成采购任务返回 409 `FREIGHT_ORDER_HAS_PURCHASE_TASK`,全部采购链路不变化。
- [x] 同单同时存在两类保护关联时优先报告已生成采购任务。
- [x] 未知或不一致需求不能被静默删除。
- [x] 采购任务列表仍只展示 `purchase_tasks`;货运详情准确说明需求尚未生成任务。
- [x] Web 成功、参考图冲突和任务冲突反馈明确,CSRF、确认和响应式交互不回归。
- [x] 删除不影响 ERP、同步历史、水位和 T-242 图片文件清理。
- [x] 标准 Go 测试、race、vet 和三个入口构建通过。
## 边界
@@ -79,3 +79,15 @@ T-242 把任意 `procurement_requests` 记录都视为“已进入采购流程
- 2026-07-29:根据真实本地状态审计确认,删除冲突来自 `NEEDS_IMAGE` 采购需求,且其
`reference_asset_id`、`purchase_task_id` 均为空;采购任务列表只查 `purchase_tasks`
的行为正确。本任务修复保护边界和反馈,不改变任务列表定义。
- 2026-07-29:SQLite immediate 事务先检查 `purchase_task_id`,再检查
`reference_asset_id`;两者均不存在时只删除 `BLOCKED`、`NEEDS_IMAGE`、
`SOURCE_CHANGED` 草稿,并在删除商品前确认没有其他需求残留。任务冲突优先于参考图
冲突,未来或不一致状态保持 fail-closed;无需 schema migration。
- 2026-07-29:Admin API 保持原 DELETE 路由和幂等 204,保护分支分别返回
`FREIGHT_ORDER_HAS_REFERENCE`、`FREIGHT_ORDER_HAS_PURCHASE_TASK`。SSR 使用独立提示,
详情把 `NEEDS_IMAGE` 显示为“需要参考图,尚未生成任务”,确认文案明确草稿会被清理。
- 2026-07-29:仓储测试覆盖三种草稿状态、参考图保护、任务保护和任务优先级;usecase、
API、SSR 测试覆盖稳定错误映射及实际 `NEEDS_IMAGE` 删除。`go test ./...`、
`go test -race ./...`、`go vet ./...` 和 API、authctl、migrate 三个入口构建通过。
Playwright 连接脱敏隔离 Gin/SQLite,以桌面和 390×844 验证状态说明、确认弹窗、真实
登录及删除后空列表,控制台无警告或错误;未访问顺运宝 ERP。