- save_bom 落库 child_bom_no/child_bom_version;自制件必选且须属于启用未归档配方集,外购件置空;跨版本查重纳入引用版本 - get_bom_detail 改为读存储列,空则回退最新启用配方;候选/校验/回退读取均排除 is_archived - 新增 GET /bom/self-bom-versions(子件候选版本);新增 POST /bom/status 独立启停(update_enabled 清缓存) - 草稿链路 save_draft/get_draft_detail/publish 持久化引用版本 - get_bom_list/get_bom_summary 支持 status(enabled/disabled) 过滤
43 lines
1.7 KiB
Python
43 lines
1.7 KiB
Python
from app.extensions import db
|
|
|
|
|
|
class BomDraftTable(db.Model):
|
|
__tablename__ = 'bom_draft_table'
|
|
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
bom_no = db.Column(db.String(100), nullable=False, index=True, comment='BOM编号')
|
|
version = db.Column(db.String(50), nullable=False, default='V1.0', index=True, comment='版本')
|
|
parent_id = db.Column(
|
|
db.Integer,
|
|
db.ForeignKey('material_base.id', ondelete='SET NULL'),
|
|
nullable=True,
|
|
comment='父件物料ID'
|
|
)
|
|
child_id = db.Column(
|
|
db.Integer,
|
|
db.ForeignKey('material_base.id', ondelete='SET NULL'),
|
|
nullable=True,
|
|
comment='子件物料ID'
|
|
)
|
|
dosage = db.Column(db.Numeric(19, 4), comment='个数')
|
|
loss_rate = db.Column(db.Numeric(5, 2), default=0, nullable=True, comment='损耗率%')
|
|
remark = db.Column(db.Text, comment='备注')
|
|
|
|
# ★ 子件引用的"自制 BOM"版本:与 bom_table 的 child_bom_no/child_bom_version 对齐,
|
|
# 保证草稿暂存/载入期间不丢失所选版本。
|
|
child_bom_no = db.Column(db.String(100), nullable=True, index=True, comment='子件引用的自制BOM编号')
|
|
child_bom_version = db.Column(db.String(50), nullable=True, index=True, comment='子件引用的自制BOM版本')
|
|
updated_at = db.Column(db.DateTime, default=db.func.now(), onupdate=db.func.now(), comment='更新时间')
|
|
|
|
parent = db.relationship(
|
|
'MaterialBase',
|
|
foreign_keys=[parent_id],
|
|
backref='bom_draft_parents',
|
|
passive_deletes=True
|
|
)
|
|
child = db.relationship(
|
|
'MaterialBase',
|
|
foreign_keys=[child_id],
|
|
backref='bom_draft_children',
|
|
passive_deletes=True
|
|
) |