]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Генерация и отдача файлов
authorVladimir Fomichev <vladimir.fomichev@erp-flowers.ru>
Fri, 12 Sep 2025 11:19:32 +0000 (14:19 +0300)
committerVladimir Fomichev <vladimir.fomichev@erp-flowers.ru>
Fri, 12 Sep 2025 11:19:32 +0000 (14:19 +0300)
erp24/commands/MarketplaceController.php
erp24/config/console.php
erp24/config/web.php
erp24/media/config/media.config.php
erp24/media/controllers/FlowwowController.php

index a86b8fd6473fe910fa9c64e699fc9fefcfd1f1a5..10e89c395c252983cd3338c713776fd79102f1f0 100644 (file)
@@ -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;
+    }
 }
index 4e1d12ef5e26b5cbbc4ad02027eef755fb5b013e..22b02f94c33505396f7b1195aab9f05829a2bc19 100755 (executable)
@@ -18,6 +18,7 @@ $config = [
         '@bower' => '@vendor/bower-asset',
         '@npm'   => '@vendor/npm-asset',
         '@tests' => '@app/tests',
+        '@feeds'  => '@app/media/feeds',
     ],
     'timeZone' => 'Europe/Moscow',
     'components' => [
index 5381261e039dfb18796a657aebaf5582ab05cc39..37c327a73b7c3c0a402616a3345a6b538917cb14 100644 (file)
@@ -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',
index 36a4580db4ed3df81798860287b58e676871a056..f4b3eba97bb11365e3b2182f11696cc3abc8bc84 100644 (file)
@@ -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',
index f600ad647eb4e1e9ca2c8da781acd2f2af817d59..18d2db5c3fbdc9e022a60d49f33e4b3d6cc3cbe7 100644 (file)
@@ -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()