Merge remote-tracking branch 'origin/v3-refactor' into v3
This commit is contained in:
commit
2f8fdfd46f
|
@ -60,9 +60,8 @@ const ZoneProperties: React.FC = () => {
|
|||
};
|
||||
// Call your API to update the zone
|
||||
let response = await zoneCameraUpdate(zonesdata, organization, projectId);
|
||||
console.log('response: ', response);
|
||||
// console.log("response: ", response);
|
||||
if (response.message === "zone updated") {
|
||||
setSelectedZone((prev) => ({ ...prev, zoneName: newName }));
|
||||
setZones((prevZones: any[]) =>
|
||||
prevZones.map((zone) =>
|
||||
zone.zoneUuid === selectedZone.zoneUuid
|
||||
|
|
|
@ -91,10 +91,13 @@ const ThroughputSummary: React.FC = () => {
|
|||
const [isLoading, setIsLoading] = useState(true);
|
||||
|
||||
useEffect(() => {
|
||||
// console.log('productionCapacityData > 0: ', productionCapacityData > 0);
|
||||
//
|
||||
if (productionCapacityData > 0) {
|
||||
setTimeout(() => {
|
||||
|
||||
setIsLoading(false);
|
||||
console.log("productionCapacityData: ", productionCapacityData);
|
||||
}, 3000)
|
||||
|
||||
} else {
|
||||
setIsLoading(true);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
setTimeout(() => {
|
||||
setIsLoading(false);
|
||||
}, 4500)
|
||||
} else {
|
||||
// If productName is empty, assume still loading
|
||||
setIsLoading(true);
|
||||
|
|
|
@ -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 = ({
|
|||
<ThroughputSummaryIcon />
|
||||
</div>
|
||||
</div>
|
||||
{isLoading ? (
|
||||
{!isLoading ? (
|
||||
<>
|
||||
<div className="process-container">
|
||||
<div className="throughput-value">
|
||||
|
|
|
@ -119,16 +119,13 @@ const List: React.FC<ListProps> = ({ 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);
|
||||
if (response.message === "zone updated") {
|
||||
setSelectedZone((prev) => ({ ...prev, zoneName: newName }));
|
||||
|
||||
setZones((prevZones: any[]) =>
|
||||
prevZones.map((zone) =>
|
||||
zone.zoneUuid === selectedZone.zoneUuid
|
||||
|
|
|
@ -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(() => {
|
||||
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
|
||||
setMaterialCycleTime(Number(totalCycleTime.toFixed(2))); // Set the material cycle time in the store
|
||||
totalCycleTimeSum += totalCycleTime;
|
||||
cycleCount++;
|
||||
});
|
||||
}, [materialHistory]);
|
||||
|
||||
|
||||
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 (
|
||||
<>
|
||||
</>
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -38,13 +38,12 @@ const UserAuth: React.FC = () => {
|
|||
|
||||
const { userId, organization } = getUserData();
|
||||
|
||||
|
||||
|
||||
const handleLogin = async (e: FormEvent<HTMLFormElement>) => {
|
||||
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;
|
||||
|
|
Loading…
Reference in New Issue