Compare commits

...

10 Commits

Author SHA1 Message Date
Samuele Locatelli a9983d141d ri-ordinamento region e pulizia codice x fix finale interfacce 2026-04-02 18:29:09 +02:00
Samuele Locatelli c582b88e4a Fix implementazione interfaccia IIOBController 2026-04-02 18:08:14 +02:00
Samuele Locatelli 0bcdca1148 Merge branch 'develop' of https://gitlab.steamware.net/steamware/MoonPro.net into develop 2026-04-02 18:02:46 +02:00
Samuele Locatelli a8d5f88f3d cancellazione file inutilizzati x WebAPI (abbozzata) 2026-04-02 18:02:44 +02:00
Samuele Locatelli 8039dfbc14 Rimozione file inutilizzati 2026-04-02 18:01:49 +02:00
Samuele E. Locatelli (W11-AI) f619f3f45e Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/mes/mapo/MoonPro.net into develop 2026-04-02 18:01:13 +02:00
Samuele E. Locatelli (W11-AI) 85c11fb8c4 update commenti 2026-04-02 17:59:52 +02:00
Samuele Locatelli 43d613eb67 Update IIOBController x migrazione 2026-04-02 17:45:13 +02:00
Samuele E. Locatelli (W11-AI) 6276d86b5b Merge branch 'master' into develop 2026-04-02 17:15:57 +02:00
Samuele Locatelli 0bfff6fff0 Merge tag 'AddNumPzPalletApprovTCiclo' into develop
Update x display num pzPallet x approvazione variazione TCiclo
2026-04-02 07:18:22 +02:00
9 changed files with 738 additions and 487 deletions
+293 -279
View File
@@ -4,304 +4,318 @@ using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Web.Mvc;
using MP_IO.Interfaces;
namespace MP_IO.Controllers
{
public class BENCHController : Controller, IBENCHService
{
/// <summary>
/// Oggetto datalayer specifico
/// </summary>
DataLayer DataLayerObj = new DataLayer();
public class BENCHController : Controller, IBENCHService
{
#region Public Methods
// GET: IOB (è un check alive)
public string Index()
{
return "OK";
}
// GET BENCH/CNTKEY/test
public string CNTKEY(string id)
{
string answ = "ND";
if (id == null) id = "";
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
// conto quanti oggetti ho in memoria REDIS...
string groupHash = ""; // DataLayer.mHash("");
if (id.Length > 0)
{
groupHash += id + ":";
}
groupHash += "*";
answ = string.Format("Trovate {0} Hash per {1}", memLayer.ML.redCountKey(groupHash), groupHash);
stopWatch.Stop();
// Get the elapsed time as a TimeSpan value.
TimeSpan ts = stopWatch.Elapsed;
// accodo tempo!
answ += string.Format("<hr/>Elapsed: {0}ms", ts.TotalMilliseconds);
// ritorno
return answ;
}
// GET BENCH/RCLEAN/100
public string RCLEAN(int? id)
{
string answ = "ND";
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
// se id nullo --> KO!
if (id == null)
{
answ = "KO";
}
else
{
string chiave;
KeyValuePair<string, string>[] valori = new KeyValuePair<string, string>[2];
try
// GET BENCH/DTMAC/SIMUL_01
public string DTMAC(string id)
{
// svuoto i precedenti hash... CICLO!
for (int i = 0; i < id; i++)
{
chiave = string.Format("test:{0}", i);
memLayer.ML.redDelKey(chiave);
}
answ = "OK";
string answ = "ND";
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
// se id nullo --> KO!
if (id == null)
{
answ = "KO";
}
else
{
answ = "";
try
{
Dictionary<string, string> valori = DataLayerObj.mDatiMacchine(id);
foreach (var item in valori)
{
answ += string.Format("{0}|{1}<br/>", item.Key, item.Value);
}
}
catch
{ }
}
stopWatch.Stop();
// Get the elapsed time as a TimeSpan value.
TimeSpan ts = stopWatch.Elapsed;
// accodo tempo!
answ += string.Format("<hr/>Elapsed: {0}ms", ts.TotalMilliseconds);
// ritorno
return answ;
}
catch
{ }
}
stopWatch.Stop();
// Get the elapsed time as a TimeSpan value.
TimeSpan ts = stopWatch.Elapsed;
// accodo tempo!
answ += string.Format("<hr/>Elapsed: {0}ms", ts.TotalMilliseconds);
// ritorno
return answ;
}
// GET BENCH/RSETUP/100
public string RSETUP(int? id)
{
string answ = "ND";
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
// se id nullo --> KO!
if (id == null)
{
answ = "KO";
}
else
{
string chiave;
KeyValuePair<string, string>[] valori = new KeyValuePair<string, string>[2];
try
// GET BENCH/fSMI/18?idxMS=1&valore=1
public string fSMI(int? id, int? idxMS, int? valore)
{
// salvo il datasetet come insieme di hash in redis...
for (int i = 0; i < id; i++)
{
chiave = string.Format("test:{0}", i);
valori[0] = new KeyValuePair<string, string>("numero", i.ToString());
valori[1] = new KeyValuePair<string, string>("doppio", (i * 2).ToString());
memLayer.ML.redSaveHash(chiave, valori);
}
answ = "OK";
string answ = "ND";
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
// se id nullo --> KO!
if (id == null)
{
answ = "KO";
}
else
{
// recupero dati x sapere quale famiglia SMI è necessaria e quale stato / segnale si sia ricevuto
int idxFamIn = Convert.ToInt32(id);
int idxMicroStato = Convert.ToInt32(idxMS);
int valIOB = Convert.ToInt32(valore);
// recupero microstato macchina da chiave relativa
answ = "";
try
{
// verifico se ci sia in memoria tab della fam macchina relativa (sennò carico)
string fiHASH = DataLayer.hSMI(idxFamIn);
string outVal = "";
bool trovato = memLayer.ML.redHashPresentSz(fiHASH);
if (!trovato)
{
// ricarico tabella!
KeyValuePair<string, string>[] valori = DataLayerObj.mTabSMI(idxFamIn);
answ = string.Format("Ricaricata SMI per famiglia {0}<br/>", fiHASH);
}
answ += string.Format("Trovata {0} Hash per {1}<br />", memLayer.ML.redCountKey(fiHASH), fiHASH);
// recupero singolo valore (stringa) x chiave
outVal = DataLayerObj.valoreSMI(idxFamIn, idxMicroStato, valIOB);
// mostro output
answ += string.Format("idxFamIN: {0} | idxMS: {1} | valIOB: {2} | out: {3} <br/>", idxFamIn, idxMicroStato, valIOB, outVal);
}
catch
{ }
}
stopWatch.Stop();
// Get the elapsed time as a TimeSpan value.
TimeSpan ts = stopWatch.Elapsed;
// accodo tempo!
answ += string.Format("<hr/>Total Time Elapsed: {0}ms", ts.TotalMilliseconds);
// ritorno
return answ;
}
catch
{ }
}
stopWatch.Stop();
// Get the elapsed time as a TimeSpan value.
TimeSpan ts = stopWatch.Elapsed;
// accodo tempo!
answ += string.Format("<hr/>Elapsed: {0}ms", ts.TotalMilliseconds);
// ritorno
return answ;
}
// GET BENCH/RSH/100
public string RSH(int? id)
{
string answ = "ND";
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
// se id nullo --> KO!
if (id == null)
{
answ = "KO";
}
else
{
answ = "";
string chiave;
KeyValuePair<string, string>[] valori = new KeyValuePair<string, string>[2];
try
// GET: IOB (è un check alive)
public string Index()
{
// ora restituisco record completo dell'hash con ID indicato
chiave = string.Format("test:{0}", id);
valori = memLayer.ML.redGetHash(chiave);
foreach (var item in valori)
{
answ += string.Format("{0}|{1}<br/>", item.Key, item.Value);
}
return "OK";
}
catch
{ }
}
stopWatch.Stop();
// Get the elapsed time as a TimeSpan value.
TimeSpan ts = stopWatch.Elapsed;
// accodo tempo!
answ += string.Format("<hr/>Elapsed: {0}ms", ts.TotalMilliseconds);
// ritorno
return answ;
}
// GET BENCH/DTMAC/SIMUL_01
public string DTMAC(string id)
{
string answ = "ND";
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
// se id nullo --> KO!
if (id == null)
{
answ = "KO";
}
else
{
answ = "";
try
// GET BENCH/INSEN/2004
public string INSEN(string id)
{
Dictionary<string, string> valori = DataLayerObj.mDatiMacchine(id);
foreach (var item in valori)
{
answ += string.Format("{0}|{1}<br/>", item.Key, item.Value);
}
string answ = "ND";
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
// se id nullo --> KO!
if (id == null)
{
answ = "KO";
}
else
{
// recupero microstato macchina da chiave relativa
answ = "";
try
{
answ += string.Format("Macchina {0}, insEnabled {1}<br />", id, DataLayerObj.insEnab(id));
}
catch
{ }
}
stopWatch.Stop();
// Get the elapsed time as a TimeSpan value.
TimeSpan ts = stopWatch.Elapsed;
// accodo tempo!
answ += string.Format("<hr/>Total Time Elapsed: {0}ms", ts.TotalMilliseconds);
// ritorno
return answ;
}
catch
{ }
}
stopWatch.Stop();
// Get the elapsed time as a TimeSpan value.
TimeSpan ts = stopWatch.Elapsed;
// accodo tempo!
answ += string.Format("<hr/>Elapsed: {0}ms", ts.TotalMilliseconds);
// ritorno
return answ;
}
// GET BENCH/CNTKEY/test
public string CNTKEY(string id)
{
string answ = "ND";
if (id == null) id = "";
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
// conto quanti oggetti ho in memoria REDIS...
string groupHash = ""; // DataLayer.mHash("");
if (id.Length > 0)
{
groupHash += id + ":";
}
groupHash += "*";
answ = string.Format("Trovate {0} Hash per {1}", memLayer.ML.redCountKey(groupHash), groupHash);
stopWatch.Stop();
// Get the elapsed time as a TimeSpan value.
TimeSpan ts = stopWatch.Elapsed;
// accodo tempo!
answ += string.Format("<hr/>Elapsed: {0}ms", ts.TotalMilliseconds);
// ritorno
return answ;
}
// GET BENCH/tSMI/60
public string tSMI(int? id)
{
string answ = "ND";
long splitTime = 0;
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
// se id nullo --> KO!
if (id == null)
{
answ = "KO";
}
else
{
int idxFamIn = Convert.ToInt32(id);
answ = "";
try
// GET BENCH/RCLEAN/100
public string RCLEAN(int? id)
{
KeyValuePair<string, string>[] valori = DataLayerObj.mTabSMI(idxFamIn);
splitTime = stopWatch.ElapsedMilliseconds;
foreach (var item in valori)
{
answ += string.Format("{0}|{1}<br/>", item.Key, item.Value);
}
string answ = "ND";
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
// se id nullo --> KO!
if (id == null)
{
answ = "KO";
}
else
{
string chiave;
KeyValuePair<string, string>[] valori = new KeyValuePair<string, string>[2];
try
{
// svuoto i precedenti hash... CICLO!
for (int i = 0; i < id; i++)
{
chiave = string.Format("test:{0}", i);
memLayer.ML.redDelKey(chiave);
}
answ = "OK";
}
catch
{ }
}
stopWatch.Stop();
// Get the elapsed time as a TimeSpan value.
TimeSpan ts = stopWatch.Elapsed;
// accodo tempo!
answ += string.Format("<hr/>Elapsed: {0}ms", ts.TotalMilliseconds);
// ritorno
return answ;
}
catch
{ }
}
stopWatch.Stop();
// Get the elapsed time as a TimeSpan value.
TimeSpan ts = stopWatch.Elapsed;
// accodo tempo!
answ += string.Format("<hr/>ReadTime: {0}ms<br>Total Time Elapsed: {1}ms", splitTime, ts.TotalMilliseconds);
// ritorno
return answ;
}
// GET BENCH/fSMI/18?idxMS=1&valore=1
public string fSMI(int? id, int? idxMS, int? valore)
{
string answ = "ND";
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
// se id nullo --> KO!
if (id == null)
{
answ = "KO";
}
else
{
// recupero dati x sapere quale famiglia SMI è necessaria e quale stato / segnale si sia ricevuto
int idxFamIn = Convert.ToInt32(id);
int idxMicroStato = Convert.ToInt32(idxMS);
int valIOB = Convert.ToInt32(valore);
// recupero microstato macchina da chiave relativa
answ = "";
try
// GET BENCH/RSETUP/100
public string RSETUP(int? id)
{
// verifico se ci sia in memoria tab della fam macchina relativa (sennò carico)
string fiHASH = DataLayer.hSMI(idxFamIn);
string outVal = "";
bool trovato = memLayer.ML.redHashPresentSz(fiHASH);
if (!trovato)
{
// ricarico tabella!
KeyValuePair<string, string>[] valori = DataLayerObj.mTabSMI(idxFamIn);
answ = string.Format("Ricaricata SMI per famiglia {0}<br/>", fiHASH);
}
answ += string.Format("Trovata {0} Hash per {1}<br />", memLayer.ML.redCountKey(fiHASH), fiHASH);
// recupero singolo valore (stringa) x chiave
outVal = DataLayerObj.valoreSMI(idxFamIn, idxMicroStato, valIOB);
// mostro output
answ += string.Format("idxFamIN: {0} | idxMS: {1} | valIOB: {2} | out: {3} <br/>", idxFamIn, idxMicroStato, valIOB, outVal);
string answ = "ND";
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
// se id nullo --> KO!
if (id == null)
{
answ = "KO";
}
else
{
string chiave;
KeyValuePair<string, string>[] valori = new KeyValuePair<string, string>[2];
try
{
// salvo il datasetet come insieme di hash in redis...
for (int i = 0; i < id; i++)
{
chiave = string.Format("test:{0}", i);
valori[0] = new KeyValuePair<string, string>("numero", i.ToString());
valori[1] = new KeyValuePair<string, string>("doppio", (i * 2).ToString());
memLayer.ML.redSaveHash(chiave, valori);
}
answ = "OK";
}
catch
{ }
}
stopWatch.Stop();
// Get the elapsed time as a TimeSpan value.
TimeSpan ts = stopWatch.Elapsed;
// accodo tempo!
answ += string.Format("<hr/>Elapsed: {0}ms", ts.TotalMilliseconds);
// ritorno
return answ;
}
catch
{ }
}
stopWatch.Stop();
// Get the elapsed time as a TimeSpan value.
TimeSpan ts = stopWatch.Elapsed;
// accodo tempo!
answ += string.Format("<hr/>Total Time Elapsed: {0}ms", ts.TotalMilliseconds);
// ritorno
return answ;
}
// GET BENCH/INSEN/2004
public string INSEN(string id)
{
string answ = "ND";
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
// se id nullo --> KO!
if (id == null)
{
answ = "KO";
}
else
{
// recupero microstato macchina da chiave relativa
answ = "";
try
// GET BENCH/RSH/100
public string RSH(int? id)
{
answ += string.Format("Macchina {0}, insEnabled {1}<br />", id, DataLayerObj.insEnab(id));
string answ = "ND";
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
// se id nullo --> KO!
if (id == null)
{
answ = "KO";
}
else
{
answ = "";
string chiave;
KeyValuePair<string, string>[] valori = new KeyValuePair<string, string>[2];
try
{
// ora restituisco record completo dell'hash con ID indicato
chiave = string.Format("test:{0}", id);
valori = memLayer.ML.redGetHash(chiave);
foreach (var item in valori)
{
answ += string.Format("{0}|{1}<br/>", item.Key, item.Value);
}
}
catch
{ }
}
stopWatch.Stop();
// Get the elapsed time as a TimeSpan value.
TimeSpan ts = stopWatch.Elapsed;
// accodo tempo!
answ += string.Format("<hr/>Elapsed: {0}ms", ts.TotalMilliseconds);
// ritorno
return answ;
}
catch
{ }
}
stopWatch.Stop();
// Get the elapsed time as a TimeSpan value.
TimeSpan ts = stopWatch.Elapsed;
// accodo tempo!
answ += string.Format("<hr/>Total Time Elapsed: {0}ms", ts.TotalMilliseconds);
// ritorno
return answ;
// GET BENCH/tSMI/60
public string tSMI(int? id)
{
string answ = "ND";
long splitTime = 0;
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
// se id nullo --> KO!
if (id == null)
{
answ = "KO";
}
else
{
int idxFamIn = Convert.ToInt32(id);
answ = "";
try
{
KeyValuePair<string, string>[] valori = DataLayerObj.mTabSMI(idxFamIn);
splitTime = stopWatch.ElapsedMilliseconds;
foreach (var item in valori)
{
answ += string.Format("{0}|{1}<br/>", item.Key, item.Value);
}
}
catch
{ }
}
stopWatch.Stop();
// Get the elapsed time as a TimeSpan value.
TimeSpan ts = stopWatch.Elapsed;
// accodo tempo!
answ += string.Format("<hr/>ReadTime: {0}ms<br>Total Time Elapsed: {1}ms", splitTime, ts.TotalMilliseconds);
// ritorno
return answ;
}
#endregion Public Methods
#region Private Fields
/// <summary>
/// Oggetto datalayer specifico
/// </summary>
private DataLayer DataLayerObj = new DataLayer();
#endregion Private Fields
}
}
}
+2 -3
View File
@@ -1,11 +1,10 @@
using System;
using MP_IO.Interfaces;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MP_IO.Interfaces;
namespace MP_IO.Controllers
{
public class HomeController : Controller, IHomeService
+10 -61
View File
@@ -1,6 +1,7 @@
using MagData;
using MapoDb;
using MapoSDK;
using MP_IO.Interfaces;
using Newtonsoft.Json;
using StackExchange.Redis;
using SteamWare;
@@ -207,11 +208,6 @@ namespace MP_IO.Controllers
{
try
{
#if false
DataLayer DataLayerObj = new DataLayer();
// salvo risposta!
answ = DataLayerObj.insEnab(id) ? "OK" : "NO";
#endif
answ = DataLayerMan.insEnab(id) ? "OK" : "NO";
// 2025.03.04 aggiunto keepalive x evitare C101
MapoDb.MapoDb connDb = new MapoDb.MapoDb();
@@ -226,9 +222,6 @@ namespace MP_IO.Controllers
return answ;
}
protected static DataLayer DataLayerMan = new DataLayer();
/// <summary>
/// Processa una chiamata POST per l'invio di un array Json di oggetti input (EVENTI)
/// POST: IOB/evListJson/SIMUL_03
@@ -461,24 +454,6 @@ namespace MP_IO.Controllers
return answ;
}
#if false
/// <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");
}
#endif
/// <summary>
/// Invio record flog secco
/// GET: IOB/flog/SIMUL_03?flux=PROG&valore=P0001&dtEve=20161223180600000&dtCurr=20161223180600000&cnt=999&disabKA=false
@@ -522,37 +497,6 @@ namespace MP_IO.Controllers
return answ;
}
#if false
/// <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>
/// <returns></returns>
[HttpPost]
public string flogJson(string id)
{
int insDone = 0;
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, false, insDone, answ, content);
}
return answ;
}
#endif
/// <summary>
/// Processa una chiamata POST per l'invio di un array Json di oggetti fluxLog
/// PUT: IOB/flogJson/SIMUL_03
@@ -2652,6 +2596,12 @@ namespace MP_IO.Controllers
#endregion Public Methods
#region Protected Fields
protected static DataLayer DataLayerMan = new DataLayer();
#endregion Protected Fields
#region Private Methods
/// <summary>
@@ -2730,7 +2680,7 @@ namespace MP_IO.Controllers
answ = "NO";
}
// leggo parametri correnti...
DateTime adesso= DateTime.Now;
DateTime adesso = DateTime.Now;
try
{
List<objItem> currParams = DataLayerObj.getCurrObjItems(id);
@@ -2762,9 +2712,8 @@ namespace MP_IO.Controllers
else
{
// richiesto 10 sec prima...
trovato.lastRequest= adesso.AddSeconds(-10);
trovato.lastRequest = adesso.AddSeconds(-10);
}
}
// altrimenti AGGIUNGO (READ ONLY)...
else
@@ -2798,4 +2747,4 @@ namespace MP_IO.Controllers
#endregion Private Methods
}
}
}
-28
View File
@@ -1,28 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Headers;
using System.Web;
using System.Web.Http.Filters;
namespace MP_IO.Controllers.WebAPI
{
/// <summary>
/// Gestione cache x chaimate WebAPI
///
/// rif: https://www.c-sharpcorner.com/article/implementing-caching-in-web-api/
/// </summary>
public class CacheFilter : ActionFilterAttribute
{
public int TimeDuration { get; set; }
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
actionExecutedContext.Response.Headers.CacheControl = new CacheControlHeaderValue
{
MaxAge = TimeSpan.FromSeconds(TimeDuration),
MustRevalidate = true,
Public = true
};
}
}
}
-88
View File
@@ -1,88 +0,0 @@
using MapoDb;
using SteamWare;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
namespace MP_IO.Controllers.WebAPI
{
public class IOBController : ApiController
{
/// <summary>
/// GET api/IOB
/// è un check alive del server
/// </summary>
/// <returns></returns>
[CacheFilter(TimeDuration = 10)]
[HttpGet]
public string Get()
{
if (memLayer.ML.CRB("IOB_RedEnab"))
{
// conto la richiesta nel contatore REDIS
long nCall = memLayer.ML.setRCntI(DataLayer.mHash("COUNT:pCall:IOB_INDEX"));
//... se == nCall2Log scrivo su log e resetto
long nCall2Log = memLayer.ML.cdvi("nCall2Log");
if (nCall >= nCall2Log)
{
// loggo
logger.lg.scriviLog(string.Format("IOB_INDEX: effettuate {0} call", nCall), tipoLog.INFO);
// resetto!
memLayer.ML.resetRCnt(DataLayer.mHash("COUNT:pCall:IOB_INDEX"));
}
}
return "OK";
}
/// <summary>
/// GET api/IOB/SIMUL_03
/// Verifica stato enabled di un determinato IOB
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[CacheFilter(TimeDuration = 5)]
[HttpGet]
public string Get(string id)
{
string answ = "ND";
// se id nullo --> KO!
if (id == null)
{
answ = "KO";
}
else
{
try
{
DataLayer DataLayerObj = new DataLayer();
// salvo risposta!
answ = DataLayerObj.insEnab(id) ? "OK" : "NO";
}
catch (Exception exc)
{
logger.lg.scriviLog(string.Format("Errore in enabled{0}{1}", Environment.NewLine, exc));
answ = "NO";
}
}
return answ;
}
// POST api/<controller>
public void Post([FromBody]string value)
{
}
// PUT api/<controller>/5
public void Put(int id, [FromBody]string value)
{
}
// DELETE api/<controller>/5
public void Delete(int id)
{
}
}
}
+24 -20
View File
@@ -2,11 +2,33 @@ namespace MP_IO.Interfaces
{
public interface IBENCHService
{
#region Public Methods
/// <summary>
/// GET BENCH/CNTKEY/test
/// </summary>
string CNTKEY(string id);
/// <summary>
/// GET BENCH/DTMAC/SIMUL_01
/// </summary>
string DTMAC(string id);
/// <summary>
/// GET BENCH/fSMI/18?idxMS=1&valore=1
/// </summary>
string fSMI(int? id, int? idxMS, int? valore);
/// <summary>
/// GET: IOB (è un check alive)
/// </summary>
string Index();
/// <summary>
/// GET BENCH/INSEN/2004
/// </summary>
string INSEN(string id);
/// <summary>
/// GET BENCH/RCLEAN/100
/// </summary>
@@ -22,29 +44,11 @@ namespace MP_IO.Interfaces
/// </summary>
string RSH(int? id);
/// <summary>
/// GET BENCH/DTMAC/SIMUL_01
/// </summary>
string DTMAC(string id);
/// <summary>
/// GET BENCH/CNTKEY/test
/// </summary>
string CNTKEY(string id);
/// <summary>
/// GET BENCH/tSMI/60
/// </summary>
string tSMI(int? id);
/// <summary>
/// GET BENCH/fSMI/18?idxMS=1&valore=1
/// </summary>
string fSMI(int? id, int? idxMS, int? valore);
/// <summary>
/// GET BENCH/INSEN/2004
/// </summary>
string INSEN(string id);
#endregion Public Methods
}
}
}
+8 -2
View File
@@ -1,10 +1,16 @@
using System.Web.Mvc;
namespace MP_IO.Interfaces
{
public interface IHomeService
{
#region Public Methods
/// <summary>
/// GET: Home
/// </summary>
string Index();
RedirectResult Index();
#endregion Public Methods
}
}
}
+398 -4
View File
@@ -1,51 +1,445 @@
namespace MP_IO.Interfaces
{
/// <summary>
/// SALVA x macchina KVP parametro/valore:
/// GET: IOB/addOptPar/SIMUL_03?pName=PZREQ&pValue=1000
/// </summary>
public interface IIOBService
{
#region Public Methods
/// <param name="id"></param>
/// <param name="pName"></param>
/// <param name="pValue"></param>
string addOptPar(string id, string pName, string pValue);
/// <summary>
/// AGGIUNGE TASK richiesto x macchina:
/// GET: IOB/addTask2Exe/3010?taskName=startSetup&taskVal=T190406101512
/// GET: IOB/addTask2Exe/3010?taskName=stopSetup&taskVal=T190406101512
/// GET: IOB/addTask2Exe/SIMUL_03?taskName=setProg&taskVal=P00000001
/// GET: IOB/addTask2Exe/SIMUL_03?taskName=setComm&taskVal=ODL_0000123
/// GET: IOB/addTask2Exe/SIMUL_03?taskName=setArt&taskVal=ART_0000321
/// </summary>
/// <param name="id"></param>
/// <param name="taskName"></param>
/// <param name="taskVal"></param>
string addTask2Exe(string id, string taskName, string taskVal);
/// <summary>
/// Richiesta chiusura manuale ODL x macchina (popup utente):
/// GET: IOB/askCloseODL/SIMUL_03?idxOdl=123
/// </summary>
/// <param name="id">id macchina</param>
/// <param name="idxOdl">idx dell'ODL da chiudere</param>
/// <returns>bool esecuzione</returns>
bool askCloseODL(string id, int idxOdl);
/// <summary>
/// Chiude ODL x macchina:
/// GET: IOB/closeODL/SIMUL_03?idxOdl=123&dtEve=20230323151100000&dtCurr=20230323221100000
/// </summary>
/// <param name="id">id macchina</param>
/// <param name="idxOdl">idx dell'ODL da chiudere</param>
/// <param name="dtEve">DataOra evento</param>
/// <param name="dtCurr">DataOra corrente x fix</param>
/// <returns>bool esecuzione</returns>
bool closeODL(string id, int idxOdl, string dtEve = "", string dtCurr = "");
/// <summary>
/// Chiude PODL --> ODL x macchina:
/// GET: IOB/closePODL/SIMUL_03?idxPOdl=123&dtEve=20230323151100000&dtCurr=20230323221100000
/// </summary>
/// <param name="id">id macchina</param>
/// <param name="idxPOdl">idx del POdl da chiudere</param>
/// <param name="dtEve">DataOra evento</param>
/// <param name="dtCurr">DataOra corrente x fix</param>
/// <returns>bool esecuzione</returns>
bool closePODL(string id, int idxPOdl, string dtEve = "", string dtCurr = "");
/// <summary>
/// GET: IOB/enabled/SIMUL_03
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
string enabled(string id);
/// <summary>
/// Processa una chiamata POST per l'invio di un array Json di oggetti input (EVENTI)
/// POST: IOB/evListJson/SIMUL_03
/// </summary>
/// <param name="id">ID dell'IOB</param>
/// <returns></returns>
string evListJson(string id);
/// <summary>
/// Sistema Dossier/Snapshot giornalieri x impianto indicato, andando a generare 1 Dossier
/// giornaliero x ogni giornata dall'ultimo registrato alla data corrente
/// es: http://url_site/MP/IO/IOB/fixDailyDossier/SIMUL_03
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
string fixDailyDossier(string id);
/// <summary>
/// Sistema ODL giornalieri x impianto indicato, andando a generare 1 ODL giornaliero x ogni
/// giornata dall'ultimo ODL aperto alla data corrente
/// es: http://url_site/MP/IO/IOB/fixDailyOdl/SIMUL_03
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
string fixDailyOdl(string id);
/// <summary>
/// Sistema ODL giornalieri x impianto indicato, andando a generare 1 ODL giornaliero x ogni
/// giornata dall'ultimo ODL aperto alla data corrente + conferma pezzi (es TFT x ODL
/// giornalieri energia)
/// es: http://url_site/MP/IO/IOB/fixDailyOdlConfPzCount/SIMUL_03
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
string fixDailyOdlConfPzCount(string id);
/// <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>
string flog(string id, string flux, string valore, string dtEve, string dtCurr, string cnt, string disabKA = "false");
/// <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>
string flogJson(string id, string disabKA = "false");
/// <summary>
/// Creazione nuovo ODL dato CodXdl + numPz
/// GET: IOB/forceCreatePOdl/SIMUL_03?CodXdl=ABCD_1234&numPz=5
/// </summary>
/// <param name="id"></param>
/// <param name="CodArt"></param>
/// <param name="CodGruppo"></param>
/// <param name="numPz"></param>
/// <returns>IdxODL creato</returns>
int forceCreatePOdl(string id, string CodArt, string CodGruppo, int numPz);
/// <summary>
/// Chiude ODL precedente ed avvia uno nuovo (duplicandolo e sitemando quantità RIMANENTE),
/// e CONFERMA produzione...
/// GET: IOB/forceSplitOdl/SIMUL_03
/// </summary>
/// <param name="id"></param>
/// <returns>Esito chiamata (OK/vuoto)</returns>
string forceSplitOdl(string id);
/// <summary>
/// Chiude ODL precedente ed avvia uno nuovo (duplicandolo e sitemando quantità
/// RIMANENTE), e CONFERMA produzione...
/// GET: IOB/forceSplitOdl/SIMUL_03?doConfirm=true&qtyFromLast=true&roundStep=150&extOrderCode=ABCDE1234
/// </summary>
/// <param name="id">id impianto</param>
/// <param name="doConfirm"></param>
/// <param name="qtyFromLast"></param>
/// <param name="roundStep"></param>
/// <param name="keyRichiesta">Cod esterno da legare all'ODL x tracciare lotti prod</param>
/// <param name="matrOpr">matricola operatore che effettua la fuzione (default = 0)</param>
/// <returns>Esito chiamata (OK/vuoto)</returns>
string forceSplitOdlFull(string id, bool doConfirm, bool qtyFromLast, int? roundStep, string keyRichiesta = "", int matrOpr = 0);
/// <summary>
/// Avvia PODL indicato
/// - se esistesse un ODL da altro PODL --> chiude
/// - se fosse già in essere ODL collegato --> lascia aperto
/// - se fosse chiuso ODL collegato --> duplica PODL e poi avvia nuovo ODL.
/// GET: IOB/forceStartPOdl/SIMUL_03?idxPODL=123&dtEve=20230323151100000&dtCurr=20230323221100000
/// </summary>
/// <param name="id"></param>
/// <param name="idxPODL">idx del PDL da avviare</param>
/// <param name="dtEve">data-ora di avvio (opzionale)</param>
/// <param name="dtCurr">data-ora attuale (opzionale)</param>
/// <param name="matrOpr">matricola operatore (default 0)</param>
/// <returns>Esito chiamata (OK/vuoto)</returns>
string forceStartPOdl(string id, int idxPODL, string dtEve = "", string dtCurr = "", int matrOpr = 0);
/// <summary>
/// Recupera elenco articoli dei PODL correnti:
/// GET: IOB/getArtCurrPODL
/// </summary>
/// <returns>Json contenente lista oggetti ARTICOLI serializzati</returns>
string getArtCurrPODL();
/// <summary>
/// Recupera ArtNum dato CodXdl (per impianti che accettano solo INT in scrittura):
/// GET: IOB/getArtNum/SIMUL_03?CodXdl=ABC123
/// </summary>
/// <param name="id">IdxMacchina (NON considerato)</param>
/// <param name="CodArt">CodXdl richiesto, se vuoto restituisce TUTTI i valori in tabella di decodifica</param>
/// <returns>Json contenente le righe delle codifiche attive Articolo/Numero</returns>
string getArtNum(string id, string CodArt = "");
/// <summary>
/// Recupera elenco articoli USATI:
/// GET: IOB/getArtUsed
/// </summary>
/// <returns>Json contenente lista oggetti ARTICOLI serializzati</returns>
string getArtUsed();
/// <summary>
/// Recupera COUNTER x macchina:
/// GET: IOB/getCounter/5
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
string getCounter(string id);
/// <summary>
/// Recupera COUNTER x macchina dal CONTEGGIO dei TCRecorded:
/// GET: IOB/getCounterTCRec/5
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
string getCounterTCRec(string id);
/// <summary>
/// Recupera DATI correnti x macchina:
/// GET: IOB/getCurrData/SIMUL_03
/// </summary>
/// <param name="id"></param>
/// <returns>Json contenente la riga di stato macchina</returns>
string getCurrData(string id);
/// <summary>
/// Recupera ODL corrente x macchina:
/// GET: IOB/getCurrODL/SIMUL_03
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
string getCurrODL(string id);
/// <summary>
/// Restituisce la quantità pezzi dell'odl correntemente in lavorazione sulla macchina...
/// GET: IOB/getCurrOdlQtaReq/SIMUL_01
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
int getCurrOdlQtaReq(string id);
/// <summary>
/// Restituisce intera riga dell'odl correntemente in lavorazione sulla macchina...
/// GET: IOB/getCurrOdlRow/SIMUL_01
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
string getCurrOdlRow(string id);
/// <summary>
/// Restituisce data-ora inizio dell'odl correntemente in lavorazione sulla macchina...
/// es: http://url_site/MP/IO/IOB/getCurrOdlStart/SIMUL_03
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
string getCurrOdlStart(string id);
/// <summary>
/// Recupera DATI PODL correnti (=NON AVVIATI) x macchina:
/// GET: IOB/getCurrPODL/SIMUL_03
/// </summary>
/// <param name="id">id macchina, se "" mostra tutto</param>
/// <returns>Json contenente lista oggetti PODL serializzati</returns>
string getCurrPODL(string id);
/// <summary>
/// Restituisce intera riga dello stato di macchina...
/// GET: IOB/getCurrStatoRow/SIMUL_01
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
string getCurrStatoRow(string id);
/// <summary>
/// Restituisce un array JSon di files di una IOB
/// PUT: IOB/getFiles/SIMUL_03
/// </summary>
/// <param name="id">ID dell'IOB</param>
/// <returns>Oggetto Json in formato MapoSDK.fileEmbed</returns>
string getFiles(string id);
/// <summary>
/// Restituisce il valore dello stato di IDLE della macchina, quindi SOLO SE NON é in lavoro
/// e già convertito in minuti...
/// GET: IOB/getIdlePeriod/SIMUL_01
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
int getIdlePeriod(string id);
/// <summary>
/// Restituisce il (primo) codice IOB da dover gestire (se un IOBMAN chiede di gestirne uno
/// in +...)
/// </summary>
/// <param name="GWIP">IP del Gateway</param>
/// <returns></returns>
string getIob2call(string GWIP);
/// <summary>
/// Recupera elenco articoli USATI per ultimi:
/// - quelli dei PODL correnti
/// - quelli degli ultimi n (DOSS_LastArt in config) ODL lavorati
/// GET: IOB/getArtByMacc
/// </summary>
/// <returns>Json contenente lista oggetti ARTICOLI serializzati</returns>
string getLastArtByMacc(string id);
/// <summary>
/// Recupera DATI dell'ultimo dossier dato articolo:
/// GET: IOB/getLastDossArt/cod_articolo
/// </summary>
/// <param name="id">codice articolo, se vuoto --> non fa nulla</param>
/// <returns>Json contenente lista oggetti DOSSIER serializzati</returns>
string getLastDossArt(string id);
/// <summary>
/// Recupera DATI dell'ultimo dossier dato macchina:
/// GET: IOB/getLastDossByMacc/cod_articolo
/// </summary>
/// <param name="id">codice articolo, se vuoto --> non fa nulla</param>
/// <returns>Json contenente lista oggetti DOSSIER serializzati</returns>
string getLastDossByMacc(string id);
/// <summary>
/// Recupera DATI dell'ultimo dossier dato PODL correnti:
/// GET: IOB/getLastDossPODL
/// </summary>
/// <returns>Json contenente lista oggetti DOSSIER serializzati</returns>
string getLastDossPODL();
/// <summary>
/// Recupera elenco ListValues data tabella:
/// GET: IOB/getListValByTable
/// </summary>
/// <param name="id">nome tabella x cui filtrare risultati, se "" mostra tutto</param>
/// <returns>Json contenente lista oggetti ListValue serializzati</returns>
string getListValByTable(string id);
/// <summary>
/// Restituisce dati di associazione tra macchina, device IOB chiamante e sue info
/// </summary>
/// <param name="id">Id della macchina</param>
/// <returns></returns>
string getM2IOB(string id);
/// <summary>
/// restituisce elenco parametri correnti come una List Json di oggetti objItem
/// GET: IOB/getObjItems/SIMUL_03
/// </summary>
/// <param name="id">ID dell'IOB</param>
/// <returns></returns>
string getObjItems(string id);
/// <summary>
/// restituisce elenco parametri CHE RICHIEDONO scrittura su PLC come una List Json di
/// oggetti objItem
/// GET: IOB/getObjItems2Write/SIMUL_03
/// </summary>
/// <param name="id">ID dell'IOB</param>
/// <returns></returns>
string getObjItems2Write(string id);
/// <summary>
/// GET: IOB/getOptPar/SIMUL_03
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
string getOdlAtDate(string id, string dateRif);
string getOptPar(string id);
/// <summary>
/// Recupera PODL prossimo da avviare x macchina:
/// GET: IOB/getPOdlNext/SIMUL_03
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
string getPODL(string id, int idxPODL);
string getPOdlAct(string id);
string getPOdlNext(string id);
/// <summary>
/// GET: IOB/getTask2Exe/SIMUL_03
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
string getTask2Exe(string id);
bool insDisab(string id, bool stato);
string processInput(string id, int valore, string dtEve, string dtCurr, string cnt);
string setProg(string id, string prog, string art, string comm, string disabKA = "false");
string getXdlNum(string id, string CodXdl = "");
string Index();
string input(string id, string valore, string dtEve, string dtCurr, string cnt);
string liveJson(string id);
string liveRec(string id, string liveData);
string rawTransfJson(string id);
string remOptPar(string id, string pName);
string remTask2Exe(string id, string taskName);
string resetCurrODL(string id);
string saveConf(string id);
string saveConfYaml(string id);
string saveDataItems(string id);
string saveMachineIobConf(string id);
string savePzCountInc(string id, string qty);
string savePzCountIncAtDate(string id, string qty, string dtEve = "", string dtCurr = "");
string sendAlarmBankUpdate(string id, string memAddr, int index, int currStatus);
string sendReboot(string id, string mac);
string sendRebootGateway(string GWIP);
string setCounter(string id, string counter);
string setM2IOB(string id, string IOB_name);
string setObjItems(string id);
string setRedisHashDict(string id);
string slog(string id);
string takeFlogSnapshot(string id);
string ulog(string id, string flux, string valore, string dtEve, string dtCurr, string cnt, string matrOpr, string label, string valNum);
string ulogJson(string id);
string uploadFile(string id);
string upsertObjItems(string id);
#endregion Public Methods
}
}
}
+3 -2
View File
@@ -331,8 +331,6 @@
<Compile Include="Controllers\BENCH.cs" />
<Compile Include="Controllers\HomeController.cs" />
<Compile Include="Controllers\IOBController.cs" />
<Compile Include="Controllers\WebAPI\CacheFilter.cs" />
<Compile Include="Controllers\WebAPI\IOBController.cs" />
<Compile Include="enabled.aspx.cs">
<DependentUpon>enabled.aspx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
@@ -350,6 +348,9 @@
<Compile Include="inputIOB.aspx.designer.cs">
<DependentUpon>inputIOB.aspx</DependentUpon>
</Compile>
<Compile Include="Interfaces\IBENCHService.cs" />
<Compile Include="Interfaces\IHomeService.cs" />
<Compile Include="Interfaces\IIOBService.cs" />
<Compile Include="lastUpdate.aspx.cs">
<DependentUpon>lastUpdate.aspx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>