Aggiunta metodo registrazione lista attivazioni

This commit is contained in:
Samuele Locatelli
2021-11-05 18:42:47 +01:00
parent 3f7f8dffb8
commit 3300d606ba
4 changed files with 210 additions and 26 deletions
+13 -13
View File
@@ -44,7 +44,7 @@ namespace LiMan.APi.Controllers
[HttpGet]
public async Task<List<DB.DTO.AttivazioneDTO>> 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<List<DB.DTO.AttivazioneDTO>> Get(int id, string CodImpiego)
{
var result = await _DataService.AttivazioniSearch(id, CodImpiego, false);
var result = await _DataService.AttivazioneSearch(id, CodImpiego, false);
return result;
}
/// <summary>
/// Richiesta attivazione di una chiave di licenza sub
/// Richiesta attivazione di una lista di chiavi di licenza sub
/// </summary>
/// <param name="CodImpiego"></param>
/// <param name="id">Idx licenza MASTER</param>
/// <param name="CodImpiego">Elenco codici impiego</param>
// POST api/attivazioni
[HttpPost]
public ObjectResult Post([FromBody] string CodImpiego)
public async Task<List<DB.DTO.AttivazioneDTO>> Post(int id, [FromBody] List<string> CodImpiego)
{
// eseguo tentativo licenza...
List<DB.DTO.AttivazioneDTO> currData = new List<DB.DTO.AttivazioneDTO>();
// 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
+48 -4
View File
@@ -77,21 +77,65 @@ namespace LiMan.APi.Data
return await Task.FromResult(dbResult);
}
/// <summary>
/// Effettua registrazione (se possibile) delle licenze indicate dall'elenco codici di impiego indicati
/// </summary>
/// <param name="IdxLic"></param>
/// <param name="CodiciImpiego">Elenco Codici Impiego licenza</param>
/// <param name="DayVeto">NUmero giorni x scadenza veto modifica</param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public async Task<bool> AttivazioniTryAdd(int IdxLic, List<string> 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);
}
/// <summary>
/// Elenco Attivaizoni da licenza master
/// </summary>
/// <param name="IdxLic">Codice Licenza Master</param>
/// <param name="HideData">Indica se nascondere i dati sensibili</param>
/// <returns></returns>
public async Task<List<DB.DTO.AttivazioneDTO>> AttivazioniByLic(int IdxLic, bool HideData)
{
List<DB.DTO.AttivazioneDTO> dbResult = new List<DB.DTO.AttivazioneDTO>();
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);
}
/// <summary>
/// Elenco licenze dato cliente
/// </summary>
/// <param name="IdxLic">Codice Installaizone /Cliente</param>
/// <param name="CodImpiego">Codice Applicazione</param>
/// <param name="IdxLic">Codice Licenza Master</param>
/// <param name="CodImpiego">Codice Impiego licenza</param>
/// <param name="HideData">Indica se nascondere i dati sensibili</param>
/// <returns></returns>
public async Task<List<DB.DTO.AttivazioneDTO>> AttivazioniSearch(int IdxLic, string CodImpiego, bool HideData)
public async Task<List<DB.DTO.AttivazioneDTO>> AttivazioneSearch(int IdxLic, string CodImpiego, bool HideData)
{
List<DB.DTO.AttivazioneDTO> dbResult = new List<DB.DTO.AttivazioneDTO>();
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");
+25 -6
View File
@@ -69,11 +69,12 @@
<param name="CodImpiego">Codice univoco impiego licenza</param>
<returns></returns>
</member>
<member name="M:LiMan.APi.Controllers.AttivazioniController.Post(System.String)">
<member name="M:LiMan.APi.Controllers.AttivazioniController.Post(System.Int32,System.Collections.Generic.List{System.String})">
<summary>
Richiesta attivazione di una chiave di licenza sub
Richiesta attivazione di una lista di chiavi di licenza sub
</summary>
<param name="CodImpiego"></param>
<param name="id">Idx licenza MASTER</param>
<param name="CodImpiego">Elenco codici impiego</param>
</member>
<member name="T:LiMan.APi.Controllers.InstallazioniController">
<summary>
@@ -156,12 +157,30 @@
<param name="HideData">Indica se nascondere i dati sensibili</param>
<returns></returns>
</member>
<member name="M:LiMan.APi.Data.ApiDataService.AttivazioniSearch(System.Int32,System.String,System.Boolean)">
<member name="M:LiMan.APi.Data.ApiDataService.AttivazioniTryAdd(System.Int32,System.Collections.Generic.List{System.String},System.Int32)">
<summary>
Effettua registrazione (se possibile) delle licenze indicate dall'elenco codici di impiego indicati
</summary>
<param name="IdxLic"></param>
<param name="CodiciImpiego">Elenco Codici Impiego licenza</param>
<param name="DayVeto">NUmero giorni x scadenza veto modifica</param>
<returns></returns>
<exception cref="T:System.NotImplementedException"></exception>
</member>
<member name="M:LiMan.APi.Data.ApiDataService.AttivazioniByLic(System.Int32,System.Boolean)">
<summary>
Elenco Attivaizoni da licenza master
</summary>
<param name="IdxLic">Codice Licenza Master</param>
<param name="HideData">Indica se nascondere i dati sensibili</param>
<returns></returns>
</member>
<member name="M:LiMan.APi.Data.ApiDataService.AttivazioneSearch(System.Int32,System.String,System.Boolean)">
<summary>
Elenco licenze dato cliente
</summary>
<param name="IdxLic">Codice Installaizone /Cliente</param>
<param name="CodImpiego">Codice Applicazione</param>
<param name="IdxLic">Codice Licenza Master</param>
<param name="CodImpiego">Codice Impiego licenza</param>
<param name="HideData">Indica se nascondere i dati sensibili</param>
<returns></returns>
</member>
+124 -3
View File
@@ -55,8 +55,129 @@ namespace LiMan.DB.Controllers
//Log.Info("Dispose di GWMSController");
}
public List<AttivazioneDTO> GetAttivazioniByLic(int IdxLic, bool hideData)
{
List<AttivazioneDTO> dbResult = new List<AttivazioneDTO>();
LicenzaModel mainLic = new LicenzaModel();
using (LMDbContext localDbCtx = new LMDbContext(_configuration))
{
DateTime oggi = DateTime.Today;
int stdIdxLic = 0;
public List<AttivazioneDTO> 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;
}
/// <summary>
/// Cerca di aggiungere sul DB le attivazioni richieste
/// </summary>
/// <param name="idxLic">Idx Master Lic</param>
/// <param name="codiciImpiego">Elenco codici di impiego da registrare</param>
/// <param name="numDayVeto">num gg di veto da impostare</param>
/// <returns></returns>
public bool AttivazioniTryAdd(int idxLic, List<string> 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<AttivazioneDTO> GetAttivazione(int IdxLic, string CodImpiego, bool hideData)
{
List<AttivazioneDTO> dbResult = new List<AttivazioneDTO>();
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,