From 2625ab7fa5890d48f99231b87d338ceabcdfcbc4 Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Sun, 10 Nov 2019 17:26:59 +0100 Subject: [PATCH] Update metodi x scrittura/ lettura array parametri --- MP-IO/Controllers/IOBController.cs | 37 ++++++++++++++++++++- MapoDb/DataLayer.cs | 53 ++++++++++++++++++++++++------ 2 files changed, 79 insertions(+), 11 deletions(-) diff --git a/MP-IO/Controllers/IOBController.cs b/MP-IO/Controllers/IOBController.cs index d206f60d..07811103 100644 --- a/MP-IO/Controllers/IOBController.cs +++ b/MP-IO/Controllers/IOBController.cs @@ -354,7 +354,42 @@ namespace MP_IO.Controllers answ = JsonConvert.SerializeObject(currParams); } } - catch(Exception exc) + catch (Exception exc) + { + logger.lg.scriviLog($"Errore in getCurrParams{Environment.NewLine}{exc}"); + answ = "NO"; + } + } + return answ; + } + /// + /// restituisce elenco parametri CHE RICHIEDONO scrittura su PLC come una List Json di oggetti objItem + /// GET: IOB/getObjItems2Write/SIMUL_03 + /// + /// ID dell'IOB + /// + public string getObjItems2Write(string id) + { + string answ = ""; + if (string.IsNullOrWhiteSpace(id)) + { + answ = "Missing IOB"; + } + else + { + // procedo a recuperare l'oggetto... + List currParams = new List(); + try + { + // deserializzo. + currParams = DataLayer.getCurrObjItemsPendigWrite(id); + // se != null --> salvo! + if (currParams != null) + { + answ = JsonConvert.SerializeObject(currParams); + } + } + catch (Exception exc) { logger.lg.scriviLog($"Errore in getCurrParams{Environment.NewLine}{exc}"); answ = "NO"; diff --git a/MapoDb/DataLayer.cs b/MapoDb/DataLayer.cs index 004839e9..c317a475 100644 --- a/MapoDb/DataLayer.cs +++ b/MapoDb/DataLayer.cs @@ -1028,19 +1028,51 @@ namespace MapoDb public static List getCurrObjItems(string idxMacchina) { string serVal = memLayer.ML.getRSV(currParametersHash(idxMacchina)); - List currParameters = new List(); + List actValues = new List(); if (serVal != null) { try { - currParameters = JsonConvert.DeserializeObject>(serVal); + actValues = JsonConvert.DeserializeObject>(serVal); } catch (Exception exc) { logger.lg.scriviLog($"Eccezione in deserializzazione getIobCurrParam{Environment.NewLine}{exc}"); } } - return currParameters; + return actValues; + } + /// + /// GET elenco parametri che richiedono una WRITE x IOB + /// + /// + /// + public static List getCurrObjItemsPendigWrite(string idxMacchina) + { + string serVal = memLayer.ML.getRSV(currParametersHash(idxMacchina)); + List actValues = new List(); + List writeValues = new List(); + if (serVal != null) + { + try + { + actValues = JsonConvert.DeserializeObject>(serVal); + // cerco e rimuovo parametri sola lettura o SENZA richieste scrittura + foreach (var item in actValues) + { + objItem trovato = actValues.Find(obj => obj.writable == true && !string.IsNullOrEmpty(obj.reqValue)); + if (trovato != null) + { + writeValues.Add(trovato); + } + } + } + catch (Exception exc) + { + logger.lg.scriviLog($"Eccezione in deserializzazione getIobCurrParam{Environment.NewLine}{exc}"); + } + } + return writeValues; } /// /// SET elenco parametri correnti x IOB @@ -1072,18 +1104,19 @@ namespace MapoDb // leggo i valori attuali... List actValues = getCurrObjItems(idxMacchina); // per ogni valore passatomi faccio insert o update - foreach (var item in innovations) + foreach (var item in actValues) { - objItem trovato = actValues.Find(obj => obj.uid == item.uid); - if (trovato != null) + // cerco nelle innovazioni SE CI SIA un valore act + objItem trovato = innovations.Find(obj => obj.uid == item.uid); + // se non trovato... + if (trovato == null) { - actValues.Remove(trovato); + // aggiungo + innovations.Add(item); } - // aggiungo - actValues.Add(item); } // serializzo e salvo - string serVal = JsonConvert.SerializeObject(actValues); + string serVal = JsonConvert.SerializeObject(innovations); memLayer.ML.setRSV(currParametersHash(idxMacchina), serVal); } return answ;