fix(bom): 草稿链路透传 BOM 级备注,发布后不丢失
save_draft / get_draft_detail / publish_draft 三处此前都不带 BOM 级备注, 暂存后再恢复、或草稿直接发布,备注都会丢。 同时给 /save 的权限清洗表补上顶级 remark(与子件级 remark 共用 bom_manage:remark 权限码)。 注意:运行时真正生效的草稿入口是 bom.py:521 的 /draft/save。 app/api/v1/bom_draft.py 里的 bom_draft_bp 从未在 app/__init__.py 注册, 是死代码(两份都调同一个 BomDraftService,本次两处都改以保持同步)。 实测(临时 BOM,验证后已清理): 草稿暂存带备注 → 读回 '草稿BOM级备注-测试' 草稿 → 发布 → 正式表 读回 '草稿备注-发布后应保留'
This commit is contained in:
@ -198,6 +198,8 @@ def save_bom():
|
|||||||
'version': 'bom_manage:version',
|
'version': 'bom_manage:version',
|
||||||
'is_enabled': 'bom_manage:status',
|
'is_enabled': 'bom_manage:status',
|
||||||
'bom_no': 'bom_manage:bom_no',
|
'bom_no': 'bom_manage:bom_no',
|
||||||
|
# ★ 顶级 remark = BOM 级备注,与子件级 remark 共用同一权限码
|
||||||
|
'remark': 'bom_manage:remark',
|
||||||
}
|
}
|
||||||
# 清洗顶级字段
|
# 清洗顶级字段
|
||||||
for field in list(req_data.keys()):
|
for field in list(req_data.keys()):
|
||||||
@ -531,7 +533,12 @@ def save_draft():
|
|||||||
if not parent_id:
|
if not parent_id:
|
||||||
return jsonify({'code': 400, 'msg': 'parent_id 不能为空'}), 400
|
return jsonify({'code': 400, 'msg': 'parent_id 不能为空'}), 400
|
||||||
|
|
||||||
bom_draft_no = BomDraftService.save_draft(bom_no, version, parent_id, children)
|
# ★ 这是运行时真正生效的草稿入口(bom_draft.py 的 bom_draft_bp 未在
|
||||||
|
# app/__init__.py 注册,是死代码),BOM 级备注必须在这里透传
|
||||||
|
bom_draft_no = BomDraftService.save_draft(
|
||||||
|
bom_no, version, parent_id, children,
|
||||||
|
bom_remark=data.get('remark', '') or ''
|
||||||
|
)
|
||||||
return jsonify({'code': 200, 'msg': '草稿暂存成功', 'data': {'bom_no': bom_draft_no}})
|
return jsonify({'code': 200, 'msg': '草稿暂存成功', 'data': {'bom_no': bom_draft_no}})
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -10,7 +10,7 @@ logger = logging.getLogger(__name__)
|
|||||||
class BomDraftService:
|
class BomDraftService:
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def save_draft(bom_no, version, parent_id, children):
|
def save_draft(bom_no, version, parent_id, children, bom_remark=''):
|
||||||
try:
|
try:
|
||||||
# 1. 删除旧草稿
|
# 1. 删除旧草稿
|
||||||
old = BomDraftTable.query.filter_by(bom_no=bom_no, version=version).all()
|
old = BomDraftTable.query.filter_by(bom_no=bom_no, version=version).all()
|
||||||
@ -22,7 +22,8 @@ class BomDraftService:
|
|||||||
if not children:
|
if not children:
|
||||||
dummy_draft = BomDraftTable(
|
dummy_draft = BomDraftTable(
|
||||||
bom_no=bom_no, version=version, parent_id=parent_id,
|
bom_no=bom_no, version=version, parent_id=parent_id,
|
||||||
child_id=None, dosage=0, loss_rate=0, remark=''
|
child_id=None, dosage=0, loss_rate=0, remark='',
|
||||||
|
bom_remark=bom_remark
|
||||||
)
|
)
|
||||||
db.session.add(dummy_draft)
|
db.session.add(dummy_draft)
|
||||||
else:
|
else:
|
||||||
@ -34,6 +35,7 @@ class BomDraftService:
|
|||||||
dosage=child.get('dosage', 0),
|
dosage=child.get('dosage', 0),
|
||||||
loss_rate=child.get('loss_rate', 0),
|
loss_rate=child.get('loss_rate', 0),
|
||||||
remark=child.get('remark', ''),
|
remark=child.get('remark', ''),
|
||||||
|
bom_remark=bom_remark,
|
||||||
child_bom_no=child.get('child_bom_no') or None,
|
child_bom_no=child.get('child_bom_no') or None,
|
||||||
child_bom_version=child.get('child_bom_version') or None
|
child_bom_version=child.get('child_bom_version') or None
|
||||||
)
|
)
|
||||||
@ -87,6 +89,7 @@ class BomDraftService:
|
|||||||
'parent_id': parent_id,
|
'parent_id': parent_id,
|
||||||
'parent_name': parent_material.name if parent_material else '',
|
'parent_name': parent_material.name if parent_material else '',
|
||||||
'parent_spec': parent_material.spec_model if parent_material else '',
|
'parent_spec': parent_material.spec_model if parent_material else '',
|
||||||
|
'remark': first.bom_remark or '', # ★ BOM 级备注
|
||||||
'children': children,
|
'children': children,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -125,6 +128,8 @@ class BomDraftService:
|
|||||||
'bom_no': bom_no,
|
'bom_no': bom_no,
|
||||||
'version': version,
|
'version': version,
|
||||||
'parent_id': draft['parent_id'],
|
'parent_id': draft['parent_id'],
|
||||||
|
# ★ 草稿的 BOM 级备注要带到正式表,否则发布即丢失
|
||||||
|
'remark': draft.get('remark', '') or '',
|
||||||
'children': [
|
'children': [
|
||||||
{
|
{
|
||||||
'child_id': child['child_id'],
|
'child_id': child['child_id'],
|
||||||
|
|||||||
Reference in New Issue
Block a user