|
|
@ -2688,7 +2688,7 @@ exports.raiseATicketBuildingDetails = async (req, reply) => {
|
|
|
|
|
|
|
|
|
|
|
|
exports.raiseATicketSlave = async (req, reply) => {
|
|
|
|
exports.raiseATicketSlave = async (req, reply) => {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
const { customerId, connected_to, tankHardwareId } = req.params; // Now tankHardwareId from params
|
|
|
|
const { customerId, connected_to, tankHardwareId } = 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" });
|
|
|
@ -2700,7 +2700,7 @@ exports.raiseATicketSlave = async (req, reply) => {
|
|
|
|
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()));
|
|
|
|
const masterSensor = sensors.find(s => s.hardwareId?.trim() === connected_to.trim());
|
|
|
|
|
|
|
|
|
|
|
|
if (!masterSensor) {
|
|
|
|
if (!masterSensor) {
|
|
|
|
return reply.code(404).send({ message: "Master hardwareId not found." });
|
|
|
|
return reply.code(404).send({ message: "Master hardwareId not found." });
|
|
|
@ -2712,20 +2712,20 @@ exports.raiseATicketSlave = async (req, reply) => {
|
|
|
|
return reply.code(404).send({ message: "No IoT data found for this hardwareId." });
|
|
|
|
return reply.code(404).send({ message: "No IoT data found for this hardwareId." });
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const indiaTime = moment.tz(latestMasterRecord.date, "Asia/Kolkata");
|
|
|
|
|
|
|
|
const now = moment.tz("Asia/Kolkata");
|
|
|
|
const now = moment.tz("Asia/Kolkata");
|
|
|
|
|
|
|
|
const masterTime = moment.tz(latestMasterRecord.date, "Asia/Kolkata");
|
|
|
|
|
|
|
|
const masterDiff = now.diff(masterTime, "minutes");
|
|
|
|
|
|
|
|
|
|
|
|
const diffInMinutesMaster = now.diff(indiaTime, "minutes");
|
|
|
|
const masterDisconnected = masterDiff > 1 ? [{
|
|
|
|
|
|
|
|
|
|
|
|
const masterDisconnected = diffInMinutesMaster > 1 ? [{
|
|
|
|
|
|
|
|
hardwareId: connected_to,
|
|
|
|
hardwareId: connected_to,
|
|
|
|
masterName: masterSensor.tankName,
|
|
|
|
masterName: masterSensor.tankName || "Unknown Master",
|
|
|
|
// disconnectedAt: now.format("DD-MM-YYYY HH:mm:ss"),
|
|
|
|
|
|
|
|
}] : [];
|
|
|
|
}] : [];
|
|
|
|
|
|
|
|
|
|
|
|
let connectedSlaves = sensors.filter(sensor => sensor.connected_to?.trim() === connected_to.trim());
|
|
|
|
let connectedSlaves = sensors.filter(sensor =>
|
|
|
|
|
|
|
|
sensor.connected_to?.trim() === connected_to.trim() &&
|
|
|
|
|
|
|
|
sensor.type === "slave"
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// If tankHardwareId is provided, filter for that specific slave
|
|
|
|
|
|
|
|
if (tankHardwareId) {
|
|
|
|
if (tankHardwareId) {
|
|
|
|
connectedSlaves = connectedSlaves.filter(s => s.hardwareId?.trim() === tankHardwareId.trim());
|
|
|
|
connectedSlaves = connectedSlaves.filter(s => s.hardwareId?.trim() === tankHardwareId.trim());
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -2736,15 +2736,15 @@ exports.raiseATicketSlave = async (req, reply) => {
|
|
|
|
const slaveId = slave.hardwareId?.trim();
|
|
|
|
const slaveId = slave.hardwareId?.trim();
|
|
|
|
const matchedTank = latestMasterRecord.tanks.find(tank => tank.tankhardwareId === slaveId);
|
|
|
|
const matchedTank = latestMasterRecord.tanks.find(tank => tank.tankhardwareId === slaveId);
|
|
|
|
|
|
|
|
|
|
|
|
if (matchedTank && matchedTank.date) {
|
|
|
|
if (matchedTank?.date) {
|
|
|
|
const tankTime = moment.tz(matchedTank.date, "Asia/Kolkata");
|
|
|
|
const tankTime = moment.tz(matchedTank.date, "Asia/Kolkata");
|
|
|
|
const loraDiffInMinutes = now.diff(tankTime, "minutes");
|
|
|
|
const loraDiff = now.diff(tankTime, "minutes");
|
|
|
|
|
|
|
|
|
|
|
|
if (loraDiffInMinutes > 1) {
|
|
|
|
if (loraDiff > 1) {
|
|
|
|
disconnectedSlaves.push({
|
|
|
|
disconnectedSlaves.push({
|
|
|
|
hardwareId: connected_to,
|
|
|
|
hardwareId: connected_to,
|
|
|
|
slaveHardwareId: slaveId,
|
|
|
|
slaveHardwareId: slaveId,
|
|
|
|
slaveName: slave.tankName
|
|
|
|
slaveName: slave.tankName || "Unknown Slave"
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -2752,22 +2752,46 @@ exports.raiseATicketSlave = async (req, reply) => {
|
|
|
|
|
|
|
|
|
|
|
|
const issuesToAdd = [];
|
|
|
|
const issuesToAdd = [];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Check for existing GSM issue
|
|
|
|
if (masterDisconnected.length > 0) {
|
|
|
|
if (masterDisconnected.length > 0) {
|
|
|
|
|
|
|
|
const existingGsmIssue = await Support.findOne({
|
|
|
|
|
|
|
|
"issues.hardwareId": connected_to,
|
|
|
|
|
|
|
|
"issues.type": "GSM Disconnected"
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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}`
|
|
|
|
// disconnectedAt: now.format("DD-MM-YYYY HH:mm:ss")
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Check for new LoRa issues
|
|
|
|
|
|
|
|
const newSlaveHardwareIds = [];
|
|
|
|
|
|
|
|
const newSlaveNames = [];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (const slave of disconnectedSlaves) {
|
|
|
|
|
|
|
|
const existingSlaveIssue = await Support.findOne({
|
|
|
|
|
|
|
|
"issues.hardwareIds": slave.slaveHardwareId,
|
|
|
|
|
|
|
|
"issues.masterHardwareId": connected_to,
|
|
|
|
|
|
|
|
"issues.type": "LoRa Disconnected"
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!existingSlaveIssue) {
|
|
|
|
|
|
|
|
newSlaveHardwareIds.push(slave.slaveHardwareId);
|
|
|
|
|
|
|
|
newSlaveNames.push(slave.slaveName);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (disconnectedSlaves.length > 0) {
|
|
|
|
if (newSlaveHardwareIds.length > 0) {
|
|
|
|
issuesToAdd.push({
|
|
|
|
issuesToAdd.push({
|
|
|
|
type: "LoRa Disconnected",
|
|
|
|
type: "LoRa Disconnected",
|
|
|
|
hardwareIds: disconnectedSlaves.map(d => d.slaveHardwareId),
|
|
|
|
masterHardwareId: connected_to,
|
|
|
|
slaveNames: disconnectedSlaves.map(d => d.slaveName),
|
|
|
|
hardwareIds: newSlaveHardwareIds,
|
|
|
|
message: "Slaves LoRa disconnected",
|
|
|
|
slaveNames: newSlaveNames,
|
|
|
|
//disconnectedAt: now.format("DD-MM-YYYY HH:mm:ss")
|
|
|
|
message: `Slaves LoRa disconnected under master ${connected_to}`
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -2798,7 +2822,7 @@ exports.raiseATicketSlave = async (req, reply) => {
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
} catch (error) {
|
|
|
|
} catch (error) {
|
|
|
|
console.error("Error raising ticket:", error);
|
|
|
|
console.error("Error raising ticket (slave):", error);
|
|
|
|
return reply.code(500).send({ error: "Internal server error" });
|
|
|
|
return reply.code(500).send({ error: "Internal server error" });
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
};
|
|
|
|