Files
KCGL/inventory-backend/app/models/inbound/stocktake.py

91 lines
3.4 KiB
Python

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
}