master^2
Bhaskar 5 months ago
parent e8a1ce5f66
commit 8a318c49ff

@ -1724,6 +1724,7 @@ exports.mastrerList = async (req, reply) => {
// }; // };
exports.getMasterSlaveSummary = async (req, reply) => { exports.getMasterSlaveSummary = async (req, reply) => {
try { try {
const { customerId } = req.params; const { customerId } = req.params;
@ -1742,7 +1743,7 @@ exports.getMasterSlaveSummary = async (req, reply) => {
order.master_connections.forEach(connection => { order.master_connections.forEach(connection => {
orderMap[connection.hardwareId] = { orderMap[connection.hardwareId] = {
masterName: connection.master_name || null, masterName: connection.master_name || null,
location: connection.location || null location: connection.location || null,
}; };
}); });
}); });
@ -1752,11 +1753,11 @@ exports.getMasterSlaveSummary = async (req, reply) => {
for (const master of masters) { for (const master of masters) {
const orderInfo = orderMap[master.hardwareId] || {}; const orderInfo = orderMap[master.hardwareId] || {};
// Use Insensors values first, fallback to orders // Prefer Insensors info, fallback to order info
const masterName = master.masterName || orderInfo.masterName || null; const masterName = master.masterName || orderInfo.masterName || null;
const location = master.location || orderInfo.location || null; const location = master.location || orderInfo.location || null;
// Fetch the latest GSM data for the master device // Fetch the latest GSM data for the master device
const latestGsmData = await IotData.findOne({ hardwareId: master.hardwareId }) const latestGsmData = await IotData.findOne({ hardwareId: master.hardwareId })
.sort({ date: -1, time: -1 }) .sort({ date: -1, time: -1 })
.lean(); .lean();
@ -1768,9 +1769,15 @@ exports.getMasterSlaveSummary = async (req, reply) => {
let gsmLastDisconnect = master.gsm_last_disconnect_time || null; let gsmLastDisconnect = master.gsm_last_disconnect_time || null;
if (latestGsmData?.date && latestGsmData?.time) { if (latestGsmData?.date && latestGsmData?.time) {
const indiaTime = moment.tz(`${latestGsmData.date} ${latestGsmData.time}`, "Asia/Kolkata"); // Combine date + time and parse as Asia/Kolkata timezone
const indiaTime = moment.tz(
`${moment(latestGsmData.date).format("YYYY-MM-DD")} ${latestGsmData.time}`,
"YYYY-MM-DD HH:mm:ss",
"Asia/Kolkata"
);
connectedGsmDate = indiaTime.format("DD-MM-YYYY"); connectedGsmDate = indiaTime.format("DD-MM-YYYY");
connectedGsmTime = latestGsmData.time; connectedGsmTime = indiaTime.format("HH:mm:ss");
const now = moment.tz("Asia/Kolkata"); const now = moment.tz("Asia/Kolkata");
const diffInMinutes = now.diff(indiaTime, "minutes"); const diffInMinutes = now.diff(indiaTime, "minutes");
@ -1778,12 +1785,12 @@ exports.getMasterSlaveSummary = async (req, reply) => {
gsmStatus = diffInMinutes <= 1 ? "connected" : "disconnected"; gsmStatus = diffInMinutes <= 1 ? "connected" : "disconnected";
gsmLastCheckTime = now.format("DD-MM-YYYY HH:mm:ss"); gsmLastCheckTime = now.format("DD-MM-YYYY HH:mm:ss");
// If disconnected and no previous disconnect time, set it if (gsmStatus === "disconnected") {
if (gsmStatus === "disconnected" && !gsmLastDisconnect) { // Update disconnect time with latest disconnect timestamp
gsmLastDisconnect = `${connectedGsmDate} ${connectedGsmTime}`; gsmLastDisconnect = `${connectedGsmDate} ${connectedGsmTime}`;
} }
// Update master record with latest GSM info // Update master device with latest GSM info
await Insensors.updateOne( await Insensors.updateOne(
{ hardwareId: master.hardwareId }, { hardwareId: master.hardwareId },
{ {
@ -1792,79 +1799,86 @@ exports.getMasterSlaveSummary = async (req, reply) => {
connected_gsm_date: connectedGsmDate, connected_gsm_date: connectedGsmDate,
connected_gsm_time: connectedGsmTime, connected_gsm_time: connectedGsmTime,
gsm_last_check_time: gsmLastCheckTime, gsm_last_check_time: gsmLastCheckTime,
gsm_last_disconnect_time: gsmLastDisconnect gsm_last_disconnect_time: gsmLastDisconnect,
} },
} }
); );
} }
// Save GSM disconnect time if disconnected // Process connected slave devices for the master
if (gsmStatus === "disconnected" && gsmLastDisconnect) {
await Insensors.updateOne(
{ hardwareId: master.hardwareId },
{ $set: { gsm_last_disconnect_time: gsmLastDisconnect } }
);
}
// Handle slaves
const connectedSlaves = []; const connectedSlaves = [];
const slaves = await Insensors.find({ connected_to: master.hardwareId, type: "slave" }).lean(); const slaves = await Insensors.find({ connected_to: master.hardwareId, type: "slave" }).lean();
console.log("slaves",slaves)
for (const slave of slaves) { for (const slave of slaves) {
const slaveIot = await IotData.findOne({ hardwareId: slave.hardwareId }) const slaveIot = await IotData.findOne({ hardwareId: slave.connected_to })
.sort({ date: -1, time: -1 }) .sort({ date: -1, time: -1 })
.lean(); .lean();
console.log("slaveIot",slaveIot)
let connectedLoraDate = null; let connectedLoraDate = null;
let connectedLoraTime = null; let connectedLoraTime = null;
let loraStatus = "unknown";
let loraLastCheckTime = null;
let loraLastDisconnect = slave.lora_last_disconnect_time || null;
if (slaveIot?.date && slaveIot?.time) { // if (slaveIot?.date && slaveIot?.time) {
const indiaTime = moment.tz(`${slaveIot.date} ${slaveIot.time}`, "Asia/Kolkata"); // const indiaTime = moment.tz(`${slaveIot.date} ${slaveIot.time}`, "Asia/Kolkata");
connectedLoraDate = indiaTime.format("DD-MM-YYYY"); // connectedLoraDate = indiaTime.format("DD-MM-YYYY");
connectedLoraTime = slaveIot.time; // connectedLoraTime = indiaTime.format("HH:mm:ss");
// }
const now = moment.tz("Asia/Kolkata"); // const tankHeight = await getTankHeight(slave.tankhardwareId);
const diff = now.diff(indiaTime, "minutes"); // let loraStatus = (tankHeight === null || tankHeight === 0) ? "disconnected" : "connected";
loraStatus = diff <= 1 ? "connected" : "disconnected"; // const loraLastDisconnect = loraStatus === "disconnected" && connectedLoraDate && connectedLoraTime
loraLastCheckTime = now.format("DD-MM-YYYY HH:mm:ss"); // ? `${connectedLoraDate} ${connectedLoraTime}`
// : slave.lora_last_disconnect_time || null;
let loraStatus = "disconnected";
let loraLastDisconnect = slave.lora_last_disconnect_time || null;
let tankHeight = null;
await Insensors.updateOne( if (slaveIot?.tanks?.length && slave.tankhardwareId) {
{ hardwareId: slave.hardwareId }, const matchedTank = slaveIot.tanks.find(
{ t => t.tankhardwareId === slave.tankhardwareId
$set: {
connected_status: loraStatus,
connected_lora_date: connectedLoraDate,
connected_lora_time: connectedLoraTime,
lora_last_check_time: loraLastCheckTime
}
}
); );
if (loraStatus === "disconnected") { if (matchedTank) {
const disconnectTime = `${connectedLoraDate} ${connectedLoraTime}`; tankHeight = parseFloat(matchedTank.tankHeight) || 0;
await Insensors.updateOne(
{ hardwareId: slave.hardwareId }, const indiaTime = moment.tz(
{ $set: { lora_last_disconnect_time: disconnectTime } } `${moment(matchedTank.date).format("YYYY-MM-DD")} ${matchedTank.time}`,
"YYYY-MM-DD HH:mm:ss",
"Asia/Kolkata"
); );
loraLastDisconnect = disconnectTime;
}
} else { connectedLoraDate = indiaTime.format("DD-MM-YYYY");
loraStatus = "disconnected"; connectedLoraTime = indiaTime.format("HH:mm:ss");
loraLastDisconnect = loraLastDisconnect || null;
await Insensors.updateOne( loraStatus = tankHeight > 0 ? "connected" : "disconnected";
{ hardwareId: slave.hardwareId },
{ // if (loraStatus === "disconnected") {
$set: { // loraLastDisconnect = `${connectedLoraDate} ${connectedLoraTime}`;
connected_status: loraStatus, // }
lora_last_disconnect_time: loraLastDisconnect if (loraStatus === "disconnected") {
if (connectedLoraDate && connectedLoraTime) {
loraLastDisconnect = `${connectedLoraDate} ${connectedLoraTime}`;
} else {
loraLastDisconnect = slave.lora_last_disconnect_time || null;
} }
} }
); }
} }
// Update in DB
await Insensors.updateOne(
{ hardwareId: slave.hardwareId },
{
$set: {
connected_status: loraStatus,
connected_lora_date: connectedLoraDate,
connected_lora_time: connectedLoraTime,
lora_last_disconnect_time: loraLastDisconnect
}
}
);
connectedSlaves.push({ connectedSlaves.push({
hardwareId: slave.hardwareId, hardwareId: slave.hardwareId,
@ -1876,7 +1890,7 @@ exports.getMasterSlaveSummary = async (req, reply) => {
connected_lora_time: connectedLoraTime, connected_lora_time: connectedLoraTime,
lora_last_disconnect_time: loraLastDisconnect, lora_last_disconnect_time: loraLastDisconnect,
type: slave.type || "slave", type: slave.type || "slave",
connected_to: slave.connected_to || null // <-- Added connected_to here connected_to: slave.connected_to || null
}); });
} }
@ -1893,14 +1907,14 @@ exports.getMasterSlaveSummary = async (req, reply) => {
gsm_last_check_time: gsmLastCheckTime, gsm_last_check_time: gsmLastCheckTime,
gsm_last_disconnect_time: gsmLastDisconnect, gsm_last_disconnect_time: gsmLastDisconnect,
connected_lora_date: master.connected_lora_date || null, connected_lora_date: master.connected_lora_date || null,
connected_lora_time: master.connected_lora_time || null connected_lora_time: master.connected_lora_time || null,
}); });
} }
return reply.send({ return reply.send({
status_code: 200, status_code: 200,
message: "Master-slave summary retrieved successfully", message: "Master-slave summary retrieved successfully",
data: result data: result,
}); });
} catch (error) { } catch (error) {
console.error("Error in getMasterSlaveSummary:", error); console.error("Error in getMasterSlaveSummary:", error);
@ -1912,18 +1926,17 @@ exports.getMasterSlaveSummary = async (req, reply) => {
// 🔍 Helper to get tankHeight from latest IotData record // 🔍 Helper to get tankHeight from latest IotData record
async function getTankHeight(hardwareId) { async function getTankHeight(tankhardwareId) {
const iotData = await IotData.findOne({ 'tanks.tankhardwareId': hardwareId }) const iotData = await IotData.findOne({ 'tanks.tankhardwareId': tankhardwareId })
.sort({ date: -1 }) .sort({ date: -1 })
.lean(); .lean();
if (!iotData) return null; if (!iotData) return null;
const matchedTank = iotData.tanks.find(t => t.tankhardwareId === hardwareId); const matchedTank = iotData.tanks.find(t => t.tankhardwareId === tankhardwareId);
return matchedTank?.tankHeight || null; return matchedTank?.tankHeight || null;
} }
// exports.getIotDataByCustomer = async (req, reply) => { // exports.getIotDataByCustomer = async (req, reply) => {
// try { // try {
// const { customerId } = req.params; // const { customerId } = req.params;

Loading…
Cancel
Save