Merge branch 'release/FixClosePodlAtTime01'
This commit is contained in:
@@ -136,14 +136,14 @@ namespace MP_IO.Controllers
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 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
|
||||
/// </summary>
|
||||
/// <param name="id">id macchina</param>
|
||||
/// <param name="idxOdl">idx dell'ODL da chiudere</param>
|
||||
/// <returns>bool esecuzione</returns>
|
||||
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
|
||||
/// </summary>
|
||||
/// <param name="id">codice articolo, se vuoto --> non fa nulla</param>
|
||||
/// <param name="id">codice articolo, se vuoto --> non fa nulla</param>
|
||||
/// <returns>Json contenente lista oggetti DOSSIER serializzati</returns>
|
||||
public string getLastDossArt(string id)
|
||||
{
|
||||
@@ -1012,7 +1018,7 @@ namespace MP_IO.Controllers
|
||||
///
|
||||
/// GET: IOB/getLastDossArt/cod_articolo
|
||||
/// </summary>
|
||||
/// <param name="id">codice articolo, se vuoto --> non fa nulla</param>
|
||||
/// <param name="id">codice articolo, se vuoto --> non fa nulla</param>
|
||||
/// <returns>Json contenente lista oggetti DOSSIER serializzati</returns>
|
||||
public string getLastDossByMacc(string id)
|
||||
{
|
||||
|
||||
+61
-61
@@ -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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Effettua calcolo data-ora di riferimento per il server a poartire da
|
||||
/// </summary>
|
||||
/// <param name="dtEve"></param>
|
||||
/// <param name="dtCurr"></param>
|
||||
/// <returns></returns>
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// restituisce il TempoCiclo effettivo (tecnico) della macchina
|
||||
/// </summary>
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Effettua calcolo data-ora di riferimento per il server a poartire da
|
||||
/// </summary>
|
||||
/// <param name="dtEve"></param>
|
||||
/// <param name="dtCurr"></param>
|
||||
/// <returns></returns>
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recupero dati stato prod da macchina...
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user