Commit a80ff4695cfd4acfaf888ca54e8d5757b1704ac2
1 parent
49bb0055
add expiration time for caching parser data
Showing
4 changed files
with
175 additions
and
4 deletions
Show diff stats
backend/controllers/CrossingUploadController.php
| @@ -112,4 +112,143 @@ class CrossingUploadController extends BaseController | @@ -112,4 +112,143 @@ class CrossingUploadController extends BaseController | ||
| 112 | throw new \ErrorException( 'Ошибка загрузки данных' ); | 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 | \ No newline at end of file | 255 | \ No newline at end of file |
backend/controllers/ParserController.php
| @@ -122,9 +122,9 @@ class ParserController extends BaseController | @@ -122,9 +122,9 @@ class ParserController extends BaseController | ||
| 122 | 122 | ||
| 123 | $data = $model->readFile( $options ); | 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 | } else { | 129 | } else { |
| 130 | // не прошла валидация форма загрузки файлов | 130 | // не прошла валидация форма загрузки файлов |
backend/controllers/RgGrupController.php
| @@ -72,9 +72,9 @@ class RgGrupController extends BaseController | @@ -72,9 +72,9 @@ class RgGrupController extends BaseController | ||
| 72 | //запускаем парсинг | 72 | //запускаем парсинг |
| 73 | $data = $model->readFile(); | 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 | } else { | 80 | } else { |
| 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 | \ No newline at end of file | 33 | \ No newline at end of file |