GiftProm

Разработка гибкой CRM для продажи на маркетплейсах по FBS модели

Компания GiftProm продает и производит сувенирную продукцию. Реализует свою продукцию на Wildberries, Ozon и Яндекс Маркет. Большое внимание они уделяют производственной экспертизе, точно знают свою аудиторию, их интересы и ожидания. Поэтому многие задачи, которые обычно отдают на аутсорс, делают сами — фотосъемку товаров, производство товаров, работу с аналитикой.

Задачи проекта

Перед нами встала задача по разработке мощной CRM с возможностью обрабатывать сборочные задания маркетплейсов. Разработать свою ERP для сборочно-производственного цикла. Внедрить систему сканирования штрихкодов для автоматизации производственного процесса. Внедрить сервис «Мой склад» для обновления остатков с помощью их API. Реализовать систему мультиаккаунтов различных юридических лиц.

CRM

У компании есть свое производство товаров, поэтому была реализована система управления для автоматизации сборочно-производственного цикла.

Реализован функционал авто-приемки сборочных заданий. В фоновом режиме функция производит проверку новых сборочных заданий через API и меняет им статус.

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

Для каждого из маркетплейса разработана функция по массовому созданию товаров с изображениями. Администратор создает запись на загрузку товаров, закрепляет архив с медиа контентом, далее в фоне происходит обмен данными между API маркетплейсов и создаются товары.

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

Внедрен фильтр по поиску сборочных заданий с учетом параметров: тип маркетплейса, маркер товара, состояние маркера, статус, ярлык, мой склад, организация. У фильтров есть возможность создавать свои пресеты. При фильтрации появляется кнопка сохранить пресет, в котором можно задать его имя (например: заказы по wb со статусом сборка завершена за сегодня)

Со сборочными заданиями одновременно работают сразу несколько менеджеров, поэтому мы внедрили мгновенное отображение записей в режиме реального времени. Для этого мы использовали Socket.io, Express.js и Node.js. Express.js мы использовали как серверную платформу для веб-приложения Node.js. Так же для приложения использовали библиотеку Socket.io для обмена данными в реальном времени, оно состоит из двух частей: клиентской, которая запускается в браузере и серверной для Node.js. Оба компонента имеют похожее API.

Так как в сезонное время производство работает круглосуточно, то была внедрена ночная тема в интерфейс:

Взамодействие между маркетплейсами и организациями

Так как у каждого маркетплейса свое api, свои правила и требования, мы столкнулись с тем, что каркас системы должен быть гибким и учитывать правила каждого из маркетплейсов. Плюс к этому, соблюдена возможность обрабатывать данные по разным организациям. У каждой организации есть возможность создавать свои структурированные каталоги товаров, настраивать свое взаимодействие с API маркетплейсов. При этом сборочные задания для разных организаций отображаются в одной таблице.

Интерактивность интерфейса

Проект включает в себя раздел аналитики, где администратор может просматривать различную статистику. Одним из таких блоков являются: графики и интерактивные карты. Данные блоки реализованы с помощью canvas. Решено было использовать связку Vue Konva для отрисовки графики, так как библиотека имеет хороший функционал по прорисовке сложных path обьектов и простейших фигур.

Система управления складами

Мы реализовали полную синхронизацию склада товаров с сайтом с помощью сервиса «Мой склад».

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

При определенном триггере происходит отметка заказа флажком на списание товарной позиции со склада. Cron скрипт проверяет в определенный интервал времени и списывает такие товары целым списком. Так как товарных позиций на списание может быть много, реализована система, которая плавно списывает остатки и не нагружает систему.

wkhtmltopdf

Когда нам потребовалось печатать ярлыки для маркетплейсов, нам нужно было либо написать свое решение, либо найти готовое. Мы нашли прекрасный инструмент wkhtmltopdf для рендеринга HTML в PDF и интегрировали его.

Создается HTML с набором ярлыков и печатных бланков, а с помощью wkhtmltopdf происходит генерация готового pdf файла с большим списком сборочных заданий. Остается только отправить данный файл на печать.

Стек технологий

  • Бэкэнд написанный на php;
  • PostgreSQL, которая используется в качестве базы данных продуктов, категорий и других изменяемых сущностей;
  • Vue.js был использован для создания пользовательских интерфейсов интерактивных блоков canvas;
  • KonvaJS — библиотека была использована для создание простых и слолжных графических фигур;
  • Node.js - программная платформа, основанная на движке V8;
  • Socket.IO — библиотека для веб-приложений и обмена данными в реальном времени;
  • Express — фреймворк web-приложений для Node.js;
  • Wkhtmltopdf — инструменты командной строки с открытым исходным кодом (LGPLv3) для преобразования HTML в PDF и различные форматы изображений с использованием механизма рендеринга Qt WebKit;