|
|
|
@ -2844,18 +2844,18 @@ exports.getDisconnectedIssuesBySupportId = async (req, reply) => {
|
|
|
|
|
const allIssues = supportRecord.issues || [];
|
|
|
|
|
const hardwareSet = new Set();
|
|
|
|
|
|
|
|
|
|
// Collect all master and slave hardware IDs
|
|
|
|
|
// Collect all hardware IDs mentioned in issues
|
|
|
|
|
for (const issue of allIssues) {
|
|
|
|
|
if (issue.hardwareId) hardwareSet.add(issue.hardwareId);
|
|
|
|
|
if (issue.hardwareId) hardwareSet.add(issue.hardwareId); // GSM
|
|
|
|
|
if (Array.isArray(issue.hardwareIds)) {
|
|
|
|
|
issue.hardwareIds.forEach(id => hardwareSet.add(id));
|
|
|
|
|
issue.hardwareIds.forEach(id => hardwareSet.add(id)); // LoRa slaves
|
|
|
|
|
}
|
|
|
|
|
if (issue.masterHardwareId) hardwareSet.add(issue.masterHardwareId); // LoRa master
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const hardwareIds = [...hardwareSet];
|
|
|
|
|
const sensors = await Insensors.find({ hardwareId: { $in: hardwareIds } }).lean();
|
|
|
|
|
|
|
|
|
|
console.log("sensors",sensors)
|
|
|
|
|
// Map sensors by hardwareId
|
|
|
|
|
const sensorMap = {};
|
|
|
|
|
for (const sensor of sensors) {
|
|
|
|
@ -2864,48 +2864,74 @@ exports.getDisconnectedIssuesBySupportId = async (req, reply) => {
|
|
|
|
|
|
|
|
|
|
const masterMap = {};
|
|
|
|
|
|
|
|
|
|
// Structure data
|
|
|
|
|
for (const sensor of sensors) {
|
|
|
|
|
if (sensor.type === "master") {
|
|
|
|
|
masterMap[sensor.hardwareId] = {
|
|
|
|
|
hardwareId: sensor.hardwareId,
|
|
|
|
|
masterName: sensor.masterName ,
|
|
|
|
|
location: sensor.location || "",
|
|
|
|
|
type: "master",
|
|
|
|
|
connected_status: sensor.connected_status,
|
|
|
|
|
gsm_last_check_time: sensor.gsm_last_check_time,
|
|
|
|
|
gsm_last_disconnect_time: sensor.gsm_last_disconnect_time,
|
|
|
|
|
connected_gsm_date: sensor.connected_gsm_date,
|
|
|
|
|
connected_gsm_time: sensor.connected_gsm_time,
|
|
|
|
|
connected_lora_date: sensor.connected_lora_date,
|
|
|
|
|
connected_lora_time: sensor.connected_lora_time,
|
|
|
|
|
connected_slave_count: 0,
|
|
|
|
|
connected_slaves: []
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Add slaves under corresponding masters
|
|
|
|
|
for (const sensor of sensors) {
|
|
|
|
|
if (sensor.type === "slave" && sensor.connected_to) {
|
|
|
|
|
const master = masterMap[sensor.connected_to];
|
|
|
|
|
if (master) {
|
|
|
|
|
master.connected_slaves.push({
|
|
|
|
|
// First, add relevant masters from issues
|
|
|
|
|
for (const issue of allIssues) {
|
|
|
|
|
if (issue.type === "GSM Disconnected" && issue.hardwareId) {
|
|
|
|
|
const sensor = sensorMap[issue.hardwareId];
|
|
|
|
|
if (sensor && sensor.type === "master") {
|
|
|
|
|
masterMap[sensor.hardwareId] = {
|
|
|
|
|
hardwareId: sensor.hardwareId,
|
|
|
|
|
tankName: sensor.tankName || "",
|
|
|
|
|
masterName: sensor.masterName,
|
|
|
|
|
location: sensor.location || "",
|
|
|
|
|
type: "master",
|
|
|
|
|
connected_status: sensor.connected_status,
|
|
|
|
|
connected_lora_time: sensor.connected_lora_time,
|
|
|
|
|
gsm_last_check_time: sensor.gsm_last_check_time,
|
|
|
|
|
gsm_last_disconnect_time: sensor.gsm_last_disconnect_time,
|
|
|
|
|
connected_gsm_date: sensor.connected_gsm_date,
|
|
|
|
|
connected_gsm_time: sensor.connected_gsm_time,
|
|
|
|
|
connected_lora_date: sensor.connected_lora_date,
|
|
|
|
|
lora_last_check_time: sensor.lora_last_check_time,
|
|
|
|
|
lora_last_disconnect_time: sensor.lora_last_disconnect_time,
|
|
|
|
|
connected_to: sensor.connected_to,
|
|
|
|
|
masterName: master.masterName,
|
|
|
|
|
type: "slave",
|
|
|
|
|
typeOfWater: sensor.typeOfWater,
|
|
|
|
|
tankHeight: sensor.tankHeight
|
|
|
|
|
});
|
|
|
|
|
master.connected_slave_count++;
|
|
|
|
|
connected_lora_time: sensor.connected_lora_time,
|
|
|
|
|
connected_slave_count: 0,
|
|
|
|
|
connected_slaves: []
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (issue.type === "LoRa Disconnected" && issue.masterHardwareId) {
|
|
|
|
|
const masterSensor = sensorMap[issue.masterHardwareId];
|
|
|
|
|
if (masterSensor && masterSensor.type === "master") {
|
|
|
|
|
if (!masterMap[masterSensor.hardwareId]) {
|
|
|
|
|
masterMap[masterSensor.hardwareId] = {
|
|
|
|
|
hardwareId: masterSensor.hardwareId,
|
|
|
|
|
masterName: masterSensor.masterName,
|
|
|
|
|
location: masterSensor.location || "",
|
|
|
|
|
type: "master",
|
|
|
|
|
connected_status: masterSensor.connected_status,
|
|
|
|
|
gsm_last_check_time: masterSensor.gsm_last_check_time,
|
|
|
|
|
gsm_last_disconnect_time: masterSensor.gsm_last_disconnect_time,
|
|
|
|
|
connected_gsm_date: masterSensor.connected_gsm_date,
|
|
|
|
|
connected_gsm_time: masterSensor.connected_gsm_time,
|
|
|
|
|
connected_lora_date: masterSensor.connected_lora_date,
|
|
|
|
|
connected_lora_time: masterSensor.connected_lora_time,
|
|
|
|
|
connected_slave_count: 0,
|
|
|
|
|
connected_slaves: []
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const master = masterMap[issue.masterHardwareId];
|
|
|
|
|
if (master && Array.isArray(issue.hardwareIds)) {
|
|
|
|
|
for (const slaveId of issue.hardwareIds) {
|
|
|
|
|
const slaveSensor = sensorMap[slaveId];
|
|
|
|
|
if (slaveSensor && slaveSensor.type === "slave") {
|
|
|
|
|
master.connected_slaves.push({
|
|
|
|
|
hardwareId: slaveSensor.hardwareId,
|
|
|
|
|
tankName: slaveSensor.tankName || "",
|
|
|
|
|
location: slaveSensor.location || "",
|
|
|
|
|
connected_status: slaveSensor.connected_status,
|
|
|
|
|
connected_lora_time: slaveSensor.connected_lora_time,
|
|
|
|
|
connected_lora_date: slaveSensor.connected_lora_date,
|
|
|
|
|
lora_last_check_time: slaveSensor.lora_last_check_time,
|
|
|
|
|
lora_last_disconnect_time: slaveSensor.lora_last_disconnect_time,
|
|
|
|
|
connected_to: slaveSensor.connected_to,
|
|
|
|
|
masterName: master.masterName,
|
|
|
|
|
type: "slave",
|
|
|
|
|
typeOfWater: slaveSensor.typeOfWater,
|
|
|
|
|
tankHeight: slaveSensor.tankHeight
|
|
|
|
|
});
|
|
|
|
|
master.connected_slave_count++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -2924,6 +2950,7 @@ exports.getDisconnectedIssuesBySupportId = async (req, reply) => {
|
|
|
|
|
return reply.code(500).send({ error: "Internal server error" });
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
exports.getDisconnectedCustomerDetails = async (req, reply) => {
|
|
|
|
|
try {
|
|
|
|
|
const { supportId } = req.params;
|
|
|
|
|