Во многих деловых сценариях расчет Заказ всего включает в себя сложную логику, такую как динамическая плата за обработку на основе элементов, пакетов или пользовательских правил. По умолчанию IOrderGroupCalculator реализация в DefaultOrderGroupCalculator может недостаточно для этих передовых требований.
DefaultOrderGroupCalculator Служба вычисляет следующие, а пользовательский класс может переопределить связанный метод.
- Общий – переопределить GetTotal (iorderGroup OrderGroup)
- Подтотальный – переопределить GetSubtotal (iorderGroup OrderGroup)
- Обработка всего – переопределить Gethandlingtotal (iordergroup ordergroup)
- Доставка подтотала – переопределить getShippingSubtotal (iordergroup ordergroup)
- Заказ скидка общая сумма – переопределить getorderdiscounttotal (iordergroup ordergroup)
- Общая налог – переопределить gettaxtotal (iordergroup ordergroup)
- Заказ группы Всего – переопределить getordergrouptotals (iordergroup ordergroup)
Расширение логики расчета
Вместо полной замены IOrderGroupCalculatorвы можете реализовать пользовательский калькулятор на основе DefaultOrderGroupCalculator и переопределить соответствующий метод расчета для сохранения встроенной функциональности и расширения только необходимых частей.
Пример: внедрение платы за обработку
using EPiServer.Commerce.Order.Calculator;
using Mediachase.Commerce.Markets;
namespace Foundation.Customizations
{
public class OrderGroupCalculatorOverridingDefault : DefaultOrderGroupCalculator
{
public OrderGroupCalculatorOverridingDefault(IOrderFormCalculator orderFormCalculator, IReturnOrderFormCalculator returnOrderFormCalculator, IMarketService marketService) : base(orderFormCalculator, returnOrderFormCalculator, marketService)
{
}
protected override Money CalculateHandlingTotal(IOrderGroup orderGroup)
{
// Use Handling service to calculate correct handling fee
// var handlingFee - _handlingFeeCalculator.GetHandlingFee(orderGroup)
return new Money(10, orderGroup.Currency);
}
}
}
Зарегистрируйте свой новый сервис в некотором модуле интриализации
_services.AddSingleton();
Версия: Оптимизируем коммерция Connect v14
Ссылки: https://docs.developers.optimizely.com/commerce-connect/docs/calculate-orders-rord-roup-calculator

