Files

70 lines
3.2 KiB
Python
Raw Permalink Normal View History

from sqlalchemy import Column, Integer, String, Float, Boolean, DateTime, ForeignKey, Text, JSON
from sqlalchemy.sql import func
from app.core.database import Base
class InspectionPlan(Base):
__tablename__ = "inspection_plans"
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(200), nullable=False)
description = Column(Text)
device_group_id = Column(Integer, ForeignKey("device_groups.id"))
device_ids = Column(JSON) # specific devices to inspect
schedule_type = Column(String(20)) # daily, weekly, monthly, custom
schedule_cron = Column(String(100)) # cron expression for custom
inspector_id = Column(Integer, ForeignKey("users.id"))
checklist = Column(JSON) # [{item: "检查外观", required: true, type: "checkbox"}]
is_active = Column(Boolean, default=True)
next_run_at = Column(DateTime(timezone=True))
created_by = Column(Integer, ForeignKey("users.id"))
created_at = Column(DateTime(timezone=True), server_default=func.now())
updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now())
class InspectionRecord(Base):
__tablename__ = "inspection_records"
id = Column(Integer, primary_key=True, autoincrement=True)
plan_id = Column(Integer, ForeignKey("inspection_plans.id"), nullable=False)
inspector_id = Column(Integer, ForeignKey("users.id"), nullable=False)
status = Column(String(20), default="pending") # pending, in_progress, completed, issues_found
findings = Column(JSON) # [{item, result, note, photo_url}]
started_at = Column(DateTime(timezone=True))
completed_at = Column(DateTime(timezone=True))
created_at = Column(DateTime(timezone=True), server_default=func.now())
class RepairOrder(Base):
__tablename__ = "repair_orders"
id = Column(Integer, primary_key=True, autoincrement=True)
code = Column(String(50), unique=True, nullable=False) # WO-20260402-001
title = Column(String(200), nullable=False)
description = Column(Text)
device_id = Column(Integer, ForeignKey("devices.id"))
alarm_event_id = Column(Integer, ForeignKey("alarm_events.id"))
priority = Column(String(20), default="medium") # critical, high, medium, low
status = Column(String(20), default="open") # open, assigned, in_progress, completed, verified, closed
assigned_to = Column(Integer, ForeignKey("users.id"))
resolution = Column(Text)
cost_estimate = Column(Float)
actual_cost = Column(Float)
created_by = Column(Integer, ForeignKey("users.id"))
created_at = Column(DateTime(timezone=True), server_default=func.now())
assigned_at = Column(DateTime(timezone=True))
completed_at = Column(DateTime(timezone=True))
closed_at = Column(DateTime(timezone=True))
class DutySchedule(Base):
__tablename__ = "duty_schedules"
id = Column(Integer, primary_key=True, autoincrement=True)
user_id = Column(Integer, ForeignKey("users.id"), nullable=False)
duty_date = Column(DateTime(timezone=True), nullable=False)
shift = Column(String(20)) # day, night, on_call
area_id = Column(Integer, ForeignKey("device_groups.id"))
notes = Column(Text)
created_at = Column(DateTime(timezone=True), server_default=func.now())