inizio gestione threshold con update componenti, continuo timeEstim

This commit is contained in:
Samuele Locatelli
2025-12-23 16:16:51 +01:00
parent 32bbee2d01
commit ffdaedd26f
15 changed files with 207 additions and 91 deletions
@@ -21,8 +21,8 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Egw.Lux.WebWindow.Base" Version="2.7.12.2312" />
<PackageReference Include="Egw.Lux.WebWindowComplex" Version="2.7.12.2312" />
<PackageReference Include="Egw.Lux.WebWindow.Base" Version="2.7.12.2316" />
<PackageReference Include="Egw.Lux.WebWindowComplex" Version="2.7.12.2316" />
<PackageReference Include="Egw.Window.Data" Version="2.7.12.2312" />
<PackageReference Include="EgwMultiEngineManager.Data" Version="2.7.12.1" />
</ItemGroup>
@@ -60,13 +60,21 @@ namespace EgwCoreLib.Lux.Core.RestPayload
#region Public Properties
/// <summary>
/// Elenco Macchine
/// Elenco Macchine in formato stringa join
/// </summary>
public string ListMachines
public string ListMachinesJoin
{
get => string.Join(", ", machineCalcResults.Select(x => x.Name).OrderBy(x => x).ToList());
}
/// <summary>
/// Elenco effettivo macchine
/// </summary>
public List<string> ListMachines
{
get => machineCalcResults.Select(x => x.Name).OrderBy(x => x).ToList();
}
/// <summary>
/// Elenco delle etichette parts non OK
/// </summary>
@@ -27,7 +27,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Egw.Lux.WebWindow.Base" Version="2.7.12.2312" />
<PackageReference Include="Egw.Lux.WebWindow.Base" Version="2.7.12.2316" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.21" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Abstractions" Version="8.0.21" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Analyzers" Version="8.0.21" />
@@ -1,4 +1,5 @@
using EgwCoreLib.Lux.Core.RestPayload;
using Egw.Window.Data;
using EgwCoreLib.Lux.Core.RestPayload;
using EgwCoreLib.Lux.Data.Controllers;
using EgwCoreLib.Lux.Data.DbModel.Config;
using EgwMultiEngineManager.Data;
@@ -85,6 +86,34 @@ namespace EgwCoreLib.Lux.Data.Services
return result;
}
/// <summary>
/// Restituisce il dizionario dei profili + relativa lista soglie da cache REDIS
/// </summary>
/// <returns></returns>
public Dictionary<string, List<Threshold>> ProfileThreshDict(Constants.EXECENVIRONMENTS execEnvironment)
{
Dictionary<string, List<Threshold>> result = new Dictionary<string, List<Threshold>>();
// recupero profili per ciclare...
List<string> profList = ProfileList(execEnvironment);
foreach (var prof in profList)
{
// leggo obj da redis cache
var currKey = $"{redisBaseKey}:{execEnvironment}:PROF:THRESH:{prof}";
RedisValue rawData = redisDb.StringGet(currKey);
// prendo solo i valori validi (Name <> FamilyName)
if (rawData.HasValue)
{
var currList = JsonConvert.DeserializeObject<List<Threshold>>($"{rawData}") ?? new List<Threshold>();
if (currList.Any())
{
result.Add(prof, currList);
}
}
}
return result;
}
#endregion Public Methods
#region Private Fields
+1 -1
View File
@@ -4,7 +4,7 @@
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<Version>0.9.2512.2312</Version>
<Version>0.9.2512.2316</Version>
</PropertyGroup>
<ItemGroup>
+1 -1
View File
@@ -9,7 +9,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Egw.Lux.WebWindowComplex" Version="2.7.12.2312" />
<PackageReference Include="Egw.Lux.WebWindowComplex" Version="2.7.12.2316" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="8.0.21" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Authentication" Version="8.0.21" />
</ItemGroup>
+18 -3
View File
@@ -1,3 +1,4 @@
using Egw.Window.Data;
using EgwCoreLib.Lux.Core;
using EgwCoreLib.Lux.Core.RestPayload;
using EgwCoreLib.Lux.Data.DbModel.Config;
@@ -669,6 +670,14 @@ namespace Lux.UI.Components.Compo
private List<Egw.Window.Data.Hardware> AvailHardwareList = new();
private List<string> AvailMaterialList = new List<string>();
private List<string> AvailProfileList = new List<string>();
private Dictionary<string, List<Threshold>> AvailThresholdDict = new Dictionary<string, List<Threshold>>();
private Dictionary<string, List<Threshold>> AvailThreshold { get; set; } = new Dictionary<string, List<Threshold>>()
{
{"Profilo78", new List<Threshold>() { new Threshold(3, "Bottom"), new Threshold(1, "Threshold")}},
{"ProfiloSaomad", new List<Threshold>(){ new Threshold(3, "Bottom"), new Threshold(2, "BottomWaterdrip"), new Threshold(1, "Threshold")}}
};
/// <summary>
/// Base path x network share files
@@ -1188,14 +1197,15 @@ namespace Lux.UI.Components.Compo
private void PrepareWindowData(string currJwd)
{
// preparo conf oggetti x controllo
SetupList = SetupList = new BaseListPayload()
SetupList = new BaseListPayload()
{
ColorMaterial = AvailColorMaterialList,
FamilyHardware = AvailFamilyHardwareList,
Glass = AvailGlassList,
Hardware = AvailHardwareList,
Material = AvailMaterialList,
Profile = AvailProfileList
Profile = AvailProfileList,
Threshold = AvailThreshold
};
CurrData = new LivePayload()
{
@@ -1223,6 +1233,11 @@ namespace Lux.UI.Components.Compo
rawProfiles = CDService.ProfileList(cEnvir, "Default");
}
AvailProfileList = rawProfiles;
#if false
// dizionario dei profili soglia
AvailThresholdDict = CDService.ProfileThreshDict(cEnvir);
#endif
var rawHw = CDService.HwModelList(cEnvir, "HW.AGB");
// hw filtro solo validi...
AllConfHardware = rawHw
@@ -1439,7 +1454,7 @@ namespace Lux.UI.Components.Compo
private bool ShowBom(OfferRowModel reqItem)
{
bool answ = false;
if (DisplayMode == Enums.DisplayMode.Edit)
if (DisplayMode == EgwCoreLib.Lux.Core.Enums.DisplayMode.Edit)
{
switch (reqItem.Envir)
{
+4 -4
View File
@@ -239,7 +239,7 @@ else
<div class="small text-secondary" title="RockBottom Price">(@item.Original.UnitCost.ToString("C2"))</div>
</td> *@
<td class="text-center align-content-center fs-4" title="@(item.WorkLoad?.ListMachines ?? "")">
<td class="text-center align-content-center fs-4" title="@(item.WorkLoad?.ListMachinesJoin ?? "")">
<span class="px-2">
@(item.WorkLoad?.NumMachines ?? 0)
</span>
@@ -463,7 +463,7 @@ else if (WorkLoadRecord != null)
</div>
<div class="col-4 text-center border border-2 rounded">
<div class="fw-bold">Workable Parts: @WorkLoadRecord.NumOk</div>
<small class="small">@WorkLoadRecord.ListMachines</small>
<small class="small">@WorkLoadRecord.ListMachinesJoin</small>
</div>
<div class="col-4 text-end fs-4">
<button class="btn btn-lg btn-primary" @onclick="() => ReRunJob()"><i class="fa-solid fa-share-from-square" title="Riesecuzione Estimate"></i> Re-Run</button>
@@ -493,7 +493,7 @@ else if (WorkLoadRecord != null)
</div>
<div class="col-4 text-center border border-2 rounded">
<div class="fw-bold">Vincolated Parts: @WorkLoadRecord.NumKo</div>
<small class="small">@WorkLoadRecord.ListMachines</small>
<small class="small">@WorkLoadRecord.ListMachinesJoin</small>
</div>
<div class="col-4 text-end fs-4">
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close" @onclick="ClosePopup">
@@ -520,7 +520,7 @@ else if (WorkLoadRecord != null)
</div>
<div class="col-4 text-center border border-2 rounded">
<div class="fw-bold">Unworkable Parts: @WorkLoadRecord.NumKo</div>
<small class="small">@WorkLoadRecord.ListMachines</small>
<small class="small">@WorkLoadRecord.ListMachinesJoin</small>
</div>
<div class="col-4 text-end fs-4">
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close" @onclick="ClosePopup">
@@ -15,7 +15,7 @@
</div>
<div class="col-4 text-center border border-2 rounded">
<div class="fw-bold">Impianti considerati</div>
<small class="small">@DetailRecord.ListMachines</small>
<small class="small">@DetailRecord.ListMachinesJoin</small>
</div>
<div class="col-4 text-end fs-4">
<button class="btn btn-lg btn-primary" @onclick="() => ReRunJob()"><i class="fa-solid fa-share-from-square" title="Riesecuzione Estimate"></i> Re-Run</button>
+115 -70
View File
@@ -15,7 +15,7 @@
</div>
<div class="col-4 text-center border border-2 rounded">
<div class="fw-bold">Impianti considerati</div>
<small class="small">@DetailRecord.ListMachines</small>
<small class="small">@DetailRecord.ListMachinesJoin</small>
</div>
<div class="col-4 text-end fs-4">
<button class="btn btn-lg btn-primary" @onclick="() => ReRunJob()"><i class="fa-solid fa-share-from-square" title="Riesecuzione Estimate"></i> Re-Run</button>
@@ -24,80 +24,125 @@
</div>
</div>
<div class="modal-body">
<div class="row">
<div class="col-6">
<div class="accordion" id="accordionPanelsStayOpenExample">
@if (DetailRecord.NumKo > 0)
{
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-collapseOne" aria-expanded="true" aria-controls="panelsStayOpen-collapseOne">
Non producibili: <span class="fw-bold px-1">@DetailRecord.NumKo</span>
</button>
</h2>
<div id="panelsStayOpen-collapseOne" class="accordion-collapse collapse show">
<div class="accordion-body">
<div class="row gx-2">
@foreach (var item in DetailRecord.ListUnWorkable)
{
<div class="col-2">
<div class="alert alert-danger p-1 mb-2 text-center align-content-center">@item</div>
</div>
}
</div>
</div>
</div>
</div>
}
@if (DetailRecord.NumOkVin > 0)
{
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-collapseTwo" aria-expanded="false" aria-controls="panelsStayOpen-collapseTwo">
Vincolati: <span class="fw-bold px-1">@DetailRecord.NumOkVin</span>
</button>
</h2>
<div id="panelsStayOpen-collapseTwo" class="accordion-collapse collapse">
<div class="accordion-body">
<div class="row gx-2">
@foreach (var item in DetailRecord.ListVincolated)
{
<div class="col-2">
<div class="alert alert-info p-1 mb-2 text-center align-content-center">@item</div>
</div>
}
</div>
</div>
</div>
</div>
}
@if (DetailRecord.NumOk > 0)
{
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-collapseThree" aria-expanded="false" aria-controls="panelsStayOpen-collapseThree">
Producibili: <span class="fw-bold px-1">@DetailRecord.NumOk</span>
</button>
</h2>
<div id="panelsStayOpen-collapseThree" class="accordion-collapse collapse">
<div class="accordion-body">
<div class="row gx-2">
@foreach (var item in DetailRecord.ListWorkable)
{
<div class="col-2">
<div class="alert alert-success p-1 mb-2 text-center align-content-center">@item</div>
</div>
}
</div>
</div>
</div>
</div>
}
</div>
</div>
<div class="col-6">
<table class="table table-sm table-striped">
<thead>
<tr>
<th>
SEL
</th>
<th>
Impianto
</th>
<th class="text-end">
Perc
</th>
<th class="text-end">
# Parts
</th>
<th class="text-end">
Hour
</th>
</tr>
</thead>
<tbody>
@foreach (var item in ListTargetMachine)
{
<tr>
<td>
</td>
<td>
@item
</td>
<td class="text-end">
<input type="number" />
</td>
<td class="text-end">
0 / 0%
</td>
<td class="text-end">
0 / 0%
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
<div class="accordion" id="accordionPanelsStayOpenExample">
@if (DetailRecord.NumKo > 0)
{
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-collapseOne" aria-expanded="true" aria-controls="panelsStayOpen-collapseOne">
Non producibili: <span class="fw-bold px-1">@DetailRecord.NumKo</span>
</button>
</h2>
<div id="panelsStayOpen-collapseOne" class="accordion-collapse collapse show">
<div class="accordion-body">
<div class="row gx-2">
@foreach (var item in DetailRecord.ListUnWorkable)
{
<div class="col-2">
<div class="alert alert-danger p-1 mb-2 text-center align-content-center">@item</div>
</div>
}
</div>
</div>
</div>
</div>
}
@if (DetailRecord.NumOkVin > 0)
{
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-collapseTwo" aria-expanded="false" aria-controls="panelsStayOpen-collapseTwo">
Vincolati: <span class="fw-bold px-1">@DetailRecord.NumOkVin</span>
</button>
</h2>
<div id="panelsStayOpen-collapseTwo" class="accordion-collapse collapse">
<div class="accordion-body">
<div class="row gx-2">
@foreach (var item in DetailRecord.ListVincolated)
{
<div class="col-2">
<div class="alert alert-info p-1 mb-2 text-center align-content-center">@item</div>
</div>
}
</div>
</div>
</div>
</div>
}
@if (DetailRecord.NumOk > 0)
{
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-collapseThree" aria-expanded="false" aria-controls="panelsStayOpen-collapseThree">
Producibili: <span class="fw-bold px-1">@DetailRecord.NumOk</span>
</button>
</h2>
<div id="panelsStayOpen-collapseThree" class="accordion-collapse collapse">
<div class="accordion-body">
<div class="row gx-2">
@foreach (var item in DetailRecord.ListWorkable)
{
<div class="col-2">
<div class="alert alert-success p-1 mb-2 text-center align-content-center">@item</div>
</div>
}
</div>
</div>
</div>
</div>
}
</div>
</div>
</div>
</div>
@@ -21,8 +21,27 @@ namespace Lux.UI.Components.Compo.WorkLoad
#endregion Public Properties
private string selUid = "";
protected string MainCss
{
get => string.IsNullOrEmpty(selUid) ? "col-12" : "col-6";
}
#region Public Classes
protected List<string> ListTargetMachine
{
get
{
var answ = DetailRecord.ListMachines;
// aggiungo la macchina EXT...
answ.Add("EXT");
return answ;
}
}
/// <summary>
/// Definizione richiesta di bilanciamento per il calcolo
/// </summary>
+2 -2
View File
@@ -5,7 +5,7 @@
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UserSecretsId>aspnet-Lux.UI-a758c101-a2f4-4e38-977d-1c4887dbbd50</UserSecretsId>
<Version>0.9.2512.2312</Version>
<Version>0.9.2512.2316</Version>
</PropertyGroup>
<ItemGroup>
@@ -17,7 +17,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Egw.Lux.WebWindowComplex" Version="2.7.12.2312" />
<PackageReference Include="Egw.Lux.WebWindowComplex" Version="2.7.12.2316" />
<PackageReference Include="EgwCoreLib.Razor" Version="1.5.2511.312" />
<PackageReference Include="EgwCoreLib.Utils" Version="1.5.2511.312" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="8.0.21" />
+1 -1
View File
@@ -1,6 +1,6 @@
<body>
<i>LUX - Web Windows MES</i>
<h4>Versione: 0.9.2512.2312</h4>
<h4>Versione: 0.9.2512.2316</h4>
<br /> Note di rilascio:
<ul>
<li>
+1 -1
View File
@@ -1 +1 @@
0.9.2512.2312
0.9.2512.2316
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<item>
<version>0.9.2512.2312</version>
<version>0.9.2512.2316</version>
<url>http://nexus.steamware.net/repository/SWS/GPW/stable/GPW.UI.zip</url>
<changelog>http://nexus.steamware.net/repository/SWS/GPW/stable/ChangeLog.html</changelog>
<mandatory>false</mandatory>