diff --git a/app/src/components/layout/sidebarRight/properties/ZoneProperties.tsx b/app/src/components/layout/sidebarRight/properties/ZoneProperties.tsx
index 0c8f210..cf7044b 100644
--- a/app/src/components/layout/sidebarRight/properties/ZoneProperties.tsx
+++ b/app/src/components/layout/sidebarRight/properties/ZoneProperties.tsx
@@ -35,7 +35,7 @@ const ZoneProperties: React.FC = () => {
viewPortCenter: zoneTarget,
};
- let response = await zoneCameraUpdate(zonesdata, organization,projectId);
+ let response = await zoneCameraUpdate(zonesdata, organization, projectId);
console.log('response: ', response);
if (response.message === "zone updated") {
setEdit(false);
@@ -59,10 +59,9 @@ const ZoneProperties: React.FC = () => {
zoneName: newName,
};
// Call your API to update the zone
- let response = await zoneCameraUpdate(zonesdata, organization,projectId);
- console.log('response: ', response);
- // console.log("response: ", response);
+ let response = await zoneCameraUpdate(zonesdata, organization, projectId);
if (response.message === "zone updated") {
+ setSelectedZone((prev) => ({ ...prev, zoneName: newName }));
setZones((prevZones: any[]) =>
prevZones.map((zone) =>
zone.zoneUuid === selectedZone.zoneUuid
diff --git a/app/src/components/ui/analysis/ProductionCapacity.tsx b/app/src/components/ui/analysis/ProductionCapacity.tsx
index 7c2e883..5e2fc73 100644
--- a/app/src/components/ui/analysis/ProductionCapacity.tsx
+++ b/app/src/components/ui/analysis/ProductionCapacity.tsx
@@ -91,10 +91,13 @@ const ThroughputSummary: React.FC = () => {
const [isLoading, setIsLoading] = useState(true);
useEffect(() => {
- // console.log('productionCapacityData > 0: ', productionCapacityData > 0);
+ //
if (productionCapacityData > 0) {
- setIsLoading(false);
- console.log("productionCapacityData: ", productionCapacityData);
+ setTimeout(() => {
+
+ setIsLoading(false);
+ }, 3000)
+
} else {
setIsLoading(true);
}
diff --git a/app/src/components/ui/analysis/ROISummary.tsx b/app/src/components/ui/analysis/ROISummary.tsx
index a03b15c..56ac5dd 100644
--- a/app/src/components/ui/analysis/ROISummary.tsx
+++ b/app/src/components/ui/analysis/ROISummary.tsx
@@ -80,14 +80,15 @@ const ROISummary = ({
const year = now.getFullYear();
return `${day} ${month}, ${year}`;
}
- const [isLoading, setIsLoading] = useState(false);
+ const [isLoading, setIsLoading] = useState(true);
const { roiSummary } = useROISummaryData();
useEffect(() => {
if (roiSummary.productName) {
- // If productName is set, assume data is loaded
- setIsLoading(false);
+ setTimeout(() => {
+ setIsLoading(false);
+ }, 4500)
} else {
// If productName is empty, assume still loading
setIsLoading(true);
diff --git a/app/src/components/ui/analysis/ThroughputSummary.tsx b/app/src/components/ui/analysis/ThroughputSummary.tsx
index a01ac61..fd3fb60 100644
--- a/app/src/components/ui/analysis/ThroughputSummary.tsx
+++ b/app/src/components/ui/analysis/ThroughputSummary.tsx
@@ -11,9 +11,6 @@ const ProductionCapacity = ({
throughputValue = 128,
timeRange = { startTime: "08:00 AM", endTime: "09:00 AM" },
}) => {
-
-
-
const { machineActiveTime } = useMachineUptime();
const { materialCycleTime } = useMaterialCycle();
const { throughputData } = useThroughPutData()
@@ -27,21 +24,14 @@ const ProductionCapacity = ({
const partialFillPercent =
((progressPercent / 100) * totalBars - barsToFill) * 100;
- const [isLoading, setIsLoading] = useState(false);
+ const [isLoading, setIsLoading] = useState(true);
useEffect(() => {
- console.log('typeof throughputData:', typeof throughputData);
- console.log('throughputData > 0: ', throughputData > 0);
if (throughputData > 0) {
- // console.log('machineActiveTime: ', machineActiveTime);
- // console.log('materialCycleTime: ', materialCycleTime);
- // console.log('throughputData: ', throughputData);
- // console.log('productionCapacityData: ', productionCapacityData);
setIsLoading(false);
} else {
setIsLoading(true);
}
-
}, [throughputData])
return (
@@ -60,7 +50,7 @@ const ProductionCapacity = ({
- {isLoading ? (
+ {!isLoading ? (
<>
diff --git a/app/src/components/ui/list/List.tsx b/app/src/components/ui/list/List.tsx
index 4fc2ee1..f1a8eb5 100644
--- a/app/src/components/ui/list/List.tsx
+++ b/app/src/components/ui/list/List.tsx
@@ -119,16 +119,13 @@ const List: React.FC = ({ items = [], remove }) => {
alert("Zone name already exists. Please choose a different name.");
return; // DO NOT update state
}
-
const zonesdata = {
zoneUuid: selectedZone.zoneUuid,
zoneName: newName,
};
-
- const response = await zoneCameraUpdate(zonesdata, organization, projectId);
+ const response = await zoneCameraUpdate(zonesdata, organization,projectId);
if (response.message === "zone updated") {
setSelectedZone((prev) => ({ ...prev, zoneName: newName }));
-
setZones((prevZones: any[]) =>
prevZones.map((zone) =>
zone.zoneUuid === selectedZone.zoneUuid
diff --git a/app/src/modules/simulation/analysis/throughPut/throughPutData.tsx b/app/src/modules/simulation/analysis/throughPut/throughPutData.tsx
index aa7fc19..bb548ba 100644
--- a/app/src/modules/simulation/analysis/throughPut/throughPutData.tsx
+++ b/app/src/modules/simulation/analysis/throughPut/throughPutData.tsx
@@ -16,7 +16,7 @@ export default function ThroughPutData() {
const { machines } = machineStore();
const { conveyors } = conveyorStore();
const { storageUnits } = storageUnitStore();
- const { materialHistory } = materialStore();
+ const { materialHistory, materials } = materialStore();
const { machineCount, setMachineCount } = useMachineCount();
const { machineActiveTime, setMachineActiveTime } = useMachineUptime();
const { materialCycleTime, setMaterialCycleTime } = useMaterialCycle();
@@ -49,16 +49,15 @@ export default function ThroughPutData() {
if (item.type === "roboticArm") {
armBots.filter(arm => arm.modelUuid === item.modelUuid)
.forEach(arm => {
- if (arm.activeTime >= 0) {
+ if (arm.activeTime > 0) {
process.push({ modelid: arm.modelUuid, modelName: arm.modelName, activeTime: arm?.activeTime })
totalActiveTime += arm.activeTime;
-
}
});
} else if (item.type === "vehicle") {
vehicles.filter(vehicle => vehicle.modelUuid === item.modelUuid)
.forEach(vehicle => {
- if (vehicle.activeTime >= 0) {
+ if (vehicle.activeTime > 0) {
process.push({ modelid: vehicle.modelUuid, modelName: vehicle.modelName, activeTime: vehicle?.activeTime })
totalActiveTime += vehicle.activeTime;
@@ -67,7 +66,7 @@ export default function ThroughPutData() {
} else if (item.type === "machine") {
machines.filter(machine => machine.modelUuid === item.modelUuid)
.forEach(machine => {
- if (machine.activeTime >= 0) {
+ if (machine.activeTime > 0) {
process.push({ modelid: machine.modelUuid, modelName: machine.modelName, activeTime: machine?.activeTime })
totalActiveTime += machine.activeTime;
}
@@ -75,16 +74,16 @@ export default function ThroughPutData() {
} else if (item.type === "transfer") {
conveyors.filter(conveyor => conveyor.modelUuid === item.modelUuid)
.forEach(conveyor => {
- if (conveyor.activeTime >= 0) {
- totalActiveTime += conveyor.activeTime;
+ if (conveyor.activeTime > 0) {
+ // totalActiveTime += conveyor.activeTime;
}
});
} else if (item.type === "storageUnit") {
storageUnits.filter(storage => storage.modelUuid === item.modelUuid)
.forEach(storage => {
- if (storage.activeTime >= 0) {
- totalActiveTime += storage.activeTime;
-
+ if (storage.activeTime > 0) {
+ // totalActiveTime += storage.activeTime;
+//
}
});
}
@@ -93,6 +92,7 @@ export default function ThroughPutData() {
totalItems += sequence.length;
});
+
setMachineCount(totalItems);
setMachineActiveTime(totalActiveTime);
let arr = process.map((item: any) => ({
@@ -109,39 +109,98 @@ export default function ThroughPutData() {
// if (materialCycleTime <= 0) return
}, [products, selectedProduct, getProductById, setMachineCount, materialCycleTime, armBots, vehicles, machines]);
- // Setting material cycle time
useEffect(() => {
- materialHistory.forEach((material) => {
- const start = material.material.startTime ?? 0;
- const end = material.material.endTime ?? 0;
- if (start === 0 || end === 0) return;
- const totalCycleTime = (end - start) / 1000; // Convert milliseconds to seconds
- setMaterialCycleTime(Number(totalCycleTime.toFixed(2))); // Set the material cycle time in the store
- });
- }, [materialHistory]);
+ async function getMachineActive() {
+ const productData = getProductById(selectedProduct.productUuid);
+ let anyArmActive;
+ let anyVehicleActive;
+ let anyMachineActive;
+ if (productData) {
+ const productSequenceData = await determineExecutionMachineSequences([productData]);
+ if (productSequenceData?.length > 0) {
+ productSequenceData.forEach(sequence => {
+ sequence.forEach(item => {
+ if (item.type === "roboticArm") {
+ armBots
+ .filter(arm => arm.modelUuid === item.modelUuid)
+ .forEach(arm => {
+ if (arm.isActive) {
+ anyArmActive = true;
+ } else {
+ anyArmActive = false;
+ }
+ });
+ }
+ if (item.type === "vehicle") {
+ vehicles
+ .filter(vehicle => vehicle.modelUuid === item.modelUuid)
+ .forEach(vehicle => {
+ if (vehicle.isActive) {
+ anyVehicleActive = true;
+ } else {
+ anyVehicleActive = false;
+ }
+ });
+ }
+ if (item.type === "machine") {
+ machines
+ .filter(machine => machine.modelUuid === item.modelUuid)
+ .forEach(machine => {
+ if (machine.isActive) {
+ anyMachineActive = true;
+ } else {
+ anyMachineActive = false;
+ }
+ });
+ }
+ });
+ });
+ }
+ }
+ const allInactive = !anyArmActive && !anyVehicleActive && !anyMachineActive;
+ if (allInactive && materials.length === 0 && materialHistory.length > 0) {
+
+ let totalCycleTimeSum = 0;
+ let cycleCount = 0;
+
+ materialHistory.forEach((material) => {
+ const start = material.material.startTime ?? 0;
+ const end = material.material.endTime ?? 0;
+ if (start === 0 || end === 0) return;
+
+ const totalCycleTime = (end - start) / 1000; // Convert milliseconds to seconds
+ totalCycleTimeSum += totalCycleTime;
+ cycleCount++;
+ });
+
+ if (cycleCount > 0) {
+ const averageCycleTime = totalCycleTimeSum / cycleCount;
+ setMaterialCycleTime(Number(averageCycleTime.toFixed(2)));
+ }
+ }
+ }
+ if (isPlaying) {
+ setTimeout(() => {
+ getMachineActive();
+ }, 500)
+ }
+ }, [armBots, materials, materialHistory, machines, vehicles, selectedProduct])
useEffect(() => {
if (machineActiveTime > 0 && materialCycleTime > 0 && machineCount > 0) {
+
+
+
const utilization = machineActiveTime / 3600; // Active time per hour
const unitsPerMachinePerHour = 3600 / materialCycleTime;
const throughput = unitsPerMachinePerHour * machineCount * utilization;
-
- setThroughputData(throughput.toFixed(2)); // Set throughput to state/store
-
- // console.log('---Throughput Results---');
- // console.log('Machine Active Time (s):', machineActiveTime);
- // console.log('Material Cycle Time (s):', materialCycleTime);
- // console.log('Machine Count:', machineCount);
- // console.log('Utilization:', utilization);
- // console.log('Throughput (units/hr):', throughput);
+ setThroughputData(Number(throughput.toFixed(2))); // Keep as number
+ //
}
}, [machineActiveTime, materialCycleTime, machineCount]);
-
-
-
return (
<>
>
diff --git a/app/src/modules/simulation/vehicle/instances/animator/vehicleAnimator.tsx b/app/src/modules/simulation/vehicle/instances/animator/vehicleAnimator.tsx
index 4c76e71..9d45fd8 100644
--- a/app/src/modules/simulation/vehicle/instances/animator/vehicleAnimator.tsx
+++ b/app/src/modules/simulation/vehicle/instances/animator/vehicleAnimator.tsx
@@ -32,7 +32,7 @@ function VehicleAnimator({ path, handleCallBack, currentPhase, agvUuid, agvDetai
useEffect(() => {
if (currentPhase === 'stationed-pickup' && path.length > 0) {
- console.log('path: ', path);
+ // console.log('path: ', path);
setCurrentPath(path);
setObjectRotation(agvDetail.point.action?.pickUpPoint?.rotation)
} else if (currentPhase === 'pickup-drop' && path.length > 0) {
diff --git a/app/src/pages/UserAuth.tsx b/app/src/pages/UserAuth.tsx
index fb8de9e..dd6757f 100644
--- a/app/src/pages/UserAuth.tsx
+++ b/app/src/pages/UserAuth.tsx
@@ -38,13 +38,12 @@ const UserAuth: React.FC = () => {
const { userId, organization } = getUserData();
-
-
const handleLogin = async (e: FormEvent) => {
e.preventDefault();
const organization = email.split("@")[1].split(".")[0];
try {
const res = await signInApi(email, password, organization, fingerprint);
+ console.log('res: ', res);
if (res.message.message === "login successfull") {
setError("");
setOrganization(organization);
@@ -57,7 +56,10 @@ const UserAuth: React.FC = () => {
localStorage.setItem("refreshToken", res.message.refreshToken);
try {
+ console.log('res.message.userId: ', res.message.userId);
+ console.log('organization: ', organization);
const projects = await recentlyViewed(organization, res.message.userId);
+ console.log('projects: ', projects);
if (Object.values(projects.RecentlyViewed).length > 0) {
const firstId = (Object.values(projects?.RecentlyViewed || {})[0] as any)?._id;