# 合批原料 material_ofrom 历史排查 ## 历史现象 曾出现合批或生产流转后,批次签带显示的原料类型与实物板段棒签不一致。同一工序可能存在多条并行原料输入,因此也可能发生真实混料。该问题当时决定暂缓,只有再次出现并取得可复现样本时再继续调查。 ## 已确认的代码风险 `WMaterial.locked_get_or_create`(`apps/utils/models.py`)命中既有行时直接返回,不会应用 `defaults`。在 `apps/wpm/services.py` 的合批或流转逻辑中: - `material_ofrom`、`batch_ofrom`、`number_from` 只放在 `defaults`。 - 定位既有行的键不包含 `material_ofrom`。 因此,一旦命中相同业务键的旧行,后续不同原料流入时,`material_ofrom` 可能继续保留首次建行时的值。该字段又是单个外键,结构上无法表达混料。签带展示值来自 serializer 中的 `material_ofrom_name`。 ## 历史样本结论 当时抽样数据中的相关 `WMaterial` 行已经归零,来源记录也指向原有材料;实物板段号在当前 WPM 相关表中没有找到。由此推测,实物棒签的材料源和板段号可能来自上游拉丝或滚圆子系统,单靠当前库无法闭环证明。 ## 下次接续 再次出现时应先取得一个“实物棒签材料与批次签带材料不一致、且两者来源可在同一系统追踪”的批次样本,然后: 1. 确认实物棒签由哪个系统和表生成。 2. 用只读查询验证流转前后定位键是否命中旧行。 3. 区分真实混料、上游标签来源和 `defaults` 未更新这三种原因。 4. 在复现前不要直接修改字段结构或流转逻辑。 查询时遵守 [生产数据只读验证](project_gx_db_access.md)。