Blame view

console/controllers/ParserController.php 4.17 KB
2edfb901   Mihail   add PriceWriter a...
1
  <?php
2d10c44d   Mihail   temp commit - wor...
2
3
  namespace console\controllers;
  
2edfb901   Mihail   add PriceWriter a...
4
  use yii\console\Controller;
93e39994   Mihail   fixed parser and ...
5
6
7
  use yii\helpers\Console;
  use common\components\PriceWriter;
  use backend\models\ImportersFiles;
34d480b7   Mihail   temp commit - wor...
8
9
  use backend\models\Importers;
  use yii\base\ErrorException;
2edfb901   Mihail   add PriceWriter a...
10
  
0bec979b   Mihail   finish with xml a...
11
12
  class ParserController extends Controller
  {
34d480b7   Mihail   temp commit - wor...
13
  
0bec979b   Mihail   finish with xml a...
14
      public function actionParseCsv()
2edfb901   Mihail   add PriceWriter a...
15
      {
0bec979b   Mihail   finish with xml a...
16
17
18
19
          \Yii::info('Начало загрузки файлов прайсов csv', 'parser');
          foreach (glob(\Yii::getAlias('@auto_upload') . '/*.csv') as $file_path) {
              $file_name = basename($file_path, ".csv");
              \Yii::info("Обработка файла - $file_path", 'parser');
df629228   Mihail   console csv parsing
20
              $importer_id = ImportersFiles::findOne(['id' => $file_name])->importer_id;
0bec979b   Mihail   finish with xml a...
21
              $keys = Importers::findOne(['id' => $importer_id])->keys;
34d480b7   Mihail   temp commit - wor...
22
  
df629228   Mihail   console csv parsing
23
24
25
26
27
              $config = ['record_id' => $file_name,
                  'importer_id' => $importer_id,
                  'parser_config' => ['keys' => $keys,
                      'mode' => 'console']
              ];
0bec979b   Mihail   finish with xml a...
28
29
30
31
32
              if ($this->parseFileConsole($file_path, $config)) {
                  unlink(\Yii::getAlias('@temp_upload') . '/' . $file_name . '.csv');
                  \Yii::info("Загрузка файла - $file_path успешно завершена", 'parser');
              } else {
                  \Yii::error("Загрузка файла - $file_path завершена с ошибкой", 'parser');
df629228   Mihail   console csv parsing
33
              }
0bec979b   Mihail   finish with xml a...
34
35
              //при любом завершении скрипта файл с очереди автозагрузки нужно удалить
              unlink(\Yii::getAlias('@auto_upload') . '/' . $file_name . '.csv');
df629228   Mihail   console csv parsing
36
          }
34d480b7   Mihail   temp commit - wor...
37
  
2edfb901   Mihail   add PriceWriter a...
38
      }
34d480b7   Mihail   temp commit - wor...
39
  
2edfb901   Mihail   add PriceWriter a...
40
  
93e39994   Mihail   fixed parser and ...
41
      protected function parseFileConsole( $file_path, $configuration ){
34d480b7   Mihail   temp commit - wor...
42
43
  
          if( !file_exists( $file_path ) )
df629228   Mihail   console csv parsing
44
              throw new ErrorException("$file_path - файл не найден!");
34d480b7   Mihail   temp commit - wor...
45
  
93e39994   Mihail   fixed parser and ...
46
47
48
49
          $parser_config = [];
          if ( isset( $configuration['parser_config'] ) ) {
              $parser_config = $configuration['parser_config'];
          }
34d480b7   Mihail   temp commit - wor...
50
          $data = \Yii::$app->multiparser->parse( $file_path, $parser_config );
df629228   Mihail   console csv parsing
51
52
53
54
          if (! $data) {
              // @todo переделать, что бы ошибка автоматически останавливала сценарий
              return false;
          }
2edfb901   Mihail   add PriceWriter a...
55
  
93e39994   Mihail   fixed parser and ...
56
57
58
59
          $writer = new PriceWriter();
          $writer->configuration = $configuration;
          $writer->data = $data;
          $writer->mode = 1; //console-режим
df629228   Mihail   console csv parsing
60
  
93e39994   Mihail   fixed parser and ...
61
          if ( $writer->writeDataToDB() ){
df629228   Mihail   console csv parsing
62
  
93e39994   Mihail   fixed parser and ...
63
64
              return true;
          }
2edfb901   Mihail   add PriceWriter a...
65
  
93e39994   Mihail   fixed parser and ...
66
          return false;
2edfb901   Mihail   add PriceWriter a...
67
      }
2d10c44d   Mihail   temp commit - wor...
68
  
df629228   Mihail   console csv parsing
69
70
      public function actionParseXml ()
      {
0bec979b   Mihail   finish with xml a...
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
           \Yii::info('Начало загрузки файлов прайсов xml', 'parser');
          foreach (glob(\Yii::getAlias('@auto_upload') . '/*.xml') as $file_path) {
              $file_name = basename($file_path, ".xml");
                    \Yii::info("Обработка файла - $file_path", 'parser');
  
              $files_model = new ImportersFiles();
              // id поставщика всегда = 1 - Склад
              $files_model->importer_id = 1;
              try {
                  $files_model->save();
              } catch (ErrorException  $e) {
                  throw $e;
              }
              // получим id только что записанной записи
              $record_id = $files_model->find()
                  ->where(['importer_id' => $files_model->importer_id])
                  ->orderBy(['id' => SORT_DESC])
                  ->one()
                  ->id;
  
              $config = ['record_id' => $record_id,
                  'importer_id' => 1,
                  'parser_config' => [
                      'mode' => 'console']
              ];
df629228   Mihail   console csv parsing
96
  
0bec979b   Mihail   finish with xml a...
97
98
99
100
101
102
103
              if ($this->parseFileConsole($file_path, $config)) {
                  unlink(\Yii::getAlias('@auto_upload') . '/' . $file_name . '.xml');
                          \Yii::info("Загрузка файла - $file_path успешно завершена", 'parser');
              } else {
                          \Yii::error("Загрузка файла - $file_path завершена с ошибкой", 'parser');
              }
          }
df629228   Mihail   console csv parsing
104
105
      }
  
0bec979b   Mihail   finish with xml a...
106
      public function actionTest()
2d10c44d   Mihail   temp commit - wor...
107
      {
34d480b7   Mihail   temp commit - wor...
108
          Console::output('It is working ');
0bec979b   Mihail   finish with xml a...
109
          \Yii::info('2', 'parser');
2d10c44d   Mihail   temp commit - wor...
110
111
  
      }
2edfb901   Mihail   add PriceWriter a...
112
  }