You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
195 lines
7.2 KiB
Python
195 lines
7.2 KiB
Python
from sqlalchemy import JSON, UUID, Boolean, Column, DateTime, Float, ForeignKey, Integer, Numeric, String
|
|
from sqlalchemy.orm import relationship
|
|
|
|
from src.database.core import Base
|
|
from src.models import DefaultMixin
|
|
import uuid
|
|
|
|
class AerosSimulation(Base, DefaultMixin):
|
|
__tablename__ = "rbd_tr_aeros_simulation"
|
|
|
|
status = Column(String, nullable=False)
|
|
started_at = Column(DateTime, nullable=True)
|
|
completed_at = Column(DateTime, nullable=True)
|
|
input = Column(JSON, nullable=True)
|
|
error = Column(JSON, nullable=True)
|
|
simulation_name = Column(String, nullable=False)
|
|
schematic_name = Column(String, nullable=False)
|
|
reliability = Column(JSON, nullable=True)
|
|
duration = Column(Integer, nullable=True)
|
|
offset = Column(Integer, nullable=True)
|
|
is_default = Column(Boolean, default=False)
|
|
created_by = Column(UUID(as_uuid=True), nullable=True)
|
|
|
|
calc_results = relationship(
|
|
"AerosSimulationCalcResult", back_populates="aeros_simulation", lazy="raise"
|
|
)
|
|
|
|
plot_results = relationship(
|
|
"AerosSimulationPlotResult", back_populates="aeros_simulation", lazy="raise"
|
|
)
|
|
|
|
class AerosSchematic(Base, DefaultMixin):
|
|
__tablename__ = "rbd_ms_aeros_schematic"
|
|
|
|
schematic_name = Column(String, nullable=False)
|
|
alias = Column(String, nullable=False)
|
|
|
|
class AerosNode(Base, DefaultMixin):
|
|
__tablename__ = "rbd_ms_aeros_node"
|
|
|
|
id = Column(
|
|
UUID(as_uuid=True),
|
|
primary_key=True,
|
|
default=uuid.uuid4,
|
|
unique=True,
|
|
nullable=False,
|
|
)
|
|
node_type = Column(String, nullable=False)
|
|
original_node_id = Column(Integer, nullable=False)
|
|
node_id = Column(Integer, nullable=False)
|
|
node_name = Column(String, nullable=False)
|
|
structure_name = Column(String, nullable=False)
|
|
schematic_name = Column(String, nullable=False)
|
|
schematic_id = Column(UUID(as_uuid=True),ForeignKey("rbd_ms_aeros_node.id"), nullable=False)
|
|
original_schematic_id = Column(Integer, nullable=False)
|
|
ref_schematic_id = Column(Integer, nullable=False)
|
|
orignal_ref_schematic_id = Column(Integer, nullable=False)
|
|
aeros_schematic_id = Column(UUID(as_uuid=True),ForeignKey("rbd_ms_aeros_schematic.id") ,nullable=False)
|
|
model_image = Column(JSON, nullable=True)
|
|
|
|
parent = relationship(
|
|
"AerosNode",
|
|
remote_side=[id],
|
|
back_populates="children",
|
|
foreign_keys=[schematic_id],
|
|
)
|
|
|
|
equipment = relationship(
|
|
"MasterEquipment",
|
|
lazy="selectin",
|
|
primaryjoin="and_(AerosNode.node_name == foreign(MasterEquipment.location_tag))",
|
|
uselist=False, # Add this if it's a one-to-one relationship
|
|
)
|
|
|
|
children = relationship(
|
|
"AerosNode", back_populates="parent", foreign_keys=[schematic_id]
|
|
)
|
|
|
|
calc_results = relationship(
|
|
"AerosSimulationCalcResult", back_populates="aeros_node"
|
|
)
|
|
|
|
plot_results = relationship(
|
|
"AerosSimulationPlotResult", back_populates="aeros_node"
|
|
)
|
|
|
|
aeros_equipment = relationship(
|
|
"AerosEquipment", lazy="selectin", primaryjoin="and_(AerosNode.node_name == foreign(AerosEquipment.node_name))", uselist=False
|
|
)
|
|
|
|
|
|
class AerosSimulationCalcResult(Base, DefaultMixin):
|
|
__tablename__ = "rbd_tr_aeros_simulation_calc_result"
|
|
|
|
total_downtime = Column(Float, nullable=False)
|
|
total_uptime = Column(Float, nullable=False)
|
|
num_events = Column(Integer, nullable=False)
|
|
production = Column(Float, nullable=False)
|
|
production_std = Column(Float, nullable=False)
|
|
ideal_production = Column(Float, nullable=False)
|
|
availability = Column(Float, nullable=False)
|
|
efficiency = Column(Float, nullable=False)
|
|
effective_loss = Column(Float, nullable=False)
|
|
num_cm = Column(Integer, nullable=False)
|
|
cm_waiting_time = Column(Float, nullable=False)
|
|
total_cm_downtime = Column(Float, nullable=False)
|
|
num_pm = Column(Integer, nullable=False)
|
|
total_pm_downtime = Column(Float, nullable=False)
|
|
num_ip = Column(Integer, nullable=False)
|
|
total_ip_downtime = Column(Float, nullable=False)
|
|
num_oh = Column(Integer, nullable=False)
|
|
total_oh_downtime = Column(Float, nullable=False)
|
|
t_wait_for_crew = Column(Float, nullable=False)
|
|
t_wait_for_spare = Column(Float, nullable=False)
|
|
duration_at_full = Column(Float, nullable=False)
|
|
duration_above_hh = Column(Float, nullable=False)
|
|
duration_above_h = Column(Float, nullable=False)
|
|
duration_below_l = Column(Float, nullable=False)
|
|
duration_below_ll = Column(Float, nullable=False)
|
|
duration_at_empty = Column(Float, nullable=False)
|
|
stg_input = Column(Float, nullable=True)
|
|
stg_output = Column(Float, nullable=True)
|
|
average_level = Column(Float, nullable=True)
|
|
potential_production = Column(Float, nullable=True)
|
|
eaf = Column(Float, nullable=True)
|
|
eaf_konkin = Column(Float, nullable=True, default=0)
|
|
efor = Column(Float, nullable=True)
|
|
derating_hours = Column(Float, nullable=True)
|
|
eta = Column(Float, nullable=True)
|
|
beta = Column(Float, nullable=True)
|
|
mttr = Column(Integer, nullable=True)
|
|
parameters = Column(JSON, nullable=True)
|
|
contribution = Column(Float, nullable=True)
|
|
criticality = Column(Float, nullable=True)
|
|
contribution_factor = Column(Float, nullable=True)
|
|
total_mo_downtime = Column(Float, nullable=True)
|
|
total_po_downtime = Column(Float, nullable=True)
|
|
sof = Column(Float, nullable=True)
|
|
|
|
aeros_simulation_id = Column(
|
|
UUID(as_uuid=True), ForeignKey("rbd_tr_aeros_simulation.id"), nullable=False
|
|
)
|
|
aeros_node_id = Column(
|
|
UUID(as_uuid=True), ForeignKey("rbd_ms_aeros_node.id"), nullable=False
|
|
)
|
|
|
|
aeros_node = relationship("AerosNode", back_populates="calc_results", lazy="raise")
|
|
|
|
aeros_simulation = relationship(
|
|
"AerosSimulation", back_populates="calc_results", lazy="raise"
|
|
)
|
|
|
|
|
|
class AerosSimulationPlotResult(Base, DefaultMixin):
|
|
__tablename__ = "rbd_tr_aeros_simulation_plot_result"
|
|
|
|
max_flow_rate = Column(Numeric, nullable=False)
|
|
storage_capacity = Column(Numeric, nullable=False)
|
|
point_availabilities = Column(JSON, nullable=False)
|
|
point_flowrates = Column(JSON, nullable=False)
|
|
timestamp_outs = Column(JSON, nullable=False)
|
|
|
|
aeros_simulation_id = Column(
|
|
UUID(as_uuid=True), ForeignKey("rbd_tr_aeros_simulation.id"), nullable=False
|
|
)
|
|
aeros_node_id = Column(
|
|
UUID(as_uuid=True), ForeignKey("rbd_ms_aeros_node.id"), nullable=False
|
|
)
|
|
|
|
aeros_node = relationship("AerosNode", back_populates="plot_results", lazy="raise")
|
|
|
|
aeros_simulation = relationship(
|
|
"AerosSimulation", back_populates="plot_results", lazy="raise"
|
|
)
|
|
|
|
|
|
class EafContribution(Base, DefaultMixin):
|
|
__tablename__ = "rbd_ms_eaf_contribution"
|
|
|
|
location_tag = Column(String, nullable=False)
|
|
eaf_contribution = Column(Float, nullable=False)
|
|
efficiency_uptime = Column(Float, nullable=False)
|
|
edh = Column(Float, nullable=False)
|
|
|
|
|
|
|
|
# models.py
|
|
class AerosSimulationProgress(Base):
|
|
__tablename__ = "simulation_progress"
|
|
simulation_id = Column(Integer, primary_key=True)
|
|
status = Column(String, default="pending") # pending, running, failed, completed
|
|
step = Column(String, nullable=True)
|
|
progress = Column(Integer, default=0) # 0-100
|
|
error_message = Column(String, nullable=True)
|