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 | } |