Broadleaf commerce v2.2 のドキュメント/チュートリアル、具体的には Add Item Workflow と Dynamic Pricing モジュールのカスタマイズを読みました。
商品がカートに追加されたときに動的に価格を設定したいと考えています。
私の考えは正しいですか? 製品の価格を変更する必要がある場合、2 つの方法がありますか?:
アクティビティを使用したアイテムの追加ワークフローのカスタマイズ-更新 済み 注文の価格設定に加えられた変更は、価格設定モジュールによって元に戻されます。したがって、このアプローチは機能しません。
これは次のように説明できます。
アプローチ 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()
に呼び出されますか?(ドキュメントでは
MyDynamicSkuPricingServiceImpl#getSkuPrices()
、getPrice() メソッドが呼び出されたときに呼び出されると記載されています。ドキュメントに記載されているようにすべてを構成しましたが、getSkuPrices() が暗黙的に呼び出されることはありません)
更新-で HashMap の価格設定条件が空の場合、 が呼び出されないことを発見しましDynamicPricingFilter
た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) を取得するにはどうすればよいですか?