fix budget

feature/reliability_stat
Cizz22 4 months ago
parent 13281c460c
commit ef9e457ed8

@ -5,7 +5,7 @@ from fastapi.params import Query
from src.auth.service import Token from src.auth.service import Token
from src.calculation_target_reliability.service import get_simulation_results from src.calculation_target_reliability.service import get_simulation_results
from src.database.core import DbSession from src.database.core import CollectorDbSession, DbSession
from src.models import StandardResponse from src.models import StandardResponse
from .service import get_all_budget_constrains from .service import get_all_budget_constrains
@ -18,23 +18,24 @@ async def get_target_reliability(
db_session: DbSession, db_session: DbSession,
token: Token, token: Token,
session_id: str, session_id: str,
collector_db: CollectorDbSession,
cost_threshold: float = Query(100), cost_threshold: float = Query(100),
): ):
"""Get all scope pagination.""" """Get all scope pagination."""
results = await get_simulation_results( results = await get_simulation_results(
simulation_id="083a0936-37f8-4fe4-844e-a9002dd26d61", simulation_id="76b2c981-c338-4d69-b85b-6977cb47ed41",
token=token token=token
) )
results, consequesce = await get_all_budget_constrains( results, consequence = await get_all_budget_constrains(
db_session=db_session, session_id=session_id, cost_threshold=cost_threshold db_session=db_session, session_id=session_id, cost_threshold=cost_threshold, simulation_result=results, collector_db=collector_db
) )
return StandardResponse( return StandardResponse(
data={ data={
"results": results, "results": results,
"consequence": consequesce "consequence": consequence
}, },
message="Data retrieved successfully", message="Data retrieved successfully",
) )

@ -26,7 +26,7 @@ async def get_all_budget_constrains(
"""Get all overhaul overview with EAF values that sum to 100%.""" """Get all overhaul overview with EAF values that sum to 100%."""
calc_result = simulation_result['calc_result'] calc_result = simulation_result['calc_result']
plant_result = simulation_result['plant_result'] plant_result = simulation_result['plant_result']
plot_result = simulation_result['plot_result'] # plot_result = simulation_result['plot_result']
equipments = await get_standard_scope_by_session_id( equipments = await get_standard_scope_by_session_id(
db_session=db_session, db_session=db_session,
@ -47,16 +47,15 @@ async def get_all_budget_constrains(
equipments_eaf_contribution = calculate_asset_eaf_contributions( equipments_eaf_contribution = calculate_asset_eaf_contributions(
plant_result=plant_result, plant_result=plant_result,
eq_results=eq_results, eq_results=eq_results,
plot_result=plot_result
) )
# Create result array of dictionaries # Create result array of dictionaries
result = [ result = [
{ {
"id": equipment.id, "id": equipment.id,
"assetnum": equipment.assetnum, "location_tag": equipment.location_tag,
"location_tag": equipment.equipment.location_tag, "name": equipment.equipment_name,
"name": equipment.equipment.name,
"total_cost": equipment.overhaul_cost + equipment.service_cost, "total_cost": equipment.overhaul_cost + equipment.service_cost,
"eaf_contribution": equipments_eaf_contribution.get(equipment.location_tag, 0) "eaf_contribution": equipments_eaf_contribution.get(equipment.location_tag, 0)
} }
@ -87,19 +86,19 @@ async def get_all_budget_constrains(
# #
def calculate_asset_eaf_contributions(plant_result, eq_results, plot_result): def calculate_asset_eaf_contributions(plant_result, eq_results):
""" """
Calculate each asset's negative contribution to plant EAF Calculate each asset's negative contribution to plant EAF
Higher contribution = more impact on reducing plant EAF Higher contribution = more impact on reducing plant EAF
""" """
plant_production = plant_result.get('production', 0) plant_production = plant_result.get('production', 0)
results = defaultdict(list) results = defaultdict(float)
for asset in eq_results: for asset in eq_results:
# Weight based on production capacity # Weight based on production capacity
capacity_weight = asset.get('production', 0) / plant_production if plant_productions > 0 else 0 capacity_weight = asset.get('production', 0) / plant_production if plant_production > 0 else 0
plot_data = next((item for item in plot_result if item['aeros_node']['node_name'] == asset['aeros_node']['node_name']), None) # plot_data = next((item for item in plot_result if item['aeros_node']['node_name'] == asset['aeros_node']['node_name']), None)
# Get asset EAF and downtime # Get asset EAF and downtime
asset_eaf = asset.get('eaf', 0) asset_eaf = asset.get('eaf', 0)
@ -113,8 +112,8 @@ def calculate_asset_eaf_contributions(plant_result, eq_results, plot_result):
sim_duration = plant_result.get('sim_duration', 8760) # Default to 1 year sim_duration = plant_result.get('sim_duration', 8760) # Default to 1 year
downtime_hours = (asset_derating_pct / 100) * sim_duration downtime_hours = (asset_derating_pct / 100) * sim_duration
results[asset['aeros_node']['node_name']] = eaf_contribution results[asset['aeros_node']['node_name']] = round(eaf_contribution)
# Sort by contribution (worst contributors first) # Sort by contribution (worst contributors first)
results = sorted(results.items(), key=lambda x: x[1], reverse=True) # results = sorted(results.items(), key=lambda x: x[1], reverse=True)
return results return results
Loading…
Cancel
Save