Дмитрий Гапонов › Nautisss
Сайты руками, боты и парсеры на Python, чертежи в AutoCAD
Рейтинг
5 442
№ 268 в каталоге
Отзывы
Профессионализм
10/10
Коммуникация
10 /10
На сайте с
2025 года
Юридический статус
Самозанятый

Синхронизация магазина на OpenCart со складской системой - остатки, цены и артикулы на 800 тысяч карточек

Описание

Магазин на OpenCart, восемьсот тысяч карточек, товар приходит и от поставщика, и из складской системы владельца. Остатки с ценами расходились с реальностью - карточка обещала наличие, а товара не было, цена на витрине стояла поставщика, хотя продавать владелец хотел по своей колонке в складской системе.

Артикулы в двух системах написаны по-разному. В складской они с приставкой, на сайте без неё, и сверка между системами держалась на честном слове.

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

Решение

Первым делом развёл источники по ролям и оставил у каждой колонки ровно одного писателя. Порядок цены такой - сначала колонка владельца из складской системы, нет её - цена поставщика, нет и её - остаётся прежняя.

Цены пришлось тянуть другим методом. Штатный отчёт по остаткам отдаёт только первый тип цены, параметр выбора он принимает без ошибки и молча игнорирует. Все типы цен отдаёт только выгрузка ассортимента, а она тяжёлая - 13,5 МБ на страницу в тысячу позиций, весь каталог это 98 страниц и около пятнадцати минут. Поэтому режимы разведены. Остатки идут быстрым прогоном раз в час, цены отдельным ночным до сборки выгрузок, третий режим только переносит готовое на витрину, четвёртый крутится вхолостую и витрину не трогает.

Артикулы переименовал все восемьсот тысяч за 17,6 секунды. Чтобы ничего не останавливать, промежуточная таблица хранит артикул в двух написаниях - до переименования совпадал короткий ключ, после длинный. Сразу после переименования запрос на расхождения с источниками дал ноль.

Обнуление остатка сделал в NULL. Ноль погасил бы запасной источник, и товар, которого нет в складской системе, но есть у поставщика, снова уехал бы в предзаказ.

Перед включением посчитал разброс цен и нашёл в колонке владельца битые значения - 3 714 артикулов сидят на четырёх одинаковых ценах, жало для паяльника за 110 тысяч при закупке 74 рубля. Ни один из них не в наличии, поэтому фильтр ставить не стал, цены отдал как просили, а про битые написал отдельным сообщением. Заодно проверил обратное - рост в десять раз у товаров в наличии оказался нормальной наценкой на мелочёвке, и порог «дороже поставщика в десять раз» выкинул бы именно их.

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

Результат

Цена обновилась у 799 714 карточек из 800 371, из них 800 135 пришли из складской системы, остальные от поставщика. Средняя цена карточки выросла с 1 933 до 2 211 рублей, карточек с нулевой ценой ноль. Обновление всего каталога одним запросом заняло 61,8 секунды, товарные выгрузки пересобрались следом за 19,8 секунды. Откат подготовлен заранее - отдельная таблица с прежними ценами и остатками на все карточки и копии прежних скриптов рядом.

Оценили проект:

Другие проекты

Все проекты →
Дизайн и Брендинг Векторные макеты под лазерную гравировку по металлу - образа и наградные плиты
Векторные макеты под лазерную гравировку по металлу - образа и наградные плиты
8
Инженерия и Проектирование Узел крепления приводного вала: замена шлицевой гайки на стопорную, эскиз А3 и расчёт затяжки
Узел крепления приводного вала: замена шлицевой гайки на стопорную, эскиз А3 и расчёт затяжки
7
Веб-разработка и IT Сбор юзернеймов из комментариев соцсети по ключевым словам с выгрузкой в Google-таблицу
Сбор юзернеймов из комментариев соцсети по ключевым словам с выгрузкой в Google-таблицу
8
Веб-разработка и IT Магазин электроники на 800 тысяч товаров - товарные фиды, фильтр по характеристикам, ускорение
Магазин электроники на 800 тысяч товаров - товарные фиды, фильтр по характеристикам, ускорение
4