| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- from __future__ import annotations
- from datetime import datetime
- from sqlalchemy import DateTime, Float, ForeignKey, Integer, JSON, String, Text
- from sqlalchemy.orm import Mapped, mapped_column
- from app.db.base import Base, TimestampMixin, UUIDPrimaryKeyMixin
- class Alarm(UUIDPrimaryKeyMixin, TimestampMixin, Base):
- __tablename__ = "alarms"
- mine_id: Mapped[str] = mapped_column(
- String(32), ForeignKey("mines.id", ondelete="CASCADE"), index=True
- )
- sensor_id: Mapped[str | None] = mapped_column(
- String(32), ForeignKey("sensors.id", ondelete="SET NULL"), nullable=True
- )
- alarm_no: Mapped[str] = mapped_column(String(64), unique=True, index=True)
- alarm_type: Mapped[str] = mapped_column(String(64), index=True)
- level: Mapped[str] = mapped_column(String(16), index=True)
- title: Mapped[str] = mapped_column(String(255))
- content: Mapped[str] = mapped_column(Text, default="")
- value: Mapped[float | None] = mapped_column(Float, nullable=True)
- threshold: Mapped[float | None] = mapped_column(Float, nullable=True)
- status: Mapped[str] = mapped_column(String(32), default="open", index=True)
- occurred_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), index=True)
- acknowledged_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True)
- closed_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True)
- metadata_json: Mapped[dict] = mapped_column("metadata", JSON, default=dict)
- class WorkOrder(UUIDPrimaryKeyMixin, TimestampMixin, Base):
- __tablename__ = "work_orders"
- mine_id: Mapped[str] = mapped_column(
- String(32), ForeignKey("mines.id", ondelete="CASCADE"), index=True
- )
- alarm_id: Mapped[str | None] = mapped_column(
- String(32), ForeignKey("alarms.id", ondelete="SET NULL"), nullable=True
- )
- diagnosis_result_id: Mapped[str | None] = mapped_column(
- String(32), ForeignKey("diagnosis_results.id", ondelete="SET NULL"), nullable=True
- )
- order_no: Mapped[str] = mapped_column(String(64), unique=True, index=True)
- title: Mapped[str] = mapped_column(String(255))
- content: Mapped[str] = mapped_column(Text, default="")
- priority: Mapped[str] = mapped_column(String(16), default="medium", index=True)
- status: Mapped[str] = mapped_column(String(32), default="pending", index=True)
- assignee_id: Mapped[str] = mapped_column(String(64), default="")
- assignee_name: Mapped[str] = mapped_column(String(128), default="")
- department: Mapped[str] = mapped_column(String(128), default="")
- due_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True)
- completed_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True)
- verified_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True)
- closed_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True)
- result: Mapped[str] = mapped_column(Text, default="")
- attachments: Mapped[list] = mapped_column(JSON, default=list)
- metadata_json: Mapped[dict] = mapped_column("metadata", JSON, default=dict)
- class WorkOrderEvent(UUIDPrimaryKeyMixin, Base):
- __tablename__ = "work_order_events"
- work_order_id: Mapped[str] = mapped_column(
- String(32), ForeignKey("work_orders.id", ondelete="CASCADE"), index=True
- )
- event_type: Mapped[str] = mapped_column(String(32), index=True)
- from_status: Mapped[str] = mapped_column(String(32), default="")
- to_status: Mapped[str] = mapped_column(String(32), default="")
- operator_id: Mapped[str] = mapped_column(String(64), default="")
- operator_name: Mapped[str] = mapped_column(String(128), default="")
- comment: Mapped[str] = mapped_column(Text, default="")
- attachments: Mapped[list] = mapped_column(JSON, default=list)
- created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), index=True)
|