add get calculation per equipment

feature/reliability_stat
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
class ErrorMessage(BaseModel):
msg: str

@ -15,9 +15,9 @@ from .schema import (CalculationResultsRead,
CalculationTimeConstrainsParametersCreate,
CalculationTimeConstrainsParametersRead,
CalculationTimeConstrainsParametersRetrive,
CalculationTimeConstrainsRead)
CalculationTimeConstrainsRead, EquipmentResult)
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()
@ -92,6 +92,21 @@ async def get_calculation_results(db_session: DbSession, calculation_id):
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(
"/{calculation_id}/simulation",

@ -11,6 +11,7 @@ from sqlalchemy.orm import joinedload
from src.database.core import DbSession
from src.overhaul_activity.service import get_all_by_session_id
from src.overhaul_scope.service import get as get_scope
from src.utils import get_latest_numOfFail
from src.workorder.model import MasterWorkOrder
from .model import (CalculationData, CalculationEquipmentResult,
@ -20,7 +21,6 @@ from .schema import (CalculationResultsRead,
CalculationTimeConstrainsParametersCreate,
CalculationTimeConstrainsRead, OptimumResult)
from src.utils import get_latest_numOfFail
def get_overhaul_cost_by_time_chart(
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
rate = np.arange(1, hours+1)
rate = np.arange(1, hours + 1)
cost_per_equipment = overhaul_cost / numEquipments
@ -79,7 +79,7 @@ async def get_corrective_cost_time_chart(
## Get latest data fromdata_today
# 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:
latest_num = 1
@ -94,7 +94,6 @@ async def get_corrective_cost_time_chart(
for item in data["data"]
}
# Fill in missing dates with nearest available value
complete_data = []
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
# failure_counts = np.cumsum(daily_failure)
# Calculate corrective costs
@ -124,7 +121,6 @@ async def get_corrective_cost_time_chart(
corrective_costs = hourly_failure * cost_per_failure
return corrective_costs, hourly_failure
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):
days = 667*24
days = 667 * 24
scope_calculation = await get_calculation_data_by_id(
db_session=db_session, calculation_id=calculation_id
)
@ -249,6 +245,19 @@ async def get_calculation_data_by_id(
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):
# days = 360
# 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
equipment_results: List[CalculationEquipmentResult] = []
total_corrective_costs = np.zeros(days*24)
total_daily_failures = np.zeros(days*24)
total_corrective_costs = np.zeros(days * 24)
total_daily_failures = np.zeros(days * 24)
# Calculate for each equipment
for eq in equipments:
@ -337,7 +346,7 @@ async def create_calculation_result_service(
service_cost=eq.service_cost,
token=token,
location_tag=eq.equipment.location_tag,
max_days=667
max_days=667,
)
overhaul_cost_points = get_overhaul_cost_by_time_chart(

@ -9,7 +9,7 @@ from src.models import StandardResponse
from .schema import (OverhaulJobBase, OverhaulJobCreate, OverhaulJobPagination,
OverhaulJobRead)
from .service import create, get_all, delete
from .service import create, delete, get_all
router = APIRouter()
@ -45,8 +45,9 @@ async def create_overhaul_equipment_jobs(
message="Data created successfully",
)
@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)
return StandardResponse(

@ -1,5 +1,6 @@
from typing import Optional
from fastapi import HTTPException, status
from sqlalchemy import Delete, Select, func
from sqlalchemy.orm import selectinload
@ -10,7 +11,6 @@ from src.database.service import search_filter_sort_paginate
from .model import OverhaulJob
from .schema import OverhaulJobCreate
from fastapi import HTTPException, status
async def get_all(*, common, overhaul_equipment_id: str):
"""Returns all documents."""
@ -78,9 +78,9 @@ async def delete(
scope_job = await db_session.get(OverhaulJob, overhaul_job_id)
if not scope_job:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="A data with this id does not exist.",
)
status_code=status.HTTP_404_NOT_FOUND,
detail="A data with this id does not exist.",
)
# Perform deletion
await db_session.delete(scope_job)
@ -92,6 +92,7 @@ async def delete(
await db_session.rollback()
raise
# async def update(*, db_session: DbSession, scope: OverhaulScope, scope_in: ScopeUpdate):
# """Updates a document."""
# data = scope_in.model_dump()

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

@ -1,23 +1,21 @@
import random
from typing import Optional
from fastapi import HTTPException, status
from sqlalchemy import Delete, Select, and_
from sqlalchemy.orm import selectinload
from src.auth.service import CurrentUser
from src.database.core import DbSession
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.service import get_equipment_level_by_no
from .model import ScopeEquipmentJob
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]:
# """Returns a document based on the given document id."""
# result = await db_session.get(ScopeEquipmentActivity, scope_equipment_activity_id)
@ -117,9 +115,9 @@ async def delete(
scope_job = await db_session.get(ScopeEquipmentJob, scope_job_id)
if not scope_job:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="A data with this id does not exist.",
)
status_code=status.HTTP_404_NOT_FOUND,
detail="A data with this id does not exist.",
)
# Perform deletion
await db_session.delete(scope_job)

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

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

Loading…
Cancel
Save