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 )