forked from erp-dev/erp
2.2 KiB
2.2 KiB
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(背景、风险、修正案与规则)
Shipment 模块补充
- 补齐出货单查询接口:
GET /api/v1/shipment/shipments/:出货单列表(merchant 隔离 + LimitOffsetPagination)GET /api/v1/shipment/shipments/<id>/:出货单详情(merchant 隔离)
- 出货单列表序列化器增强:
sales_items与external_finished_products字段稳定输出(无数据也返回空数组) - ExternalFinishedProduct 增加
remark字段(可空),并同步更新相关序列化器/文档/测试(包含 shipments list 附带数据) - 更新
docs/shipment_api.md:补充“查询出货单(列表/详情)”说明 - 新增 API 测试:覆盖列表/详情的商户隔离与未登录行为