diff --git a/MP-IO/Controllers/IOBController.cs b/MP-IO/Controllers/IOBController.cs
index 2f31858d..3fdf343b 100644
--- a/MP-IO/Controllers/IOBController.cs
+++ b/MP-IO/Controllers/IOBController.cs
@@ -136,14 +136,14 @@ namespace MP_IO.Controllers
}
///
- /// Chiude PODL --> ODL x macchina:
+ /// Chiude PODL --> ODL x macchina:
///
- /// GET: IOB/closePODL/SIMUL_03?idxPOdl=123
+ /// GET: IOB/closePODL/SIMUL_03?idxPOdl=123&dtEve=20230323151100000&dtCurr=20230323221100000
///
/// id macchina
/// idx dell'ODL da chiudere
/// bool esecuzione
- public bool closePODL(string id, int idxPOdl)
+ public bool closePODL(string id, int idxPOdl, string dtEve = "", string dtCurr = "")
{
bool answ = false;
// init obj DataLayer
@@ -158,6 +158,12 @@ namespace MP_IO.Controllers
int idxOdl = tabPodl[0].IdxODL;
// chiamata diretta sul DB...
DateTime dtEvento = DateTime.Now;
+ //se ho una data-ora chiusura la calcolo...
+ bool rtimeProc = string.IsNullOrEmpty(dtEve);
+ if (!rtimeProc)
+ {
+ dtEvento = DataLayerObj.GetSrvDtEvent(dtEve, dtCurr);
+ }
DataLayerObj.taODL.forceClose(idxOdl, id, dtEvento);
}
}
@@ -977,7 +983,7 @@ namespace MP_IO.Controllers
///
/// GET: IOB/getLastDossArt/cod_articolo
///
- /// codice articolo, se vuoto --> non fa nulla
+ /// codice articolo, se vuoto --> non fa nulla
/// Json contenente lista oggetti DOSSIER serializzati
public string getLastDossArt(string id)
{
@@ -1012,7 +1018,7 @@ namespace MP_IO.Controllers
///
/// GET: IOB/getLastDossArt/cod_articolo
///
- /// codice articolo, se vuoto --> non fa nulla
+ /// codice articolo, se vuoto --> non fa nulla
/// Json contenente lista oggetti DOSSIER serializzati
public string getLastDossByMacc(string id)
{
diff --git a/MapoDb/DataLayer.cs b/MapoDb/DataLayer.cs
index 8c56ab43..f8a597fe 100644
--- a/MapoDb/DataLayer.cs
+++ b/MapoDb/DataLayer.cs
@@ -1683,7 +1683,7 @@ namespace MapoDb
bool rtimeProc = string.IsNullOrEmpty(dtEve);
if (!rtimeProc)
{
- dtEvent = getSrvDtEvent(dtEve, dtCurr);
+ dtEvent = GetSrvDtEvent(dtEve, dtCurr);
}
// verifico NON CI SIA un veto altre chiamate (es split...) - 30 sec di default...
@@ -1798,14 +1798,14 @@ namespace MapoDb
break;
case 2:
- // eventuale chiusura vecchio ODL, 5 sec prima...
+ // eventuale chiusura vecchio ODL, 2 sec prima...
if (currODLData.Count > 0)
{
doCloseCurrODL(idxMacchina, doConfirm, qtyConf, currODLData, dtEvent.AddSeconds(-2));
}
// avvio PODL: creo nuovo ODL da promessa ed associo
taODL.inizioSetupPromessa(idxPODL, MatrOpr, POdlRow.IdxMacchina, POdlRow.TCAssegnato, POdlRow.PzPallet, POdlRow.Note, dtEvent);
- // reseetto info PODL
+ // resetto info PODL
resetPODLData(idxPODL);
// fix (invio ) dati ODL alla macchina tramite IOB
Thread.Sleep(200);
@@ -1821,14 +1821,14 @@ namespace MapoDb
}
// duplico PODL... inserisco nuovo record...
taPODL.insertQuery(POdlRow.KeyRichiesta, POdlRow.KeyBCode, true, POdlRow.CodArticolo, POdlRow.CodGruppo, POdlRow.IdxMacchina, POdlRow.NumPezzi, POdlRow.TCAssegnato, POdlRow.DueDate, POdlRow.Priorita, POdlRow.PzPallet, POdlRow.Note);
- // recupero odl attivabili...
+ // recupero PODL attivabili...
var podlList = taPODL.getByCodArt(POdlRow.CodArticolo, true);
// cerco quello che ha la stessa fase/macchina e + recente...
var lastPodl = podlList.Where(x => x.KeyRichiesta == POdlRow.KeyRichiesta && x.IdxMacchina == POdlRow.IdxMacchina).OrderByDescending(x => x.idxPromessa).FirstOrDefault();
int newPODL = lastPodl != null ? lastPodl.idxPromessa : POdlRow.idxPromessa;
// avvio (nuovo) PODL
taODL.inizioSetupPromessa(idxPODL, MatrOpr, POdlRow.IdxMacchina, POdlRow.TCAssegnato, POdlRow.PzPallet, POdlRow.Note, dtEvent);
- // reseetto info PODL
+ // resetto info PODL
resetPODLData(idxPODL);
// fix (invio ) dati ODL alla macchina tramite IOB
Thread.Sleep(200);
@@ -1837,7 +1837,7 @@ namespace MapoDb
break;
case 4:
- // eventuale chiusura vecchio ODL, 5 sec prima...
+ // eventuale chiusura vecchio ODL, 2 sec prima...
if (currODLData.Count > 0)
{
doCloseCurrODL(idxMacchina, doConfirm, qtyConf, currODLData, dtEvent.AddSeconds(-2));
@@ -2074,6 +2074,60 @@ namespace MapoDb
return answTab;
}
+ ///
+ /// Effettua calcolo data-ora di riferimento per il server a poartire da
+ ///
+ ///
+ ///
+ ///
+ public DateTime GetSrvDtEvent(string dtEve, string dtCurr)
+ {
+ DateTime dataOraEvento = DateTime.Now;
+ // 2017.09.14 trimmo eventualmente lo zero finale dalle date SE supera i millisecondi...
+ dtEve = dtEve.Length > 17 ? dtEve.Substring(0, 17) : dtEve;
+ dtCurr = dtCurr.Length > 17 ? dtCurr.Substring(0, 17) : dtCurr;
+ DateTime dtEvento, dtCorrente;
+ // controllo: se ho valori dt x evento e orario DIVERSI per acquisitore IOB calcolo
+ // dataOraEvento corretto
+ if (dtEve != dtCurr)
+ {
+ Int64 delta = 0;
+ try
+ {
+ // se ho meno decimali x evento rispetto dtCorrente...
+ if (dtEve.Length < dtCurr.Length)
+ {
+ dtEve = dtEve.PadRight(dtCurr.Length, '0');
+ }
+ delta = Convert.ToInt64(dtCurr) - Convert.ToInt64(dtEve);
+ // se meno di 60'000 ms ...
+ if (delta < 59999)
+ {
+ dataOraEvento = dataOraEvento.AddMilliseconds(-delta);
+ }
+ else
+ {
+ // in questo caso elimino i MS dalle stringhe e converto i datetime....
+ CultureInfo provider = CultureInfo.InvariantCulture;
+ string format = "yyyyMMddHHmmssfff";
+ dtEvento = DateTime.ParseExact(dtEve, format, provider);
+ dtCorrente = DateTime.ParseExact(dtCurr, format, provider);
+ Int64 tiks = dtCorrente.Ticks - dtEvento.Ticks;
+ dataOraEvento = dataOraEvento.AddTicks(-tiks);
+ }
+ }
+ catch (Exception exc)
+ {
+ logger.lg.scriviLog($"getSrvDtEvent | Errore calcolo ms evento/ora corrente da device remoto:{Environment.NewLine}" +
+ $"dtEve : {dtEve}{Environment.NewLine}" +
+ $"dtCurr: {dtCurr}{Environment.NewLine}" +
+ $"{exc}", tipoLog.EXCEPTION);
+ }
+ }
+
+ return dataOraEvento;
+ }
+
///
/// restituisce il TempoCiclo effettivo (tecnico) della macchina
///
@@ -2410,7 +2464,7 @@ namespace MapoDb
saveCallRec("processFluxLog");
}
string answ = "";
- DateTime dataOraEvento = getSrvDtEvent(dtEve, dtCurr);
+ DateTime dataOraEvento = GetSrvDtEvent(dtEve, dtCurr);
// inizio processing vero e proprio INPUT...
if (idxMacchina != null && valore != null)
{
@@ -4443,60 +4497,6 @@ namespace MapoDb
SetAllCommandTimeouts(taComm, sqlLongCommandTimeout);
}
- ///
- /// Effettua calcolo data-ora di riferimento per il server a poartire da
- ///
- ///
- ///
- ///
- private DateTime getSrvDtEvent(string dtEve, string dtCurr)
- {
- DateTime dataOraEvento = DateTime.Now;
- // 2017.09.14 trimmo eventualmente lo zero finale dalle date SE supera i millisecondi...
- dtEve = dtEve.Length > 17 ? dtEve.Substring(0, 17) : dtEve;
- dtCurr = dtCurr.Length > 17 ? dtCurr.Substring(0, 17) : dtCurr;
- DateTime dtEvento, dtCorrente;
- // controllo: se ho valori dt x evento e orario DIVERSI per acquisitore IOB calcolo
- // dataOraEvento corretto
- if (dtEve != dtCurr)
- {
- Int64 delta = 0;
- try
- {
- // se ho meno decimali x evento rispetto dtCorrente...
- if (dtEve.Length < dtCurr.Length)
- {
- dtEve = dtEve.PadRight(dtCurr.Length, '0');
- }
- delta = Convert.ToInt64(dtCurr) - Convert.ToInt64(dtEve);
- // se meno di 60'000 ms ...
- if (delta < 59999)
- {
- dataOraEvento = dataOraEvento.AddMilliseconds(-delta);
- }
- else
- {
- // in questo caso elimino i MS dalle stringhe e converto i datetime....
- CultureInfo provider = CultureInfo.InvariantCulture;
- string format = "yyyyMMddHHmmssfff";
- dtEvento = DateTime.ParseExact(dtEve, format, provider);
- dtCorrente = DateTime.ParseExact(dtCurr, format, provider);
- Int64 tiks = dtCorrente.Ticks - dtEvento.Ticks;
- dataOraEvento = dataOraEvento.AddTicks(-tiks);
- }
- }
- catch (Exception exc)
- {
- logger.lg.scriviLog($"getSrvDtEvent | Errore calcolo ms evento/ora corrente da device remoto:{Environment.NewLine}" +
- $"dtEve : {dtEve}{Environment.NewLine}" +
- $"dtCurr: {dtCurr}{Environment.NewLine}" +
- $"{exc}", tipoLog.EXCEPTION);
- }
- }
-
- return dataOraEvento;
- }
-
///
/// Recupero dati stato prod da macchina...
///