Project

General

Profile

Actions

Task #12

open

Milestone #11: Dicembre

Dim_Movimentazione

Task #12: Dim_Movimentazione

Added by Daniele Cruciani 3 months ago. Updated 3 months ago.

Status:
fix committed
Priority:
normal
Target version:
-
Start date:
Due date:
% Done:

0%

Estimated time:
storypoint:
blocked:
simplePBI:
Sprint:

Description

Tabella e dati

Dim_Movimentazione sw_MOVIMENTI
{
      "idMovimentazione": 600,
      "tipologia": "Ingresso", — NO !!!
"lastModified": "2025-10-15T06:30:00Z”, — NO!!
“dataIn”:"2025-10-15T06:30:00Z”,
“dataOut” : "2025-11-15T06:30:00Z”
    },

Gestisce mezzi e movimentazioni.
Un mezzo arriva in una location, tramite un movimento.
Il movimento registra provenienza, mezzo di trasporto di ingresso (FlgTipoIn, idModuloSoftnet), mezzo di trasporto di uscita (FlgTipoOut, idModuloSoftnet), il tempo di trasporto, il datetime di ingresso, il detetime di uscita.
Trasporto in uscita è sempre registrato al momento dell’inserimento del dato, come pianificato: se il piano cambia, cambia il valore nella riga di sw_MOVIMENTI

Relazione con idModuloSoftnet: a_TIPOINOUT

Updated by Daniele Cruciani 3 months ago Actions #1

  • Description updated (diff)

Updated by Daniele Cruciani 3 months ago Actions #2

  • Description updated (diff)

Updated by Daniele Cruciani 3 months ago Actions #3

  • Status changed from new to confirmed
  • Assignee set to Daniele Cruciani

2 Dicembre - 12 Dicembre

La struttura della di sw_MOVIMENTAZIONE e sue relazioni è stata spiegata il 2 Dicembre

Il 5 dicembre ho messo questo task nel gestore di progetto.

Durante la settimana dall'8 dicembre al 11 dicembre, ho implementato una stored procedure che esportava i movimenti e i dettagli di arrivo, partenza, stato, e mezzo di ingresso, tramite una stored procedure con join alla tabella a_TIPOINOUT, come pensavo che fosse necessario.

Questo tentativo è fallito per la quantità di dati esportati, e la necessità di filter dei dati.

Ma erano corretti il controller e il model nel servizio REST, per entrypoint /Infos/Movements

Il giorno 11 dicembre (sera, ore 19) mi è stato detto di usare una view per movimentazioni.

Grazie alla view il grosso del lavoro dell'estrazione dati e definizione della query era risolto.

Il giorno 12 dicembre ho adattato il controller e model per l'entrypoint REST /Infos/Movements

Le problematiche affrontate durante l'implementazione sono state:

  • numero di parametri trattati nella request ed inviati al backend db (codice C#)
  • logica di filtering ed implementazione della stored procedure
  • Testing con input di filtraggio efficace. (test case definiti ma non registrati)
  • Deployment dell'applicazione sul sito di test

Considerazioni

  • si può migliorare il modo col quale si definiscono test case, senza dover chiedere ogni volta "come faccio la prova?"
  • si potrebbero automatizzare i test, nel caso che il codice del servizio, o il codice della/e stored procedure, dovessero cambiare
  • il deployment è macchinoso e ripetitivo. Al tempo stesso è poco frequente, quindi tendo a scordarmi i passi necessari per fare il deploy a mano. (devo scrivere esplicitamente i passi nel gestore di progetti)
  • la logica dei dati, cosa si può esportare cosa no, cosa serve cosa no, non mi sono ben chiari, e neppure tutte le relazioni presenti a sistema. (devo chiedere più feedback e controllare)

Risultati (funzionalità)

/Infos/Movements filtri:

  • vin
  • origine
  • destino
  • idgruppoO : gruppo origine
  • idgruppoD : gruppo destino
  • tipodata : selettore data, ARRIVATO o USCITO
  • datafrom: da data
  • datato: a data

Dati esportati:

  • Stato: PREVISTO, GIACENTE, USCITO, ARRIVATO
  • vin
  • DesModello
  • Origine
  • Destino
  • DataProgrammazioneDATA
  • DataDisponibilitaDATA
  • idGruppoO
  • idGruppoD
  • Lotto
  • datainDATA
  • DataOUTDATA
  • DataPOD
  • Cliente

Problema mole di dati e paginazione

Filtri troppo laschi possono produrre una quantità enorme di dati.

La paginazione in ambito REST può essere implementata

  • in modo puro: nel payload si specifica: page_nr, page_size. Per ogni richiesta: è sessionless come specifica REST
  • usando una session con scadenza:
    • alla prima richiesta si registra il payload in un db key-value (redis), e si genera un sessionid. key è sessionid, value è: payload di filtering, elementi per pagina.
    • la prima richiesta restituisce i valori in un array, ed un metainfo contenente il sessionid
    • le richieste per le pagine successive come payload hanno: sessionid, page_nr
    • si usa sessionid per interrogare il key-value db (redis), e una prepared con parametri numero di pagina per interrogare il dbms

In quali casi è meglio usare la session con scadenza: ottimizzazioni interne

  • Architettura specifica
  • esecuzione predittiva del retrievement dei dati
  • accesso al dbms limitato da traffic shaping: caricamento dei dati da dbms (relazionale) e storage su key-value db (redis) per poter fornire le pagine successive senza disturbare il relazionale

Quanto è complesso implementare sessionid? è complesso, discretamente.

Chi usa sessionid con scadenza: Amazon Merchant, eBay.

Quanto è opportuno? Non lo so, non credo.

Updated by Daniele Cruciani 3 months ago Actions #4

  • Status changed from confirmed to in progress

Updated by Daniele Cruciani 3 months ago Actions #5

  • Status changed from in progress to fix committed
Actions

Also available in: PDF Atom