master^2
Bhaskar 3 months ago
parent f86d6616e8
commit ffbd58eed8

@ -6156,6 +6156,223 @@ exports.raiseATicketSlave = async (req, reply) => {
// } // }
// }; // };
// exports.getDisconnectedIssuesBySupportId = async (req, reply) => {
// try {
// const { supportId, customerId } = req.params;
// if (!supportId || !customerId) {
// return reply.code(400).send({ error: "supportId and customerId are required" });
// }
// const supportRecord = await Support.findOne({ supportId }).lean();
// if (!supportRecord) {
// return reply.code(404).send({ message: "No support record found for this supportId and customerId" });
// }
// const allIssues = supportRecord.issues || [];
// const hardwareSet = new Set();
// for (const issue of allIssues) {
// if (issue.hardwareId) hardwareSet.add(issue.hardwareId);
// if (issue.masterHardwareId) hardwareSet.add(issue.masterHardwareId);
// }
// const hardwareIds = [...hardwareSet];
// const sensors = await Insensors.find({
// customerId,
// $or: [
// { hardwareId: { $in: hardwareIds } },
// { tankhardwareId: { $in: hardwareIds } }
// ]
// }).lean();
// const sensorMap = {};
// for (const sensor of sensors) {
// if (sensor.hardwareId) sensorMap[sensor.hardwareId] = sensor;
// if (sensor.tankhardwareId) sensorMap[sensor.tankhardwareId] = sensor;
// }
// const orders = await Order.find({ customerId }).lean();
// const orderMap = {};
// for (const order of orders) {
// (order.master_connections || []).forEach(conn => {
// if (conn.hardwareId) {
// orderMap[conn.hardwareId] = {
// masterName: conn.master_name || null,
// location: conn.location || null
// };
// }
// });
// }
// const slaveOrderMap = {};
// for (const order of orders) {
// (order.tank_connections || []).forEach(conn => {
// if (conn.hardwareId) {
// slaveOrderMap[conn.hardwareId] = {
// location: conn.location || null,
// typeOfWater: conn.typeOfWater || null
// };
// }
// });
// }
// const masterMap = {};
// const now = moment.tz("Asia/Kolkata");
// for (const issue of allIssues) {
// const masterId = issue.masterHardwareId || issue.hardwareId;
// const masterSensor = sensorMap[masterId];
// if (!masterSensor || masterSensor.type !== "master") continue;
// const stillUnresolved = allIssues.some(i =>
// (i.hardwareId === masterSensor.hardwareId || i.masterHardwareId === masterSensor.hardwareId) &&
// !i.resolved && !i.movedToCategory
// );
// if (!stillUnresolved) continue;
// const latestMasterData = await IotData.findOne({ hardwareId: masterSensor.hardwareId }).sort({ date: -1 }).lean();
// let gsmConnected = false;
// if (latestMasterData?.date) {
// const gsmTime = moment.tz(latestMasterData.date, "Asia/Kolkata");
// gsmConnected = now.diff(gsmTime, "minutes") <= 1;
// }
// // Get latest lastTicketRaisedAt for this master
// const relatedIssues = allIssues.filter(
// i =>
// i.hardwareId === masterSensor.hardwareId ||
// i.masterHardwareId === masterSensor.hardwareId
// );
// const lastTicketRaisedAt = relatedIssues.reduce((latest, issue) => {
// if (!issue.lastTicketRaisedAt) return latest;
// const current = new Date(issue.lastTicketRaisedAt);
// return !latest || current > new Date(latest) ? issue.lastTicketRaisedAt : latest;
// }, null);
// if (!masterMap[masterSensor.hardwareId]) {
// const enriched = orderMap[masterSensor.hardwareId] || {};
// masterMap[masterSensor.hardwareId] = {
// hardwareId: masterSensor.hardwareId,
// masterName: enriched.masterName || masterSensor.masterName || "",
// location: enriched.location || masterSensor.location || "",
// type: "master",
// connected_status: gsmConnected ? "connected" : "disconnected",
// 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,
// support_gsm_last_check_time: masterSensor.support_gsm_last_check_time,
// support_lora_last_check_time: masterSensor.support_lora_last_check_time,
// team_member_support_gsm_last_check_time: masterSensor.team_member_support_gsm_last_check_time,
// team_member_support_lora_last_check_time: masterSensor.team_member_support_lora_last_check_time,
// outDoor_status: masterSensor.outDoor_status || "inprogress",
// connected_slave_count: 0,
// connected_slaves: [],
// lastTicketRaisedAt: lastTicketRaisedAt
// };
// }
// const master = masterMap[masterSensor.hardwareId];
// const connectedSlaves = await Insensors.find({
// connected_to: masterSensor.hardwareId,
// type: "slave",
// customerId
// }).lean();
// const slaveSet = new Set(master.connected_slaves.map(s => s.hardwareId));
// for (const slave of connectedSlaves) {
// const slaveHardwareId = slave.tankhardwareId || slave.hardwareId;
// if (slaveSet.has(slaveHardwareId)) continue;
// slaveSet.add(slaveHardwareId);
// const tankInfo = await Tank.findOne({
// $or: [
// { hardwareId: slaveHardwareId },
// { tankhardwareId: slaveHardwareId }
// ]
// }).lean();
// const slaveOrderInfo = slaveOrderMap[slaveHardwareId] || {};
// const matchedTank = latestMasterData?.tanks?.find(t => t.tankhardwareId === slaveHardwareId);
// let loraConnected = false;
// if (matchedTank?.date && matchedTank.tankHeight !== "0") {
// const loraTime = moment.tz(matchedTank.date, "Asia/Kolkata");
// loraConnected = now.diff(loraTime, "minutes") <= 1;
// }
// // Get latest lastTicketRaisedAt for this slave
// const slaveRelatedIssues = allIssues.filter(
// i => i.hardwareId === slaveHardwareId
// );
// const slaveLastTicketRaisedAt = slaveRelatedIssues.reduce((latest, issue) => {
// if (!issue.lastTicketRaisedAt) return latest;
// const current = new Date(issue.lastTicketRaisedAt);
// return !latest || current > new Date(latest) ? issue.lastTicketRaisedAt : latest;
// }, null);
// const slaveEnriched = {
// hardwareId: slaveHardwareId,
// tankName: slave.tankName || tankInfo?.tankName || "",
// location: slave.location || tankInfo?.tankLocation || slaveOrderInfo.location || "",
// connected_status: loraConnected ? "connected" : "disconnected",
// connected_lora_time: slave.connected_lora_time,
// connected_lora_date: slave.connected_lora_date,
// lora_last_check_time: slave.lora_last_check_time,
// lora_last_disconnect_time: slave.lora_last_disconnect_time,
// connected_to: slave.connected_to,
// masterName: master.masterName,
// type: "slave",
// typeOfWater: slave.typeOfWater || tankInfo?.typeOfWater || slaveOrderInfo.typeOfWater || "",
// tankHeight: slave.tankHeight,
// support_lora_last_check_time: slave.support_lora_last_check_time,
// team_member_support_lora_last_check_time: slave.team_member_support_lora_last_check_time,
// lastTicketRaisedAt: slaveLastTicketRaisedAt,
// outDoor_status: slave.outDoor_status || "inprogress",
// };
// master.connected_slaves.push(slaveEnriched);
// master.connected_slave_count++;
// }
// }
// // Filter comments by customerId
// const comments = (supportRecord.comments || [])
// .filter(c => c.customerId === customerId)
// .map(c => ({
// text: c.text,
// commentsTime: moment(c.createdAt).tz("Asia/Kolkata").format("DD-MM-YYYY HH:mm")
// }));
// for (const master of Object.values(masterMap)) {
// master.comments = comments;
// }
// return reply.send({
// status_code: 200,
// supportId,
// customerId,
// totalMasters: Object.keys(masterMap).length,
// disconnectedIssues: Object.values(masterMap)
// });
// } catch (error) {
// console.error("Error fetching disconnected issues:", error);
// return reply.code(500).send({ error: "Internal server error" });
// }
// };
exports.getDisconnectedIssuesBySupportId = async (req, reply) => { exports.getDisconnectedIssuesBySupportId = async (req, reply) => {
try { try {
const { supportId, customerId } = req.params; const { supportId, customerId } = req.params;
@ -7186,8 +7403,16 @@ exports.getDisconnectedCustomerDetails = async (req, reply) => {
const allHardwareIds = [...hardwareIdsArray]; const allHardwareIds = [...hardwareIdsArray];
// const disconnectedSensorsRaw = await Insensors.find({
// connected_status: "disconnected",
// $or: [
// { connected_to: { $in: allHardwareIds } },
// { hardwareId: { $in: allHardwareIds } },
// { tankhardwareId: { $in: allHardwareIds } }
// ]
// }).lean();
const disconnectedSensorsRaw = await Insensors.find({ const disconnectedSensorsRaw = await Insensors.find({
connected_status: "disconnected",
$or: [ $or: [
{ connected_to: { $in: allHardwareIds } }, { connected_to: { $in: allHardwareIds } },
{ hardwareId: { $in: allHardwareIds } }, { hardwareId: { $in: allHardwareIds } },
@ -7240,28 +7465,28 @@ exports.getDisconnectedCustomerDetails = async (req, reply) => {
} }
} }
const customerIds = Object.keys(customerHardwareMap); const customerDetails = await User.find({
const [customerDetails, allDisconnectedSensors] = await Promise.all([ customerId: { $in: Object.keys(customerHardwareMap) }
User.find({ customerId: { $in: customerIds } }).lean(), }).lean();
Insensors.find({ customerId: { $in: customerIds }, connected_status: "disconnected" }).lean()
]);
const customerResults = customerDetails.map((customer) => { const customerResults = customerDetails.map((customer) => {
const customerId = customer.customerId; const customerId = customer.customerId;
const affectedHardwareSet = customerHardwareMap[customerId] || new Set(); const affectedHardwareSet = customerHardwareMap[customerId] || new Set();
const affectedLowerSet = new Set([...affectedHardwareSet].map(id => id.toLowerCase().trim())); const affectedLowerSet = new Set([...affectedHardwareSet].map(id => id.toLowerCase().trim()));
const disconnectedSensorsForCustomer = allDisconnectedSensors.filter( const disconnectedSensorsForCustomer = disconnectedSensors.filter(
s => s.customerId === customerId && s => s.customerId === customerId && s.connected_status === "disconnected"
(s.type === "master" || s.type === "slave") &&
s.connected_status === "disconnected"
); );
const uniqueDisconnectedHardwareIds = new Set(); const disconnectedSlaves = disconnectedSensorsForCustomer.filter(s => s.type === 'slave');
for (const sensor of disconnectedSensorsForCustomer) { const disconnectedMasters = disconnectedSensorsForCustomer.filter(s => s.type === 'master');
const hw = sensor.tankhardwareId || sensor.hardwareId || sensor.connected_to; console.log("disconnectedMasters",disconnectedMasters)
if (hw) uniqueDisconnectedHardwareIds.add(hw.trim()); const uniqueDisconnectedHardwareIds = new Set([
} ...disconnectedMasters.map(s => s.hardwareId?.trim()),
...disconnectedSlaves.map(s => s.tankhardwareId?.trim() || s.hardwareId?.trim())
].filter(Boolean));
const disconnectedCount = disconnectedMasters.length + disconnectedSlaves.length;
const customerIssues = unresolvedIssues.filter(issue => { const customerIssues = unresolvedIssues.filter(issue => {
const allIssueHardwareIds = [ const allIssueHardwareIds = [
@ -7280,7 +7505,7 @@ exports.getDisconnectedCustomerDetails = async (req, reply) => {
}, null); }, null);
return { return {
customerId, customerId: customer.customerId,
buildingName: customer.buildingName || "", buildingName: customer.buildingName || "",
location: customer.location || "", location: customer.location || "",
username: customer.username || "", username: customer.username || "",
@ -7297,7 +7522,7 @@ exports.getDisconnectedCustomerDetails = async (req, reply) => {
totalHardwareIdsCount: uniqueDisconnectedHardwareIds.size, totalHardwareIdsCount: uniqueDisconnectedHardwareIds.size,
hardwareIds: [...uniqueDisconnectedHardwareIds], hardwareIds: [...uniqueDisconnectedHardwareIds],
lastTicketRaisedAt: lastTicketRaisedAt || null, lastTicketRaisedAt: lastTicketRaisedAt || null,
disconnectedCount: disconnectedSensorsForCustomer.length // ✅ Added disconnected count disconnectedCount
}; };
}); });

Loading…
Cancel
Save