# 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//`:出货单详情(merchant 隔离) - 出货单列表序列化器增强:`sales_items` 与 `external_finished_products` 字段稳定输出(无数据也返回空数组) - 更新 `docs/shipment_api.md`:补充“查询出货单(列表/详情)”说明 - 新增 API 测试:覆盖列表/详情的商户隔离与未登录行为