using MP.Core.DTO; using MP.Core.Objects; using MP.Data.DbModels; using MP.Data.DbModels.Anag; using MP.Data.MgModels; using StackExchange.Redis; using static MP.Core.Objects.Enums; namespace MP.IOC.Data { public interface IMpDataService { #region Public Methods /// /// Verifica se sia da reinviare un taskName alla macchina dall'elenco di quelli salvati (in /// modalit\u00e0 upsert) se non scaduti /// /// idx macchina /// tipo task /// valore task /// true se il task \u00e8 stato reinviato bool AddCheckTask4Machine(string idxMacchina, taskType taskKey, string taskVal); /// /// Aggiunge un parametro opzionale all'elenco dei saved task (in modalit\u00e0 upsert) /// /// idx macchina /// chiave del parametro /// valore del parametro /// true se inserito bool AddOptPar4Machine(string idxMacchina, string taskKey, string taskVal); /// /// Aggiunge un task all'elenco di quelli salvati (in modalit\u00e0 upsert) /// /// idx macchina /// tipo task /// valore task /// true se inserito bool AddTask4Machine(string idxMacchina, taskType taskKey, string taskVal); /// /// Aggiunge un set di task per macchina all'elenco di quelli salvati (in modalit\u00e0 upsert) /// /// idx macchina /// Dizionario di task tipo-valore da salvare /// true se completato Task AddTask4MacListAsync(string idxMacchina, Dictionary taskDict); /// /// Inserimento record allarme su DB /// /// Data evento /// Nome macchina /// Indirizzo memoria PLC /// Indice memoria /// Stato valOut /// Valore decodificato /// true se inserito Task AlarmInsertAsync(DateTime dtRif, string idxMacchina, string memAddress, int memIndex, int statusVal, string valDecoded); /// /// Restituisce l'anagrafica STATI per intero con cache Fusion /// /// Lista di modelli AnagStatiModel Task> AnagStatiGetAllAsync(); /// /// Restituisce i modelli di ultimo articolo per data macchina, con cache Fusion /// /// idx macchina /// Lista di modelli AnagArticoliModel Task> ArticoliGetLastByMaccAsync(string idxMacc); /// /// Effettua lo split dell'ODL corrente per la macchina, con eventuale conferma produzione e /// gestione slave /// /// idx macchina /// effettuare la conferma quantitativa /// imposta la qty del prossimo ODL da quello che si chiude /// matricola operatore /// Step di arrotondamento quantit\u00e0 /// Chiave esterna da associare all'ODL /// "OK" se successo, "KO" altrimenti Task AutoStartOdlAsync(string idxMacchina, bool doConfirm, bool qtyFromLast, int matrOpr, int roundStep = 100, string keyRichiesta = ""); /// /// Calcola la ricetta su MongoDB dato modello ricetta corrente /// /// Modello ricetta da calcolare /// Risultato del calcolo ricetta string CalcRecipe(RecipeModel currRecipe); /// /// Controlla se dal segnale di "microstato" deriva un evento da generare - modalit\u00e0 OFFLINE /// /// idx macchina /// valore valOut ingresso /// data-ora evento (server) /// sequenza dati inviati /// dati macchina in cache (opzionale, se null fa lookup) /// Risultato del processing Task CheckMicroStatoAsync(string idxMacchina, string valore, DateTime dtEve, string contatore, Dictionary? datiMaccCache = null); /// /// Restituisce l'elenco completo delle configurazioni da DB, con cache Fusion /// /// Lista di modelli ConfigModel Task> ConfigGetAllAsync(); /// /// Restituisce l'elenco delle decodifiche articoli filtrata per codice, con cache Fusion /// /// codice articolo (opzionale, se vuoto restituisce tutto) /// Lista di modelli DecNumArticoliModel Task> DecNumArtGetFiltAsync(string codArt = ""); /// /// Restituisce le date dei dossier per una macchina, con cache Fusion /// /// idx macchina /// Lista di modelli DossierModel Task> DossierLastByMachAsync(string idxMacchina); /// /// Task completo per sistemazione dossier quotidiani mancanti /// /// idx macchina /// "OK" se completato Task FixDailyDossierAsync(string idxMacc); /// /// Restituisce il codice valOut dell'ODL corrente (con cache redis interna) /// /// idx macchina /// codice valOut dell'ODL corrente Task GetCurrOdlAsync(string idxMacchina); /// /// Restituisce il modello dell'ultimo ODL per macchina, con cache Fusion /// /// idx macchina /// Modello ODLExpModel Task GetLastOdlAsync(string idxMacchina); /// /// Effettua il calcolo della data-ora di riferimento per il server, correggendo il delta /// tra orologio macchina e server /// /// data-oras dell'evento (macchina) /// data-ora corrente (server) /// Data-ora evento corretta DateTime GetSrvDtEvent(string dtEve, string dtCurr); /// /// Restituisce se la macchina sia abilitata all'inserimento dati da IOB /// /// idx macchina /// true se abilitato all'input Task IobInsEnabAsync(string idxMacchina); /// /// Restituisce se la macchina sia abilitata come master di un impianto /// /// idx macchina /// true se \u00e8 master Task IobIsMasterAsync(string idxMacchina); /// /// Restituisce se la macchina sia abilitata all'inserimento nel Signal Log /// /// idx macchina /// true se abilitato Task IobSLogEnabAsync(string idxMacchina); /// /// Restituisce i valori ammessi per una tabella/colonna (con cache redis interna) /// /// nome tabella /// nome campo /// Lista di ListValuesModel Task> ListValuesFilt(string tabName, string fieldName); /// /// Restituisce l'elenco completo delle relazioni macchine master-slave, con cache Fusion /// /// Lista di Macchine2SlaveModel Task> Macchine2SlaveGetAllAsync(); /// /// Restituisce le macchine filtrate per gruppo, con cache Fusion /// /// codice gruppo (o "*" per tutto) /// Lista di MacchineModel Task> MacchineGetFilt(string codGruppo); /// /// Restituisce il path delle ricette di una macchina, con cache Fusion /// /// idx macchina /// Path delle ricette Task MacchineRecipeArchive(string idxMacchina); /// /// Restituisce la lista parametri correnti (ObjItemDTO) della macchina da Redis /// /// idx macchina /// Lista di ObjItemDTO Task> MachineParamListAsync(string idxMacchina); /// /// Restituisce i parametri correnti della macchina che necessitano di write (writable + reqValue valorizzato) /// /// idx macchina /// Lista di ObjItemDTO Task> MachineParamListPendingWriteAsync(string idxMacchina); /// /// Imposta i parametri correnti (ObjItemDTO) nella cache Redis della macchina /// /// idx macchina /// dati parametri da impostare /// true se salvato Task MachineParamListSetAsync(string idxMacchina, List currData); /// /// Effettua l'UPSERT degli elementi dei parametri macchina in Redis /// /// idx macchina /// nuovi elementi da aggiungere/aggiornare /// true se completato Task MachineParamUpsertAsync(string idxMacchina, List innovations); /// /// Restituisce i campi DatiMacchine + StatoMacchine come dizionario (da Redis o DB) /// /// idx macchina /// Dizionario KVP dei campi macchina Task> mDatiMacchineAsync(string idxMacchina); /// /// Restituisce i parametri ottimizzati per la macchine (Redis hash sync) /// /// idx macchina /// Dizionario KVP parametri Dictionary mOptParMacchina(string idxMacchina); /// /// Restituisce i task salvati della macchina (Redis hash sync) /// /// idx macchina /// Dizionario KVP dei task salvati Dictionary mSavedTaskMacchina(string idxMacchina); /// /// Restituisce l'elenco dalla tabella MappaStatoExpl, con o senza cache /// /// se true forza lettura database senza cache /// Lista di MappaStatoExplModel Task> MseGetAllAsync(bool forceDb = false); /// /// Restituisce il dizionario KVP della tabella Multi State Machine Ingressi (da Redis) /// /// idx macchina /// Array di KeyValuePair Task[]> mTabMSMIAsync(string idxMacchina); /// /// Restituisce i task in esecuzione per la macchina (Redis hash sync) /// /// idx macchina /// Dizionario KVP dei task Dictionary mTaskMacchina(string idxMacchina); /// /// Restituisce i task in esecuzione per la macchina (Redis hash async) /// /// idx macchina /// Dizionario KVP dei task Task> mTaskMacchinaAsync(string idxMacchina); /// /// Generazione automatica ODL giornalieri per la macchina /// /// idx macchina /// data di inizio generazione /// data di fine generazione /// codice articolo /// true se generato con successo Task OdlAutoDayGenAsync(string idxMacchina, DateTime dataInizio, DateTime dataFine, string codArticolo); /// /// Generazione automatica ODL giornalieri completa con tutti i parametri PO/TC /// /// idx macchina /// data inizio /// data fine /// codice articolo /// pezzi per PODL /// pezzi per pallet /// chiave richiesta /// TC assegnato /// codice gruppo /// flag crea PODL /// flag verifica TC /// true se generato con successo Task OdlAutoDayGenFullAsync(string idxMacchina, DateTime dataInizio, DateTime dataFine, string codArticolo, int? pzPODL, int? pzPallet, string? keyRichiesta, int? tcAssegnato, string? codGruppo, bool flgCreaPODL, bool flgCheckTC); /// /// Restituisce l'ODL corrente per macchina, con cache Fusion /// /// idx macchina /// Modello ODLExpModel Task OdlCurrByMaccAsync(string IdxMacchina); /// /// Restituisce il modello PODL dato il suo indice, con cache Fusion /// /// indice PODL /// Modello PODLModel Task POdlGetByKey(int idxPODL); /// /// Restituisce i PODL per macchina/articolo, con cache Fusion /// /// idx macchina /// codice articolo /// codice gruppo /// solo PODL liberi /// Lista di PODLExpModel Task> POdlGetByMaccArtAsync(string idxMacchina, string codArticolo, string codGruppo, bool onlyFree); /// /// Processa la registrazione di un flusso (FL) da IOB /// /// idx macchina /// codice flusso (es. Ingresso, Uscita) /// valore valOut del flusso /// data-ora dell'evento (macchina) /// data-ora corrente (server) /// contatore invio /// se true disabilita la scrittura del keepalive /// "OK" se completato Task ProcessFluxLogAsync(string idxMacchina, string flux, string valore, string dtEve, string dtCurr, int contatore, bool disabKA); /// /// Processa un input completo da IOB (verifica parametri, log segnali, processing microstato) /// /// idx macchina /// valore valOut /// data-ora evento (macchina) /// data-ora corrente (server) /// contatore /// "OK" se completato, error message in caso contrario Task ProcessInputAsync(string idxMacchina, string valore, string dtEve, string dtCurr, string contatore); /// /// Processa un UserLog registrato da IOB (DI=dichiarazioni, RC=controlli, RS=scarti) /// /// idx macchina /// tipo flusso: DI (Dichiarazione), RC (Controllo), RS (Scarto) /// valore/testo /// data-ora evento /// data-ora corrente /// contatore invio dati /// matricola operatore /// causale scarto o tagCode /// esitoOk (0/1) o quantit\u00e0 scarto /// "OK" se completato Task ProcessUserLogAsync(string idxMacchina, string flux, string valore, string dtEve, string dtCurr, int contatore, int matrOpr, string label, int valNum); /// /// Restituisce il contapezzi salvato in Redis per la macchina /// /// idx macchina /// Contatore pezzi (-1 se non trovato) Task pzCounter(string idxMacchina); /// /// Restituisce il contapezzi come conteggio da TCRilevati (dal DB) /// /// idx macchina /// Conteggio pezzi (-1 se non trovato) Task PzCounterTcAsync(string idxMacchina); /// /// Ricerca la ricetta su MongoDB dato l'indice del PODL /// /// indice PODL di riferimento /// Modello ricetta o null Task RecipeGetByPODL(int idxPODL); /// /// Effettua il conteggio delle chiavi Redis che corrispondono a un pattern /// /// pattern di ricerca /// Numero di chiavi trovate int RedisCountKey(string keyPattern); /// /// Elimina una chiave dalla memoria Redis /// /// chiave da eliminare /// true se eliminata bool RedisDelKey(string keyVal); /// /// Elimina una chiave dalla memoria Redis (async) /// /// chiave da eliminare /// true se eliminata Task RedisDelKeyAsync(RedisKey keyVal); /// /// Esegue il flush di tutte le chiavi Redis che corrispondono a un pattern /// /// pattern di ricerca /// true se completato Task RedisFlushPatternAsync(RedisValue pattern); /// /// Leggo un hash Redis come array di KeyValuePair (sync) /// /// chiave Redis /// Array di KeyValuePair KeyValuePair[] RedisGetHash(RedisKey redKey); /// /// Leggo un hash Redis come array di KeyValuePair (async) /// /// chiave Redis /// Array di KeyValuePair Task[]> RedisGetHashAsync(RedisKey redKey); /// /// Leggo un hash Redis come dizionario (sync) /// /// chiave Redis /// Dizionario KVP Dictionary RedisGetHashDict(RedisKey hashKey); /// /// Leggo un hash Redis come dizionario (async) /// /// chiave Redis /// Dizionario KVP Task> RedisGetHashDictAsync(RedisKey hashKey); /// /// Leggo un singolo campo di un hash Redis (async) /// /// chiave Redis /// nome campo hash /// Valore del campo Task RedisGetHashFieldAsync(RedisKey key, string hashField); /// /// Verifica se una chiave esista in Redis (sync) /// /// chiave Redis /// true se la chiave esiste bool RedisKeyPresent(RedisKey key); /// /// Verifica se una chiave esista in Redis (async) /// /// chiave Redis /// true se la chiave esiste Task RedisKeyPresentAsync(RedisKey key); /// /// Imposta un hash Redis con expiration opzionale (sync) /// /// chiave Redis /// array di coppie chiave-valore da inserire /// TTL in secondi (-1 = nessuna expiration) void RedisSetHash(RedisKey redKey, KeyValuePair[] valori, double expireSeconds = -1.0); /// /// Imposta un hash Redis con expiration opzionale (async) /// /// chiave Redis /// array di coppie chiave-valore da inserire /// TTL in secondi (-1 = nessuna expiration) Task RedisSetHashAsync(RedisKey redKey, KeyValuePair[] valori, double expireSeconds = -1.0); /// /// Imposta un hash Redis con expiration opzionale (sync) da dizionario /// /// chiave Redis /// dizionario di coppie chiave-valore da inserire /// TTL in secondi (-1 = nessuna expiration) void RedisSetHashDict(RedisKey redKey, Dictionary valori, double expireSeconds = -1.0); /// /// Imposta un hash Redis con expiration opzionale (async) da dizionario /// /// chiave Redis /// dizionario di coppie chiave-valore da inserire /// TTL in secondi (-1 = nessuna expiration) Task RedisSetHashDictAsync(RedisKey redKey, Dictionary valori, double expireSeconds = -1.0); /// /// Inserimento record RemoteRebootLog con eventuale pulizia dei record vecchi /// /// record da inserire /// true se completato Task RemRebootLogAddAsync(RemoteRebootLogModel newRec); /// /// Elimina un task da elenco Redis per l'impianto indicato /// /// idx macchina /// nome task da eliminare /// Dizionario KVP rimanente Task> RemTask2ExeMacchinaAsync(string idxMacchina, taskType tName); /// /// Resetta la tabella Multi State Machine Ingressi per macchina rileggendola dal DB /// /// idx macchina /// Array di KVP della State Machine Ingressi Task[]> resetMSMIAsync(string idxMacchina); /// /// Registra la movimentazione di un carico pezzi su Redis /// /// idx macchina /// quantit\u00e0 da registrare /// "OK" se completato Task saveCaricoPezzi(string idxMacchina, string qty); /// /// Salva un elenco di dati macchina in DB /// /// identificativo della serie dati /// elenco di dati macchina da salvare /// true se salvato Task SaveDataItemsAsync(string id, List dataList); /// /// Salva i dati macchina-IOB (serializzazione JSON) su Redis /// /// idx macchina /// dati JSON serializzati /// true se salvato Task SaveMachine2Iob(string idxMacchina, string serData); /// /// Salva la configurazione della macchina come dizionario su Redis /// /// idx macchina /// dizionario di configurazione /// true se salvato Task SaveMachineIobConf(string idxMacchina, Dictionary currDict); /// /// Salva il segnale di "microstato" come record SignalLog su DB (async) /// /// idx macchina /// valOut ingresso /// data-ora evento (server) /// contatore sequenza dati inviati /// true se salvato Task saveSigLogAsync(string idxMacchina, string valore, DateTime dtEve, int contatore); /// /// Scrive un evento di keepalive se non presente in Redis con TTL /// /// idx macchina /// ora macchina Task ScriviKeepAliveAsync(string IdxMacchina, DateTime oraMacchina); /// /// Salva la configurazione YAML completa dell'IOB su Redis /// /// idx macchina /// configurazione YAML completa /// true se salvata Task SetIobConfYamlAsync(string idxMacchina, string iobConfFull); /// /// Salva la mappatura memoria PLC su Redis /// /// idx macchina /// mappatura PLC da salvare /// true se salvata Task SetIobMemMap(string idxMacchina, PlcMemMapDto currMap); /// /// Restituisce la tabella key-value della State Machine Ingressi per famiglia, /// rileggendola dal DB e salvandola in Redis /// /// idx famiglia ingressi /// Array di KVP (currentMicroStato_nVal -> IdxTipoEv_nStato) Task[]> StateMachInByKeyAsync(int idxFamIn); /// /// Effettua l'UPSERT degli oggetti corrente della macchina su Redis (legacy compatibilit\u00e0) /// /// idx macchina /// dati da aggiornare/aggiungere /// true se completato Task UpsertCurrObjItemsAsync(string idxMacchina, List innovations); /// /// Restituisce il valore SPECIFICATO per la state machine ingressi in formato hash Redis /// /// idx famiglia ingressi /// idx microstato /// valore ingresso /// valore (IdxFamIn_nValore) dalla tab SMI Redis Task ValoreSmiAsync(int idxFamIn, int idxMicroStato, int valoreIn); #endregion Public Methods } }