From 3300d606ba9149db5e0d44905ab770a3f623c185 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Fri, 5 Nov 2021 18:42:47 +0100 Subject: [PATCH] Aggiunta metodo registrazione lista attivazioni --- .../Controllers/AttivazioniController.cs | 26 ++-- LiMan.Api/Data/ApiDataService.cs | 52 ++++++- LiMan.Api/LiMan.APi.xml | 31 ++++- LiMan.DB/Controllers/DbController.cs | 127 +++++++++++++++++- 4 files changed, 210 insertions(+), 26 deletions(-) diff --git a/LiMan.Api/Controllers/AttivazioniController.cs b/LiMan.Api/Controllers/AttivazioniController.cs index 0ff1a56..34ea1d0 100644 --- a/LiMan.Api/Controllers/AttivazioniController.cs +++ b/LiMan.Api/Controllers/AttivazioniController.cs @@ -44,7 +44,7 @@ namespace LiMan.APi.Controllers [HttpGet] public async Task> Get() { - var result = await _DataService.AttivazioniSearch(0, "", true); + var result = await _DataService.AttivazioneSearch(0, "", true); return result; } @@ -58,29 +58,29 @@ namespace LiMan.APi.Controllers [HttpGet("{id}")] public async Task> Get(int id, string CodImpiego) { - var result = await _DataService.AttivazioniSearch(id, CodImpiego, false); + var result = await _DataService.AttivazioneSearch(id, CodImpiego, false); return result; } /// - /// Richiesta attivazione di una chiave di licenza sub + /// Richiesta attivazione di una lista di chiavi di licenza sub /// - /// + /// Idx licenza MASTER + /// Elenco codici impiego // POST api/attivazioni [HttpPost] - public ObjectResult Post([FromBody] string CodImpiego) + public async Task> Post(int id, [FromBody] List CodImpiego) { - // eseguo tentativo licenza... + List currData = new List(); - // ora tento di recuperare il valore... - if (true) + // eseguo tentativo generazione attivazioni da licenza... + bool done = await _DataService.AttivazioniTryAdd(id, CodImpiego, 60); + if (done) { - return Ok(CodImpiego); - } - else - { - return BadRequest(CodImpiego.ToString()); + currData = await _DataService.AttivazioniByLic(id, false); } + + return currData; } //// PUT api/attivazioni/5 diff --git a/LiMan.Api/Data/ApiDataService.cs b/LiMan.Api/Data/ApiDataService.cs index f5df2c8..efa087d 100644 --- a/LiMan.Api/Data/ApiDataService.cs +++ b/LiMan.Api/Data/ApiDataService.cs @@ -77,21 +77,65 @@ namespace LiMan.APi.Data return await Task.FromResult(dbResult); } + /// + /// Effettua registrazione (se possibile) delle licenze indicate dall'elenco codici di impiego indicati + /// + /// + /// Elenco Codici Impiego licenza + /// NUmero giorni x scadenza veto modifica + /// + /// + public async Task AttivazioniTryAdd(int IdxLic, List CodiciImpiego, int DayVeto) + { + bool taskDone = false; + + Stopwatch stopWatch = new Stopwatch(); + stopWatch.Start(); + + taskDone = dbController.AttivazioniTryAdd(IdxLic, CodiciImpiego, DayVeto); + stopWatch.Stop(); + TimeSpan ts = stopWatch.Elapsed; + Log.Trace($"Effettuata scrittura + rilettura da DB per AttivazioniTryAdd: {ts.TotalMilliseconds} ms"); + + return await Task.FromResult(taskDone); + } + + /// + /// Elenco Attivaizoni da licenza master + /// + /// Codice Licenza Master + /// Indica se nascondere i dati sensibili + /// + public async Task> AttivazioniByLic(int IdxLic, bool HideData) + { + List dbResult = new List(); + + Stopwatch stopWatch = new Stopwatch(); + stopWatch.Start(); + + dbResult = dbController.GetAttivazioniByLic(IdxLic, HideData); + stopWatch.Stop(); + TimeSpan ts = stopWatch.Elapsed; + Log.Trace($"Effettuata lettura da DB per AttivazioniByLic: {ts.TotalMilliseconds} ms"); + + return await Task.FromResult(dbResult); + } /// /// Elenco licenze dato cliente /// - /// Codice Installaizone /Cliente - /// Codice Applicazione + /// Codice Licenza Master + /// Codice Impiego licenza /// Indica se nascondere i dati sensibili /// - public async Task> AttivazioniSearch(int IdxLic, string CodImpiego, bool HideData) + public async Task> AttivazioneSearch(int IdxLic, string CodImpiego, bool HideData) { List dbResult = new List(); + Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); - dbResult = dbController.GetAttivazioni( IdxLic, CodImpiego, HideData); + dbResult = dbController.GetAttivazione( IdxLic, CodImpiego, HideData); stopWatch.Stop(); TimeSpan ts = stopWatch.Elapsed; Log.Trace($"Effettuata lettura da DB per AttivazioniSearch: {ts.TotalMilliseconds} ms"); diff --git a/LiMan.Api/LiMan.APi.xml b/LiMan.Api/LiMan.APi.xml index 734a6f6..7ea52d0 100644 --- a/LiMan.Api/LiMan.APi.xml +++ b/LiMan.Api/LiMan.APi.xml @@ -69,11 +69,12 @@ Codice univoco impiego licenza - + - Richiesta attivazione di una chiave di licenza sub + Richiesta attivazione di una lista di chiavi di licenza sub - + Idx licenza MASTER + Elenco codici impiego @@ -156,12 +157,30 @@ Indica se nascondere i dati sensibili - + + + Effettua registrazione (se possibile) delle licenze indicate dall'elenco codici di impiego indicati + + + Elenco Codici Impiego licenza + NUmero giorni x scadenza veto modifica + + + + + + Elenco Attivaizoni da licenza master + + Codice Licenza Master + Indica se nascondere i dati sensibili + + + Elenco licenze dato cliente - Codice Installaizone /Cliente - Codice Applicazione + Codice Licenza Master + Codice Impiego licenza Indica se nascondere i dati sensibili diff --git a/LiMan.DB/Controllers/DbController.cs b/LiMan.DB/Controllers/DbController.cs index a012162..6a6af50 100644 --- a/LiMan.DB/Controllers/DbController.cs +++ b/LiMan.DB/Controllers/DbController.cs @@ -55,8 +55,129 @@ namespace LiMan.DB.Controllers //Log.Info("Dispose di GWMSController"); } + public List GetAttivazioniByLic(int IdxLic, bool hideData) + { + List dbResult = new List(); + LicenzaModel mainLic = new LicenzaModel(); + using (LMDbContext localDbCtx = new LMDbContext(_configuration)) + { + DateTime oggi = DateTime.Today; + int stdIdxLic = 0; - public List GetAttivazioni(int IdxLic, string CodImpiego, bool hideData) + // generazione stringhe casuali.... + // https://jonathancrozier.com/blog/how-to-generate-a-random-string-with-c-sharp + StringBuilder sbRandChiave = new StringBuilder(); + string stdChiave = ""; + + if (hideData) + { + int numChar = 80; + Random random = new Random(); + + // idxLic + stdIdxLic = random.Next(50000, 100000); + + // chiave random + for (int i = 0; i < numChar; i++) + { + // Generate floating point numbers + double myFloat = random.NextDouble(); + // Generate the char using below logic + var myChar = Convert.ToChar(Convert.ToInt32(Math.Floor(25 * myFloat) + 65)); + sbRandChiave.Append(myChar); + } + stdChiave = $"{sbRandChiave}"; + } + else + { + // recupero se c'è licenza master + mainLic = localDbCtx + .DbSetLicenze + .Where(x => x.IdxLic == IdxLic) + .FirstOrDefault(); + } + + // conteggio preliminare licenze impiegate + var countSubLic = localDbCtx + .DbSetSubLicenze + .GroupBy(x => x.IdxLic) + .Select(g => new + { + IdxLic = g.Key, + NumLic = g.Count() + }); + + // calcolo DTO applicativi + dbResult = localDbCtx + .DbSetSubLicenze + .Where(x => x.IdxLic == IdxLic) + .OrderBy(o => o.VetoUnlock) + .Select(x => new AttivazioneDTO() + { + IdxLic = hideData ? stdIdxLic : x.IdxLic, + IdxSubLic = x.IdxSubLic, + CodImpiego = x.CodImpiego, + CodApp = mainLic.CodApp, + CodInst = mainLic.CodInst, + Descrizione = mainLic.Descrizione, + Tipo = x.Tipo, + Chiave = hideData ? stdChiave : x.Chiave, + VetoUnlock = x.VetoUnlock + }) + .ToList(); + } + return dbResult; + } + /// + /// Cerca di aggiungere sul DB le attivazioni richieste + /// + /// Idx Master Lic + /// Elenco codici di impiego da registrare + /// num gg di veto da impostare + /// + public bool AttivazioniTryAdd(int idxLic, List codiciImpiego, int numDayVeto) + { + bool answ = false; + + // verifica se si può procedere... + var licenza = GetLicenza(idxLic); + var attivList = GetAttivazioniByLic(idxLic, false); + if (licenza.IsValid && (licenza.NumLicenze >= (attivList.Count + codiciImpiego.Count))) + { + DateTime vetoDate = DateTime.Today.AddDays(numDayVeto); + using (LMDbContext localDbCtx = new LMDbContext(_configuration)) + { + try + { + // genero subLicenze... + var newRec = codiciImpiego + .Select(x => new SubLicenzaModel() + { + IdxLic = idxLic, + CodImpiego = x, + VetoUnlock = vetoDate, + Tipo = Enum.TipoLicenza.UserKey, + Chiave = x + }) + .ToList(); + localDbCtx + .DbSetSubLicenze + .AddRange(newRec); + + localDbCtx.SaveChanges(); + } + catch(Exception exc) + { + Log.Error($"Errore in AttivazioniTryAdd per IdxLic {idxLic} | #rec: {codiciImpiego.Count}{Environment.NewLine}{exc}"); + } + } + } + + + return answ; + } + + public List GetAttivazione(int IdxLic, string CodImpiego, bool hideData) { List dbResult = new List(); LicenzaModel mainLic = new LicenzaModel(); @@ -116,9 +237,9 @@ namespace LiMan.DB.Controllers .Select(x => new AttivazioneDTO() { IdxLic = hideData ? stdIdxLic : x.IdxLic, - IdxSubLic=x.IdxSubLic, + IdxSubLic = x.IdxSubLic, CodImpiego = x.CodImpiego, - CodApp=mainLic.CodApp, + CodApp = mainLic.CodApp, CodInst = mainLic.CodInst, Descrizione = mainLic.Descrizione, Tipo = x.Tipo,