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 | 38 | \ No newline at end of file | ... | ... |
backend/components/parsers/CustomConverter.php
... | ... | @@ -44,14 +44,15 @@ class CustomConverter extends Converter { |
44 | 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 | 49 | $i = 0; |
50 | 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 | 54 | $i++; |
53 | 55 | } |
54 | - | |
55 | 56 | return $value_arr; |
56 | 57 | } |
57 | 58 | } |
58 | 59 | \ No newline at end of file | ... | ... |
backend/components/parsers/CustomCsvParser.php
... | ... | @@ -11,7 +11,7 @@ namespace backend\components\parsers; |
11 | 11 | |
12 | 12 | class CustomCsvParser extends \yii\multiparser\CsvParser { |
13 | 13 | |
14 | - public $last_line = 20; | |
14 | + public $last_line = 30; | |
15 | 15 | //public $hasHeaderRow = true; |
16 | 16 | // public $keys = ['first','second', 'third', 'forth', 'fifth']; |
17 | 17 | public function setupConverter() | ... | ... |
backend/controllers/ParserController.php
... | ... | @@ -12,6 +12,7 @@ use yii\multiparser\DynamicFormHelper; |
12 | 12 | use backend\components\parsers\CustomParserConfigurator; |
13 | 13 | use backend\models\Details; |
14 | 14 | use backend\models\ImporterFiles; |
15 | +use backend\models\Importer; | |
15 | 16 | use yii\base\ErrorException; |
16 | 17 | |
17 | 18 | use common\components\CustomVarDamp; |
... | ... | @@ -70,7 +71,6 @@ class ParserController extends BaseController |
70 | 71 | |
71 | 72 | public function actionResults() |
72 | 73 | { |
73 | - | |
74 | 74 | $model = new UploadFileParsingForm(); |
75 | 75 | $data = []; |
76 | 76 | if ($model->load(Yii::$app->request->post())) { |
... | ... | @@ -116,7 +116,6 @@ class ParserController extends BaseController |
116 | 116 | |
117 | 117 | public function actionWrite() |
118 | 118 | { |
119 | - | |
120 | 119 | //получим колонки которые выбрал пользователь |
121 | 120 | $arr_attributes = Yii::$app->request->post()['DynamicModel']; |
122 | 121 | //соберем модель по полученным данным |
... | ... | @@ -145,37 +144,55 @@ class ParserController extends BaseController |
145 | 144 | $data = \Yii::$app->multiparser->convertToAssocArray($data, $arr, 'attr_'); |
146 | 145 | |
147 | 146 | |
148 | - // запишем дату старта в таблицу файлов поставщика (ImportersFiles) | |
147 | + // 1. запишем дату старта в таблицу файлов поставщика (ImportersFiles) | |
149 | 148 | $files_model = new ImporterFiles(); |
150 | 149 | // id поставщика получим из конфигурации |
151 | 150 | $files_model->load(['ImporterFiles' => $configuration->toArray()]); |
152 | 151 | if ($files_model->validate()) { |
153 | 152 | try { |
154 | 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 | 161 | } catch (ErrorException $e) { |
156 | 162 | CustomVarDamp::dump($e->getMessage()); |
157 | 163 | } |
158 | 164 | |
159 | 165 | |
160 | - // запишем полученные данные в таблицу товаров (Details) | |
166 | + // 2. запишем полученные данные в таблицу товаров (Details) | |
161 | 167 | $details_model = new Details('web'); |
162 | 168 | // проверим все ли обязательные колонки были указаны пользователем |
163 | 169 | $details_model->load(['Details' => $data[0]]); |
164 | 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 | 174 | try { |
175 | + //@todo add transaction | |
169 | 176 | // попытаемся вставить данные в БД с апдейтом по ключам |
170 | 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 | 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 | 193 | Yii::$app->getCache()->delete('parser_data'); |
178 | 194 | Yii::$app->getCache()->delete('parser_configuration'); |
195 | + // @todo - Delete the file | |
179 | 196 | |
180 | 197 | CustomVarDamp::dumpAndDie('!!!'); |
181 | 198 | } catch (ErrorException $e) { | ... | ... |
backend/models/Details.php
... | ... | @@ -46,15 +46,15 @@ class Details extends Model{ |
46 | 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 | 60 | * @param $data - двумерный массив данных для записи в таблицу details |
... | ... | @@ -70,7 +70,7 @@ class Details extends Model{ |
70 | 70 | |
71 | 71 | $query_update = ' on duplicate key update '; |
72 | 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 | 76 | $query_update = substr($query_update, 0, strlen($query_update) - 1); |
... | ... | @@ -85,7 +85,7 @@ class Details extends Model{ |
85 | 85 | $query_insert = Yii::$app->db->createCommand()->batchInsert($table_name, $keys_arr, $current_batch_array)->sql; |
86 | 86 | // добавим фрагмент с апдейтом при дубляже |
87 | 87 | $query = "{$query_insert} {$query_update}"; |
88 | - | |
88 | + // \common\components\CustomVarDamp::dumpAndDie($query); | |
89 | 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 | 47 | public function rules() |
48 | 48 | { |
49 | 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 | 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 | 53 | [['info'], 'string'], |
53 | 54 | [['PARSER_FIELD_MULTIPLIER'], 'number'], | ... | ... |
backend/models/UploadFileParsingForm.php
... | ... | @@ -20,6 +20,7 @@ class UploadFileParsingForm extends Model |
20 | 20 | public $delimiter; |
21 | 21 | public $delete_price; |
22 | 22 | public $delete_prefix; |
23 | + public $update_date; | |
23 | 24 | |
24 | 25 | /** |
25 | 26 | * @return array the validation rules. |
... | ... | @@ -35,7 +36,8 @@ class UploadFileParsingForm extends Model |
35 | 36 | ['importer_id', 'integer','max' => 999999, 'min' => 0 ], |
36 | 37 | [['action','delete_prefix', 'delete_price'], 'boolean'], |
37 | 38 | ['delimiter', 'string', 'max' => 1], |
38 | - ['delimiter', 'default', 'value' => ';'] | |
39 | + ['delimiter', 'default', 'value' => ';'], | |
40 | + ['update_date', 'safe'] | |
39 | 41 | |
40 | 42 | ]; |
41 | 43 | } | ... | ... |