analysis data
This commit is contained in:
84
app/src/modules/simulation/analysis/ROI/roiData.tsx
Normal file
84
app/src/modules/simulation/analysis/ROI/roiData.tsx
Normal file
@@ -0,0 +1,84 @@
|
||||
import React, { useEffect } from 'react'
|
||||
import { useInputValues, useProductionCapacityData } from '../../../../store/store';
|
||||
|
||||
export default function ROIData() {
|
||||
const { inputValues } = useInputValues();
|
||||
const { productionCapacityData } = useProductionCapacityData()
|
||||
|
||||
useEffect(() => {
|
||||
if (inputValues === undefined) return;
|
||||
|
||||
const electricityCost = parseFloat(inputValues["Electricity cost"]);
|
||||
const fixedCost = parseFloat(inputValues["Fixed costs"]);
|
||||
const laborCost = parseFloat(inputValues["Labor Cost"]);
|
||||
const maintenanceCost = parseFloat(inputValues["Maintenance cost"]); // Remove space typ
|
||||
const materialCost = parseFloat(inputValues["Material cost"]);
|
||||
const productionPeriod = parseFloat(inputValues["Production period"]);
|
||||
const salvageValue = parseFloat(inputValues["Salvage value"]);
|
||||
const sellingPrice = parseFloat(inputValues["Selling price"]);
|
||||
const initialInvestment = parseFloat(inputValues["Initial Investment"]);
|
||||
const shiftLength = parseFloat(inputValues["Shift length"]);
|
||||
const shiftsPerDay = parseFloat(inputValues["Shifts / day"]);
|
||||
const workingDaysPerYear = parseFloat(inputValues["Working days / year"]);
|
||||
|
||||
if (!isNaN(electricityCost) && !isNaN(fixedCost) && !isNaN(laborCost) && !isNaN(maintenanceCost) &&
|
||||
!isNaN(materialCost) && !isNaN(productionPeriod) && !isNaN(salvageValue) && !isNaN(sellingPrice) &&
|
||||
!isNaN(shiftLength) && !isNaN(shiftsPerDay) && !isNaN(workingDaysPerYear) && productionCapacityData > 0) {
|
||||
|
||||
console.log('sellingPrice: ', sellingPrice);
|
||||
console.log('salvageValue: ', salvageValue);
|
||||
console.log('productionPeriod: ', productionPeriod);
|
||||
console.log('materialCost: ', materialCost);
|
||||
console.log('maintenanceCost: ', maintenanceCost);
|
||||
console.log('laborCost: ', laborCost);
|
||||
console.log('fixedCost: ', fixedCost);
|
||||
console.log('electricityCost: ', electricityCost);
|
||||
|
||||
|
||||
// Revenue
|
||||
const RevenueForYear = productionCapacityData * sellingPrice;
|
||||
console.log('RevenueForYear: ', RevenueForYear);
|
||||
|
||||
//Costs
|
||||
let MaterialCost = productionCapacityData * materialCost
|
||||
console.log('MaterialCost: ', MaterialCost);
|
||||
let LaborCost = laborCost * shiftLength * shiftsPerDay * workingDaysPerYear;
|
||||
console.log('LaborCost: ', LaborCost);
|
||||
let EnergyCost = electricityCost * shiftLength * shiftsPerDay * workingDaysPerYear;
|
||||
console.log('EnergyCost: ', EnergyCost);
|
||||
let MaintenceCost = maintenanceCost + fixedCost;
|
||||
console.log('MaintenceCost: ', MaintenceCost);
|
||||
|
||||
//Total Anuual Cost
|
||||
let TotalAnnualCost = MaterialCost + LaborCost + EnergyCost + MaintenceCost;
|
||||
console.log('TotalAnnualCost: ', TotalAnnualCost);
|
||||
|
||||
//Profit for Year
|
||||
let ProfitforYear = RevenueForYear - TotalAnnualCost;
|
||||
console.log('ProfitforYear: ', ProfitforYear);
|
||||
|
||||
//Net Profit
|
||||
let NetProfit = ProfitforYear * productionPeriod;
|
||||
console.log('NetProfit: ', NetProfit);
|
||||
|
||||
|
||||
//Final ROI
|
||||
const ROIData = ((NetProfit + salvageValue - initialInvestment) / TotalAnnualCost) * 100;
|
||||
console.log('ROIData: ', ROIData);
|
||||
|
||||
|
||||
// Payback Period
|
||||
const paybackPeriod = initialInvestment / ProfitforYear;
|
||||
console.log('paybackPeriod: ', paybackPeriod);
|
||||
|
||||
|
||||
}
|
||||
|
||||
}, [inputValues, productionCapacityData]);
|
||||
|
||||
return (
|
||||
<></>
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
import React, { useEffect } from 'react'
|
||||
import { useInputValues, useProductionCapacityData, useThroughPutData } from '../../../../store/store'
|
||||
|
||||
export default function ProductionCapacityData() {
|
||||
const { throughputData } = useThroughPutData()
|
||||
const { productionCapacityData, setProductionCapacityData } = useProductionCapacityData()
|
||||
const { inputValues } = useInputValues();
|
||||
|
||||
useEffect(() => {
|
||||
if (inputValues === undefined || throughputData === undefined) return;
|
||||
|
||||
const shiftLength = parseFloat(inputValues["Shift length"]);
|
||||
// console.log('shiftLength: ', shiftLength);
|
||||
const shiftsPerDay = parseFloat(inputValues["Shifts / day"]);
|
||||
// console.log('shiftsPerDay: ', shiftsPerDay);
|
||||
const workingDaysPerYear = parseFloat(inputValues["Working days / year"]);
|
||||
// console.log('workingDaysPerYear: ', workingDaysPerYear);
|
||||
const yieldRate = parseFloat(inputValues["Yield rate"]);
|
||||
// console.log('yieldRate: ', yieldRate);
|
||||
|
||||
|
||||
if (!isNaN(shiftLength) && !isNaN(shiftsPerDay) && !isNaN(workingDaysPerYear) && !isNaN(yieldRate) && throughputData > 0) {
|
||||
//Daily Output
|
||||
const dailyProduction = throughputData * shiftLength * shiftsPerDay;
|
||||
console.log("DailyProduction: ", dailyProduction.toFixed(2));
|
||||
// Good units (after Yield)
|
||||
const afterYield = dailyProduction * (yieldRate / 100);
|
||||
console.log('afterYield: ', afterYield.toFixed(2));
|
||||
//Annual Output
|
||||
const annualProduction = afterYield * workingDaysPerYear;
|
||||
console.log('annualProduction: ', annualProduction.toFixed(2));
|
||||
setProductionCapacityData(annualProduction);
|
||||
}
|
||||
}, [throughputData, inputValues]);
|
||||
|
||||
|
||||
|
||||
useEffect(() => {
|
||||
|
||||
|
||||
}, [])
|
||||
|
||||
return (
|
||||
<></>
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,10 +1,23 @@
|
||||
import React from 'react'
|
||||
import ThroughPut from './throughPut/throughPut'
|
||||
import React, { useEffect } from 'react'
|
||||
import { usePlayButtonStore } from '../../../store/usePlayButtonStore'
|
||||
import ProductionCapacityData from './productionCapacity/productionCapacityData'
|
||||
import ThroughPutData from './throughPut/throughPutData'
|
||||
import ROIData from './ROI/roiData'
|
||||
|
||||
function SimulationAnalysis() {
|
||||
const { isPlaying } = usePlayButtonStore()
|
||||
// useEffect(()=>{
|
||||
// if (isPlaying) {
|
||||
//
|
||||
// } else {
|
||||
//
|
||||
// }
|
||||
// },[isPlaying])
|
||||
return (
|
||||
<>
|
||||
<ThroughPut />
|
||||
<ThroughPutData />
|
||||
<ProductionCapacityData />
|
||||
<ROIData />
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1,239 +0,0 @@
|
||||
// import React, { useEffect, useState } from 'react';
|
||||
// import { useSelectedProduct } from '../../../../store/simulation/useSimulationStore';
|
||||
// import { useProductStore } from '../../../../store/simulation/useProductStore';
|
||||
// import { determineExecutionMachineSequences } from '../../simulator/functions/determineExecutionMachineSequences';
|
||||
// import { useArmBotStore } from '../../../../store/simulation/useArmBotStore';
|
||||
// import { useMachineCount, useMachineUptime, useMaterialCycle } from '../../../../store/store';
|
||||
// import { useVehicleStore } from '../../../../store/simulation/useVehicleStore';
|
||||
// import { useMachineStore } from '../../../../store/simulation/useMachineStore';
|
||||
// import { useConveyorStore } from '../../../../store/simulation/useConveyorStore';
|
||||
// import { useStorageUnitStore } from '../../../../store/simulation/useStorageUnitStore';
|
||||
// import { useMaterialStore } from '../../../../store/simulation/useMaterialStore';
|
||||
|
||||
// export default function ThroughPut() {
|
||||
// const { selectedProduct } = useSelectedProduct();
|
||||
// const { products, getProductById } = useProductStore();
|
||||
// const { armBots } = useArmBotStore();
|
||||
// const { vehicles } = useVehicleStore();
|
||||
// const { machines } = useMachineStore();
|
||||
// const { conveyors } = useConveyorStore();
|
||||
// const { storageUnits } = useStorageUnitStore();
|
||||
// const { materials } = useMaterialStore();
|
||||
|
||||
// const { machineCount, setMachineCount } = useMachineCount();
|
||||
// const { setMachineActiveTime } = useMachineUptime();
|
||||
// const { materialCycleTime, setMaterialCycleTime } = useMaterialCycle();
|
||||
|
||||
// const [totalActiveTime, setTotalActiveTime] = useState(0);
|
||||
|
||||
// // 1. Setting static active times and counting machines
|
||||
// useEffect(() => {
|
||||
// const productData = getProductById(selectedProduct.productId);
|
||||
// if (productData) {
|
||||
// const productSequenceData = determineExecutionMachineSequences([productData]);
|
||||
// if (productSequenceData?.length > 0) {
|
||||
// let totalItems = 0;
|
||||
|
||||
// productSequenceData.forEach((sequence) => {
|
||||
// totalItems += sequence.length;
|
||||
// sequence.forEach((item) => {
|
||||
// if (item.type === "roboticArm") {
|
||||
// armBots.filter(arm => arm.modelUuid === item.modelUuid)
|
||||
// .forEach(arm => {
|
||||
// if (arm.activeTime >= 0) {
|
||||
//
|
||||
// }
|
||||
// });
|
||||
// } else if (item.type === "vehicle") {
|
||||
// vehicles.filter(vehicle => vehicle.modelUuid === item.modelUuid)
|
||||
// .forEach(vehicle => {
|
||||
// if (vehicle.activeTime >= 0) {
|
||||
// vehicle.activeTime = 10; // static
|
||||
// }
|
||||
// });
|
||||
// } else if (item.type === "machine") {
|
||||
// machines.filter(machine => machine.modelUuid === item.modelUuid)
|
||||
// .forEach(machine => {
|
||||
// if (machine.activeTime >= 0) {
|
||||
// machine.activeTime = 12; // static
|
||||
// }
|
||||
// });
|
||||
// } else if (item.type === "transfer") {
|
||||
// conveyors.filter(conveyor => conveyor.modelUuid === item.modelUuid)
|
||||
// .forEach(conveyor => {
|
||||
// if (conveyor.activeTime >= 0) {
|
||||
// conveyor.activeTime = 5; // static
|
||||
// }
|
||||
// });
|
||||
// } else if (item.type === "storageUnit") {
|
||||
// storageUnits.filter(storage => storage.modelUuid === item.modelUuid)
|
||||
// .forEach(storage => {
|
||||
// if (storage.activeTime >= 0) {
|
||||
// storage.activeTime = 8; // static
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
// });
|
||||
// });
|
||||
|
||||
// setMachineCount(totalItems);
|
||||
// }
|
||||
// }
|
||||
// }, [products, selectedProduct, armBots, vehicles, machines, conveyors, storageUnits, getProductById, setMachineCount]);
|
||||
|
||||
// // 2. Set material cycle time (static also)
|
||||
// useEffect(() => {
|
||||
// materials.forEach((material) => {
|
||||
// material.startTime = 50;
|
||||
// material.endTime = 100;
|
||||
// const totalCycleTime = material.endTime - material.startTime;
|
||||
// setMaterialCycleTime(totalCycleTime);
|
||||
// });
|
||||
// }, [materials, setMaterialCycleTime]);
|
||||
|
||||
// // 3. Sum of all activeTimes after static values are set
|
||||
// useEffect(() => {
|
||||
// let sum = 0;
|
||||
// armBots.forEach(arm => { if (arm.activeTime > 0) sum += arm.activeTime; });
|
||||
// vehicles.forEach(vehicle => { if (vehicle.activeTime > 0) sum += vehicle.activeTime; });
|
||||
// machines.forEach(machine => { if (machine.activeTime > 0) sum += machine.activeTime; });
|
||||
// conveyors.forEach(conveyor => { if (conveyor.activeTime > 0) sum += conveyor.activeTime; });
|
||||
// storageUnits.forEach(storage => { if (storage.activeTime > 0) sum += storage.activeTime; });
|
||||
|
||||
// setTotalActiveTime(sum);
|
||||
// setMachineActiveTime(sum);
|
||||
|
||||
// }, [armBots, vehicles, machines, conveyors, storageUnits, setMachineActiveTime]);
|
||||
|
||||
// // 4. Calculate throughput when activeTime and materialCycleTime are ready
|
||||
// useEffect(() => {
|
||||
// if (totalActiveTime > 0 && materialCycleTime > 0) {
|
||||
// const avgProcessTime = (totalActiveTime / materialCycleTime) * 100;
|
||||
//
|
||||
// }
|
||||
// }, [totalActiveTime, materialCycleTime]);
|
||||
|
||||
// return (
|
||||
// <>
|
||||
// </>
|
||||
// );
|
||||
// }
|
||||
|
||||
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { useSelectedProduct } from '../../../../store/simulation/useSimulationStore';
|
||||
import { useProductStore } from '../../../../store/simulation/useProductStore';
|
||||
import { determineExecutionMachineSequences } from '../../simulator/functions/determineExecutionMachineSequences';
|
||||
import { useArmBotStore } from '../../../../store/simulation/useArmBotStore';
|
||||
import { useMachineCount, useMachineUptime, useMaterialCycle } from '../../../../store/store';
|
||||
import { useVehicleStore } from '../../../../store/simulation/useVehicleStore';
|
||||
import { useMachineStore } from '../../../../store/simulation/useMachineStore';
|
||||
import { useConveyorStore } from '../../../../store/simulation/useConveyorStore';
|
||||
import { useStorageUnitStore } from '../../../../store/simulation/useStorageUnitStore';
|
||||
import { useMaterialStore } from '../../../../store/simulation/useMaterialStore';
|
||||
|
||||
export default function ThroughPut() {
|
||||
const { selectedProduct } = useSelectedProduct();
|
||||
const { products, getProductById } = useProductStore();
|
||||
const { armBots } = useArmBotStore();
|
||||
const { vehicles } = useVehicleStore();
|
||||
const { machines } = useMachineStore();
|
||||
const { conveyors } = useConveyorStore();
|
||||
const { storageUnits } = useStorageUnitStore();
|
||||
const { materials } = useMaterialStore();
|
||||
|
||||
const { setMachineCount } = useMachineCount();
|
||||
const { machineActiveTime, setMachineActiveTime } = useMachineUptime();
|
||||
console.log('machineActiveTime: ', machineActiveTime);
|
||||
const { setMaterialCycleTime } = useMaterialCycle();
|
||||
|
||||
const [totalActiveTime, setTotalActiveTime] = useState(0);
|
||||
const [throughputData, setThroughputData] = useState(0); // <=== ADD THIS
|
||||
|
||||
// Setting machine count
|
||||
useEffect(() => {
|
||||
const productData = getProductById(selectedProduct.productId);
|
||||
if (productData) {
|
||||
const productSequenceData = determineExecutionMachineSequences([productData]);
|
||||
if (productSequenceData?.length > 0) {
|
||||
let totalItems = 0;
|
||||
productSequenceData.forEach((sequence) => {
|
||||
totalItems += sequence.length;
|
||||
});
|
||||
setMachineCount(totalItems);
|
||||
}
|
||||
}
|
||||
}, [products, selectedProduct, getProductById, setMachineCount]);
|
||||
|
||||
// Setting material cycle time
|
||||
useEffect(() => {
|
||||
materials.forEach(() => {
|
||||
const staticStartTime = 50;
|
||||
const staticEndTime = 100;
|
||||
const totalCycleTime = staticEndTime - staticStartTime;
|
||||
setMaterialCycleTime(totalCycleTime);
|
||||
});
|
||||
}, [materials, setMaterialCycleTime]);
|
||||
|
||||
// Calculate Sum, Machine Uptime and Throughput
|
||||
useEffect(() => {
|
||||
let sum = 0;
|
||||
|
||||
|
||||
armBots.forEach(arm => {
|
||||
|
||||
if (arm.activeTime > 0) sum += arm.activeTime;
|
||||
});
|
||||
|
||||
vehicles.forEach(vehicle => {
|
||||
if (vehicle.activeTime > 0) sum += 10; // static
|
||||
});
|
||||
|
||||
machines.forEach(machine => {
|
||||
if (machine.activeTime > 0) sum += 12; // static
|
||||
});
|
||||
|
||||
conveyors.forEach(conveyor => {
|
||||
if (conveyor.activeTime > 0) sum += 5; // static
|
||||
});
|
||||
|
||||
storageUnits.forEach(storage => {
|
||||
if (storage.activeTime > 0) sum += 8; // static
|
||||
});
|
||||
|
||||
|
||||
|
||||
const avgProcessTime = 100 - 50; // static 50
|
||||
|
||||
const machineUptime = (sum / avgProcessTime) * 100;
|
||||
console.log('machineUptime: ', machineUptime);
|
||||
|
||||
|
||||
|
||||
const machineCount = 3; // static
|
||||
const throughput = (3600 / avgProcessTime) * machineCount * (machineUptime / 100); // **IMPORTANT divide by 100 for %**
|
||||
|
||||
|
||||
|
||||
setTotalActiveTime(sum);
|
||||
setMachineActiveTime(machineUptime)
|
||||
setMaterialCycleTime(throughput)
|
||||
// setMachineActiveTime(sum);
|
||||
setThroughputData(throughput); // Save it properly here
|
||||
|
||||
}, [armBots, vehicles, machines, conveyors, storageUnits, setMachineActiveTime]);
|
||||
|
||||
// Just display throughput when ready
|
||||
useEffect(() => {
|
||||
|
||||
if (throughputData > 0) {
|
||||
|
||||
}
|
||||
}, [throughputData]);
|
||||
|
||||
return (
|
||||
<>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,208 @@
|
||||
import React, { useEffect, useRef, useState } from 'react';
|
||||
import { useSelectedProduct } from '../../../../store/simulation/useSimulationStore';
|
||||
import { useProductStore } from '../../../../store/simulation/useProductStore';
|
||||
import { determineExecutionMachineSequences } from '../../simulator/functions/determineExecutionMachineSequences';
|
||||
import { useArmBotStore } from '../../../../store/simulation/useArmBotStore';
|
||||
import { useMachineCount, useMachineUptime, useMaterialCycle, useThroughPutData } from '../../../../store/store';
|
||||
import { useVehicleStore } from '../../../../store/simulation/useVehicleStore';
|
||||
import { useMachineStore } from '../../../../store/simulation/useMachineStore';
|
||||
import { useConveyorStore } from '../../../../store/simulation/useConveyorStore';
|
||||
import { useStorageUnitStore } from '../../../../store/simulation/useStorageUnitStore';
|
||||
import { useMaterialStore } from '../../../../store/simulation/useMaterialStore';
|
||||
import { usePauseButtonStore, usePlayButtonStore } from '../../../../store/usePlayButtonStore';
|
||||
|
||||
export default function ThroughPutData() {
|
||||
const { selectedProduct } = useSelectedProduct();
|
||||
const { products, getProductById } = useProductStore();
|
||||
const { armBots, incrementActiveTime, incrementIdleTime } = useArmBotStore();
|
||||
const { vehicles } = useVehicleStore();
|
||||
const { machines } = useMachineStore();
|
||||
const { conveyors } = useConveyorStore();
|
||||
const { storageUnits } = useStorageUnitStore();
|
||||
const { materials } = useMaterialStore();
|
||||
|
||||
const { machineCount, setMachineCount } = useMachineCount();
|
||||
const { machineActiveTime, setMachineActiveTime } = useMachineUptime();
|
||||
|
||||
const { materialCycleTime, setMaterialCycleTime } = useMaterialCycle();
|
||||
|
||||
// const [totalActiveTime, setTotalActiveTime] = useState(0);
|
||||
const { setThroughputData } = useThroughPutData() // <=== ADD THIS
|
||||
const { isPlaying } = usePlayButtonStore();
|
||||
|
||||
// Setting machine count
|
||||
useEffect(() => {
|
||||
if (materialCycleTime < 0) return
|
||||
// console.log('materialCycleTime: ', materialCycleTime);
|
||||
const fetchProductSequenceData = async () => {
|
||||
const productData = getProductById(selectedProduct.productId);
|
||||
if (productData) {
|
||||
const productSequenceData = await determineExecutionMachineSequences([productData]);
|
||||
// console.log('productSequenceData: ', productSequenceData);
|
||||
|
||||
if (productSequenceData?.length > 0) {
|
||||
let totalItems = 0;
|
||||
let totalActiveTime = 0;
|
||||
|
||||
productSequenceData.forEach((sequence) => {
|
||||
// console.log('sequence: ', sequence);
|
||||
|
||||
sequence.forEach((item) => {
|
||||
if (item.type === "roboticArm") {
|
||||
armBots.filter(arm => arm.modelUuid === item.modelUuid)
|
||||
.forEach(arm => {
|
||||
|
||||
if (arm.activeTime >= 0) {
|
||||
totalActiveTime += arm.activeTime;
|
||||
}
|
||||
});
|
||||
} else if (item.type === "vehicle") {
|
||||
vehicles.filter(vehicle => vehicle.modelUuid === item.modelUuid)
|
||||
.forEach(vehicle => {
|
||||
|
||||
if (vehicle.activeTime >= 0) {
|
||||
// totalActiveTime += vehicle.activeTime;
|
||||
// totalActiveTime += 10;
|
||||
}
|
||||
});
|
||||
} else if (item.type === "machine") {
|
||||
machines.filter(machine => machine.modelUuid === item.modelUuid)
|
||||
.forEach(machine => {
|
||||
if (machine.activeTime >= 0) {
|
||||
// totalActiveTime += machine.activeTime;
|
||||
// totalActiveTime += 12;
|
||||
}
|
||||
});
|
||||
} else if (item.type === "transfer") {
|
||||
conveyors.filter(conveyor => conveyor.modelUuid === item.modelUuid)
|
||||
.forEach(conveyor => {
|
||||
if (conveyor.activeTime >= 0) {
|
||||
// totalActiveTime += conveyor.activeTime;
|
||||
// totalActiveTime += 7;
|
||||
}
|
||||
});
|
||||
} else if (item.type === "storageUnit") {
|
||||
storageUnits.filter(storage => storage.modelUuid === item.modelUuid)
|
||||
.forEach(storage => {
|
||||
if (storage.activeTime >= 0) {
|
||||
// totalActiveTime += storage.activeTime;
|
||||
// totalActiveTime += 9;
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
totalItems += sequence.length;
|
||||
});
|
||||
|
||||
setMachineCount(totalItems);
|
||||
setMachineActiveTime(totalActiveTime);
|
||||
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
fetchProductSequenceData();
|
||||
}, [products, selectedProduct, getProductById, setMachineCount, isPlaying, armBots, materialCycleTime]);
|
||||
|
||||
// Setting material cycle time
|
||||
useEffect(() => {
|
||||
materials.map((material) => {
|
||||
// console.log('material: ', material);
|
||||
// const totalCycleTime = material.endTime - material.startTime;//dynamic
|
||||
const staticStartTime = 50;
|
||||
const staticEndTime = 100;
|
||||
const totalCycleTime = staticEndTime - staticStartTime;
|
||||
setMaterialCycleTime(totalCycleTime)
|
||||
|
||||
})
|
||||
}, [materials]);
|
||||
|
||||
|
||||
useEffect(() => {
|
||||
if (machineActiveTime > 0 && materialCycleTime > 0 && machineCount > 0) {
|
||||
const avgProcessTime = (machineActiveTime / materialCycleTime) * 100; // % value
|
||||
const throughput = (3600 / materialCycleTime) * machineCount * (avgProcessTime / 100); // ✅ division by 100
|
||||
setThroughputData(throughput.toFixed(2)); // Set the throughput data in the store
|
||||
|
||||
// console.log('---Throughput Results---');
|
||||
// console.log('Total Active Time:', machineActiveTime);
|
||||
// console.log('Material Cycle Time:', materialCycleTime);
|
||||
// console.log('Machine Count:', machineCount);
|
||||
// console.log('Average Process Time (%):', avgProcessTime);
|
||||
// console.log('Calculated Throughput:', throughput);
|
||||
}
|
||||
}, [machineActiveTime, materialCycleTime, machineCount]);
|
||||
|
||||
|
||||
|
||||
return (
|
||||
<>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// useEffect(() => {
|
||||
// if (!isPlaying) return;
|
||||
|
||||
// const intervalMs = 1000
|
||||
|
||||
// if (!armBot.isActive && armBot.state == "idle" && (currentPhase == "rest" || currentPhase == "init") && !isIdleRef.current) {
|
||||
// isIdleRef.current = true
|
||||
|
||||
// // Stop the timer
|
||||
// // 🚨 1. Clear Active Timer
|
||||
// if (activeTimerId.current) {
|
||||
// clearInterval(activeTimerId.current);
|
||||
// activeTimerId.current = null;
|
||||
// }
|
||||
// incrementActiveTime(armBot.modelUuid, activeSecondsElapsed.current)
|
||||
// console.log(`✅ Active Cycle completed in ${activeSecondsElapsed.current} seconds`);
|
||||
|
||||
// // 🚨 2. Reset active timer seconds after logging
|
||||
// // activeSecondsElapsed.current = 0;
|
||||
|
||||
// // 🚨 3. Start Idle Timer (clean old idle timer first)
|
||||
// if (idleTimerId.current) {
|
||||
// clearInterval(idleTimerId.current);
|
||||
// idleTimerId.current = null;
|
||||
// }
|
||||
|
||||
// idleSecondsElapsed.current = 0;
|
||||
// idleTimerId.current = setInterval(() => {
|
||||
// if (!isPausedRef.current) {
|
||||
// idleSecondsElapsed.current += 1;
|
||||
// console.log(`🕒 Idle Timer: ${idleSecondsElapsed.current} seconds`);
|
||||
// }
|
||||
// }, intervalMs);
|
||||
// }
|
||||
// if (armBot.isActive && armBot.state != "idle" && currentPhase !== "rest" && armBot.currentAction && isIdleRef.current) {
|
||||
// isIdleRef.current = false
|
||||
|
||||
// if (armBot.currentAction) {
|
||||
// // 🚨 Clear Idle Timer
|
||||
// if (idleTimerId.current) {
|
||||
// clearInterval(idleTimerId.current);
|
||||
// idleTimerId.current = null;
|
||||
// }
|
||||
// incrementIdleTime(armBot.modelUuid, idleSecondsElapsed.current)
|
||||
// console.log(`🕒 Idle Cycle completed in: ${idleSecondsElapsed.current} seconds`);
|
||||
// idleSecondsElapsed.current = 0;
|
||||
|
||||
// // 🚨 Start Active Timer
|
||||
// if (activeTimerId.current) {
|
||||
// clearInterval(activeTimerId.current);
|
||||
// }
|
||||
// // activeSecondsElapsed.current = 0;
|
||||
// activeTimerId.current = setInterval(() => {
|
||||
// if (!isPausedRef.current) {
|
||||
// activeSecondsElapsed.current += 1
|
||||
// console.log(`🕒 Active Timer: ${activeSecondsElapsed.current} seconds`);
|
||||
// }
|
||||
// }, intervalMs);
|
||||
// }
|
||||
// }
|
||||
|
||||
// }, [armBot, currentPhase, isPlaying])
|
||||
Reference in New Issue
Block a user