/** * Поиск в справочнике * * @param string $q * @param string $f * @return array */ public function actionIndex($q = null, $f = 'bik') { Yii::$app->response->format = Response::FORMAT_JSON; if (!array_key_exists($f, (new Bank())->getAttributes())) { return 'Нельзя искать по запрашиваемому полю.'; } return array_values(ArrayHelper::map(Bank::find()->andFilterWhere(['like', $f, $q])->all(), 'bik', 'attributes')); }
/** * Обновляет справочник банков, используя указанный файл или файл из папки data. * * Необходимо расширение dbase. Установить расширение dbase можно так: sudo pecl install dbase * * @param null $file * @return int */ public function actionIndex($file = null) { if (!extension_loaded('dbase')) { $this->stdout("Для работы скрипта обновления необходимо установить расширение dbase\n", Console::FG_RED); return 1; } if ($file === null) { $file = Yii::getAlias(dirname(__FILE__) . '/../data/bnkseek.dbf'); } else { $file = Yii::getAlias($file); } if (!file_exists($file)) { $this->stdout("Файл {$file} не найден!\n", Console::FG_RED); return 1; } if ($this->confirm("Обновить справочник банков России, используя файл {$file}?")) { $this->stdout('Выполняю обновление...' . "\n"); $db = dbase_open($file, 0); if (!$db) { $this->stdout("Не удалось открыть файл как базу данный dbase!\n", Console::FG_RED); return 1; } $current_db_records_count = Bank::find()->count(); $data_records_count = dbase_numrecords($db); $data_updated = false; $this->stdout("Количество банков в текущем справочнике - {$current_db_records_count}.\n"); $this->stdout("Количество банков в файле - {$data_records_count}.\n"); for ($i = 1; $i <= $data_records_count; $i++) { $rec = dbase_get_record_with_names($db, $i); /** @var Bank $model */ $model = Yii::createObject(['class' => Bank::className(), 'bik' => $rec["NEWNUM"], 'okpo' => $rec["OKPO"], 'full_name' => iconv('CP866', 'utf-8', $rec["NAMEP"]), 'short_name' => iconv('CP866', 'utf-8', $rec["NAMEN"]), 'ks' => $rec["KSNP"], 'city' => iconv('CP866', 'utf-8', $rec["NNP"]), 'zip' => (int) $rec["IND"], 'address' => iconv('CP866', 'utf-8', $rec["ADR"]), 'tel' => iconv('CP866', 'utf-8', $rec["TELEF"])]); foreach ($model->getAttributes() as $key => $value) { $model->{$key} = trim($value); } /** @var Bank $exist */ $exist = Bank::findOne($model->bik); if (!$exist) { $this->stdout("Добавлен новый банк: {$model->bik} {$model->short_name}\n"); $data_updated = true; $model->save(false); } else { if ($exist->getAttributes() != $model->getAttributes()) { $exist->setAttributes($model->getAttributes()); $this->stdout("Обновлены данные банка: {$exist->bik} {$exist->short_name}\n"); $data_updated = true; $exist->save(false); } } } dbase_close($db); if ($data_updated) { $this->stdout('Справочник банков успешно обновлен!' . "\n", Console::FG_GREEN); } else { $this->stdout('В справочник банков не было внесено изменений.' . "\n", Console::FG_GREEN); } } return 0; }