87 lines
3.3 KiB
JavaScript
87 lines
3.3 KiB
JavaScript
// ===== RESTORE SESSION =====
|
|
// This function is called when user clicks "Restore Session" button
|
|
// msg.payload should contain the session data from the recovery prompt
|
|
|
|
const sessionData = msg.payload;
|
|
|
|
if (!sessionData || !sessionData.session_id) {
|
|
node.error("No valid session data provided for restoration");
|
|
msg.error = "Invalid session data";
|
|
return [null, msg]; // Output 2: error message
|
|
}
|
|
|
|
try {
|
|
// Restore global context variables
|
|
global.set("currentSessionId", sessionData.session_id);
|
|
global.set("productionStartTime", sessionData.production_start_time);
|
|
global.set("operatingTime", sessionData.operating_time || 0);
|
|
global.set("trackingEnabled", sessionData.tracking_enabled === 1);
|
|
global.set("cycleCount", sessionData.cycle_count || 0);
|
|
global.set("machineOnline", sessionData.machine_online === 1);
|
|
global.set("productionStarted", sessionData.production_started === 1);
|
|
global.set("lastCycleTime", sessionData.last_cycle_time);
|
|
|
|
// Restore flow context variables
|
|
flow.set("lastMachineState", sessionData.last_machine_state || 0);
|
|
|
|
// Restore active work order if exists
|
|
if (sessionData.active_work_order_data) {
|
|
try {
|
|
const workOrder = typeof sessionData.active_work_order_data === 'string'
|
|
? JSON.parse(sessionData.active_work_order_data)
|
|
: sessionData.active_work_order_data;
|
|
global.set("activeWorkOrder", workOrder);
|
|
|
|
// Also need to update work order status in database
|
|
const updateMsg = {
|
|
topic: `
|
|
UPDATE work_orders
|
|
SET status = 'RUNNING', updated_at = NOW()
|
|
WHERE work_order_id = '${workOrder.id}';
|
|
`,
|
|
_mode: "restore-work-order-status"
|
|
};
|
|
|
|
node.warn(`Session restored: ${sessionData.session_id} | Work Order: ${workOrder.id} | Cycles: ${sessionData.cycle_count}`);
|
|
|
|
msg._recoveryStatus = "restored";
|
|
msg.payload = {
|
|
success: true,
|
|
type: "success",
|
|
message: `Session restored successfully! Work Order ${workOrder.id} is now active with ${sessionData.cycle_count} cycles completed.`,
|
|
sessionId: sessionData.session_id,
|
|
workOrder: workOrder
|
|
};
|
|
|
|
return [updateMsg, msg]; // Output 1: DB update, Output 2: success message
|
|
|
|
} catch (e) {
|
|
node.error("Failed to parse work order data: " + e.message);
|
|
throw e;
|
|
}
|
|
} else {
|
|
// No active work order in session
|
|
node.warn(`Session restored: ${sessionData.session_id} | No active work order`);
|
|
|
|
msg._recoveryStatus = "restored-no-wo";
|
|
msg.payload = {
|
|
success: true,
|
|
type: "info",
|
|
message: "Session restored, but no active work order was found. You can start a new work order.",
|
|
sessionId: sessionData.session_id
|
|
};
|
|
|
|
return [null, msg]; // Output 2: info message
|
|
}
|
|
|
|
} catch (error) {
|
|
node.error("Error restoring session: " + error.message);
|
|
msg._recoveryStatus = "restore-failed";
|
|
msg.payload = {
|
|
success: false,
|
|
type: "error",
|
|
message: "Failed to restore session: " + error.message
|
|
};
|
|
return [null, msg]; // Output 2: error message
|
|
}
|