public bool Invio(DatiPerInvioTest valori) { try { log.Info($"Invio esito prova (id {valori.guid}\n\tarchivio:\t{valori.nomeccsv}"); var NGtestResult = new NG_TestResultParameter { TensioneIsolamento = decimal.Parse(valori.tensioneisolamento), ResistenzaIsolamento = decimal.Parse(valori.restistenzaisolamento), TensioneRigidita = decimal.Parse(valori.tensionerigidità), CorrenteRigidita = decimal.Parse(valori.correnterigidità), DescrizioneEsito = valori.descrizioneesito, Esito = valori.esito, SerialNumber = valori.serialnumber, //IdProgramma = valori.idprogramma, NomeProgramma = valori.nomeprogramma, CorrenteDiTerra = null, ResistenzaDiTerra = null, ID_Macchina = null, NG_ReleaseSoftwareNfc = null, NG_FotoCurvaAssorbimento = null, NG_FotoLed1 = null, NG_FotoLed2 = null, Assorbimenti = new List <AbsorptionResultParameter>() { new AbsorptionResultParameter { Nome = "AssorbimentoMonofase", AmpereFase1 = null, AmpereFase2 = null, AmpereFase3 = null, TensioneFase1 = null, TensioneFase2 = null, TensioneFase3 = null, PotenzaFase1 = null, PotenzaFase2 = null, PotenzaFase3 = null, FattoreDiPotenza = null, Portata = null, Watt = null, Pressione = null, SquilibrioCorrenti = null, TensioneProva = null, Velocita = null, Pwm = null } } }; try { //log.Debug("inizio invio"); var finalMaterial = valori.finalmaterial; log.Debug($"Dati:FinalMaterial: {finalMaterial} - SerialNumber: {valori.serialnumber} - NomeProgramma: {valori.nomeprogramma} - DescrizioneEsito: {valori.descrizioneesito} - Esito: {valori.esito} - TensioneIsolamento: {valori.tensioneisolamento} - ResistenzaIsolamento: {valori.restistenzaisolamento} - TensioneRigidita: {valori.tensionerigidità} - CorrenteRigidita: {valori.correnterigidità}"); var response = Engineering.UAFClientConnectorLibrary.UAFConnector.StaticNG_SendTestResult(NGtestResult, finalMaterial); //Console.WriteLine("Command NG_SendTestResult\n"); //Console.WriteLine($"Succeeded: {response.Succeeded}"); if (!response.Succeeded) { log.Warn("Invio fallito"); log.Debug($"Error {response.Error.ErrorCode}: {response.Error.ErrorMessage}"); return(false); } } catch (Exception ex) //errore nella chiamata della libreria - si considera il sistama offline e non vanno segnati i record del db come da evitare { log.Debug("InvioTest - errore servizio"); log.Debug(ex); return(false); } } catch (Exception ex) //questa eccezzione deve fare il bubbleling al chiamante per discriminare tra un errore dei parametri ed uno della libreria { log.Error("InvioTest - errore codifica parametri"); log.Debug(ex); throw new Exception(); } return(true); }
bool InviaPrimoTestDisponible() { Globali.InvioInCorso = true; //cerca un test non inviato var count = db.Tests.Where(o => (o.trasferito != true & o.errore != true & o.datiordine1 != "" & o.datiordine2 != "")).Select(o => o.GuidProva).Count(); if (count == 0) { log.Debug("Nessun nuovo test trovato"); Globali.InvioInCorso = false; return(true); } //recupero il primo guid valido var guid = db.Tests.Where(o => (o.trasferito != true & o.errore != true & o.datiordine1 != "" & o.datiordine2 != "")).OrderBy(o => o.Orario).Select(o => o.GuidProva).First(); log.Info($"Test trovato: GUID {guid}"); //verifica presenza di tutte le righe ncessarie per importare la prova var prove = db.Tests.Where(o => o.GuidProva == guid).OrderBy(t => t.Orario); if (prove == null) { return(true); //non dovrebbe capitare } var ok1 = prove.Where(o => o.metodo == "HVAC").Count(); var ok2 = prove.Where(o => o.metodo == "ISO").Count(); if (!(ok1 == 1 & ok2 == 1)) { //non tutte le righe sono presenti - marca le righe esistenti il test cone fallato/inviato; log.Info($"Test incompleto - tutte le voci sono contrassegate come invalide e non saranno più valuate (guid {guid})"); foreach (Test prova in prove) { prova.errore = true; } db.SaveChanges(); Globali.InvioInCorso = false; return(true); } //estrazione dati da inviare DatiPerInvioTest Dato = new DatiPerInvioTest(); string esitoHVAC = ""; string esitoISO = ""; foreach (Test prova in prove) { if (prova.metodo == "ISO") { Dato.nomeccsv = prova.nomecsv; //passato per voci di log Dato.guid = prova.GuidProva; //passato per voci di log Dato.tensioneisolamento = prova.valore1; Dato.restistenzaisolamento = prova.valore2; Dato.esito = (prova.esitototale.ToLower() == "go") ? "PASS":"******"; esitoISO = (prova.esitototale.ToLower() == "go") ? "PASS" : "Fail"; Dato.serialnumber = prova.numerodiserie.ToString() + prova.numeroprogetto.ToString(); Dato.idprogramma = prova.programmadiprova; Dato.nomeprogramma = prova.datiordine1; Dato.finalmaterial = prova.datiordine2; } if (prova.metodo == "HVAC") { Dato.tensionerigidità = prova.valore1; Dato.correnterigidità = prova.valore2; esitoHVAC = (prova.esitototale.ToLower() == "go") ? "PASS" : "Fail"; } } Dato.descrizioneesito = $"ISO: {esitoISO} - HVAC: {esitoHVAC}"; //invio dati try { var res = Globali.Invio.Invio(Dato); //invio con successo segno come trasferiti; if (res) { foreach (Test prova in prove) { prova.OrarioTrasferimetno = DateTime.Now; prova.serialegenerato = Dato.serialnumber; prova.trasferito = true; } db.SaveChanges(); } else { //invio non effettutato da imputare alla libreria (connettivita, nome server, rete, etc.) //i recrodo non vengono rimarcati e il tantativo verra ripetutto dopo aver fattto passare un intervallo più lungo; log.Warn("Invio non risucito, verra riprovato tra 60 secondi"); Globali.InvioInCorso = false; return(false); } } catch (Exception ex) { log.Debug("errore invio dati"); log.Debug(ex); //segnare come invalido; foreach (Test prova in prove) { prova.errore = true; } db.SaveChanges(); Globali.InvioInCorso = false; return(false); } // aggiorna tabella con i test importati try { var query1 = db.Tests.Where(o => o.trasferito == true).OrderByDescending(o => o.Orario).Take(100); var ultimitestimportati1 = query1.ToList(); bindingSource1.DataSource = ultimitestimportati1; dataGridView1.DataSource = bindingSource1; } catch { } Globali.InvioInCorso = false; return(true); }