Commit a80ff4695cfd4acfaf888ca54e8d5757b1704ac2

Authored by Mihail
1 parent 49bb0055

add expiration time for caching parser data

backend/controllers/CrossingUploadController.php
... ... @@ -112,4 +112,143 @@ class CrossingUploadController extends BaseController
112 112 throw new \ErrorException( 'Ошибка загрузки данных' );
113 113 }
114 114 }
  115 +
  116 +
  117 +// public function actionResults()
  118 +// {
  119 +// $model = new UploadFileRgForm();
  120 +// $data = [];
  121 +//
  122 +// if ($model->load(Yii::$app->request->post())) {
  123 +// $model->file = UploadedFile::getInstance($model, 'file');
  124 +// // первый проход - валидируем, сохраняем файл, ложим в кеш отпарсенные данные и параметры модели (потом при записи в базу данных они пригодятся)
  125 +// if ($model->validate()) {
  126 +//
  127 +// $model->file_path = Yii::getAlias('@manual_upload') . '/' . $model->file->name;
  128 +// $model->file->saveAs($model->file_path);
  129 +//
  130 +// //запускаем парсинг
  131 +// $data = $model->readFile();
  132 +// // сохраняем в кеш отпарсенные даные
  133 +// Yii::$app->getCache()->set('parser_data', json_encode($data), 1800);
  134 +// // сохраняем в кеш модель - в ней настройки для дальнейшей обработки данных
  135 +// Yii::$app->getCache()->set('parser_configuration', serialize($model), 1800);
  136 +//
  137 +//
  138 +// } else {
  139 +// // не прошла валидация форма загрузки файлов
  140 +// $errors_str = '';
  141 +// foreach ($model->getErrors() as $error) {
  142 +// $errors_str .= implode(array_values($error));
  143 +// }
  144 +// throw new \ErrorException($errors_str);
  145 +// }
  146 +// // листаем пагинатором, или повторно вызываем - считываем из кеша отпрасенные данные
  147 +// } else if (Yii::$app->getCache()->get('parser_data')) {
  148 +//
  149 +// $data = json_decode(Yii::$app->getCache()->get('parser_data'), true);
  150 +//
  151 +// }
  152 +// $provider = new ArrayDataProvider([
  153 +// 'allModels' => $data,
  154 +// 'pagination' => [
  155 +// 'pageSize' => 10,
  156 +// ],
  157 +// ]);
  158 +// // создадим модель на столько реквизитов сколько колонок в отпарсенном файле
  159 +// $last_index = end(array_flip($data[0]));
  160 +// $header_counts = $last_index + 1;
  161 +// $header_model = DynamicFormHelper::CreateDynamicModel($header_counts);
  162 +//
  163 +// // соберем массив данных из которых будет пользователь выбирать значения в конструкторе (выпадающий список)
  164 +// $header_array = Margins::getHeader();
  165 +//
  166 +// return $this->render('results',
  167 +// ['model' => $data,
  168 +// 'header_model' => $header_model,
  169 +// // список колонок для выбора
  170 +// 'basic_column' => $header_array,
  171 +// 'dataProvider' => $provider]);
  172 +// }
  173 +//
  174 +// public function actionWrite()
  175 +// {
  176 +// //получим колонки которые выбрал пользователь
  177 +// $arr_attributes = Yii::$app->request->post()['DynamicModel'];
  178 +// //соберем модель по полученным данным
  179 +// $model = DynamicFormHelper::CreateDynamicModel($arr_attributes);
  180 +// //добавим правила валидации (колонки должны быть те что в модели)
  181 +// foreach ($arr_attributes as $key => $value) {
  182 +// $model->addRule($key, 'in', ['range' => array_keys(Margins::getHeader())]);
  183 +// }
  184 +//
  185 +// // провалидируем выбранные колонки
  186 +// if ($model->validate()) {
  187 +//
  188 +// // валидация успешна у нас есть соответсвие колонок, преобразуем в массив данное соответсвие для дальнейшей работы
  189 +// $arr = $model->toArray();
  190 +//
  191 +// // получим данные из кеша
  192 +// if (Yii::$app->getCache()->get('parser_data') && Yii::$app->getCache()->get('parser_configuration')) {
  193 +// $data = json_decode(Yii::$app->getCache()->get('parser_data'), true);
  194 +// $configuration = unserialize(Yii::$app->getCache()->get('parser_configuration'));
  195 +// } else {
  196 +// throw new \ErrorException('Ошибка кеша');
  197 +// }
  198 +//
  199 +// array_walk($arr, function (&$val) {
  200 +// $val = '!' . $val;
  201 +// });
  202 +//
  203 +// // соотнесем отпарсенные данные с соответсивем полученным от пользователя
  204 +// // для этого преобразуем массив отпарсенных данных - назначим ключи согласно соответствию
  205 +// $data = CustomArrayHelper::createAssocArray($data, $arr, 'attr_');
  206 +//
  207 +// // в первой строке у нас заголовки - уберем
  208 +// unset($data[0]);
  209 +// // подготовим данные для записи в таблицу w_margins_groups
  210 +// $arr_values = [];
  211 +// $group = '';
  212 +// $importer_id = $configuration['importer_id'];
  213 +// foreach ($data as $row_data) {
  214 +//
  215 +// if (isset($row_data['!group'])) {
  216 +// $group = $row_data['!group'];
  217 +// unset($row_data['!group']);
  218 +// }
  219 +// if (isset($row_data['!_null'])) {
  220 +// unset($row_data['!_null']);
  221 +// }
  222 +//
  223 +// foreach ($row_data as $key => $value) {
  224 +// if ($group)
  225 +// $row['group'] = trim($group);
  226 +//
  227 +// $row['importer_id'] = trim($importer_id);
  228 +// $row['margin_id'] = ltrim($key, '!');
  229 +// $row['koef'] = \Yii::$app->converter->convertTo('float', $value, ['precision' => 6]);
  230 +//
  231 +//
  232 +// $arr_values[] = $row;
  233 +//
  234 +// }
  235 +//
  236 +// }
  237 +// // сохраним подготовленные данные
  238 +// MarginsGroups::ManualInsertWithUpdate( $arr_values, [ 'group','importer_id','margin_id' ] );
  239 +//
  240 +//
  241 +// Yii::$app->session->setFlash('success', "Файл {$configuration['file']} успешно загружен");
  242 +// // все прошло успешно - очищаем кеш
  243 +// Yii::$app->getCache()->delete('parser_data');
  244 +// Yii::$app->getCache()->delete('parser_configuration');
  245 +//
  246 +// if (file_exists($configuration['file_path']))
  247 +// unlink($configuration['file_path']);
  248 +//
  249 +// return $this->render('index', ['model' => $configuration]);
  250 +//
  251 +// }
  252 +//
  253 +// }
115 254 }
116 255 \ No newline at end of file
... ...
backend/controllers/ParserController.php
... ... @@ -122,9 +122,9 @@ class ParserController extends BaseController
122 122  
123 123 $data = $model->readFile( $options );
124 124 // сохраняем в кеш отпарсенные даные
125   - Yii::$app->getCache()->set('parser_data', json_encode($data));
  125 + Yii::$app->getCache()->set('parser_data', json_encode($data), 1800);
126 126 // сохраняем в кеш модель - в ней настройки для дальнейшей обработки данных
127   - Yii::$app->getCache()->set('parser_configuration', serialize($model));
  127 + Yii::$app->getCache()->set('parser_configuration', serialize($model), 1800);
128 128  
129 129 } else {
130 130 // не прошла валидация форма загрузки файлов
... ...
backend/controllers/RgGrupController.php
... ... @@ -72,9 +72,9 @@ class RgGrupController extends BaseController
72 72 //запускаем парсинг
73 73 $data = $model->readFile();
74 74 // сохраняем в кеш отпарсенные даные
75   - Yii::$app->getCache()->set('parser_data', json_encode($data));
  75 + Yii::$app->getCache()->set('parser_data', json_encode($data), 1800);
76 76 // сохраняем в кеш модель - в ней настройки для дальнейшей обработки данных
77   - Yii::$app->getCache()->set('parser_configuration', serialize($model));
  77 + Yii::$app->getCache()->set('parser_configuration', serialize($model), 1800);
78 78  
79 79  
80 80 } else {
... ...
backend/views/crossing-upload/results.php 0 → 100644
  1 +<?php
  2 +
  3 +use yii\helpers\Html;
  4 +use yii\multiparser\DynamicFormHelper;
  5 +use yii\widgets\ActiveForm;
  6 +
  7 +
  8 +/* @var $this yii\web\View */
  9 +/* @var $searchModel backend\models\CatalogSearch */
  10 +/* @var $dataProvider yii\data\ActiveDataProvider */
  11 +
  12 +$this->title = 'Отпарсенные данные файла';
  13 +$this->params['breadcrumbs'][] = $this->title;
  14 +?>
  15 +<div class="catalog-index">
  16 +
  17 + <h1><?= Html::encode($this->title) ?></h1>
  18 + <?php // echo $this->render('_search', ['model' => $searchModel]);
  19 +
  20 +
  21 + $form = ActiveForm::begin(['action' => 'write']);
  22 + ?>
  23 + <?= DynamicFormHelper::CreateGridWithDropDownListHeader( $dataProvider, $form, $header_model, $basic_column )?>
  24 +
  25 + <div class="form-group">
  26 + <?= Html::submitButton(Yii::t('app', 'Записать в БД'), ['class' => 'btn btn-primary']) ?>
  27 + </div>
  28 +
  29 + <?php ActiveForm::end() ?>
  30 + <?= Html::a('Вернуться', ['crossing-upload/index'], ['class' => 'btn btn-primary', 'name' => 'Return',]) ?>
  31 +
  32 +</div>
0 33 \ No newline at end of file
... ...