Крупная сеть розничной торговли
Торговля
Россия, Москва
Февраль 2025
Продолжаем рассказывать, как мы работаем с крупной сетью розничной торговли, входящей в топ-10 рынка. На этот раз мы искали решение для экономии места в торговом зале и помощи застенчивым покупателям. Расскажем с какими проблемами столкнулись при разработке кода для замены громоздких терминалов планшетами и о том, как болезнь разработчика поспособствовала нахождению оптимального решения.
О заказчике
Заказчик попросил не только не называть его, но и не указывать его сферу. Однако можем сказать, что это одна из крупнейших сетей розничной торговли, которая представлена даже в небольших городах и населенных пунктах. Ассортимент сети включает особые товары, которые покупатели выбирают осознанно — по конкретным характеристикам и назначению. В таких ситуациях удобство поиска и доступность информации становятся особенно важными элементами сервиса. Именно поэтому внедрение цифрового инструмента, который помогает покупателю найти нужный товар, стало для сети критически важной задачей.
В сетях нашего заказчика более 1500 торговых точек. И во многих из них стоят специальные терминалы. Однако помещения часто имеют ограниченное пространство, и эти терминалы занимают много места. Задача заказчика заключалась в том, чтобы перенести приложение из громоздкого терминала в планшет на Android, который будет прикреплен на стену или установлен на подставку, — так можно было бы значительно сэкономить пространство.
Проблема заказчика
Через терминалы покупатели в торговых точках нашего заказчика могут:
● уточнять наличие товара в магазине;
● искать товары из топ-списка;
● посмотреть цену;
● зарегистрировать карту лояльности;
● оставить обратную связь.
Чем удобны терминалы?
Для покупателей
Терминалы позволяют клиентам найти нужный товар по названию, категории или характеристикам и узнать, есть ли он в магазине. Это особенно полезно для людей, которые хотят быстро найти товар без помощи персонала или предпочитают самостоятельный выбор.
Терминалы предоставляют подробную информацию о товаре: состав, назначение, описание, альтернативы, цены и наличие в текущем магазине.
Поиск альтернатив. Если нужный товар отсутствует или имеет высокую стоимость, терминал может предложить доступные аналоги или заменители.
Для бизнеса
Оптимизация работы персонала. Терминалы разгружают сотрудников и могут сократить очереди в условиях напряженного графика или дефицита кадров.
Сбор аналитики. Терминалы собирают данные: какие запросы делают клиенты, какие товары ищут, какие категории наиболее популярны. Это помогает оптимизировать ассортимент и маркетинг.
Увеличение среднего чека. Через терминалы можно предлагать сопутствующие товары (например, «Вместе с этим товаром часто покупают…»), размещать рекламу и акции.
Повышение лояльности. Удобство использования терминалов делает магазин более привлекательным для клиентов, что повышает их удовлетворенность и вероятность повторных покупок.
Сбор отзывов. Терминалы позволяют собирать обратную связь по разным аспектам работы магазина.
Эти терминалы и предстояло заменить более компактным решением.
В чем сложность:
В ходе изучения задачи выяснилось, что текущее приложение берет информацию о товарах из очень разных источников:
● Информация о наличии товаров и стоимости берется из базы данных, установленной на компьютере заведующего магазином. Она ежедневно обновляется в автоматическом режиме. С этой базой работает терминал по поиску товаров.
● Описание и изображения товаров по FTP тянутся из другой базы.
● Информация о картах лояльности подгружается с сервера и доступна только при наличии интернета.
В отдаленных точках нередки проблемы со стабильной связью. Например, покупатель начинает регистрировать карту лояльности, вводит данные, нажимает «Сохранить», а в этот момент связь пропадает — данные не сохраняются.
Стало понятно, что Android-приложение не сможет нормально работать с таким разрозненным набором данных. Тогда мы предложили заказчику разработать бэкенд, который будет агрегировать все данные, и будущее приложение будет работать уже с ним.
Кроме того, такое решение позволило решить проблему нестабильной связи. Бэкенд устанавливается на компьютер сотрудника магазина и работает в локальной сети. Если пользователь вводит данные (например, отзыв или регистрация карты), они сохраняются локально и отправляются на сервер при восстановлении интернета.
Заказчик согласился, и мы начали работу.

В торговых точках часто стоят компьютеры с невысокой производительностью, под управлением Windows 7/10. Поэтому сервис должен быть максимально легковесным и нересурсоемким.
Заказчик предоставил информацию о минимальной конфигурации компьютеров сети. Для тестирования возможного решения была поставлена задача развернуть Docker-контейнер с PHP-сервером на базе Laravel. Нужно было проверить, хватит ли мощности компьютеру в магазине для стабильной работы HTTP-сервера на Docker с Laravel.
Наш DevOps Андрей Цыганов развернул виртуальную машину с подходящей конфигурацией. Был создан Docker-контейнер с минимальным функционалом для тестирования потребления ресурсов при низкой нагрузке. Конфигурация машины: Windows 7, 4 Гб ОЗУ, процессор Intel Core 2 Duo.
Тесты показали, что Docker не запускается на Windows 7. Ничего не получалось. Нужно было искать другое решение.
И в этот момент наш разработчик Артём заболел, у него поднялась температура, а потом начались выходные. И пока он лечился и отдыхал, ему в голову пришла идея использовать Go.
Вот что он рассказывает:
«Пришла идея попробовать Go. Я нашел у Go отличную документацию, скачал тестовое приложение и сделал примерно то, что нам нужно. За час у меня все заработало. Я подумал: давайте предложим заказчику — это будет очень легкое приложение, именно то, чего он хочет: чтобы мало памяти ело, легко устанавливалось».
Интересно, что эта идея пришла Артёму во время болезни, когда у него была температура и он лежал, скучал и болел.
Но, как оказалось, в его голову пришла мегакрутая идея!
Go обладал рядом преимуществ: кроссплатформенность, большое комьюнити, ориентированность на микросервисы. Мы предполагали, что сервис на Go будет потреблять мало ресурсов. Первая же тестовая сборка сервиса с минимальным функционалом (ping-pong) показала отличные результаты потребления оперативной памяти — всего 12 Кбайт.
Инсталляторы
Самым интересным и непростым этапом стало создание механизма установки сервиса на компьютер каждой из тысячи точек. Представьте: в каждой торговой точке нужно установить бэкенд, а затем поддерживать его при перезагрузках Windows или сбоях питания. Заказчик попросил сделать так, чтобы сервис устанавливался как служба Windows, которая автоматически запускается при перезагрузке системы.
Мы согласились и принялись за работу. Это оказалось непросто: пришлось делать отдельные инсталляторы для Windows 7 и Windows 10, так как часть библиотек Go для Windows 7 не поддерживалась.
Для удобства развертывания мы создали автоинсталлятор, который копирует необходимые файлы, создает службу Windows и ее запускает.
Теперь сисадмину не нужно приезжать в точку — установку можно провести удаленно, и сервис будет работать даже после перезагрузки или сбоя.
Кроме того, мы разработали тестовое API и подробную инструкцию, передав наработки команде заказчика.
На этом наша часть работы над инфокиосками завершилась.
Подписывайтесь на наc в Telegram https://t.me/softoriumpro, где мы рассказываем невыдуманные истории из жизни разработчиков. Все истории настоящие и написаны участниками событий.