From ba3d721940e800b61aeba6f3c81d9af40be01c9c Mon Sep 17 00:00:00 2001 From: Blake Matthes Date: Thu, 27 Mar 2025 21:12:22 -0500 Subject: [PATCH] refactor(ocp): lots of work for rfid and dyco contorl --- .../ocp/controller/labeling/bookIn.ts | 41 ++++++----- .../ocp/controller/labeling/createLabel.ts | 30 +++++--- .../ocp/controller/labeling/getLabels.ts | 5 +- .../ocp/controller/labeling/labelProcess.ts | 21 ++++-- .../ocp/controller/labeling/manualLabelLog.ts | 52 ++++++++++++++ .../ocp/controller/lots/prolinkCheck.ts | 2 - .../services/ocp/controller/manualLabelLog.ts | 44 ------------ .../specialProcesses/dyco/plcConnection.ts | 45 +++++++++--- .../dyco/plcTags/labelerTag.ts | 50 +++++++++++-- .../dyco/plcTags/strapperFault.ts | 72 +++++++++++++++++++ server/services/ocp/ocpService.ts | 4 +- .../services/ocp/routes/labeling/getLabels.ts | 1 + .../ocp/routes/labeling/manualPrint.ts | 50 +++++++++++++ .../routes/{ => labeling}/manualPrintLog.ts | 23 ++++-- server/services/ocp/routes/printLabel.ts | 52 -------------- server/services/server/utils/settingsCheck.ts | 7 ++ .../querys/materialHelpers/labelInfo.ts | 3 +- server/services/sqlServer/querys/ocp/lots.ts | 2 +- server/services/tcpServer/tcpServer.ts | 18 +++-- 19 files changed, 360 insertions(+), 162 deletions(-) create mode 100644 server/services/ocp/controller/labeling/manualLabelLog.ts delete mode 100644 server/services/ocp/controller/manualLabelLog.ts create mode 100644 server/services/ocp/controller/specialProcesses/dyco/plcTags/strapperFault.ts create mode 100644 server/services/ocp/routes/labeling/manualPrint.ts rename server/services/ocp/routes/{ => labeling}/manualPrintLog.ts (71%) delete mode 100644 server/services/ocp/routes/printLabel.ts diff --git a/server/services/ocp/controller/labeling/bookIn.ts b/server/services/ocp/controller/labeling/bookIn.ts index 8d30179..31dfc41 100644 --- a/server/services/ocp/controller/labeling/bookIn.ts +++ b/server/services/ocp/controller/labeling/bookIn.ts @@ -10,7 +10,9 @@ export const bookInLabel = async (data: any) => { // update sscc so we can book in const SSCC = data.SSCC.slice(2); // api url - const url = await prodEndpointCreation("public/v1.0/Warehousing/BookIn"); + const url = await prodEndpointCreation( + "/public/v1.1/Manufacturing/ProductionControlling/BookIn" + ); // create bookin const newBookin = { @@ -26,12 +28,12 @@ export const bookInLabel = async (data: any) => { }, }); - if (res.data.Result !== 0) { + if (res.status != 200) { createLog( "error", "labeling", "ocp", - `${data.printer.name}, Error:${res.data.Message}` + `${data.printer[0].name}, Error:${res.data}` ); //printerUpdate(data.printer, 7, "Error while booking in."); @@ -44,7 +46,7 @@ export const bookInLabel = async (data: any) => { // update the label. try { - await db + const booked = await db .update(prodlabels) .set({ status: "Booked in", @@ -52,7 +54,22 @@ export const bookInLabel = async (data: any) => { }) .where( eq(prodlabels.runningNr, parseInt(data.SSCC.slice(10, -1))) - ); + ) + .returning({ runningNr: prodlabels.runningNr }); + + createLog( + "info", + "labeling", + "ocp", + `${booked[0].runningNr} , was just booked in.` + ); + + return { + success: true, + message: `${parseInt( + data.SSCC.slice(10, -1) + )}, was just booked in`, + }; } catch (error) { createLog( "error", @@ -61,24 +78,12 @@ export const bookInLabel = async (data: any) => { `Error creating new runningNumber in the DB.` ); } - - // label was booked in - createLog( - "info", - "labeling", - "ocp", - `${parseInt(data.SSCC.slice(10, -1))}, was just booked in` - ); - return { - success: true, - message: `${parseInt(data.SSCC.slice(10, -1))}, was just booked in`, - }; } catch (error) { createLog( "error", "labeling", "ocp", - `${data.printer.name}, "Error: ${error}` + `${data.printer[0].name}, "Error: ${error}` ); return { success: false, diff --git a/server/services/ocp/controller/labeling/createLabel.ts b/server/services/ocp/controller/labeling/createLabel.ts index 29f12cd..94fd667 100644 --- a/server/services/ocp/controller/labeling/createLabel.ts +++ b/server/services/ocp/controller/labeling/createLabel.ts @@ -43,7 +43,7 @@ export const createLabel = async (data: any, userPrinted: any) => { const plantToken = settingsData.filter((n) => n.name === "plantToken"); const newLabel = { scannerId: 99, - lotNr: data.LOT, + lotNr: data.lot, machineId: data.machineID, printerId: data.printerID, //layoutId: cartonCustomers.includes(data.CustomerId.toString()) ? data.cartonLabel : data.palletLabel, @@ -87,14 +87,24 @@ export const createLabel = async (data: any, userPrinted: any) => { let newlabel = res.data; try { - await db.insert(prodlabels).values({ - printerID: parseInt(printer[0]?.humanReadableId!, 10), - runningNr: parseInt(newlabel.SSCC.slice(10, -1)), - printerName: printer[0].name.toLowerCase(), - line: data.MachineLocation, - status: "printed", - add_user: userPrinted || "LST_System", - }); + const insertLabel = await db + .insert(prodlabels) + .values({ + printerID: parseInt(printer[0]?.humanReadableId!, 10), + runningNr: parseInt(newlabel.SSCC.slice(10, -1)), + printerName: printer[0].name.toLowerCase(), + line: data.MachineLocation, + status: "printed", + add_user: userPrinted || "LST_System", + }) + .returning({ runningNr: prodlabels.runningNr }); + + createLog( + "info", + "labeling", + "ocp", + `${insertLabel[0]?.runningNr} was just inserted into the db.` + ); } catch (error) { createLog( "error", @@ -119,7 +129,7 @@ export const createLabel = async (data: any, userPrinted: any) => { }; // check if we can remove labels or not - deleteLabels(); + //deleteLabels(); return { sucess: true, message: "Label created", data: returnData }; // returning label data to be able to book in if active } catch (error) { createLog( diff --git a/server/services/ocp/controller/labeling/getLabels.ts b/server/services/ocp/controller/labeling/getLabels.ts index d5ce5e3..5655485 100644 --- a/server/services/ocp/controller/labeling/getLabels.ts +++ b/server/services/ocp/controller/labeling/getLabels.ts @@ -1,4 +1,4 @@ -import { desc, lte, sql } from "drizzle-orm"; +import { desc, gte, lte, sql } from "drizzle-orm"; import { db } from "../../../../../database/dbclient.js"; import { prodlabels } from "../../../../../database/schema/prodLabels.js"; import { tryCatch } from "../../../../globalUtils/tryCatch.js"; @@ -8,7 +8,7 @@ export const getLabels = async (hours: string) => { .select() .from(prodlabels) .where( - lte( + gte( prodlabels.upd_date, sql.raw(`NOW() - INTERVAL '${hours} hours'`) ) @@ -27,6 +27,7 @@ export const getLabels = async (hours: string) => { return { success: true, message: "Current labels order by upd_Date.", + count: labelInfo.length, data: labelInfo, }; }; diff --git a/server/services/ocp/controller/labeling/labelProcess.ts b/server/services/ocp/controller/labeling/labelProcess.ts index 0f27fbb..5c5f848 100644 --- a/server/services/ocp/controller/labeling/labelProcess.ts +++ b/server/services/ocp/controller/labeling/labelProcess.ts @@ -50,9 +50,10 @@ export const labelingProcess = async ({ // if we got a line passed over we need to get the machine id from this. if (line) { const macId = await getMac(line); - // filter out the lot for the line - filteredLot = lots.data.filter((l: any) => l.machineId === macId); + filteredLot = lots.data.filter( + (l: any) => l.MachineID === macId[0].HumanReadableId + ); if (filteredLot.length === 0) { createLog( @@ -160,7 +161,10 @@ export const labelingProcess = async ({ `Main material is not prepaired for lot ${filteredLot[0].lot}` ); - return; + return { + success: false, + message: `Main material is not prepaired for lot ${filteredLot[0].lot}`, + }; } // comment only but will check for color @@ -198,16 +202,19 @@ export const labelingProcess = async ({ "ocp", `Prolink does not match for ${filteredLot[0].MachineDescription}` ); - return; + return { + success: false, + message: `Prolink does not match for ${filteredLot[0].MachineDescription}`, + }; } createLog("info", "labeling", "ocp", `Is prolink good? ${prolink}`); // create the label const label = await createLabel(filteredLot[0], userPrinted); - if (!label.success) { - return { sucess: false, message: label.message, data: label.data }; - } + // if (!label.success) { + // return { sucess: false, message: label.message, data: label.data }; + // } // send over to be booked in if we can do it. const bookin = settingData.filter((s) => s.name === "bookin"); diff --git a/server/services/ocp/controller/labeling/manualLabelLog.ts b/server/services/ocp/controller/labeling/manualLabelLog.ts new file mode 100644 index 0000000..5859344 --- /dev/null +++ b/server/services/ocp/controller/labeling/manualLabelLog.ts @@ -0,0 +1,52 @@ +import { db } from "../../../../../database/dbclient.js"; +import { manualPrinting } from "../../../../../database/schema/ocpManualPrint.js"; +import { tryCatch } from "../../../../globalUtils/tryCatch.js"; +import { manualTag } from "../../../rfid/controller/tags/manualTag.js"; +import { labelingProcess } from "./labelProcess.js"; + +export const manualPrint = async (manualPrint: any) => { + /** + * add the reason we did a manual print. + */ + + const manualPrintData = { + line: manualPrint.line, + printReason: manualPrint.printReason, + initials: manualPrint.initials, + additionalComments: manualPrint?.additionalComments, + add_user: "lst", + }; + + const { data, error } = await tryCatch( + db.insert(manualPrinting).values(manualPrintData).returning({ + line: manualPrinting.line, + printReason: manualPrinting.printReason, + initials: manualPrinting.initials, + additionalComments: manualPrinting?.additionalComments, + add_user: manualPrinting.add_user, + }) + ); + + if (error) { + return { + success: false, + message: "There was an error posting the manualPrintData", + data: error, + }; + } + + let label = await labelingProcess({ line: manualPrint.line }); + + if (manualPrint.rfidTag) { + manualTag( + manualPrint.rfidTag, + "wrapper1", + parseInt(label.data.SSCC.slice(10, -1)) + ); + } + return { + success: true, + message: "Log Entered label will be coming soon.", + data, + }; +}; diff --git a/server/services/ocp/controller/lots/prolinkCheck.ts b/server/services/ocp/controller/lots/prolinkCheck.ts index 4389164..4772b68 100644 --- a/server/services/ocp/controller/lots/prolinkCheck.ts +++ b/server/services/ocp/controller/lots/prolinkCheck.ts @@ -43,8 +43,6 @@ export const prolinkCheck = async (lot: any) => { // run the query try { const prolink = await query(prolinkQuery, "Prolink Checks"); - - //console.log(lot); // filter out the lot const filterdLot = prolink.filter( (p: any) => p.AlplaLabelOnline === lot diff --git a/server/services/ocp/controller/manualLabelLog.ts b/server/services/ocp/controller/manualLabelLog.ts deleted file mode 100644 index 9672dc8..0000000 --- a/server/services/ocp/controller/manualLabelLog.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { db } from "../../../../database/dbclient.js"; -import { manualPrinting } from "../../../../database/schema/ocpManualPrint.js"; -import { tryCatch } from "../../../globalUtils/tryCatch.js"; - -export const manualPrint = async (manualPrint: any) => { - /** - * add the reason we did a manual print. - */ - - const manualPrintData = { - line: manualPrint.line, - printReason: manualPrint.printReason, - initials: manualPrint.initials, - additionalComments: manualPrint?.additionalComments, - add_user: "lst", - }; - - const { data, error } = await tryCatch( - db - .insert(manualPrinting) - .values(manualPrintData) - .returning({ - line: manualPrinting.line, - printReason: manualPrinting.printReason, - initials: manualPrinting.initials, - additionalComments: manualPrinting?.additionalComments, - add_user: manualPrinting.add_user, - }) - ); - - if (error) { - return { - success: false, - message: "There was an error posting the manualPrintData", - data: error, - }; - } - - return { - success: true, - message: "There was an error posting the manualPrintData", - data, - }; -}; diff --git a/server/services/ocp/controller/specialProcesses/dyco/plcConnection.ts b/server/services/ocp/controller/specialProcesses/dyco/plcConnection.ts index 47257a8..5a14403 100644 --- a/server/services/ocp/controller/specialProcesses/dyco/plcConnection.ts +++ b/server/services/ocp/controller/specialProcesses/dyco/plcConnection.ts @@ -2,13 +2,14 @@ import { Controller, Tag } from "st-ethernet-ip"; import { createLog } from "../../../../logger/logger.js"; import { labelerTagRead } from "./plcTags/labelerTag.js"; import { palletSendTag } from "./plcTags/palletSendTag.js"; +import { strapperFaults } from "./plcTags/strapperFault.js"; let PLC = new Controller(); let isDycoRunning = false; // PLC address let plcAddress = "10.44.5.4"; - +let isReading = false; // Initialize the interval variable outside the function let plcCycle: any; let plcInterval = 500; @@ -31,17 +32,42 @@ export const dycoConnect = async () => { await PLC.connect(plcAddress, 0).then(async () => { createLog("info", "dyco", "ocp", `We are connected to the dyco.`); isDycoRunning = true; - let buffer = ""; + plcCycle = setInterval(async () => { - await PLC.readTag(labelerTag); - await PLC.readTag(palletSend); + if (isReading) { + createLog( + "warn", + "dyco", + "ocp", + "Skipping cycle: previous read still in progress." + ); + return; + } + isReading = true; // Set flag + try { + await PLC.readTag(labelerTag); + await PLC.readTag(palletSend); + await PLC.readTag(strapperError); - // send the labeler tag data over - labelerTagRead(labelerTag); + // strapper check + strapperFaults(strapperError); - // send the end of line check over. - palletSendTag(palletSend); - }, 500); + // send the labeler tag data over + labelerTagRead(labelerTag); + + // send the end of line check over. + palletSendTag(palletSend); + } catch (error: any) { + createLog( + "error", + "dyco", + "ocp", + `Error reading PLC tag: ${error.message}` + ); + } finally { + isReading = false; // Reset flag + } + }, plcInterval); }); } catch (error) { createLog( @@ -50,6 +76,7 @@ export const dycoConnect = async () => { "ocp", `There was an error in the dyco: ${error}` ); + await PLC.disconnect(); isDycoRunning = false; } }; diff --git a/server/services/ocp/controller/specialProcesses/dyco/plcTags/labelerTag.ts b/server/services/ocp/controller/specialProcesses/dyco/plcTags/labelerTag.ts index a3435d9..727e92b 100644 --- a/server/services/ocp/controller/specialProcesses/dyco/plcTags/labelerTag.ts +++ b/server/services/ocp/controller/specialProcesses/dyco/plcTags/labelerTag.ts @@ -4,7 +4,10 @@ import { tryCatch } from "../../../../../../globalUtils/tryCatch.js"; import { createLog } from "../../../../../logger/logger.js"; import { readTags } from "../../../../../rfid/controller/readTags.js"; import { labelingProcess } from "../../../labeling/labelProcess.js"; +import { stapperFaulted, strapperFaults } from "./strapperFault.js"; +export let cameraPalletCheck = 20; +export let currentPalletCheck = 0; let lastProcessedTimestamp = 0; export const labelerTagRead = async (tagData: any) => { @@ -41,11 +44,48 @@ export const labelerTagRead = async (tagData: any) => { // Only process if this is a new timestamp within the last 5 seconds if (tagTime !== lastProcessedTimestamp && Date.now() - tagTime <= 5000) { lastProcessedTimestamp = tagTime; - //console.log(numericString, tagData.state.timestamp); + /** + * add logic in to see if this is the first time we run this so we return an error to validate we are in sync. + */ + createLog( + "info", + "dyco", + "ocp", + `Current pallet at the wrapper is: ${numericString}` + ); if (dycoPrint[0].value === "1") { createLog("info", "dyco", "ocp", "Dyco will be printing the label"); - // send over to print. - labelingProcess({ line: numericString }); + // if (!dycoControlCheck) { + // createLog( + // "error", + // "dyco", + // "ocp", + // `Dyco was switch to be the printer guys. please validate the line is in sync, Current line is ${numericString}` + // ); + // dycoControlCheck = true; + // return; + // } + + // check the stapper error logic. + + if (stapperFaulted) { + createLog("error", "dyco", "ocp", `Strapper is faulted.`); + return; + } + + // check if we need to manual check due to 20 pallets. + if (currentPalletCheck <= cameraPalletCheck) { + currentPalletCheck = currentPalletCheck + 1; + labelingProcess({ line: numericString }); + } else { + currentPalletCheck = 0; + createLog( + "error", + "dyco", + "ocp", + `You have reached 20 pallets since the last check please validate the labeler is still in sync.` + ); + } } if (dycoPrint[0].value === "0") { @@ -56,7 +96,9 @@ export const labelerTagRead = async (tagData: any) => { "Rfid system is contorlling the printing" ); // trigger the reader so we can get the label from the tag readers. - await readTags("wrapper1"); + setTimeout(async () => { + await readTags("wrapper1"); + }, 2 * 1000); } } }; diff --git a/server/services/ocp/controller/specialProcesses/dyco/plcTags/strapperFault.ts b/server/services/ocp/controller/specialProcesses/dyco/plcTags/strapperFault.ts new file mode 100644 index 0000000..74ae031 --- /dev/null +++ b/server/services/ocp/controller/specialProcesses/dyco/plcTags/strapperFault.ts @@ -0,0 +1,72 @@ +import { db } from "../../../../../../../database/dbclient.js"; +import { settings } from "../../../../../../../database/schema/settings.js"; +import { tryCatch } from "../../../../../../globalUtils/tryCatch.js"; +import { createLog } from "../../../../../logger/logger.js"; + +// strapper related issues +export let strapperActive = true; +export let stapperFaulted = false; +export let strapperFaultCount = 3; // move to db so we can control it outside the app + +export const strapperFaults = async (tagData: any) => { + const { data, error } = await tryCatch(db.select().from(settings)); + + if (error) { + return { success: false, message: "Failed to get settings." }; + } + + if (strapperActive) { + // monitor strapper + //console.log(`Strapper fault is ${strapperError.value}`); + if (tagData.value && strapperFaultCount > 0) { + // strapper faulted we want to start the trigger to force the check + if (!stapperFaulted) { + createLog( + "error", + "dyco", + "ocp", + `Strapper errored triggering manual checks will be required for the next ${strapperFaultCount}` + ); + } + + stapperFaulted = true; + + // change move fault count to db.... + strapperFaultCount = 3; + } + } + + const strapperCheckSetting = data.filter((n) => n.name === "strapperCheck"); + + if (strapperCheckSetting[0]?.value === "1") { + if (stapperFaulted && strapperFaultCount > 0) { + createLog( + "warn", + "dyco", + "ocp", + `There was a strapper error, remaining pallets to check ${strapperFaultCount}.` + ); + strapperFaultCount = strapperFaultCount - 1; + return { + success: false, + message: `There was a strapper error, remaining pallets to check ${strapperFaultCount}.`, + }; + } else { + createLog( + "debug", + "dyco", + "ocp", + `Strapper check is active but not faulted, remaining pallets to check ${strapperFaultCount}.` + ); + + // reset everything + stapperFaulted = false; + strapperFaultCount = 3; // move to db as well + + return { + success: true, + message: `Strapper check is active but not faulted, remaining pallets to check ${strapperFaultCount}.`, + }; + } + } +}; diff --git a/server/services/ocp/ocpService.ts b/server/services/ocp/ocpService.ts index 99a4820..b106ee8 100644 --- a/server/services/ocp/ocpService.ts +++ b/server/services/ocp/ocpService.ts @@ -1,7 +1,7 @@ import { OpenAPIHono } from "@hono/zod-openapi"; // routes -import manualLabelLog from "./routes/manualPrintLog.js"; +import manualLabelLog from "./routes/labeling/manualPrintLog.js"; import getPrinters from "./routes/printers/getPritners.js"; import { db } from "../../../database/dbclient.js"; import { settings } from "../../../database/schema/settings.js"; @@ -12,6 +12,7 @@ import getLabels from "./routes/labeling/getLabels.js"; import { dycoConnect } from "./controller/specialProcesses/dyco/plcConnection.js"; import dycoCon from "./routes/specialProcesses/dyco/connection.js"; import dycoClose from "./routes/specialProcesses/dyco/closeConnection.js"; +import manualprint from "./routes/labeling/manualPrint.js"; const app = new OpenAPIHono(); @@ -24,6 +25,7 @@ const routes = [ getLots, // labeling getLabels, + manualprint, //dyco dycoCon, dycoClose, diff --git a/server/services/ocp/routes/labeling/getLabels.ts b/server/services/ocp/routes/labeling/getLabels.ts index f1950b8..4252293 100644 --- a/server/services/ocp/routes/labeling/getLabels.ts +++ b/server/services/ocp/routes/labeling/getLabels.ts @@ -30,6 +30,7 @@ app.openapi( return c.json({ success: labelData.success, message: labelData.message, + count: labelData.count, data: labelData.data, }); } diff --git a/server/services/ocp/routes/labeling/manualPrint.ts b/server/services/ocp/routes/labeling/manualPrint.ts new file mode 100644 index 0000000..e89292f --- /dev/null +++ b/server/services/ocp/routes/labeling/manualPrint.ts @@ -0,0 +1,50 @@ +// an external way to creating logs +import { createRoute, OpenAPIHono, z } from "@hono/zod-openapi"; +import { responses } from "../../../../globalUtils/routeDefs/responses.js"; +import { tryCatch } from "../../../../globalUtils/tryCatch.js"; +import { labelingProcess } from "../../controller/labeling/labelProcess.js"; + +const app = new OpenAPIHono({ strict: false }); + +app.openapi( + createRoute({ + tags: ["ocp"], + summary: "Manual print a label by line and printer name", + method: "post", + path: "/manualprintandfollow", + responses: responses(), + }), + async (c) => { + //const hours = c.req.query("hours"); + const { data: bodyData, error: bodyError } = await tryCatch( + c.req.json() + ); + + if (bodyError) { + return c.json({ + success: false, + message: "You are missing data", + }); + } + + const { data: createLabel, error: labelError } = await tryCatch( + labelingProcess({ line: bodyData.line }) + ); + + if (labelError) { + return c.json({ + success: false, + message: "There was an error creating the label.", + data: labelError, + }); + } + + const newLabel: any = createLabel; + return c.json({ + success: newLabel.success, + message: newLabel.message, + data: newLabel.data, + }); + } +); +export default app; diff --git a/server/services/ocp/routes/manualPrintLog.ts b/server/services/ocp/routes/labeling/manualPrintLog.ts similarity index 71% rename from server/services/ocp/routes/manualPrintLog.ts rename to server/services/ocp/routes/labeling/manualPrintLog.ts index 1638f9f..9b10e2c 100644 --- a/server/services/ocp/routes/manualPrintLog.ts +++ b/server/services/ocp/routes/labeling/manualPrintLog.ts @@ -1,11 +1,12 @@ // an external way to creating logs import { createRoute, OpenAPIHono, z } from "@hono/zod-openapi"; -import { apiHit } from "../../../globalUtils/apiHits.js"; -import { responses } from "../../../globalUtils/routeDefs/responses.js"; -import type { User } from "../../../types/users.js"; +import { apiHit } from "../../../../globalUtils/apiHits.js"; +import { responses } from "../../../../globalUtils/routeDefs/responses.js"; +import type { User } from "../../../../types/users.js"; import { verify } from "hono/jwt"; -import { manualPrint } from "../controller/manualLabelLog.js"; -import { authMiddleware } from "../../auth/middleware/authMiddleware.js"; +import { manualPrint } from "../../controller/labeling/manualLabelLog.js"; +import { authMiddleware } from "../../../auth/middleware/authMiddleware.js"; +import { tryCatch } from "../../../../globalUtils/tryCatch.js"; const app = new OpenAPIHono({ strict: false }); const CreateLog = z.object({ @@ -32,7 +33,17 @@ app.openapi( responses: responses(), }), async (c) => { - const body = await c.req.json(); + const { data: body, error } = await tryCatch(c.req.json()); + + if (error) { + return c.json( + { + success: false, + message: "Missing Data.", + }, + 400 + ); + } apiHit(c, { endpoint: `api/logger/logs/id` }); try { //const data = {...body, add_user: user.username}; diff --git a/server/services/ocp/routes/printLabel.ts b/server/services/ocp/routes/printLabel.ts deleted file mode 100644 index 1d150c7..0000000 --- a/server/services/ocp/routes/printLabel.ts +++ /dev/null @@ -1,52 +0,0 @@ -// an external way to creating logs -import {createRoute, OpenAPIHono, z} from "@hono/zod-openapi"; -import {apiHit} from "../../../globalUtils/apiHits.js"; -import {responses} from "../../../globalUtils/routeDefs/responses.js"; - -const app = new OpenAPIHono({strict: false}); -const CreateLog = z.object({ - line: z.string().openapi({example: "info"}), - initials: z.string().openapi({example: "server"}), - printReason: z.string().openapi({example: "This is a new log posted"}), - additionalComments: z.string().optional().openapi({example: "Some reason why we did this."}), -}); - -app.openapi( - createRoute({ - tags: ["ocp"], - summary: "Prints a label.", - method: "post", - path: "/printlabel", - //middleware: authMiddleware, - //description: "This might be a temp soltuin during the transtion between versions", - request: { - body: {content: {"application/json": {schema: CreateLog}}}, - }, - responses: responses(), - }), - async (c) => { - const body = await c.req.json(); - apiHit(c, {endpoint: `api/logger/logs/id`}); - // const authHeader = c.req.header("Authorization"); - - // const token = authHeader?.split("Bearer ")[1] || ""; - // let user: User; - - // try { - // const payload = await verify(token, process.env.JWT_SECRET!); - // user = payload.user as User; - // } catch (error) { - // console.log(error); - // return c.json({message: "Unauthorized"}, 401); - // } - - try { - //const data = {...body, add_user: user.username}; - - return c.json({success: true, message: "Label was printed.", data: []}, 200); - } catch (error) { - return c.json({success: false, message: "There was an error printing a label.", data: error}, 400); - } - } -); -export default app; diff --git a/server/services/server/utils/settingsCheck.ts b/server/services/server/utils/settingsCheck.ts index 1d19b26..409b37c 100644 --- a/server/services/server/utils/settingsCheck.ts +++ b/server/services/server/utils/settingsCheck.ts @@ -168,6 +168,13 @@ const newSettings = [ roles: "admin", module: "ocp", }, + { + name: "strapperCheck", + value: "1", + description: "Are we monitoring the strapper for faults?", + roles: "admin", + module: "ocp", + }, ]; export const areSettingsIn = async () => { // get the roles diff --git a/server/services/sqlServer/querys/materialHelpers/labelInfo.ts b/server/services/sqlServer/querys/materialHelpers/labelInfo.ts index 4892cf6..d8ffcd7 100644 --- a/server/services/sqlServer/querys/materialHelpers/labelInfo.ts +++ b/server/services/sqlServer/querys/materialHelpers/labelInfo.ts @@ -16,5 +16,6 @@ left join alplaprod_test1.dbo.T_Maschine as m on e.IdMaschine = m.IdMaschine -where x.lfdnr = [rn] and x.IdWarenlager not in(6) +where x.lfdnr = [rn] +--and x.IdWarenlager not in(6) `; diff --git a/server/services/sqlServer/querys/ocp/lots.ts b/server/services/sqlServer/querys/ocp/lots.ts index cfafbdb..580cf17 100644 --- a/server/services/sqlServer/querys/ocp/lots.ts +++ b/server/services/sqlServer/querys/ocp/lots.ts @@ -3,7 +3,7 @@ select IdMaschinen_ProdPlanung as LabelOnlineID, IdMaschine as machineID, MaschinenStandort as MachineLocation, MaschinenBez as MachineDescription, - IdProdPlanung as LOT, + IdProdPlanung as lot, prolink.lot as ProlinkLot, IdArtikelvarianten as AV, ArtikelVariantenBez as Alias, diff --git a/server/services/tcpServer/tcpServer.ts b/server/services/tcpServer/tcpServer.ts index 4811115..e7d5d9b 100644 --- a/server/services/tcpServer/tcpServer.ts +++ b/server/services/tcpServer/tcpServer.ts @@ -14,6 +14,9 @@ let tcpServer: net.Server; let tcpSockets: Set = new Set(); let isServerRunning = false; +/** + * add in proper logging + */ const tcpPort = await db .select() .from(settings) @@ -25,14 +28,19 @@ export const startTCPServer = () => { return { success: false, message: "Server is already running" }; tcpServer = net.createServer((socket) => { - console.log("Client connected"); + createLog("info", "tcp", "tcp", "Client connected"); tcpSockets.add(socket); socket.on("data", (data: Buffer) => { - console.log("Received:", data.toString()); const parseData = data.toString("utf-8").trimEnd().split(" "); // hb from the scanners if (parseData[0] === "HB") { + createLog( + "debug", + "tcp", + "tcp", + `Received:", ${data.toString()}` + ); return; } @@ -46,12 +54,12 @@ export const startTCPServer = () => { }); socket.on("end", () => { - console.log("Client disconnected"); + createLog("info", "tcp", "tcp", "Client disconnected"); tcpSockets.delete(socket); }); socket.on("error", (err: Error) => { - console.error("Socket error:", err); + createLog("info", "tcp", "tcp", `Socket error:", ${err}`); tcpSockets.delete(socket); }); }); @@ -78,7 +86,7 @@ export const stopTCPServer = () => { } tcpSockets.clear(); tcpServer.close(() => { - console.log("TCP Server stopped"); + createLog("info", "tcp", "tcp", "TCP Server stopped"); }); isServerRunning = false; return { success: true, message: "TCP Server stopped" };