198 lines
7.6 KiB
C#
198 lines
7.6 KiB
C#
using AppData;
|
|
using Newtonsoft.Json;
|
|
using NKC_SDK;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Web.Http;
|
|
|
|
namespace NKC_WF.Controllers
|
|
{
|
|
/// <summary>
|
|
/// Classe controller per gestione eventi stats
|
|
/// Riceve una lista di 1..n eventi con
|
|
/// * CodMacchina
|
|
/// * DataOra
|
|
/// * Codice (Evento/stato) - codice 00 = KeepAlive, imposto dataora/drift
|
|
/// * Valore/Descrizione
|
|
///
|
|
/// e la salva su DB per successiva elaborazione
|
|
/// </summary>
|
|
public class MachineStatController : ApiController
|
|
{
|
|
#region Protected Fields
|
|
|
|
/// <summary>
|
|
/// oggetto static/singleton per fare chiamate sul datalayer
|
|
/// </summary>
|
|
protected DataLayer DLMan = new DataLayer();
|
|
|
|
/// <summary>
|
|
/// Codice macchina (HARD CODED)
|
|
/// </summary>
|
|
protected string machine = "WRK000";
|
|
|
|
#endregion Protected Fields
|
|
|
|
#region Public Methods
|
|
|
|
/// <summary>
|
|
/// Restituisce un array di stati macchina correnti
|
|
/// GET: api/MachineStat
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[HttpGet]
|
|
public List<MachineStatData> Get()
|
|
{
|
|
List<MachineStatData> answ = new List<MachineStatData>();
|
|
try
|
|
{
|
|
answ = ComLib.prodMachStateDataGet();
|
|
}
|
|
catch
|
|
{ }
|
|
|
|
// se vuoto metto 1 finto...
|
|
if (answ.Count == 0)
|
|
{
|
|
var demoItem = new MachineStatData();
|
|
demoItem.Records.Add(new MachineStatRecord());
|
|
answ.Add(demoItem);
|
|
}
|
|
|
|
return answ;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Fornisce il record dello stato macchina corrente
|
|
/// GET: api/MachineStat/WRK001
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <returns></returns>
|
|
[HttpGet]
|
|
public MachineStatData Get(string id)
|
|
{
|
|
MachineStatData answ = new MachineStatData();
|
|
try
|
|
{
|
|
var listState = ComLib.prodMachStateDataGet();
|
|
if (listState != null && listState.Count > 0)
|
|
{
|
|
answ = listState.Where(x => x.Machine == id).FirstOrDefault();
|
|
}
|
|
}
|
|
catch
|
|
{ }
|
|
|
|
return answ;
|
|
}
|
|
|
|
/************************************
|
|
* METODI PUT
|
|
*
|
|
* per abilitare è necessario agire sulla conf di IIS:
|
|
*
|
|
* - modificare il file applicationHost.config che si trova in C:\Windows\System32\inetsrv\config
|
|
* - disinstallare webDav oppure commentare le righe
|
|
* <!-- <add name="WebDAVModule" /> -->
|
|
* <!-- <add name="WebDAVModule" image="%windir%\System32\inetsrv\webdav.dll" /> -->
|
|
* <!-- <add name="WebDAV" path="*" verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" /> -->
|
|
* - aggiungere PUT/DELETE a handler:
|
|
* <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
|
|
* <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0" />
|
|
*
|
|
**************************************/
|
|
|
|
#if false
|
|
/// <summary>
|
|
/// Processa una chiamata POST per l'invio in blocco
|
|
/// POST: api/Bunk
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[HttpPost]
|
|
public string Post()
|
|
{
|
|
int BunkId = 0;
|
|
int BatchId = 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(System.Web.HttpContext.Current.Request.InputStream, System.Text.Encoding.UTF8, true, 4096, true))
|
|
{
|
|
content = reader.ReadToEnd();
|
|
}
|
|
//Rest
|
|
System.Web.HttpContext.Current.Request.InputStream.Position = 0;
|
|
// procedo a deserializzare in blocco l'oggetto...
|
|
try
|
|
{
|
|
// deserializzo.
|
|
SheetWorkList sheetUpdated = JsonConvert.DeserializeObject<SheetWorkList>(content);
|
|
if (sheetUpdated != null)
|
|
{
|
|
// 2020.01.16 salvo su mongoDb la risposta...
|
|
ComLib.man.saveProdAnsw(sheetUpdated);
|
|
|
|
if (sheetUpdated.SheetList != null)
|
|
{
|
|
foreach (var currSheet in sheetUpdated.SheetList)
|
|
{
|
|
// se non nullo...
|
|
if (currSheet != null)
|
|
{
|
|
DLMan.taSHL.updateDate(currSheet.SheetId, currSheet.Printing.DtStart, currSheet.Printing.DtEnd, currSheet.Machining.DtStart, currSheet.Machining.DtEnd, currSheet.Unloading.DtStart, currSheet.Unloading.DtEnd, (int)currSheet.Status);
|
|
// SE machining completato --> status a LAVORATO x item!
|
|
if (currSheet.Machining.DtEnd != null)
|
|
{
|
|
// hard coded su multiax
|
|
DLMan.taIL.updateSheetStatus(currSheet.SheetId, 1, "WRK001");
|
|
}
|
|
// segnalo avanzamento su redis x pagina unload
|
|
ComLib.advaceSheetRevByBunk(currSheet.BunkId);
|
|
BunkId = currSheet.BunkId;
|
|
answ = "OK";
|
|
}
|
|
}
|
|
}
|
|
var tabBunks = DLMan.taSTL.getByKey(BunkId);
|
|
if (tabBunks.Count > 0)
|
|
{
|
|
BatchId = tabBunks[0].BatchID;
|
|
}
|
|
// ricalcolo stato BUNK
|
|
ComLib.updateBatchPosition(BatchId);
|
|
// INVALIDO eventuale valore BUNK in REDIS...
|
|
ComLib.resetRedisBunkData(machine);
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
answ = "NO";
|
|
}
|
|
return answ;
|
|
}
|
|
#endif
|
|
|
|
/// <summary>
|
|
/// Effettua la chiamata di update x un set di dati delle macchine
|
|
/// </summary>
|
|
/// <param name="MSDUpdated">Oggetto con macchina + Elenco record da aggiornare</param>
|
|
// PUT: api/Sheet/5
|
|
[HttpPut]
|
|
public void Put(MachineStatData updatedInfo)
|
|
{
|
|
// NB. decodifico direttamente come oggetto, vedere qui:
|
|
// https://weblog.west-wind.com/posts/2013/dec/13/accepting-raw-request-body-content-with-aspnet-web-api
|
|
// https://weblog.west-wind.com/posts/2017/sep/14/accepting-raw-request-body-content-in-aspnet-core-api-controllers
|
|
|
|
if (updatedInfo != null)
|
|
{
|
|
// mi limito a chiamnare procedura di update...
|
|
ComLib.prodMachStateDataInsert(updatedInfo);
|
|
}
|
|
}
|
|
|
|
#endregion Public Methods
|
|
}
|
|
} |