TopSapp/Fiberhome: fix adicionar ONU ao FHTT do Topsapp_part2

Signed-off-by: Rodrigo Bertoldo de Sousa Martins <rodrigo.sousa.577@gmail.com>
This commit is contained in:
rodrigo committed 2026-03-29 15:16:08 -03:00
1 parent 1fb51e55c6
commit 6de9aeb810
1 file changed
+46 -31
+46 -31
View File
@@ -6162,50 +6162,65 @@ Digite /help para ver todos os comandos disponíveis!
const olts = oltsResult.data?.dados?.dados || oltsResult.data?.dados || []; const olts = oltsResult.data?.dados?.dados || oltsResult.data?.dados || [];
// 1. Tentar por SSID (IP de gerência) // Mapa manual de keywords por oltId/tipo → para busca no campo ssid e nome do TopSapp
let oltEncontrada = olts.find(o => o.ssid === onuData.oltHost); // Fonte: valores reais de ssid cadastrados no TopSapp
const SSID_KEYWORDS = {
'fiberhome': ['fiberhome', '172.16.10.6'],
'olt_colmeia': ['colmeia'],
'olt_canaa': ['canaa'],
'olt_canaa2': ['canaa 2', 'canaa2'],
'olt_dito': ['dito'],
'olt_pedro_afonso': ['pedro', 'afonso'],
'olt_canavieiras': ['canavieiras']
};
// 2. Para Datacom: buscar por keyword do oltId no nome da OLT /**
* Busca uma OLT na lista pelo campo nome OU ssid usando lista de keywords.
* Tenta match com TODOS os tokens primeiro; se falhar, com QUALQUER token.
*/
const buscarPorKeywords = (keywords) => {
const found = olts.find(o => {
const haystack = `${o.nome || ''} ${o.ssid || ''}`.toLowerCase();
return keywords.every(k => haystack.includes(k));
});
if (found) return found;
return olts.find(o => {
const haystack = `${o.nome || ''} ${o.ssid || ''}`.toLowerCase();
return keywords.some(k => haystack.includes(k));
});
};
let oltEncontrada = null;
// 1. Match manual pelo tipo (Fiberhome) ou oltId (Datacom)
const tipoKey = onuData.tipo === 'fiberhome' ? 'fiberhome' : onuData.oltId;
if (tipoKey && SSID_KEYWORDS[tipoKey]) {
oltEncontrada = buscarPorKeywords(SSID_KEYWORDS[tipoKey]);
if (oltEncontrada) {
console.log(`✅ OLT encontrada por mapa manual (${tipoKey}): "${oltEncontrada.nome}" / ssid: "${oltEncontrada.ssid}"`);
}
}
// 2. Fallback: keyword livre do oltId (Datacom sem mapa definido)
if (!oltEncontrada && onuData.oltId) { if (!oltEncontrada && onuData.oltId) {
const keyword = onuData.oltId.replace(/^olt_/, '').replace(/_/g, ' ').toLowerCase(); const keyword = onuData.oltId.replace(/^olt_/, '').replace(/_/g, ' ').toLowerCase();
const keywords = keyword.split(' ').filter(k => k.length > 2); const keywords = keyword.split(' ').filter(k => k.length > 2);
oltEncontrada = olts.find(o => { oltEncontrada = buscarPorKeywords(keywords);
const nome = (o.nome || '').toLowerCase();
return keywords.every(k => nome.includes(k));
});
// Se não encontrou com todos, tenta com qualquer um
if (!oltEncontrada) {
oltEncontrada = olts.find(o => {
const nome = (o.nome || '').toLowerCase();
return keywords.some(k => nome.includes(k));
});
}
if (oltEncontrada) { if (oltEncontrada) {
console.log(`✅ OLT encontrada por nome (oltId): "${oltEncontrada.nome}" (keyword: "${keyword}")`); console.log(`✅ OLT encontrada por keyword livre (oltId): "${oltEncontrada.nome}" (keyword: "${keyword}")`);
} }
} }
// 2b. Para Fiberhome: buscar por keyword do oltHost (nome da OLT retornado pelo SSH) // 3. Fallback: keyword livre do oltHost (Fiberhome sem mapa definido)
if (!oltEncontrada && onuData.oltHost) { if (!oltEncontrada && onuData.oltHost) {
const keyword = onuData.oltHost.toLowerCase(); const keywords = onuData.oltHost.toLowerCase().split(/[\s_\-]+/).filter(k => k.length > 1);
const keywords = keyword.split(/[\s_\-]+/).filter(k => k.length > 1); oltEncontrada = buscarPorKeywords(keywords);
oltEncontrada = olts.find(o => {
const nome = (o.nome || '').toLowerCase();
return keywords.every(k => nome.includes(k));
});
// Se não encontrou com todos, tenta com qualquer um
if (!oltEncontrada) {
oltEncontrada = olts.find(o => {
const nome = (o.nome || '').toLowerCase();
return keywords.some(k => nome.includes(k));
});
}
if (oltEncontrada) { if (oltEncontrada) {
console.log(`✅ OLT encontrada por oltHost: "${oltEncontrada.nome}" (keyword: "${keyword}")`); console.log(`✅ OLT encontrada por keyword livre (oltHost): "${oltEncontrada.nome}" (keyword: "${onuData.oltHost}")`);
} }
} }
// 3. Fallback: primeira OLT disponível // 4. Fallback: primeira OLT disponível
if (!oltEncontrada && olts.length > 0) { if (!oltEncontrada && olts.length > 0) {
oltEncontrada = olts[0]; oltEncontrada = olts[0];
console.log(`⚠️ OLT não identificada — usando a primeira disponível: ${oltEncontrada.nome}`); console.log(`⚠️ OLT não identificada — usando a primeira disponível: ${oltEncontrada.nome}`);