From: Vladimir Fomichev Date: Fri, 12 Sep 2025 11:19:32 +0000 (+0300) Subject: Генерация и отдача файлов X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=f8a31483da716e96c6829c728003d04c4abf5ec3;p=erp24_rep%2Fyii-erp24%2F.git Генерация и отдача файлов --- diff --git a/erp24/commands/MarketplaceController.php b/erp24/commands/MarketplaceController.php index a86b8fd6..10e89c39 100644 --- a/erp24/commands/MarketplaceController.php +++ b/erp24/commands/MarketplaceController.php @@ -12,6 +12,8 @@ use yii\console\Controller; use yii\console\ExitCode; use yii\helpers\ArrayHelper; use yii\helpers\BaseConsole; +use yii\helpers\FileHelper; +use yii\web\Response; use yii_app\records\MarketplaceOrders; use yii_app\records\MarketplaceStore; use yii_app\records\MatrixErp; @@ -207,4 +209,32 @@ class MarketplaceController extends Controller } return ExitCode::OK; } + + public function actionFlowwowFeedFile() { + $marketplaceStoreIds = MarketplaceStore::find() + ->select('warehouse_guid') + ->where(['warehouse_id' => MarketplaceStore::FLOWWOW_WAREHOUSE_ID]) + ->column(); + foreach ($marketplaceStoreIds as $key => $id) { + $balanceInfo = MarketplaceService::infoForMarketplace(1); + Yii::error('Баланс ' . json_encode($balanceInfo, JSON_UNESCAPED_UNICODE)); + $productsInfo = MarketplaceService::getProductsInfoForFeed($id, $balanceInfo); + Yii::error('Инфо товаров ' . json_encode($productsInfo, JSON_UNESCAPED_UNICODE)); + $xmlFeed = MarketplaceService::createXMLFeed($productsInfo); + $dir = Yii::getAlias('@feeds'); + FileHelper::createDirectory($dir, 0775, true); + + $filename = sprintf('%s_%d.xml', 'feed',$id); + $path = $dir . DIRECTORY_SEPARATOR . $filename; + + if (file_put_contents($path, $xmlFeed) === false) { + $this->stderr("Не удалось записать файл: {$path}\n", BaseConsole::FG_RED); + continue; + } + + $this->stdout("Фид сохранён: {$path}\n", BaseConsole::FG_GREEN); + } + + return ExitCode::OK; + } } diff --git a/erp24/config/console.php b/erp24/config/console.php index 4e1d12ef..22b02f94 100755 --- a/erp24/config/console.php +++ b/erp24/config/console.php @@ -18,6 +18,7 @@ $config = [ '@bower' => '@vendor/bower-asset', '@npm' => '@vendor/npm-asset', '@tests' => '@app/tests', + '@feeds' => '@app/media/feeds', ], 'timeZone' => 'Europe/Moscow', 'components' => [ diff --git a/erp24/config/web.php b/erp24/config/web.php index 5381261e..37c327a7 100644 --- a/erp24/config/web.php +++ b/erp24/config/web.php @@ -15,6 +15,7 @@ $config = [ '@uploads' => dirname(__DIR__, 1) . "/uploads", '@data-path' => dirname(__DIR__, 1) . "/data", '@uploads-images-path' => "@uploads/images", + '@feeds' => '@app/media/feeds', ], 'modules' => [ 'gridview' => [ @@ -51,6 +52,10 @@ $config = [ + ], + 'puppeteer' => [ + 'class' => \yii_app\services\FlowwowService::class, + 'endpoint' => 'http://node-yii_erp24:3030', ], 'cache' => [ 'class' => 'yii\caching\FileCache', diff --git a/erp24/media/config/media.config.php b/erp24/media/config/media.config.php index 36a4580d..f4b3eba9 100644 --- a/erp24/media/config/media.config.php +++ b/erp24/media/config/media.config.php @@ -97,6 +97,7 @@ return [ '@npm' => '@vendor/npm-asset', '@dist' => '@app/dist', '@uploads' => "@yii_app/uploads", + '@feeds' => '@app/media/feeds', ], 'params' => require dirname(__DIR__, 2) . '/config/params.php', 'timeZone' => 'Europe/Moscow', diff --git a/erp24/media/controllers/FlowwowController.php b/erp24/media/controllers/FlowwowController.php index f600ad64..18d2db5c 100644 --- a/erp24/media/controllers/FlowwowController.php +++ b/erp24/media/controllers/FlowwowController.php @@ -23,23 +23,19 @@ class FlowwowController extends Controller /** * Экшен для генерации и отображения XML-фида. * - * @return string + * @return Response|\yii\console\Response */ public function actionFeed($id) { - $balanceInfo = MarketplaceService::infoForMarketplace(1); - Yii::error('Баланс ' . json_encode($balanceInfo, JSON_UNESCAPED_UNICODE)); - $productsInfo = MarketplaceService::getProductsInfoForFeed($id, $balanceInfo); - Yii::error('Инфо товаров ' . json_encode($productsInfo, JSON_UNESCAPED_UNICODE)); - // $productsInfo = MarketplaceService::getAllProductsInfo($id); - - - $xmlFeed = MarketplaceService::createXMLFeed($productsInfo); - Yii::error('Фид ' . json_encode($xmlFeed, JSON_UNESCAPED_UNICODE)); - Yii::$app->response->format = Response::FORMAT_RAW; - Yii::$app->response->headers->add('Content-Type', 'application/xml; charset=utf-8'); - - return $xmlFeed; + $dir = Yii::getAlias('@feeds'); + $matches = glob($dir . DIRECTORY_SEPARATOR . "feed_{$id}.xml") ?: []; + if (!$matches) { + throw new \yii\web\NotFoundHttpException('Фид ещё не сгенерирован'); } + + return Yii::$app->response->sendFile($matches[0], basename($matches[0]), [ + 'mimeType' => 'application/xml; charset=utf-8', + 'inline' => true, + ]); } public function actionTest()