1
0
forked from erp-dev/erp

fix: process id change when plate_order and printing_order update

This commit is contained in:
2026-01-15 16:35:46 +08:00
parent 9a367caab7
commit ea9f378de9
9 changed files with 384 additions and 8 deletions

View File

@@ -0,0 +1,35 @@
# 2026-01-15 工作日志
## 背景
发现 `PlateOrder`(以及同类的 `PrintingOrder/PrintingJob`)在 PUT/PATCH 更新时允许修改流程相关字段,可能导致:
- 业务对象的 `process` 已变更
- 但已绑定的 `BusinessObject.process` 仍指向旧流程
从而出现“流程推进/状态展示与当前流程不一致”的严重数据一致性漏洞。
---
## 今日完成
- 修复流程变更导致的 `BusinessObject` 不匹配漏洞(统一收敛到 `stateflow` 层处理)
- 约束更新行为:
- `PrintingJob` 不再允许修改 `printing_order` 绑定关系(返回 400
- `PrintingOrder` 修改 `process` 时:
- `process=None` 视为非法(返回 400
- 只要任意 job 存在“未撤销进度”(`has_started=True`),整笔订单不允许改流程(返回 400
- 若所有 jobs 均未开始,则修改订单流程时会同步为其下所有 jobs 重建并重新绑定新的 `BusinessObject`
- `PlateOrder` 修改 `process` 时:
- 若存在“未撤销进度”(`has_started=True`),不允许改流程(返回 400
- 否则重建并重新绑定新的 `BusinessObject`(旧 BO 保留不删除)
- 测试补齐/修正:
- PlateOrder修改流程会重建 BO存在有效进度时拒绝
- PrintingOrder有 job 且未开始时改流程会 relink jobs
- PrintingJob禁止变更 printing_order
---
## 文档
- 新增独立说明文档:`docs/business_object_relink_fix.md`(背景、风险、修正案与规则)