- PVSM.RU - https://www.pvsm.ru -
Привет! Меня зовут Алексей Шихов, я руковожу командой разработчиков CarPrice в Кирове. Сейчас Carprice занимает второе место в России по продажам автомобилей на вторичном рынке, и почти все машины, выкупленные в Москве, проходят через один огромный центральный хаб, откуда их забирают покупатели (дилеры) или отправляют в регионы на автовозах. На складе всегда есть как минимум 700 автомобилей, которые не задерживаются там больше чем на пять дней. В этой статье я расскажу, как наша команда из дружных разработчиков и неравнодушной тестировщицы боролась с неизбежным для такого муравейника хаосом и победила его.
Центральный хаб CarPrice — это не просто охраняемая территория, куда мы сваливаем машины в ожидании, пока кто-нибудь за ними приедет. Все поступившие на склад авто проходят технический осмотр, по ним готовят документы и их самих приводят в порядок — заряжают аккумуляторы, доливают топливо, омывающую жидкость и т.п. А еще перед продажей организуют дополнительные осмотры для дилеров.
Дилеры приезжают непредсказуемо — поток был очень непостоянный. Сотрудники склада то бегали высунув языки от машины к машине, то «курили бамбук», не зная, чем себя занять. Бывало, что один дилер забирал сразу десяток автомобилей — это занимало целый день, от раннего утра до глубокой ночи.
Чтобы упорядочить работу, мы создали простой универсальный сервис записи на услуги (он же букинг, он же электронная очередь). В нем получение автомобиля разделено на два шага — осмотр и выдача. Первый включает в себя подготовку к осмотру и сам осмотр автомобиля дилером в присутствии менеджера склада. Далее дилер оплачивает автомобиль и переходит к шагу выдачи, на котором подписываются документы и передаются ключи. Осмотр и выдача могут проходить в разные дни, некоторые дилеры записываются сразу на выдачу без осмотра, а некоторые осматривают один автомобиль несколько раз.
Сервис записи поначалу не представлял собой сложную систему, решал простые и понятные задачи — рассчитывал свободные слоты в зависимости от типа и продолжительности услуги (этапа), с учетом графика работы сотрудников склада.
Дилер заходит в личный кабинет, выбирает один из выигранных на аукционе автомобилей с конечного склада, тип услуги (осмотр или выдачу) и записывается на свободный слот.
Это можно сделать как с десктопа, так и через мобильное приложение. Если дилер по каким-то причинам не может записаться самостоятельно, его может записать персональный менеджер или сотрудник склада.
Такие схемы успешно работают во многих компаниях, и мы надеялись, что как только интегрируем сервис, все проблемы пропадут.
Через некоторое время мы понимаем, что система на практике не работает. Причина в том, что большинство дилеров не очень пунктуальны: приезжают без предварительной записи, значительно позже или раньше назначенного времени, а иногда вообще в другой день. При этом записываются на выдачу, а приезжают на осмотр. Указывали осмотр одной машины, а требуют показать еще пять других. Некоторые дилеры хотят работать только с конкретным менеджером склада. При этом многие дилеры весьма эмоциональны и мириться с несостыковками не способны. При такой непредсказуемости сотрудники склада не понимают, кого из толпы разъяренных дилеров нужно брать в работу, какие авто готовить к осмотру. Мы подумали-подумали и решили внедрить новое решение.
Задумка была многообещающей. Менеджерам не нужно думать кого взять в работу, — нажал кнопку «следующий», и вперед. Дилеры понимают, как загружен склад, видят свою позицию в очереди и знают, сколько примерно ждать. По итогам мониторинга времени обслуживания можно динамически корректировать слоты, а в случае нарушения SLA — оповещать руководство. А на осмотр/выдачу можно записаться прямо с терминала на складе.
На бэкенде должна быть реализована вся логика работы приложений, включая распределение заданий между операторами. Составляющие фронта:
С технической точки зрения, дилер, записываясь на осмотр авто в своем личном кабинете, делает запрос к сервису букинга на бэкенде, в ответ получая список возможных машин для записи, свободные дни и время. Помимо основного, система должна была обрабатывать другие, «жизненные» кейсы:
Было и несколько дополнительных требований:
Требования не казались заоблачными, так что погружаться в это с головой и набивать шишки не хотелось. Мы подумали, что электронная очередь — это уже хорошо разработанная тема, и решили найти подрядчика с готовым коробочным решением, знающего, как подойти к заданным бизнес-кейсам.
Поиск подрядчика ничего не дал. Большинство готовых решений имеют очень примитивный алгоритм. Талоны складываются в одну общую очередь или с разбивкой по категориям, а затем операторы поочередно талоны из очереди вытаскивают. Всё. Гибкой настройки нет, логики распределения талонов между операторами нет, еще и работает система обычно лишь в Windows. Про легкую интеграцию с внутренними сервисами я даже говорить не буду. При этом ценники у всех космические. Мы все-таки начали работать с одним подрядчиком, но из нужных функций у него было процентов десять, а все остальное пришлось бы долго пилить. Так что мы расстались и решили написать электронную очередь самостоятельно.
К этому моменту мы уже четко понимали свои потребности со всеми нюансами и сразу приступили к реализации. Бэкэнд сделали на основе уже ранее созданного сервиса букинга — с использованием Laravel, PHP 7, RabbitMQ, Percona, Websocket, и все в Docker. Весь фронт реализовали на вебсокетах, что позволило сделать реалтайм-интерфейсы.
Терминал собрали из металлического корпуса, в котором прячется iPad. Корпус защищает планшет от кражи и фиксирует его в нужном положении.
На планшете активирован гид-доступ и в полноэкранном браузере без элементов управления запущено стороннее приложение на Vue.js (SPA). Сначала дилер авторизуется в терминале по SMS (JWT). После авторизации он может посмотреть свои записи на осмотр/выдачу и получить талоны для них. Дилерам доступны VIP-услуги с блокировкой средств в личном кошельке.
Каждая запись на осмотр и выдачу заранее привязывается к конкретному менеджеру склада и, если возможно, автоматически группируется с другими записями этого же дилера. При привязке менеджера учитываются расписание и загруженность сотрудников, наличие у дилера других запланированных записей и прочие факторы.
При записи на встречу на счете дилера деньги блокируются, а при получении талона — возвращаются. Записи, по которым не был вовремя получен талон, автоматически отменяются, а со счета дилера списываются деньги за ложную запись. Из полученных талонов формируется очередь, которая распределяется между работающими менеджерами, с учетом времени записи и ожидания дилера, типа записи и пр.
Для VIP выделена отдельная очередь — дилер может взять талон на «прямо сейчас» и сразу пойти на встречу с менеджером, если нет очереди из таких же VIP. Услуга хоть и платная, но пользуется большим спросом у дилеров, которые приехали без записи или опоздали и не хотят ждать.
Другой компонент системы — дашборд — показывает, какой талон у какого оператора обслуживается. Кроме того, он выводит текущую очередь и голосом приглашает дилера проследовать к оператору. По факту это обычный телевизор с подключенным неттопом, на котором запущен полноэкранный браузер и открыто приложение Vue.js (SPA) с параметрами конкретного склада.
У оператора для работы есть пульт — ноутбук на рабочем месте.
На ноутбуке открыт интерфейс оператора, в котором он после авторизации может создавать, изменять и отменять записи, фиксировать результат обслуживания, передавать клиентов и откладывать работу с ними. С помощью этого интерфейса при наличии определенных прав можно настраивать расписание работы менеджеров и их возможные услуги.
Через этот же интерфейс на каждом складе в отдельности можно подробно настраивать SLA. Это позволяет легко масштабировать нашу электронную очередь на любое количество новых складов.
Разных настроек для SLA много, мы отслеживаем работу складов по многим показателям.
Новая система электронной очереди помогает разрулить разные непростые кейсы. Вот несколько для примера:
Если вы внимательно посмотрели на скриншоты настройки SLA выше, то видели там строчки, связанные с мессенджером. Раньше бывало, что сотрудники склада вместо работы уходили покурить на час, а их коллегам приходилось переключаться в авральный режим. Теперь, если сотрудник вышел на работу и не берет дилеров длительное время, руководству приходит уведомление такого вида:
Или вот такие предупреждения о дилерах:
Помимо менеджеров, работающих с дилерами, на складе есть техники, которые готовят машину к назначенному времени осмотра: откапывают из сугроба, заливают топливо, омывайку, заряжают аккумулятор, прогревают двигатель и перегоняют автомобиль с закрытой парковки. Отдельный канал помогает им узнавать об особенностях запуска двигателя и быстрее завершать подготовку. Вот несколько интересных сообщений:
Но вот этот вариант, пожалуй, самый оригинальный:
С помощью новой электронной очереди мы победили хаос на складе, упростили жизнь дилерам и дали им ряд дополнительных услуг. Если перечислять бизнес-показатели, то время ожидания дилеров уменьшилось втрое, количество негативного фидбека — вчетверо, а склад при том же количестве сотрудников теперь может пропускать не 700, а 3000 машин в день. Пока мы наблюдаем за системой и в планах разве что поставить принтер, который будет печатать талоны на бумаге.
Сейчас мы ищем в наш московский офис QA-специалиста [1] и бэкенд-разработчика [2]. Будем рады вашим откликам!
Автор: Шихов Алексей
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/razrabotka-mobil-ny-h-prilozhenij/280175
Ссылки в тексте:
[1] QA-специалиста: https://hh.ru/vacancy/23122617
[2] бэкенд-разработчика: https://hh.ru/vacancy/25438987
[3] Источник: https://habr.com/post/358348/?utm_source=habrahabr&utm_medium=rss&utm_campaign=358348
Нажмите здесь для печати.