Blame view

common/components/PriceWriter.php 4.67 KB
f0dbd829   Mihail   add PriceWriter a...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  <?php
  /**
   * Created by PhpStorm.
   * User: Cibermag
   * Date: 30.09.2015
   * Time: 9:34
   */
  
  namespace common\components;
  
  
  use yii\base\ErrorException;
  use backend\models\ImportersFiles;
  use backend\models\Importers;
  use backend\models\Details;
  
40cac1b6   Mihail   add delete func i...
17
18
19
20
21
22
23
24
25
26
27
  /**
   * Class PriceWriter
   * @package common\components
   * записывает в БД отпарсенные данные
   * запись происходит в несколько таблиц
   */
  class PriceWriter
  {
      /**
       * @var - int - 0 - интерактивный режим, 1 - консольный
       */
f0dbd829   Mihail   add PriceWriter a...
28
      public $mode;
40cac1b6   Mihail   add delete func i...
29
30
31
32
  
      /**
       * @var - массив с настройками записи
       */
f0dbd829   Mihail   add PriceWriter a...
33
      public $configuration;
40cac1b6   Mihail   add delete func i...
34
35
36
37
  
      /**
       * @var - массив с данными которые нужно записать
       */
f0dbd829   Mihail   add PriceWriter a...
38
      public $data;
f0dbd829   Mihail   add PriceWriter a...
39
  
40cac1b6   Mihail   add delete func i...
40
41
42
43
44
45
      function __construct()
      {
          set_time_limit(300);
      }
  
      public function writeDataToDB()
f0dbd829   Mihail   add PriceWriter a...
46
47
48
      {
          // 1. запишем дату старта в таблицу файлов поставщика (ImportersFiles)
          // id  загруженного файла получим из конфигурации
40cac1b6   Mihail   add delete func i...
49
          $files_model = ImportersFiles::findOne($this->configuration['record_id']);
f0dbd829   Mihail   add PriceWriter a...
50
  
f0dbd829   Mihail   add PriceWriter a...
51
52
53
54
          $update_date = date('Y-m-d H:i:s');
          $files_model->time_start = $update_date;
          // запишем дату начала загрузки
          if (!$files_model->save()) {
40cac1b6   Mihail   add delete func i...
55
              throw new \ErrorException(implode(', ', $files_model->getErrors()));
f0dbd829   Mihail   add PriceWriter a...
56
57
          }
  
f0dbd829   Mihail   add PriceWriter a...
58
59
          // 2. запишем полученные данные в таблицу товаров (Details)
          $details_model = new Details();
ef41533d   Mihail   temp commit - wor...
60
          // только для ручной загрузки, в авто режиме все делает конвертер при первом же проходе (в процессе парсинга)
ea4ecf3d   Mihail   console csv parsing
61
          if ($this->mode == 0) {
ef41533d   Mihail   temp commit - wor...
62
63
              // преобразуем числовые значения
              foreach ($this->data as &$row) {
d5c6d7e0   Mihail   finish with xml a...
64
  
67adc788   Mihail   add converter int...
65
66
                  $row['PRICE'] = \Yii::$app->converter->convertTo('float',$row['PRICE']);
                  $row['BOX'] = \Yii::$app->converter->convertTo('integer',$row['BOX']);
ef41533d   Mihail   temp commit - wor...
67
                  // присвоим полный артикул
7776ca75   Mihail   add form, model a...
68
  
ef41533d   Mihail   temp commit - wor...
69
                  $row['FULL_ARTICLE'] = $row['ARTICLE'];
7776ca75   Mihail   add form, model a...
70
                  if ((int)$this->configuration['delete_prefix']) {
67adc788   Mihail   add converter int...
71
                      $row = \Yii::$app->converter->convertTo( 'Article', $row, ['importer_id' => $this->configuration['importer_id']] );
7776ca75   Mihail   add form, model a...
72
                  } else {
67adc788   Mihail   add converter int...
73
                      $row['ARTICLE'] = \Yii::$app->converter->convertTo( 'Article', $row['ARTICLE'] );
7776ca75   Mihail   add form, model a...
74
75
76
                  }
  
  
40cac1b6   Mihail   add delete func i...
77
                  if (isset($row['ADD_BOX']))
67adc788   Mihail   add converter int...
78
                      $row['ADD_BOX'] = \Yii::$app->converter->convertTo( 'integer', $row['ADD_BOX'] );
ef41533d   Mihail   temp commit - wor...
79
80
81
  
                  // проверим все ли обязательные колонки были указаны пользователем
                  $details_model->load(['Details' => $row]);
ef41533d   Mihail   temp commit - wor...
82
83
84
85
86
                  if (!$details_model->validate())
                      //@todo предоставить более детальную информацию об ошибке
                      throw new \ErrorException('Ошибка записи товаров');
  
              }
f0dbd829   Mihail   add PriceWriter a...
87
          }
ef41533d   Mihail   temp commit - wor...
88
  
40cac1b6   Mihail   add delete func i...
89
          // дополним данные значением импортера и даты обновления цены
67adc788   Mihail   add converter int...
90
          $this->data = CustomArrayHelper::addColumns( $this->data, ['IMPORT_ID' => $this->configuration['importer_id'], 'timestamp' => $update_date] );
40cac1b6   Mihail   add delete func i...
91
92
          try {
              //@todo add transaction
f0dbd829   Mihail   add PriceWriter a...
93
  
78fd7100   Mihail   add XlsxParser
94
              if ( isset($this->configuration['delete_price']) && (int)$this->configuration['delete_price'] ) {
40cac1b6   Mihail   add delete func i...
95
96
97
98
                  $details_model->delete_price = true;
              }
              //2. попытаемся вставить данные в БД с апдейтом по ключам
              $details_model->ManualInsert($this->data, $this->configuration['importer_id']);
f0dbd829   Mihail   add PriceWriter a...
99
  
40cac1b6   Mihail   add delete func i...
100
101
102
103
              // 3. зафиксируем дату конца загрузки в файлах поставщика
              if (!$files_model->save()) {
                  throw new \ErrorException(implode(', ', $files_model->getErrors()));
              }
f0dbd829   Mihail   add PriceWriter a...
104
  
40cac1b6   Mihail   add delete func i...
105
106
107
              // 4. зафиксируем дату загрузки в таблице поставщиков
              $imp_model = Importers::findOne($this->configuration['importer_id']);
              $imp_model->price_date_update = $update_date;
f0dbd829   Mihail   add PriceWriter a...
108
  
40cac1b6   Mihail   add delete func i...
109
110
              if (!$imp_model->save()) {
                  throw new \ErrorException(implode(', ', $imp_model->getErrors()));
f0dbd829   Mihail   add PriceWriter a...
111
              }
40cac1b6   Mihail   add delete func i...
112
113
114
          } catch (ErrorException  $e) {
              throw new \ErrorException($e->getMessage());
          }
f0dbd829   Mihail   add PriceWriter a...
115
116
117
118
  
  
          return true;
      }
ea4ecf3d   Mihail   console csv parsing
119
120
  
  
f0dbd829   Mihail   add PriceWriter a...
121
  }