From 5975142b34a6c453e1b2c821749161eb28a22154 Mon Sep 17 00:00:00 2001 From: fomichev Date: Mon, 24 Mar 2025 17:46:17 +0300 Subject: [PATCH] =?utf8?q?=D0=90=D0=BB=D1=8C=D1=82=D0=B5=D1=80=D0=BD=D0=B0?= =?utf8?q?=D1=82=D0=B8=D0=B2=D0=BD=D1=8B=D0=B9=20=D0=B2=D0=B0=D1=80=D0=B8?= =?utf8?q?=D0=B0=D0=BD=D1=82=20-=20=D0=9F=D0=B5=D1=80=D0=B5=D0=B4=D0=B5?= =?utf8?q?=D0=BB=D0=BA=D0=B0=20=D0=BB=D0=BE=D0=B3=D0=B8=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- erp24/commands/MarketplaceController.php | 13 ++++-- .../MarketplaceOrdersController.php | 4 +- erp24/services/MarketplaceService.php | 44 ++++++++++++++++--- 3 files changed, 50 insertions(+), 11 deletions(-) diff --git a/erp24/commands/MarketplaceController.php b/erp24/commands/MarketplaceController.php index 11d0ec3c..8dba11d4 100644 --- a/erp24/commands/MarketplaceController.php +++ b/erp24/commands/MarketplaceController.php @@ -107,10 +107,17 @@ class MarketplaceController extends Controller $this->stdout($message . "\n", BaseConsole::FG_YELLOW); }; - $messages = MarketplaceService::getFlowwowOrdersFromMail($date, $since, $oldMail, $progressCallback, $seen, $unseen); + $messages = MarketplaceService::getFlowwowOrdersFromMail( + $date, + $since, + $oldMail, + $progressCallback, + $seen, + $unseen + ); - $countMessages = count($messages); - $count = MarketplaceService::processMessages($messages); + $countMessages = $messages['all']; + $count = $messages['processed']; $this->stdout( "Удалось сохранить {$count} новых заказов из {$countMessages} сообщений почты.\n", diff --git a/erp24/controllers/MarketplaceOrdersController.php b/erp24/controllers/MarketplaceOrdersController.php index 68dcad27..d35becc2 100644 --- a/erp24/controllers/MarketplaceOrdersController.php +++ b/erp24/controllers/MarketplaceOrdersController.php @@ -128,8 +128,8 @@ class MarketplaceOrdersController extends Controller (bool) $model->unseen ); - $countMessages = count($messages); - $count = MarketplaceService::processMessages($messages); + $countMessages = $messages['all']; + $count = $messages['processed']; $result = "Удалось сохранить {$count} новых заказов из {$countMessages} сообщений почты."; } diff --git a/erp24/services/MarketplaceService.php b/erp24/services/MarketplaceService.php index c6d3e58d..d1765641 100644 --- a/erp24/services/MarketplaceService.php +++ b/erp24/services/MarketplaceService.php @@ -1422,8 +1422,8 @@ class MarketplaceService $folders = imap_list($inbox, $hostname, '*'); imap_close($inbox); - $messages = []; - + $countAllMessages = 0; + $countProcessedMessages = 0; foreach ($folders as $folder) { if ($folder == '{imap.yandex.ru:993/imap/ssl}Drafts') { continue; @@ -1448,6 +1448,7 @@ class MarketplaceService call_user_func($progressCallback, "Найдено " . count($emails) . " писем."); } foreach ($emails as $index => $email_number) { + $countAllMessages += 1; $overview = imap_fetch_overview($inbox, $email_number, 0); $structure = imap_fetchstructure($inbox, $email_number); $htmlMessage = ''; @@ -1487,7 +1488,7 @@ class MarketplaceService $savedEmail->email_status = 1; $savedEmail->save(); } - $messages[] = [ + $message = [ 'subject' => $subject, 'subject_index' => $subjectIndex, 'from' => $from, @@ -1495,6 +1496,8 @@ class MarketplaceService 'date' => $date, 'body' => $htmlMessage, ]; + $countProcessedMessages += MarketplaceService::processMessage($message); + if ($unseen) { self::imap_debug_log("Установка флага SEEN для сообшения #" . $email_number, $debugMode, $progressCallback); @@ -1535,9 +1538,8 @@ class MarketplaceService } - //usort($messages, fn($a, $b) => $a['subject_index'] <=> $b['subject_index']); - usort($messages, fn($a, $b) => strtotime($a['date']) <=> strtotime($b['date'])); - return $messages; + + return ['processed' => $countProcessedMessages, 'all' => $countAllMessages]; } public static function saveEmailIfNotExists($subject, $subjectPattern, $from, $to, $date, $body) @@ -1629,6 +1631,36 @@ class MarketplaceService return $count; } + public static function processMessage($message) + { + $count = 0; + if ($message) { + $store = MarketplaceStore::getWarehouseGuidByAccountEmail($message['to']) ?? 206008; + + $order = self::getOrdersDataFromMessage($message); + + if ($message['subject_index'] == self::SUBJECT_INDEX[self::SUBJECT_NEW]) { + $statusCode = 'PROCESSING'; + $substatusCode = 'STARTED'; + } elseif ($message['subject_index'] == self::SUBJECT_INDEX[self::SUBJECT_APPROVED]) { + $statusCode = 'PROCESSING'; + $substatusCode = 'APPROVED'; + } elseif ($message['subject_index'] == self::SUBJECT_INDEX[self::SUBJECT_CANCELLED]) { + $statusCode = 'CANCELLED'; + $substatusCode = 'USER_CHANGED_MIND'; + } elseif ($message['subject_index'] == self::SUBJECT_INDEX[self::SUBJECT_CHANGED]) { + $statusCode = 'PROCESSING'; + $substatusCode = 'CHANGED'; + } elseif ($message['subject_index'] == self::SUBJECT_INDEX[self::SUBJECT_DELIVERED]) { + $statusCode = 'DELIVERED'; + $substatusCode = 'DELIVERY_SERVICE_DELIVERED'; + } + $count = self::processFlowwowOrders($order, $store, $statusCode, $substatusCode, $message['subject_index']); + + } + return $count; + } + public static function getOrdersDataFromMessage($message) { $html = $message['body']; -- 2.39.5