diff --git a/Egw.Core/Utils.cs b/Egw.Core/Utils.cs index 91376768..49b26d0d 100644 --- a/Egw.Core/Utils.cs +++ b/Egw.Core/Utils.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.Reflection; namespace Egw.Core { @@ -19,14 +14,24 @@ namespace Egw.Core /// public static async Task SaveToCsv(List reportData, string path, char separator) { + // 1. Recuperiamo le proprietà del tipo T una sola volta (Risolve i problemi di performance) + PropertyInfo[] properties = typeof(T).GetProperties(); + var lines = new List(); - IEnumerable props = TypeDescriptor.GetProperties(typeof(T)).OfType(); - var header = string.Join(";", props.ToList().Select(x => x.Name)); + + // 2. Creiamo l'header usando il separatore corretto (Risolve il bug del ";" fisso) + var header = string.Join(separator, properties.Select(p => p.Name)); lines.Add(header); - var valueLines = reportData.Select(row => string.Join(separator, header.Split(separator).Select(a => row.GetType().GetProperty(a).GetValue(row, null)))); - //var valueLines = reportData.Select(row => string.Join(";", header.Split(';').Select(a => row.GetType().GetProperty(a).GetValue(row, null)))); + + // 3. Estraiamo i valori gestendo i possibili null (Risolve il tuo warning) + var valueLines = reportData + .Where(row => row != null) + .Select(row => string.Join(separator, properties.Select(p => p.GetValue(row)?.ToString() ?? string.Empty))); + lines.AddRange(valueLines); - await Task.Run(() => File.WriteAllLines(path, lines.ToArray())); + + // 4. Utilizziamo il metodo di scrittura asincrono nativo di .NET + await File.WriteAllLinesAsync(path, lines); } } } diff --git a/MP-TAB3/MP-TAB3.csproj b/MP-TAB3/MP-TAB3.csproj index d2018285..16fb5d0d 100644 --- a/MP-TAB3/MP-TAB3.csproj +++ b/MP-TAB3/MP-TAB3.csproj @@ -3,7 +3,7 @@ net8.0 enable - 8.16.2605.2808 + 8.16.2605.2809 enable MP_TAB3 diff --git a/MP-TAB3/Resources/ChangeLog.html b/MP-TAB3/Resources/ChangeLog.html index 1fc88236..64ea7d73 100644 --- a/MP-TAB3/Resources/ChangeLog.html +++ b/MP-TAB3/Resources/ChangeLog.html @@ -1,6 +1,6 @@ Modulo MAPOSPEC -

Versione: 8.16.2605.2808

+

Versione: 8.16.2605.2809


Note di rilascio:
  • diff --git a/MP-TAB3/Resources/VersNum.txt b/MP-TAB3/Resources/VersNum.txt index 828db479..c5710be8 100644 --- a/MP-TAB3/Resources/VersNum.txt +++ b/MP-TAB3/Resources/VersNum.txt @@ -1 +1 @@ -8.16.2605.2808 +8.16.2605.2809 diff --git a/MP-TAB3/Resources/manifest.xml b/MP-TAB3/Resources/manifest.xml index 58e7ba81..f993cc62 100644 --- a/MP-TAB3/Resources/manifest.xml +++ b/MP-TAB3/Resources/manifest.xml @@ -1,6 +1,6 @@ - 8.16.2605.2808 + 8.16.2605.2809 https://nexus.steamware.net/repository/SWS/MP-TAB3/stable/LAST/MP-TAB3.zip https://nexus.steamware.net/repository/SWS/MP-TAB3/stable/LAST/ChangeLog.html false diff --git a/MP.Core/DTO/FluxLogDTO.cs b/MP.Core/DTO/FluxLogDTO.cs index 3b28e2c1..fcc54437 100644 --- a/MP.Core/DTO/FluxLogDTO.cs +++ b/MP.Core/DTO/FluxLogDTO.cs @@ -1,17 +1,15 @@ -using System; - -namespace MP.Core.DTO +namespace MP.Core.DTO { public class FluxLogDTO { - public string IdxMacchina { get; set; } + public string IdxMacchina { get; set; } = string.Empty; public DateTime dtEvento { get; set; } - public string CodFlux { get; set; } + public string CodFlux { get; set; } = string.Empty; - public string Valore { get; set; } + public string Valore { get; set; } = string.Empty; - public string ValoreEdit { get; set; } + public string ValoreEdit { get; set; } = string.Empty; } } \ No newline at end of file diff --git a/MP.Core/DTO/MappaStatoExplDTO.cs b/MP.Core/DTO/MappaStatoExplDTO.cs index 12fe6b44..353f7975 100644 --- a/MP.Core/DTO/MappaStatoExplDTO.cs +++ b/MP.Core/DTO/MappaStatoExplDTO.cs @@ -9,20 +9,20 @@ namespace MP.Core.DTO { public int RowNum { get; set; } public DateTime? LastUpdate { get; set; } - public string IdxMacchina { get; set; } - public string CodMacchina { get; set; } - public string Nome { get; set; } - public string Url { get; set; } + public string IdxMacchina { get; set; } = string.Empty; + public string CodMacchina { get; set; } = string.Empty; + public string Nome { get; set; } = string.Empty; + public string Url { get; set; } = string.Empty; public int? IdxOdl { get; set; } = 0; public int? IdxPOdl { get; set; } = 0; - public string CodArticolo { get; set; } - public string Disegno { get; set; } + public string CodArticolo { get; set; } = string.Empty; + public string Disegno { get; set; } = string.Empty; public int NumPezzi { get; set; } = 0; public decimal TCAssegnato { get; set; } = 0; public DateTime? DataInizioOdl { get; set; } - public string Semaforo { get; set; } + public string Semaforo { get; set; } = string.Empty; public int? IdxStato { get; set; } - public string DescrizioneStato { get; set; } + public string DescrizioneStato { get; set; } = string.Empty; public double? Durata { get; set; } public int PezziProd { get; set; } = 0; public int PezziConf { get; set; } = 0; @@ -65,7 +65,7 @@ namespace MP.Core.DTO get { int answ = 0; - if(NumPezzi < PezziProd) + if (NumPezzi < PezziProd) { answ = Math.Abs(NumPezzi - PezziProd); } diff --git a/MP.Core/DTO/ParetoFluxLogDTO.cs b/MP.Core/DTO/ParetoFluxLogDTO.cs index 94aea2c1..6b5e7239 100644 --- a/MP.Core/DTO/ParetoFluxLogDTO.cs +++ b/MP.Core/DTO/ParetoFluxLogDTO.cs @@ -1,11 +1,9 @@ -using System; - -namespace MP.Core.DTO +namespace MP.Core.DTO { public class ParetoFluxLogDTO { - public string IdxMacchina { get; set; } - public string CodFlux { get; set; } + public string IdxMacchina { get; set; } = string.Empty; + public string CodFlux { get; set; } = string.Empty; public int Qty { get; set; } } } \ No newline at end of file diff --git a/MP.Core/DTO/ULogJsonPayloadDto.cs b/MP.Core/DTO/ULogJsonPayloadDto.cs index bdd43e75..c81acc86 100644 --- a/MP.Core/DTO/ULogJsonPayloadDto.cs +++ b/MP.Core/DTO/ULogJsonPayloadDto.cs @@ -7,7 +7,7 @@ { #region Public Properties - public List fluxData { get; set; } + public List fluxData { get; set; } = new(); #endregion Public Properties } diff --git a/MP.Core/Utils.cs b/MP.Core/Utils.cs index 81d30f39..318b63c9 100644 --- a/MP.Core/Utils.cs +++ b/MP.Core/Utils.cs @@ -13,35 +13,25 @@ namespace MP.Core public const string redisAnagGruppi = redisBaseAddr + "Cache:AnagGruppi"; public const string redisAnagStati = redisBaseAddr + "Cache:AnagStati"; - public const string redisLinkMenu = redisBaseAddr + "Cache:LinkMenu"; - public const string redisArtByDossier = redisBaseAddr + "Cache:ArtByDossier"; - public const string redisArtList = redisBaseAddr + "Cache:ArtList"; - public const string redisBaseAddr = "MP:"; - public const string redisConfFlux = redisBaseAddr + "Cache:ConfFlux"; public const string redisConfKey = redisBaseAddr + "Cache:Config"; - public const string redisDecNumArtKey = redisBaseAddr + "Cache:DecNumArt"; - public const string redisDossByMac = redisBaseAddr + "Cache:DossByMac"; public const string redisDossByMacLast = redisBaseAddr + "Cache:DossByMacLast"; - public const string redisEventList = redisBaseAddr + "Cache:EventList"; - public const string redisFluxByMac = redisBaseAddr + "Cache:FluxByMac"; public const string redisFluxByMacFirst = redisBaseAddr + "Cache:FluxByMacFirst"; public const string redisFluxLogFilt = redisBaseAddr + "Cache:FluxLogFilt"; - public const string redisGiacenzaList = redisBaseAddr + "Cache:GiacenzaList"; - public const string redisKit = redisBaseAddr + "Cache:Kit"; public const string redisKitInst = redisBaseAddr + "Cache:Kit:Inst"; public const string redisKitScore = redisBaseAddr + "Cache:Kit:Score"; public const string redisKitTempl = redisBaseAddr + "Cache:Kit:Templ"; public const string redisKitWip = redisBaseAddr + "Cache:Kit:Wip"; + public const string redisLinkMenu = redisBaseAddr + "Cache:LinkMenu"; public const string redisMacByFlux = redisBaseAddr + "Cache:MacByFlux"; public const string redisMacList = redisBaseAddr + "Cache:MacList"; @@ -90,12 +80,12 @@ namespace MP.Core public static string redKeyArtUsed { - get => RedHash($"SPEC:Cache:CheckArtUsed"); + get => RedHash($"SPEC:Cache:CheckArtUsed").ToString(); } public static string redKeyTabCheckArt { - get => RedHash($"CACHE:TabCheckArt"); + get => RedHash($"CACHE:TabCheckArt").ToString(); } #endregion Public Properties @@ -182,7 +172,7 @@ namespace MP.Core /// /// Chiave override per i valori in caso di dati che accedono al dominio dati di un altra app (es: baseAddr x IO legacy) /// - public static RedisKey RedKeyCurrObjItems(string idxMacchina, string baseAddr = null) + public static RedisKey RedKeyCurrObjItems(string idxMacchina, string? baseAddr = null) { var prefix = (baseAddr ?? redisBaseAddr).TrimEnd(':'); return (RedisKey)$"{prefix}:CurrentParameters:{idxMacchina}"; @@ -194,7 +184,7 @@ namespace MP.Core /// /// Chiave override per i valori in caso di dati che accedono al dominio dati di un altra app (es: baseAddr x IO legacy) /// - public static RedisKey RedKeyDatiMacc(string idxMacchina, string baseAddr = null) + public static RedisKey RedKeyDatiMacc(string idxMacchina, string? baseAddr = null) { var prefix = (baseAddr ?? redisBaseAddr).TrimEnd(':'); return (RedisKey)$"{prefix}:DtMac:{idxMacchina}"; @@ -214,7 +204,7 @@ namespace MP.Core /// /// Chiave override per i valori in caso di dati che accedono al dominio dati di un altra app (es: baseAddr x IO legacy) /// - public static RedisKey RedKeyIobConfYaml(string idxMacchina, string baseAddr = null) + public static RedisKey RedKeyIobConfYaml(string idxMacchina, string? baseAddr = null) { var prefix = (baseAddr ?? redisBaseAddr).TrimEnd(':'); return (RedisKey)$"{prefix}:IOB:{idxMacchina}:ConfYaml"; @@ -226,7 +216,7 @@ namespace MP.Core /// /// Chiave override per i valori in caso di dati che accedono al dominio dati di un altra app (es: baseAddr x IO legacy) /// - public static RedisKey RedKeyIobMemMap(string idxMacchina, string baseAddr = null) + public static RedisKey RedKeyIobMemMap(string idxMacchina, string? baseAddr = null) { var prefix = (baseAddr ?? redisBaseAddr).TrimEnd(':'); return (RedisKey)$"{prefix}:MemMap:{idxMacchina}"; @@ -239,7 +229,7 @@ namespace MP.Core /// /// Chiave override per i valori in caso di dati che accedono al dominio dati di un altra app (es: baseAddr x IO legacy) /// - public static RedisKey RedKeyLastFLog(string idxMacchina, string flog, string baseAddr = null) + public static RedisKey RedKeyLastFLog(string idxMacchina, string flog, string? baseAddr = null) { var prefix = (baseAddr ?? redisBaseAddr).TrimEnd(':'); return (RedisKey)$"{prefix}:FLOG:{idxMacchina}:{flog}"; @@ -251,7 +241,7 @@ namespace MP.Core /// /// /// - public static RedisKey RedKeyMach2Iob(string idxMacchina, string baseAddr = null) + public static RedisKey RedKeyMach2Iob(string idxMacchina, string? baseAddr = null) { var prefix = (baseAddr ?? redisBaseAddr).TrimEnd(':'); return (RedisKey)$"{prefix}:hM2IOB:{idxMacchina}"; @@ -263,7 +253,7 @@ namespace MP.Core /// /// /// - public static RedisKey RedKeyMachIobConf(string idxMacchina, string baseAddr = null) + public static RedisKey RedKeyMachIobConf(string idxMacchina, string? baseAddr = null) { var prefix = (baseAddr ?? redisBaseAddr).TrimEnd(':'); return (RedisKey)$"{prefix}:IOB:{idxMacchina}:MachIobConf"; @@ -275,7 +265,7 @@ namespace MP.Core /// /// Chiave override per i valori in caso di dati che accedono al dominio dati di un altra app (es: baseAddr x IO legacy) /// - public static RedisKey RedKeyMsmi(string idxMacchina, string baseAddr = null) + public static RedisKey RedKeyMsmi(string idxMacchina, string? baseAddr = null) { var prefix = (baseAddr ?? redisBaseAddr).TrimEnd(':'); return (RedisKey)$"{prefix}:hMSMI:{idxMacchina}"; @@ -287,7 +277,7 @@ namespace MP.Core /// /// Chiave override per i valori in caso di dati che accedono al dominio dati di un altra app (es: baseAddr x IO legacy) /// - public static RedisKey RedKeyOptPar(string idxMacchina, string baseAddr = null) + public static RedisKey RedKeyOptPar(string idxMacchina, string? baseAddr = null) { var prefix = (baseAddr ?? redisBaseAddr).TrimEnd(':'); return (RedisKey)$"{prefix}:OptPar:{idxMacchina}"; @@ -299,7 +289,7 @@ namespace MP.Core /// /// Chiave override per i valori in caso di dati che accedono al dominio dati di un altra app (es: baseAddr x IO legacy) /// - public static RedisKey RedKeyPzCount(string idxMacchina, string baseAddr = null) + public static RedisKey RedKeyPzCount(string idxMacchina, string? baseAddr = null) { var prefix = (baseAddr ?? redisBaseAddr).TrimEnd(':'); return (RedisKey)$"{prefix}:PzCount:{idxMacchina}"; @@ -311,7 +301,7 @@ namespace MP.Core /// /// /// - public static RedisKey RedKeySavedTask2ExeMacc(string idxMacchina, string baseAddr = null) + public static RedisKey RedKeySavedTask2ExeMacc(string idxMacchina, string? baseAddr = null) { var prefix = (baseAddr ?? redisBaseAddr).TrimEnd(':'); return (RedisKey)$"{prefix}:SavedTask:{idxMacchina}"; @@ -323,7 +313,7 @@ namespace MP.Core /// /// Chiave override per i valori in caso di dati che accedono al dominio dati di un altra app (es: baseAddr x IO legacy) /// - public static RedisKey RedKeyTask2ExeMacc(string idxMacchina, string baseAddr = null) + public static RedisKey RedKeyTask2ExeMacc(string idxMacchina, string? baseAddr = null) { var prefix = (baseAddr ?? redisBaseAddr).TrimEnd(':'); return (RedisKey)$"{prefix}:ExeTask:{idxMacchina}";