Заказчик хотел создать продукт, который будет полезен для компаний и собственников различных объектов недвижимости, в том числе земельных участков, а также увеличить скорость производимых вычислений.
Поначалу заказчик хотел получить парсинг сайтов-агрегаторов объявлений, который создавал бы архивы с данными и медиафайлами.
Приложение должно было сравнивать объект с другим объектом и рассчитывать цену с учетом корректировок.
В процессе к задачам добавились создание расчетов в формате xlsx и возможность продажи доступа к контенту приложения.
Создали веб-приложение и разбили все функции на отдельные сервисы. База данных, парсер, сервис для обработки объявлений и сервис для скачивания и обработки изображений — все работает независимо друг от друга.
Поисковые результаты выдаются в табличной форме. После того как заказчик позвонит по объявлениям, он может скорректировать и дополнить данные.
Расчет стоимости объекта недвижимости выдается в «экселевской» таблице.
Реализовали функцию личного кабинета. Заказчик может выдавать клиентам платный доступ к приложению, чтобы они вели свои базы аналогов и приватные расчеты.
Заказчик обратился к нам в июле 2018 года. Четкого ТЗ не было, потому что заказчику было комфортнее работать в гибком режиме. У него было много идей, а ТЗ постоянно устаревало. Мы брали небольшой пул задач и выполняли его, новые идеи приветствовали и обсуждали. Хотя такой подход тормозил процесс разработки, было много свободы для неординарных решений.
Заказчик пришел к нам с желанием упростить агрегацию объявлений с различных сайтов. Нам нужно было создать приложение, которое парсило бы объявления с сайтов-агрегаторов по нужным критериям и хранило бы данные в архиве. В результате можно было бы получить стоимость отдельно стоящего объекта недвижимости с помощью алгоритма, который использует цены объектов-аналогов с учетом корректировок.
Разработку начинали с нуля. Для начала мы создали парсер без дополнительных функций. Он серфил по сайтам с объявлениями, собирал их в одном месте, скачивал изображения, приводил в красивый, читаемый вид и отправлял архивом заказчику.
Затем появилось предложение создать базу аналогов на основе парсинга объявлений с возможностью редактирования данных сотрудниками компании.
После возникла идея генерации xlsx-файла с расчетами по отдельно стоящим объектам недвижимости. Для управления расчетами были внедрены корректировки параметров объектов-аналогов.
Затем решили создать личный кабинет для внешних пользователей, не связанных с компанией. Клиенту приложения дается доступ в кабинет, где он может добавить свой объект для расчетов и загрузить объявления с объектами-аналогами, если ему не хватает аналогов из общей базы. Подробные расчеты видны только тому, кто загрузил объект в личный кабинет.
Также клиент может добавить свои аналоги в общую базу аналогов. Владелец приложения обзванивает продавцов, проверяет достоверность информации в объявлениях и добавляет объект-аналог в базу.
На выходе пользователь получает xlsx-документ с полным отчетом: информацию об объекте, фотографии, информацию об аналогах, большую сводную таблицу с коэффициентами и скрины литературы, которую брали за основу при создании корректировок.
Тестированием занимался в основном сам заказчик, потому что он не ставил четкого ТЗ и ориентировался на свое представление о том, что он хотел от той или иной функции.
Сложнее всего было увеличить скорость расчетов. Приложение просматривало объекты, которые подходят по параметрам (от 3 до 3 000 штук). Каждый параметр, который участвует в расчетах, указан в форме с корректировками. Нужно было рассчитать каждую корректировку для каждого поля каждого объекта, потом вытащить по формуле то, что подходит. Этот механизм очень ресурсоемкий, и его нужно было ускорить.
Около десяти раз переделывали расчеты. В итоге для каждой корректировки создали отдельный класс с калькулятором. Он берет проект, смотрит, какие корректировки в нем участвуют, из этих классов создает общий калькулятор и прогоняет объект по всем параметрам. Это увеличило скорость вычислений.
Еще мы использовали микросервисную архитектуру: каждая задача выполняется отдельным сервисом, будь то парсер или сервис для обработки объявлений. Процессы работают параллельно, не ссылаясь друг на друга, что тоже ускоряет их работу.
«Клиент очень доволен. Если раньше на обсчет одного объекта у него мог уйти день-два, то сейчас — около часа с заполнением необходимых полей.
В проекте еще есть что улучшить. Нужно вынести расчеты отдельно, разделить фронт и бэк, а еще сделать так, чтобы как можно больше операций выполнялось заранее. Заказчик в данный момент хочет довести продукт до финального вида, а потом уже разрабатывать улучшения».
Мы сократили время расчетов с одного-двух дней до одного часа за счет микросервисной архитектуры и оптимизации алгоритмов расчетов. Добавили выгрузку информации в xlsx-документ и личный кабинет для платного доступа к функционалу приложения.
Клиент активно пользуется продуктом с самого начала разработки и очень доволен тем, как он развивается. Сейчас мы дорабатываем расчет земельных участков.
Разбили выполнение задачи на сервисы. Все процессы по максимуму помещены в абстракции, отдельные сервисы, модули и т. д., чтобы работать параллельно. Такая работа сервисов ускорила вычисления.
Разбили выполнение задачи на сервисы. Все процессы по максимуму помещены в абстракции, отдельные сервисы, модули и т. д., чтобы работать параллельно. Такая работа сервисов ускорила вычисления.