From 1f15e8e38f44b01f907d323640941ae4e720029d Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Thu, 28 Sep 2023 19:37:58 +0200 Subject: [PATCH] Bozza display ODL --- .../Components/TcHistoryFilter.razor | 29 ++-- MP-TAB/MP-TAB.Client/Pages/TCHistory.razor | 65 +++++++- .../Controllers/ListSelectController.cs | 10 +- MP-TAB/MP-TAB/Controllers/ODLController.cs | 69 +++++++++ MP-TAB/MP-TAB/Program.cs | 1 + MP.Data/Services/ListSelectDataSrv.cs | 2 +- MP.Data/Services/OrderDataSrv.cs | 139 ++++++++++++++++++ 7 files changed, 293 insertions(+), 22 deletions(-) create mode 100644 MP-TAB/MP-TAB/Controllers/ODLController.cs create mode 100644 MP.Data/Services/OrderDataSrv.cs diff --git a/MP-TAB/MP-TAB.Client/Components/TcHistoryFilter.razor b/MP-TAB/MP-TAB.Client/Components/TcHistoryFilter.razor index 4c105a01..c59af214 100644 --- a/MP-TAB/MP-TAB.Client/Components/TcHistoryFilter.razor +++ b/MP-TAB/MP-TAB.Client/Components/TcHistoryFilter.razor @@ -6,8 +6,8 @@
- + @if (ListMacchineAll == null) { @@ -41,7 +41,7 @@
- @if (ListArticoli == null) { @@ -62,19 +62,22 @@ @code { + [Parameter] + public int MatrOpr { get; set; } = 102; + [Parameter] + public string Title { get; set; } = "TC History"; [Parameter] public int SearchMinChar { get; set; } [Parameter] - public EventCallback E_SearchUpd { get; set; } + public EventCallback E_CodArt { get; set; } + [Parameter] + public EventCallback E_IdxMacc { get; set; } [Inject] protected IConfiguration config { get; set; } = null!; - [Parameter] - public int MatrOpr { get; set; } = 102; - [Parameter] - public string Title { get; set; } = "TC History"; + protected string BaseAddr = ""; protected override async Task OnInitializedAsync() { @@ -82,7 +85,6 @@ await ReloadAllData(); } - private string BaseAddr = ""; protected async Task ReloadAllData() { @@ -96,6 +98,15 @@ FiltArticoli(); } + protected async Task ReportArt() + { + await E_CodArt.InvokeAsync(CodArtSel); + } + protected async Task ReportMacc() + { + await E_IdxMacc.InvokeAsync(IdxMaccSel); + } + protected async Task GetArticoli() { if (!ListArtDisabled) diff --git a/MP-TAB/MP-TAB.Client/Pages/TCHistory.razor b/MP-TAB/MP-TAB.Client/Pages/TCHistory.razor index 86b3dfaa..13051368 100644 --- a/MP-TAB/MP-TAB.Client/Pages/TCHistory.razor +++ b/MP-TAB/MP-TAB.Client/Pages/TCHistory.razor @@ -1,13 +1,28 @@ @attribute [RenderModeAuto] @* @attribute [RenderModeServer] *@ +@inject HttpClient Http +
- +
- griglia risultati - + @if (isLoading) + { + ...loading... + } + else + { + griglia risultati + @if (ListODL != null && ListODL.Count > 0) + { + foreach (var item in ListODL) + { +

@item.IdxOdl

+ } + } + }
@@ -15,11 +30,47 @@ [Parameter] public int MatrOpr { get; set; } = 0; - protected int SearchMinChar = 3; + [Inject] + protected IConfiguration config { get; set; } = null!; - protected async Task RepSearchUpd(string newSearch) + protected int SearchMinChar = 3; + protected string CodArt = ""; + protected string IdxMacc = ""; + protected string BaseAddr = ""; + protected bool isLoading = false; + + protected List ListODL { get; set; } = new List(); + + protected override async Task OnInitializedAsync() { - await Task.Delay(1); - // await E_FiltSearchUpd.InvokeAsync(newSearch); + BaseAddr = config.GetValue("OptConf:BaseAddr") ?? ""; + await ReloadData(); } + + protected async Task SelCodArt(string newCodArt) + { + CodArt = newCodArt; + await ReloadData(); + } + protected async Task SelIdxMacc(string newIdxMacc) + { + IdxMacc = newIdxMacc; + await ReloadData(); + } + + protected async Task ReloadData() + { + isLoading = true; + if (!string.IsNullOrEmpty(CodArt)) + { + string ApiUrl = $"{BaseAddr}api/ODL/GetODL?CodArt={CodArt}&IdxMacchina={IdxMacc}"; + var rawData = await Http.GetFromJsonAsync>(ApiUrl); + if (rawData != null) + { + ListODL = rawData; + } + } + isLoading = false; + } + } diff --git a/MP-TAB/MP-TAB/Controllers/ListSelectController.cs b/MP-TAB/MP-TAB/Controllers/ListSelectController.cs index 564092f4..9f76690c 100644 --- a/MP-TAB/MP-TAB/Controllers/ListSelectController.cs +++ b/MP-TAB/MP-TAB/Controllers/ListSelectController.cs @@ -19,7 +19,7 @@ namespace MP_TAB.Controllers { Log.Info("Starting ListSelectController"); _configuration = configuration; - FiltDataServ = DataService; + CtrDataServ = DataService; Log.Info("Avviato ListSelectController"); } @@ -41,7 +41,7 @@ namespace MP_TAB.Controllers await Task.Delay(1); try { - answ = await FiltDataServ.ArticoliGetSearch(NumRec, Azienda, SearchArt); + answ = await CtrDataServ.ArticoliGetSearch(NumRec, Azienda, SearchArt); } catch (Exception exc) { @@ -57,7 +57,7 @@ namespace MP_TAB.Controllers await Task.Delay(1); try { - var rawData = await FiltDataServ.ArticoliGetSearch(NumRec, Azienda, SearchArt); + var rawData = await CtrDataServ.ArticoliGetSearch(NumRec, Azienda, SearchArt); // trasformo! if (rawData != null) { @@ -78,7 +78,7 @@ namespace MP_TAB.Controllers await Task.Delay(1); try { - var rawData = await FiltDataServ.MacchineByMatrOper(MatrOpr); + var rawData = await CtrDataServ.MacchineByMatrOper(MatrOpr); // trasformo! if (rawData != null) { @@ -104,7 +104,7 @@ namespace MP_TAB.Controllers #region Private Properties - private ListSelectDataSrv FiltDataServ { get; set; } = null!; + private ListSelectDataSrv CtrDataServ { get; set; } = null!; #endregion Private Properties } diff --git a/MP-TAB/MP-TAB/Controllers/ODLController.cs b/MP-TAB/MP-TAB/Controllers/ODLController.cs new file mode 100644 index 00000000..3e62d12a --- /dev/null +++ b/MP-TAB/MP-TAB/Controllers/ODLController.cs @@ -0,0 +1,69 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Configuration; +using MP.Data.DatabaseModels; +using MP.Data.Services; +using NLog; +using NLog.Fluent; +using static System.Runtime.InteropServices.JavaScript.JSType; + +namespace MP_TAB.Controllers +{ + [Route("api/[controller]")] + [ApiController] + public class ODLController : ControllerBase + { + #region Public Constructors + + public ODLController(IConfiguration configuration, OrderDataSrv DataService) + { + Log.Info("Starting ODLController"); + _configuration = configuration; + CtrDataServ = DataService; + Log.Info("Avviato ODLController"); + } + + #endregion Public Constructors + + #region Public Methods + + // GET: api/ListSelect + [HttpGet] + public string Get() + { + return "OK"; + } + + [HttpGet("GetODL")] + public async Task> GetODL(string CodArt, string IdxMacchina) + { + List answ = new List(); + await Task.Delay(1); + try + { + answ = await CtrDataServ.ListODLFilt(CodArt, IdxMacchina); + } + catch (Exception exc) + { + Log.Error($"Eccezione in GetODL | CodArt: {CodArt} | IdxMacchina: {IdxMacchina}{Environment.NewLine}{exc}"); + } + return answ; + } + + #endregion Public Methods + + #region Private Fields + + private static IConfiguration _configuration = null!; + + private static Logger Log = LogManager.GetCurrentClassLogger(); + + #endregion Private Fields + + #region Private Properties + + private OrderDataSrv CtrDataServ { get; set; } = null!; + + #endregion Private Properties + } +} \ No newline at end of file diff --git a/MP-TAB/MP-TAB/Program.cs b/MP-TAB/MP-TAB/Program.cs index 81879e61..8228ff64 100644 --- a/MP-TAB/MP-TAB/Program.cs +++ b/MP-TAB/MP-TAB/Program.cs @@ -17,6 +17,7 @@ var redisMultiplexer = ConnectionMultiplexer.Connect(connStringRedis); builder.Services.AddSingleton(redisMultiplexer); builder.Services.AddSingleton(); builder.Services.AddSingleton(); +builder.Services.AddSingleton(); builder.Services.AddScoped(); // nuova versione contenuti... diff --git a/MP.Data/Services/ListSelectDataSrv.cs b/MP.Data/Services/ListSelectDataSrv.cs index 456b7548..5308a38e 100644 --- a/MP.Data/Services/ListSelectDataSrv.cs +++ b/MP.Data/Services/ListSelectDataSrv.cs @@ -40,7 +40,7 @@ namespace MP.Data.Services { dbController = new Controllers.MpSpecController(configuration); StringBuilder sb = new StringBuilder(); - sb.AppendLine($"MenuData | MpSpecController OK"); + sb.AppendLine($"ListSelectDataSrv | MpSpecController OK"); Log.Info(sb.ToString()); } } diff --git a/MP.Data/Services/OrderDataSrv.cs b/MP.Data/Services/OrderDataSrv.cs new file mode 100644 index 00000000..89329c48 --- /dev/null +++ b/MP.Data/Services/OrderDataSrv.cs @@ -0,0 +1,139 @@ +using Microsoft.Extensions.Configuration; +using MP.Data.Conf; +using MP.Data.DatabaseModels; +using Newtonsoft.Json; +using NLog; +using StackExchange.Redis; +using System; +using System.Collections.Generic; +using System.Data; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MP.Data.Services +{ + /// + /// Classe accesso dati ordini + /// + public class OrderDataSrv : BaseServ, IDisposable + { + #region Public Constructors + + public OrderDataSrv(IConfiguration configuration) + { + _configuration = configuration; + + // setup compoenti REDIS + redisConn = ConnectionMultiplexer.Connect(_configuration.GetConnectionString("Redis")); + redisDb = redisConn.GetDatabase(); + + // conf DB + string connStr = _configuration.GetConnectionString("Mp.All"); + if (string.IsNullOrEmpty(connStr)) + { + Log.Error("ConnString empty!"); + } + else + { + dbController = new Controllers.MpSpecController(configuration); + StringBuilder sb = new StringBuilder(); + sb.AppendLine($"OrderDataSrv | MpSpecController OK"); + Log.Info(sb.ToString()); + } + } + + #endregion Public Constructors + + #region Public Properties + + public static Controllers.MpSpecController dbController { get; set; } = null!; + + #endregion Public Properties + + #region Public Methods + + /// + /// Elenco ODL filtrati x articolo e macchina + /// + /// Cod articolo + /// Macchina selezionata + /// + public async Task> ListODLFilt(string CodArt, string IdxMacchina) + { + // setup parametri costanti + bool inCorso = false; + string keyRichPart = "*"; + string Reparto = "*"; + DateTime startDate = new DateTime(2000, 1, 1); + DateTime endDate = DateTime.Today.AddDays(1); + string source = "DB"; + Stopwatch sw = new Stopwatch(); + sw.Start(); + List? result = new List(); + // cerco in redis... + string currKey = $"{redisBaseKey}:ODL:{IdxMacchina}:{CodArt}"; + RedisValue rawData = await redisDb.StringGetAsync(currKey); + if (!string.IsNullOrEmpty($"{rawData}")) + { + result = JsonConvert.DeserializeObject>($"{rawData}"); + source = "REDIS"; + } + else + { + result = await Task.FromResult(dbController.ListODLFilt(inCorso,CodArt, keyRichPart, Reparto, IdxMacchina, startDate, endDate)); + // serializzp e salvo... + rawData = JsonConvert.SerializeObject(result); + await redisDb.StringSetAsync(currKey, rawData, LongCache); + } + if (result == null) + { + result = new List(); + } + sw.Stop(); + Log.Debug($"ListODLFilt | CodArt: {CodArt} | IdxMacchina: {IdxMacchina} | {source} | {sw.Elapsed.TotalMilliseconds}ms"); + return result; + } + + + + public Task> ConfigGetAll() + { + return Task.FromResult(dbController.ConfigGetAll().ToList()); + } + + public void Dispose() + { + // Clear database controller + dbController.Dispose(); + } + + + #endregion Public Methods + + #region Protected Fields + + /// + /// Oggetto per connessione a REDIS + /// + protected ConnectionMultiplexer redisConn = null!; + + /// + /// Oggetto DB redis da impiegare x chiamate R/W + /// + protected IDatabase redisDb = null!; + + #endregion Protected Fields + + #region Private Fields + + private static IConfiguration _configuration = null!; + + private static Logger Log = LogManager.GetCurrentClassLogger(); + private string redisBaseKey = "MP:ALL:Cache"; + + #endregion Private Fields + } +} \ No newline at end of file