import backoff
This commit is contained in:
@@ -59,6 +59,49 @@ function formatDateToExport($value)
|
|||||||
return null; // Imposta null se non è una data valida
|
return null; // Imposta null se non è una data valida
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ImportaCommessa con retry: la chiamata è asincrona lato LIMS e a volte
|
||||||
|
// risponde 200 senza importare (StatoCommessaWeb resta "Inviata"/"Nuova").
|
||||||
|
// Riprova con backoff esponenziale finché non passa a "Elaborata".
|
||||||
|
function importaCommessaWithRetry($api, $commessaId, array $payload, $maxRetries = 3, $initialBackoff = 1)
|
||||||
|
{
|
||||||
|
$result = null;
|
||||||
|
$stato = null;
|
||||||
|
$succeeded = false;
|
||||||
|
$log = "";
|
||||||
|
$backoff = $initialBackoff;
|
||||||
|
|
||||||
|
set_time_limit(120); // i backoff non devono far scadere il timeout della richiesta
|
||||||
|
|
||||||
|
for ($attempt = 1; $attempt <= $maxRetries + 1; $attempt++) {
|
||||||
|
try {
|
||||||
|
$result = $api->post("CommessaWeb({$commessaId})/ImportaCommessa", $payload);
|
||||||
|
$stato = $result['StatoCommessaWeb'] ?? null;
|
||||||
|
$log .= "Attempt {$attempt}: HTTP 200, StatoCommessaWeb=" . ($stato ?? 'null') . "\n";
|
||||||
|
} catch (Exception $e) {
|
||||||
|
$stato = null;
|
||||||
|
$log .= "Attempt {$attempt}: EXCEPTION " . $e->getMessage() . "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($stato === 'Elaborata') {
|
||||||
|
$succeeded = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($attempt <= $maxRetries) {
|
||||||
|
$log .= " -> not Elaborata, waiting {$backoff}s before retry\n";
|
||||||
|
sleep($backoff);
|
||||||
|
$backoff *= 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
'succeeded' => $succeeded,
|
||||||
|
'stato' => $stato,
|
||||||
|
'result' => $result,
|
||||||
|
'log' => $log,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$iddatadb = $_POST['iddatadb'] ?? null;
|
$iddatadb = $_POST['iddatadb'] ?? null;
|
||||||
if (!$iddatadb) {
|
if (!$iddatadb) {
|
||||||
@@ -512,9 +555,8 @@ try {
|
|||||||
$writeLog($logFileStep9, $logContentStep9, "STEP 9 - InviaCommessa (commessa={$commessaId})");
|
$writeLog($logFileStep9, $logContentStep9, "STEP 9 - InviaCommessa (commessa={$commessaId})");
|
||||||
|
|
||||||
|
|
||||||
// 🔹 STEP 9.5: Importazione da CommessaWeb a Commessa (commentato come richiesto)
|
// 🔹 STEP 9.5: Importazione da CommessaWeb a Commessa (con retry)
|
||||||
// Supplier call: POST api/odata/CommessaWeb(XXX)/ImportaCommessa
|
// Supplier call: POST api/odata/CommessaWeb(XXX)/ImportaCommessa
|
||||||
|
|
||||||
$importUserId = (!empty($lims_global_user_id) && is_numeric($lims_global_user_id))
|
$importUserId = (!empty($lims_global_user_id) && is_numeric($lims_global_user_id))
|
||||||
? (int) $lims_global_user_id
|
? (int) $lims_global_user_id
|
||||||
: 285;
|
: 285;
|
||||||
@@ -522,17 +564,23 @@ try {
|
|||||||
$importPayload = [
|
$importPayload = [
|
||||||
"IdUtente" => $importUserId
|
"IdUtente" => $importUserId
|
||||||
];
|
];
|
||||||
$importResult = $api->post("CommessaWeb({$commessaId})/ImportaCommessa", $importPayload);
|
|
||||||
|
|
||||||
$importPayloadLog = json_encode($importPayload, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
|
$importPayloadLog = json_encode($importPayload, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
|
||||||
// Logga il POST
|
|
||||||
|
$importOutcome = importaCommessaWithRetry($api, $commessaId, $importPayload);
|
||||||
|
$importResult = $importOutcome['result'];
|
||||||
|
$importStato = $importOutcome['stato'];
|
||||||
|
$importSucceeded = $importOutcome['succeeded'];
|
||||||
|
|
||||||
|
// Logga il POST (tutti i tentativi)
|
||||||
$logContentStep91 = "curl --location --request POST '{$apiBaseUrl}CommessaWeb({$commessaId})/ImportaCommessa' \\\n" .
|
$logContentStep91 = "curl --location --request POST '{$apiBaseUrl}CommessaWeb({$commessaId})/ImportaCommessa' \\\n" .
|
||||||
"--header 'Content-Type: application/json' \\\n" .
|
"--header 'Content-Type: application/json' \\\n" .
|
||||||
"--header 'Authorization: Bearer ••••••' \\\n" .
|
"--header 'Authorization: Bearer ••••••' \\\n" .
|
||||||
"--data '{$importPayloadLog}'\n\n" .
|
"--data '{$importPayloadLog}'\n\n" .
|
||||||
"RESPONSE:\n" . json_encode($importResult, JSON_PRETTY_PRINT);
|
"ATTEMPTS:\n" . $importOutcome['log'] . "\n" .
|
||||||
|
"SUCCEEDED: " . ($importSucceeded ? 'yes' : 'NO') . "\n\n" .
|
||||||
|
"LAST RESPONSE:\n" . json_encode($importResult, JSON_PRETTY_PRINT);
|
||||||
$logFileStep91 = $logDir . "commessa_{$commessaId}_importa_step91_" . time() . ".txt";
|
$logFileStep91 = $logDir . "commessa_{$commessaId}_importa_step91_" . time() . ".txt";
|
||||||
$writeLog($logFileStep91, $logContentStep91, "STEP 9.5 - ImportaCommessa (commessa={$commessaId})");
|
$writeLog($logFileStep91, $logContentStep91, "STEP 9.5 - ImportaCommessa (commessa={$commessaId}, succeeded=" . ($importSucceeded ? '1' : '0') . ")");
|
||||||
|
|
||||||
// 🔹 STEP 10: GET di controllo post-PATCH
|
// 🔹 STEP 10: GET di controllo post-PATCH
|
||||||
$expand = "CommesseCustomFields(\$expand=CustomField)";
|
$expand = "CommesseCustomFields(\$expand=CustomField)";
|
||||||
|
|||||||
Reference in New Issue
Block a user