Хабрахабр

Как мы побеждали хаос на центральном складе

Привет, Хабр! Меня зовут Алексей Шихов, я руковожу командой разработчиков CarPrice в Кирове. Сейчас Carprice занимает второе место в России по продажам автомобилей на вторичном рынке, и почти все машины, выкупленные в Москве, проходят через один огромный центральный хаб, откуда их забирают покупатели (дилеры) или отправляют в регионы на автовозах. На складе всегда есть как минимум 700 автомобилей, которые не задерживаются там больше чем на пять дней. В этой статье я расскажу, как наша команда из дружных разработчиков и неравнодушной тестировщицы боролась с неизбежным для такого муравейника хаосом и победила его.

Все поступившие на склад авто проходят технический осмотр, по ним готовят документы и их самих приводят в порядок — заряжают аккумуляторы, доливают топливо, омывающую жидкость и т.п.
Центральный хаб CarPrice — это не просто охраняемая территория, куда мы сваливаем машины в ожидании, пока кто-нибудь за ними приедет. А еще перед продажей организуют дополнительные осмотры для дилеров.

Сотрудники склада то бегали высунув языки от машины к машине, то «курили бамбук», не зная, чем себя занять. Дилеры приезжают непредсказуемо — поток был очень непостоянный. Бывало, что один дилер забирал сразу десяток автомобилей — это занимало целый день, от раннего утра до глубокой ночи.

Букинг-система

Чтобы упорядочить работу, мы создали простой универсальный сервис записи на услуги (он же букинг, он же электронная очередь). В нем получение автомобиля разделено на два шага — осмотр и выдача. Первый включает в себя подготовку к осмотру и сам осмотр автомобиля дилером в присутствии менеджера склада. Далее дилер оплачивает автомобиль и переходит к шагу выдачи, на котором подписываются документы и передаются ключи. Осмотр и выдача могут проходить в разные дни, некоторые дилеры записываются сразу на выдачу без осмотра, а некоторые осматривают один автомобиль несколько раз.

Сервис записи поначалу не представлял собой сложную систему, решал простые и понятные задачи — рассчитывал свободные слоты в зависимости от типа и продолжительности услуги (этапа), с учетом графика работы сотрудников склада.

Дилер заходит в личный кабинет, выбирает один из выигранных на аукционе автомобилей с конечного склада, тип услуги (осмотр или выдачу) и записывается на свободный слот.

Если дилер по каким-то причинам не может записаться самостоятельно, его может записать персональный менеджер или сотрудник склада. Это можно сделать как с десктопа, так и через мобильное приложение.

Такие схемы успешно работают во многих компаниях, и мы надеялись, что как только интегрируем сервис, все проблемы пропадут.

Проблемы не пропадают

Через некоторое время мы понимаем, что система на практике не работает. Причина в том, что большинство дилеров не очень пунктуальны: приезжают без предварительной записи, значительно позже или раньше назначенного времени, а иногда вообще в другой день. При этом записываются на выдачу, а приезжают на осмотр. Указывали осмотр одной машины, а требуют показать еще пять других. Некоторые дилеры хотят работать только с конкретным менеджером склада. При этом многие дилеры весьма эмоциональны и мириться с несостыковками не способны. При такой непредсказуемости сотрудники склада не понимают, кого из толпы разъяренных дилеров нужно брать в работу, какие авто готовить к осмотру. Мы подумали-подумали и решили внедрить новое решение.

Электронная очередь

Задумка была многообещающей. Менеджерам не нужно думать кого взять в работу, — нажал кнопку «следующий», и вперед. Дилеры понимают, как загружен склад, видят свою позицию в очереди и знают, сколько примерно ждать. По итогам мониторинга времени обслуживания можно динамически корректировать слоты, а в случае нарушения SLA — оповещать руководство. А на осмотр/выдачу можно записаться прямо с терминала на складе.

Составляющие фронта: На бэкенде должна быть реализована вся логика работы приложений, включая распределение заданий между операторами.

  • Терминал с авторизацией по номеру телефона, записью на услуги, просмотром доступных авто, подключением платных услуг и выдачей талонов на запись
  • Дашборд с визуализацией очереди и текущих талонов в работе
  • Пульт оператора (менеджера склада)

С технической точки зрения, дилер, записываясь на осмотр авто в своем личном кабинете, делает запрос к сервису букинга на бэкенде, в ответ получая список возможных машин для записи, свободные дни и время. Помимо основного, система должна была обрабатывать другие, «жизненные» кейсы:

  • Дилер записался, приехал/не приехал
  • Дилер записался, приехал вовремя, уложился в слот 30 мин
  • Дилер записался, приехал позже/раньше на 15, 40, 100 мин
  • Дилер записывается/приехал на VIP-выдачу
  • Дилер записался на слот в 30 мин — по факту получилось 10 мин/2 часа
  • Дилер записался на осмотр, приехал, осмотрел, ушел оплатить, через 40 мин вернулся забрать машину

Было и несколько дополнительных требований:

  • Гибкая настройка расписания сотрудников склада с указанием услуг, которые может оказывать каждый. И все это в условиях пересекающихся графиков работы сотрудников — у нас две смены, с 9 до 18 и с 13 до 22
  • Быстрое подключение к системе новых складов
  • Интеграция с другими сервисами — текущим букингом, авторизацией дилера и т.д.
  • Легкое вертикальное и горизонтальное масштабирование
  • Реалтайм-интерфейсы

Требования не казались заоблачными, так что погружаться в это с головой и набивать шишки не хотелось. Мы подумали, что электронная очередь — это уже хорошо разработанная тема, и решили найти подрядчика с готовым коробочным решением, знающего, как подойти к заданным бизнес-кейсам.

Разрабатываем сами

Поиск подрядчика ничего не дал. Большинство готовых решений имеют очень примитивный алгоритм. Талоны складываются в одну общую очередь или с разбивкой по категориям, а затем операторы поочередно талоны из очереди вытаскивают. Всё. Гибкой настройки нет, логики распределения талонов между операторами нет, еще и работает система обычно лишь в Windows. Про легкую интеграцию с внутренними сервисами я даже говорить не буду. При этом ценники у всех космические. Мы все-таки начали работать с одним подрядчиком, но из нужных функций у него было процентов десять, а все остальное пришлось бы долго пилить. Так что мы расстались и решили написать электронную очередь самостоятельно.

Бэкэнд сделали на основе уже ранее созданного сервиса букинга — с использованием Laravel, PHP 7, RabbitMQ, Percona, Websocket, и все в Docker. К этому моменту мы уже четко понимали свои потребности со всеми нюансами и сразу приступили к реализации. Весь фронт реализовали на вебсокетах, что позволило сделать реалтайм-интерфейсы.

Корпус защищает планшет от кражи и фиксирует его в нужном положении. Терминал собрали из металлического корпуса, в котором прячется iPad.

Сначала дилер авторизуется в терминале по SMS (JWT). На планшете активирован гид-доступ и в полноэкранном браузере без элементов управления запущено стороннее приложение на Vue.js (SPA). Дилерам доступны VIP-услуги с блокировкой средств в личном кошельке. После авторизации он может посмотреть свои записи на осмотр/выдачу и получить талоны для них.

При привязке менеджера учитываются расписание и загруженность сотрудников, наличие у дилера других запланированных записей и прочие факторы. Каждая запись на осмотр и выдачу заранее привязывается к конкретному менеджеру склада и, если возможно, автоматически группируется с другими записями этого же дилера.

Записи, по которым не был вовремя получен талон, автоматически отменяются, а со счета дилера списываются деньги за ложную запись. При записи на встречу на счете дилера деньги блокируются, а при получении талона — возвращаются. Из полученных талонов формируется очередь, которая распределяется между работающими менеджерами, с учетом времени записи и ожидания дилера, типа записи и пр.

Услуга хоть и платная, но пользуется большим спросом у дилеров, которые приехали без записи или опоздали и не хотят ждать. Для VIP выделена отдельная очередь — дилер может взять талон на «прямо сейчас» и сразу пойти на встречу с менеджером, если нет очереди из таких же VIP.

Кроме того, он выводит текущую очередь и голосом приглашает дилера проследовать к оператору. Другой компонент системы — дашборд — показывает, какой талон у какого оператора обслуживается. По факту это обычный телевизор с подключенным неттопом, на котором запущен полноэкранный браузер и открыто приложение Vue.js (SPA) с параметрами конкретного склада.

У оператора для работы есть пульт — ноутбук на рабочем месте.

С помощью этого интерфейса при наличии определенных прав можно настраивать расписание работы менеджеров и их возможные услуги. На ноутбуке открыт интерфейс оператора, в котором он после авторизации может создавать, изменять и отменять записи, фиксировать результат обслуживания, передавать клиентов и откладывать работу с ними.

Это позволяет легко масштабировать нашу электронную очередь на любое количество новых складов. Через этот же интерфейс на каждом складе в отдельности можно подробно настраивать SLA.

Разных настроек для SLA много, мы отслеживаем работу складов по многим показателям.

Вот несколько для примера: Новая система электронной очереди помогает разрулить разные непростые кейсы.

  • Дилер записался на несколько авто, сильно опоздал и половина из них стали просрочены. Получается, что запись просрочена частично, так что дилер все равно видит ее в терминале и может получить по ней талон. Менеджер в пульте оператора видит, что часть услуг просрочена, может завершить работу с талоном без них, либо удалить часть активных и добавить вместо них просроченные услуги.
  • Дилер приехал на осмотр и выдачу авто, но у машины обнаружились дефекты. Теперь дилеру нужна не выдача, а формирование претензии на возврат. В пульте оператора менеджер может сделать это одной кнопкой — изменить тип услуги с выдачи на претензию.
  • Дилер приехал на осмотр одной машины, а хочет осмотреть другую. Менеджер в пульте оператора может в талоне заменить машину для осмотра.

Мониторинг SLA через Telegram

Если вы внимательно посмотрели на скриншоты настройки SLA выше, то видели там строчки, связанные с мессенджером. Раньше бывало, что сотрудники склада вместо работы уходили покурить на час, а их коллегам приходилось переключаться в авральный режим. Теперь, если сотрудник вышел на работу и не берет дилеров длительное время, руководству приходит уведомление такого вида:

Или вот такие предупреждения о дилерах:

Отдельный канал помогает им узнавать об особенностях запуска двигателя и быстрее завершать подготовку. Помимо менеджеров, работающих с дилерами, на складе есть техники, которые готовят машину к назначенному времени осмотра: откапывают из сугроба, заливают топливо, омывайку, заряжают аккумулятор, прогревают двигатель и перегоняют автомобиль с закрытой парковки. Вот несколько интересных сообщений:


Но вот этот вариант, пожалуй, самый оригинальный:

Итоги

С помощью новой электронной очереди мы победили хаос на складе, упростили жизнь дилерам и дали им ряд дополнительных услуг. Если перечислять бизнес-показатели, то время ожидания дилеров уменьшилось втрое, количество негативного фидбека — вчетверо, а склад при том же количестве сотрудников теперь может пропускать не 700, а 3000 машин в день. Пока мы наблюдаем за системой и в планах разве что поставить принтер, который будет печатать талоны на бумаге.

Будем рады вашим откликам! Сейчас мы ищем в наш московский офис QA-специалиста и бэкенд-разработчика.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть