Commit 9dd0fbe477898ae66284e8be90a347c779477878
1 parent
8894c93a
add writing data to all praces tables(acsept crosses)
Showing
7 changed files
with
83 additions
and
25 deletions
Show diff stats
1 | +<?php | ||
2 | +/** | ||
3 | + * Created by PhpStorm. | ||
4 | + * User: Cibermag | ||
5 | + * Date: 21.09.2015 | ||
6 | + * Time: 17:36 | ||
7 | + */ | ||
8 | + | ||
9 | +namespace backend\components\base; | ||
10 | + | ||
11 | +use yii\db\Connection; | ||
12 | + | ||
13 | +class CustomDbConnection extends Connection { | ||
14 | + //@todo - переписать с использованием событий - почемуто не сработало это событие | ||
15 | + public function afterOpen() | ||
16 | + { | ||
17 | + $now = new \DateTime(); | ||
18 | + $mins = $now->getOffset() / 60; | ||
19 | + $sgn = ($mins < 0 ? -1 : 1); | ||
20 | + $mins = abs($mins); | ||
21 | + $hrs = floor($mins / 60); | ||
22 | + $mins -= $hrs * 60; | ||
23 | + $offset = sprintf('%+d:%02d', $hrs*$sgn, $mins); | ||
24 | + | ||
25 | + $this->pdo->exec("SET time_zone='$offset';"); | ||
26 | + | ||
27 | + } | ||
28 | + | ||
29 | + protected function initConnection() | ||
30 | + { | ||
31 | + parent::initConnection(); | ||
32 | + $this->afterOpen(); | ||
33 | + | ||
34 | + } | ||
35 | + | ||
36 | + | ||
37 | +} | ||
0 | \ No newline at end of file | 38 | \ No newline at end of file |
backend/components/parsers/CustomConverter.php
@@ -44,14 +44,15 @@ class CustomConverter extends Converter { | @@ -44,14 +44,15 @@ class CustomConverter extends Converter { | ||
44 | return $result; | 44 | return $result; |
45 | } | 45 | } |
46 | 46 | ||
47 | - public function addColumn ($value_arr, $add_key, $add_value) | 47 | + public function addColumns ($value_arr, $add_array) |
48 | { | 48 | { |
49 | $i = 0; | 49 | $i = 0; |
50 | while ($i < count($value_arr)) { | 50 | while ($i < count($value_arr)) { |
51 | - $value_arr[$i][$add_key] = $add_value; | 51 | + foreach ($add_array as $add_key => $add_value) { |
52 | + $value_arr[$i][$add_key] = $add_value; | ||
53 | + } | ||
52 | $i++; | 54 | $i++; |
53 | } | 55 | } |
54 | - | ||
55 | return $value_arr; | 56 | return $value_arr; |
56 | } | 57 | } |
57 | } | 58 | } |
58 | \ No newline at end of file | 59 | \ No newline at end of file |
backend/components/parsers/CustomCsvParser.php
@@ -11,7 +11,7 @@ namespace backend\components\parsers; | @@ -11,7 +11,7 @@ namespace backend\components\parsers; | ||
11 | 11 | ||
12 | class CustomCsvParser extends \yii\multiparser\CsvParser { | 12 | class CustomCsvParser extends \yii\multiparser\CsvParser { |
13 | 13 | ||
14 | - public $last_line = 20; | 14 | + public $last_line = 30; |
15 | //public $hasHeaderRow = true; | 15 | //public $hasHeaderRow = true; |
16 | // public $keys = ['first','second', 'third', 'forth', 'fifth']; | 16 | // public $keys = ['first','second', 'third', 'forth', 'fifth']; |
17 | public function setupConverter() | 17 | public function setupConverter() |
backend/controllers/ParserController.php
@@ -12,6 +12,7 @@ use yii\multiparser\DynamicFormHelper; | @@ -12,6 +12,7 @@ use yii\multiparser\DynamicFormHelper; | ||
12 | use backend\components\parsers\CustomParserConfigurator; | 12 | use backend\components\parsers\CustomParserConfigurator; |
13 | use backend\models\Details; | 13 | use backend\models\Details; |
14 | use backend\models\ImporterFiles; | 14 | use backend\models\ImporterFiles; |
15 | +use backend\models\Importer; | ||
15 | use yii\base\ErrorException; | 16 | use yii\base\ErrorException; |
16 | 17 | ||
17 | use common\components\CustomVarDamp; | 18 | use common\components\CustomVarDamp; |
@@ -70,7 +71,6 @@ class ParserController extends BaseController | @@ -70,7 +71,6 @@ class ParserController extends BaseController | ||
70 | 71 | ||
71 | public function actionResults() | 72 | public function actionResults() |
72 | { | 73 | { |
73 | - | ||
74 | $model = new UploadFileParsingForm(); | 74 | $model = new UploadFileParsingForm(); |
75 | $data = []; | 75 | $data = []; |
76 | if ($model->load(Yii::$app->request->post())) { | 76 | if ($model->load(Yii::$app->request->post())) { |
@@ -116,7 +116,6 @@ class ParserController extends BaseController | @@ -116,7 +116,6 @@ class ParserController extends BaseController | ||
116 | 116 | ||
117 | public function actionWrite() | 117 | public function actionWrite() |
118 | { | 118 | { |
119 | - | ||
120 | //получим колонки которые выбрал пользователь | 119 | //получим колонки которые выбрал пользователь |
121 | $arr_attributes = Yii::$app->request->post()['DynamicModel']; | 120 | $arr_attributes = Yii::$app->request->post()['DynamicModel']; |
122 | //соберем модель по полученным данным | 121 | //соберем модель по полученным данным |
@@ -145,37 +144,55 @@ class ParserController extends BaseController | @@ -145,37 +144,55 @@ class ParserController extends BaseController | ||
145 | $data = \Yii::$app->multiparser->convertToAssocArray($data, $arr, 'attr_'); | 144 | $data = \Yii::$app->multiparser->convertToAssocArray($data, $arr, 'attr_'); |
146 | 145 | ||
147 | 146 | ||
148 | - // запишем дату старта в таблицу файлов поставщика (ImportersFiles) | 147 | + // 1. запишем дату старта в таблицу файлов поставщика (ImportersFiles) |
149 | $files_model = new ImporterFiles(); | 148 | $files_model = new ImporterFiles(); |
150 | // id поставщика получим из конфигурации | 149 | // id поставщика получим из конфигурации |
151 | $files_model->load(['ImporterFiles' => $configuration->toArray()]); | 150 | $files_model->load(['ImporterFiles' => $configuration->toArray()]); |
152 | if ($files_model->validate()) { | 151 | if ($files_model->validate()) { |
153 | try { | 152 | try { |
154 | $files_model->save(); | 153 | $files_model->save(); |
154 | + $update_date = $files_model->find() | ||
155 | + ->where(['importer_id' => $files_model->importer_id]) | ||
156 | + ->orderBy(['id' => SORT_DESC]) | ||
157 | + ->one() | ||
158 | + ->upload_time; | ||
159 | + $update_date = date('Y-m-d H:i:s',strtotime($update_date)); | ||
160 | + // CustomVarDamp::dumpAndDie(strtotime($update_date)); | ||
155 | } catch (ErrorException $e) { | 161 | } catch (ErrorException $e) { |
156 | CustomVarDamp::dump($e->getMessage()); | 162 | CustomVarDamp::dump($e->getMessage()); |
157 | } | 163 | } |
158 | 164 | ||
159 | 165 | ||
160 | - // запишем полученные данные в таблицу товаров (Details) | 166 | + // 2. запишем полученные данные в таблицу товаров (Details) |
161 | $details_model = new Details('web'); | 167 | $details_model = new Details('web'); |
162 | // проверим все ли обязательные колонки были указаны пользователем | 168 | // проверим все ли обязательные колонки были указаны пользователем |
163 | $details_model->load(['Details' => $data[0]]); | 169 | $details_model->load(['Details' => $data[0]]); |
164 | if ($details_model->validate()) { | 170 | if ($details_model->validate()) { |
165 | - // проставим импортера | ||
166 | - $data = $details_model->prepareData($data, $configuration); | 171 | + // дополним данные значением импортера и даты обновления цены |
172 | + $data = \Yii::$app->multiparser->addColumns( $data, ['IMPORT_ID' => $configuration['importer_id'],'timestamp' => $update_date] ); | ||
167 | 173 | ||
168 | try { | 174 | try { |
175 | + //@todo add transaction | ||
169 | // попытаемся вставить данные в БД с апдейтом по ключам | 176 | // попытаемся вставить данные в БД с апдейтом по ключам |
170 | $details_model->save($data); | 177 | $details_model->save($data); |
171 | 178 | ||
172 | - // а также зафиксируем дату конца загрузки | ||
173 | - $files_model->time_end = mktime(); // ошибка!!!!!!!!!!!!!!!! | 179 | + // 3. зафиксируем дату конца загрузки в файлах поставщика |
180 | + $files_model->time_end = date('Y-m-d H:i:s'); | ||
181 | + // CustomVarDamp::dumpAndDie($files_model); | ||
174 | $files_model->save(); | 182 | $files_model->save(); |
175 | 183 | ||
184 | + // 4. зафиксируем дату загрузки в таблице поставщиков | ||
185 | + $imp_model = Importer::findOne( $configuration['importer_id'] ); | ||
186 | + $imp_model->price_date_update = ''.strtotime($update_date); | ||
187 | + | ||
188 | + if (!$imp_model->save()) { | ||
189 | + CustomVarDamp::dumpAndDie( $imp_model->getErrors() ); | ||
190 | + } | ||
191 | + | ||
176 | // все прошло успешно - очищаем кеш | 192 | // все прошло успешно - очищаем кеш |
177 | Yii::$app->getCache()->delete('parser_data'); | 193 | Yii::$app->getCache()->delete('parser_data'); |
178 | Yii::$app->getCache()->delete('parser_configuration'); | 194 | Yii::$app->getCache()->delete('parser_configuration'); |
195 | + // @todo - Delete the file | ||
179 | 196 | ||
180 | CustomVarDamp::dumpAndDie('!!!'); | 197 | CustomVarDamp::dumpAndDie('!!!'); |
181 | } catch (ErrorException $e) { | 198 | } catch (ErrorException $e) { |
backend/models/Details.php
@@ -46,15 +46,15 @@ class Details extends Model{ | @@ -46,15 +46,15 @@ class Details extends Model{ | ||
46 | return '{{%details}}'; | 46 | return '{{%details}}'; |
47 | } | 47 | } |
48 | 48 | ||
49 | - //@todo вероятно этой функции не место здесь | ||
50 | - public function prepareData ( $data, $configuration ) | ||
51 | - { | ||
52 | - if ( isset($configuration['importer_id']) && $configuration['importer_id']) { | ||
53 | - $data = \Yii::$app->multiparser->addColumn( $data, 'IMPORT_ID', $configuration['importer_id'] ); | ||
54 | - } | ||
55 | - // \common\components\CustomVarDamp::dumpAndDie($data); | ||
56 | - return $data; | ||
57 | - } | 49 | +// //@todo вероятно этой функции не место здесь |
50 | +// public function prepareData ( $data, $configuration ) | ||
51 | +// { | ||
52 | +// if ( isset($configuration['importer_id']) && $configuration['importer_id']) { | ||
53 | +// $data = \Yii::$app->multiparser->addColumn( $data, 'IMPORT_ID', $configuration['importer_id'] ); | ||
54 | +// } | ||
55 | +// // \common\components\CustomVarDamp::dumpAndDie($data); | ||
56 | +// return $data; | ||
57 | +// } | ||
58 | 58 | ||
59 | /** | 59 | /** |
60 | * @param $data - двумерный массив данных для записи в таблицу details | 60 | * @param $data - двумерный массив данных для записи в таблицу details |
@@ -70,7 +70,7 @@ class Details extends Model{ | @@ -70,7 +70,7 @@ class Details extends Model{ | ||
70 | 70 | ||
71 | $query_update = ' on duplicate key update '; | 71 | $query_update = ' on duplicate key update '; |
72 | foreach ($fields_arr_to_update as $field) { | 72 | foreach ($fields_arr_to_update as $field) { |
73 | - $query_update .= "{$field} = values ({$field}),"; | 73 | + $query_update .= "{$field} = values({$field}),"; |
74 | } | 74 | } |
75 | // удалим последнюю запятую | 75 | // удалим последнюю запятую |
76 | $query_update = substr($query_update, 0, strlen($query_update) - 1); | 76 | $query_update = substr($query_update, 0, strlen($query_update) - 1); |
@@ -85,7 +85,7 @@ class Details extends Model{ | @@ -85,7 +85,7 @@ class Details extends Model{ | ||
85 | $query_insert = Yii::$app->db->createCommand()->batchInsert($table_name, $keys_arr, $current_batch_array)->sql; | 85 | $query_insert = Yii::$app->db->createCommand()->batchInsert($table_name, $keys_arr, $current_batch_array)->sql; |
86 | // добавим фрагмент с апдейтом при дубляже | 86 | // добавим фрагмент с апдейтом при дубляже |
87 | $query = "{$query_insert} {$query_update}"; | 87 | $query = "{$query_insert} {$query_update}"; |
88 | - | 88 | + // \common\components\CustomVarDamp::dumpAndDie($query); |
89 | $res = Yii::$app->db->createCommand($query)->execute(); | 89 | $res = Yii::$app->db->createCommand($query)->execute(); |
90 | 90 | ||
91 | } | 91 | } |
backend/models/Importer.php
@@ -47,7 +47,8 @@ class Importer extends BaseActiveRecord | @@ -47,7 +47,8 @@ class Importer extends BaseActiveRecord | ||
47 | public function rules() | 47 | public function rules() |
48 | { | 48 | { |
49 | return [ | 49 | return [ |
50 | - [['code', 'name', 'name_price', 'currency_id', 'delivery', 'email', 'info', 'PARSER_FIELD_SIGN', 'price_date_update'], 'required'], | 50 | + [['code', 'name', 'currency_id', 'delivery', 'info', 'price_date_update'], 'required'], |
51 | + [['name_price', 'email', 'PARSER_FIELD_SIGN'], 'safe'], | ||
51 | [['currency_id', 'active', 'PARSER_IS_ACTIVE', 'PARSER_COLUMN_COUNT', 'PARSER_FIELD_BRAND', 'PARSER_FIELD_ARTICLE', 'PARSER_FIELD_ARTICLE_PREFIX', 'PARSER_FIELD_PRICE', 'PARSER_FIELD_DESCR', 'PARSER_FIELD_BOX', 'PARSER_FIELD_ADD_BOX', 'PARSER_FIELD_GROUP_RG'], 'integer'], | 52 | [['currency_id', 'active', 'PARSER_IS_ACTIVE', 'PARSER_COLUMN_COUNT', 'PARSER_FIELD_BRAND', 'PARSER_FIELD_ARTICLE', 'PARSER_FIELD_ARTICLE_PREFIX', 'PARSER_FIELD_PRICE', 'PARSER_FIELD_DESCR', 'PARSER_FIELD_BOX', 'PARSER_FIELD_ADD_BOX', 'PARSER_FIELD_GROUP_RG'], 'integer'], |
52 | [['info'], 'string'], | 53 | [['info'], 'string'], |
53 | [['PARSER_FIELD_MULTIPLIER'], 'number'], | 54 | [['PARSER_FIELD_MULTIPLIER'], 'number'], |
backend/models/UploadFileParsingForm.php
@@ -20,6 +20,7 @@ class UploadFileParsingForm extends Model | @@ -20,6 +20,7 @@ class UploadFileParsingForm extends Model | ||
20 | public $delimiter; | 20 | public $delimiter; |
21 | public $delete_price; | 21 | public $delete_price; |
22 | public $delete_prefix; | 22 | public $delete_prefix; |
23 | + public $update_date; | ||
23 | 24 | ||
24 | /** | 25 | /** |
25 | * @return array the validation rules. | 26 | * @return array the validation rules. |
@@ -35,7 +36,8 @@ class UploadFileParsingForm extends Model | @@ -35,7 +36,8 @@ class UploadFileParsingForm extends Model | ||
35 | ['importer_id', 'integer','max' => 999999, 'min' => 0 ], | 36 | ['importer_id', 'integer','max' => 999999, 'min' => 0 ], |
36 | [['action','delete_prefix', 'delete_price'], 'boolean'], | 37 | [['action','delete_prefix', 'delete_price'], 'boolean'], |
37 | ['delimiter', 'string', 'max' => 1], | 38 | ['delimiter', 'string', 'max' => 1], |
38 | - ['delimiter', 'default', 'value' => ';'] | 39 | + ['delimiter', 'default', 'value' => ';'], |
40 | + ['update_date', 'safe'] | ||
39 | 41 | ||
40 | ]; | 42 | ]; |
41 | } | 43 | } |