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