ООО «ФУДСЭНДГУДС»
30 000 000
Торговля
Россия, Москва
Октябрь 2023
Клиент намеревался создать сервис складского учета продуктов питания, который автоматизирует процессы формирования заказов, их отгрузки, приемки и логистики. Все это происходит с помощью технологичных сборочных линий с фиксацией результата на каждом этапе: от получения сборщиком заказа в системе, через отметки о сборке каждой единицы с фиксации веса, до укладки в транспортировочный контейнер и отправки заказчику. С другой стороны, это сервис-каталог доставки для заведений общественного питания, где они могут приобретать необходимую им продукцию таким образом чтобы поставки были регулярными и в надлежащем качестве. Для этого им предлагаются специальные интерфейсы заказа и приемки. Вся система в целом обеспечивает консистентный, уникальный опыт простоты обслуживания заказов на каждом этапе. Бюджет, который закладывался на проект был порядка 30 млн. руб.
Как работали склады до автоматизации?
В начале дня на складе менеджеры по закупкам формировали заказы. В этот момент определялся их состав исходя из поступивших ранее звонков и сообщений от клиентов, в которых они просили привезти все необходимое. Каждую позицию менеджерам необходимо было добавить в базу данных 1С. В дальнейшем она являлась источником правды обо том, что, когда и кому нужно привести.
Далее для сборки заказов необходимо помечать готовые к отправке позиции, специальными этикетками. Их печатали по многу выгружая данные из 1С и вырезая ножницами. Таких этикеток могло быть до одной тысячи в день. Также менеджерам нужно было подготовить отчеты на подпись для директора и бумаги для водителей с информацией о заказах.
Вся эта работа происходила днем и к вечеру формировалось все необходимое для сборки заказов, которые нужно отвезти клиентам следующим утром. Бывает такое, что на складе нет нужных товаров, тогда в дело вступают докупщики, которые срочно отправляются искать недостающие позиции.
Далее в дело вступали курьеры, которым вручали список адресов и какие продукты им нужно отгрузить. Им нужно было сообразить такой маршрут чтобы успеть к каждому вовремя учитывая время на приемку заказов каждым клиентом, которая часто шла не по плану.
Разумеется все это происходит в суматохе, люди допускают ошибки при формировании и сборке заказов, указав или не то количество свежих авокадо или отгрузив 60 килограмм картофеля не тому клиенту.
Программный комплекс состоит из двух модулей: обслуживание заказов и логистика. В данный момент они функционируют следующим образом.
Что под капотом?
На складе есть сервер, где развернут 1С и роутеры Mikrotik один из которых подключен с помощью Wireguard по зашифрованному каналу к серверами в Яндекс Облаке. Таким образом мы можем связать базу данных, весы, камеры, принтеры и приложения в одну сеть, где данные обрабатываются быстро и безопасно. Посмотрим на компоненты ближе.
У весов есть сетевые карты и собственный бинарный протокол по которому они общаются. Как только весы подключены, к ним можно на определенный порт и запросить данные. При установленном соединении они пересылают данные в реальном времени 50 раз в секунду. Так в приложении сборщик видит точные данные и может их фиксировать.
Также как и весы, у принтеров есть сетевая карта и собственный бинарный протокол. У них очень ограниченный API и они могут рисовать только базовые фигуры, коды и текст. Кроме того принтер не может обработать два запроса одновременно и зависает. Также через некоторое время без получения запросов он уходит в сон и перестает быть доступным в сети.
Чтобы решить эти проблемы мы научили наш сервис работы с устройствами отправлять запросы к принтерам время от времени и ставить новые запросы в очередь, чтобы они отправлялись по одному.
Вместе с этим, периодически запрашивая у весов статус чтоб они не засыпали мы знаем не случилось ли с ними что-то нехорошее. Вроде залитой соком сетевой карты. А еще у нас есть алгоритм, который преобразует любую картинку в BPM в понятный принтеру формат из доступных ему элементарных фигур.
Для экономии ресурсов на разработку мы сделали одно кросс-платформенное приложение для всех участников процесса. У каждого был свой логин, под которым согласно роли отображался интерфейс для сборщика с перечнем заказов и товаров них с фиксацией веса и факта сборки, докупщика со списком товаров для покупки, и курьера. Здесь самое интересное. Дело в том, что телефон водителя должен в реальном времени отправлять следующие данные:
- Координаты
- Уровень заряда аккумулятора
- Статус активности модуля GPS/ГЛОНАСС
- Идентификатор устройства
В том числе когда приложение свернуто или закрыто. Также желательно не расплавить и не взорвать от нагрузки смартфон в салоне или кармане водителя.
А еще не сильно разряжать аккумулятор. Для этого мы сделали специальную задачу внутри телефона, который устанавливается вместе с приложением в Android State. Она запускается раз в секунду и выполняет минимальный алгоритм по сбору и отправке данных.
Чтобы настроить эту логику нашим инженерам пришлось выехать в поля с телефонами и ноутбуками корректируя алгоритм на реальных данных. Так удалось добиться нужной плавности и точности.
За нее отвечает специальный сервис на NodeJS и отдельная база данных, где есть данные необходимые для подключения ко всем устройствам. Этот сервис поднимает соединения, получает данные, обрабатывает их и кладет в Redis, откуда их быстро могут забирать клиенты. Так может обрабатываться до 10к запросов в секунду.
Для этой платформы мы написали специальный обработчик, который запускается раз в секунду и получает данные от сервера приложений о событиях произошедших с товарами, например заказ или отгрузка.
Так после заказа до появления данных в 1С проходит не более 2х секунд.
Обслуживание заказов
В процессах обслуживания заказов задействованы три категории специалистов:
- Менеджеры
- Сборщики
- Закупщики
Менеджеры формируют, верифицируют и назначают в доставку заказы в специальном веб-приложении.
У сборщиков есть мобильное приложение в котором отображается информация о том, что и в каком количестве ему нужно собрать. Достаточно найти на складе продукт, отнести его на весы, получить напечатанную этикетку и отметить как позицию как собранную.
У закупщиков, отвечающих за срочные поставки продуктов тоже есть свое приложение, где они сразу видят информацию о том, что сборщик столкнулся с нехваткой товара. Так к концу смены сборщиков у них сразу есть вся необходимая информация.
Связь базы данных, приложений, принтеров и весов — ключевая часть автоматизации. Когда продукт найден на складе приложение сообщает на какие весы его нести. Некоторые могут взвешивать десятки килограмм, а некоторые только пару. На месте сборщик кладет товар на весы и жмет кнопку «Зафиксировать». В этот момент принтер печатает уникальную этикетку со всеми данными о заказе, а камера фотографирует продукт на весах и отправляет полученные данные на сервер. После приложение сообщает сборщику в какой контейнер отнести эту позицию.
Логистика
Обслуживают:
- Менеджеры
- Курьеры
- Клиенты
У менеджеров есть карта, на которой видны адреса всех клиентов ожидающих сегодня поставки. Им нужно спланировать в каком порядке каждому курьеру объехать клиентов учитывая время в пути от одной точки до другой, сколько времени он проведет на разгрузке и особенности маршрута. Все расчеты система осуществляет на лету. План можно сделать в вручную или автоматически, как подскажет система на основе данных о прошлых доставках.
Чтобы менеджеру было проще, в интерфейсе предусмотрены специальные фильтры, где можно выбрать конкретного курьера, дату, заказы и их статусы. Отдельно отмечаются новые заказы на которые никто еще не назначен. Когда происходят задержки здесь можно поменять адреса местами или добавить новые. В этом случае маршрут перестраивается автоматически, а клиенты получают уведомления.
В режиме реального времени на карте видно как двигаются курьеры, нет ли у них проблем. К примеру, когда клиент принимает заказы в приложении, каждую отдельную позицию он может принять полностью, частично или отказаться. Все это он отмечает в приложении сам или просит курьера, у которого также есть возможность вносить такую информацию. По завершении приемки есть возможность оставить оценку и комментарий.
Курьеры могут обманывать своего нанимателя выполняя заказы на стороне или просто бездействовать выключая телефон с запущенным приложением. Чтобы предупредить такое поведение, кроме геолокации также отправляются данные о статусе заряда, уровне приема мобильной сети и состоянии телефона. Это не зависит от того запущено приложение или нет. Так можно отделить технические проблемы у водителя от обмана.
Хаматханов Магомед Исаевич
Генеральный директор
Co ScriptHeads мы прошли долгий путь от первого запуска, через сложный пивот к B2B
сегменту. За это время они сделали несколько кроссплатформенных мобильных приложений на React-Native: для клиентов, курьеров и работников склада. Также веб- приложение для менеджеров с групповыми чатами и бэкенд на NodeJS с PostgreSQL.
Сейчас Foods&Goods — это сложный сервис HoReCa, который включает в себя большие объемы данных , интеграции с 1C , принтерами, весами через защищенные каналы
wireguard и отслеживание курьеров в реальном времени по GPS. Отдельно хочу отметить, что релизы проходят быстро и система адекватно масштабируется в Яндекс Облаке так , что не приходится тратить на нее кучу средств или наблюдать проблемы с доступностью сервиса.
Script Heads с удовольствием обсудит вашу задачу