Aggiunto parametro disabilitazione KeepAlive per salvataggio FluxLog (singolo o json) da IOB
This commit is contained in:
@@ -15,6 +15,7 @@ namespace MP_IO.Controllers
|
||||
{
|
||||
public class IOBController : Controller
|
||||
{
|
||||
|
||||
#region Public Methods
|
||||
|
||||
/// <summary> SALVA x macchina KVP parametro/valore:
|
||||
@@ -450,8 +451,35 @@ namespace MP_IO.Controllers
|
||||
return answ;
|
||||
}
|
||||
|
||||
// GET: IOB/flog/SIMUL_03?flux=PROG&valore=P0001&dtEve=20161223180600000&dtCurr=20161223180600000&cnt=999
|
||||
/// <summary>
|
||||
/// Invio record flog secco
|
||||
/// GET: IOB/flog/SIMUL_03?flux=PROG&valore=P0001&dtEve=20161223180600000&dtCurr=20161223180600000&cnt=999
|
||||
/// </summary>
|
||||
/// <param name="id">IdxMacchina</param>
|
||||
/// <param name="flux">CodFlux</param>
|
||||
/// <param name="valore">Valore da registrare</param>
|
||||
/// <param name="dtEve">DataOra evento (IOB time)</param>
|
||||
/// <param name="dtCurr">DataOra corrente (IOB time)</param>
|
||||
/// <param name="cnt">Contatore eventi (IOB)</param>
|
||||
/// <returns></returns>
|
||||
public string flog(string id, string flux, string valore, string dtEve, string dtCurr, string cnt)
|
||||
{
|
||||
return flog(id, flux, valore, dtEve, dtCurr, cnt, "false");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Invio record flog secco
|
||||
/// GET: IOB/flog/SIMUL_03?flux=PROG&valore=P0001&dtEve=20161223180600000&dtCurr=20161223180600000&cnt=999&disabKA=false
|
||||
/// </summary>
|
||||
/// <param name="id">IdxMacchina</param>
|
||||
/// <param name="flux">CodFlux</param>
|
||||
/// <param name="valore">Valore da registrare</param>
|
||||
/// <param name="dtEve">DataOra evento (IOB time)</param>
|
||||
/// <param name="dtCurr">DataOra corrente (IOB time)</param>
|
||||
/// <param name="cnt">Contatore eventi (IOB)</param>
|
||||
/// <param name="disabKA">Disabilitazione scrittura record KeepAlive</param>
|
||||
/// <returns></returns>
|
||||
public string flog(string id, string flux, string valore, string dtEve, string dtCurr, string cnt, string disabKA)
|
||||
{
|
||||
string answ = "";
|
||||
// formato yyyymmddHHMMSSnnn ovvero da anno a millisecondi
|
||||
@@ -470,7 +498,9 @@ namespace MP_IO.Controllers
|
||||
DataLayer DataLayerObj = new DataLayer();
|
||||
int count = 0;
|
||||
Int32.TryParse(cnt, out count);
|
||||
answ = DataLayerObj.processFluxLog(id, flux, valore, dtEve, dtCurr, count);
|
||||
int disKa = false;
|
||||
bool.TryParse(disabKA, out disKa);
|
||||
answ = DataLayerObj.processFluxLog(id, flux, valore, dtEve, dtCurr, count, disKa);
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
@@ -504,92 +534,140 @@ namespace MP_IO.Controllers
|
||||
// se ho dati...
|
||||
if (content != "")
|
||||
{
|
||||
DataLayer DataLayerObj = new DataLayer();
|
||||
// procedo a deserializzare in blocco l'oggetto...
|
||||
flogJsonPayload receivedData = new flogJsonPayload();
|
||||
answ = processFLogJson(id, false, insDone, answ, content);
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Processa una chiamata POST per l'invio di un array Json di oggetti fluxLog
|
||||
/// PUT: IOB/flogJson/SIMUL_03
|
||||
/// </summary>
|
||||
/// <param name="id">ID dell'IOB</param>
|
||||
/// <param name="disabKA">Disabilitazione della scrittura del record KeepAlive</param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public string flogJson(string id, bool disabKA)
|
||||
{
|
||||
int insDone = 0;
|
||||
int disKa = false;
|
||||
bool.TryParse(disabKA, out disKa);
|
||||
string answ = "-";
|
||||
// questa classe è derivata da Controller.Response... x cui recupero lo stream in altro modo...
|
||||
string content = "";
|
||||
System.Web.HttpContext.Current.Request.InputStream.Position = 0;
|
||||
using (var reader = new StreamReader(
|
||||
Request.InputStream, System.Text.Encoding.UTF8, true, 4096, true))
|
||||
{
|
||||
content = reader.ReadToEnd();
|
||||
}
|
||||
//Rest
|
||||
System.Web.HttpContext.Current.Request.InputStream.Position = 0;
|
||||
// se ho dati...
|
||||
if (content != "")
|
||||
{
|
||||
answ = processFLogJson(id, disabKA, insDone, answ, content);
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Effettivo processing FLogJson
|
||||
/// </summary>
|
||||
/// <param name=""></param>
|
||||
/// <param name="disabKA"></param>
|
||||
/// <param name="insDone"></param>
|
||||
/// <param name="answ"></param>
|
||||
/// <param name="content"></param>
|
||||
/// <returns></returns>
|
||||
private string processFLogJson(stringid, bool disabKA, int insDone, string answ, string content)
|
||||
{
|
||||
DataLayer DataLayerObj = new DataLayer();
|
||||
// procedo a deserializzare in blocco l'oggetto...
|
||||
flogJsonPayload receivedData = new flogJsonPayload();
|
||||
try
|
||||
{
|
||||
// deserializzo.
|
||||
receivedData = JsonConvert.DeserializeObject<flogJsonPayload>(content);
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
logger.lg.scriviLog($"Errore in fase deserializzazione flogJson{Environment.NewLine}{exc}");
|
||||
answ = "NO";
|
||||
}
|
||||
// se ho qualcosa da processare...
|
||||
if (receivedData != null)
|
||||
{
|
||||
// per ogni valore --> salvo!
|
||||
try
|
||||
{
|
||||
// deserializzo.
|
||||
receivedData = JsonConvert.DeserializeObject<flogJsonPayload>(content);
|
||||
foreach (var item in receivedData.fluxData)
|
||||
{
|
||||
// formato datetime come yyyyMMddHHmmssfff -->es: 20181223180600000
|
||||
answ = DataLayerObj.processFluxLog(id, item.flux, item.valore, item.dtEve.ToString("yyyyMMddHHmmssfff"), item.dtCurr.ToString("yyyyMMddHHmmssfff"), item.cnt, disabKA);
|
||||
}
|
||||
// se vuoto --> OK!
|
||||
if (string.IsNullOrEmpty(answ))
|
||||
{
|
||||
answ = $"OK {insDone} processed";
|
||||
}
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
logger.lg.scriviLog($"Errore in fase deserializzazione flogJson{Environment.NewLine}{exc}");
|
||||
logger.lg.scriviLog($"Errore in fase invio valori flogJson{Environment.NewLine}{exc}");
|
||||
answ = "NO";
|
||||
}
|
||||
// se ho qualcosa da processare...
|
||||
if (receivedData != null)
|
||||
// leggo parametri correnti...
|
||||
try
|
||||
{
|
||||
// per ogni valore --> salvo!
|
||||
try
|
||||
List<objItem> currParams = DataLayerObj.getCurrObjItems(id);
|
||||
// ora per ogni valore RICEVUTO costruisco un oggetto in innovazioni da
|
||||
// inviare...x salvare in stato parametri...
|
||||
List<objItem> innovazioni = new List<objItem>();
|
||||
foreach (var item in receivedData.fluxData)
|
||||
{
|
||||
foreach (var item in receivedData.fluxData)
|
||||
// flux = uuid del parametro
|
||||
objItem trovato = currParams.Find(obj => obj.uid == item.flux);
|
||||
// se lo trovo aggiorno...
|
||||
if (trovato != null)
|
||||
{
|
||||
// formato datetime come yyyyMMddHHmmssfff -->es: 20181223180600000
|
||||
answ = DataLayerObj.processFluxLog(id, item.flux, item.valore, item.dtEve.ToString("yyyyMMddHHmmssfff"), item.dtCurr.ToString("yyyyMMddHHmmssfff"), item.cnt);
|
||||
}
|
||||
// se vuoto --> OK!
|
||||
if (string.IsNullOrEmpty(answ))
|
||||
{
|
||||
answ = $"OK {insDone} processed";
|
||||
}
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
logger.lg.scriviLog($"Errore in fase invio valori flogJson{Environment.NewLine}{exc}");
|
||||
answ = "NO";
|
||||
}
|
||||
// leggo parametri correnti...
|
||||
try
|
||||
{
|
||||
List<objItem> currParams = DataLayerObj.getCurrObjItems(id);
|
||||
// ora per ogni valore RICEVUTO costruisco un oggetto in innovazioni da
|
||||
// inviare...x salvare in stato parametri...
|
||||
List<objItem> innovazioni = new List<objItem>();
|
||||
foreach (var item in receivedData.fluxData)
|
||||
{
|
||||
// flux = uuid del parametro
|
||||
objItem trovato = currParams.Find(obj => obj.uid == item.flux);
|
||||
// se lo trovo aggiorno...
|
||||
if (trovato != null)
|
||||
// aggiorno valore e data
|
||||
trovato.value = item.valore;
|
||||
trovato.lastRead = DateTime.Now;
|
||||
// se fosse un valore WRITE e mi ha dato un valore vuoto --> mando
|
||||
// un fix x riscrittura
|
||||
if (trovato.writable && string.IsNullOrEmpty(item.valore))
|
||||
{
|
||||
// aggiorno valore e data
|
||||
trovato.value = item.valore;
|
||||
trovato.lastRead = DateTime.Now;
|
||||
// se fosse un valore WRITE e mi ha dato un valore vuoto --> mando
|
||||
// un fix x riscrittura
|
||||
if (trovato.writable && string.IsNullOrEmpty(item.valore))
|
||||
{
|
||||
logger.lg.scriviLog($"flogJson | verifica parametri | {trovato.uid} | reqVal: {trovato.reqValue}");
|
||||
taskType currTask = (taskType)Enum.Parse(typeof(taskType), trovato.uid);
|
||||
DataLayerObj.addCheckTask4Machine(id, currTask, item.valore);
|
||||
}
|
||||
logger.lg.scriviLog($"flogJson | verifica parametri | {trovato.uid} | reqVal: {trovato.reqValue}");
|
||||
taskType currTask = (taskType)Enum.Parse(typeof(taskType), trovato.uid);
|
||||
DataLayerObj.addCheckTask4Machine(id, currTask, item.valore);
|
||||
}
|
||||
// altrimenti AGGIUNGO (READ ONLY)...
|
||||
else
|
||||
{
|
||||
trovato = new objItem
|
||||
{
|
||||
uid = item.flux,
|
||||
name = item.flux,
|
||||
value = item.valore,
|
||||
lastRead = DateTime.Now,
|
||||
writable = false
|
||||
};
|
||||
}
|
||||
// lo carico in innovation
|
||||
innovazioni.Add(trovato);
|
||||
}
|
||||
// faccio upsert innovations!
|
||||
DataLayerObj.upsertCurrObjItems(id, innovazioni);
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
logger.lg.scriviLog($"Errore in fase salvataggio innovazioni parametri correnti da flogJson{Environment.NewLine}{exc}");
|
||||
answ = "NO";
|
||||
// altrimenti AGGIUNGO (READ ONLY)...
|
||||
else
|
||||
{
|
||||
trovato = new objItem
|
||||
{
|
||||
uid = item.flux,
|
||||
name = item.flux,
|
||||
value = item.valore,
|
||||
lastRead = DateTime.Now,
|
||||
writable = false
|
||||
};
|
||||
}
|
||||
// lo carico in innovation
|
||||
innovazioni.Add(trovato);
|
||||
}
|
||||
// faccio upsert innovations!
|
||||
DataLayerObj.upsertCurrObjItems(id, innovazioni);
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
logger.lg.scriviLog($"Errore in fase salvataggio innovazioni parametri correnti da flogJson{Environment.NewLine}{exc}");
|
||||
answ = "NO";
|
||||
}
|
||||
}
|
||||
|
||||
return answ;
|
||||
}
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<IISExpressWindowsAuthentication />
|
||||
<IISExpressUseClassicPipelineMode />
|
||||
<UseGlobalApplicationHostFile />
|
||||
<LastActiveSolutionConfig>Release|Any CPU</LastActiveSolutionConfig>
|
||||
<LastActiveSolutionConfig>Debug|Any CPU</LastActiveSolutionConfig>
|
||||
<Controller_SelectedScaffolderID>MvcControllerEmptyScaffolder</Controller_SelectedScaffolderID>
|
||||
<Controller_SelectedScaffolderCategoryPath>root/Common/MVC/Controller</Controller_SelectedScaffolderCategoryPath>
|
||||
<WebStackScaffolding_ControllerDialogWidth>600</WebStackScaffolding_ControllerDialogWidth>
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<IISExpressWindowsAuthentication />
|
||||
<IISExpressUseClassicPipelineMode />
|
||||
<UseGlobalApplicationHostFile />
|
||||
<LastActiveSolutionConfig>Release|Any CPU</LastActiveSolutionConfig>
|
||||
<LastActiveSolutionConfig>Debug|Any CPU</LastActiveSolutionConfig>
|
||||
<ProjectView>ShowAllFiles</ProjectView>
|
||||
<NameOfLastUsedPublishProfile>C:\Users\samuele.steamw\source\MoonPro.net\MP-SITE\Properties\PublishProfiles\IIS03.pubxml</NameOfLastUsedPublishProfile>
|
||||
</PropertyGroup>
|
||||
|
||||
+8
-3
@@ -2553,13 +2553,18 @@ namespace MapoDb
|
||||
/// <param name="dtEve"></param>
|
||||
/// <param name="dtCurr"></param>
|
||||
/// <param name="contatore"></param>
|
||||
/// <param name="disabKA"></param>
|
||||
/// <returns></returns>
|
||||
public string processFluxLog(string idxMacchina, string flux, string valore, string dtEve, string dtCurr, int contatore)
|
||||
public string processFluxLog(string idxMacchina, string flux, string valore, string dtEve, string dtCurr, int contatore, bool disabKA)
|
||||
{
|
||||
// instanzio un nuovo oggetto MapoDb
|
||||
MapoDb connDb = new MapoDb();
|
||||
// scrivo keep alive!!! (se necessario, altrimenti è in cache...)
|
||||
connDb.scriviKeepAlive(idxMacchina, DateTime.Now);
|
||||
// se non vietato...
|
||||
if (!disabKA)
|
||||
{
|
||||
// scrivo keep alive!!! (se necessario, altrimenti è in cache...)
|
||||
connDb.scriviKeepAlive(idxMacchina, DateTime.Now);
|
||||
}
|
||||
// registro conteggio impiego chiamate REDIS
|
||||
if (memLayer.ML.CRB("IOB_RedEnab"))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user