Actualizar server.js
This commit is contained in:
58
server.js
58
server.js
@@ -1808,7 +1808,7 @@ app.post("/providers/credentials", authMiddleware, async (req, res) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// ==========================================
|
// ==========================================
|
||||||
// 📥 RECEPCIÓN DE SERVICIOS (EMBUDO DIRECTO)
|
// 📥 RECEPCIÓN DE SERVICIOS (EMBUDO INTELIGENTE CON AUTO-DESPACHO)
|
||||||
// ==========================================
|
// ==========================================
|
||||||
app.post("/providers/scraped", authMiddleware, async (req, res) => {
|
app.post("/providers/scraped", authMiddleware, async (req, res) => {
|
||||||
try {
|
try {
|
||||||
@@ -1819,42 +1819,80 @@ app.post("/providers/scraped", authMiddleware, async (req, res) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let count = 0;
|
let count = 0;
|
||||||
|
|
||||||
|
// 🛑 1. CARGAMOS LA CONFIGURACIÓN DE AUTO-DESPACHO DE ESTE PROVEEDOR
|
||||||
|
const credsQ = await pool.query(
|
||||||
|
"SELECT auto_dispatch FROM provider_credentials WHERE owner_id = $1 AND provider = $2",
|
||||||
|
[req.user.accountId, provider]
|
||||||
|
);
|
||||||
|
const autoDispatchEnabled = credsQ.rowCount > 0 && credsQ.rows[0].auto_dispatch === true;
|
||||||
|
|
||||||
for (const svc of services) {
|
for (const svc of services) {
|
||||||
|
|
||||||
// 1. Extraer la referencia
|
// 2. Extraer la referencia
|
||||||
const ref = svc['Referencia'] || svc['Nº Siniestro'] || svc['Expediente'] || svc['service_ref'];
|
const ref = svc['Referencia'] || svc['Nº Siniestro'] || svc['Expediente'] || svc['service_ref'];
|
||||||
if (!ref) continue;
|
if (!ref) continue;
|
||||||
|
|
||||||
// 🔥 2. DETECTOR DIRECTO DE URGENCIAS 🔥
|
// 🔥 3. DETECTOR DIRECTO DE URGENCIAS
|
||||||
let esUrgente = false;
|
let esUrgente = false;
|
||||||
|
|
||||||
// Leemos el estado venga en la columna que venga (HomeServe suele usar 'ACTUALMENTE EN' o 'Estado')
|
|
||||||
const estadoSvc = String(svc['ACTUALMENTE EN'] || svc['Estado'] || svc['ESTADO'] || "").toLowerCase();
|
const estadoSvc = String(svc['ACTUALMENTE EN'] || svc['Estado'] || svc['ESTADO'] || "").toLowerCase();
|
||||||
|
|
||||||
// Si el estado contiene la frase exacta de HomeServe o la palabra urgencia
|
|
||||||
if (estadoSvc.includes('atencion presencial urgencias') || estadoSvc.includes('urgencia')) {
|
if (estadoSvc.includes('atencion presencial urgencias') || estadoSvc.includes('urgencia')) {
|
||||||
esUrgente = true;
|
esUrgente = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Por si acaso algún otro proveedor (como Multi) envía una columna literal llamada "Urgente"
|
|
||||||
if (String(svc['Urgente']).toLowerCase() === 'sí' || String(svc['URGENTE']).toLowerCase() === 'si' || String(svc['Urgente']).toLowerCase() === 'true') {
|
if (String(svc['Urgente']).toLowerCase() === 'sí' || String(svc['URGENTE']).toLowerCase() === 'si' || String(svc['Urgente']).toLowerCase() === 'true') {
|
||||||
esUrgente = true;
|
esUrgente = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. Guardamos en la Base de Datos
|
// 🕵️ 4. EXTRAER GREMIO (Ya viene en el objeto enviado)
|
||||||
await pool.query(`
|
const guildId = svc.guild_id || svc['guild_id'];
|
||||||
|
|
||||||
|
// 5. Guardamos en la Base de Datos
|
||||||
|
// Usamos RETURNING para saber el ID generado y el estado de automatización actual
|
||||||
|
const insertRes = await pool.query(`
|
||||||
INSERT INTO scraped_services (owner_id, provider, service_ref, raw_data, is_urgent)
|
INSERT INTO scraped_services (owner_id, provider, service_ref, raw_data, is_urgent)
|
||||||
VALUES ($1, $2, $3, $4, $5)
|
VALUES ($1, $2, $3, $4, $5)
|
||||||
ON CONFLICT (owner_id, provider, service_ref)
|
ON CONFLICT (owner_id, provider, service_ref)
|
||||||
DO UPDATE SET
|
DO UPDATE SET
|
||||||
raw_data = scraped_services.raw_data || EXCLUDED.raw_data,
|
raw_data = scraped_services.raw_data || EXCLUDED.raw_data,
|
||||||
is_urgent = EXCLUDED.is_urgent
|
is_urgent = EXCLUDED.is_urgent
|
||||||
|
RETURNING id, automation_status
|
||||||
`, [req.user.accountId, provider, ref, JSON.stringify(svc), esUrgente]);
|
`, [req.user.accountId, provider, ref, JSON.stringify(svc), esUrgente]);
|
||||||
|
|
||||||
|
const newSvcId = insertRes.rows[0].id;
|
||||||
|
const autoStatus = insertRes.rows[0].automation_status;
|
||||||
|
|
||||||
|
// 🚀 6. ¡DISPARADOR AUTOMÁTICO DE URGENCIAS!
|
||||||
|
// Solo si: Es urgente + Tiene Gremio + Botón ON + No se ha enviado ya (status manual/pending)
|
||||||
|
if (esUrgente && guildId && autoDispatchEnabled && (autoStatus === 'manual' || autoStatus === 'pending')) {
|
||||||
|
console.log(`⚡ [AUTO-DISPATCH] Lanzando urgencia ${ref} de ${provider} a la bolsa...`);
|
||||||
|
|
||||||
|
// Extraemos CP para afinar la búsqueda si es posible
|
||||||
|
const cpMatch = String(svc['Código Postal'] || svc['C.P.'] || "").match(/\b\d{5}\b/);
|
||||||
|
const cpFinal = cpMatch ? cpMatch[0] : "00000";
|
||||||
|
|
||||||
|
// Llamamos a tu lógica de automatización interna
|
||||||
|
// Usamos fetch local para reutilizar la lógica de asignación aleatoria y pings
|
||||||
|
const port = process.env.PORT || 3000;
|
||||||
|
fetch(`http://127.0.0.1:${port}/providers/automate/${newSvcId}`, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
'Authorization': req.headers.authorization // Reutilizamos el token del scraper
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
guild_id: guildId,
|
||||||
|
cp: cpFinal,
|
||||||
|
useDelay: false
|
||||||
|
})
|
||||||
|
}).catch(e => console.error("Error en auto-despacho fetch:", e.message));
|
||||||
|
}
|
||||||
|
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(`📥 [CAPTURA] Recibidos ${count} servicios de ${provider}.`);
|
console.log(`📥 [CAPTURA] Procesados ${count} servicios de ${provider}. Auto-Despacho: ${autoDispatchEnabled ? 'ON' : 'OFF'}`);
|
||||||
res.json({ ok: true, inserted: count });
|
res.json({ ok: true, inserted: count });
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
Reference in New Issue
Block a user