From 62ee0733d2e6554a9b7d16bea0b3b69eae4ff669 Mon Sep 17 00:00:00 2001 From: Vladimir Fomichev Date: Fri, 17 Oct 2025 15:40:50 +0300 Subject: [PATCH] =?utf8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D1=8F=D0=B5?= =?utf8?q?=D0=BC=20=D0=BB=D0=BE=D0=B3=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD?= =?utf8?q?=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- erp24/jobs/SendRequestUploadDataToJob.php | 55 ++++++++++++++++++++--- 1 file changed, 48 insertions(+), 7 deletions(-) diff --git a/erp24/jobs/SendRequestUploadDataToJob.php b/erp24/jobs/SendRequestUploadDataToJob.php index f0ba5c20..497a35a3 100644 --- a/erp24/jobs/SendRequestUploadDataToJob.php +++ b/erp24/jobs/SendRequestUploadDataToJob.php @@ -7,6 +7,7 @@ namespace yii_app\jobs; +use Throwable; use yii\queue\RetryableJobInterface; use yii_app\services\LogService; use yii_app\services\UploadService; @@ -14,18 +15,58 @@ use yii_app\services\UploadService; class SendRequestUploadDataToJob implements RetryableJobInterface { public $decodingResult; - public function execute($queue) { - $request = $this->decodingResult; - $result = UploadService::processingUpload($request); + public function execute($queue) + { + // на всякий случай + if (function_exists('set_time_limit')) { @set_time_limit(0); } + + try { + // 1) Нормализуем вход к массиву + $request = $this->decodingResult; + + // 2) Базовая валидация (добавьте обязательные ключи, если знаете) + if (!is_array($request) || $request === []) { + throw new \RuntimeException('Request payload is empty or not an array after normalization'); + } + + // 3) Вызов сервиса + $result = UploadService::processingUpload($request); + + // при необходимости что-то сделать с $result + return $result; + } catch (Throwable $e) { + // подробный лог + проброс дальше, чтобы queue отметила как fail и сработал retry + LogService::apiErrorLog(json_encode([ + 'error_id' => 900, + 'error' => $e->getMessage(), + 'trace' => $e->getTraceAsString(), + 'payload_type' => is_object($this->decodingResult) ? get_class($this->decodingResult) : gettype($this->decodingResult), + ], JSON_UNESCAPED_UNICODE)); + + throw $e; + } } - public function getTtr() { - return 600; + public function getTtr() + { + // дайте больше времени, если загрузки реально долгие + return 900; // 15 минут (поставьте под ваш сценарий) } - public function canRetry($attempt, $error) { - LogService::apiErrorLog(json_encode(["error_id" => 900, "error" => $error->getMessage()], JSON_UNESCAPED_UNICODE)); + public function canRetry($attempt, $error) + { + // безопасный лог даже если $error не Throwable (на всякий случай) + $msg = $error instanceof Throwable ? $error->getMessage() : (is_scalar($error) ? (string)$error : json_encode($error, JSON_UNESCAPED_UNICODE)); + LogService::apiErrorLog(json_encode([ + 'error_id' => 900, + 'error' => $msg, + 'attempt' => $attempt, + ], JSON_UNESCAPED_UNICODE)); + + // до 3 попыток return $attempt < 3; } + + } -- 2.39.5