Загрузить и свести данные об идентификаторе ФИАС, городе, улице и номере дома для отдельно взятого региона в табличную форму с использованием представления базы данных
Консольное приложение
- загружает свежую полную выгрузку с сервера ГАР в файловое хранилище
- извлекает данные требуемого региона
- парсит XML файлы с выгрузкой и заносит данные в таблицы
- реализует многопоточность с использованием фасада Process
- представляет данные в удобном табличном виде, используя представление базы данных
Не требует web-сервера и запущенных воркеров Laravel.
Реализована «актуализация» неактивных данных
PHP не ниже 8.1, утилита wget (существует версия для Windows), соединение с базой данных. Если путь к wget не прописан в PATH, следует прописать путь к утилите в конфигурационном файле config/gar.php.
Клонируйте приложение или скачайте его архивом
git clone [email protected]:IggorGor/gar.git
Перейдите в каталог с приложением и настройте права на каталоги
cd gar
sudo chown -R $USER:www-data storage
sudo chown -R $USER:www-data bootstrap/cache
chmod -R 775 storage
chmod -R 775 bootstrap/cache
Настройте .env и config/gar.php. Если ваша база не PostgreSQL, имя базы данных обязательно должно быть gar. В конфигурационном файле настройте номер своего региона и пути. Настройте таймауты и параметр retry_after в файле config/queue.php. Для использования многопоточности драйвер очереди должен отличаться от sync
Установите зависимости
composer install --no-dev --optimize-autoloader
Выполните миграции
php artisan migrate
Выполните команду
php artisan gar:complete-full-import
Дождитесь её выполнения. Время зависит от производительности вашей системы и скорости Интернета.
Воспользуйтесь представлением gar.gar_data_by_uuid для доступа к данным
select * from gar.gar_data_by_uuid
where city_name = 'Ново-Талицы'
and street_name = '5-я Изумрудная'
Или воспользуйтесь моделью Models\Gar\GarDataByUUID
$result = GarDataByUUID::where('house_object_guid', '=',
'5cef293c-745f-4053-bed6-05466f2758f4')->first();
Если что-то не заработало или испытываете проблемы с производительностью, прочитайте статью на habr с описанием приложения
- gar:full-download — скачивает выгрузку в файловое хранилище
- gar:full-extract — извлекает необходимые файлы из выгрузки
- gar:full-import — ставит задания на парсинг xml и запись данных в БД
- gar:start-workers — запускает обработчики очереди Laravel
Бывает, что компании и юр. лица, которым принадлежат дома, не озабочены актуализацией информации. Если информация не актуализирована, ГАР помечает дома, как неактивные, но информация всё равно доступна в справочнике. Чтобы работать с такими домами приходится их "актуализировать".
Поле house_active равно false
, а все поля, кроме,
house_object_id и house_object_guid содержат null
.
Теоретические аспекты актуализации изложены в статье на habr.
На практике нужно вызвать метод, принимающий UUID неактивного дома
GarService::activateHouse('5cef293c-745f-4053-bed6-05466f2758f4');
Важно! Этот метод работает только для полной выгрузки. При выгрузке дельт этот метод приведёт к коллизиям.