1
0
forked from erp-dev/erp
Files
erpnew/docs/2026-01-15_summary.md

1.9 KiB
Raw Blame History

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 隔离)
  • 更新 docs/shipment_api.md:补充“查询出货单(列表/详情)”说明
  • 新增 API 测试:覆盖列表/详情的商户隔离与未登录行为