Как загрузить данные на сайт франчайзинговой сети, если ERP с нюансами

Рассказываем, как собрать карточку товаров из информации, которая хранится на трех разных серверах заказчика: в коробочной ERP (а это – SAP), в отдельной товароучетной системе и хранилище изображений на выделенном сервере.

Как загрузить данные на сайт франчайзинговой сети, если ERP с нюансами

Разработка интернет-магазинов для торговых сетей, где торговые точки работают как франчайзи, — одна из самых сложных историй. Тем более, если у сети уже есть старый сайт — с клиентами, заказами и интеграциями. Когда заказчик приходит с таким проектом, у него есть отлаженные бизнес-процессы, которые нужно максимально аккуратно перенести на новый сайт. В проекте для «Империи Сумок» — всё было именно так.

О клиенте

«Империя Сумок» — сеть кожгалантереи с 250+ магазинами по всей России, которая существует на рынке больше 25 лет. Бренд работает как сеть франчайзи — это значит, что в разных городах и регионах магазинами владеют разные юрлица: одно юрлицо может содержать несколько магазинов в нескольких городах, а в одном городе может быть несколько магазинов разных юрлиц.

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

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

В чем сложность?

Информация, которая должна подгружаться в карточку товара, хранилась у клиента в трех разных местах:

  1. В ERP SAP, развернутой на собственном сервере клиента – вся номенклатура и описания товаров. Менять или дорабатывать что-либо в этой системе нельзя. SAP выгружает данные в виде xml-файлов, поля следуют в строго определенном порядке.

  2. Цены и остатки – в Domino. Она тоже развернута на отдельном собственном сервере заказчика. В нее собираются данные со всех магазинов (у франчайзи в разных регионах цены могут отличаться), при этом для каждого товара предусмотрены три типа цен: базовая цена, распродажа и суперцена.

  3. Ещё на одном сервере хранятся изображения товаров, созданные за всё время. Каталог постоянно пополняется новыми фото.

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

  • файл SAP, который хранится на сервере заказчика (и обновляется там каждые 2 минуты);

  • XML-файл с ценами и остатками из системы Domino — он выгружается раз в сутки;

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

У SAP строгий порядок выгрузки, поэтому было важно импортировать данные в определенной последовательности: сначала — справочники, товары, свойства, потом — изображения, и только потом — цены и остатки. Иначе вся система ломается: если в базу данных прилетит товар, но в системе не будет справочника, в котором указаны его цвета, она не сможет задать ему цвет.

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

Поскольку данные меняются постоянно, импорт потребовался не разовый, а регулярный. Сайт забирает данные из SAP каждые 5 минут, данные об остатках и ценах получает из Domino раз в сутки (сопоставляя информацию о товаре с его ценой по артикулу), и раз в сутки импортирует новые изображения на сайт.

Как работает импорт файлов с серверов заказчика на сайт на проекте «Империя Сумок»
Как работает импорт файлов с серверов заказчика на сайт на проекте «Империя Сумок»

Товаров в каталоге у Империи много (больше 100000, а разных ценовых предложений по товарам — больше 1,5 млн), поэтому импорт пришлось ускорять. Для этого мы использовали сервер очередей, чтобы выполнять запросы параллельно.

Поскольку для SAP крайне важна последовательность импорта, а сервер очередей выхватывает произвольные куски из общего объема импортируемых данных, мы написали отдельный программный код, который следил за параллельно-последовательным импортом, чтобы задачи можно было ставить в очередь. Ежедневный сбор данных из трех систем сократился у нас примерно с 5 часов до 10 минут.

Итого

Если вы работаете с проектом, ERP которого нельзя дорабатывать, а данные берутся не только из неё:

  • файл с данными для импорта на сайт наверняка будет довольно тяжелым. Используйте сервер очередей и Service Worker-ы (скрипты, которые работают в фоновом режиме), чтобы обработать его по частям. Так значительно быстрее,

  • для оперативного получения всех файлов импорта разом подойдёт серверная утилита (например, rSYNC).

Больше деталей по ссылке:

99
Начать дискуссию