Blame view

console/controllers/ParserController.php 6.7 KB
f0dbd829   Mihail   add PriceWriter a...
1
  <?php
db543d22   Mihail   temp commit - wor...
2
3
  namespace console\controllers;
  
8f043ab6   Mihail   add classes to wo...
4
  use common\components\archive_reader\ArchiveCreator;
78684ed4   Mihail   add multiply pric...
5
  use common\components\CustomVarDamp;
8b0defd0   Mihail   add mails classes
6
7
  use common\components\mail\ImapMailReader;
  use common\components\mail\MailAttachmentsSaver;
f0dbd829   Mihail   add PriceWriter a...
8
  use yii\console\Controller;
1fe29bbe   Mihail   fixed parser and ...
9
10
11
  use yii\helpers\Console;
  use common\components\PriceWriter;
  use backend\models\ImportersFiles;
ef41533d   Mihail   temp commit - wor...
12
13
  use backend\models\Importers;
  use yii\base\ErrorException;
f0dbd829   Mihail   add PriceWriter a...
14
  
48b58a13   Mihail   finish with xml a...
15
16
  class ParserController extends Controller
  {
48b58a13   Mihail   finish with xml a...
17
      public function actionParseCsv()
f0dbd829   Mihail   add PriceWriter a...
18
      {
48b58a13   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');
ea4ecf3d   Mihail   console csv parsing
23
              $importer_id = ImportersFiles::findOne(['id' => $file_name])->importer_id;
78684ed4   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 );
  
ef41533d   Mihail   temp commit - wor...
33
  
ea4ecf3d   Mihail   console csv parsing
34
35
36
              $config = ['record_id' => $file_name,
                  'importer_id' => $importer_id,
                  'parser_config' => ['keys' => $keys,
78684ed4   Mihail   add multiply pric...
37
                      'converter_conf' =>
97dbfb3f   Administrator   upload project
38
39
                      ['sign' => $sign,
                      'multiplier' => $multiplier],
ea4ecf3d   Mihail   console csv parsing
40
41
                      'mode' => 'console']
              ];
48b58a13   Mihail   finish with xml a...
42
43
44
45
46
              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');
ea4ecf3d   Mihail   console csv parsing
47
              }
48b58a13   Mihail   finish with xml a...
48
49
              //при любом завершении скрипта файл с очереди автозагрузки нужно удалить
              unlink(\Yii::getAlias('@auto_upload') . '/' . $file_name . '.csv');
ea4ecf3d   Mihail   console csv parsing
50
          }
ef41533d   Mihail   temp commit - wor...
51
  
f0dbd829   Mihail   add PriceWriter a...
52
      }
ef41533d   Mihail   temp commit - wor...
53
  
f0dbd829   Mihail   add PriceWriter a...
54
  
1fe29bbe   Mihail   fixed parser and ...
55
      protected function parseFileConsole( $file_path, $configuration ){
ef41533d   Mihail   temp commit - wor...
56
57
  
          if( !file_exists( $file_path ) )
ea4ecf3d   Mihail   console csv parsing
58
              throw new ErrorException("$file_path - файл не найден!");
ef41533d   Mihail   temp commit - wor...
59
  
1fe29bbe   Mihail   fixed parser and ...
60
61
62
63
          $parser_config = [];
          if ( isset( $configuration['parser_config'] ) ) {
              $parser_config = $configuration['parser_config'];
          }
ef41533d   Mihail   temp commit - wor...
64
          $data = \Yii::$app->multiparser->parse( $file_path, $parser_config );
78684ed4   Mihail   add multiply pric...
65
          if ( ! $data ) {
78fd7100   Mihail   add XlsxParser
66
              throw new ErrorException("Ошибка обработки файла прайса!");
ea4ecf3d   Mihail   console csv parsing
67
          }
f0dbd829   Mihail   add PriceWriter a...
68
  
1fe29bbe   Mihail   fixed parser and ...
69
70
71
72
          $writer = new PriceWriter();
          $writer->configuration = $configuration;
          $writer->data = $data;
          $writer->mode = 1; //console-режим
ea4ecf3d   Mihail   console csv parsing
73
  
1fe29bbe   Mihail   fixed parser and ...
74
          if ( $writer->writeDataToDB() ){
ea4ecf3d   Mihail   console csv parsing
75
  
1fe29bbe   Mihail   fixed parser and ...
76
77
              return true;
          }
f0dbd829   Mihail   add PriceWriter a...
78
  
1fe29bbe   Mihail   fixed parser and ...
79
          return false;
f0dbd829   Mihail   add PriceWriter a...
80
      }
db543d22   Mihail   temp commit - wor...
81
  
ea4ecf3d   Mihail   console csv parsing
82
83
      public function actionParseXml ()
      {
48b58a13   Mihail   finish with xml a...
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
           \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']
              ];
ea4ecf3d   Mihail   console csv parsing
109
  
48b58a13   Mihail   finish with xml a...
110
              if ($this->parseFileConsole($file_path, $config)) {
78fd7100   Mihail   add XlsxParser
111
                  //unlink(\Yii::getAlias('@auto_upload') . '/' . $file_name . '.xml');
48b58a13   Mihail   finish with xml a...
112
113
114
115
116
                          \Yii::info("Загрузка файла - $file_path успешно завершена", 'parser');
              } else {
                          \Yii::error("Загрузка файла - $file_path завершена с ошибкой", 'parser');
              }
          }
ea4ecf3d   Mihail   console csv parsing
117
118
      }
  
48b58a13   Mihail   finish with xml a...
119
      public function actionTest()
db543d22   Mihail   temp commit - wor...
120
      {
8f043ab6   Mihail   add classes to wo...
121
          Console::output('It is working');
48b58a13   Mihail   finish with xml a...
122
          \Yii::info('2', 'parser');
db543d22   Mihail   temp commit - wor...
123
124
  
      }
8b0defd0   Mihail   add mails classes
125
126
127
128
129
130
131
  
      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();
8f043ab6   Mihail   add classes to wo...
132
133
134
          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]));
8b0defd0   Mihail   add mails classes
135
  
8f043ab6   Mihail   add classes to wo...
136
              $mail_reader->reOpen( $custom_label );
8b0defd0   Mihail   add mails classes
137
138
139
140
              $saver = new MailAttachmentsSaver( $mail_reader, 'UNSEEN' );
              $saver->file_name_parefix = $importer_id . '~!~';
              $saver->saveAttachmentsTo(\Yii::getAlias('@temp_upload'));
  
8b0defd0   Mihail   add mails classes
141
142
          }
  
8f043ab6   Mihail   add classes to wo...
143
144
145
146
147
148
149
150
151
152
153
          $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());
          }
  
c4da20f0   Mihail   temp commit - tes...
154
155
156
157
158
159
160
161
          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();
                  } // обработчик ошибки !!!!!
8f043ab6   Mihail   add classes to wo...
162
  
c4da20f0   Mihail   temp commit - tes...
163
              }
8f043ab6   Mihail   add classes to wo...
164
  
c4da20f0   Mihail   temp commit - tes...
165
              // переписываем файл в автолоад папку, и переименовываем если указано имя
8f043ab6   Mihail   add classes to wo...
166
          }
8b0defd0   Mihail   add mails classes
167
168
  
      }
f0dbd829   Mihail   add PriceWriter a...
169
  }