This commit is contained in:
2025-07-17 14:18:20 -05:00
parent e5b6c68da6
commit 18c1df3bd5
3 changed files with 101 additions and 73 deletions
+44 -23
View File
@@ -297,41 +297,62 @@ async function procesarArchivo(archivo) {
const datos = await obtenerDatosHoja(archivo.id); const datos = await obtenerDatosHoja(archivo.id);
const filasAProcesar = datos.slice(1) const todasLasFilas = datos.slice(1)
.map((row, index) => ({ .map((row, index) => ({
valor: row[0], // Columna A valor: row[0], // Columna A
fila: index + 2, // Número de fila real fila: index + 2, // Número de fila real
ultimaConsulta: row[1], // Columna B ultimaConsulta: row[1], // Columna B
columnaC: row[2] // Columna C columnaC: row[2] // Columna C
})) }));
.filter(row => {
if (!row.columnaC) return true; // Si la columna C está vacía, procesar
// Si la columna C no está vacía, verificar la fecha de última consulta en la columna B // Separate rows into three groups based on priority
if (!row.ultimaConsulta) return true; // Si no hay fecha en B, procesar (aunque C no esté vacía) const filasVaciasC = todasLasFilas.filter(row => !row.columnaC);
// Parsear la fecha en formato español DD/MM/YYYY const filasConFechaB = todasLasFilas.filter(row => {
const [date, time] = row.ultimaConsulta.split(', '); if (!row.columnaC && !row.ultimaConsulta) return false; // Already handled by filasVaciasC or filasVaciasB
const [day, month, year] = date.split('/'); if (!row.ultimaConsulta) return false; // Handled by filasVaciasB
const [hours, minutes, seconds] = time.split(':');
const fechaUltimaConsulta = new Date(year, month - 1, day, hours, minutes, seconds); const [date, time] = row.ultimaConsulta.split(', ');
const ahora = new Date(); const [day, month, year] = date.split('/');
const [hours, minutes, seconds] = time.split(':');
// Calcular la diferencia en horas const fechaUltimaConsulta = new Date(year, month - 1, day, hours, minutes, seconds);
const diferenciaHoras = (ahora - fechaUltimaConsulta) / (1000 * 60 * 60); const ahora = new Date();
// Para fechas futuras, no procesar const diferenciaHoras = (ahora - fechaUltimaConsulta) / (1000 * 60 * 60);
if (fechaUltimaConsulta > ahora) return false;
return diferenciaHoras > 1; // Procesar solo si ha pasado más de 1 hora if (fechaUltimaConsulta > ahora) return false; // For future dates, return false to skip processing
});
console.log(filasAProcesar); return diferenciaHoras > 1; // Process only if more than 1 hour has passed
});
console.log(`📊 Total de filas a procesar: ${filasAProcesar.length}`); const filasVaciasB = todasLasFilas.filter(row => {
return !row.ultimaConsulta && row.columnaC; // Empty F, but G is not empty
});
if (filasAProcesar.length > 0) { // Sort rows with date in B by oldest date first
filasConFechaB.sort((a, b) => {
const [dateA, timeA] = a.ultimaConsulta.split(', ');
const [dayA, monthA, yearA] = dateA.split('/');
const [hoursA, minutesA, secondsA] = timeA.split(':');
const fechaA = new Date(yearA, monthA - 1, dayA, hoursA, minutesA, secondsA);
const [dateB, timeB] = b.ultimaConsulta.split(', ');
const [dayB, monthB, yearB] = dateB.split('/');
const [hoursB, minutesB, secondsB] = timeB.split(':');
const fechaB = new Date(yearB, monthB - 1, dayB, hoursB, minutesB, secondsB);
return fechaA - fechaB; // Ascending order (oldest first)
});
// Combine the arrays in the specified priority order
const filasOrdenadas = [...filasVaciasC, ...filasConFechaB, ...filasVaciasB];
console.log(filasOrdenadas);
console.log(`📊 Total de filas a procesar: ${filasOrdenadas.length}`);
if (filasOrdenadas.length > 0) {
console.log('🌐 Iniciando navegador...'); console.log('🌐 Iniciando navegador...');
let browser = await initBrowser(platform); let browser = await initBrowser(platform);
let page = (await browser.pages())[0]; let page = (await browser.pages())[0];
@@ -339,9 +360,9 @@ async function procesarArchivo(archivo) {
const MAX_FALLOS_CONSECUTIVOS = 3; const MAX_FALLOS_CONSECUTIVOS = 3;
let procesadas = 0; let procesadas = 0;
for (const element of filasAProcesar) { for (const element of filasOrdenadas) {
procesadas++; procesadas++;
console.log(`\n⏳ Procesando fila ${element.fila} (${procesadas}/${filasAProcesar.length})`); console.log(`\n⏳ Procesando fila ${element.fila} (${procesadas}/${filasOrdenadas.length})`);
console.log(`📝 Valor a consultar: ${element.valor}`); console.log(`📝 Valor a consultar: ${element.valor}`);
// Guardar la fecha y hora actual // Guardar la fecha y hora actual
+6 -6
View File
@@ -1,7 +1,7 @@
{ {
"name": "migracion-uscis", "name": "migracion-corte",
"version": "1.0.0", "version": "1.0.1",
"main": "uscis.mjs", "main": "corte.mjs",
"scripts": { "scripts": {
"test": "echo \"Error: no test specified\" && exit 1", "test": "echo \"Error: no test specified\" && exit 1",
"start": "electron .", "start": "electron .",
@@ -10,7 +10,7 @@
"keywords": [], "keywords": [],
"author": "", "author": "",
"license": "ISC", "license": "ISC",
"description": "Migracion Uscis", "description": "Migracion Corte",
"dependencies": { "dependencies": {
"googleapis": "^144.0.0", "googleapis": "^144.0.0",
"node-fetch": "^3.3.2", "node-fetch": "^3.3.2",
@@ -23,8 +23,8 @@
}, },
"type": "module", "type": "module",
"build": { "build": {
"appId": "com.migracion.uscis.id", "appId": "com.migracion.corte.id",
"productName": "Migracion Uscis", "productName": "Migracion Corte",
"win": { "win": {
"target": "nsis", "target": "nsis",
"icon": "path/to/icon.ico" "icon": "path/to/icon.ico"
+44 -37
View File
@@ -265,56 +265,63 @@ async function procesarArchivo(archivo) {
const platform_type = 'uscis'; const platform_type = 'uscis';
const platform = CONFIG.PLATFORMS[platform_type.toUpperCase()].URL; const platform = CONFIG.PLATFORMS[platform_type.toUpperCase()].URL;
// const filasAProcesar = datos.slice(1).map((row, index) => ({ const todasLasFilas = datos.slice(1)
// valor: row[4],
// fila: index + 2,
// tieneValor: !row[5],
// ultimaConsulta: row[5] || ''
// })).filter(row => {
// if (!row.ultimaConsulta) return true;
// const fechaUltimaConsulta = new Date(row.ultimaConsulta);
// const ahora = new Date();
// const diferenciaHoras = (ahora - fechaUltimaConsulta) / (1000 * 60 * 60);
// return diferenciaHoras > 1;
// });
const filasAProcesar = datos.slice(1)
.map((row, index) => ({ .map((row, index) => ({
valor: row[4], // Columna 5 (Valor a consultar) valor: row[4], // Columna 5 (Valor a consultar)
fila: index + 2, // Número de fila real fila: index + 2, // Número de fila real
ultimaConsulta: row[5], // Columna 6 (Fecha de última consulta) ultimaConsulta: row[5], // Columna 6 (Fecha de última consulta)
resultado: row[6] // Columna 7 (Resultado) resultado: row[6] // Columna 7 (Resultado)
})) }));
.filter(row => {
// Priorizar si la columna G (resultado) está vacía
if (!row.resultado) return true;
// Si la columna G no está vacía, verificar la fecha en la columna F // Filter rows that need processing (either G is empty or F is older than 1 hour)
if (!row.ultimaConsulta) return true; // Si no hay fecha en F, también se procesa (aunque G no esté vacía) const filasAProcesar = todasLasFilas.filter(row => {
if (!row.resultado) return true; // Prioritize if column G (resultado) is empty
// Parse date in Spanish format DD/MM/YYYY if (!row.ultimaConsulta) return true; // If no date in F, also process (even if G is not empty)
const [date, time] = row.ultimaConsulta.split(', ');
const [day, month, year] = date.split('/');
const [hours, minutes, seconds] = time.split(':');
const fechaUltimaConsulta = new Date(year, month - 1, day, hours, minutes, seconds); const [date, time] = row.ultimaConsulta.split(', ');
const ahora = new Date(); const [day, month, year] = date.split('/');
const [hours, minutes, seconds] = time.split(':');
// Calculate hours difference const fechaUltimaConsulta = new Date(year, month - 1, day, hours, minutes, seconds);
const diferenciaHoras = (ahora - fechaUltimaConsulta) / (1000 * 60 * 60); const ahora = new Date();
// For future dates, return false to skip processing const diferenciaHoras = (ahora - fechaUltimaConsulta) / (1000 * 60 * 60);
if (fechaUltimaConsulta > ahora) return false;
return diferenciaHoras > 1; // Process only if more than 1 hour has passed if (fechaUltimaConsulta > ahora) return false; // For future dates, return false to skip processing
});
console.log(filasAProcesar); return diferenciaHoras > 1; // Process only if more than 1 hour has passed
});
// Separate rows into three groups based on priority
const filasVaciasG = filasAProcesar.filter(row => !row.resultado);
const filasVaciasF = filasAProcesar.filter(row => row.resultado && !row.ultimaConsulta);
const filasConFechaF = filasAProcesar.filter(row => row.resultado && row.ultimaConsulta);
// Sort rows with date in F by oldest date first
filasConFechaF.sort((a, b) => {
const [dateA, timeA] = a.ultimaConsulta.split(', ');
const [dayA, monthA, yearA] = dateA.split('/');
const [hoursA, minutesA, secondsA] = timeA.split(':');
const fechaA = new Date(yearA, monthA - 1, dayA, hoursA, minutesA, secondsA);
const [dateB, timeB] = b.ultimaConsulta.split(', ');
const [dayB, monthB, yearB] = dateB.split('/');
const [hoursB, minutesB, secondsB] = timeB.split(':');
const fechaB = new Date(yearB, monthB - 1, dayB, hoursB, minutesB, secondsB);
return fechaA - fechaB; // Ascending order (oldest first)
});
// Combine the arrays in the specified priority order
const filasOrdenadas = [...filasVaciasG, ...filasConFechaF, ...filasVaciasF];
console.log(filasOrdenadas);
console.log(`📊 Total de filas a procesar: ${filasAProcesar.length}`); console.log(`📊 Total de filas a procesar: ${filasOrdenadas.length}`);
if (filasAProcesar.length > 0) { if (filasOrdenadas.length > 0) {
console.log('🌐 Iniciando navegador...'); console.log('🌐 Iniciando navegador...');
let browser = await initBrowser(platform); let browser = await initBrowser(platform);
let page = (await browser.pages())[0]; let page = (await browser.pages())[0];
@@ -322,9 +329,9 @@ async function procesarArchivo(archivo) {
const MAX_FALLOS_CONSECUTIVOS = 3; const MAX_FALLOS_CONSECUTIVOS = 3;
let procesadas = 0; let procesadas = 0;
for (const element of filasAProcesar) { for (const element of filasOrdenadas) {
procesadas++; procesadas++;
console.log(`\n⏳ Procesando fila ${element.fila} (${procesadas}/${filasAProcesar.length})`); console.log(`\n⏳ Procesando fila ${element.fila} (${procesadas}/${filasOrdenadas.length})`);
console.log(`📝 Valor a consultar: ${element.valor}`); console.log(`📝 Valor a consultar: ${element.valor}`);
// Guardar la fecha y hora actual // Guardar la fecha y hora actual