Daniil Popov
and 1 contributors

NAME

FIAS::SQL - Модуль для минимальной работы с данными из базы ФИАC https://fias.nalog.ru/FiasInfo.aspx

VERSION

version 0.08

    # Создание объекта, подключение к базе
    my  $fias = FIAS::SQL->new(
                                db_connection => {
                                    dsn       => 'DBI:mysql:database=fias;host=localhost;port=3306';',
                                    login     => 'user',
                                    password  => 'pass',
                                },
                                # Опциональные параметры
                                additional_connection_params => {
                                    # выставляем флаг UTF-8 для нормальной работы с unicode( опционально)
                                    mysql_enable_utf8 => 1,
                                }
    );

    # автоматическое скачивание и распаковка пока не реализованы
    # файлы брать здесь https://fias.nalog.ru/Updates.aspx ( Полная БД ФИАС, DBF )

    # Загрузка базы из текущей директории
    $fias->load_files( '.' );

    # Получение всех записей первого уровня( регионов )
    my $regions   = $fias->get_address_objects( aolevel=>'region' );

    # Получение всех субъектов региона
    my $under_region = $fias->get_address_objects( parentguid => 'ee594d5e-30a9-40dc-b9f2-0add1be44ba1' );

    # Получение всех строений находящихся на адресном объекте с aoguid '00001be9-7886-4c7b-bcfe-74bdd601b81a'
    my $houses = $fias->get_houses_for_address_objects( '00001be9-7886-4c7b-bcfe-74bdd601b81a' );

    # Получение всех помещений находящихся в строении с houseid '000012ba-2754-425c-ba4a-4c35d0771045'
    my $rooms =  $fias->get_rooms_of_address_objects( '000012ba-2754-425c-ba4a-4c35d0771045' );

методы модуля

new Создание объекта
    %params
        db_connection -- параметры соединения к базе
            dsn         -- DBI Data Source Name
            login       -- логин для подключения к базе
            password    -- пароль для подключения к базе
            # Опционально
            additional_connection_params {
                # флаг для подключения к MySQL базе( опционально )
                mysql_enable_utf8 => 1
            }
load_files Метод для загрузки dbf файлов в базу
    $directory -- папка с DBF файлами
    $update    -- флаг для обновления базы
get_address_objects Получение адресных объектов по уровню и родителю
    %params
        parentguid -- id родительского объекта
        aolevel    -- уровень получаемых объектов
            Уровень объекта может принимать только нижеперечисленные значения
            соответсвия между строками и числами указаны в хеше $LEVELS
                region(1) – уровень региона
                district(3) – уровень района
                settlement(35) – уровень городских и сельских поселений
                town(4) – уровень города
                inhabitet_locality(6) – уровень населенного пункта
                planning_structure(65) – планировочная структура
                street(7) – уровень улицы
                stead(75) – земельный участок
                structure(8) – здания, сооружения, объекта незавершенного строительства
                premises(9) – уровень помещения в пределах здания, сооружения

    Функция возвращает массив из hashrefs квартир в формате
    {
        'aolevel' => '1',
        'shortname' => 'обл',
        'offname' => 'Брянская',
        'aoguid' => 'f5807226-8be0-4ea8-91fc-39d053aec1e2'
    }
    aoguid  --  Глобальный уникальный идентификатор адресного объекта
    aolevel --  Уровень адресного объекта
    offname  --  Официальное наименование
    shortname -- Краткое наименование типа объекта
get_address_objects_guids_only Получение адресных объектов по уровню и родителю, возвращаются только уникальные id объекта
    %params
        parentguid -- id родительского объекта
        aolevel    -- уровень получаемых объектов
            Уровень объекта может принимать только нижеперечисленные значения
            соответствия между строками и числами указаны в хеше $LEVELS
                region(1) – уровень региона
                district(3) – уровень района
                settlement(35) – уровень городских и сельских поселений
                town(4) – уровень города
                inhabitet_locality(6) – уровень населенного пункта
                planning_structure(65) – планировочная структура
                street(7) – уровень улицы
                stead(75) – земельный участок
                structure(8) – здания, сооружения, объекта незавершенного строительства
                premises(9) – уровень помещения в пределах здания, сооружения

    Функция возвращает arrayref из aoguids
get_sublevels_for_objects Получение списка уровней дочерних адресных объектов по id родителя
    parentguid -- id родительского объекта

    Функция возвращает arrayref уровней
get_data_for_object_by_aoguid Получение данных адресного объекта по id
    aoguid -- id  объекта

    Функция возвращает hashref c данными адресного объекта
get_data_for_object_by_aoguid_array Получение данных адресного объекта по id
    aoguid -- id  объекта

    Функция возвращает array c данными адресного объекта
add_object_to_base Добавление объекта в таблицу
    table -- имя таблицы
    @values, список значений
get_houses_of_address_objects Функция возвращает список домов для адресного объекта
    Функция принимает на вход
        $aoguid -- родительский объект для всех домов.
    Функция возвращает  массив из hashrefs квартир в формате
    {
          'buildnum' => '',
          'housenum' => '25',
          'strucnum' => '',
          'aoguid' => '53edf165-0dc2-42b7-81b5-6a87ab08c7df',
          'houseguid' => '65e2fbbc-72ac-4241-b5ca-fa40eb5307fe',
          'postalcode' => '241020'
    };
    housenum -- номер дома
    buildnum -- номер корпуса
    strucnum -- номер строения
    postalcode -- Почтовый индекс
get_data_for_house_by_houseguid Получение данных дома по id
    houseguid -- id  дома

    Функция возвращает hashref c данными дома
get_rooms_of_address_objects Функция возвращает список квартир для дома
    Функция принимает на вход
        $houseguid -- уникальный id дома

    Функция возвращает  массив из hashrefs квартир в формате
    {
        'postalcode' => '241020',
        'roomnumber' => '',
        'roomtype' => 'Не определено',
        'flatnumber' => '2',
        'flattype' => 'квартира',
        'roomguid' => '5039b82c-7975-4494-8920-22ad28cc130b',
        'houseguid' => 'cca694e2-2cf2-4f0c-8f5a-dec652833c1b'
    },
    flatnumber -- номер квартиры, офиса и прочего
    flattype   -- тип квартиры ( из справочника flattype )
    houseguid  -- Глобальный уникальный идентификатор родительского объекта (дома)
    roomguid   -- Глобальный уникальный идентификатор помещения
    postalcode -- Почтовый индекс
    roomnumber -- Номер комнаты или помещения
    roomtype   -- тип комнаты ( из справочника roomtype )
get_data_for_room_by_roomguid Получение данных квартиры по id
    roomguid -- id  квартиры

    Функция возвращает hashref c данными квартиры
<get_parent_record_chain_by_aoguid> Получение цепочки элементов до верхнего уровня по aoguid
    aoguid -- id нижнего элемента
    Функция возвращает arrayref c данными записей
[
    {
        guid    "d967adce-0608-400f-983f-d64ca6e22547",
        level   "planning_structure"
    },
    {
        guid    "978c4d8c-f724-43b1-aa95-0c1fc49dc6b7",
        level   "town"
    },
    {
        aoguid    "2dd692c1-fc95-41a2-86a1-6a83f47914fe",
        level   "district"
    },
    {
        guid    "88cd27e2-6a8a-4421-9718-719a28a0a088",
        level   "region"
    }
]
get_parent_record_chain_by_houseguid Получение цепочки элементов до верхнего уровня по houseguid
    houseguid -- id дома

    Функция возвращает arrayref c данными записей
[
    {
        guid    "cca694e2-2cf2-4f0c-8f5a-dec652833c1b",
        level   "house"
    },
    {
        guid    "dadfc561-e091-44b5-a07c-8d046529dfd4",
        level   "street"
    },
    {
        guid    "414b71cf-921e-4bfc-b6e0-f7395d16aaef",
        level   "town"
    },
    {
        guid    "f5807226-8be0-4ea8-91fc-39d053aec1e2",
        level   "region"
    }
]
get_parent_record_chain_by_roomguid Получение цепочки элементов до верхнего уровня по roomguid
    roomguid -- id помещения

    Функция возвращает arrayref c данными записей
[
    {
        guid    "4f13298c-e20b-4144-b90e-897ef80de2f2",
        level   "room"
    },
    {
        guid    "cca694e2-2cf2-4f0c-8f5a-dec652833c1b",
        level   "house"
    },
    {
        guid    "dadfc561-e091-44b5-a07c-8d046529dfd4",
        level   "street"
    },
    {
        guid    "414b71cf-921e-4bfc-b6e0-f7395d16aaef",
        level   "town"
    },
    {
        guid    "f5807226-8be0-4ea8-91fc-39d053aec1e2",
        level   "region"
    }
]
set_database_version Сохранение версии базы
get_database_version Получение версии базы
get_database_version Получение линка на актуальную базу
get_database_version Получение версии актуальной базы
clone_base_structure создаём таблицы в базе $destination_object -- база назначения
show_tables Список таблиц базы
_check_record_actuality Проверка записи из DBF на актуальность
    $record -- запись взятая из DBF

    возвращаем 1(неактуально) или 0(актуально)
_get_table_fields Функция для получения необходимых полей для записи в таблицы.
    значения полей берём из %table_config
    $sql_table_name -- имя таблицы из DBF полученное обрезанием номера региона и расширения
    HOUSE89.DBF превращается в HOUSE
    $dbf_table -- объект XBase для получения полей из файлов упомянутых в $table_config
_create_table собираем комманду 'CREATE TABLE' для создания таблицы в базе
    $sql_table_name -- имя таблицы из DBF полученное обрезанием номера региона и расширения
    HOUSE89.DBF превращается в HOUSE
    $dbf_table -- объект XBase для получения параметров полей в таблице

    Для каждой таблицы получаем на выходе SQL комманду 'CREATE TABLE ...'
_convert_data конвертируем данные полученные из DBF в соответствующие данные для SQL
    $record         -- запись
    $dbf_table      -- объект XBase для получения данных поля DBF файла
    $sql_table_name -- имя таблицы из DBF полученное обрезанием номера региона и расширения
    HOUSE89.DBF превращается в HOUSE

    На выходе получаем данные DBF удовлетворяющие стандарту SQL перечисленные через запятую
_get_formatted_date Получаем дату для SQL из даты для DBF
    $date -- слитная дата из 8 цифр

    Возвращаем дату разделённую дефисами для нормального помещения в SQL
_get_quoted_text Экранируем и декодируем полученный текст из DBF
        $text -- текст из DBF в cp866

    Возращаем удобоваримый и читаемый текст

AUTHOR

Daniil Popov <popov.daniil@gmail.com>

COPYRIGHT AND LICENSE

This software is copyright (c) 2017-2018 by Daniil Popov.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.