Изменение отправки сертификатов и стандартизация заказов

Издревле заказы в нашей системе строились по принципу «здесь и сейчас» — статусы, типы, режимы, методы доставки — всё это приписывалось и дописывалось по обстановке, без слишком детального углубления в бизнес-процессы.
Конечно, модуль заказов работал, в большинстве случаев даже вполне корректно, но в целом был почти полностью разобран и весьма тосклив.
Особенно стало болеть, когда возросло количество промо-акций с призами типа «сертификат» (где приз представляет собой код с определенным рублевым номиналом для какого-нибудь интернет-магазина) — невозможно было четко следить за отправкой и доставкой таких призов, невозможно было переотправлять, и никто не понимал, как оно вообще работает — поэтому мы весной 2014 г. нашли в себе силы, возможности, определили на задачу лучших специалистов и приступили к переделке.
Получилось в итоге так:
  1. Единая для всех типов заказов (почтовые и электронные) система статусов — заказан, отправлен, доставлен, доставка не удалась (этот статус был известен ранее, как «Заказ возвращен»), отменен.
  2. Единая система уведомления об изменении статусов электронных заказов, основанная на системе очередей RabbitMQ.
  3. Отправка сертификатов теперь происходит явно — создание заказа, отправка заказа (раньше отправка происходила при публикации приза, без создания заказа).
  4. Добавлена проверка на допустимые из системы администрирования ручные изменения статусов заказов.
  5. Добавлена возможность отката ошибочного изменения статуса заказа из системы администрирования (конечно, при наличии специального разрешения). При откате заказ переводится в исходное состояние, которое было до ошибочного изменения статуса, но действия, выданные при изменении статуса не удаляются — их можно удалить вручную (а лучше вообще не удалять).
  6. Изменены действия, выдаваемые при создании заказа. Теперь, если потребитель сам купил себе приз в магазине (и при этом автоматически создался заказ) или сам создал себе заказ для доставки ранее выигранных призов, то выдаётся личное действие. Во всех остальных случаях — не личное.
  7. Изменены действия, выдаваемые при изменении статуса заказа. Теперь для каждого статуса своё действие, а точка контакта своя для каждого способа доставки.
  8. Изменены действия, выдаваемые потребителю при выигрыше или покупке приза в магазине. Теперь оно не зависит от приза, а зависит только от механики.
  9. Причины неудачи доставки и отмены заказов теперь отображаются, как в списке заказов, так и на подробном просмотре заказа.
Немного подробнее хочу остановиться на отправке сертификатов. Теперь отправка сертификата происходит аналогично отправке платежа:
  1. Создается заказ (или он уже может быть создан — в зависимости от механики) на основе приза.
  2. Заказ отправляется (только автоматически, никакой ручной отправки больше не предусмотрено).
  3. PROFIT
После этого система сама отслеживает статус доставки или не доставки сертификата и производит соответствующие действия (например, отменяет заказ, если сертификат не был доставлен).
Мы с котиком надеемся, что теперь нам не потребуется менять систему заказов еще как минимум 5 лет.
Кот

Вас заинтересуют следующие материалы