fix endpoit create scope equipment

feature/reliability_stat
Cizz22 1 year ago
parent fc03060874
commit d3fcd08811

@ -3,9 +3,11 @@ from src.workorder.model import MasterWorkOrder
from src.scope_equipment.model import ScopeEquipment from src.scope_equipment.model import ScopeEquipment
from src.scope.model import Scope 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 .schema import CalculationTimeConstrainsParametersRead
from .service import get_overhaul_cost_by_time_chart
async def get_create_calculation_parameters(*, db_session: DbSession):
async def get_cost_per_failure(*, db_session: DbSession):
stmt = ( stmt = (
select( select(
ScopeEquipment.scope_id, ScopeEquipment.scope_id,
@ -17,11 +19,32 @@ async def get_cost_per_failure(*, db_session: DbSession):
) )
results = await db_session.execute(stmt) results = await db_session.execute(stmt)
costFailure = results.all()
return results.all() avaiableScopes = {scope.id: scope.scope_name for scope in await get_all(db_session=db_session)}
costFailurePerScope = {avaiableScopes.get(
costPerFailure[0]): costPerFailure[1] for costPerFailure in await costFailure}
return CalculationTimeConstrainsParametersRead(
costPerFailure=costFailurePerScope,
availableScopes=avaiableScopes.values(),
recommendedScope="B",
historicalData={
"averageOverhaulCost": 10000000,
"lastCalculation": {
"id": "calc_122",
"date": "2024-10-15",
"scope": "B",
},
},
)
async def create_calculation(*, db_session: DbSession): async def create_calculation(*, db_session: DbSession):
##
return { return {
"id": "calc_123", "id": "calc_123",
"result": { "result": {

@ -4,8 +4,7 @@ from fastapi import APIRouter, HTTPException, status
from .schema import CalculationTimeConstrainsParametersRead, CalculationTimeConstrainsRead, CalculationTimeConstrainsCreate from .schema import CalculationTimeConstrainsParametersRead, CalculationTimeConstrainsRead, CalculationTimeConstrainsCreate
from src.database.core import DbSession from src.database.core import DbSession
from src.models import StandardResponse from src.models import StandardResponse
from .flows import get_cost_per_failure, create_calculation from .flows import get_create_calculation_parameters, create_calculation
from src.scope.service import get_all
router = APIRouter() router = APIRouter()
@ -14,24 +13,10 @@ router = APIRouter()
async def get_calculation_parameters(db_session: DbSession): async def get_calculation_parameters(db_session: DbSession):
"""Get all calculation parameter pagination.""" """Get all calculation parameter pagination."""
avaiableScopes = {scope.id: scope.scope_name for scope in await get_all(db_session=db_session)} parameters = await get_create_calculation_parameters(db_session=db_session)
costFailurePerScope = {avaiableScopes.get(
costPerFailure[0]): costPerFailure[1] for costPerFailure in await get_cost_per_failure(db_session=db_session)}
return StandardResponse( return StandardResponse(
data=CalculationTimeConstrainsParametersRead( data=parameters,
costPerFailure=costFailurePerScope,
availableScopes=avaiableScopes.values(),
recommendedScope="B",
historicalData={
"averageOverhaulCost": 10000000,
"lastCalculation": {
"id": "calc_122",
"date": "2024-10-15",
"scope": "B",
},
},
),
message="Data retrieved successfully", message="Data retrieved successfully",
) )
@ -40,7 +25,6 @@ async def get_calculation_parameters(db_session: DbSession):
async def create_calculation_time_constrains(db_session: DbSession, calculation_time_constrains_in: CalculationTimeConstrainsCreate): async def create_calculation_time_constrains(db_session: DbSession, calculation_time_constrains_in: CalculationTimeConstrainsCreate):
"""Calculate Here""" """Calculate Here"""
calculation_result = await create_calculation(db_session=db_session) calculation_result = await create_calculation(db_session=db_session)
return StandardResponse(data=CalculationTimeConstrainsRead( return StandardResponse(data=CalculationTimeConstrainsRead(
id=calculation_result["id"], id=calculation_result["id"],

@ -7,20 +7,6 @@ from uuid import UUID
from pydantic import Field from pydantic import Field
from src.models import DefultBase from src.models import DefultBase
# {
# "costPerFailure": 733.614,
# "availableScopes": ["A", "B"],
# "recommendedScope": "B",
# "historicalData": {
# "averageOverhaulCost": 10000000,
# "lastCalculation": {
# "id": "calc_122",
# "date": "2024-10-15",
# "scope": "B"
# }
# }
# }
class CalculationTimeConstrainsBase(DefultBase): class CalculationTimeConstrainsBase(DefultBase):
pass pass
@ -33,47 +19,23 @@ class CalculationTimeConstrainsParametersRead(CalculationTimeConstrainsBase):
historicalData: Dict[str, Any] = Field(..., description="Historical data") historicalData: Dict[str, Any] = Field(..., description="Historical data")
# {
# "overhaulCost": 10000000,
# "scopeOH": "B",
# "costPerFailure": 733.614,
# "metadata": {
# "unit": "PLTU1",
# "calculatedBy": "user123",
# "timestamp": "2024-11-28T10:00:00Z"
# }
# }
class CalculationTimeConstrainsCreate(CalculationTimeConstrainsBase): class CalculationTimeConstrainsCreate(CalculationTimeConstrainsBase):
overhaulCost: float = Field(..., description="Overhaul cost") overhaulCost: float = Field(..., description="Overhaul cost")
scopeOH: str = Field(..., description="Scope OH") scopeOH: str = Field(..., description="Scope OH")
costPerFailure: float = Field(..., description="Cost per failure") costPerFailure: float = Field(..., description="Cost per failure")
metadata: Dict[str, Any] = Field(..., description="Metadata") metadata: Dict[str, Any] = Field(..., description="Metadata")
# {
# "calculationId": "calc_123",
# "result": {
# "summary": {
# "scope": "B",
# "numberOfFailures": 59,
# "optimumOHTime": 90,
# "optimumTotalCost": 500000000
# },
# "chartData": {/* ... */},
# "comparisons": {
# "vsLastCalculation": {
# "costDifference": -50000000,
# "timeChange": "+15 days"
# }
# }
# },
# "simulationLimits": {
# "minInterval": 30,
# "maxInterval": 180
# }
# }
class CalculationTimeConstrainsRead(CalculationTimeConstrainsBase): class CalculationTimeConstrainsRead(CalculationTimeConstrainsBase):
id: Union[UUID, str] id: Union[UUID, str]
result: Dict[str, Any] result: Dict[str, Any]
{
"calculationId": "calc_123",
"intervalDays": 45,
}
class CalculationTimeConstrainsSimulationRead(CalculationTimeConstrainsBase):
simulation: Dict[str, Any]
comparison: Dict[str, Any]

@ -0,0 +1,6 @@
import numpy as np
def get_overhaul_cost_by_time_chart(overhaul_cost: float, days: int) -> list:
exponents = np.arange(1, days + 1)
return overhaul_cost / (2 ** exponents)

@ -54,9 +54,9 @@ async def get_scope_equipment(db_session: DbSession, scope_equipment_id: str):
return StandardResponse(data=scope, message="Data retrieved successfully") return StandardResponse(data=scope, message="Data retrieved successfully")
@router.post("", response_model=StandardResponse[ScopeEquipmentRead]) @router.post("", response_model=StandardResponse[List[str]])
async def create_scope_equipment(db_session: DbSession, scope__equipment_in: ScopeEquipmentCreate): async def create_scope_equipment(db_session: DbSession, scope_equipment_in: ScopeEquipmentCreate):
scope = await create(db_session=db_session, scope__equipment_in=scope__equipment_in) scope = await create(db_session=db_session, scope_equipment_in=scope_equipment_in)
return StandardResponse(data=scope, message="Data created successfully") return StandardResponse(data=scope, message="Data created successfully")

@ -1,8 +1,8 @@
from fastapi import HTTPException, status from fastapi import HTTPException, status
from sqlalchemy import Select, Delete, desc, func, not_, insert, or_ from sqlalchemy import Select, Delete, desc, func, not_, or_
from sqlalchemy.dialects.postgresql import insert
from src.workorder.model import MasterWorkOrder from src.workorder.model import MasterWorkOrder
from .model import ScopeEquipment, MasterEquipment from .model import ScopeEquipment, MasterEquipment
from src.scope.service import get_by_scope_name as get_scope_by_name_service from src.scope.service import get_by_scope_name as get_scope_by_name_service
@ -43,7 +43,7 @@ async def create(*, db_session: DbSession, scope_equipment_in: ScopeEquipmentCre
"""Creates a new document.""" """Creates a new document."""
# scope_equipment = ScopeEquipment(**scope_equipment_in.model_dump()) # scope_equipment = ScopeEquipment(**scope_equipment_in.model_dump())
assetnums = scope_equipment_in.assetnums assetnums = scope_equipment_in.assetnums
scope = get_scope_by_name_service( scope = await get_scope_by_name_service(
db_session=db_session, scope_name=scope_equipment_in.scope_name) db_session=db_session, scope_name=scope_equipment_in.scope_name)
if not scope: if not scope:
@ -58,14 +58,16 @@ async def create(*, db_session: DbSession, scope_equipment_in: ScopeEquipmentCre
stmt = insert(ScopeEquipment).values( stmt = insert(ScopeEquipment).values(
assetnum=assetnum, assetnum=assetnum,
scope_id=scope.id scope_id=scope.id
).on_conflict_do_update( )
stmt = stmt.on_conflict_do_update(
index_elements=["assetnum"], index_elements=["assetnum"],
set_={ set_={
"scope_id": scope.id "scope_id": scope.id
} }
) )
db_session.execute(stmt) await db_session.execute(stmt)
results.append(assetnum) results.append(assetnum)
await db_session.commit() await db_session.commit()

Loading…
Cancel
Save