raise a ticket for support

master^2
Bhaskar 5 months ago
parent 3993e623d8
commit 41406d2090

@ -2845,97 +2845,118 @@ exports.getIotDataByCustomerAndHardwareId = async (req, reply) => {
//const moment = require("moment-timezone"); //const moment = require("moment-timezone");
exports.raiseATicket = async (req, reply) => { // exports.raiseATicket = async (req, reply) => {
try { // try {
const { customerId, connected_to } = req.params; // const { customerId, connected_to } = req.params;
if (!customerId || !connected_to) { // if (!customerId || !connected_to) {
return reply.code(400).send({ error: "customerId and connected_to are required" }); // return reply.code(400).send({ error: "customerId and connected_to are required" });
} // }
const sensors = await Insensors.find({ customerId }).lean(); // const sensors = await Insensors.find({ customerId }).lean();
const orders = await Order.find({ customerId }).lean(); // const orders = await Order.find({ customerId }).lean();
if (!sensors.length) { // if (!sensors.length) {
return reply.code(404).send({ message: "No sensors found for this customer." }); // return reply.code(404).send({ message: "No sensors found for this customer." });
} // }
const masterSensor = sensors.find(s => s.hardwareId?.trim() === connected_to.trim() && s.type === "master"); // const masterSensor = sensors.find(s => s.hardwareId?.trim() === connected_to.trim() && s.type === "master");
if (!masterSensor) { // if (!masterSensor) {
return reply.code(404).send({ message: "Master hardwareId not found." }); // return reply.code(404).send({ message: "Master hardwareId not found." });
} // }
const orderMap = {}; // const orderMap = {};
orders.forEach(order => { // orders.forEach(order => {
order.master_connections.forEach(conn => { // order.master_connections.forEach(conn => {
orderMap[conn.hardwareId] = { // orderMap[conn.hardwareId] = {
masterName: conn.master_name || null, // masterName: conn.master_name || null,
location: conn.location || null // location: conn.location || null
}; // };
}); // });
}); // });
const now = moment.tz("Asia/Kolkata"); // const now = moment.tz("Asia/Kolkata");
function getDisconnectDuration(timeStr) { // function getDisconnectDuration(timeStr) {
if (!timeStr) return null; // if (!timeStr) return null;
const time = moment.tz(timeStr, "DD-MM-YYYY HH:mm:ss", "Asia/Kolkata"); // const time = moment.tz(timeStr, "DD-MM-YYYY HH:mm:ss", "Asia/Kolkata");
return time.isValid() ? now.diff(time, "minutes") : null; // return time.isValid() ? now.diff(time, "minutes") : null;
} // }
const latestMasterRecord = await IotData.findOne({ hardwareId: connected_to }).sort({ date: -1 }).lean(); // const latestMasterRecord = await IotData.findOne({ hardwareId: connected_to }).sort({ date: -1 }).lean();
let masterConnectedStatus = "disconnected"; // let masterConnectedStatus = "disconnected";
let lastDataTime = "No data"; // let lastDataTime = "No data";
let diffInMinutes = null; // let diffInMinutes = null;
if (latestMasterRecord?.date) { // if (latestMasterRecord?.date) {
const indiaTime = moment.tz(latestMasterRecord.date, "Asia/Kolkata"); // const indiaTime = moment.tz(latestMasterRecord.date, "Asia/Kolkata");
diffInMinutes = now.diff(indiaTime, "minutes"); // diffInMinutes = now.diff(indiaTime, "minutes");
lastDataTime = indiaTime.format("DD-MM-YYYY HH:mm:ss"); // lastDataTime = indiaTime.format("DD-MM-YYYY HH:mm:ss");
if (diffInMinutes <= 1) masterConnectedStatus = "connected"; // if (diffInMinutes <= 1) masterConnectedStatus = "connected";
} // }
const connectedSlaves = sensors.filter( // const connectedSlaves = sensors.filter(
s => s.connected_to?.trim() === connected_to.trim() && s.type === "slave" // s => s.connected_to?.trim() === connected_to.trim() && s.type === "slave"
); // );
const formattedSlaves = []; // const formattedSlaves = [];
const disconnectedSlaves = []; // const disconnectedSlaves = [];
for (const slave of connectedSlaves) { // for (const slave of connectedSlaves) {
const slaveData = latestMasterRecord?.tanks.find(t => t.tankhardwareId === slave.tankhardwareId); // const slaveData = latestMasterRecord?.tanks.find(t => t.tankhardwareId === slave.tankhardwareId);
let slaveStatus = "disconnected"; // let slaveStatus = "disconnected";
let lastSlaveDataTime = "No data"; // let lastSlaveDataTime = "No data";
let slaveDiff = null; // let slaveDiff = null;
if (slaveData?.date) { // if (slaveData?.date) {
const slaveTime = moment.tz(slaveData.date, "Asia/Kolkata"); // const slaveTime = moment.tz(slaveData.date, "Asia/Kolkata");
slaveDiff = now.diff(slaveTime, "minutes"); // slaveDiff = now.diff(slaveTime, "minutes");
lastSlaveDataTime = slaveTime.format("DD-MM-YYYY HH:mm:ss"); // lastSlaveDataTime = slaveTime.format("DD-MM-YYYY HH:mm:ss");
if (slaveDiff <= 1) slaveStatus = "connected"; // if (slaveDiff <= 1) slaveStatus = "connected";
} // }
if (slaveStatus === "disconnected") { // if (slaveStatus === "disconnected") {
disconnectedSlaves.push({ // disconnectedSlaves.push({
slaveHardwareId: slave.tankhardwareId, // slaveHardwareId: slave.tankhardwareId,
slaveName: slave.tankName || "Unknown Slave" // slaveName: slave.tankName || "Unknown Slave"
}); // });
} // }
formattedSlaves.push({ // formattedSlaves.push({
hardwareId: slave.hardwareId, // hardwareId: slave.hardwareId,
slaveName: slave.tankName || null, // slaveName: slave.tankName || null,
location: slave.tankLocation || null, // location: slave.tankLocation || null,
type: "slave", // type: "slave",
connected_status: slaveStatus, // connected_status: slaveStatus,
last_data_time: lastSlaveDataTime, // last_data_time: lastSlaveDataTime,
diff_in_minutes: slaveDiff // diff_in_minutes: slaveDiff
}); // });
} // }
const issuesToAdd = []; // const issuesToAdd = [];
// // ✅ Only raise a ticket if master is disconnected
// // if (masterConnectedStatus === "disconnected") {
// // const existingMasterTicket = await Support.findOne({
// // "issues.hardwareId": connected_to,
// // "issues.type": "GSM or LoRa Disconnected"
// // });
// // if (!existingMasterTicket) {
// // const slaveHardwareIds = disconnectedSlaves.map(s => s.slaveHardwareId);
// // const slaveNames = disconnectedSlaves.map(s => s.slaveName);
// // issuesToAdd.push({
// // type: "GSM or LoRa Disconnected",
// // masterHardwareId: connected_to,
// // hardwareId: connected_to, // Master hardwareId
// // hardwareIds: slaveHardwareIds, // Slave tankHardwareIds
// // slaveNames,
// // message: `Master ${connected_to} is disconnected along with ${slaveHardwareIds.length} slave(s)`
// // });
// // }
// // }
// ✅ Only raise a ticket if master is disconnected
// if (masterConnectedStatus === "disconnected") { // if (masterConnectedStatus === "disconnected") {
// const existingMasterTicket = await Support.findOne({ // const existingMasterTicket = await Support.findOne({
// "issues.hardwareId": connected_to, // "issues.hardwareId": connected_to,
@ -2946,235 +2967,214 @@ exports.raiseATicket = async (req, reply) => {
// const slaveHardwareIds = disconnectedSlaves.map(s => s.slaveHardwareId); // const slaveHardwareIds = disconnectedSlaves.map(s => s.slaveHardwareId);
// const slaveNames = disconnectedSlaves.map(s => s.slaveName); // const slaveNames = disconnectedSlaves.map(s => s.slaveName);
// // Check if disconnection is at least 15 minutes old
// if (diffInMinutes >= 15) {
// issuesToAdd.push({ // issuesToAdd.push({
// type: "GSM or LoRa Disconnected", // type: "GSM or LoRa Disconnected",
// masterHardwareId: connected_to, // masterHardwareId: connected_to,
// hardwareId: connected_to, // Master hardwareId // hardwareId: connected_to,
// hardwareIds: slaveHardwareIds, // Slave tankHardwareIds // hardwareIds: slaveHardwareIds,
// slaveNames, // slaveNames,
// message: `Master ${connected_to} is disconnected along with ${slaveHardwareIds.length} slave(s)` // message: `Master ${connected_to} is disconnected along with ${slaveHardwareIds.length} slave(s)`,
// disconnectedAt: lastDataTime // optional: for future tracking
// }); // });
// } // }
// } // }
// }
if (masterConnectedStatus === "disconnected") {
const existingMasterTicket = await Support.findOne({
"issues.hardwareId": connected_to,
"issues.type": "GSM or LoRa Disconnected"
});
if (!existingMasterTicket) {
const slaveHardwareIds = disconnectedSlaves.map(s => s.slaveHardwareId);
const slaveNames = disconnectedSlaves.map(s => s.slaveName);
// Check if disconnection is at least 15 minutes old
if (diffInMinutes >= 15) {
issuesToAdd.push({
type: "GSM or LoRa Disconnected",
masterHardwareId: connected_to,
hardwareId: connected_to,
hardwareIds: slaveHardwareIds,
slaveNames,
message: `Master ${connected_to} is disconnected along with ${slaveHardwareIds.length} slave(s)`,
disconnectedAt: lastDataTime // optional: for future tracking
});
}
}
}
// if (issuesToAdd.length > 0) {
// const supportRecord = await Support.findOne({ supportId: "AWHYSU64" });
if (issuesToAdd.length > 0) { // if (supportRecord) {
const supportRecord = await Support.findOne({ supportId: "AWHYSU64" }); // await Support.findOneAndUpdate(
// { supportId: "AWHYSU64" },
// {
// $push: { issues: { $each: issuesToAdd } },
// $set: { updatedAt: new Date(), lastTicketRaisedAt: moment().tz("Asia/Kolkata").format("YYYY-MM-DD HH:mm:ss") }
// }
// );
// }
// }
if (supportRecord) {
await Support.findOneAndUpdate(
{ supportId: "AWHYSU64" },
{
$push: { issues: { $each: issuesToAdd } },
$set: { updatedAt: new Date(), lastTicketRaisedAt: moment().tz("Asia/Kolkata").format("YYYY-MM-DD HH:mm:ss") }
}
);
}
}
// const masterDetails = {
// hardwareId: connected_to,
// masterName: masterSensor.masterName || orderMap[connected_to]?.masterName || null,
// location: masterSensor.location || orderMap[connected_to]?.location || null,
// type: "master",
// connected_status: masterConnectedStatus,
// last_data_time: lastDataTime,
// diff_in_minutes: diffInMinutes
// };
const masterDetails = { // return reply.send({
hardwareId: connected_to, // status_code: 200,
masterName: masterSensor.masterName || orderMap[connected_to]?.masterName || null, // message: "Checked connection and raised ticket if needed.",
location: masterSensor.location || orderMap[connected_to]?.location || null, // master: masterDetails,
type: "master", // connected_slaves: formattedSlaves
connected_status: masterConnectedStatus, // });
last_data_time: lastDataTime,
diff_in_minutes: diffInMinutes
};
return reply.send({ // } catch (error) {
status_code: 200, // console.error("Error raising ticket:", error);
message: "Checked connection and raised ticket if needed.", // return reply.code(500).send({ error: "Internal server error" });
master: masterDetails, // }
connected_slaves: formattedSlaves // };
});
} catch (error) {
console.error("Error raising ticket:", error);
return reply.code(500).send({ error: "Internal server error" });
}
};
exports.raiseATicket = async (req, reply) => {
try {
const { customerId, connected_to } = req.params;
// exports.raiseATicket = async (req, reply) => { if (!customerId || !connected_to) {
// try { return reply.code(400).send({ error: "customerId and connected_to are required" });
// const { customerId, connected_to } = req.params; }
// if (!customerId || !connected_to) { const sensors = await Insensors.find({ customerId });
// return reply.code(400).send({ error: "customerId and connected_to are required" });
// }
// const sensors = await Insensors.find({ customerId }); if (!sensors.length) {
return reply.code(404).send({ message: "No sensors found for this customer." });
}
// if (!sensors.length) { const masterSensor = sensors.find(s => s.hardwareId?.trim() === connected_to.trim() && s.type === "master");
// return reply.code(404).send({ message: "No sensors found for this customer." });
// }
// const masterSensor = sensors.find(s => s.hardwareId?.trim() === connected_to.trim() && s.type === "master"); if (!masterSensor) {
return reply.code(404).send({ message: "Master hardwareId not found." });
}
// if (!masterSensor) { const latestMasterRecord = await IotData.findOne({ hardwareId: connected_to }).sort({ date: -1 }).lean();
// return reply.code(404).send({ message: "Master hardwareId not found." });
// }
// const latestMasterRecord = await IotData.findOne({ hardwareId: connected_to }).sort({ date: -1 }).lean(); if (!latestMasterRecord) {
return reply.code(404).send({ message: "No IoT data found for this hardwareId." });
}
// if (!latestMasterRecord) { const now = moment.tz("Asia/Kolkata");
// return reply.code(404).send({ message: "No IoT data found for this hardwareId." }); const indiaTime = moment.tz(latestMasterRecord.date, "Asia/Kolkata");
// } const diffInMinutesMaster = now.diff(indiaTime, "minutes");
// const now = moment.tz("Asia/Kolkata"); const masterDisconnected = diffInMinutesMaster > 1 ? [{
// const indiaTime = moment.tz(latestMasterRecord.date, "Asia/Kolkata"); hardwareId: connected_to,
// const diffInMinutesMaster = now.diff(indiaTime, "minutes"); masterName: masterSensor.tankName || "Unknown Master",
connected_status: "disconnected",
last_seen_minutes_ago: diffInMinutesMaster
}] : [];
// const masterDisconnected = diffInMinutesMaster > 1 ? [{ const connectedSlaves = sensors.filter(sensor =>
// hardwareId: connected_to, sensor.connected_to?.trim() === connected_to.trim() &&
// masterName: masterSensor.tankName || "Unknown Master", sensor.type === "slave"
// connected_status: "disconnected", );
// last_seen_minutes_ago: diffInMinutesMaster
// }] : [];
// const connectedSlaves = sensors.filter(sensor =>
// sensor.connected_to?.trim() === connected_to.trim() &&
// sensor.type === "slave"
// );
// const disconnectedSlaves = []; const disconnectedSlaves = [];
// const slaveStatusList = []; const slaveStatusList = [];
// for (const slave of connectedSlaves) { for (const slave of connectedSlaves) {
// const slaveId = slave.hardwareId?.trim(); const slaveId = slave.tankhardwareId?.trim();
// const matchedTank = latestMasterRecord.tanks.find(tank => tank.tankhardwareId === slaveId); const matchedTank = latestMasterRecord.tanks.find(tank => tank.tankhardwareId === slaveId);
// let isDisconnected = true; let isDisconnected = true;
// let loraDiffInMinutes = null; let loraDiffInMinutes = null;
// if (matchedTank && matchedTank.date) { if (matchedTank && matchedTank.date) {
// const tankTime = moment.tz(matchedTank.date, "Asia/Kolkata"); const tankTime = moment.tz(matchedTank.date, "Asia/Kolkata");
// loraDiffInMinutes = now.diff(tankTime, "minutes"); loraDiffInMinutes = now.diff(tankTime, "minutes");
// if (loraDiffInMinutes <= 1) { if (loraDiffInMinutes <= 1) {
// isDisconnected = false; isDisconnected = false;
// } }
// } }
// const slaveInfo = { const slaveInfo = {
// hardwareId: connected_to, hardwareId: connected_to,
// slaveHardwareId: slaveId, slaveHardwareId: slaveId,
// slaveName: slave.tankName || "Unknown Slave", slaveName: slave.tankName || "Unknown Slave",
// connected_status: isDisconnected ? "disconnected" : "connected", connected_status: isDisconnected ? "disconnected" : "connected",
// last_seen_minutes_ago: loraDiffInMinutes last_seen_minutes_ago: loraDiffInMinutes
// }; };
// slaveStatusList.push(slaveInfo); slaveStatusList.push(slaveInfo);
// if (isDisconnected) { if (isDisconnected) {
// disconnectedSlaves.push(slaveInfo); disconnectedSlaves.push(slaveInfo);
// } }
// } }
// const issuesToAdd = []; const issuesToAdd = [];
// if (masterDisconnected.length > 0) { if (masterDisconnected.length > 0) {
// const existingGsmIssue = await Support.findOne({ const existingGsmIssue = await Support.findOne({
// "issues.hardwareId": connected_to, "issues.hardwareId": connected_to,
// "issues.type": "GSM Disconnected" "issues.type": "GSM Disconnected"
// }); });
// if (!existingGsmIssue) { if (!existingGsmIssue) {
// issuesToAdd.push({ issuesToAdd.push({
// type: "GSM Disconnected", type: "GSM Disconnected",
// hardwareId: connected_to, hardwareId: connected_to,
// message: `Master GSM disconnected - ${connected_to}` message: `Master GSM disconnected - ${connected_to}`
// }); });
// } }
// } }
// const newHardwareIds = []; const newHardwareIds = [];
// const newSlaveNames = []; const newSlaveNames = [];
// for (const slave of disconnectedSlaves) { for (const slave of disconnectedSlaves) {
// const existingSlaveIssue = await Support.findOne({ const existingSlaveIssue = await Support.findOne({
// "issues.hardwareIds": slave.slaveHardwareId, "issues.hardwareIds": slave.slaveHardwareId,
// "issues.masterHardwareId": connected_to, "issues.masterHardwareId": connected_to,
// "issues.type": "LoRa Disconnected" "issues.type": "LoRa Disconnected"
// }); });
// if (!existingSlaveIssue) { if (!existingSlaveIssue) {
// newHardwareIds.push(slave.slaveHardwareId); newHardwareIds.push(slave.slaveHardwareId);
// newSlaveNames.push(slave.slaveName); newSlaveNames.push(slave.slaveName);
// } }
// } }
// if (newHardwareIds.length > 0) { if (newHardwareIds.length > 0) {
// issuesToAdd.push({ issuesToAdd.push({
// type: "LoRa Disconnected", type: "LoRa Disconnected",
// masterHardwareId: connected_to, masterHardwareId: connected_to,
// hardwareIds: newHardwareIds, hardwareIds: newHardwareIds,
// slaveNames: newSlaveNames, slaveNames: newSlaveNames,
// message: `Slaves LoRa disconnected under master ${connected_to}` message: `Slaves LoRa disconnected under master ${connected_to}`
// }); });
// } }
// if (issuesToAdd.length > 0) { if (issuesToAdd.length > 0) {
// const supportRecord = await Support.findOne({ supportId: "AWHYSU64" }); const supportRecord = await Support.findOne({ supportId: "AWHYSU64" });
// if (supportRecord) { if (supportRecord) {
// await Support.findOneAndUpdate( await Support.findOneAndUpdate(
// { _id: supportRecord._id }, { _id: supportRecord._id },
// { {
// $push: { $push: {
// issues: { $each: issuesToAdd } issues: { $each: issuesToAdd }
// }, },
// updatedAt: new Date() updatedAt: new Date()
// }, },
// { new: true } { new: true }
// ); );
// } else { } else {
// console.error("Support record not found for supportId AWHYSU64"); console.error("Support record not found for supportId AWHYSU64");
// } }
// } }
// return reply.send({ return reply.send({
// status_code: 200, status_code: 200,
// message: "Checked connection and updated support if needed.", message: "Checked connection and updated support if needed.",
// masterDisconnected, masterDisconnected,
// disconnectedSlaves, disconnectedSlaves,
// connectedSlaves: slaveStatusList connectedSlaves: slaveStatusList
// }); });
// } catch (error) { } catch (error) {
// console.error("Error raising ticket:", error); console.error("Error raising ticket:", error);
// return reply.code(500).send({ error: "Internal server error" }); return reply.code(500).send({ error: "Internal server error" });
// } }
// }; };

Loading…
Cancel
Save