raise a ticket

master^2
Bhaskar 4 months ago
parent 839bac5146
commit 06abe34512

@ -3867,8 +3867,10 @@ const raiseATicketLikeLogic = async (customerId, connected_to) => {
const orders = await Order.find({ customerId }).lean(); const orders = await Order.find({ customerId }).lean();
if (!sensors.length) return; if (!sensors.length) return;
const normalizedConnectedTo = connected_to.trim().toLowerCase();
const masterSensor = sensors.find( const masterSensor = sensors.find(
s => s.hardwareId?.trim() === connected_to.trim() && s.type === "master" s => s.hardwareId?.trim().toLowerCase() === normalizedConnectedTo && s.type === "master"
); );
if (!masterSensor) return; if (!masterSensor) return;
@ -3885,23 +3887,23 @@ const raiseATicketLikeLogic = async (customerId, connected_to) => {
const now = moment.tz("Asia/Kolkata"); const now = moment.tz("Asia/Kolkata");
const masterConnectedStatus = masterSensor.connected_status || "disconnected"; const masterConnectedStatus = masterSensor.connected_status || "disconnected";
const lastDataTime = masterSensor.connected_gsm_date && masterSensor.connected_gsm_time const lastDataTime =
masterSensor.connected_gsm_date && masterSensor.connected_gsm_time
? `${masterSensor.connected_gsm_date} ${masterSensor.connected_gsm_time}` ? `${masterSensor.connected_gsm_date} ${masterSensor.connected_gsm_time}`
: "No data"; : "No data";
// Get all slaves connected to this master // Get all slaves connected to this master
const connectedSlaves = sensors.filter( const connectedSlaves = sensors.filter(
s => s.connected_to?.trim() === connected_to.trim() && s.type === "slave" s => s.connected_to?.trim().toLowerCase() === normalizedConnectedTo && s.type === "slave"
); );
const disconnectedSlaves = connectedSlaves.filter( const disconnectedSlaves = connectedSlaves
s => s.connected_status === "disconnected" .filter(s => s.connected_status === "disconnected")
).map(s => ({ .map(s => ({
slaveHardwareId: s.tankhardwareId, slaveHardwareId: s.tankhardwareId?.trim().toLowerCase(),
slaveName: s.tankName || "Unknown Slave" slaveName: s.tankName || "Unknown Slave"
})); }));
// No ticket needed if everything is connected
if (disconnectedSlaves.length === 0 && masterConnectedStatus === "connected") return; if (disconnectedSlaves.length === 0 && masterConnectedStatus === "connected") return;
const supportRecord = await Support.findOne({ supportId: "AWHYSU64" }); const supportRecord = await Support.findOne({ supportId: "AWHYSU64" });
@ -3911,42 +3913,47 @@ const raiseATicketLikeLogic = async (customerId, connected_to) => {
const unresolvedMasterIssue = existingIssues.find( const unresolvedMasterIssue = existingIssues.find(
issue => issue =>
issue.hardwareId === connected_to && issue.hardwareId?.trim().toLowerCase() === normalizedConnectedTo &&
issue.type === "GSM or LoRa Disconnected" && issue.type === "GSM or LoRa Disconnected" &&
issue.resolved === false issue.resolved === false
); );
// Skip raising a ticket if unresolved issue already exists
if (unresolvedMasterIssue) return; if (unresolvedMasterIssue) return;
const resolvedMasterIssue = existingIssues.find( // Check both unresolved and resolved issues for previously reported slaves
issue => const allSlaveHardwareIdsAlreadyReported = new Set();
issue.hardwareId === connected_to && existingIssues
issue.type === "GSM or LoRa Disconnected" && .filter(issue => issue.hardwareId?.trim().toLowerCase() === normalizedConnectedTo)
issue.resolved === true .forEach(issue => {
); (issue.hardwareIds || []).forEach(id => {
if (typeof id === "string") {
allSlaveHardwareIdsAlreadyReported.add(id.trim().toLowerCase());
}
});
});
const alreadyReportedSlaves = new Set(resolvedMasterIssue?.hardwareIds || []);
const newSlaveHardwareIds = []; const newSlaveHardwareIds = [];
const newSlaveNames = []; const newSlaveNames = [];
for (const slave of disconnectedSlaves) { for (const slave of disconnectedSlaves) {
if (!alreadyReportedSlaves.has(slave.slaveHardwareId)) { if (!allSlaveHardwareIdsAlreadyReported.has(slave.slaveHardwareId)) {
newSlaveHardwareIds.push(slave.slaveHardwareId); newSlaveHardwareIds.push(slave.slaveHardwareId);
newSlaveNames.push(slave.slaveName); newSlaveNames.push(slave.slaveName);
} }
} }
// Still raise the issue if master is disconnected, even if no new slaves
if (newSlaveHardwareIds.length === 0 && masterConnectedStatus === "connected") return;
const formattedNow = now.format("YYYY-MM-DD HH:mm:ss"); const formattedNow = now.format("YYYY-MM-DD HH:mm:ss");
// Raise a new issue
const newIssue = { const newIssue = {
type: "GSM or LoRa Disconnected", type: "GSM or LoRa Disconnected",
masterHardwareId: connected_to, masterHardwareId: normalizedConnectedTo,
hardwareId: connected_to, hardwareId: normalizedConnectedTo,
hardwareIds: newSlaveHardwareIds, hardwareIds: newSlaveHardwareIds,
slaveNames: newSlaveNames, slaveNames: newSlaveNames,
message: `Master ${connected_to} is ${masterConnectedStatus} with ${disconnectedSlaves.length} disconnected slave(s)`, message: `Master ${connected_to} is ${masterConnectedStatus} with ${newSlaveHardwareIds.length} disconnected slave(s)`,
disconnectedAt: lastDataTime, disconnectedAt: lastDataTime,
lastTicketRaisedAt: formattedNow, lastTicketRaisedAt: formattedNow,
resolved: false resolved: false
@ -3954,13 +3961,17 @@ const raiseATicketLikeLogic = async (customerId, connected_to) => {
await Support.findOneAndUpdate( await Support.findOneAndUpdate(
{ supportId: "AWHYSU64" }, { supportId: "AWHYSU64" },
{ $push: { issues: newIssue }, $set: { updatedAt: new Date() } } {
$push: { issues: newIssue },
$set: { updatedAt: new Date() }
}
); );
} catch (error) { } catch (error) {
console.error("Error in raiseATicketLikeLogic:", error); console.error("Error in raiseATicketLikeLogic:", error);
} }
}; };
;

Loading…
Cancel
Save