chnages on master name and loaction

master^2
Bhaskar 5 months ago
parent 6ee4ef68d9
commit f0e270d92e

@ -1615,7 +1615,6 @@ exports.mastrerList = async (req, reply) => {
// return reply.status(500).send({ error: 'Internal Server Error' }); // return reply.status(500).send({ error: 'Internal Server Error' });
// } // }
// }; // };
exports.getMasterSlaveSummary = async (req, reply) => { exports.getMasterSlaveSummary = async (req, reply) => {
try { try {
const { customerId } = req.params; const { customerId } = req.params;
@ -1624,131 +1623,107 @@ exports.getMasterSlaveSummary = async (req, reply) => {
return reply.status(400).send({ error: 'customerId is required' }); return reply.status(400).send({ error: 'customerId is required' });
} }
const allDevices = await Insensors.find({ customerId }).lean(); // Fetch all masters for the customer from the Insensors schema
const masters = allDevices.filter(dev => dev.type === 'master'); const masters = await Insensors.find({ customerId, type: 'master' }).lean();
const slaves = allDevices.filter(dev => dev.type === 'slave');
const slaveMap = {};
// Fetch orders for the customer to get masterName, location, and typeOfWater // Fetch orders for the customer to map master connections
const orders = await Order.find({ customerId }).lean(); const orders = await Order.find({ customerId }).lean();
const orderDetails = {};
console.log("orders",orders.master_connections) const orderMap = {};
// Map order information by installationId // Mapping master hardwareId from the orders schema to masterName and location
orders.forEach(order => { orders.forEach(order => {
order.master_connections.forEach(connection => { order.master_connections.forEach(connection => {
orderDetails[connection._id] = { orderMap[connection.hardwareId] = {
masterName: connection.master_name || 'Unknown', // masterName masterName: connection.master_name || 'Unknown',
location: connection.location || 'Unknown', // location location: connection.location || 'Unknown'
typeOfWater: connection.tanks[0]?.tankLocation || 'Unknown' // typeOfWater based on tank location
}; };
}); });
}); });
for (const slave of slaves) { const result = [];
const masterId = slave.connected_to;
if (!slaveMap[masterId]) {
slaveMap[masterId] = [];
}
const loraTime = slave.connected_lora_time || null;
const loraDate = slave.connected_lora_date || null;
// Get master info from the order details map // Loop through each master and enrich it with data
const orderInfo = orderDetails[slave.installationId] || {}; for (const master of masters) {
const orderInfo = orderMap[master.hardwareId] || {}; // Get order info based on hardwareId
const masterName = orderInfo.masterName || 'Unknown'; const masterName = orderInfo.masterName || 'Unknown';
const location = orderInfo.location || 'Unknown'; const location = orderInfo.location || 'Unknown';
const typeOfWater = orderInfo.typeOfWater || 'Unknown';
const latestGsmData = await IotData.findOne({ hardwareId: master.hardwareId })
// If disconnected, update LoRa last disconnect time .sort({ date: -1, time: -1 })
let loraLastDisconnect = slave.lora_last_disconnect_time || null; .lean();
if (slave.connected_status === 'disconnected') {
const formattedTime = `${loraDate} ${loraTime}`; let connectedGsmDate = null;
await Insensors.updateOne( let connectedGsmTime = null;
{ hardwareId: slave.hardwareId }, if (latestGsmData?.date && latestGsmData?.time) {
{ $set: { lora_last_disconnect_time: formattedTime } } const indiaTime = moment.tz(latestGsmData.date, 'Asia/Kolkata');
); connectedGsmDate = indiaTime.format('DD-MM-YYYY');
loraLastDisconnect = formattedTime; connectedGsmTime = latestGsmData.time;
} }
const tankHeight = await getTankHeight(slave.hardwareId); let gsmLastDisconnect = master.gsm_last_disconnect_time;
if (master.connected_status === 'disconnected' && connectedGsmDate && connectedGsmTime) {
slaveMap[masterId].push({ const disconnectTime = `${connectedGsmDate} ${connectedGsmTime}`;
hardwareId: slave.hardwareId, await Insensors.updateOne({ hardwareId: master.hardwareId }, { $set: { gsm_last_disconnect_time: disconnectTime } });
tankName: slave.tankName || null, gsmLastDisconnect = disconnectTime;
location: slave.tankLocation || null, }
connected_status: slave.connected_status || 'disconnected',
connected_lora_time: loraTime,
connected_lora_date: loraDate,
lora_last_check_time: slave.lora_last_check_time || null,
lora_last_disconnect_time: loraLastDisconnect,
connected_to: slave.connected_to,
masterName: masterName,
location: location, // Adding location from the order
typeOfWater: typeOfWater, // Adding typeOfWater
type: slave.type || 'N/A',
tankHeight: tankHeight || null
});
}
const response = []; const connectedSlaves = [];
const slaves = await Insensors.find({ connected_to: master.hardwareId, type: 'slave' }).lean();
for (const master of masters) { for (const slave of slaves) {
const connectedSlaves = slaveMap[master.hardwareId] || []; const slaveIot = await IotData.findOne({ hardwareId: slave.hardwareId }).sort({ date: -1, time: -1 }).lean();
let gsmLastDisconnect = master.gsm_last_disconnect_time || null; const loraDate = slave.connected_lora_date || (slaveIot?.date ? moment.tz(slaveIot.date, 'Asia/Kolkata').format('DD-MM-YYYY') : null);
if (master.connected_status === 'disconnected') { const loraTime = slave.connected_lora_time || slaveIot?.time || null;
const gsmDate = master.connected_gsm_date;
const gsmTime = master.connected_gsm_time;
if (gsmDate && gsmTime) { let loraLastDisconnect = slave.lora_last_disconnect_time;
const formattedTime = `${gsmDate} ${gsmTime}`; if (slave.connected_status === 'disconnected' && loraDate && loraTime) {
await Insensors.updateOne( const disconnectTime = `${loraDate} ${loraTime}`;
{ hardwareId: master.hardwareId }, await Insensors.updateOne({ hardwareId: slave.hardwareId }, { $set: { lora_last_disconnect_time: disconnectTime } });
{ $set: { gsm_last_disconnect_time: formattedTime } } loraLastDisconnect = disconnectTime;
);
gsmLastDisconnect = formattedTime;
} }
connectedSlaves.push({
hardwareId: slave.hardwareId,
tankName: slave.tankName,
location: slave.tankLocation,
connected_status: slave.connected_status,
connected_lora_date: loraDate,
connected_lora_time: loraTime,
lora_last_disconnect_time: loraLastDisconnect,
type: slave.type || 'slave'
});
} }
const enriched = { result.push({
hardwareId: master.hardwareId, hardwareId: master.hardwareId,
masterName: master.masterName || 'Unknown', // You can override this if you want to fetch it from orders masterName,
location: master.location || 'Unknown', // Same for location location,
type: master.type || 'master', type: master.type || 'master',
connected_status: master.connected_status || 'disconnected', connected_status: master.connected_status,
connected_slave_count: connectedSlaves.length, connected_slave_count: connectedSlaves.length,
connected_slaves: connectedSlaves, connected_slaves: connectedSlaves,
connected_gsm_date: connectedGsmDate,
connected_gsm_time: connectedGsmTime,
gsm_last_check_time: master.gsm_last_check_time || null, gsm_last_check_time: master.gsm_last_check_time || null,
gsm_last_disconnect_time: gsmLastDisconnect || null gsm_last_disconnect_time: gsmLastDisconnect,
}; connected_lora_date: master.connected_lora_date || null,
connected_lora_time: master.connected_lora_time || null
if (master.gsm_last_check_time) { });
const indiaTime = moment.tz(master.gsm_last_check_time, 'Asia/Kolkata');
enriched.connected_gsm_date = indiaTime.format('DD-MM-YYYY');
enriched.connected_gsm_time = indiaTime.format('HH:mm:ss');
}
if (master.connected_lora_date && master.connected_lora_time) {
enriched.connected_lora_date = master.connected_lora_date;
enriched.connected_lora_time = master.connected_lora_time;
}
response.push(enriched);
} }
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: response data: result
}); });
} catch (err) {
console.error('Error in getMasterSlaveSummary:', err); } catch (error) {
console.error('Error in getMasterSlaveSummary:', error);
return reply.status(500).send({ error: 'Internal Server Error' }); return reply.status(500).send({ error: 'Internal Server Error' });
} }
}; };
// 🔍 Helper to get tankHeight from latest IotData record // 🔍 Helper to get tankHeight from latest IotData record
async function getTankHeight(hardwareId) { async function getTankHeight(hardwareId) {
const iotData = await IotData.findOne({ 'tanks.tankhardwareId': hardwareId }) const iotData = await IotData.findOne({ 'tanks.tankhardwareId': hardwareId })
@ -3389,3 +3364,4 @@ exports.deleteTeamMemberSupport = async (req, reply)=> {
return reply.code(500).send({ error: "Internal server error" }); return reply.code(500).send({ error: "Internal server error" });
} }
} }

Loading…
Cancel
Save