Files
pickling-mes/backend/app/models/material.py

57 lines
2.4 KiB
Python
Raw Normal View History

from sqlalchemy import Column, Integer, String, Float, DateTime, Enum, Text, ForeignKey, func
from sqlalchemy.orm import relationship
from app.database import Base
import enum
class CoilStatus(str, enum.Enum):
WAITING = "waiting" # 等待入线
ON_LINE = "on_line" # 在线处理
FINISHED = "finished" # 处理完成
ABNORMAL = "abnormal" # 异常
class Coil(Base):
"""钢卷主档"""
__tablename__ = "coils"
id = Column(Integer, primary_key=True, index=True)
coil_no = Column(String(30), unique=True, nullable=False, index=True, comment="卷号")
order_no = Column(String(30), index=True, comment="订单号")
steel_grade = Column(String(30), comment="钢种")
spec_thickness = Column(Float, comment="规格厚度mm")
spec_width = Column(Float, comment="规格宽度mm")
target_thickness = Column(Float, comment="目标厚度mm")
target_width = Column(Float, comment="目标宽度mm")
gross_weight = Column(Float, comment="毛重kg")
net_weight = Column(Float, comment="净重kg")
inner_diameter = Column(Float, comment="内径mm")
status = Column(Enum(CoilStatus), default=CoilStatus.WAITING)
plan_id = Column(Integer, ForeignKey("production_plans.id"), nullable=True)
remark = Column(Text)
created_at = Column(DateTime, server_default=func.now())
updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now())
tracking = relationship("MaterialTracking", back_populates="coil")
class MaterialTracking(Base):
"""物料跟踪记录"""
__tablename__ = "material_tracking"
id = Column(Integer, primary_key=True, index=True)
coil_id = Column(Integer, ForeignKey("coils.id"), nullable=False, index=True)
coil_no = Column(String(30), nullable=False, index=True)
position = Column(String(50), comment="当前位置/工位")
event_type = Column(String(30), comment="事件类型: entry/exit/process/inspect")
event_desc = Column(String(200), comment="事件描述")
actual_thickness = Column(Float, comment="实测厚度")
actual_width = Column(Float, comment="实测宽度")
speed = Column(Float, comment="线速度m/min")
tension = Column(Float, comment="张力N")
operator = Column(String(50))
event_time = Column(DateTime, nullable=False, index=True)
created_at = Column(DateTime, server_default=func.now())
coil = relationship("Coil", back_populates="tracking")