MVP
This commit is contained in:
82
issue.txt
Normal file
82
issue.txt
Normal file
@@ -0,0 +1,82 @@
|
||||
4) Machine cycles: fix cavities read
|
||||
|
||||
You currently have:
|
||||
|
||||
const cavities = Number(global.get("moldActive") || 0);
|
||||
|
||||
|
||||
If moldActive is an object, Number(obj) → NaN.
|
||||
|
||||
✔️ Use the property:
|
||||
const cavities = Number((global.get("moldActive") || {}).cavities) || 1;
|
||||
|
||||
|
||||
Also guard negative produced:
|
||||
|
||||
const produced = Math.max(0, totalProduced - scrapTotal);
|
||||
|
||||
🧱 5) ID consistency in SQL
|
||||
|
||||
In your flow, SQL uses work_order_id. In your start-tracking example inside “Work Order buttons”, you used WHERE id = ....
|
||||
|
||||
✔️ Make them consistent (use work_order_id):
|
||||
topic: `UPDATE work_orders SET production_start_time = ${now}, is_tracking = 1 WHERE work_order_id = '${activeOrder.id}'`
|
||||
|
||||
|
||||
Same consistency in resume/restart and persist queries.
|
||||
|
||||
🧰 6) Format Graph Data: keep messages clean to UI
|
||||
|
||||
Before returning to the template, strip SQL fields so nothing accidentally loops into DB:
|
||||
|
||||
delete msg.topic;
|
||||
delete msg.payload;
|
||||
return msg;
|
||||
|
||||
🧯 7) MariaDB guard
|
||||
|
||||
You already create two Switch nodes. Keep the rule:
|
||||
|
||||
Property: msg.topic
|
||||
|
||||
Rule: is type → string
|
||||
|
||||
And wire every DB path through it (graphs fetch + cycles persist). That eliminates the “query is not defined as a string” spam.
|
||||
|
||||
✂️ Minimal diffs you’ll likely want
|
||||
Machine cycles (core lines)
|
||||
const cavities = Number((global.get("moldActive") || {}).cavities) || 1;
|
||||
// ...
|
||||
const produced = Math.max(0, totalProduced - scrapTotal);
|
||||
// ...
|
||||
const persistCycleCount = {
|
||||
topic: "UPDATE work_orders SET cycle_count = ?, good_parts = ? WHERE work_order_id = ?",
|
||||
payload: [cycles, produced, activeOrder.id]
|
||||
};
|
||||
|
||||
Fetch Graph Data (SELECT list)
|
||||
msg.topic = `
|
||||
SELECT work_order_id, status, good_parts, scrap_parts, progress_percent,
|
||||
target_quantity, updated_at, cycle_count
|
||||
FROM work_orders
|
||||
WHERE updated_at >= NOW() - ${interval}
|
||||
ORDER BY updated_at ASC
|
||||
`;
|
||||
|
||||
Format Graph Data (efficiency + cleanup)
|
||||
const good = Number(row.good_parts) || 0;
|
||||
const target = Number(row.target_quantity) || 0;
|
||||
let eff = (row.progress_percent != null)
|
||||
? Number(row.progress_percent)
|
||||
: (target > 0 ? (good / target) * 100 : 0);
|
||||
eff = Math.min(100, Math.max(0, eff));
|
||||
efficiencyData.push(eff);
|
||||
|
||||
// before return:
|
||||
delete msg.topic;
|
||||
delete msg.payload;
|
||||
return msg;
|
||||
|
||||
Work Order buttons (“start-tracking” WHERE clause)
|
||||
topic: `UPDATE work_orders SET production_start_time = ${now}, is_tracking = 1
|
||||
WHERE work_order_id = '${activeOrder.id}'`,
|
||||
Reference in New Issue
Block a user