add get calculation per equipment

main
Cizz22 11 months ago
parent 9c8cd78403
commit 5d5a47e802

@ -31,8 +31,6 @@ from src.scope_equipment_job.router import router as scope_equipment_job_router
# from src.master_activity.router import router as activity_router # from src.master_activity.router import router as activity_router
class ErrorMessage(BaseModel): class ErrorMessage(BaseModel):
msg: str msg: str

@ -15,9 +15,9 @@ from .schema import (CalculationResultsRead,
CalculationTimeConstrainsParametersCreate, CalculationTimeConstrainsParametersCreate,
CalculationTimeConstrainsParametersRead, CalculationTimeConstrainsParametersRead,
CalculationTimeConstrainsParametersRetrive, CalculationTimeConstrainsParametersRetrive,
CalculationTimeConstrainsRead) CalculationTimeConstrainsRead, EquipmentResult)
from .service import (bulk_update_equipment, get_calculation_result, from .service import (bulk_update_equipment, get_calculation_result,
get_calculation_result_by_day) get_calculation_result_by_day, get_calculation_by_assetnum)
router = APIRouter() router = APIRouter()
@ -92,6 +92,21 @@ async def get_calculation_results(db_session: DbSession, calculation_id):
message="Data retrieved successfully", message="Data retrieved successfully",
) )
@router.get(
"/{calculation_id}/{assetnum}", response_model=StandardResponse[EquipmentResult]
)
async def get_calculation_per_equipment(db_session: DbSession, calculation_id, assetnum):
results = await get_calculation_by_assetnum(
db_session=db_session, assetnum=assetnum, calculation_id=calculation_id
)
return StandardResponse(
data=results,
message="Data retrieved successfully",
)
@router.post( @router.post(
"/{calculation_id}/simulation", "/{calculation_id}/simulation",

@ -11,6 +11,7 @@ from sqlalchemy.orm import joinedload
from src.database.core import DbSession from src.database.core import DbSession
from src.overhaul_activity.service import get_all_by_session_id from src.overhaul_activity.service import get_all_by_session_id
from src.overhaul_scope.service import get as get_scope from src.overhaul_scope.service import get as get_scope
from src.utils import get_latest_numOfFail
from src.workorder.model import MasterWorkOrder from src.workorder.model import MasterWorkOrder
from .model import (CalculationData, CalculationEquipmentResult, from .model import (CalculationData, CalculationEquipmentResult,
@ -20,7 +21,6 @@ from .schema import (CalculationResultsRead,
CalculationTimeConstrainsParametersCreate, CalculationTimeConstrainsParametersCreate,
CalculationTimeConstrainsRead, OptimumResult) CalculationTimeConstrainsRead, OptimumResult)
from src.utils import get_latest_numOfFail
def get_overhaul_cost_by_time_chart( def get_overhaul_cost_by_time_chart(
overhaul_cost: float, days: int, numEquipments: int, decay_base: float = 1.01 overhaul_cost: float, days: int, numEquipments: int, decay_base: float = 1.01
@ -32,7 +32,7 @@ def get_overhaul_cost_by_time_chart(
hours = days * 24 hours = days * 24
rate = np.arange(1, hours+1) rate = np.arange(1, hours + 1)
cost_per_equipment = overhaul_cost / numEquipments cost_per_equipment = overhaul_cost / numEquipments
@ -79,7 +79,7 @@ async def get_corrective_cost_time_chart(
## Get latest data fromdata_today ## Get latest data fromdata_today
# latest_num_of_fail:float = get_latest_numOfFail(location_tag=location_tag, token=token) # latest_num_of_fail:float = get_latest_numOfFail(location_tag=location_tag, token=token)
latest_num = data['data'][-1]['num_fail'] latest_num = data["data"][-1]["num_fail"]
if not latest_num: if not latest_num:
latest_num = 1 latest_num = 1
@ -94,7 +94,6 @@ async def get_corrective_cost_time_chart(
for item in data["data"] for item in data["data"]
} }
# Fill in missing dates with nearest available value # Fill in missing dates with nearest available value
complete_data = [] complete_data = []
last_known_value = 0 # Default value if no data is available last_known_value = 0 # Default value if no data is available
@ -112,8 +111,6 @@ async def get_corrective_cost_time_chart(
hourly_failure = np.repeat(daily_failure, 24) / 24 hourly_failure = np.repeat(daily_failure, 24) / 24
# failure_counts = np.cumsum(daily_failure) # failure_counts = np.cumsum(daily_failure)
# Calculate corrective costs # Calculate corrective costs
@ -124,7 +121,6 @@ async def get_corrective_cost_time_chart(
corrective_costs = hourly_failure * cost_per_failure corrective_costs = hourly_failure * cost_per_failure
return corrective_costs, hourly_failure return corrective_costs, hourly_failure
except Exception as e: except Exception as e:
@ -185,7 +181,7 @@ async def create_param_and_data(
async def get_calculation_result(db_session: DbSession, calculation_id: str): async def get_calculation_result(db_session: DbSession, calculation_id: str):
days = 667*24 days = 667 * 24
scope_calculation = await get_calculation_data_by_id( scope_calculation = await get_calculation_data_by_id(
db_session=db_session, calculation_id=calculation_id db_session=db_session, calculation_id=calculation_id
) )
@ -249,6 +245,19 @@ async def get_calculation_data_by_id(
return result.unique().scalar() return result.unique().scalar()
async def get_calculation_by_assetnum(
*, db_session: DbSession, assetnum: str, calculation_id: str
):
stmt = (
select(CalculationEquipmentResult)
.where(CalculationEquipmentResult.assetnum == assetnum)
.where(CalculationEquipmentResult.calculation_data_id == calculation_id)
)
result = await db_session.execute(stmt)
return result.scalar()
# async def create_calculation_result_service(db_session: DbSession, calculation_id: UUID, costPerFailure: Optional[float] = None): # async def create_calculation_result_service(db_session: DbSession, calculation_id: UUID, costPerFailure: Optional[float] = None):
# days = 360 # days = 360
# 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)
@ -327,8 +336,8 @@ async def create_calculation_result_service(
# Store results for each equipment # Store results for each equipment
equipment_results: List[CalculationEquipmentResult] = [] equipment_results: List[CalculationEquipmentResult] = []
total_corrective_costs = np.zeros(days*24) total_corrective_costs = np.zeros(days * 24)
total_daily_failures = np.zeros(days*24) total_daily_failures = np.zeros(days * 24)
# Calculate for each equipment # Calculate for each equipment
for eq in equipments: for eq in equipments:
@ -337,7 +346,7 @@ async def create_calculation_result_service(
service_cost=eq.service_cost, service_cost=eq.service_cost,
token=token, token=token,
location_tag=eq.equipment.location_tag, location_tag=eq.equipment.location_tag,
max_days=667 max_days=667,
) )
overhaul_cost_points = get_overhaul_cost_by_time_chart( overhaul_cost_points = get_overhaul_cost_by_time_chart(

@ -9,7 +9,7 @@ from src.models import StandardResponse
from .schema import (OverhaulJobBase, OverhaulJobCreate, OverhaulJobPagination, from .schema import (OverhaulJobBase, OverhaulJobCreate, OverhaulJobPagination,
OverhaulJobRead) OverhaulJobRead)
from .service import create, get_all, delete from .service import create, delete, get_all
router = APIRouter() router = APIRouter()
@ -45,8 +45,9 @@ async def create_overhaul_equipment_jobs(
message="Data created successfully", message="Data created successfully",
) )
@router.delete("/{overhaul_job_id}", response_model=StandardResponse[None]) @router.delete("/{overhaul_job_id}", response_model=StandardResponse[None])
async def delete_overhaul_equipment_job(db_session: DbSession,overhaul_job_id): async def delete_overhaul_equipment_job(db_session: DbSession, overhaul_job_id):
await delete(db_session=db_session, overhaul_job_id=overhaul_job_id) await delete(db_session=db_session, overhaul_job_id=overhaul_job_id)
return StandardResponse( return StandardResponse(

@ -1,5 +1,6 @@
from typing import Optional from typing import Optional
from fastapi import HTTPException, status
from sqlalchemy import Delete, Select, func from sqlalchemy import Delete, Select, func
from sqlalchemy.orm import selectinload from sqlalchemy.orm import selectinload
@ -10,7 +11,6 @@ from src.database.service import search_filter_sort_paginate
from .model import OverhaulJob from .model import OverhaulJob
from .schema import OverhaulJobCreate from .schema import OverhaulJobCreate
from fastapi import HTTPException, status
async def get_all(*, common, overhaul_equipment_id: str): async def get_all(*, common, overhaul_equipment_id: str):
"""Returns all documents.""" """Returns all documents."""
@ -92,6 +92,7 @@ async def delete(
await db_session.rollback() await db_session.rollback()
raise raise
# async def update(*, db_session: DbSession, scope: OverhaulScope, scope_in: ScopeUpdate): # async def update(*, db_session: DbSession, scope: OverhaulScope, scope_in: ScopeUpdate):
# """Updates a document.""" # """Updates a document."""
# data = scope_in.model_dump() # data = scope_in.model_dump()

@ -34,7 +34,7 @@ class ScopeEquipmentRead(ScopeEquipmentBase):
id: UUID id: UUID
assetnum: str assetnum: str
assigned_date: datetime assigned_date: datetime
master_equipment: Optional[MasterEquipmentBase] =Field(None) master_equipment: Optional[MasterEquipmentBase] = Field(None)
class ScopeEquipmentPagination(Pagination): class ScopeEquipmentPagination(Pagination):

@ -1,23 +1,21 @@
import random import random
from typing import Optional from typing import Optional
from fastapi import HTTPException, status
from sqlalchemy import Delete, Select, and_ from sqlalchemy import Delete, Select, and_
from sqlalchemy.orm import selectinload from sqlalchemy.orm import selectinload
from src.auth.service import CurrentUser from src.auth.service import CurrentUser
from src.database.core import DbSession from src.database.core import DbSession
from src.database.service import CommonParameters, search_filter_sort_paginate from src.database.service import CommonParameters, search_filter_sort_paginate
from src.overhaul_activity.model import OverhaulActivity
from src.overhaul_job.model import OverhaulJob
from src.scope_equipment.model import MasterEquipment, MasterEquipmentTree from src.scope_equipment.model import MasterEquipment, MasterEquipmentTree
from src.scope_equipment.service import get_equipment_level_by_no from src.scope_equipment.service import get_equipment_level_by_no
from .model import ScopeEquipmentJob from .model import ScopeEquipmentJob
from .schema import ScopeEquipmentJobCreate from .schema import ScopeEquipmentJobCreate
from src.overhaul_job.model import OverhaulJob
from src.overhaul_activity.model import OverhaulActivity
from fastapi import HTTPException, status
# async def get(*, db_session: DbSession, scope_equipment_activity_id: str) -> Optional[ScopeEquipmentActivity]: # async def get(*, db_session: DbSession, scope_equipment_activity_id: str) -> Optional[ScopeEquipmentActivity]:
# """Returns a document based on the given document id.""" # """Returns a document based on the given document id."""
# result = await db_session.get(ScopeEquipmentActivity, scope_equipment_activity_id) # result = await db_session.get(ScopeEquipmentActivity, scope_equipment_activity_id)

@ -89,29 +89,33 @@ def parse_date_string(date_str: str) -> Optional[datetime]:
def time_now(): def time_now():
return datetime.now(pytz.timezone(TIMEZONE)) return datetime.now(pytz.timezone(TIMEZONE))
import requests import requests
def get_latest_numOfFail(location_tag, token)-> float:
def get_latest_numOfFail(location_tag, token) -> float:
today = datetime.today().strftime("%Y-%m-%d") today = datetime.today().strftime("%Y-%m-%d")
url_today = f"http://192.168.1.82:8000/reliability/main/number-of-failures/{location_tag}/2016-01-01/{today}" url_today = f"http://192.168.1.82:8000/reliability/main/number-of-failures/{location_tag}/2016-01-01/{today}"
try: try:
response = requests.get(url_today, { response = requests.get(
url_today,
{
"Content-Type": "application/json", "Content-Type": "application/json",
"Authorization": f"Bearer {token}", "Authorization": f"Bearer {token}",
}) },
)
data = response.json() data = response.json()
raise Exception(data) raise Exception(data)
latest_num = data['data'][-1]['num_fail'] latest_num = data["data"][-1]["num_fail"]
raise Exception(latest_num) raise Exception(latest_num)
if not latest_num: if not latest_num:
latest_num = 0 latest_num = 0
return latest_num return latest_num
except requests.exceptions.RequestException as e: except requests.exceptions.RequestException as e:
print(f"Error fetching data: {e}") print(f"Error fetching data: {e}")

@ -13,7 +13,6 @@ from .database import Session
# from pytz import UTC # from pytz import UTC
fake = Faker() fake = Faker()
fake.add_provider(misc) fake.add_provider(misc)

Loading…
Cancel
Save