Fix csv export warning + ottimizzazione e fix warnings vari metodi Core

This commit is contained in:
Samuele Locatelli
2026-05-28 09:40:36 +02:00
parent 195f975c6a
commit 31682e57da
10 changed files with 53 additions and 62 deletions
+16 -11
View File
@@ -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
/// <returns></returns>
public static async Task SaveToCsv<T>(List<T> 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<string>();
IEnumerable<PropertyDescriptor> props = TypeDescriptor.GetProperties(typeof(T)).OfType<PropertyDescriptor>();
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);
}
}
}
+1 -1
View File
@@ -3,7 +3,7 @@
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<Version>8.16.2605.2808</Version>
<Version>8.16.2605.2809</Version>
<ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>MP_TAB3</RootNamespace>
</PropertyGroup>
+1 -1
View File
@@ -1,6 +1,6 @@
<body>
<i>Modulo MAPOSPEC </i>
<h4>Versione: 8.16.2605.2808</h4>
<h4>Versione: 8.16.2605.2809</h4>
<br /> Note di rilascio:
<ul>
<li>
+1 -1
View File
@@ -1 +1 @@
8.16.2605.2808
8.16.2605.2809
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<item>
<version>8.16.2605.2808</version>
<version>8.16.2605.2809</version>
<url>https://nexus.steamware.net/repository/SWS/MP-TAB3/stable/LAST/MP-TAB3.zip</url>
<changelog>https://nexus.steamware.net/repository/SWS/MP-TAB3/stable/LAST/ChangeLog.html</changelog>
<mandatory>false</mandatory>
+5 -7
View File
@@ -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;
}
}
+9 -9
View File
@@ -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);
}
+3 -5
View File
@@ -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; }
}
}
+1 -1
View File
@@ -7,7 +7,7 @@
{
#region Public Properties
public List<ULogDataDto> fluxData { get; set; }
public List<ULogDataDto> fluxData { get; set; } = new();
#endregion Public Properties
}
+15 -25
View File
@@ -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
/// <param name="idxMacchina"></param>
/// <param name="baseAddr">Chiave override per i valori in caso di dati che accedono al dominio dati di un altra app (es: baseAddr x IO legacy)</param>
/// <returns></returns>
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
/// <param name="idxMacchina"></param>
/// <param name="baseAddr">Chiave override per i valori in caso di dati che accedono al dominio dati di un altra app (es: baseAddr x IO legacy)</param>
/// <returns></returns>
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
/// <param name="idxMacchina"></param>
/// <param name="baseAddr">Chiave override per i valori in caso di dati che accedono al dominio dati di un altra app (es: baseAddr x IO legacy)</param>
/// <returns></returns>
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
/// <param name="idxMacchina"></param>
/// <param name="baseAddr">Chiave override per i valori in caso di dati che accedono al dominio dati di un altra app (es: baseAddr x IO legacy)</param>
/// <returns></returns>
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
/// <param name="flog"></param>
/// <param name="baseAddr">Chiave override per i valori in caso di dati che accedono al dominio dati di un altra app (es: baseAddr x IO legacy)</param>
/// <returns></returns>
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
/// <param name="idxMacchina"></param>
/// <param name="baseAddr"></param>
/// <returns></returns>
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
/// <param name="idxMacchina"></param>
/// <param name="baseAddr"></param>
/// <returns></returns>
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
/// <param name="idxMacchina"></param>
/// <param name="baseAddr">Chiave override per i valori in caso di dati che accedono al dominio dati di un altra app (es: baseAddr x IO legacy)</param>
/// <returns></returns>
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
/// <param name="idxMacchina"></param>
/// <param name="baseAddr">Chiave override per i valori in caso di dati che accedono al dominio dati di un altra app (es: baseAddr x IO legacy)</param>
/// <returns></returns>
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
/// <param name="idxMacchina"></param>
/// <param name="baseAddr">Chiave override per i valori in caso di dati che accedono al dominio dati di un altra app (es: baseAddr x IO legacy)</param>
/// <returns></returns>
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
/// </summary>
/// <param name="idxMacchina"></param>
/// <returns></returns>
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
/// <param name="idxMacchina"></param>
/// <param name="baseAddr">Chiave override per i valori in caso di dati che accedono al dominio dati di un altra app (es: baseAddr x IO legacy)</param>
/// <returns></returns>
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}";