From d91f22417975e01a9fa2d7c6edc9abca05a0a651 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Sat, 18 Apr 2026 12:31:04 +0200 Subject: [PATCH] modifica call checkCambbiaStato in ASYNC --- MP.Data/Controllers/MpIocController.cs | 107 ++++++++++++++++++++ MP.IOC/Data/MpDataService.cs | 131 +++++-------------------- MP.IOC/MP.IOC.csproj | 2 +- MP.IOC/Resources/ChangeLog.html | 2 +- MP.IOC/Resources/VersNum.txt | 2 +- MP.IOC/Resources/manifest.xml | 2 +- 6 files changed, 134 insertions(+), 112 deletions(-) diff --git a/MP.Data/Controllers/MpIocController.cs b/MP.Data/Controllers/MpIocController.cs index 4d8c330d..16b3b83b 100644 --- a/MP.Data/Controllers/MpIocController.cs +++ b/MP.Data/Controllers/MpIocController.cs @@ -364,6 +364,40 @@ namespace MP.Data.Controllers return fatto; } + /// + /// Inserimento record in DDB + /// + /// + /// + /// + /// + /// + /// + /// + /// + public async Task DDB_InsStatoBatchAsync(string idxMacchina, DateTime inizioStato, int idxStato, string codArt, string value, int matrOpr, string pallet) + { + bool fatto = false; + using (var dbCtx = new MoonProContext(_configuration)) + { + var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); + var InizioStato = new SqlParameter("@InizioStato", inizioStato); + var IdxStato = new SqlParameter("@IdxStato", idxStato); + var CodArticolo = new SqlParameter("@codArticolo", codArt); + var Value = new SqlParameter("@Value", value); + var MatrOpr = new SqlParameter("@MatrOpr", matrOpr); + var Pallet = new SqlParameter("@pallet", pallet); + + var result = await dbCtx + .Database + .ExecuteSqlRawAsync("exec dbo.stp_DDB_InsStatoBatch @IdxMacchina, @InizioStato, @IdxStato, @codArticolo, @Value, @MatrOpr, @pallet", IdxMacchina, InizioStato, IdxStato, CodArticolo, Value, MatrOpr, Pallet); + + // indico eseguito! + fatto = result > 0; + } + return fatto; + } + /// /// Elenco tabella decodifica articoli / codice decimale /// @@ -1227,6 +1261,37 @@ namespace MP.Data.Controllers return dbResult; } + /// + /// Elenco ODL data macchina e periodo + /// + /// + /// + /// + /// + public async Task> OdlListByMaccPeriodoAsync(string idxMacchina, DateTime dtStart, DateTime dtEnd) + { + List dbResult = new List(); + using (var dbCtx = new MoonProContext(_configuration)) + { + try + { + var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); + var DataFrom = new SqlParameter("@dataFrom", dtStart); + var DataTo = new SqlParameter("@dataTo", dtEnd); + dbResult = await dbCtx + .DbSetODLExp + .FromSqlRaw("EXEC stp_ODL_getByMacchinaPeriodo @IdxMacchina, @dataFrom, @dataTo", IdxMacchina, DataFrom, DataTo) + .AsNoTracking() + .ToListAsync(); + } + catch (Exception exc) + { + Log.Error($"Eccezione durante OdlListByMaccPeriodoAsync{Environment.NewLine}{exc}"); + } + } + return dbResult; + } + /// /// Conteggio PzProd Macchina /// @@ -1634,6 +1699,26 @@ namespace MP.Data.Controllers } return dbResult; } + /// + /// Tabella state machine eventi 2 stati data macchina e tipo evento + /// + /// + /// + public async Task> SMES_getHwTransitionsAsync(string idxMacchina, int idxTipo) + { + List dbResult = new List(); + using (var dbCtx = new MoonProContext(_configuration)) + { + var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); + var IdxTipo = new SqlParameter("@IdxTipo", idxTipo); + dbResult = await dbCtx + .DbSetSMES + .FromSqlRaw("exec dbo.stp_TS_getByIdxMacchIdxTipoEv @IdxMacchina, @IdxTipo", IdxMacchina, IdxTipo) + .AsNoTracking() + .ToListAsync(); + } + return dbResult; + } /// /// Tabella state machine eventi 2 stati data macchina e tipo evento @@ -1657,6 +1742,28 @@ namespace MP.Data.Controllers return dbResult; } + /// + /// Tabella state machine eventi 2 stati data macchina e tipo evento + /// + /// + /// + public async Task> SMES_getUserForcedAsync(string idxMacchina, int idxTipo) + { + List dbResult = new List(); + using (var dbCtx = new MoonProContext(_configuration)) + { + var IdxMacchina = new SqlParameter("@IdxMacchina", idxMacchina); + var IdxTipo = new SqlParameter("@IdxTipo", idxTipo); + dbResult = await dbCtx + .DbSetSMES + .FromSqlRaw("exec dbo.stp_TS_getUserForcedTrans @IdxMacchina, @IdxTipo", IdxMacchina, IdxTipo) + .AsNoTracking() + //.AsEnumerable() + .ToListAsync(); + } + return dbResult; + } + /// /// Intera tabella state machine ingressi 2 eventi /// diff --git a/MP.IOC/Data/MpDataService.cs b/MP.IOC/Data/MpDataService.cs index b7bb5830..b8ee61f6 100644 --- a/MP.IOC/Data/MpDataService.cs +++ b/MP.IOC/Data/MpDataService.cs @@ -1882,7 +1882,7 @@ namespace MP.IOC.Data result = await IocDbController.Macchine2SlaveAsync(); // serializzo e salvo... rawData = JsonConvert.SerializeObject(result); - await redisDb.StringSetAsync(currKey, rawData, getRandTOut(redisLongTimeCache)); + await redisDb.StringSetAsync(currKey, rawData, getRandTOut(redisLongTimeCache * 10)); } if (result == null) { @@ -2291,7 +2291,7 @@ namespace MP.IOC.Data // se è vuoto... leggo da DB e popolo! if (answ.Count == 0) { - answ = ResetDatiMacchina(idxMacchina); + answ = await ResetDatiMacchinaAsync(idxMacchina); } } catch (Exception exc) @@ -3828,7 +3828,7 @@ namespace MP.IOC.Data /// DataOra evento /// DataOra corrente /// - public string saveCaricoPezzi(string idxMacchina, string qty, string dtEve = "", string dtCurr = "") + public async Task SaveCaricoPezziAsync(string idxMacchina, string qty, string dtEve = "", string dtCurr = "") { // default: 0, non registrato x cautela... string answ = "0"; @@ -3848,7 +3848,7 @@ namespace MP.IOC.Data // se il conteggio è >= 0 SALVO evento... if (numPzIncr >= 0) { - var listOdl = IocDbController.OdlListByMaccPeriodo(idxMacchina, dtEvent, dtEvent.AddSeconds(1)); + var listOdl = await IocDbController.OdlListByMaccPeriodoAsync(idxMacchina, dtEvent, dtEvent.AddSeconds(1)); if (listOdl != null && listOdl.Count > 0) { string codArticolo = listOdl.FirstOrDefault()?.CodArticolo ?? "ND"; @@ -3866,7 +3866,7 @@ namespace MP.IOC.Data Value = qty }; // salva e processa - var resp = scriviRigaEvento(newRecEv); + var resp = await scriviRigaEventoAsync(newRecEv); // registro in risposta che è andato tutto bene... ovvero la qty richiesta... answ = qty; } @@ -4526,7 +4526,7 @@ namespace MP.IOC.Data #region Private Methods /// - /// verifica se sia necessario inserire un cambio di stato impianto (DiarioDi Bordo) in modalità batch + /// Verifica se sia necessario inserire un cambio di stato impianto (DiarioDi Bordo) in modalità batch /// /// /// @@ -4536,7 +4536,7 @@ namespace MP.IOC.Data /// /// /// - private void checkCambiaStatoBatch(tipoInputEvento tipoInput, string IdxMacchina, DateTime InizioStato, int IdxTipo, string CodArt, string Value, int MatrOpr, string pallet) + private async Task CheckCambiaStatoBatchAsync(tipoInputEvento tipoInput, string IdxMacchina, DateTime InizioStato, int IdxTipo, string CodArt, string Value, int MatrOpr, string pallet) { //DS_applicazione.TransizioneStatiDataTable tabTransStati; //DS_applicazione.TransizioneStatiRow rigaTransStati; @@ -4546,7 +4546,7 @@ namespace MP.IOC.Data { case tipoInputEvento.barcode: // effettuo cambio stato INDIPENDENTEMENTE da stato precedente - listTransit = IocDbController.SMES_getUserForced(IdxMacchina, IdxTipo); + listTransit = await IocDbController.SMES_getUserForcedAsync(IdxMacchina, IdxTipo); if (listTransit.Count > 0) { @@ -4554,9 +4554,9 @@ namespace MP.IOC.Data // solo se cambia stato... if (rigaTrans != null && rigaTrans.IdxStato != rigaTrans.next_IdxStato) { - IocDbController.DDB_InsStatoBatch(IdxMacchina, InizioStato, rigaTrans.next_IdxStato, CodArt, Value, MatrOpr, pallet); + await IocDbController.DDB_InsStatoBatchAsync(IdxMacchina, InizioStato, rigaTrans.next_IdxStato, CodArt, Value, MatrOpr, pallet); // aggiorno MSE - IocDbController.RecalcMse(IdxMacchina, 0); + await IocDbController.RecalcMseAsync(IdxMacchina, 0); } } else @@ -4567,22 +4567,24 @@ namespace MP.IOC.Data case tipoInputEvento.hw: // verifico se ci sia necessità di cambio stato - listTransit = IocDbController.SMES_getHwTransitions(IdxMacchina, IdxTipo); + listTransit = await IocDbController.SMES_getHwTransitionsAsync(IdxMacchina, IdxTipo); if (listTransit.Count > 0) { rigaTrans = listTransit.FirstOrDefault(); if (rigaTrans != null && rigaTrans.IdxStato != rigaTrans.next_IdxStato) { - IocDbController.DDB_InsStatoBatch(IdxMacchina, InizioStato, rigaTrans.next_IdxStato, CodArt, Value, MatrOpr, pallet); + await IocDbController.DDB_InsStatoBatchAsync(IdxMacchina, InizioStato, rigaTrans.next_IdxStato, CodArt, Value, MatrOpr, pallet); // aggiorno MSE - IocDbController.RecalcMse(IdxMacchina, 0); + await IocDbController.RecalcMseAsync(IdxMacchina, 0); } } else { Log.Debug($"Non trovata riga per: HW | IdxMacchina: {IdxMacchina} | IdxTipo: {IdxTipo} | CodArt: {CodArt} | Value: {Value} | MatrOpr: {MatrOpr} | pallet: {pallet}"); } + break; + default: break; } } @@ -4712,25 +4714,6 @@ namespace MP.IOC.Data return answ; } - /// - /// Restituisce il valore booleano se la macchina sia di tipo MULTI (con più state machine x INGRESSI) - /// - /// - /// - private bool isMulti(string idxMacchina) - { - bool answ = false; - try - { - answ = Convert.ToBoolean(mDatiMacchinaVal(idxMacchina, "Multi") == "1"); - } - catch (Exception exc) - { - Log.Error($"Eccezione in isMulti{Environment.NewLine}{exc}"); - } - return answ; - } - /// /// Restituisce il valore booleano se la macchina sia di tipo MULTI (con più state machine x INGRESSI) /// usando dati macchina in cache per evitare lookup ridondanti @@ -4767,54 +4750,6 @@ namespace MP.IOC.Data return answ; } - /// - /// Calcola l'effettivo valore da passare alla macchina a stati INGRESSI data conf Macchine2FamigliaIngressi - /// - /// - /// - /// - private string preProcInput(string idxMacchina, string valore) - { - string newVal = ""; - try - { - // variabili - int valINT = 0; - int BitFilt = 0; - int BSR = 0; - bool ExplodeBit = false; - int NumBit = 0; - int newValInt = 0; - // recupero parametri... - int.TryParse(mDatiMacchinaVal(idxMacchina, "BitFilt"), out BitFilt); - int.TryParse(mDatiMacchinaVal(idxMacchina, "BSR"), out BSR); - Boolean.TryParse(mDatiMacchinaVal(idxMacchina, "ExplodeBit"), out ExplodeBit); - int.TryParse(mDatiMacchinaVal(idxMacchina, "NumBit"), out NumBit); // non usato (x ora) - // recupero valore - valINT = int.Parse(valore, NumberStyles.HexNumber); - // filtro - newValInt = MP.Core.Utils.bMaskInt(valINT, BitFilt); - // effettuo eventuale BitShiftRight - if (BSR > 0) - { - newValInt = newValInt >> BSR; - } - // effettuo eventuale esplosione in BIT esclusivi - if (ExplodeBit) - { - newValInt = Convert.ToInt32(1 << newValInt); - } - // riconverto a STRING HEX!!! - newVal = newValInt.ToString("X"); - } - catch - { - newVal = valore; - } - - return newVal; - } - /// /// Calcola l'effettivo valore da passare alla macchina a stati INGRESSI usando dati macchina in cache /// @@ -4927,7 +4862,7 @@ namespace MP.IOC.Data result.Add("Slave", isSlave); // durata cache in secondi dal valore insEnabled... - double numSecCache = 60 * ((result["insEnabled"].ToLower() == "true") ? redisShortTimeCache / 4 : redisShortTimeCache); + double numSecCache = ((result["insEnabled"].ToLower() == "true") ? redisShortTimeCache : redisLongTimeCache); // ...e salvo... RedisSetHashDict(currHash, result, numSecCache); @@ -4993,7 +4928,7 @@ namespace MP.IOC.Data result.Add("Slave", isSlave); // durata cache in secondi dal valore insEnabled... - double numSecCache = 60 * ((result["insEnabled"].ToLower() == "true") ? redisShortTimeCache : redisLongTimeCache); + double numSecCache = ((result["insEnabled"].ToLower() == "true") ? redisShortTimeCache : redisLongTimeCache); // ...e salvo... await RedisSetHashDictAsync(currHash, result, numSecCache); @@ -5077,6 +5012,7 @@ namespace MP.IOC.Data return answ; } +#if false /// /// Scrive una riga di evento nel db + check cambio stato DiarioDiBordo /// @@ -5090,7 +5026,7 @@ namespace MP.IOC.Data // inserisco evento inserito = IocDbController.EvListInsert(newRec); // faccio controllo per eventuale cambio stato da tab transizioni... - checkCambiaStatoBatch(tipoInputEvento.hw, newRec.IdxMacchina, newRec.InizioStato ?? DateTime.Now, newRec.IdxTipo, newRec.CodArticolo, newRec.Value, newRec.MatrOpr, newRec.pallet); + CheckCambiaStatoBatchAsync(tipoInputEvento.hw, newRec.IdxMacchina, newRec.InizioStato ?? DateTime.Now, newRec.IdxTipo, newRec.CodArticolo, newRec.Value, newRec.MatrOpr, newRec.pallet); } catch (Exception exc) { @@ -5101,7 +5037,8 @@ namespace MP.IOC.Data answ.outValue = inserito.ToString(); answ.needStatusRefresh = true; return answ; - } + } +#endif /// /// Scrive una riga di evento nel db + check cambio stato DiarioDiBordo @@ -5116,7 +5053,7 @@ namespace MP.IOC.Data // inserisco evento inserito = await IocDbController.EvListInsertAsync(newRec); // faccio controllo per eventuale cambio stato da tab transizioni... - checkCambiaStatoBatch(tipoInputEvento.hw, newRec.IdxMacchina, newRec.InizioStato ?? DateTime.Now, newRec.IdxTipo, newRec.CodArticolo, newRec.Value, newRec.MatrOpr, newRec.pallet); + await CheckCambiaStatoBatchAsync(tipoInputEvento.hw, newRec.IdxMacchina, newRec.InizioStato ?? DateTime.Now, newRec.IdxTipo, newRec.CodArticolo, newRec.Value, newRec.MatrOpr, newRec.pallet); } catch (Exception exc) { @@ -5142,7 +5079,7 @@ namespace MP.IOC.Data // inserisco evento inserito = await IocDbController.EvListInsertAsync(newRec); // faccio controllo per eventuale cambio stato da tab transizioni... - checkCambiaStatoBatch(tipoInputEvento.barcode, newRec.IdxMacchina, newRec.InizioStato ?? DateTime.Now, newRec.IdxTipo, newRec.CodArticolo, newRec.Value, newRec.MatrOpr, newRec.pallet); + CheckCambiaStatoBatchAsync(tipoInputEvento.barcode, newRec.IdxMacchina, newRec.InizioStato ?? DateTime.Now, newRec.IdxTipo, newRec.CodArticolo, newRec.Value, newRec.MatrOpr, newRec.pallet); } catch (Exception exc) { @@ -5155,26 +5092,6 @@ namespace MP.IOC.Data return answ; } - /// - /// Restituisce il valore booleano se la macchina sia abilitata all'inserimento COMPLETO nel - /// Signal Log - /// - /// - /// - private bool sLogEnab(string idxMacchina) - { - bool answ = false; - try - { - answ = Convert.ToBoolean(mDatiMacchinaVal(idxMacchina, "sLogEnabled")); - } - catch (Exception exc) - { - Log.Error($"Eccezione in sLogEnab{Environment.NewLine}{exc}"); - } - return answ; - } - /// /// Stato prod macchina (completo) /// @@ -5184,7 +5101,6 @@ namespace MP.IOC.Data private StatoProdModel StatoProdMacchina(string idxMacchina, DateTime dtReq, bool forceDb = false) { // setup parametri costanti - string source = "DB"; StatoProdModel? result = new StatoProdModel(); // cerco in _redisConn... string currKey = $"{Utils.redisStatoProd}:{idxMacchina}:{dtReq:HHmm}"; @@ -5192,7 +5108,6 @@ namespace MP.IOC.Data if (rawData.HasValue && !forceDb) { result = JsonConvert.DeserializeObject($"{rawData}"); - source = "REDIS"; } else { diff --git a/MP.IOC/MP.IOC.csproj b/MP.IOC/MP.IOC.csproj index c37c7f83..961daab3 100644 --- a/MP.IOC/MP.IOC.csproj +++ b/MP.IOC/MP.IOC.csproj @@ -4,7 +4,7 @@ net8.0 enable enable - 6.16.2604.1811 + 6.16.2604.1812 diff --git a/MP.IOC/Resources/ChangeLog.html b/MP.IOC/Resources/ChangeLog.html index a07b3da9..2543ff32 100644 --- a/MP.IOC/Resources/ChangeLog.html +++ b/MP.IOC/Resources/ChangeLog.html @@ -1,6 +1,6 @@ Modulo MP-IOC -

Versione: 6.16.2604.1811

+

Versione: 6.16.2604.1812


Note di rilascio:
  • diff --git a/MP.IOC/Resources/VersNum.txt b/MP.IOC/Resources/VersNum.txt index fe5ddc90..80f19f09 100644 --- a/MP.IOC/Resources/VersNum.txt +++ b/MP.IOC/Resources/VersNum.txt @@ -1 +1 @@ -6.16.2604.1811 +6.16.2604.1812 diff --git a/MP.IOC/Resources/manifest.xml b/MP.IOC/Resources/manifest.xml index c9a0a7fc..889d57f8 100644 --- a/MP.IOC/Resources/manifest.xml +++ b/MP.IOC/Resources/manifest.xml @@ -1,6 +1,6 @@ - 6.16.2604.1811 + 6.16.2604.1812 https://nexus.steamware.net/repository/SWS/MP-IOC/stable/LAST/MP.IOC.zip https://nexus.steamware.net/repository/SWS/MP-IOC/stable/LAST/ChangeLog.html false