public function actionGetFlowwowOrders()
{
- $date = $this->date ?? null;
- $since = (bool)($this->since ?? 0);
- $oldMail = (bool)($this->oldMail ?? 0);
- $seen = (bool)($this->seen ?? 0);
- $unseen = (bool)($this->unseen ?? 0);
-
- $countMessages = 0;
- $count = 0;
-
- $progressCallback = function ($message) {
- $this->stdout($message . "\n", BaseConsole::FG_YELLOW);
- };
-
- $messages = MarketplaceService::getFlowwowOrdersFromMail(
- $date,
- $since,
- $oldMail,
- $progressCallback,
- $seen,
- $unseen
- );
-
- if (!is_array($messages)) {
- $errorMsg = 'MarketplaceController::actionGetFlowwowOrders — не удалось получить заказы FlowWow. Проверьте IMAP настройки в .env (IMAP_FLOWWOW_USERNAME, IMAP_FLOWWOW_PASSWORD)';
- Yii::error($errorMsg, 'marketplace');
- $this->stderr($errorMsg . "\n", BaseConsole::FG_RED);
- return ExitCode::SOFTWARE;
+ $mutex = Yii::$app->mutex;
+ if (!$mutex->acquire('marketplace:flowwow-orders', 0)) {
+ Yii::warning('actionGetFlowwowOrders: уже выполняется, пропуск', 'marketplace');
+ return ExitCode::OK;
}
- $countMessages = $messages['all'];
- $count = $messages['processed'];
+ try {
+ $date = $this->date ?? null;
+ $since = (bool)($this->since ?? 0);
+ $oldMail = (bool)($this->oldMail ?? 0);
+ $seen = (bool)($this->seen ?? 0);
+ $unseen = (bool)($this->unseen ?? 0);
+
+ $progressCallback = function ($message) {
+ $this->stdout($message . "\n", BaseConsole::FG_YELLOW);
+ };
+
+ $messages = MarketplaceService::getFlowwowOrdersFromMail(
+ $date,
+ $since,
+ $oldMail,
+ $progressCallback,
+ $seen,
+ $unseen
+ );
+
+ if (!is_array($messages)) {
+ $errorMsg = 'MarketplaceController::actionGetFlowwowOrders — не удалось получить заказы FlowWow. Проверьте IMAP настройки в .env (IMAP_FLOWWOW_USERNAME, IMAP_FLOWWOW_PASSWORD)';
+ Yii::error($errorMsg, 'marketplace');
+ $this->stderr($errorMsg . "\n", BaseConsole::FG_RED);
+ return ExitCode::SOFTWARE;
+ }
- $this->stdout(
- "Удалось сохранить {$count} новых заказов из {$countMessages} сообщений почты.\n",
- BaseConsole::FG_GREEN
- );
+ $countMessages = $messages['all'];
+ $count = $messages['processed'];
- return ExitCode::OK;
+ $this->stdout(
+ "Удалось сохранить {$count} новых заказов из {$countMessages} сообщений почты.\n",
+ BaseConsole::FG_GREEN
+ );
+
+ return ExitCode::OK;
+ } finally {
+ $mutex->release('marketplace:flowwow-orders');
+ }
}
/**
*/
public function actionRetryFlowwowEmails(): int
{
- $progressCallback = function (string $message) {
- $this->stdout($message . "\n", BaseConsole::FG_YELLOW);
- };
+ $mutex = Yii::$app->mutex;
+ if (!$mutex->acquire('marketplace:flowwow-retry', 0)) {
+ Yii::warning('actionRetryFlowwowEmails: уже выполняется, пропуск', 'marketplace');
+ return ExitCode::OK;
+ }
- $result = MarketplaceService::processUnprocessedEmails($progressCallback);
+ try {
+ $progressCallback = function (string $message) {
+ $this->stdout($message . "\n", BaseConsole::FG_YELLOW);
+ };
- $this->stdout(
- "Итог: обработано {$result['processed']} из {$result['total']}, ошибок: {$result['failed']}.\n",
- BaseConsole::FG_GREEN
- );
+ $result = MarketplaceService::processUnprocessedEmails($progressCallback);
- return ExitCode::OK;
+ $this->stdout(
+ "Итог: обработано {$result['processed']} из {$result['total']}, ошибок: {$result['failed']}.\n",
+ BaseConsole::FG_GREEN
+ );
+
+ return ExitCode::OK;
+ } finally {
+ $mutex->release('marketplace:flowwow-retry');
+ }
}
public function actionGetYandexOrders()
{
- $fromDate = date('d-m-Y', strtotime('-1 day'));
- $toDate = null;
- $status = null;
- $substatus = null;
-
- $campaignIds = MarketplaceStore::find()
- ->select(['warehouse_guid'])
- ->where(['warehouse_id' => MarketplaceStore::YANDEX_WAREHOUSE_ID])
- ->column();
+ $mutex = Yii::$app->mutex;
+ if (!$mutex->acquire('marketplace:yandex-orders', 0)) {
+ Yii::warning('actionGetYandexOrders: уже выполняется, пропуск', 'marketplace');
+ return ExitCode::OK;
+ }
- $allOrders = MarketplaceService::fetchOrders($campaignIds, $fromDate, $toDate, $status, $substatus);
+ try {
+ $fromDate = date('d-m-Y', strtotime('-1 day'));
+ $toDate = null;
+ $status = null;
+ $substatus = null;
- $result = MarketplaceService::processOrders($allOrders);
+ $campaignIds = MarketplaceStore::find()
+ ->select(['warehouse_guid'])
+ ->where(['warehouse_id' => MarketplaceStore::YANDEX_WAREHOUSE_ID])
+ ->column();
- $newOrders = $result['newOrders'];
- $updateOrders = $result['updateOrders'];
- $storeCount = count($allOrders);
+ $allOrders = MarketplaceService::fetchOrders($campaignIds, $fromDate, $toDate, $status, $substatus);
- $this->stdout(
- "Удалось сохранить {$newOrders} новых заказов из {$storeCount} и обновить {$updateOrders} от {$fromDate}. \n",
- BaseConsole::FG_GREEN
- );
+ $result = MarketplaceService::processOrders($allOrders);
- return ExitCode::OK;
+ $newOrders = $result['newOrders'];
+ $updateOrders = $result['updateOrders'];
+ $storeCount = count($allOrders);
+
+ $this->stdout(
+ "Удалось сохранить {$newOrders} новых заказов из {$storeCount} и обновить {$updateOrders} от {$fromDate}. \n",
+ BaseConsole::FG_GREEN
+ );
+
+ return ExitCode::OK;
+ } finally {
+ $mutex->release('marketplace:yandex-orders');
+ }
}
public function options($actionID)
*/
public function actionCheckReadyTo1c(): int
{
- $count = MarketplaceService::forceReadyTo1cByTimeout(15);
- $this->stdout("Помечено готовыми к отправке в 1С: {$count} заказов\n");
- return ExitCode::OK;
+ $mutex = Yii::$app->mutex;
+ if (!$mutex->acquire('marketplace:check-ready-to-1c', 0)) {
+ Yii::warning('actionCheckReadyTo1c: уже выполняется, пропуск', 'marketplace');
+ return ExitCode::OK;
+ }
+
+ try {
+ $count = MarketplaceService::forceReadyTo1cByTimeout(15);
+ $this->stdout("Помечено готовыми к отправке в 1С: {$count} заказов\n");
+ return ExitCode::OK;
+ } finally {
+ $mutex->release('marketplace:check-ready-to-1c');
+ }
}
}