Code Monkey home page Code Monkey logo

gar's Introduction

Импорт базы ГАР в Laravel 10

Решаемая задача

Загрузить и свести данные об идентификаторе ФИАС, городе, улице и номере дома для отдельно взятого региона в табличную форму с использованием представления базы данных

О приложении

Консольное приложение

  • загружает свежую полную выгрузку с сервера ГАР в файловое хранилище
  • извлекает данные требуемого региона
  • парсит 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');

Важно! Этот метод работает только для полной выгрузки. При выгрузке дельт этот метод приведёт к коллизиям.

gar's People

Contributors

iggorgor avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.