240 lines
10 KiB
C#
240 lines
10 KiB
C#
using global::Microsoft.AspNetCore.Components;
|
|
using MP.Data.DatabaseModels;
|
|
using MP.Data.Services;
|
|
|
|
namespace MP_TAB_SERV.Pages
|
|
{
|
|
public partial class ProdStop
|
|
{
|
|
#region Public Properties
|
|
|
|
/// <summary>
|
|
/// Determina se insert sia Realtime o batch con DataOra (in base a diff tra DataOra
|
|
/// selezionata e realtime, se superiore ad X minuti NON � realtime)
|
|
/// </summary>
|
|
public bool insRealtime
|
|
{
|
|
get
|
|
{
|
|
bool answ = true;
|
|
#if false
|
|
try
|
|
{
|
|
if (Math.Abs(dataOraEv.Subtract(DateTime.Now).TotalMinutes) > memLayer.ML.CRI("dltMinRealtime"))
|
|
{
|
|
answ = false;
|
|
}
|
|
}
|
|
catch
|
|
{ }
|
|
#endif
|
|
return answ;
|
|
}
|
|
}
|
|
|
|
#endregion Public Properties
|
|
|
|
#region Protected Properties
|
|
|
|
protected string alertCss { get; set; } = "alert-danger";
|
|
|
|
protected MappaStatoExpl? CurrMSE { get; set; } = null;
|
|
|
|
protected List<vSelEventiBCodeModel> events2show { get; set; } = new List<vSelEventiBCodeModel>();
|
|
|
|
protected string IdxMacc { get; set; } = "";
|
|
|
|
protected string lblOut { get; set; } = "";
|
|
|
|
[Inject]
|
|
protected StatusData MDataService { get; set; } = null!;
|
|
|
|
[Inject]
|
|
protected MessageService MServ { get; set; } = null!;
|
|
|
|
[Inject]
|
|
protected MessageService MsgServ { get; set; } = null!;
|
|
|
|
[Inject]
|
|
protected SharedMemService MStor { get; set; } = null!;
|
|
|
|
[Inject]
|
|
protected TabDataService TabServ { get; set; } = null!;
|
|
|
|
[Inject]
|
|
protected TabDataService TabSrv { get; set; } = null!;
|
|
|
|
#endregion Protected Properties
|
|
|
|
#region Protected Methods
|
|
|
|
/// <summary>
|
|
/// Processo registrazione eventi
|
|
/// </summary>
|
|
/// <param name="IdxEv"></param>
|
|
/// <returns></returns>
|
|
protected async Task EventRecord(int IdxEv)
|
|
{
|
|
await Task.Delay(1);
|
|
// salvo evento e processo...
|
|
|
|
if (IdxEv > 0)
|
|
{
|
|
var rigaEvento = MStor.GetEventRow(IdxEv);
|
|
if (rigaEvento != null)
|
|
{
|
|
var rigaStato = await TabServ.StatoMacchina(IdxMacc);
|
|
// processo evento...
|
|
if (insRealtime)
|
|
{
|
|
EventListModel newRec = new EventListModel()
|
|
{
|
|
IdxMacchina = IdxMacc,
|
|
InizioStato = DateTime.Now,
|
|
IdxTipo = IdxEv,
|
|
CodArticolo = rigaStato.CodArticolo,
|
|
Value = "DRT",
|
|
MatrOpr = MatrOpr,
|
|
pallet = rigaStato.pallet
|
|
};
|
|
// se realtime
|
|
await TabServ.EvListInsert(newRec, MP.Data.Objects.Enums.tipoInputEvento.barcode);
|
|
// resetta il microstato in modo da ricevere successive info HW
|
|
TabServ.resetMicrostatoMacchina(IdxMacc);
|
|
}
|
|
else
|
|
{
|
|
#if false
|
|
// in primis disabilito insert...
|
|
DataLayerObj.taStatoMacchine.setInsEnabled(idxMacchina, false);
|
|
// calcolo evento
|
|
string evento = IdxEv.ToString();
|
|
string commento = "";
|
|
try
|
|
{
|
|
evento = DataLayerObj.taAnagEventi.GetByIdx(IdxEv)[0].Nome.Replace("Barcode - ", "");
|
|
}
|
|
catch
|
|
{ }
|
|
// genero stringa pseudo-univoca
|
|
string codRich = string.Format("{0:yyMMddHHmmss}-{1}", DateTime.Now, IdxEv);
|
|
// x prima cosa scrivo un evento tipo "1" x chiudere la durata appena prima
|
|
// dell'evento successivo
|
|
try
|
|
{
|
|
// cerco da 1 sec DOPO evento...
|
|
DS_applicazione.DiarioDiBordoDataTable tabNext = controllerMapo.nextEventoImpiantoFrom(idxMacchina, dataOraEv.AddSeconds(1));
|
|
|
|
DateTime nextEvDT = DateTime.Now;
|
|
if (tabNext.Rows.Count > 0)
|
|
{
|
|
nextEvDT = tabNext[0].InizioStato;
|
|
}
|
|
// se non trovo chiusura evento inserisco a 1 minuto prima di adesso la chiusura...
|
|
else
|
|
{
|
|
nextEvDT = DateTime.Now.AddMinutes(-1);
|
|
}
|
|
// fix salvo la dichiarazione di chiusura
|
|
commento = string.Format("999 - M.Lav EndEvt: {0} [{1}]", evento, codRich);
|
|
DataLayerObj.scriviRigaEventoBarcode(idxMacchina, 1, rigaStato.CodArticolo, commento, DataLayerObj.MatrOpr, rigaStato.pallet, nextEvDT.AddSeconds(-1), DateTime.Now); // 1 hard-coded x resettare
|
|
}
|
|
catch
|
|
{ }
|
|
// update commento!
|
|
commento = string.Format("999 - Dich StartEvt: {0} [{1}]", evento, codRich);
|
|
// recupero data/ora evento da inserire (quella selezionata) ed AGGIUNGO 1
|
|
// sec!!! cos� rimane traccia
|
|
DataLayerObj.scriviRigaEventoBarcode(idxMacchina, IdxEv, rigaStato.CodArticolo, commento, DataLayerObj.MatrOpr, rigaStato.pallet, dataOraEv.AddSeconds(1), DateTime.Now);
|
|
// eseguo ricalcolo!
|
|
DateTime startRicalcolo = dataOraEv.AddMinutes(memLayer.ML.CRI("minAnticipoRicalcolo"));
|
|
|
|
// leggo parametri x esecuzione...
|
|
int rdm_nEvStep = memLayer.ML.CRI("rdm_nEvStep");
|
|
int rdm_nEvCheck = memLayer.ML.CRI("rdm_nEvCheck");
|
|
bool rdm_ChkOnly = memLayer.ML.CRB("rdm_ChkOnly");
|
|
DataLayerObj.taComm.stp_ricalcolaDatiMacchinaFromDate(idxMacchina, startRicalcolo, 1, rdm_nEvStep, rdm_nEvCheck, rdm_ChkOnly); // nella stored imposto macchina OFFline e poi ONline, parto da "minAnticipoRicalcolo" minuti prima...
|
|
// aggiorno
|
|
// data
|
|
// evento
|
|
// x
|
|
// insert
|
|
// eventuale
|
|
// commento
|
|
// (5 sec...)
|
|
dataOraEv = dataOraEv.AddSeconds(5);
|
|
// riabilito insert... anche se non dovrebbe servire x stored ricalcolo precedente...
|
|
DataLayerObj.taStatoMacchine.setInsEnabled(idxMacchina, true);
|
|
#endif
|
|
}
|
|
// mostro esito
|
|
alertCss = "alert-succes";
|
|
lblOut = $"Registrata dichiarazione fermata alle {DateTime.Now:HH:mm:ss}";
|
|
}
|
|
else
|
|
{
|
|
alertCss = "alert-danger";
|
|
lblOut = $"Codice evento non valido! {IdxEv}";
|
|
}
|
|
}
|
|
// faccio refresh x singola macchina 2019.03.26
|
|
TabServ.RicalcMse(IdxMacc, 0);
|
|
// rileggo e salvo..
|
|
var ListMSE = await MDataService.MseGetAll();
|
|
if (ListMSE != null)
|
|
{
|
|
// salvo in LocalStorage...
|
|
await MServ.SaveMse(ListMSE);
|
|
// aggiorno MSE attuale
|
|
CurrMSE = ListMSE.Find(x => x.IdxMacchina == IdxMacc);
|
|
}
|
|
}
|
|
|
|
protected override async Task OnInitializedAsync()
|
|
{
|
|
await ReloadData();
|
|
}
|
|
|
|
#endregion Protected Methods
|
|
|
|
#region Private Properties
|
|
|
|
private int MatrOpr
|
|
{
|
|
get => MServ.MatrOpr;
|
|
}
|
|
|
|
#endregion Private Properties
|
|
[Inject]
|
|
protected NavigationManager NavMan { get; set; } = null!;
|
|
|
|
#region Private Methods
|
|
|
|
private async Task ReloadData()
|
|
{
|
|
if (string.IsNullOrEmpty(IdxMacc))
|
|
{
|
|
try
|
|
{
|
|
IdxMacc = await MsgServ.IdxMaccGet();
|
|
// recupero MSE macchina....
|
|
if (!string.IsNullOrEmpty(IdxMacc))
|
|
{
|
|
CurrMSE = await MsgServ.GetMachineMse(IdxMacc);
|
|
}
|
|
var eventsAll = await TabSrv.AnagEventiGetByMacch(IdxMacc);
|
|
if (eventsAll != null)
|
|
{
|
|
events2show = eventsAll.Where(x => x.EventoTablet).OrderBy(x => x.Label).ToList();
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
NavMan.NavigateTo("/", true);
|
|
}
|
|
}
|
|
}
|
|
|
|
#endregion Private Methods
|
|
}
|
|
} |