from app.extensions import db, beijing_time # .material -> .base refactor checked from datetime import datetime class StocktakeDraft(db.Model): """ 盘点草稿表 临时工作台,盘点时使用,会话结束后清空 """ __tablename__ = 'stocktake_draft' id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.String(100), default='admin') # 关联的库存UUID (sku/barcode) uuid = db.Column(db.String(100)) # 实际盘点数量 quantity = db.Column(db.Numeric(19, 4), default=1) scan_time = db.Column(db.DateTime, default=beijing_time) # 盘点会话标识 (用于区分不同批次的盘点) session_id = db.Column(db.String(100)) # 关联的库存类型 (stock_buy/stock_semi/stock_product) source_table = db.Column(db.String(50)) # 关联的库存ID stock_id = db.Column(db.Integer) # 账面库存数量 (记录盘点时的账面数量) stock_qty = db.Column(db.Numeric(19, 4), default=0) # 差异数量 (实盘 - 账面, 正=盘盈, 负=盘亏) diff_qty = db.Column(db.Numeric(19, 4), default=0) # 盘点备注(可选) remark = db.Column(db.String(255), comment='盘点备注(可选)') def to_dict(self): return { 'id': self.id, 'user_id': self.user_id, 'uuid': self.uuid, 'quantity': float(self.quantity or 1), 'scan_time': self.scan_time.strftime('%Y-%m-%d %H:%M:%S') if self.scan_time else None, 'session_id': self.session_id, 'source_table': self.source_table, 'stock_id': self.stock_id, 'stock_qty': float(self.stock_qty or 0), 'diff_qty': float(self.diff_qty or 0), 'remark': self.remark } class StockAdjustment(db.Model): """ 盘盈盘亏调整表 记录盘点后的库存调整业务 """ __tablename__ = 'stock_adjustment' id = db.Column(db.Integer, primary_key=True) # 调整单号(ADJ-日期-流水) order_no = db.Column(db.String(64), unique=True, index=True, comment='调整单号') # 关联物料基础表ID base_id = db.Column(db.Integer, index=True, comment='关联物料基础表ID') # SKU sku = db.Column(db.String(128), index=True, comment='SKU') # 库位 warehouse_location = db.Column(db.String(128), comment='库位') # 类型:盘盈 / 盘亏 adjust_type = db.Column(db.String(20), comment='类型:盘盈/盘亏') # 调整数量(绝对值) adjust_quantity = db.Column(db.Integer, nullable=False, comment='调整数量(绝对值)') # 调整原因(必填) reason = db.Column(db.String(255), nullable=False, comment='调整原因(必填)') # 状态 status = db.Column(db.String(20), default='已完成', comment='状态') # 经办人 operator = db.Column(db.String(64), comment='经办人') # 创建时间 create_time = db.Column(db.DateTime, default=beijing_time) def to_dict(self): return { 'id': self.id, 'order_no': self.order_no, 'base_id': self.base_id, 'sku': self.sku, 'warehouse_location': self.warehouse_location, 'adjust_type': self.adjust_type, 'adjust_quantity': self.adjust_quantity, 'reason': self.reason, 'status': self.status, 'operator': self.operator, 'create_time': self.create_time.strftime('%Y-%m-%d %H:%M:%S') if self.create_time else None }