Squashed 'core/' content from commit 92ec910
git-subtree-dir: core git-subtree-split: 92ec910a132e379a3a6e442a75bcb07cac0f0010
This commit is contained in:
69
backend/app/models/maintenance.py
Normal file
69
backend/app/models/maintenance.py
Normal file
@@ -0,0 +1,69 @@
|
||||
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())
|
||||
Reference in New Issue
Block a user