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}";