我浏览了Broadleaf commerce v2.2文档/教程,特别是定制添加项工作流和动态定价模块。
我希望在将产品添加到购物车时为其动态定价。
我是否正确思考 - 当产品需要重新定价时,可以采用两种方法来实现这一目标?:
Customizing Add Item Workflow using Activity - 已更新 定价模块撤消对订单定价所做的任何修改。因此,这种方法不起作用。
这可以说明:
方法1:
class DynamicPricingActivity extends BaseActivity{
....
@Override
public ProcessContext execute(ProcessContext context) throws Exception {
CartOperationRequest request = ((CartOperationContext) context).getSeedData();
updatePhonePrice(request.getOrder());
return context;
}
....
}
方法2:
Dynamic Pricing Configuration中有关于说明的问题。
如何调用方法MyDynamicSkuPricingServiceImpl # getSkuPrices()
?
(在文档中提到调用getPrice()方法时会调用MyDynamicSkuPricingServiceImpl#getSkuPrices()
,我按照文档中的说明配置了所有内容,但是getSkuPrices()永远不会被隐式调用)
更新 - 我发现如果DynamicPricingFilter
中的HashMap pricingConsiderations为空,则不会调用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)?
答案 0 :(得分:1)
关于覆盖价格的最后一个问题。 Broadleaf提供了覆盖价格(orderItem.setOverrideRetailPrice(), orderItem.setOverrideSalePrice())
的方法。
不使用这些方法,定价服务将重置为SKU(或动态定价实施)的当前价格。
在所有情况下,将忽略大于retailPrice的salePrice。
通常在覆盖价格时,您还希望绕过折扣引擎。您可以使用orderItem.setDiscountingAllowed(false)
。
由于这是典型的行为,因此还提供了一种便捷方法[orderItem.setPrice()]
,它将覆盖销售和零售价格以及设置允许为假的折扣。
Brian Polster - 阔叶商业