# app/models/stock/adjustment.py from app.extensions import db, beijing_time from datetime import datetime class StockAdjustment(db.Model): """ 盘盈盘亏调整表 用于记录财务/主管手动发起的库存修正 """ __tablename__ = 'stock_adjustment' __table_args__ = {'extend_existing': True} id = db.Column(db.Integer, primary_key=True) # 单号,如 ADJ-YYYYMMDD-XXXX order_no = db.Column(db.String(50), unique=True, nullable=False, index=True) # 关联物料基础表 base_id = db.Column(db.Integer, db.ForeignKey('material_base.id')) # 关联具体库存行ID stock_id = db.Column(db.Integer) # 库存类型 (stock_buy/stock_semi/stock_product) source_table = db.Column(db.String(50)) # 物料冗余信息 sku = db.Column(db.String(100)) material_name = db.Column(db.String(255)) spec_model = db.Column(db.String(255)) # 库位 warehouse_location = db.Column(db.String(100)) # 调整类型:'profit' 盘盈 / 'loss' 盘亏 adjust_type = db.Column(db.String(20), nullable=False) # 调整数量(绝对值) adjust_quantity = db.Column(db.Numeric(19, 4), nullable=False) # 原因说明(必填) reason = db.Column(db.String(500), nullable=False) # 状态:'pending' 待处理 / 'completed' 已完成 / 'cancelled' 已取消 status = db.Column(db.String(20), default='pending') # 关联入库SKU(盘盈时填写) linked_sku = db.Column(db.String(100), comment='关联入库SKU(盘盈时填写)') # 关联出库单号(盘亏时填写) linked_outbound_no = db.Column(db.String(100), comment='关联出库单号(盘亏时填写)') # 操作人/经办人 operator = db.Column(db.String(100)) # 创建时间 create_time = db.Column(db.DateTime, default=beijing_time) # 更新时间 update_time = db.Column(db.DateTime, default=beijing_time, onupdate=beijing_time) def to_dict(self): return { 'id': self.id, 'order_no': self.order_no, 'base_id': self.base_id, 'stock_id': self.stock_id, 'source_table': self.source_table, 'sku': self.sku, 'material_name': self.material_name, 'spec_model': self.spec_model, 'warehouse_location': self.warehouse_location, 'adjust_type': self.adjust_type, 'adjust_quantity': float(self.adjust_quantity or 0), 'reason': self.reason, 'status': self.status, 'linked_sku': self.linked_sku, 'linked_outbound_no': self.linked_outbound_no, 'operator': self.operator, 'create_time': self.create_time.strftime('%Y-%m-%d %H:%M:%S') if self.create_time else None, 'update_time': self.update_time.strftime('%Y-%m-%d %H:%M:%S') if self.update_time else None, }