diff --git a/backend/components/base/CustomDbConnection.php b/backend/components/base/CustomDbConnection.php new file mode 100644 index 0000000..7de66c6 --- /dev/null +++ b/backend/components/base/CustomDbConnection.php @@ -0,0 +1,37 @@ +getOffset() / 60; + $sgn = ($mins < 0 ? -1 : 1); + $mins = abs($mins); + $hrs = floor($mins / 60); + $mins -= $hrs * 60; + $offset = sprintf('%+d:%02d', $hrs*$sgn, $mins); + + $this->pdo->exec("SET time_zone='$offset';"); + + } + + protected function initConnection() + { + parent::initConnection(); + $this->afterOpen(); + + } + + +} \ No newline at end of file diff --git a/backend/components/parsers/CustomConverter.php b/backend/components/parsers/CustomConverter.php index 1dc099d..3612457 100644 --- a/backend/components/parsers/CustomConverter.php +++ b/backend/components/parsers/CustomConverter.php @@ -44,14 +44,15 @@ class CustomConverter extends Converter { return $result; } - public function addColumn ($value_arr, $add_key, $add_value) + public function addColumns ($value_arr, $add_array) { $i = 0; while ($i < count($value_arr)) { - $value_arr[$i][$add_key] = $add_value; + foreach ($add_array as $add_key => $add_value) { + $value_arr[$i][$add_key] = $add_value; + } $i++; } - return $value_arr; } } \ No newline at end of file diff --git a/backend/components/parsers/CustomCsvParser.php b/backend/components/parsers/CustomCsvParser.php index 50c4f75..1db0a46 100644 --- a/backend/components/parsers/CustomCsvParser.php +++ b/backend/components/parsers/CustomCsvParser.php @@ -11,7 +11,7 @@ namespace backend\components\parsers; class CustomCsvParser extends \yii\multiparser\CsvParser { - public $last_line = 20; + public $last_line = 30; //public $hasHeaderRow = true; // public $keys = ['first','second', 'third', 'forth', 'fifth']; public function setupConverter() diff --git a/backend/controllers/ParserController.php b/backend/controllers/ParserController.php index 1f8fc9f..965b7c2 100644 --- a/backend/controllers/ParserController.php +++ b/backend/controllers/ParserController.php @@ -12,6 +12,7 @@ use yii\multiparser\DynamicFormHelper; use backend\components\parsers\CustomParserConfigurator; use backend\models\Details; use backend\models\ImporterFiles; +use backend\models\Importer; use yii\base\ErrorException; use common\components\CustomVarDamp; @@ -70,7 +71,6 @@ class ParserController extends BaseController public function actionResults() { - $model = new UploadFileParsingForm(); $data = []; if ($model->load(Yii::$app->request->post())) { @@ -116,7 +116,6 @@ class ParserController extends BaseController public function actionWrite() { - //получим колонки которые выбрал пользователь $arr_attributes = Yii::$app->request->post()['DynamicModel']; //соберем модель по полученным данным @@ -145,37 +144,55 @@ class ParserController extends BaseController $data = \Yii::$app->multiparser->convertToAssocArray($data, $arr, 'attr_'); - // запишем дату старта в таблицу файлов поставщика (ImportersFiles) + // 1. запишем дату старта в таблицу файлов поставщика (ImportersFiles) $files_model = new ImporterFiles(); // id поставщика получим из конфигурации $files_model->load(['ImporterFiles' => $configuration->toArray()]); if ($files_model->validate()) { try { $files_model->save(); + $update_date = $files_model->find() + ->where(['importer_id' => $files_model->importer_id]) + ->orderBy(['id' => SORT_DESC]) + ->one() + ->upload_time; + $update_date = date('Y-m-d H:i:s',strtotime($update_date)); + // CustomVarDamp::dumpAndDie(strtotime($update_date)); } catch (ErrorException $e) { CustomVarDamp::dump($e->getMessage()); } - // запишем полученные данные в таблицу товаров (Details) + // 2. запишем полученные данные в таблицу товаров (Details) $details_model = new Details('web'); // проверим все ли обязательные колонки были указаны пользователем $details_model->load(['Details' => $data[0]]); if ($details_model->validate()) { - // проставим импортера - $data = $details_model->prepareData($data, $configuration); + // дополним данные значением импортера и даты обновления цены + $data = \Yii::$app->multiparser->addColumns( $data, ['IMPORT_ID' => $configuration['importer_id'],'timestamp' => $update_date] ); try { + //@todo add transaction // попытаемся вставить данные в БД с апдейтом по ключам $details_model->save($data); - // а также зафиксируем дату конца загрузки - $files_model->time_end = mktime(); // ошибка!!!!!!!!!!!!!!!! + // 3. зафиксируем дату конца загрузки в файлах поставщика + $files_model->time_end = date('Y-m-d H:i:s'); + // CustomVarDamp::dumpAndDie($files_model); $files_model->save(); + // 4. зафиксируем дату загрузки в таблице поставщиков + $imp_model = Importer::findOne( $configuration['importer_id'] ); + $imp_model->price_date_update = ''.strtotime($update_date); + + if (!$imp_model->save()) { + CustomVarDamp::dumpAndDie( $imp_model->getErrors() ); + } + // все прошло успешно - очищаем кеш Yii::$app->getCache()->delete('parser_data'); Yii::$app->getCache()->delete('parser_configuration'); + // @todo - Delete the file CustomVarDamp::dumpAndDie('!!!'); } catch (ErrorException $e) { diff --git a/backend/models/Details.php b/backend/models/Details.php index 1eca6e7..2f2ec33 100644 --- a/backend/models/Details.php +++ b/backend/models/Details.php @@ -46,15 +46,15 @@ class Details extends Model{ return '{{%details}}'; } - //@todo вероятно этой функции не место здесь - public function prepareData ( $data, $configuration ) - { - if ( isset($configuration['importer_id']) && $configuration['importer_id']) { - $data = \Yii::$app->multiparser->addColumn( $data, 'IMPORT_ID', $configuration['importer_id'] ); - } - // \common\components\CustomVarDamp::dumpAndDie($data); - return $data; - } +// //@todo вероятно этой функции не место здесь +// public function prepareData ( $data, $configuration ) +// { +// if ( isset($configuration['importer_id']) && $configuration['importer_id']) { +// $data = \Yii::$app->multiparser->addColumn( $data, 'IMPORT_ID', $configuration['importer_id'] ); +// } +// // \common\components\CustomVarDamp::dumpAndDie($data); +// return $data; +// } /** * @param $data - двумерный массив данных для записи в таблицу details @@ -70,7 +70,7 @@ class Details extends Model{ $query_update = ' on duplicate key update '; foreach ($fields_arr_to_update as $field) { - $query_update .= "{$field} = values ({$field}),"; + $query_update .= "{$field} = values({$field}),"; } // удалим последнюю запятую $query_update = substr($query_update, 0, strlen($query_update) - 1); @@ -85,7 +85,7 @@ class Details extends Model{ $query_insert = Yii::$app->db->createCommand()->batchInsert($table_name, $keys_arr, $current_batch_array)->sql; // добавим фрагмент с апдейтом при дубляже $query = "{$query_insert} {$query_update}"; - + // \common\components\CustomVarDamp::dumpAndDie($query); $res = Yii::$app->db->createCommand($query)->execute(); } diff --git a/backend/models/Importer.php b/backend/models/Importer.php index daaa435..65c993d 100644 --- a/backend/models/Importer.php +++ b/backend/models/Importer.php @@ -47,7 +47,8 @@ class Importer extends BaseActiveRecord public function rules() { return [ - [['code', 'name', 'name_price', 'currency_id', 'delivery', 'email', 'info', 'PARSER_FIELD_SIGN', 'price_date_update'], 'required'], + [['code', 'name', 'currency_id', 'delivery', 'info', 'price_date_update'], 'required'], + [['name_price', 'email', 'PARSER_FIELD_SIGN'], 'safe'], [['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'], [['info'], 'string'], [['PARSER_FIELD_MULTIPLIER'], 'number'], diff --git a/backend/models/UploadFileParsingForm.php b/backend/models/UploadFileParsingForm.php index 9b50b92..b5de7d7 100644 --- a/backend/models/UploadFileParsingForm.php +++ b/backend/models/UploadFileParsingForm.php @@ -20,6 +20,7 @@ class UploadFileParsingForm extends Model public $delimiter; public $delete_price; public $delete_prefix; + public $update_date; /** * @return array the validation rules. @@ -35,7 +36,8 @@ class UploadFileParsingForm extends Model ['importer_id', 'integer','max' => 999999, 'min' => 0 ], [['action','delete_prefix', 'delete_price'], 'boolean'], ['delimiter', 'string', 'max' => 1], - ['delimiter', 'default', 'value' => ';'] + ['delimiter', 'default', 'value' => ';'], + ['update_date', 'safe'] ]; } -- libgit2 0.21.4