diff --git a/backend/controllers/CrossingUploadController.php b/backend/controllers/CrossingUploadController.php index cb323c6..e299c12 100755 --- a/backend/controllers/CrossingUploadController.php +++ b/backend/controllers/CrossingUploadController.php @@ -112,4 +112,143 @@ class CrossingUploadController extends BaseController throw new \ErrorException( 'Ошибка загрузки данных' ); } } + + +// public function actionResults() +// { +// $model = new UploadFileRgForm(); +// $data = []; +// +// if ($model->load(Yii::$app->request->post())) { +// $model->file = UploadedFile::getInstance($model, 'file'); +// // первый проход - валидируем, сохраняем файл, ложим в кеш отпарсенные данные и параметры модели (потом при записи в базу данных они пригодятся) +// if ($model->validate()) { +// +// $model->file_path = Yii::getAlias('@manual_upload') . '/' . $model->file->name; +// $model->file->saveAs($model->file_path); +// +// //запускаем парсинг +// $data = $model->readFile(); +// // сохраняем в кеш отпарсенные даные +// Yii::$app->getCache()->set('parser_data', json_encode($data), 1800); +// // сохраняем в кеш модель - в ней настройки для дальнейшей обработки данных +// Yii::$app->getCache()->set('parser_configuration', serialize($model), 1800); +// +// +// } else { +// // не прошла валидация форма загрузки файлов +// $errors_str = ''; +// foreach ($model->getErrors() as $error) { +// $errors_str .= implode(array_values($error)); +// } +// throw new \ErrorException($errors_str); +// } +// // листаем пагинатором, или повторно вызываем - считываем из кеша отпрасенные данные +// } else if (Yii::$app->getCache()->get('parser_data')) { +// +// $data = json_decode(Yii::$app->getCache()->get('parser_data'), true); +// +// } +// $provider = new ArrayDataProvider([ +// 'allModels' => $data, +// 'pagination' => [ +// 'pageSize' => 10, +// ], +// ]); +// // создадим модель на столько реквизитов сколько колонок в отпарсенном файле +// $last_index = end(array_flip($data[0])); +// $header_counts = $last_index + 1; +// $header_model = DynamicFormHelper::CreateDynamicModel($header_counts); +// +// // соберем массив данных из которых будет пользователь выбирать значения в конструкторе (выпадающий список) +// $header_array = Margins::getHeader(); +// +// return $this->render('results', +// ['model' => $data, +// 'header_model' => $header_model, +// // список колонок для выбора +// 'basic_column' => $header_array, +// 'dataProvider' => $provider]); +// } +// +// public function actionWrite() +// { +// //получим колонки которые выбрал пользователь +// $arr_attributes = Yii::$app->request->post()['DynamicModel']; +// //соберем модель по полученным данным +// $model = DynamicFormHelper::CreateDynamicModel($arr_attributes); +// //добавим правила валидации (колонки должны быть те что в модели) +// foreach ($arr_attributes as $key => $value) { +// $model->addRule($key, 'in', ['range' => array_keys(Margins::getHeader())]); +// } +// +// // провалидируем выбранные колонки +// if ($model->validate()) { +// +// // валидация успешна у нас есть соответсвие колонок, преобразуем в массив данное соответсвие для дальнейшей работы +// $arr = $model->toArray(); +// +// // получим данные из кеша +// if (Yii::$app->getCache()->get('parser_data') && Yii::$app->getCache()->get('parser_configuration')) { +// $data = json_decode(Yii::$app->getCache()->get('parser_data'), true); +// $configuration = unserialize(Yii::$app->getCache()->get('parser_configuration')); +// } else { +// throw new \ErrorException('Ошибка кеша'); +// } +// +// array_walk($arr, function (&$val) { +// $val = '!' . $val; +// }); +// +// // соотнесем отпарсенные данные с соответсивем полученным от пользователя +// // для этого преобразуем массив отпарсенных данных - назначим ключи согласно соответствию +// $data = CustomArrayHelper::createAssocArray($data, $arr, 'attr_'); +// +// // в первой строке у нас заголовки - уберем +// unset($data[0]); +// // подготовим данные для записи в таблицу w_margins_groups +// $arr_values = []; +// $group = ''; +// $importer_id = $configuration['importer_id']; +// foreach ($data as $row_data) { +// +// if (isset($row_data['!group'])) { +// $group = $row_data['!group']; +// unset($row_data['!group']); +// } +// if (isset($row_data['!_null'])) { +// unset($row_data['!_null']); +// } +// +// foreach ($row_data as $key => $value) { +// if ($group) +// $row['group'] = trim($group); +// +// $row['importer_id'] = trim($importer_id); +// $row['margin_id'] = ltrim($key, '!'); +// $row['koef'] = \Yii::$app->converter->convertTo('float', $value, ['precision' => 6]); +// +// +// $arr_values[] = $row; +// +// } +// +// } +// // сохраним подготовленные данные +// MarginsGroups::ManualInsertWithUpdate( $arr_values, [ 'group','importer_id','margin_id' ] ); +// +// +// Yii::$app->session->setFlash('success', "Файл {$configuration['file']} успешно загружен"); +// // все прошло успешно - очищаем кеш +// Yii::$app->getCache()->delete('parser_data'); +// Yii::$app->getCache()->delete('parser_configuration'); +// +// if (file_exists($configuration['file_path'])) +// unlink($configuration['file_path']); +// +// return $this->render('index', ['model' => $configuration]); +// +// } +// +// } } \ No newline at end of file diff --git a/backend/controllers/ParserController.php b/backend/controllers/ParserController.php index 0a1ebbb..4b5cf87 100755 --- a/backend/controllers/ParserController.php +++ b/backend/controllers/ParserController.php @@ -122,9 +122,9 @@ class ParserController extends BaseController $data = $model->readFile( $options ); // сохраняем в кеш отпарсенные даные - Yii::$app->getCache()->set('parser_data', json_encode($data)); + Yii::$app->getCache()->set('parser_data', json_encode($data), 1800); // сохраняем в кеш модель - в ней настройки для дальнейшей обработки данных - Yii::$app->getCache()->set('parser_configuration', serialize($model)); + Yii::$app->getCache()->set('parser_configuration', serialize($model), 1800); } else { // не прошла валидация форма загрузки файлов diff --git a/backend/controllers/RgGrupController.php b/backend/controllers/RgGrupController.php index 42e2b52..073256b 100755 --- a/backend/controllers/RgGrupController.php +++ b/backend/controllers/RgGrupController.php @@ -72,9 +72,9 @@ class RgGrupController extends BaseController //запускаем парсинг $data = $model->readFile(); // сохраняем в кеш отпарсенные даные - Yii::$app->getCache()->set('parser_data', json_encode($data)); + Yii::$app->getCache()->set('parser_data', json_encode($data), 1800); // сохраняем в кеш модель - в ней настройки для дальнейшей обработки данных - Yii::$app->getCache()->set('parser_configuration', serialize($model)); + Yii::$app->getCache()->set('parser_configuration', serialize($model), 1800); } else { diff --git a/backend/views/crossing-upload/results.php b/backend/views/crossing-upload/results.php new file mode 100644 index 0000000..0c89f09 --- /dev/null +++ b/backend/views/crossing-upload/results.php @@ -0,0 +1,32 @@ +title = 'Отпарсенные данные файла'; +$this->params['breadcrumbs'][] = $this->title; +?> +