2026-01-28 08:54:11 +08:00
|
|
|
|
# app/models/material.py
|
2026-01-26 13:47:53 +08:00
|
|
|
|
from app.extensions import db
|
2026-01-26 17:00:12 +08:00
|
|
|
|
from datetime import datetime
|
|
|
|
|
|
|
2026-01-28 08:54:11 +08:00
|
|
|
|
|
2026-01-26 13:47:53 +08:00
|
|
|
|
class MaterialBase(db.Model):
|
2026-01-28 08:54:11 +08:00
|
|
|
|
"""
|
|
|
|
|
|
基础信息表模型
|
|
|
|
|
|
对应数据库表: material_base
|
|
|
|
|
|
"""
|
2026-01-26 13:47:53 +08:00
|
|
|
|
__tablename__ = 'material_base'
|
|
|
|
|
|
|
2026-01-28 17:44:39 +08:00
|
|
|
|
# 1. 基础字段 (保持不变)
|
2026-01-26 13:47:53 +08:00
|
|
|
|
id = db.Column(db.Integer, primary_key=True)
|
2026-01-28 08:54:11 +08:00
|
|
|
|
name = db.Column(db.String(255), nullable=False, comment='基础信息名称')
|
2026-01-28 09:13:20 +08:00
|
|
|
|
|
|
|
|
|
|
# 类别 (对应 SQL: category)
|
|
|
|
|
|
category = db.Column(db.String(100), comment='类别')
|
|
|
|
|
|
|
|
|
|
|
|
# 类型 (对应 SQL: material_type) -> 前端 prop="type"
|
|
|
|
|
|
material_type = db.Column(db.String(100), comment='类型')
|
|
|
|
|
|
|
|
|
|
|
|
# 规格型号 (对应 SQL: spec_model) -> 前端 prop="spec"
|
|
|
|
|
|
spec_model = db.Column(db.String(255), comment='规格型号')
|
|
|
|
|
|
|
2026-01-28 08:54:11 +08:00
|
|
|
|
unit = db.Column(db.String(50), comment='计量单位')
|
|
|
|
|
|
|
2026-01-28 09:13:20 +08:00
|
|
|
|
# 可见等级
|
2026-01-28 08:54:11 +08:00
|
|
|
|
visibility_level = db.Column(db.Integer, default=0, comment='信息可见等级')
|
|
|
|
|
|
|
2026-01-28 09:13:20 +08:00
|
|
|
|
# 链接与图片
|
|
|
|
|
|
manual_link = db.Column(db.Text, comment='通用说明书链接')
|
|
|
|
|
|
product_image = db.Column(db.Text, comment='通用产品图链接')
|
2026-01-28 08:54:11 +08:00
|
|
|
|
|
2026-01-28 17:44:39 +08:00
|
|
|
|
# 启用状态
|
2026-01-28 08:54:11 +08:00
|
|
|
|
is_enabled = db.Column(db.Boolean, default=True, comment='是否启用')
|
|
|
|
|
|
|
2026-01-28 09:13:20 +08:00
|
|
|
|
# ============================================================
|
2026-01-28 17:44:39 +08:00
|
|
|
|
# 时间字段 (保持你原本的注释状态,以免报错)
|
2026-01-28 09:13:20 +08:00
|
|
|
|
# ============================================================
|
|
|
|
|
|
# create_time = db.Column(db.DateTime, default=datetime.utcnow)
|
|
|
|
|
|
# update_time = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
2026-01-26 17:00:12 +08:00
|
|
|
|
|
2026-01-28 17:44:39 +08:00
|
|
|
|
# ============================================================
|
|
|
|
|
|
# 关联关系区域 (修改重点)
|
|
|
|
|
|
# ============================================================
|
|
|
|
|
|
|
|
|
|
|
|
# 1. 关联采购库存 (StockBuy) - 保持不变
|
|
|
|
|
|
# 注意:确保 app/models/inbound/buy.py 中的 StockBuy 定义了 back_populates='material'
|
2026-01-26 17:00:12 +08:00
|
|
|
|
stock_buys = db.relationship('StockBuy', back_populates='material', lazy='dynamic')
|
|
|
|
|
|
|
2026-01-28 17:44:39 +08:00
|
|
|
|
# 2. 【新增】关联半成品库存 (StockSemi)
|
|
|
|
|
|
# 注意:确保 app/models/inbound/semi.py 中的 StockSemi 定义了 back_populates='material'
|
|
|
|
|
|
# 这样以后可以通过 material.stock_semis 来访问该物料下的所有半成品库存记录
|
|
|
|
|
|
stock_semis = db.relationship('StockSemi', back_populates='material', lazy='dynamic')
|
|
|
|
|
|
|
2026-01-26 17:00:12 +08:00
|
|
|
|
def to_dict(self):
|
2026-01-28 08:54:11 +08:00
|
|
|
|
"""
|
|
|
|
|
|
序列化方法:将模型转换为字典,供API返回JSON使用
|
|
|
|
|
|
"""
|
2026-01-26 17:00:12 +08:00
|
|
|
|
return {
|
|
|
|
|
|
'id': self.id,
|
|
|
|
|
|
'name': self.name,
|
|
|
|
|
|
'category': self.category,
|
2026-01-28 08:54:11 +08:00
|
|
|
|
|
2026-01-28 09:13:20 +08:00
|
|
|
|
# =========================================
|
2026-01-28 17:44:39 +08:00
|
|
|
|
# 关键映射区 (保持不变)
|
2026-01-28 09:13:20 +08:00
|
|
|
|
# =========================================
|
|
|
|
|
|
# 数据库叫 material_type -> 前端叫 type
|
|
|
|
|
|
'type': self.material_type,
|
|
|
|
|
|
|
|
|
|
|
|
# 数据库叫 spec_model -> 前端叫 spec
|
|
|
|
|
|
'spec': self.spec_model,
|
|
|
|
|
|
|
2026-01-28 08:54:11 +08:00
|
|
|
|
'unit': self.unit,
|
|
|
|
|
|
|
2026-01-28 09:13:20 +08:00
|
|
|
|
# 驼峰命名适配
|
2026-01-28 08:54:11 +08:00
|
|
|
|
'visibilityLevel': self.visibility_level,
|
|
|
|
|
|
'generalManual': self.manual_link,
|
|
|
|
|
|
'generalImage': self.product_image,
|
|
|
|
|
|
|
2026-01-28 17:44:39 +08:00
|
|
|
|
# 状态处理
|
2026-01-28 08:54:11 +08:00
|
|
|
|
'isEnabled': 1 if self.is_enabled else 0,
|
|
|
|
|
|
|
2026-01-28 17:44:39 +08:00
|
|
|
|
# 时间字段保持注释
|
2026-01-28 09:13:20 +08:00
|
|
|
|
# 'createTime': self.create_time.strftime('%Y-%m-%d %H:%M:%S') if hasattr(self, 'create_time') and self.create_time else None
|
2026-01-26 17:00:12 +08:00
|
|
|
|
}
|