Files
SCGL/backend/app/models/production.py

117 lines
4.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""生产系统 ORM 模型(新建表)"""
from sqlalchemy import Column, Integer, String, Date, DateTime, ForeignKey, Enum as SQLEnum, JSON
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
import enum
from app.database import Base
class ProjectStatus(str, enum.Enum):
"""项目状态枚举"""
DRAFT = "draft"
ACTIVE = "active"
COMPLETED = "completed"
CANCELLED = "cancelled"
class WorkOrderStatus(str, enum.Enum):
"""工单状态枚举"""
PENDING = "pending"
IN_PROGRESS = "in_progress"
COMPLETED = "completed"
CANCELLED = "cancelled"
class ApprovalStatus(str, enum.Enum):
"""缺料审批状态枚举"""
PENDING = "PENDING"
APPROVED = "APPROVED"
REJECTED = "REJECTED"
class PmsProject(Base):
"""项目表"""
__tablename__ = "pms_project"
id = Column(Integer, primary_key=True, index=True)
project_no = Column(String(50), unique=True, nullable=False, index=True)
name = Column(String(255), nullable=False)
start_date = Column(Date, nullable=True)
end_date = Column(Date, nullable=True)
status = Column(
SQLEnum(ProjectStatus),
default=ProjectStatus.DRAFT,
nullable=False
)
created_at = Column(DateTime, server_default=func.now())
updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now())
work_orders = relationship("PmsWorkOrder", back_populates="project")
class PmsWorkOrder(Base):
"""工单表"""
__tablename__ = "pms_work_order"
id = Column(Integer, primary_key=True, index=True)
work_order_no = Column(String(50), unique=True, nullable=False, index=True)
project_id = Column(Integer, ForeignKey("pms_project.id"), nullable=False)
target_base_id = Column(Integer, ForeignKey("material_base.id"), nullable=False)
target_quantity = Column(Integer, nullable=False, default=0)
assignee_name = Column(String(100), nullable=True)
status = Column(
SQLEnum(WorkOrderStatus),
default=WorkOrderStatus.PENDING,
nullable=False
)
created_at = Column(DateTime, server_default=func.now())
updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now())
project = relationship("PmsProject", back_populates="work_orders")
material = relationship("MaterialBase", foreign_keys=[target_base_id])
material_requisitions = relationship("PmsMaterialRequisition", back_populates="work_order")
class PmsMaterialRequisition(Base):
"""领料映射表"""
__tablename__ = "pms_material_requisition"
id = Column(Integer, primary_key=True, index=True)
work_order_id = Column(Integer, ForeignKey("pms_work_order.id"), nullable=False)
inventory_outbound_no = Column(String(100), nullable=False)
created_at = Column(DateTime, server_default=func.now())
work_order = relationship("PmsWorkOrder", back_populates="material_requisitions")
class PmsMaterialApproval(Base):
"""缺料审批表"""
__tablename__ = "pms_material_approval"
id = Column(Integer, primary_key=True, index=True)
work_order_id = Column(Integer, ForeignKey("pms_work_order.id"), nullable=False)
missing_material_id = Column(Integer, ForeignKey("material_base.id"), nullable=False)
required_qty = Column(Integer, nullable=False)
reason = Column(String(500), nullable=True)
status = Column(
SQLEnum(ApprovalStatus),
default=ApprovalStatus.PENDING,
nullable=False
)
created_at = Column(DateTime, server_default=func.now())
work_order = relationship("PmsWorkOrder")
material = relationship("MaterialBase", foreign_keys=[missing_material_id])
class PmsUserPreference(Base):
"""用户偏好表"""
__tablename__ = "pms_user_preference"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(Integer, nullable=False, index=True) # 对应 SysUser.id
default_bom_target_id = Column(Integer, nullable=True) # 默认关注的成品ID
favorite_target_ids = Column(JSON, nullable=True) # 常看成品ID列表PostgreSQL JSON 数组
created_at = Column(DateTime, server_default=func.now())
updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now())