|
|
|
|
@ -74,6 +74,7 @@ async def get_simulation(db_session: DbSession, simulation_id):
|
|
|
|
|
async def run_simulations(
|
|
|
|
|
db_session: DbSession,
|
|
|
|
|
simulation_in: SimulationInput,
|
|
|
|
|
background_tasks: BackgroundTasks
|
|
|
|
|
):
|
|
|
|
|
"""RUN Simulation"""
|
|
|
|
|
|
|
|
|
|
@ -81,43 +82,54 @@ async def run_simulations(
|
|
|
|
|
db_session=db_session, simulation_in=simulation_in
|
|
|
|
|
)
|
|
|
|
|
simulation_id = simulation.id
|
|
|
|
|
|
|
|
|
|
# simulation_id = "efa8ef4c-0417-4d2d-95f3-41e4283737ab"
|
|
|
|
|
|
|
|
|
|
project = await get_project(db_session=db_session)
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
sim_data = simulation_in.model_dump(exclude={"SimulationName", "IsDefault"})
|
|
|
|
|
sim_data["HubCnnId"] = str(simulation_id)
|
|
|
|
|
sim_data["projectName"] = project.project_name
|
|
|
|
|
sim_data = simulation_in.model_dump(exclude={"SimulationName", "IsDefault"})
|
|
|
|
|
sim_data["HubCnnId"] = str(simulation_id)
|
|
|
|
|
sim_data["projectName"] = project.project_name
|
|
|
|
|
|
|
|
|
|
# Prepare async background task
|
|
|
|
|
async def run_full_simulation():
|
|
|
|
|
try:
|
|
|
|
|
results = await update_equipment_for_simulation(
|
|
|
|
|
db_session=db_session,
|
|
|
|
|
project_name=project.project_name,
|
|
|
|
|
schematic_name=simulation_in.SchematicName,
|
|
|
|
|
custom_input=simulation_in.CustomInput,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
# # ##background_tasks.add_task(execute_simulation, db_session=db_session ,simulation_id=simulation_id, sim_data=sim_data)
|
|
|
|
|
await execute_simulation(
|
|
|
|
|
db_session=db_session,
|
|
|
|
|
simulation_id=simulation_id,
|
|
|
|
|
sim_data=sim_data,
|
|
|
|
|
is_saved=True,
|
|
|
|
|
eq_update=results,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
results = await update_equipment_for_simulation(
|
|
|
|
|
db_session=db_session, project_name=project.project_name, schematic_name=simulation_in.SchematicName, custom_input=simulation_in.CustomInput
|
|
|
|
|
)
|
|
|
|
|
await calculate_plant_eaf(
|
|
|
|
|
db_session=db_session,
|
|
|
|
|
simulation_id=simulation_id,
|
|
|
|
|
is_default=simulation_in.IsDefault,
|
|
|
|
|
konkin_offset=simulation_in.Konkin_offset,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
await execute_simulation(
|
|
|
|
|
db_session=db_session, simulation_id=simulation_id, sim_data=sim_data, is_saved=True, eq_update=results
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
await calculate_plant_eaf(db_session=db_session, simulation_id=simulation_id, is_default=simulation_in.IsDefault, konkin_offset=simulation_in.Konkin_offset)
|
|
|
|
|
|
|
|
|
|
result = await update_contribution_bulk_mappings(db_session=db_session, simulation_id=simulation_id)
|
|
|
|
|
|
|
|
|
|
await update_contribution_bulk_mappings(
|
|
|
|
|
db_session=db_session, simulation_id=simulation_id
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
"data": str(simulation_id),
|
|
|
|
|
"status": "success",
|
|
|
|
|
"message": "Simulation created successfully",
|
|
|
|
|
}
|
|
|
|
|
except Exception as e:
|
|
|
|
|
# TODO: log error into DB or logger
|
|
|
|
|
print(f"Simulation {simulation_id} failed: {e}")
|
|
|
|
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
raise HTTPException(
|
|
|
|
|
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=str(e)
|
|
|
|
|
)
|
|
|
|
|
# Add to background
|
|
|
|
|
background_tasks.add_task(run_full_simulation)
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
"data": str(simulation_id),
|
|
|
|
|
"status": "success",
|
|
|
|
|
"message": "Simulation started successfully",
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@router.get(
|
|
|
|
|
"/result/calc/{simulation_id}",
|
|
|
|
|
|