|
|
|
@ -4278,29 +4278,121 @@ exports.assignCategorizeIssue = async (request, reply) => {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
exports.getCategorizedIssue = async (request, reply) => {
|
|
|
|
|
const { support_teamMemberId } = request.params;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const supports = await Support.aggregate([
|
|
|
|
|
{ $unwind: '$categorizedIssues' },
|
|
|
|
|
{ $match: { 'categorizedIssues.assignedTo.support_teamMemberId': support_teamMemberId } },
|
|
|
|
|
{
|
|
|
|
|
$group: {
|
|
|
|
|
_id: '$_id',
|
|
|
|
|
supportId: { $first: '$supportId' },
|
|
|
|
|
categorizedIssues: { $push: '$categorizedIssues' }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
exports.getCategorizedIssue = async (request, reply) => {
|
|
|
|
|
try {
|
|
|
|
|
const { support_teamMemberId } = request.params;
|
|
|
|
|
|
|
|
|
|
if (!support_teamMemberId) {
|
|
|
|
|
return reply.code(400).send({ error: "support_teamMemberId is required" });
|
|
|
|
|
}
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
if (supports.length === 0) {
|
|
|
|
|
return reply.code(404).send({ message: 'No categorized issues assigned to this team member.' });
|
|
|
|
|
}
|
|
|
|
|
const supportRecords = await Support.find({
|
|
|
|
|
'categorizedIssues.assignedTo.support_teamMemberId': support_teamMemberId
|
|
|
|
|
}).lean();
|
|
|
|
|
|
|
|
|
|
if (!supportRecords.length) {
|
|
|
|
|
return reply.code(404).send({ message: 'No categorized issues assigned to this team member.' });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return reply.send({
|
|
|
|
|
supportId: supports[0].supportId,
|
|
|
|
|
categorizedIssues: supports[0].categorizedIssues
|
|
|
|
|
});
|
|
|
|
|
const allIssues = supportRecords.flatMap(s =>
|
|
|
|
|
s.categorizedIssues
|
|
|
|
|
.filter(i => i.assignedTo?.support_teamMemberId === support_teamMemberId)
|
|
|
|
|
.map(i => ({ ...i, supportId: s.supportId }))
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
const supportId = allIssues[0].supportId;
|
|
|
|
|
const hardwareIds = allIssues.map(issue => issue.hardwareId).filter(Boolean);
|
|
|
|
|
const masterHardwareIds = allIssues.map(issue => issue.masterHardwareId).filter(Boolean);
|
|
|
|
|
|
|
|
|
|
const insensors = await Insensors.find({
|
|
|
|
|
$or: [
|
|
|
|
|
{ hardwareId: { $in: hardwareIds } },
|
|
|
|
|
{ hardwareId: { $in: masterHardwareIds } }
|
|
|
|
|
],
|
|
|
|
|
connected_status: "disconnected"
|
|
|
|
|
}).lean();
|
|
|
|
|
|
|
|
|
|
if (!insensors.length) {
|
|
|
|
|
return reply.code(404).send({ message: "No disconnected devices found for this team member." });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const customerId = insensors[0]?.customerId || null;
|
|
|
|
|
const orders = customerId ? await Order.find({ customerId }).lean() : [];
|
|
|
|
|
|
|
|
|
|
const orderMap = {};
|
|
|
|
|
orders.forEach(order => {
|
|
|
|
|
order.master_connections?.forEach(conn => {
|
|
|
|
|
orderMap[conn.hardwareId] = {
|
|
|
|
|
masterName: conn.master_name || null,
|
|
|
|
|
location: conn.location || null
|
|
|
|
|
};
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const disconnectedIssues = [];
|
|
|
|
|
|
|
|
|
|
const masters = insensors.filter(d => d.type === "master");
|
|
|
|
|
|
|
|
|
|
for (const master of masters) {
|
|
|
|
|
const masterIssue = allIssues.find(i => i.masterHardwareId === master.hardwareId);
|
|
|
|
|
if (!masterIssue) continue;
|
|
|
|
|
|
|
|
|
|
const slaves = await Insensors.find({
|
|
|
|
|
connected_to: master.hardwareId,
|
|
|
|
|
connected_status: "disconnected",
|
|
|
|
|
type: "slave"
|
|
|
|
|
}).lean();
|
|
|
|
|
|
|
|
|
|
const slaveDetails = [];
|
|
|
|
|
|
|
|
|
|
for (const slave of slaves) {
|
|
|
|
|
const issue = allIssues.find(i =>
|
|
|
|
|
i.hardwareId === slave.hardwareId ||
|
|
|
|
|
(Array.isArray(i.hardwareIds) && i.hardwareIds.includes(slave.hardwareId))
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
slaveDetails.push({
|
|
|
|
|
hardwareId: slave.hardwareId,
|
|
|
|
|
tankName: slave.tankName || "",
|
|
|
|
|
location: slave.location || "",
|
|
|
|
|
connected_status: slave.connected_status,
|
|
|
|
|
lora_last_disconnect_time: slave.lora_last_disconnect_time
|
|
|
|
|
? moment(slave.lora_last_disconnect_time).format("DD-MM-YYYY HH:mm:ss")
|
|
|
|
|
: null,
|
|
|
|
|
connected_to: slave.connected_to || "",
|
|
|
|
|
masterName: orderMap[master.hardwareId]?.masterName || "",
|
|
|
|
|
type: "slave",
|
|
|
|
|
typeOfWater: "",
|
|
|
|
|
support_lora_last_check_time: null,
|
|
|
|
|
category: issue?.category || ""
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
disconnectedIssues.push({
|
|
|
|
|
hardwareId: master.hardwareId,
|
|
|
|
|
masterName: orderMap[master.hardwareId]?.masterName || "",
|
|
|
|
|
location: orderMap[master.hardwareId]?.location || "",
|
|
|
|
|
type: "master",
|
|
|
|
|
connected_status: master.connected_status,
|
|
|
|
|
gsm_last_disconnect_time: master.gsm_last_disconnect_time
|
|
|
|
|
? moment(master.gsm_last_disconnect_time).format("DD-MM-YYYY HH:mm:ss")
|
|
|
|
|
: null,
|
|
|
|
|
support_gsm_last_check_time: null,
|
|
|
|
|
connected_slave_count: slaveDetails.length,
|
|
|
|
|
connected_slaves: slaveDetails,
|
|
|
|
|
category: masterIssue?.category || ""
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return reply.send({
|
|
|
|
|
status_code: 200,
|
|
|
|
|
supportId,
|
|
|
|
|
totalMasters: disconnectedIssues.length,
|
|
|
|
|
disconnectedIssues
|
|
|
|
|
});
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error("Error in getCategorizedIssue:", error);
|
|
|
|
|
return reply.code(500).send({ error: "Internal server error" });
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|