Setup Coda d'Import CSV
Setup Coda d'Import CSV
๐ฏ Panoramica
La Coda d'Import รจ il sistema centrale per gestire i CSV che arrivano dalle macchine Industria 4.0. Permette di:
- Scansionare cartelle per nuovi CSV
- Validare CSV contro profili
- Elaborare CSV (import dati)
- Gestire errori e retry
- Monitorare stato elaborazioni
machine_id,profile_id- Associazionifilename,file_path,file_hash- Info filesource_channel- Provenienza (upload, api, watch_folder...)status- pendingโvalidatingโvalidatedโprocessingโcompletedis_valid- Risultato validazione (NULL/TRUE/FALSE)rows_total,rows_processed,rows_failed- Statisticheretry_count- Numero tentativivalidated_by,processed_by- Chi ha eseguito (NULL = automatico)- Profilo ha colonne definite?
- CSV ha header se
- Delimitatore corretto nel profilo?
- Encoding corretto?
- โ
- โ
- โ
- โ
- โ
- โ
- โ
- โ
- Scansione manuale
- Validazione manuale
- Elaborazione manuale
- Form upload CSV diretto
- Selezione macchina/profilo
- Salvataggio automatico in cartella corretta
- Jobs per elaborazione background
- Queue Worker
- Scheduler per scansione automatica
- Definire dove vanno i dati elaborati
- Implementare
- Gestione transazioni
Modalitร : MANUALE (Ora)
Tutte le operazioni richiedono click utente. Nessun processo automatico.---
๐ Database
Tabella: csv_imports
Traccia ogni CSV dal momento dell'arrivo fino al completamento (o fallimento).
Campi Principali:
Installazione
``bash
mysql -u root -p capera_sartupDB < database/sql/create_csv_imports_table.sql
`
---
๐๏ธ Architettura
Services (Business Logic)
CsvScannerService
`php
scanForNewCsvs() // Scansiona tutte le cartelle
scanMachinePath($machine) // Scansiona path specifico
registerCsv($file, ...) // Registra CSV in database
getScanStats() // Statistiche scansione
`Cosa fa: Trova CSV nelle cartelle
connettore_I40/csv_I40_X_Y/ e li registra in csv_imports.CsvValidatorService
`php
validate($csvImport): ValidationResult
`Cosa fa:
1. Verifica file esista
2. Legge CSV con League\Csv
3. Verifica colonne corrispondano al profilo
4. Conta righe
5. Restituisce
ValidationResult (isValid, errors, rowsCount)โญ RIUSABILE: Chiamato sia da Controller (manuale) che da Job (futuro automatico)
CsvProcessorService
`php
process($csvImport): ProcessingResult
`Cosa fa:
1. Legge CSV validato
2. Elabora riga per riga
3. Importa dati (TODO: definire destinazione)
4. Restituisce
ProcessingResult (success, rowsProcessed, rowsFailed)โญ RIUSABILE: Chiamato sia da Controller (manuale) che da Job (futuro automatico)
---
๐ฎ Controller
CsvImportsController</h3></p><p>| Metodo | Route | Descrizione |
|--------|-------|-------------|
| </code>index()<code> | GET </code>/csv-imports<code> | Lista CSV con filtri |
| </code>scanNewCsvs()<code> | POST </code>/csv-imports/scan<code> | Scansiona manualmente |
| </code>show($id)<code> | GET </code>/csv-imports/{id}<code> | Dettagli JSON |
| </code>validate($id)<code> | POST </code>/csv-imports/{id}/validate<code> | Valida CSV |
| </code>process($id)<code> | POST </code>/csv-imports/{id}/process<code> | Elabora CSV |
| </code>pause($id)<code> | POST </code>/csv-imports/{id}/pause<code> | Metti in pausa |
| </code>resume($id)<code> | POST </code>/csv-imports/{id}/resume<code> | Riprendi |
| </code>retry($id)<code> | POST </code>/csv-imports/{id}/retry<code> | Riprova |
| </code>destroy($id)<code> | DELETE </code>/csv-imports/{id}<code> | Elimina |</p><p>---</p><p><h2>๐จ Vista</h2></p><p><h3>Layout</h3></p><p></code>`<code>
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ [๐ Scansiona Nuovi CSV] [โ๏ธ Configurazione] โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ ๐ [In Attesa: 12] [Validati: 45] [Pausa: 3] [Falliti: 2]โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Filtri: [Macchina โผ] [Stato โผ] [Canale โผ] โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ ๐ Tabella CSV โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ</p><p><h3>Azioni per Stato</h3></p><p>| Stato | Azioni Disponibili | |-------|--------------------| | </code>pending<code> | ๐๏ธ Dettagli, โ Valida, โธ๏ธ Pausa, ๐๏ธ Elimina | |
| ๐๏ธ Dettagli, โถ๏ธ Elabora, โธ๏ธ Pausa, ๐๏ธ Elimina | |
| ๐๏ธ Dettagli, โถ๏ธ Riprendi, ๐๏ธ Elimina |
| failed | ๐๏ธ Dettagli, ๐ Riprova, ๐๏ธ Elimina |
| completed | ๐๏ธ Dettagli, ๐๏ธ Elimina |---
๐ Stati del CSV
`pending โ validating โ validated โ processing โ completed โ โ โ โ failed โ failed paused โ failed โ โ โ โโโโ retry โโโโโโโ resume โโโ retry
Descrizione Stati:
1. pending - Appena trovato, in attesa validazione
2. validating - Validazione in corso
3. validated - Validato OK, pronto per elaborazione
4. paused - Messo in pausa dall'utente
5. processing - Elaborazione in corso
6. completed - Elaborazione completata con successo
7. failed - Validazione o elaborazione fallita
---
๐ Workflow Utente
1. Scansiona Nuovi CSV
`
Click "Scansiona Nuovi CSV"
โ
Sistema cerca in tutte le cartelle csv_I40_X_Y/
โ
Registra nuovi CSV trovati (status: pending)
โ
Toast: "Trovati X nuovi CSV!"
`</p><p><h3>2. Valida CSV</h3></p><p></code>`<code>
Click โ su riga CSV pending
โ
CsvValidatorService::validate()
โโ Verifica colonne
โโ Conta righe
โโ Cerca errori
โ
Status: validated (OK) o failed (KO)
โ
Toast: "CSV validato!" o "Validazione fallita: X errori"</p><p><h3>3. Elabora CSV</h3></p><p></code>`<code>
Click โถ๏ธ su riga CSV validated
โ
CsvProcessorService::process()
โโ Legge righe
โโ Importa dati (TODO)
โโ Traccia successi/fallimenti
โ
Status: completed (OK) o failed (KO)
โ
Toast: "Elaborazione completata! X righe importate"</p><p><h3>4. Gestione Errori</h3></p><p></code>`<code>
Se failed:
โโ Click ๐๏ธ โ Vedi errori dettagliati
โโ Correggi CSV manualmente
โโ Click ๐ Riprova
โโ Oppure ๐๏ธ Elimina---
๐ Installazione
1. Database
`bash
mysql -u root -p capera_sartupDB < database/sql/create_csv_imports_table.sql
`2. Voce Menรน
`sql
UPDATE menu_items
SET route_name = 'admin.i40.csv-imports.index'
WHERE label = 'Coda d\'import'
AND parent_id = (SELECT id FROM (SELECT id FROM menu_items WHERE label = 'Industria 4.0') AS tmp);
`3. Test
`
/admin/i40/csv-imports
`---
๐งช Test Manuale
Prepara CSV di Test
`bash
1. Trova una cartella CSV esistente
ls -la storage/app/connettore_I40/2. Copia un CSV di test
cp test.csv storage/app/connettore_I40/csv_I40_1_1/sample.csv
`Testa Workflow
1. Vai a
/admin/i40/csv-imports
2. Click "Scansiona Nuovi CSV"
3. Dovresti vedere sample.csv in coda (status: pending)
4. Click โ per validare
5. Se OK: Click โถ๏ธ per elaborare
6. Click ๐๏ธ per vedere dettagli---
๐ง Troubleshooting
CSV Non Trovati dalla Scansione
Verifica:
`bash
1. Cartelle esistono?
ls -la storage/app/connettore_I40/2. CSV presenti?
find storage/app/connettore_I40/ -name "*.csv"3. Permessi corretti?
chmod -R 755 storage/app/connettore_I40/
`Validazione Sempre Fallisce
Verifica:
has_header = 1?
Debug:
`php
// In CsvValidatorService, aggiungi:
Log::debug('CSV Headers: ' . json_encode($csvHeaders));
Log::debug('Expected: ' . json_encode($expectedColumns));
`---
๐ File Implementati
Backend
app/Models/I40/CsvImport.php
app/Services/I40/CsvScannerService.php
app/Services/I40/CsvValidatorService.php
app/Services/I40/CsvProcessorService.php
app/Http/Controllers/Admin/I40/CsvImportsController.phpRoutes
routes/i40.php (gruppo csv-imports)Views
resources/views/admin/i40/csv-imports/index.blade.phpDatabase
database/sql/create_csv_imports_table.sql---
๐ Prossimi Sviluppi
Fase 1 (Completata): Gestione Manuale โ
Fase 2 (Futuro): Upload Web
Fase 3 (Futuro): Automazione
Fase 4 (Futuro): Logica Import
CsvProcessorService::importRow()`
---
Ultimo aggiornamento: 17 Ottobre 2025
Analisi Codice
Blocco 1 bash
mysql -u root -p capera_sartupDB < database/sql/create_csv_imports_table.sql
Blocco 2 php
scanForNewCsvs() // Scansiona tutte le cartelle
scanMachinePath($machine) // Scansiona path specifico
registerCsv($file, ...) // Registra CSV in database
getScanStats() // Statistiche scansione
Blocco 3 php
validate($csvImport): ValidationResult
Blocco 4 php
process($csvImport): ProcessingResult
Blocco 5
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ [๐ Scansiona Nuovi CSV] [โ๏ธ Configurazione] โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ ๐ [In Attesa: 12] [Validati: 45] [Pausa: 3] [Falliti: 2]โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Filtri: [Macchina โผ] [Stato โผ] [Canale โผ] โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ ๐ Tabella CSV โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Blocco 6
pending โ validating โ validated โ processing โ completed
โ โ โ โ
failed โ failed paused โ failed
โ โ โ
โโโโ retry โโโโโโโ resume โโโ retry
Blocco 7
Click "Scansiona Nuovi CSV"
โ
Sistema cerca in tutte le cartelle csv_I40_X_Y/
โ
Registra nuovi CSV trovati (status: pending)
โ
Toast: "Trovati X nuovi CSV!"
Blocco 8
Click โ su riga CSV pending
โ
CsvValidatorService::validate()
โโ Verifica colonne
โโ Conta righe
โโ Cerca errori
โ
Status: validated (OK) o failed (KO)
โ
Toast: "CSV validato!" o "Validazione fallita: X errori"
Blocco 9
Click โถ๏ธ su riga CSV validated
โ
CsvProcessorService::process()
โโ Legge righe
โโ Importa dati (TODO)
โโ Traccia successi/fallimenti
โ
Status: completed (OK) o failed (KO)
โ
Toast: "Elaborazione completata! X righe importate"
Blocco 10
Se failed:
โโ Click ๐๏ธ โ Vedi errori dettagliati
โโ Correggi CSV manualmente
โโ Click ๐ Riprova
โโ Oppure ๐๏ธ Elimina
Blocco 11 bash
mysql -u root -p capera_sartupDB < database/sql/create_csv_imports_table.sql
Blocco 12 sql
UPDATE menu_items
SET route_name = 'admin.i40.csv-imports.index'
WHERE label = 'Coda d\'import'
AND parent_id = (SELECT id FROM (SELECT id FROM menu_items WHERE label = 'Industria 4.0') AS tmp);
Blocco 13
/admin/i40/csv-imports
Blocco 14 bash
# 1. Trova una cartella CSV esistente
ls -la storage/app/connettore_I40/
# 2. Copia un CSV di test
cp test.csv storage/app/connettore_I40/csv_I40_1_1/sample.csv
Blocco 15 bash
# 1. Cartelle esistono?
ls -la storage/app/connettore_I40/
# 2. CSV presenti?
find storage/app/connettore_I40/ -name "*.csv"
# 3. Permessi corretti?
chmod -R 755 storage/app/connettore_I40/
Blocco 16 php
// In CsvValidatorService, aggiungi:
Log::debug('CSV Headers: ' . json_encode($csvHeaders));
Log::debug('Expected: ' . json_encode($expectedColumns));