Ancora update x test KIT

This commit is contained in:
Samuele Locatelli
2025-04-10 19:51:33 +02:00
parent d344b49ff0
commit 44c98a29d9
16 changed files with 225 additions and 40 deletions
+1
View File
@@ -71,6 +71,7 @@ namespace MP.Core
public const string redisXdlData = redisBaseAddr + "Cache:XDL:";
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";
+26
View File
@@ -1790,6 +1790,32 @@ namespace MP.Data.Controllers
return fatto;
}
/// <summary>
/// Punteggio compatibilità KIT per KeyFilt indicato
/// </summary>
/// <param name="KeyFilt"></param>
/// <param name="MaxResult"></param>
/// <returns></returns>
public List<TksScoreModel> TksScore(string KeyFilt, int MaxResult)
{
List<TksScoreModel> dbResult = new List<TksScoreModel>();
if (!string.IsNullOrEmpty(KeyFilt))
{
using (var dbCtx = new MoonProContext(_configuration))
{
var pKeyFilt = new SqlParameter("@KeyFilt", KeyFilt);
var pMaxRes = new SqlParameter("@maxResult", MaxResult);
dbResult = dbCtx
.DbSetTksScore
.FromSqlRaw("EXEC stp_TKS_Search @KeyFilt, @maxResult", pKeyFilt, pMaxRes)
.AsNoTracking()
.ToList();
}
}
return dbResult;
}
/// <summary>
/// Elenco Vocabolario (completo)
/// </summary>
+45
View File
@@ -0,0 +1,45 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
namespace MP.Data.DbModels
{
/// <summary>
/// Classe gestione item risposta selezione stored ricerca compatibilità KIT
/// </summary>
public class TksScoreModel
{
#region Public Properties
/// <summary>
/// Codice Articolo Parent
/// </summary>
[Key, MaxLength(50)]
public string CodArtParent { get; set; } = "";
/// <summary>
/// Numero Cicli Associati
/// </summary>
public int ChildFound { get; set; } = 0;
/// <summary>
/// Score Cicli Associati
/// </summary>
public double ChildScore { get; set; } = 0;
/// <summary>
/// Score complessivo
/// </summary>
public double TotalScore { get; set; } = 0;
#endregion Public Properties
}
}
+1
View File
@@ -102,6 +102,7 @@ namespace MP.Data
public virtual DbSet<IstanzeKitModel> DbSetInstKit { get; set; }
public virtual DbSet<TemplateKitModel> DbSetTempKit { get; set; }
public virtual DbSet<WipSetupKitModel> DbSetWipKit { get; set; }
public virtual DbSet<TksScoreModel> DbSetTksScore { get; set; }
#endregion Public Properties
-7
View File
@@ -1,7 +0,0 @@
namespace MP.SPEC.Components
{
public partial class GestKitPodl
{
}
}
-7
View File
@@ -1,7 +0,0 @@
namespace MP.SPEC.Components
{
public partial class GestKitVerif
{
}
}
@@ -2,7 +2,7 @@
<div class="card-header bg-primary text-light">
<div class="d-flex justify-content-between">
<div class="px-0">
<h4>Composizione KIT</h4>
<h4>Composizione KIT</h4>
</div>
<div class="px-0">
<button @onclick="() => CleanupOld()" class="btn btn-danger btn-sm2"><i class="fa-solid fa-recycle"></i></button>
@@ -59,7 +59,7 @@
</div>
</div>
<div class="card-footer py-1 bg-primary text-light">
Cod temp: <b>@KeyFilt</b>
TempKey: <b>@KeyFilt</b>
</div>
</div>
@@ -5,10 +5,13 @@ using MP.SPEC.Data;
namespace MP.SPEC.Components.ProdKit
{
public partial class Composer
public partial class KitComposer
{
#region Public Properties
[Parameter]
public string KeyFilt { get; set; } = "";
[Parameter]
public PODLExpModel? Rec2Add
{
@@ -77,13 +80,14 @@ namespace MP.SPEC.Components.ProdKit
// calcolo codice temporaneo utente...da apertura KIT
if (string.IsNullOrEmpty(KeyFilt))
{
DateTime adesso = DateTime.Now;
KeyFilt = $"KIT_{adesso:yyMMdd}_{adesso:HHmmss}";
// elimino dati + vecchi di 2h...
DateTime dtLimit = DateTime.Now.AddHours(-2);
var done = MDService.WipKitDeleteOlder(dtLimit);
}
}
protected override void OnParametersSet()
{
ReloadData();
}
@@ -92,7 +96,6 @@ namespace MP.SPEC.Components.ProdKit
#region Private Fields
private PODLExpModel? currRec = null;
private string KeyFilt = "";
private List<WipSetupKitModel> ListRecords = new List<WipSetupKitModel>();
private List<WipSetupKitModel> SearchRecord = new List<WipSetupKitModel>();
@@ -8,7 +8,7 @@ using NLog;
namespace MP.SPEC.Components.ProdKit
{
public partial class PodlMan : IDisposable
public partial class KitPodlMan : IDisposable
{
#region Public Properties
@@ -1,11 +1,44 @@
 <div class="card">
<div class="card-header bg-success text-light">
<h4>Verifica KIT</h4>
</div>
<div class="card-body">
<div class="card">
<div class="card-header bg-success text-light">
<div class="d-flex justify-content-between">
<div class="px-0">
<h4>Verifica KIT</h4>
</div>
</div>
</div>
<div class="card-body">
<b>Elenco KIT compatibili</b>
<p>...tabella...</p>
@* <asp:GridView runat="server" ID="grViewKitSel" DataSourceID="odsKitSel" AutoGenerateColumns="False" CssClass="table table-striped table-sm" DataKeyNames="CodArtParent" OnSelectedIndexChanged="grViewKitSel_SelectedIndexChanged">
<table class="table table-sm table-striped">
<thead>
<tr>
<th>Cod Kit</th>
<th># OK</th>
<th>Coerenza</th>
<th>Azione</th>
</tr>
</thead>
<tbody>
@foreach (var record in ListRecords)
{
<tr>
<td>@record.CodArtParent</td>
<td>@record.ChildFound</td>
<td>@($"{record.TotalScore:P2}")</td>
<td>
@if (record.TotalScore == 1)
{
<button @onclick="() => DoCreatePOdl(record)" class="btn btn-success btn-sm"><i class="fa-solid fa-plus"></i> Prom ODL</button>
}
else
{
<button class="btn btn-secondary disabled btn-sm"><i class="fa-solid fa-plus"></i> Prom ODL</button>
}
</td>
</tr>
}
</tbody>
</table>
@* <asp:GridView runat="server" ID="grViewKitSel" DataSourceID="odsKitSel" AutoGenerateColumns="False" CssClass="table table-striped table-sm" DataKeyNames="CodArtParent" OnSelectedIndexChanged="grViewKitSel_SelectedIndexChanged">
<EmptyDataTemplate>
Nessun KIT trovato
</EmptyDataTemplate>
@@ -27,10 +60,10 @@
<asp:Parameter DefaultValue="2" Name="maxResult" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource> *@
<div runat="server" id="divPODL">
<div runat="server" id="divPODL">
<b>Elenco promesse per KIT (100%)</b>
<p>...tabella...</p>
@* <asp:GridView runat="server" ID="grViewPODL" DataSourceID="odsPODL" CssClass="table table-sm table-striped" AutoGenerateColumns="False" DataKeyNames="idxPromessa">
@* <asp:GridView runat="server" ID="grViewPODL" DataSourceID="odsPODL" CssClass="table table-sm table-striped" AutoGenerateColumns="False" DataKeyNames="idxPromessa">
<Columns>
<asp:BoundField DataField="idxPromessa" HeaderText="#" InsertVisible="False" ReadOnly="True" SortExpression="idxPromessa" />
<asp:TemplateField HeaderText="Cod.KIT" SortExpression="KeyRichiesta">
@@ -68,11 +101,11 @@
</SelectParameters>
</asp:ObjectDataSource>
<asp:HiddenField runat="server" ID="hfCodArtKit" /> *@
</div>
</div>
<div class="card-footer py-1 bg-success text-light">
Abilitato se = 100%
</div>
</div>
</div>
</div>
<div class="card-footer py-1 bg-success text-light">
TempKey: <b>@KeyFilt</b> | Abilitato se = 100%
</div>
</div>
@@ -0,0 +1,41 @@
using Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
using MP.Data.DbModels;
using MP.SPEC.Data;
namespace MP.SPEC.Components.ProdKit
{
public partial class KitVerify
{
[Parameter]
public string KeyFilt { get; set; } = "";
[Inject]
protected IJSRuntime JSRuntime { get; set; } = null!;
[Inject]
protected MpDataService MDService { get; set; } = null!;
protected override void OnParametersSet()
{
ReloadData();
}
private List<TksScoreModel> ListRecords = new List<TksScoreModel>();
private List<TksScoreModel> SearchRecord = new List<TksScoreModel>();
private void ReloadData()
{
SearchRecord = MDService.TksScore(KeyFilt, 1000, true);
ListRecords = SearchRecord.ToList();
}
private void DoCreatePOdl(TksScoreModel currRec)
{
}
}
}
+3 -3
View File
@@ -1,12 +1,12 @@
<div class="row">
<div class="col-6">
<PodlMan PadCodXdl="@padCodXdl" EC_RecordSel="SavePodl"></PodlMan>
<KitPodlMan PadCodXdl="@padCodXdl" EC_RecordSel="SavePodl"></KitPodlMan>
</div>
<div class="col-6">
<Composer Rec2Add="@currPodlRec"></Composer>
<KitComposer Rec2Add="@currPodlRec" KeyFilt="@keyFilt"></KitComposer>
</div>
<div class="col-12">
<GestKitVerif></GestKitVerif>
<KitVerify KeyFilt="@keyFilt"></KitVerify>
</div>
<div class="col-12">
<GestKitPodl></GestKitPodl>
@@ -22,8 +22,18 @@ namespace MP.SPEC.Components.ProdKit
padCodXdl = MDService.ConfigTryGet("padCodXdl");
}
currPodlRec = null;
// Verifico chiave Kit o la rigenero
if (string.IsNullOrEmpty(keyFilt))
{
DateTime adesso = DateTime.Now;
keyFilt = $"KIT_{adesso:yyMMdd}_{adesso:HHmmss}";
keyFiltSearch = keyFilt;
}
}
private string keyFilt = "";
private string keyFiltSearch = "";
#endregion Protected Methods
#region Private Fields
@@ -36,7 +46,9 @@ namespace MP.SPEC.Components.ProdKit
/// <param name="selRec"></param>
protected void SavePodl(PODLExpModel selRec)
{
keyFiltSearch = "KIT#";
currPodlRec = selRec;
keyFiltSearch = keyFilt;
}
/// <summary>
+38 -1
View File
@@ -2042,6 +2042,43 @@ namespace MP.SPEC.Data
return fatto;
}
/// <summary>
/// Punteggio compatibilità KIT per KeyFilt indicato
/// </summary>
/// <param name="KeyFilt"></param>
/// <param name="MaxResult"></param>
/// <param name="ForceDb"></param>
/// <returns></returns>
public List<TksScoreModel> TksScore(string KeyFilt, int MaxResult, bool ForceDb)
{
string source = "DB";
Stopwatch sw = new Stopwatch();
sw.Start();
List<TksScoreModel>? result = new List<TksScoreModel>();
// cerco in redis...
string currKey = $"{Utils.redisKitScore}:{KeyFilt}:{MaxResult}";
RedisValue rawData = redisDb.StringGet(currKey);
if (rawData.HasValue && !ForceDb)
{
result = JsonConvert.DeserializeObject<List<TksScoreModel>>($"{rawData}");
source = "REDIS";
}
else
{
result = dbController.TksScore(KeyFilt, MaxResult);
// serializzo e salvo...
rawData = JsonConvert.SerializeObject(result);
redisDb.StringSet(currKey, rawData, TimeSpan.FromMinutes(redisLongTimeCache));
}
if (result == null)
{
result = new List<TksScoreModel>();
}
sw.Stop();
Log.Debug($"TksScore | {source} | {sw.Elapsed.TotalMilliseconds}ms");
return result;
}
/// <summary>
/// Esegue traduzione dato vocabolario da Lingua + Lemma
/// </summary>
@@ -2155,7 +2192,7 @@ namespace MP.SPEC.Data
}
/// <summary>
/// Elimina i record associati al KeyFilt indicato
/// Elimina i record associati al keyFilt indicato
/// </summary>
/// <param name="KeyFilt"></param>
public bool WipKitDeleteGroup(string KeyFilt)