fix(bom): BOM 详情查询改为 LEFT JOIN,子件物料被删后仍返回父件结构

- get_bom_detail 使用 outerjoin 替代 join
- 子件物料被删除后 child_name 显示 [已删除物料] 而非误报 BOM 不存在
- 修复按 BOM 出库时因子件删除导致 404 BOM 不存在
This commit is contained in:
yueli
2026-08-31 10:28:22 +08:00
parent 36e9f500aa
commit 3a07f1a272

View File

@ -293,7 +293,8 @@ class BomService:
BomTable, BomTable,
MaterialBase.name.label('child_name'), MaterialBase.name.label('child_name'),
MaterialBase.spec_model.label('child_spec') MaterialBase.spec_model.label('child_spec')
).join( ).outerjoin(
# ★ LEFT JOIN子件物料被删除后仍返回父件 BOM 结构,避免误报 "BOM 不存在"
MaterialBase, BomTable.child_id == MaterialBase.id MaterialBase, BomTable.child_id == MaterialBase.id
).filter( ).filter(
BomTable.bom_no == bom_no BomTable.bom_no == bom_no
@ -322,7 +323,7 @@ class BomService:
for bom, child_name, child_spec in rows: for bom, child_name, child_spec in rows:
children.append({ children.append({
'child_id': bom.child_id, 'child_id': bom.child_id,
'child_name': child_name, 'child_name': child_name or '[已删除物料]',
'child_spec': child_spec or '', 'child_spec': child_spec or '',
'dosage': float(bom.dosage) if bom.dosage else 0.0, 'dosage': float(bom.dosage) if bom.dosage else 0.0,
'remark': bom.remark or '' 'remark': bom.remark or ''