bom_table 是子件明细表(一行 = 一个子件),表里只有子件级的 remark 列, BOM 级备注没有任何地方可存。前端一直有备注输入框、提交时也确实放进了 payload,但后端 save_bom 收到后无处可写,只能静默丢弃。 沿用 parent_id / is_enabled 既有的冗余写法:同一 BOM 版本的每一行存同一 份值,读取时取首行。bom_draft_table 同步加列,保证草稿暂存与发布期间 不丢失。与既有 remark(子件级)语义分离,互不干扰。 存量数据无法回填——历史上填过的备注从未入库,只能从本迁移之后开始记录。 执行方式: docker exec -i inventory_db psql -U test -d inventory_system < db_migrations/add_bom_remark.sql
47 lines
2.0 KiB
Python
47 lines
2.0 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.bom_remark 对齐,草稿暂存/发布期间不丢失。
|
|
# 上面的 remark 是**子件级**备注。占位头行(child_id IS NULL)同样携带该值。
|
|
bom_remark = db.Column(db.Text, comment='BOM级备注(父件级,冗余存于每行,读取取首行)')
|
|
|
|
# ★ 子件引用的"自制 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
|
|
) |