Verifica risposte nesting (scarto se incoerente)

This commit is contained in:
Samuele Locatelli
2021-07-21 09:49:26 +02:00
parent dafad94464
commit 3cfc4f8275
+293 -281
View File
@@ -135,6 +135,8 @@ namespace NKC_WF.Controllers
* - è BatchReq / OfflineOrder
* - è stima iniziale o NEST dettagliato
* - si tratta di una stima di validazione ITEM ...
*
* 2021.07.21: aggiunto controllo coerenza risposta: accetto solo se sono in stato di richiesta (se ho annullato in precedenza scarto la risposta)
*
*************************************************/
if (batchProcAnsw.OrderType == oType.BatchRequest)
@@ -146,139 +148,151 @@ namespace NKC_WF.Controllers
// deserializzo come BatchreqIniziale (stima)
nestReplyBatchInitial rispStima = JsonConvert.DeserializeObject<nestReplyBatchInitial>(content);
// 2020.01.16 salvo su mongoDb la risposta...
ComLib.man.saveEstAnsw(rispStima);
// recupero info sul batch / KIT specifico x capire se sia di tipo "validation"
bool isValidation = false;
bool isTesting = false;
var tabOrd = DLMan.taOL.getByBatch(rispStima.BatchID);
if (tabOrd.Count > 0)
// verifica preliminare che il batch possa accettare la risposta
var currBatchStatus = ComLib.BStatus(rispStima.BatchID);
if (currBatchStatus != BatchStatus.EstimationRequested)
{
isValidation = tabOrd[0].OrdType == "V";
isTesting = tabOrd[0].OrdType == "T";
string message = $"Impossibile processing risposta da EgtNest | ProcType: {batchProcAnsw.ProcType} | BatchID: {rispStima.BatchID} | stato: {currBatchStatus}";
logger.lg.scriviLog(message, tipoLog.ERROR);
// registro KO
answ = "KO";
}
// calcolo status del batch...
switch (rispStima.ProcessStatus)
else
{
case procStatus.waiting:
case procStatus.running:
bStatus = 1;
break;
// 2020.01.16 salvo su mongoDb la risposta...
ComLib.man.saveEstAnsw(rispStima);
case procStatus.completed:
if (isValidation || isTesting)
{
bool pdfOk = true;
// se richiesto CheckPDF
if (memLayer.ML.CRB("checkPdfPathTV"))
// recupero info sul batch / KIT specifico x capire se sia di tipo "validation"
bool isValidation = false;
bool isTesting = false;
var tabOrd = DLMan.taOL.getByBatch(rispStima.BatchID);
if (tabOrd.Count > 0)
{
isValidation = tabOrd[0].OrdType == "V";
isTesting = tabOrd[0].OrdType == "T";
}
// calcolo status del batch...
switch (rispStima.ProcessStatus)
{
case procStatus.waiting:
case procStatus.running:
bStatus = 1;
break;
case procStatus.completed:
if (isValidation || isTesting)
{
// verifico PDF, se NON OK --> errore
string pdfPath = "";
foreach (var item in rispStima.PartList)
bool pdfOk = true;
// se richiesto CheckPDF
if (memLayer.ML.CRB("checkPdfPathTV"))
{
pdfOk = pdfOk && ComLib.checkPdfExistAccessible(item, out pdfPath);
if (!pdfOk)
// verifico PDF, se NON OK --> errore
string pdfPath = "";
foreach (var item in rispStima.PartList)
{
// codice è B.xxx dove xxx = BatchID
DLMan.taEL.insertQuery(DateTime.Now, "Check PDF path", $"B.{rispStima.BatchID}", $"{rispStima.BatchID}.{item.PartExtCode}", $"Error: PDF file not found: {pdfPath}");
pdfOk = pdfOk && ComLib.checkPdfExistAccessible(item, out pdfPath);
if (!pdfOk)
{
// codice è B.xxx dove xxx = BatchID
DLMan.taEL.insertQuery(DateTime.Now, "Check PDF path", $"B.{rispStima.BatchID}", $"{rispStima.BatchID}.{item.PartExtCode}", $"Error: PDF file not found: {pdfPath}");
}
}
}
}
// se non OK --> registro errore...
if (!pdfOk)
{
bStatus = 9;
}
// verifico se il tempo di procesisng stimato sia > minimo...
else if (rispStima.EstimatedWorktime > memLayer.ML.CRI("minValidEstSec"))
{
bStatus = 10;
// se non OK --> registro errore...
if (!pdfOk)
{
bStatus = 9;
}
// verifico se il tempo di procesisng stimato sia > minimo...
else if (rispStima.EstimatedWorktime > memLayer.ML.CRI("minValidEstSec"))
{
bStatus = 10;
}
else
{
bStatus = 9;
}
}
else
{
bStatus = 2;
}
break;
case procStatus.accepted:
bStatus = 5;
break;
case procStatus.refused:
if (isValidation || isTesting)
{
bStatus = 9;
}
}
else
{
bStatus = 2;
}
break;
else
{
bStatus = 6;
}
break;
case procStatus.accepted:
bStatus = 5;
break;
case procStatus.error:
if (isValidation || isTesting)
{
bStatus = 9;
}
else
{
bStatus = 7;
}
break;
case procStatus.refused:
if (isValidation || isTesting)
{
bStatus = 9;
}
else
{
bStatus = 6;
}
break;
case procStatus.error:
if (isValidation || isTesting)
{
bStatus = 9;
}
else
{
bStatus = 7;
}
break;
case procStatus.aborted:
default:
if (isValidation || isTesting)
{
bStatus = 9;
}
else
{
bStatus = 0;
}
break;
}
// SALVO info riguardo al batch running
DLMan.taBL.updateStatus(rispStima.BatchID, bStatus, rispStima.EnvNum, (decimal)rispStima.EstimatedWorktime / 60);
// salvo update elenco ITEMS
ComLib.updatePartsFromNesting(rispStima.PartList);
// aggiorno cadPath x items che non abbiano valorizzato...
string dxfFolder = memLayer.ML.CRS("drawingFolder");
if (isTesting)
{
dxfFolder = memLayer.ML.CRS("fileTestFolder");
}
string cadBasePath = $"{memLayer.ML.CRS("nestBasePath")}{dxfFolder}/";
DLMan.taIL.updateCadPath(cadBasePath, rispStima.BatchID, false);
// verifico IN CASO di validazione andata a buon fine --> valorizzo tabella!
if (bStatus > 7)
{
if (isValidation)
case procStatus.aborted:
default:
if (isValidation || isTesting)
{
bStatus = 9;
}
else
{
bStatus = 0;
}
break;
}
// SALVO info riguardo al batch running
DLMan.taBL.updateStatus(rispStima.BatchID, bStatus, rispStima.EnvNum, (decimal)rispStima.EstimatedWorktime / 60);
// salvo update elenco ITEMS
ComLib.updatePartsFromNesting(rispStima.PartList);
// aggiorno cadPath x items che non abbiano valorizzato...
string dxfFolder = memLayer.ML.CRS("drawingFolder");
if (isTesting)
{
// recupero ordine da batch
if (tabOrd.Count > 0)
dxfFolder = memLayer.ML.CRS("fileTestFolder");
}
string cadBasePath = $"{memLayer.ML.CRS("nestBasePath")}{dxfFolder}/";
DLMan.taIL.updateCadPath(cadBasePath, rispStima.BatchID, false);
// verifico IN CASO di validazione andata a buon fine --> valorizzo tabella!
if (bStatus > 7)
{
if (isValidation)
{
DLMan.taIV.upsertQuery(tabOrd[0].OrderExtCode, rispStima.BatchID, bStatus, rispStima.EstimatedWorktime);
}
}
else if (isTesting)
{
// recupero ordine da batch
if (tabOrd.Count > 0)
{
DLMan.taFV.upsertQuery(tabOrd[0].OrderExtCode, rispStima.BatchID, bStatus, rispStima.EstimatedWorktime);
// recupero ordine da batch
if (tabOrd.Count > 0)
{
DLMan.taIV.upsertQuery(tabOrd[0].OrderExtCode, rispStima.BatchID, bStatus, rispStima.EstimatedWorktime);
}
}
else if (isTesting)
{
// recupero ordine da batch
if (tabOrd.Count > 0)
{
DLMan.taFV.upsertQuery(tabOrd[0].OrderExtCode, rispStima.BatchID, bStatus, rispStima.EstimatedWorktime);
}
}
}
// registro OK
answ = "OK";
}
// registro OK
answ = "OK";
}
// stima "extended" x splitting
else if (batchProcAnsw.ProcType == 3)
@@ -286,124 +300,135 @@ namespace NKC_WF.Controllers
int bStatus = 0;
// deserializzo come BatchreqIniziale (stima)
nestReplyBatchExtEst rispStima = JsonConvert.DeserializeObject<nestReplyBatchExtEst>(content);
// salvo su mongoDb la risposta...
ComLib.man.saveExtEstAnsw(rispStima);
// recupero info sul batch / KIT specifico x capire se sia di tipo "validation"
bool isValidation = false;
bool isTesting = false;
var tabOrd = DLMan.taOL.getByBatch(rispStima.BatchID);
if (tabOrd.Count > 0)
// verifica preliminare che il batch possa accettare la risposta
var currBatchStatus = ComLib.BStatus(rispStima.BatchID);
if (currBatchStatus != BatchStatus.EstimationRequested)
{
isValidation = tabOrd[0].OrdType == "V";
isTesting = tabOrd[0].OrdType == "T";
string message = $"Impossibile processing risposta da EgtNest | ProcType: {batchProcAnsw.ProcType} | BatchID: {rispStima.BatchID} | stato: {currBatchStatus}";
logger.lg.scriviLog(message, tipoLog.ERROR);
// registro KO
answ = "KO";
}
// calcolo status del batch...
switch (rispStima.ProcessStatus)
else
{
case procStatus.waiting:
case procStatus.running:
bStatus = 1;
break;
// salvo su mongoDb la risposta...
ComLib.man.saveExtEstAnsw(rispStima);
case procStatus.completed:
if (isValidation || isTesting)
{
bool pdfOk = true;
// se richiesto CheckPDF
if (memLayer.ML.CRB("checkPdfPathTV"))
// recupero info sul batch / KIT specifico x capire se sia di tipo "validation"
bool isValidation = false;
bool isTesting = false;
var tabOrd = DLMan.taOL.getByBatch(rispStima.BatchID);
if (tabOrd.Count > 0)
{
isValidation = tabOrd[0].OrdType == "V";
isTesting = tabOrd[0].OrdType == "T";
}
// calcolo status del batch...
switch (rispStima.ProcessStatus)
{
case procStatus.waiting:
case procStatus.running:
bStatus = 1;
break;
case procStatus.completed:
if (isValidation || isTesting)
{
// verifico PDF, se NON OK --> errore
string pdfPath = "";
foreach (var item in rispStima.PartList)
bool pdfOk = true;
// se richiesto CheckPDF
if (memLayer.ML.CRB("checkPdfPathTV"))
{
pdfOk = pdfOk && ComLib.checkPdfExistAccessible(item, out pdfPath);
if (!pdfOk)
// verifico PDF, se NON OK --> errore
string pdfPath = "";
foreach (var item in rispStima.PartList)
{
// codice è B.xxx dove xxx = BatchID
DLMan.taEL.insertQuery(DateTime.Now, "Check PDF path", $"B.{rispStima.BatchID}", $"{rispStima.BatchID}.{item.PartExtCode}", $"Error: PDF file not found: {pdfPath}");
pdfOk = pdfOk && ComLib.checkPdfExistAccessible(item, out pdfPath);
if (!pdfOk)
{
// codice è B.xxx dove xxx = BatchID
DLMan.taEL.insertQuery(DateTime.Now, "Check PDF path", $"B.{rispStima.BatchID}", $"{rispStima.BatchID}.{item.PartExtCode}", $"Error: PDF file not found: {pdfPath}");
}
}
}
}
// se non OK --> registro errore...
if (!pdfOk)
{
bStatus = 9;
}
// verifico se il tempo di procesisng stimato sia > minimo...
else if (rispStima.EstimatedWorktime > memLayer.ML.CRI("minValidEstSec"))
{
bStatus = 10;
// se non OK --> registro errore...
if (!pdfOk)
{
bStatus = 9;
}
// verifico se il tempo di procesisng stimato sia > minimo...
else if (rispStima.EstimatedWorktime > memLayer.ML.CRI("minValidEstSec"))
{
bStatus = 10;
}
else
{
bStatus = 9;
}
}
else
{
bStatus = 2;
}
break;
case procStatus.accepted:
bStatus = 5;
break;
case procStatus.refused:
if (isValidation || isTesting)
{
bStatus = 9;
}
}
else
{
bStatus = 2;
}
break;
else
{
bStatus = 6;
}
break;
case procStatus.accepted:
bStatus = 5;
break;
case procStatus.error:
if (isValidation || isTesting)
{
bStatus = 9;
}
else
{
bStatus = 7;
}
break;
case procStatus.refused:
if (isValidation || isTesting)
{
bStatus = 9;
}
else
{
bStatus = 6;
}
break;
case procStatus.aborted:
default:
if (isValidation || isTesting)
{
bStatus = 9;
}
else
{
bStatus = 0;
}
break;
}
// SALVO info riguardo al batch running
DLMan.taBL.updateStatus(rispStima.BatchID, bStatus, rispStima.EnvNum, (decimal)rispStima.EstimatedWorktime / 60);
// salvo update elenco ITEMS
ComLib.updatePartsFromNesting(rispStima.PartList);
case procStatus.error:
if (isValidation || isTesting)
{
bStatus = 9;
}
else
{
bStatus = 7;
}
break;
// aggiorno la risposta dei tempi di esecuzione (+ NUM cart/part) degli ordini x permettere aggiustamenti
ComLib.updateExtEstimFromNesting(rispStima.BatchID, rispStima.EstOrderList);
case procStatus.aborted:
default:
if (isValidation || isTesting)
{
bStatus = 9;
}
else
{
bStatus = 0;
}
break;
// aggiorno cadPath x items che non abbiano valorizzato...
string dxfFolder = memLayer.ML.CRS("drawingFolder");
if (isTesting)
{
dxfFolder = memLayer.ML.CRS("fileTestFolder");
}
string cadBasePath = $"{memLayer.ML.CRS("nestBasePath")}{dxfFolder}/";
DLMan.taIL.updateCadPath(cadBasePath, rispStima.BatchID, false);
// registro OK
answ = "OK";
}
// SALVO info riguardo al batch running
DLMan.taBL.updateStatus(rispStima.BatchID, bStatus, rispStima.EnvNum, (decimal)rispStima.EstimatedWorktime / 60);
// salvo update elenco ITEMS
ComLib.updatePartsFromNesting(rispStima.PartList);
// aggiorno la risposta dei tempi di esecuzione (+ NUM cart/part) degli ordini x permettere aggiustamenti
ComLib.updateExtEstimFromNesting(rispStima.BatchID, rispStima.EstOrderList);
// aggiorno cadPath x items che non abbiano valorizzato...
string dxfFolder = memLayer.ML.CRS("drawingFolder");
if (isTesting)
{
dxfFolder = memLayer.ML.CRS("fileTestFolder");
}
string cadBasePath = $"{memLayer.ML.CRS("nestBasePath")}{dxfFolder}/";
DLMan.taIL.updateCadPath(cadBasePath, rispStima.BatchID, false);
// registro OK
answ = "OK";
}
// nesting
else if (batchProcAnsw.ProcType == 2)
@@ -411,84 +436,71 @@ namespace NKC_WF.Controllers
// deserializzo come BatchreqFinale
nestReplyBatchFinal rispNest = JsonConvert.DeserializeObject<nestReplyBatchFinal>(content);
// 2020.01.16 salvo su mongoDb la risposta...
ComLib.man.saveNestAnsw(rispNest);
// calcolo status del batch...
int bStatus = 2;
switch (rispNest.ProcessStatus)
// verifica preliminare che il batch possa accettare la risposta
var currBatchStatus = ComLib.BStatus(rispNest.BatchID);
if (currBatchStatus != BatchStatus.NestRequested)
{
case procStatus.waiting:
case procStatus.running:
bStatus = 3;
break;
case procStatus.completed:
bStatus = 4;
break;
case procStatus.accepted:
bStatus = 5;
break;
case procStatus.refused:
bStatus = 6;
break;
case procStatus.error:
bStatus = 7;
break;
case procStatus.aborted:
default:
bStatus = 2;
break;
string message = $"Impossibile processing risposta da EgtNest | ProcType: {batchProcAnsw.ProcType} | BatchID: {rispNest.BatchID} | stato: {currBatchStatus}";
logger.lg.scriviLog(message, tipoLog.ERROR);
// registro KO
answ = "KO";
}
// aggiorno il resto SOLO SE status == completo...
if (rispNest.ProcessStatus == procStatus.completed || rispNest.ProcessStatus == procStatus.error)
else
{
// resetto le precedenti elaborazioni: elimino dati child MA NON il batch...
DLMan.taBL.resetTree(rispNest.BatchID);
// SALVO info riguardo al batch completato
DLMan.taBL.updateStatus(rispNest.BatchID, bStatus, rispNest.EnvNum, (decimal)rispNest.EstimatedWorktime / 60);
// salvo info riguardo ai vari Bunk / Sheets / Items...
ComLib.updateBunksFromNesting(rispNest.BatchID, rispNest.BunkList);
// salvo info x CART & BINS previsti
ComLib.updateBinsFromNesting(rispNest.BatchID, rispNest.BinList);
ComLib.updateCartsFromNesting(rispNest.BatchID, rispNest.CartList);
#if false
// NKC2: se è un batch ti dipo descendant
if (ComLib.BType(rispNest.BatchID) == BatchType.Descendant)
// 2020.01.16 salvo su mongoDb la risposta...
ComLib.man.saveNestAnsw(rispNest);
// calcolo status del batch...
int bStatus = 2;
switch (rispNest.ProcessStatus)
{
// verifico se ce ne siano altri NON validati (ma splitted)
var tabDesc = ComLib.BatchOtherDescendant(rispNest.BatchID);
if (tabDesc != null && tabDesc.Count > 0)
{
// ciclo x tutte le righe che NON fossero con nesting effettuato
foreach (var item in tabDesc)
{
// se c'è qualcosa da processare lo richiede
if (item.STATUS == 2)
{
// invio il PRIMO batch descendant
ComLib.sendBatchReq(item.BatchID, "Nesting", 2, false);
// registro su DB nesting iniziato...
DLMan.taBL.updateStatus(item.BatchID, (int)BatchStatus.NestRequested, "", -1);
isSplitReq = true;
// esco
break;
}
// se non ha trovato nulla --> prova update Batch Ancestor...
}
}
}
#endif
isSplitReq = ComLib.checkSendBatchSplit(rispNest.BatchID);
}
case procStatus.waiting:
case procStatus.running:
bStatus = 3;
break;
// registro OK
answ = "OK";
case procStatus.completed:
bStatus = 4;
break;
case procStatus.accepted:
bStatus = 5;
break;
case procStatus.refused:
bStatus = 6;
break;
case procStatus.error:
bStatus = 7;
break;
case procStatus.aborted:
default:
bStatus = 2;
break;
}
// aggiorno il resto SOLO SE status == completo...
if (rispNest.ProcessStatus == procStatus.completed || rispNest.ProcessStatus == procStatus.error)
{
// resetto le precedenti elaborazioni: elimino dati child MA NON il batch...
DLMan.taBL.resetTree(rispNest.BatchID);
// SALVO info riguardo al batch completato
DLMan.taBL.updateStatus(rispNest.BatchID, bStatus, rispNest.EnvNum, (decimal)rispNest.EstimatedWorktime / 60);
// salvo info riguardo ai vari Bunk / Sheets / Items...
ComLib.updateBunksFromNesting(rispNest.BatchID, rispNest.BunkList);
// salvo info x CART & BINS previsti
ComLib.updateBinsFromNesting(rispNest.BatchID, rispNest.BinList);
ComLib.updateCartsFromNesting(rispNest.BatchID, rispNest.CartList);
isSplitReq = ComLib.checkSendBatchSplit(rispNest.BatchID);
}
// registro OK
answ = "OK";
}
}
}
else if (batchProcAnsw.OrderType == oType.OfflineOrder)