Мне нужен экспертный совет по сложному вопросу.
Сценарий:
- веб-сайт электронной коммерции
- много продуктов
- множество скидок, смешанных с этими продуктами.
Продукт идентифицируется уникальным ProductID и имеет торговую цену. Очень классический сценарий. Продукт также может иметь одну или несколько скидок.
Скидка может быть разных типов. Одним из примеров скидки является:
- Купите два или более набора продуктов и получите X процентов от каждого продукта.
Позиция может иметь только одну скидку, поэтому после того, как позиция была уценена, она недоступна для других скидок.
Данные тестового примера:
- Продукт-1: $10
- Продукт-2: $10
- Продукт-3: $50
- Продукт-4: $100
Discount-A: купите два или более и получите 20% от любого из следующих продуктов.
- Продукт-1
- Продукт-2
- Product-3
- Product-4
Discount-B: купите продукт и получите 50% от следующего продукта
- Продукт-3
Сценарий тестирования 1:
Корзина: содержит позиции с:
- Product-1
- Product-3
- Product-4
Расчет # 1:
- Скидка-A: Продукт-1, Продукт-3, Продукт-4 = $2 + $10 + $20 = $32
- = общая сумма 32 $.
Расчет # 2:
- Скидка-A: Продукт-2, Продукт-4 = $2 + $20 = $22
- Скидка-B: Продукт-3 = $25
- = $22 + $25 = $47 общая экономия
Это означает, что комбинация Discount-A и Discount-B предоставит наилучшую скидку для клиента.
Сценарий тестирования 2:
Корзина: содержит позиции с:
- Product-3
- Product-4
Расчет # 1:
- Скидка-А: Продукт-3, Продукт-4 = $10 + $20 = $30
- = общая сумма 30 долларов.
Расчет # 2:
- Скидка-B: Продукт-3 = $25
- = $25 общая экономия
Это означает, что применение Discount-A даст наилучшую скидку для клиента.
Чтобы рассчитать наилучшую скидку для данной корзины, необходимо оценить все комбинации продуктов и доступные скидки на эти продукты.
Обычно в корзине 30-40 позиций с каждой скидкой по 0-3.
В основном я застрял в поиске эффективного способа сделать этот расчет.
В настоящее время алгоритм, который я применяю для скидок, - это что-то вроде:
- Снимите скидки в корзине.
- Получите все уникальные ProductID для LineItems в корзине
- Получите все скидки для этих продуктов ProductID
- Для каждой скидки (неупорядочен)
- Применить скидку, если она удовлетворена позициями, не связанными со скидкой
- Позиции флага со скидкой как дисконтированные
- Применить скидку, если она удовлетворена позициями, не связанными со скидкой
Но этого недостаточно, так как он не тестирует различные комбинации позиций/скидок.
Я искал стандартизованные алгоритмы, которые могут решать такие проблемы, но без везения.
Надеюсь услышать от вас:)