fix calculation

feature/reliability_stat
Cizz22 1 year ago
parent da69cb4c27
commit f8c284bb73

@ -9,7 +9,7 @@ from src.scope.model import Scope
from src.database.core import DbSession from src.database.core import DbSession
from src.scope.service import get_all from src.scope.service import get_all
from .schema import CalculationTimeConstrainsParametersRead, CalculationTimeConstrainsParametersRetrive, CalculationTimeConstrainsParametersCreate from .schema import CalculationTimeConstrainsParametersRead, CalculationTimeConstrainsParametersRetrive, CalculationTimeConstrainsParametersCreate
from .service import get_calculation_by_reference_and_parameter, get_calculation_result, get_overhaul_cost_by_time_chart, get_corrective_cost_time_chart, create_param_and_data, get_calculation_data_by_id, create_calculation_result_service from .service import get_calculation_by_reference_and_parameter, get_calculation_result, get_overhaul_cost_by_time_chart, get_corrective_cost_time_chart, create_param_and_data, get_calculation_data_by_id, create_calculation_result_service, get_avg_cost_by_asset
from .model import CalculationResult from .model import CalculationResult
from .model import CalculationParam from .model import CalculationParam
@ -87,13 +87,16 @@ async def get_or_create_scope_equipment_calculation(*, db_session: DbSession, sc
if not scope_equipment_calculation: if not scope_equipment_calculation:
# Update Parameter input from scope calculation # Update Parameter input from scope calculation
calculation_time_constrains_in.costPerFailure = scope_calculation.parameter.avg_failure_cost costFailure = get_avg_cost_by_asset(
db_session=db_session, assetnum=calculation_time_constrains_in.assetnum)
calculation_time_constrains_in.costPerFailure = costFailure
calculation_time_constrains_in.overhaulCost = scope_calculation.parameter.overhaul_cost calculation_time_constrains_in.overhaulCost = scope_calculation.parameter.overhaul_cost
scope_equipment_calculation = await create_param_and_data( scope_equipment_calculation = await create_param_and_data(
db_session=db_session, calculation_param_in=calculation_time_constrains_in, created_by=scope_calculation.created_by, parameter_id=scope_calculation.parameter_id) db_session=db_session, calculation_param_in=calculation_time_constrains_in, created_by=scope_calculation.created_by, parameter_id=scope_calculation.parameter_id)
results = await create_calculation_result_service(db_session=db_session, calculation_id=scope_equipment_calculation.id) results = await create_calculation_result_service(db_session=db_session, calculation_id=scope_equipment_calculation.id, costPerFailure=costFailure)
return results return results

@ -1,9 +1,11 @@
from typing import Optional from typing import Optional
from uuid import UUID from uuid import UUID
import numpy as np import numpy as np
from sqlalchemy import and_, select from sqlalchemy import and_, func, select
from sqlalchemy.orm import joinedload from sqlalchemy.orm import joinedload
from src.database.core import DbSession from src.database.core import DbSession
from src.scope_equipment.model import ScopeEquipment
from src.workorder.model import MasterWorkOrder
from .schema import CalculationTimeConstrainsParametersCreate, CalculationTimeConstrainsRead from .schema import CalculationTimeConstrainsParametersCreate, CalculationTimeConstrainsRead
from .model import CalculationParam, OverhaulReferenceType, CalculationData, CalculationResult from .model import CalculationParam, OverhaulReferenceType, CalculationData, CalculationResult
from fastapi import HTTPException, status from fastapi import HTTPException, status
@ -110,14 +112,14 @@ async def get_calculation_data_by_id(db_session: DbSession, calculation_id) -> C
return result.unique().scalar() return result.unique().scalar()
async def create_calculation_result_service(db_session: DbSession, calculation_id: UUID): async def create_calculation_result_service(db_session: DbSession, calculation_id: UUID, costPerFailure: Optional[float]):
days = 60 days = 60
calculation = await get_calculation_data_by_id(db_session=db_session, calculation_id=calculation_id) calculation = await get_calculation_data_by_id(db_session=db_session, calculation_id=calculation_id)
reference = calculation.reference_id if calculation.overhaul_reference_type == OverhaulReferenceType.ASSET else await get(db_session=db_session, scope_id=calculation.reference_id) reference = calculation.reference_id if calculation.overhaul_reference_type == OverhaulReferenceType.ASSET else await get(db_session=db_session, scope_id=calculation.reference_id)
# Parameter # Parameter
overhaulCost = calculation.parameter.overhaul_cost overhaulCost = calculation.parameter.overhaul_cost
costPerFailure = calculation.parameter.avg_failure_cost costPerFailure = costPerFailure if costPerFailure else calculation.parameter.avg_failure_cost
overhaul_cost_points = get_overhaul_cost_by_time_chart( overhaul_cost_points = get_overhaul_cost_by_time_chart(
overhaulCost, days=days) overhaulCost, days=days)
@ -184,3 +186,12 @@ async def get_calculation_result_by_day(*, db_session:DbSession, calculation_id,
return result.scalar() return result.scalar()
async def get_avg_cost_by_asset(*, db_session: DbSession, assetnum: str):
stmt = (
select(func.avg(MasterWorkOrder.total_cost_max).label('average_cost'))
.where(MasterWorkOrder.assetnum == assetnum)
)
result = await db_session.execute(stmt)
return result.scalar_one_or_none()

Loading…
Cancel
Save