Merge branch 'release/BatchProcAddLogNesting01'

This commit is contained in:
Samuele Locatelli
2023-11-15 18:27:42 +01:00
5 changed files with 88 additions and 64 deletions
+13 -6
View File
@@ -516,6 +516,7 @@ namespace AppData
/// <returns></returns>
public static bool checkSendBatchSplit(int BatchID)
{
string logIdKey = $"checkSendBatchSplit | BatchID: {BatchID} |";
int nextIndex = 10;
bool batchSent = false;
bool batchProcessed = false;
@@ -523,11 +524,11 @@ namespace AppData
var currType = ComLib.BType(BatchID);
// log tipo di batch
Log.Instance.Info($"Batch currType: {currType}");
Log.Instance.Info($"{logIdKey} | Batch currType: {currType}");
// NKC2: controllo SE sia un batch tipo ancestor (1° invio)
if (currType == BatchType.Ancestor)
{
Log.Instance.Info("Batch Ancestor | 01");
Log.Instance.Info($"{logIdKey} | Batch Ancestor | 01");
// recupero batch descendant
var tabDesc = ComLib.BatchDescendant(BatchID);
if (tabDesc != null && tabDesc.Count > 0)
@@ -566,12 +567,12 @@ namespace AppData
break;
}
}
Log.Instance.Info("Batch Ancestor | 02");
Log.Instance.Info($"{logIdKey} | Batch Ancestor | 02");
}
// NKC2: se è un batch ti dipo descendant (invii successivi)
if (currType == BatchType.Descendant)
{
Log.Instance.Info("Batch Descendant | 01");
Log.Instance.Info($"{logIdKey} | Batch Descendant | 01");
// verifico se ce ne siano altri NON validati (ma splitted)
var tabDesc = ComLib.BatchOtherDescendant(BatchID);
if (tabDesc != null && tabDesc.Count > 0)
@@ -585,6 +586,7 @@ namespace AppData
if (item.STATUS == 2)
{
nextIndex += 50;
Log.Instance.Info($"{logIdKey} | Batch Descendant | PlaceCod: {item.PlaceCod} | Takt: {item.Takt} | nextIndex: {nextIndex}");
// 2021.07.19 FIX x caso batch vuoto: se non ho pezzi --> approvo
// direttamente e passo al successivo...
var tabItems = DLMan.taIL.getByBatch(item.BatchID);
@@ -616,10 +618,10 @@ namespace AppData
}
}
Log.Instance.Info("Batch Descendant | 02");
Log.Instance.Info($"{logIdKey} | Batch Descendant | 02");
}
Log.Instance.Info($"Batch test result: {batchSent}");
Log.Instance.Info($"{logIdKey} | Batch test result: {batchSent}");
return batchSent;
}
@@ -1907,6 +1909,10 @@ namespace AppData
/// <returns></returns>
public static bool sendBatchReq(int BatchID, string note, int pType, bool isValidation, int numIndexStart, bool createPng)
{
string logIdKey = $"sendBatchReq | BatchID: {BatchID}";
// loggo richiesta
Log.Instance.Info($"{logIdKey} | numIndexStart: {numIndexStart}");
Log.Instance.Info($"{logIdKey} | note: {note} | pType: {pType} | isValidation: {isValidation} | createPng: {createPng}");
DataLayer DLMan = new DataLayer();
bool answ = false;
// per prima cosa mi serve una "nuova busta" per inviare i messaggi
@@ -2021,6 +2027,7 @@ namespace AppData
}
catch
{ }
Log.Instance.Info($"{logIdKey} | req completed | currBatchReq: {nextEnv}");
// restituisco ok
return answ;
}
+29 -28
View File
@@ -92,6 +92,7 @@ namespace NKC_WF.Controllers
[HttpPost]
public string Post()
{
string logIdKey = "BatchProcController.Post()";
string answ = "";
bool resetOk = false;
string envNum = "";
@@ -114,7 +115,7 @@ namespace NKC_WF.Controllers
// DEBUG: salvo su redis x fare DEBUG
string redKey = $"{ComLib.redNestAnsw}:LAST_CALL";
memLayer.ML.setRSV(redKey, content);
Log.Instance.Info($"BatchProcController | Post() data received | length: {content.Length}");
Log.Instance.Info($"{logIdKey} | Post() data received | length: {content.Length}");
// deserializzo
batchProcAnsw = JsonConvert.DeserializeObject<baseNestAnsw>(content);
@@ -123,11 +124,11 @@ namespace NKC_WF.Controllers
if (envNum == batchProcAnsw.EnvNum)
{
resetOk = ComLib.resetBatchReq();
Log.Instance.Info($"BatchProcController | resetBatchReq() DONE");
Log.Instance.Info($"{logIdKey} | resetBatchReq() DONE | envNum: {envNum}");
}
else
{
Log.Instance.Info($"BatchProcController | resetBatchReq() NOT executed | envNum: {envNum} | batchProcAnsw.EnvNum: {batchProcAnsw.EnvNum}");
Log.Instance.Info($"{logIdKey} | resetBatchReq() NOT executed | envNum: {envNum} | batchProcAnsw.EnvNum: {batchProcAnsw.EnvNum}");
}
// procedura idempotente: elimino eventuali dati della "busta" precedente...
DLMan.taEL.deteteByParent("", batchProcAnsw.EnvNum);
@@ -144,7 +145,7 @@ namespace NKC_WF.Controllers
// se non nullo...
if (batchProcAnsw != null)
{
Log.Instance.Info($"And | OrderType: {batchProcAnsw.OrderType} | ProcType: {batchProcAnsw.ProcType}");
Log.Instance.Info($"{logIdKey} | OrderType: {batchProcAnsw.OrderType} | ProcType: {batchProcAnsw.ProcType}");
/*************************************************
* IN BASE al tipo di risposta saprò se
* - è BatchReq / OfflineOrder
@@ -156,11 +157,11 @@ namespace NKC_WF.Controllers
*************************************************/
if (batchProcAnsw.OrderType == oType.BatchRequest)
{
Log.Instance.Info("Processing oType.BatchRequest");
Log.Instance.Info($"{logIdKey} | Processing oType.BatchRequest");
// stima "classica"
if (batchProcAnsw.ProcType == 1)
{
Log.Instance.Info("Processing ProcType == 1");
Log.Instance.Info($"{logIdKey} | Processing ProcType == 1");
BatchStatus bStatus = BatchStatus.Imported;
// deserializzo come BatchreqIniziale (stima)
nestReplyBatchInitial rispStima = JsonConvert.DeserializeObject<nestReplyBatchInitial>(content);
@@ -172,7 +173,7 @@ namespace NKC_WF.Controllers
if (currBatchStatus != BatchStatus.EstimationRequested)
{
string message = $"E.BR.1 Impossibile processing della risposta da EgtNest | ProcType: {batchProcAnsw.ProcType} | BatchID: {rispStima.BatchID} | stato da DB: {currBatchStatus} | stato richiesto: {BatchStatus.EstimationRequested}";
logger.lg.scriviLog(message, tipoLog.ERROR);
Log.Instance.Error($"{logIdKey} | {message}");
// registro KO
answ = "KO";
}
@@ -275,7 +276,7 @@ namespace NKC_WF.Controllers
}
break;
}
Log.Instance.Info($"Batch Status calculated | BatchID: {rispStima.BatchID} | bStatus {bStatus}");
Log.Instance.Info($"{logIdKey} | Batch Status calculated | BatchID: {rispStima.BatchID} | bStatus {bStatus}");
// SALVO info riguardo al batch running
DLMan.taBL.updateStatus(rispStima.BatchID, (int)bStatus, rispStima.EnvNum, (decimal)rispStima.EstimatedWorktime / 60);
// salvo update elenco ITEMS
@@ -315,7 +316,7 @@ namespace NKC_WF.Controllers
// stima "extended" x splitting
else if (batchProcAnsw.ProcType == 3)
{
Log.Instance.Info("Processing ProcType == 3");
Log.Instance.Info($"{logIdKey} | Processing ProcType == 3");
BatchStatus bStatus = BatchStatus.Imported;
// deserializzo come BatchreqIniziale (stima)
nestReplyBatchExtEst rispStima = JsonConvert.DeserializeObject<nestReplyBatchExtEst>(content);
@@ -324,7 +325,7 @@ namespace NKC_WF.Controllers
if (currBatchStatus != BatchStatus.EstimationRequested)
{
string message = $"E.BR.2 Impossibile processing della risposta da EgtNest | ProcType: {batchProcAnsw.ProcType} | BatchID: {rispStima.BatchID} | stato da DB: {currBatchStatus} | stato richiesto: {BatchStatus.EstimationRequested}";
logger.lg.scriviLog(message, tipoLog.ERROR);
Log.Instance.Error($"{logIdKey} | {message}");
// registro KO
answ = "KO";
}
@@ -427,7 +428,7 @@ namespace NKC_WF.Controllers
}
break;
}
Log.Instance.Info($"Batch Status calculated | BatchID: {rispStima.BatchID} | bStatus {bStatus}");
Log.Instance.Info($"{logIdKey} | Batch Status calculated | BatchID: {rispStima.BatchID} | bStatus {bStatus}");
// SALVO info riguardo al batch running
DLMan.taBL.updateStatus(rispStima.BatchID, (int)bStatus, rispStima.EnvNum, (decimal)rispStima.EstimatedWorktime / 60);
// salvo update elenco ITEMS
@@ -458,7 +459,7 @@ namespace NKC_WF.Controllers
// nesting
else if (batchProcAnsw.ProcType == 2)
{
Log.Instance.Info("Processing ProcType == 2 | NESTING");
Log.Instance.Info($"{logIdKey} | Processing ProcType == 2 | NESTING");
// deserializzo come BatchreqFinale
nestReplyBatchFinal rispNest = JsonConvert.DeserializeObject<nestReplyBatchFinal>(content);
@@ -468,13 +469,13 @@ namespace NKC_WF.Controllers
if (currBatchStatus != BatchStatus.NestRequested)
{
string message = $"E.BR.3 Impossibile processing della risposta da EgtNest | ProcType: {batchProcAnsw.ProcType} | BatchID: {rispNest.BatchID} | stato da DB: {currBatchStatus} | stato richiesto: {BatchStatus.NestRequested}";
logger.lg.scriviLog(message, tipoLog.ERROR);
Log.Instance.Error($"{logIdKey} | {message}");
// registro KO
answ = "KO";
}
else
{
Log.Instance.Info($"Response status OK | ProcType: {batchProcAnsw.ProcType} | BatchID: {rispNest.BatchID} | stato da DB: {currBatchStatus} | stato richiesto: {BatchStatus.NestRequested}");
Log.Instance.Info($"{logIdKey} | Response status OK | ProcType: {batchProcAnsw.ProcType} | BatchID: {rispNest.BatchID} | stato da DB: {currBatchStatus} | stato richiesto: {BatchStatus.NestRequested}");
// 2020.01.16 salvo su mongoDb la risposta...
ComLib.man.saveNestAnsw(rispNest);
@@ -508,7 +509,7 @@ namespace NKC_WF.Controllers
bStatus = BatchStatus.EstimationDone;
break;
}
Log.Instance.Info($"Batch Status calculated | BatchID: {rispNest.BatchID} | bStatus {bStatus} | stato da DB: {currBatchStatus} | rispNest.ProcessStatus: {rispNest.ProcessStatus}");
Log.Instance.Info($"{logIdKey} | Batch Status calculated | BatchID: {rispNest.BatchID} | bStatus {bStatus} | stato da DB: {currBatchStatus} | rispNest.ProcessStatus: {rispNest.ProcessStatus}");
// aggiorno il resto SOLO SE status == completo...
if (rispNest.ProcessStatus == procStatus.completed || rispNest.ProcessStatus == procStatus.error)
{
@@ -517,7 +518,7 @@ namespace NKC_WF.Controllers
// SALVO info riguardo al batch completato
DLMan.taBL.updateStatus(rispNest.BatchID, (int)bStatus, rispNest.EnvNum, (decimal)rispNest.EstimatedWorktime / 60);
Log.Instance.Info($"BL.updateStatus | BatchID: {rispNest.BatchID} | bStatus: {bStatus} | EnvNum: {rispNest.EnvNum} | EstimatedWorktime: {rispNest.EstimatedWorktime}");
Log.Instance.Info($"{logIdKey} | BL.updateStatus | BatchID: {rispNest.BatchID} | bStatus: {bStatus} | EnvNum: {rispNest.EnvNum} | EstimatedWorktime: {rispNest.EstimatedWorktime}");
// salvo info riguardo ai vari Bunk / Sheets / Items...
if (rispNest.BunkList != null && rispNest.BunkList.Count > 0)
@@ -541,7 +542,7 @@ namespace NKC_WF.Controllers
stopWatchLap.Start();
ComLib.man.updateSheetStatsByBatch(rispNest.BatchID);
stopWatchLap.Stop();
Log.Instance.Info($"Batch Stat Calculation after NEST answ | BatchID: {rispNest.BatchID} | elapsed {stopWatchLap.Elapsed.TotalMilliseconds} ms");
Log.Instance.Info($"{logIdKey} | Batch Stat Calculation after NEST answ | BatchID: {rispNest.BatchID} | elapsed {stopWatchLap.Elapsed.TotalMilliseconds} ms");
}
// registro OK
@@ -551,7 +552,7 @@ namespace NKC_WF.Controllers
}
else if (batchProcAnsw.OrderType == oType.OfflineOrder)
{
Log.Instance.Info("Processing oType.OfflineOrder");
Log.Instance.Info($"{logIdKey} | Processing oType.OfflineOrder");
// deserializzo come OfflineOrder
nestReplyOffOrd rispOffOrd = JsonConvert.DeserializeObject<nestReplyOffOrd>(content);
@@ -602,36 +603,36 @@ namespace NKC_WF.Controllers
{
answ = "WRONG DATA (expected baseNestAnsw object)";
//Log.inf
Log.Instance.Error(answ);
Log.Instance.Error($"{logIdKey} | {answ}");
}
}
catch (Exception exc)
{
answ = "NO";
Log.Instance.Error($"EXCEPTION api/BatchProc{Environment.NewLine}{exc}");
Log.Instance.Error($"{logIdKey} | EXCEPTION api/BatchProc{Environment.NewLine}{exc}");
}
// se tutto OK --> tolgo ultimo batch
if (answ == "OK")
{
Log.Instance.Info($"Close A.01 | batchProcAnsw.EnvNum {batchProcAnsw.EnvNum}");
Log.Instance.Info($"{logIdKey} | Close A.01 | batchProcAnsw.EnvNum {batchProcAnsw.EnvNum}");
// se è una split req --> NON resetto...
if (!isSplitReq)
{
Log.Instance.Info("Close B.01");
Log.Instance.Info($"{logIdKey} | Close B.01");
// reset
resetOk = ComLib.resetBatchReq();
Log.Instance.Info("Effettuato reset resetBatchReq");
Log.Instance.Info($"{logIdKey} | Effettuato reset resetBatchReq");
// se tutto ok e ci sono da validare parts --> procedo!
Log.Instance.Info("Close B.02");
Log.Instance.Info($"{logIdKey} | Close B.02");
if (resetOk)
{
Log.Instance.Info("Close B.03");
Log.Instance.Info($"{logIdKey} | Close B.03");
bool PartValForCreatePng = memLayer.ML.cdvb("PartValidationForceCreatePng");
bool DxfValForceCreatePng = memLayer.ML.cdvb("DxfValidationForceCreatePng");
bool forceCreatePng = (isValidation || isTesting) && (PartValForCreatePng || DxfValForceCreatePng);
bool nextValidSent = ComLib.sendFirstValidationBatch(forceCreatePng);
Log.Instance.Info("Close B.04");
Log.Instance.Info($"{logIdKey} | Close B.04");
}
}
else
@@ -640,10 +641,10 @@ namespace NKC_WF.Controllers
//// rimetto in coda la richiesta SUCCESSIVA
//ComLib.currBatchReq = envNum;
#endif
Log.Instance.Info($"Close C.01 - requeue DENIED for {envNum}");
Log.Instance.Info($"{logIdKey} | Close C.01 - requeue DENIED for {envNum}");
}
}
Log.Instance.Info("Close D.01");
Log.Instance.Info($"{logIdKey} | Close D.01");
// restituisco risposta
return answ;
}
+1 -1
View File
@@ -41,7 +41,7 @@
<asp:Parameter DefaultValue="999" Name="maxStatus" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
<asp:LinkButton runat="server" ID="lbtCreateOffOrd" CssClass="btn btn-outline-success btn-block" OnClick="lbtCreateOffOrd_Click" OnClientClick='return confirm("Confirm create order fo selected items?")'><%: traduci("CreateOrder") %> <i class="fa fa-arrow-circle-right" aria-hidden="true"></i></asp:LinkButton>
<asp:LinkButton runat="server" ID="lbtCreateOffOrd" CssClass="btn btn-outline-success btn-block" OnClick="lbtCreateOffOrd_Click" OnClientClick='return confirm("Confirm create order for selected items?")'><%: traduci("CreateOrder") %> <i class="fa fa-arrow-circle-right" aria-hidden="true"></i></asp:LinkButton>
</div>
<div class="card-footer">
<uc1:mod_righePag runat="server" ID="mod_righePag" />
+27 -25
View File
@@ -1,50 +1,52 @@
//------------------------------------------------------------------------------
// <generato automaticamente>
// Codice generato da uno strumento.
// <auto-generated>
// This code was generated by a tool.
//
// Le modifiche a questo file possono causare un comportamento non corretto e verranno perse se
// il codice viene rigenerato.
// </generato automaticamente>
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace NKC_WF.WebUserControls {
public partial class cmp_scrapList {
namespace NKC_WF.WebUserControls
{
public partial class cmp_scrapList
{
/// <summary>
/// Controllo grView.
/// grView control.
/// </summary>
/// <remarks>
/// Campo generato automaticamente.
/// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind.
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.GridView grView;
/// <summary>
/// Controllo ods.
/// ods control.
/// </summary>
/// <remarks>
/// Campo generato automaticamente.
/// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind.
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.ObjectDataSource ods;
/// <summary>
/// Controllo lbtCreateOffOrd.
/// lbtCreateOffOrd control.
/// </summary>
/// <remarks>
/// Campo generato automaticamente.
/// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind.
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.LinkButton lbtCreateOffOrd;
/// <summary>
/// Controllo mod_righePag.
/// mod_righePag control.
/// </summary>
/// <remarks>
/// Campo generato automaticamente.
/// Per la modifica, spostare la dichiarazione di campo dal file di progettazione al file code-behind.
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::NKC_WF.WebUserControls.mod_righePag mod_righePag;
}
+18 -4
View File
@@ -833,8 +833,15 @@ namespace NKC_WF.WebUserControls
itemIdSelected = 0;
}
resetShowData();
ComLib.resetItemPickup(SheetID, DeviceId);
lgDebug($"ComLib.resetItemPickup | SheetID {SheetID} | DeviceId: {DeviceId}");
if (SheetID > 0)
{
ComLib.resetItemPickup(SheetID, DeviceId);
lgDebug($"ComLib.resetItemPickup | SheetID {SheetID} | DeviceId: {DeviceId}");
}
else
{
lgInfo($"Errore in resetSelection: SheetID=0 | resetStatus: {resetStatus} | DeviceId: {DeviceId}");
}
}
/// <summary>
@@ -845,8 +852,15 @@ namespace NKC_WF.WebUserControls
{
// salvo in item sel...
updateCurrData();
bool fatto = ComLib.saveItemPickup(SheetID, DeviceId, itemDtmx);
lgInfo($"cmp_unloadSmart | tryPickup | item: {itemDtmx} | SheetID: {SheetID} | DeviceId: {DeviceId} | done: {fatto}");
if (SheetID > 0)
{
bool fatto = ComLib.saveItemPickup(SheetID, DeviceId, itemDtmx);
lgInfo($"cmp_unloadSmart | tryPickup | item: {itemDtmx} | SheetID: {SheetID} | DeviceId: {DeviceId} | done: {fatto}");
}
else
{
lgInfo($"Errore in tryPickup: SheetID=0 | itemDtmx: {itemDtmx}");
}
}
/// <summary>