Blame view

console/controllers/ParserController.php 6.71 KB
2edfb901   Mihail   add PriceWriter a...
1
  <?php
2d10c44d   Mihail   temp commit - wor...
2
3
  namespace console\controllers;
  
57e5a4b9   Mihail   add classes to wo...
4
  use common\components\archive_reader\ArchiveCreator;
d3cf6647   Mihail   add multiply pric...
5
  use common\components\CustomVarDamp;
7f6a9301   Mihail   add mails classes
6
7
  use common\components\mail\ImapMailReader;
  use common\components\mail\MailAttachmentsSaver;
2edfb901   Mihail   add PriceWriter a...
8
  use yii\console\Controller;
93e39994   Mihail   fixed parser and ...
9
10
11
  use yii\helpers\Console;
  use common\components\PriceWriter;
  use backend\models\ImportersFiles;
34d480b7   Mihail   temp commit - wor...
12
13
  use backend\models\Importers;
  use yii\base\ErrorException;
2edfb901   Mihail   add PriceWriter a...
14
  
0bec979b   Mihail   finish with xml a...
15
16
  class ParserController extends Controller
  {
0bec979b   Mihail   finish with xml a...
17
      public function actionParseCsv()
2edfb901   Mihail   add PriceWriter a...
18
      {
0bec979b   Mihail   finish with xml a...
19
20
21
22
          \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
23
              $importer_id = ImportersFiles::findOne(['id' => $file_name])->importer_id;
d3cf6647   Mihail   add multiply pric...
24
25
26
27
28
29
30
31
32
              $current_importer = Importers::findOne(['id' => $importer_id]);
              $keys = $current_importer->keys;
              $mult_array = $current_importer->multiply;
  
              // получим настройки ценообразования и передадим их отдельно в конвертер
              $sign = '';
              $multiplier = '';
              extract( $mult_array );
  
34d480b7   Mihail   temp commit - wor...
33
  
df629228   Mihail   console csv parsing
34
35
36
              $config = ['record_id' => $file_name,
                  'importer_id' => $importer_id,
                  'parser_config' => ['keys' => $keys,
d3cf6647   Mihail   add multiply pric...
37
                      'converter_conf' =>
ffd4b834   Mihail   add articul filte...
38
                      [ 'sign' => $sign, 'multiplier' => $multiplier, 'importer_id' => $importer_id ],
df629228   Mihail   console csv parsing
39
40
                      'mode' => 'console']
              ];
0bec979b   Mihail   finish with xml a...
41
42
43
44
45
              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
46
              }
0bec979b   Mihail   finish with xml a...
47
48
              //при любом завершении скрипта файл с очереди автозагрузки нужно удалить
              unlink(\Yii::getAlias('@auto_upload') . '/' . $file_name . '.csv');
df629228   Mihail   console csv parsing
49
          }
34d480b7   Mihail   temp commit - wor...
50
  
2edfb901   Mihail   add PriceWriter a...
51
      }
34d480b7   Mihail   temp commit - wor...
52
  
2edfb901   Mihail   add PriceWriter a...
53
  
93e39994   Mihail   fixed parser and ...
54
      protected function parseFileConsole( $file_path, $configuration ){
34d480b7   Mihail   temp commit - wor...
55
56
  
          if( !file_exists( $file_path ) )
df629228   Mihail   console csv parsing
57
              throw new ErrorException("$file_path - файл не найден!");
34d480b7   Mihail   temp commit - wor...
58
  
93e39994   Mihail   fixed parser and ...
59
60
61
62
          $parser_config = [];
          if ( isset( $configuration['parser_config'] ) ) {
              $parser_config = $configuration['parser_config'];
          }
34d480b7   Mihail   temp commit - wor...
63
          $data = \Yii::$app->multiparser->parse( $file_path, $parser_config );
d3cf6647   Mihail   add multiply pric...
64
          if ( ! $data ) {
3c4b566f   Mihail   add XlsxParser
65
              throw new ErrorException("Ошибка обработки файла прайса!");
df629228   Mihail   console csv parsing
66
          }
2edfb901   Mihail   add PriceWriter a...
67
  
93e39994   Mihail   fixed parser and ...
68
69
70
71
          $writer = new PriceWriter();
          $writer->configuration = $configuration;
          $writer->data = $data;
          $writer->mode = 1; //console-режим
df629228   Mihail   console csv parsing
72
  
93e39994   Mihail   fixed parser and ...
73
          if ( $writer->writeDataToDB() ){
df629228   Mihail   console csv parsing
74
  
93e39994   Mihail   fixed parser and ...
75
76
              return true;
          }
2edfb901   Mihail   add PriceWriter a...
77
  
93e39994   Mihail   fixed parser and ...
78
          return false;
2edfb901   Mihail   add PriceWriter a...
79
      }
2d10c44d   Mihail   temp commit - wor...
80
  
df629228   Mihail   console csv parsing
81
82
      public function actionParseXml ()
      {
0bec979b   Mihail   finish with xml a...
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
           \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
108
  
0bec979b   Mihail   finish with xml a...
109
              if ($this->parseFileConsole($file_path, $config)) {
3c4b566f   Mihail   add XlsxParser
110
                  //unlink(\Yii::getAlias('@auto_upload') . '/' . $file_name . '.xml');
0bec979b   Mihail   finish with xml a...
111
112
113
114
115
                          \Yii::info("Загрузка файла - $file_path успешно завершена", 'parser');
              } else {
                          \Yii::error("Загрузка файла - $file_path завершена с ошибкой", 'parser');
              }
          }
df629228   Mihail   console csv parsing
116
117
      }
  
0bec979b   Mihail   finish with xml a...
118
      public function actionTest()
2d10c44d   Mihail   temp commit - wor...
119
      {
57e5a4b9   Mihail   add classes to wo...
120
          Console::output('It is working');
0bec979b   Mihail   finish with xml a...
121
          \Yii::info('2', 'parser');
2d10c44d   Mihail   temp commit - wor...
122
123
  
      }
7f6a9301   Mihail   add mails classes
124
125
126
127
128
129
130
  
      public function actionSaveMailAttachments()
      {
          \Yii::info('Начало сохранения файлов почты', 'mail');
  
          $mail_reader = new ImapMailReader( '{imap.gmail.com:993/imap/ssl/novalidate-cert}', 'tsurkanovm@gmail.com', 'Wtvr@2000' );
          $mailboxes = $mail_reader->getListMailboxes();
57e5a4b9   Mihail   add classes to wo...
131
132
133
          foreach ( $mailboxes as $custom_label ) {
              $words = explode(" ",str_replace( array($mail_reader->getHostname(),"!"),"",imap_utf7_decode($custom_label)) );
              $importer_id = (int)preg_replace("/[^A-Z0-9]+/","", strtoupper($words[0]));
7f6a9301   Mihail   add mails classes
134
  
57e5a4b9   Mihail   add classes to wo...
135
              $mail_reader->reOpen( $custom_label );
7f6a9301   Mihail   add mails classes
136
137
138
139
              $saver = new MailAttachmentsSaver( $mail_reader, 'UNSEEN' );
              $saver->file_name_parefix = $importer_id . '~!~';
              $saver->saveAttachmentsTo(\Yii::getAlias('@temp_upload'));
  
7f6a9301   Mihail   add mails classes
140
141
          }
  
57e5a4b9   Mihail   add classes to wo...
142
143
144
145
146
147
148
149
150
151
152
          $files = $saver->getSavedFilesArr();
          $arch_creator = new ArchiveCreator();
          $arch_extensions = $arch_creator->getHandleExtension();
          $files_on_unpack = array_intersect( $files , $arch_extensions );
          foreach ($files_on_unpack as $arch_ext => $arch_name) {
              $arch_reader = $arch_creator->create( $arch_name, $arch_ext);
              $arch_reader->extractTo(\Yii::getAlias('@temp_upload'));
              unset( $files[$arch_name] );
              $files = array_merge( $files, $arch_reader->getExtractedFiles());
          }
  
4f3f27e8   Mihail   temp commit - tes...
153
154
155
156
157
158
159
160
          foreach ( $files as $name => $ext ) {
              $file_name = '';
              if( $ext = 'csv' ){
                  $files_model = new ImportersFiles();
                  $files_model->importer_id = $importer_id;
                  if ($files_model->save()) {
                      $file_name = \Yii::$app->db->getLastInsertID();
                  } // обработчик ошибки !!!!!
57e5a4b9   Mihail   add classes to wo...
161
  
4f3f27e8   Mihail   temp commit - tes...
162
              }
57e5a4b9   Mihail   add classes to wo...
163
  
4f3f27e8   Mihail   temp commit - tes...
164
              // переписываем файл в автолоад папку, и переименовываем если указано имя
57e5a4b9   Mihail   add classes to wo...
165
          }
7f6a9301   Mihail   add mails classes
166
167
  
      }
2edfb901   Mihail   add PriceWriter a...
168
  }