我浏览了Broadleaf Commerce v2.2文档/教程,特别是定制“添加项目工作流”和“动态定价”模块。
我想在将产品添加到购物车时动态为其定价。
我的想法是否正确-当必须对产品重新定价时,可以采用两种方法进行定价?
Customizing Add Item Workflow using Activity-更新了定价模块对订单定价所做的任何修改。因此,这种方法不起作用。
DynamicPricing Filter and Service
这可以说明:
方法1:
class DynamicPricingActivity extends BaseActivity{
....
@Override
public ProcessContext execute(ProcessContext context) throws Exception {
CartOperationRequest request = ((CartOperationContext) context).getSeedData();
updatePhonePrice(request.getOrder());
return context;
}
....
}
方法二:
关于Dynamic Pricing Configuration中的说明存在疑问。
如何调用方法
MyDynamicSkuPricingServiceImpl # getSkuPrices()
?(在文档中提到,当调用getPrice()方法时将调用
MyDynamicSkuPricingServiceImpl#getSkuPrices()
,我按照文档中的说明配置了所有内容,但从未隐式调用过getSkuPrices())更新-我发现如果
DynamicPricingFilter
中的HashMapPriceingConsiderations为空,则不会调用DynamicPricingService#getSkuPrices()
。因此,要使dynamicPricingService正常工作,必须有一个非空的HashMap,它将被隐式调用。不确定为什么要使用它...如何在不将其保留在数据库中的情况下更新添加到购物车的产品的价格?
更新
我能够添加动态定价,而不必将值保留在数据库中:
DiscreteOrderItem orderItem = orderItemService.createDynamicPriceDiscreteOrderItem(orderRequest, pricingConsiderations);
orderItem.setRetailPrice(new Money("623.34"));
orderItem.setSalePrice(new Money("888.888"));
orderItem.setPrice(orderItem.getSalePrice());
cart.addOrderItem(orderItem);
cart = orderService.save(cart, true);
但是,购物车总计设置为零售价值:623.34。如何获得正确的总数(888.888)?
最佳答案
关于最后一个关于价格的问题。阔叶(Broadleaf)提供了覆盖价格(orderItem.setOverrideRetailPrice(), orderItem.setOverrideSalePrice())
的方法。
如果不使用这些方法,定价服务将重置为SKU上的当前价格(或动态定价实施)。
在所有情况下,大于零售价的salePrice将被忽略。
通常,当您覆盖价格时,您还希望绕过折扣引擎。您可以使用orderItem.setDiscountingAllowed(false)
。
由于这是典型行为,因此还提供了一种便捷方法[orderItem.setPrice()]
,它将覆盖销售价格和零售价格以及将折扣设置为false的情况。
布赖恩·波斯特
-阔叶商务