forked from erp-dev/erp
36 lines
1.5 KiB
Markdown
36 lines
1.5 KiB
Markdown
# 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`(背景、风险、修正案与规则)
|
||
|