2026-01-30 11:21:10 +08:00
|
|
|
|
# app/models/base.py
|
|
|
|
|
|
from app.extensions import db
|
2026-02-09 16:08:47 +08:00
|
|
|
|
import json
|
2026-01-30 11:21:10 +08:00
|
|
|
|
|
|
|
|
|
|
class MaterialBase(db.Model):
|
|
|
|
|
|
"""
|
|
|
|
|
|
基础信息表模型
|
|
|
|
|
|
对应数据库表: material_base
|
|
|
|
|
|
"""
|
|
|
|
|
|
__tablename__ = 'material_base'
|
|
|
|
|
|
|
|
|
|
|
|
# 1. 基础字段
|
|
|
|
|
|
id = db.Column(db.Integer, primary_key=True)
|
2026-02-04 14:29:59 +08:00
|
|
|
|
name = db.Column(db.String(255), nullable=False, comment='名称')
|
2026-02-09 16:08:47 +08:00
|
|
|
|
common_name = db.Column(db.String(255), comment='俗名')
|
2026-01-30 11:21:10 +08:00
|
|
|
|
category = db.Column(db.String(100), comment='类别')
|
|
|
|
|
|
material_type = db.Column(db.String(100), comment='类型')
|
|
|
|
|
|
spec_model = db.Column(db.String(255), comment='规格型号')
|
|
|
|
|
|
unit = db.Column(db.String(50), comment='计量单位')
|
|
|
|
|
|
|
|
|
|
|
|
# 可见等级
|
|
|
|
|
|
visibility_level = db.Column(db.Integer, default=0, comment='信息可见等级')
|
|
|
|
|
|
|
2026-02-09 16:08:47 +08:00
|
|
|
|
# 链接与图片 (现在存储 JSON 字符串)
|
2026-01-30 11:21:10 +08:00
|
|
|
|
manual_link = db.Column(db.Text, comment='通用说明书')
|
|
|
|
|
|
product_image = db.Column(db.Text, comment='通用产品图')
|
|
|
|
|
|
|
|
|
|
|
|
# 启用状态
|
|
|
|
|
|
is_enabled = db.Column(db.Boolean, default=True, comment='是否启用')
|
|
|
|
|
|
|
|
|
|
|
|
# ============================================================
|
|
|
|
|
|
# 关联关系区域
|
|
|
|
|
|
# ============================================================
|
|
|
|
|
|
|
2026-02-10 11:13:07 +08:00
|
|
|
|
# 1. 关联采购库存 (StockBuy) - 修改 back_populates 为 'base'
|
|
|
|
|
|
stock_buys = db.relationship('StockBuy', back_populates='base', lazy='dynamic')
|
2026-01-30 11:21:10 +08:00
|
|
|
|
|
2026-02-10 11:13:07 +08:00
|
|
|
|
# 2. 关联半成品库存 (StockSemi) - 修改 back_populates 为 'base'
|
|
|
|
|
|
stock_semis = db.relationship('StockSemi', back_populates='base', lazy='dynamic')
|
2026-01-30 11:21:10 +08:00
|
|
|
|
|
2026-02-10 11:13:07 +08:00
|
|
|
|
# 3. 关联成品库存 (StockProduct) - 修改 back_populates 为 'base'
|
|
|
|
|
|
stock_products = db.relationship('StockProduct', back_populates='base', lazy='dynamic')
|
2026-01-30 11:21:10 +08:00
|
|
|
|
|
|
|
|
|
|
def to_dict(self):
|
|
|
|
|
|
"""
|
|
|
|
|
|
序列化方法
|
|
|
|
|
|
"""
|
2026-02-09 16:08:47 +08:00
|
|
|
|
# 辅助解析函数:将数据库存储的 JSON 字符串转为 List
|
|
|
|
|
|
def parse_list(json_str):
|
|
|
|
|
|
if not json_str:
|
|
|
|
|
|
return []
|
|
|
|
|
|
try:
|
|
|
|
|
|
# 兼容旧数据:如果不是 JSON 格式(比如是单个 URL),则包装成 list
|
|
|
|
|
|
if not json_str.startswith('['):
|
|
|
|
|
|
return [json_str]
|
|
|
|
|
|
return json.loads(json_str)
|
|
|
|
|
|
except:
|
|
|
|
|
|
return []
|
|
|
|
|
|
|
2026-01-30 11:21:10 +08:00
|
|
|
|
return {
|
|
|
|
|
|
'id': self.id,
|
|
|
|
|
|
'name': self.name,
|
2026-02-09 16:08:47 +08:00
|
|
|
|
'commonName': self.common_name,
|
2026-01-30 11:21:10 +08:00
|
|
|
|
'category': self.category,
|
2026-02-09 16:08:47 +08:00
|
|
|
|
'type': self.material_type,
|
|
|
|
|
|
'spec': self.spec_model,
|
2026-01-30 11:21:10 +08:00
|
|
|
|
'unit': self.unit,
|
|
|
|
|
|
'visibilityLevel': self.visibility_level,
|
2026-02-09 16:08:47 +08:00
|
|
|
|
# 修改:解析为列表返回
|
|
|
|
|
|
'generalManual': parse_list(self.manual_link),
|
|
|
|
|
|
'generalImage': parse_list(self.product_image),
|
2026-01-30 11:21:10 +08:00
|
|
|
|
'isEnabled': 1 if self.is_enabled else 0,
|
|
|
|
|
|
}
|