From 91963ac6125fb5302a72367de4091451285abae5 Mon Sep 17 00:00:00 2001 From: Bhaskar Date: Thu, 5 Jun 2025 11:54:46 +0530 Subject: [PATCH] duplicate issues --- src/controllers/installationController.js | 157 +++++++++++++++------- 1 file changed, 109 insertions(+), 48 deletions(-) diff --git a/src/controllers/installationController.js b/src/controllers/installationController.js index c9ed074b..e2cb0ed4 100644 --- a/src/controllers/installationController.js +++ b/src/controllers/installationController.js @@ -4038,57 +4038,57 @@ const updateConnectedStatusOnly = async (customerId, hardwareId) => { -const raiseATicketLikeLogic = async (supportRecord, masterHardwareId, slaveData = []) => { - const now = new Date(); - const formattedNow = new Date(now.getTime() + 19800000) // +05:30 offset in ms - .toISOString() - .replace("T", " ") - .substring(0, 19); - - // Check if already categorized - const alreadyCategorized = supportRecord.categorizedIssues.some( - (catIssue) => catIssue.hardwareId === masterHardwareId - ); - - // Check if already raised and unresolved & not categorized - const alreadyRaisedUnresolved = supportRecord.issues.some( - (issue) => - issue.hardwareId === masterHardwareId && - issue.resolved === false && - issue.movedToCategory === false - ); - - if (alreadyCategorized) { - console.log(`⛔ Ticket for ${masterHardwareId} already categorized. Skipping.`); - return; - } - - if (alreadyRaisedUnresolved) { - console.log(`⛔ Unresolved ticket already exists for ${masterHardwareId}. Skipping.`); - return; - } +// const raiseATicketLikeLogic = async (supportRecord, masterHardwareId, slaveData = []) => { +// const now = new Date(); +// const formattedNow = new Date(now.getTime() + 19800000) // +05:30 offset in ms +// .toISOString() +// .replace("T", " ") +// .substring(0, 19); + +// // Check if already categorized +// const alreadyCategorized = supportRecord.categorizedIssues.some( +// (catIssue) => catIssue.hardwareId === masterHardwareId +// ); - const slaveHardwareIds = slaveData.map((slave) => slave.tankhardwareId); - const slaveNames = slaveData.map((slave) => slave.sensorName || slave.tankName || ""); +// // Check if already raised and unresolved & not categorized +// const alreadyRaisedUnresolved = supportRecord.issues.some( +// (issue) => +// issue.hardwareId === masterHardwareId && +// issue.resolved === false && +// issue.movedToCategory === false +// ); - const newIssue = { - type: "GSM or LoRa Disconnected", - masterHardwareId, - hardwareId: masterHardwareId, - hardwareIds: slaveHardwareIds, - slaveNames: slaveNames, - resolved: false, - movedToCategory: false, - lastTicketRaisedAt: formattedNow, - createdAt: formattedNow, - }; +// if (alreadyCategorized) { +// console.log(`⛔ Ticket for ${masterHardwareId} already categorized. Skipping.`); +// return; +// } - supportRecord.issues.push(newIssue); - supportRecord.lastTicketRaisedAt = formattedNow; +// if (alreadyRaisedUnresolved) { +// console.log(`⛔ Unresolved ticket already exists for ${masterHardwareId}. Skipping.`); +// return; +// } - await supportRecord.save(); - console.log(`✅ New ticket raised for ${masterHardwareId}`); -}; +// const slaveHardwareIds = slaveData.map((slave) => slave.tankhardwareId); +// const slaveNames = slaveData.map((slave) => slave.sensorName || slave.tankName || ""); + +// const newIssue = { +// type: "GSM or LoRa Disconnected", +// masterHardwareId, +// hardwareId: masterHardwareId, +// hardwareIds: slaveHardwareIds, +// slaveNames: slaveNames, +// resolved: false, +// movedToCategory: false, +// lastTicketRaisedAt: formattedNow, +// createdAt: formattedNow, +// }; + +// supportRecord.issues.push(newIssue); +// supportRecord.lastTicketRaisedAt = formattedNow; + +// await supportRecord.save(); +// console.log(`✅ New ticket raised for ${masterHardwareId}`); +// }; @@ -4304,6 +4304,67 @@ const raiseATicketLikeLogic = async (supportRecord, masterHardwareId, slaveData // } // }); +const raiseATicketLikeLogic = async (supportRecord, masterHardwareId, slaveData = []) => { + const now = new Date(); + const formattedNow = new Date(now.getTime() + 19800000) // +05:30 offset in ms + .toISOString() + .replace("T", " ") + .substring(0, 19); + + // Check if already categorized + const alreadyCategorized = supportRecord.categorizedIssues.some( + (catIssue) => catIssue.hardwareId === masterHardwareId + ); + if (alreadyCategorized) { + console.log(`⛔ Ticket for ${masterHardwareId} already categorized. Skipping.`); + return; + } + + // Prepare slave hardwareIds and names + const slaveHardwareIds = slaveData.map((slave) => slave.tankhardwareId).sort(); + const slaveNames = slaveData.map((slave) => slave.sensorName || slave.tankName || "").sort(); + + // Check for existing unresolved and not moved-to-category issue + const duplicateExists = supportRecord.issues.some((issue) => { + const existingSlaveIds = (issue.hardwareIds || []).sort(); + const existingSlaveNames = (issue.slaveNames || []).sort(); + + return ( + issue.hardwareId === masterHardwareId && + issue.masterHardwareId === masterHardwareId && + issue.resolved === false && + issue.movedToCategory === false && + JSON.stringify(existingSlaveIds) === JSON.stringify(slaveHardwareIds) && + JSON.stringify(existingSlaveNames) === JSON.stringify(slaveNames) + ); + }); + + if (duplicateExists) { + console.log(`⛔ Duplicate unresolved issue already exists for ${masterHardwareId}. Skipping.`); + return; + } + + // Create new issue + const newIssue = { + type: "GSM or LoRa Disconnected", + masterHardwareId, + hardwareId: masterHardwareId, + hardwareIds: slaveHardwareIds, + slaveNames: slaveNames, + resolved: false, + movedToCategory: false, + lastTicketRaisedAt: formattedNow, + createdAt: formattedNow, + }; + + supportRecord.issues.push(newIssue); + supportRecord.lastTicketRaisedAt = formattedNow; + + await supportRecord.save(); + console.log(`✅ New ticket raised for ${masterHardwareId}`); +}; + + cron.schedule("*/1 * * * *", async () => { try { console.log("🔁 Running auto-disconnect ticket check..."); @@ -4325,7 +4386,7 @@ cron.schedule("*/1 * * * *", async () => { if (!customerId || !hardwareId) continue; // ✅ Update GSM and LoRa connection statuses - // await updateConnectedStatusOnly(customerId, hardwareId); + await updateConnectedStatusOnly(customerId, hardwareId); // 🔄 Re-fetch updated master and slaves const updatedMaster = await Insensors.findOne({ hardwareId, customerId }).lean();