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