e-commerce - 如何从 Hybris 店面的购物车生成多个订单?

标签 e-commerce shopping-cart hybris

我正在使用 Hybris 6.3,我们为 B2B 实现生成了一个模块,我需要根据购物车中的产品将购物车内容拆分为不同的订单,账单地址、付款、交货等必须共享相同的参数.

根据我们从客户那里收集的要求,我们得出结论,应用寄售策略不是我们在这里需要的,因为它处理一个订单并将其拆分用于运输和交付目的,相反我们客户的需求是购物车中的不同产品按一组共享属性进行分组,并为每组产品生成一个订单。

到目前为止,我已经确定了负责在店面扩展中下订单的类, DefaultCheckoutFacade ,其中包含以下方法:

 @Override
 public OrderData placeOrder() throws InvalidCartException
 {
     final CartModel cartModel = getCart();
     if (cartModel != null)
     {
         if (cartModel.getUser().equals(getCurrentUserForCheckout()) || getCheckoutCustomerStrategy().isAnonymousCheckout())
         {
             beforePlaceOrder(cartModel);
             final OrderModel orderModel = placeOrder(cartModel);
             afterPlaceOrder(cartModel, orderModel);
             if (orderModel != null)
             {
                 return getOrderConverter().convert(orderModel);
             }
         }
     }
     return null;
 }

据我了解,我应该重写此方法以生成不同的 购物车型号 根据我的要求中设定的标准,为每个 下订单购物车型号 .我修改了购物车型号 类,它是父类(super class) AbstractOrderModel ,我猜在上面方法中的getCart()调用之后,我只需要修改中的条目即可购物车型号 并为我需要下的每个订单调用方法 placeOrder(),但是否允许修改 购物车型号 以这种方式反对?

或者,如果我需要将我的购物车分成不同的订单,我应该以不同的方式处理这个问题吗?是否像拥有多个购物车但将它们显示为一个应该做的事情?这种修改应该在 OOTB commercefacades 扩展上进行吗?有没有办法在我们模块的某个地方扩展它?

编辑

我开始阅读 Multiple Carts这似乎是我需要的,但我还没有找到如何将条目保存到已保存的购物车中。在 this link我可以看到如何保存购物车,方法 saveCart 返回一个 CommerceSaveCartResultData 对象,saveCart 和 getCartForCodeAndCurrentUser 方法都会收到 CommerceSaveCart参数必须包含 CartModel,如何生成此对象的实例以在 中设置CommerceSaveCart参数 ?

最佳答案

此功能的常用方法是使用 OOTB Order Splitting功能 ( DefaultOrderSplittingService ) 用于将您的订单拆分为 OrderEntryGroup . Hybris 文档中的示例:

<bean id="orderSplittingService" class="de.hybris.platform.ordersplitting.impl.DefaultOrderSplittingService">
<property name="modelService" ref="modelService"/>
<property name="consignmentService" ref="consignmentService"/>
<property name="strategiesList">
    <list>
        <ref bean="splitByDeliveryMode"/>
    </list>
</property>

策略的执行:
    public class SplitByDeliveryMode extends AbstractSplittingStrategy
{

    @Override
    public Object getGroupingObject(final AbstractOrderEntryModel orderEntry)
    {
        return orderEntry.getDeliveryMode();
    }

    @Override
    public void afterSplitting(final Object groupingObject, final ConsignmentModel createdOne)
    {
        createdOne.setDeliveryMode((DeliveryModeModel) groupingObject);

    }

}

如果您确实需要克隆订单,您可以自定义 SubmitOrderStrategy , DefaultOrderService并使用 CloneAbstractOrderStrategy

关于e-commerce - 如何从 Hybris 店面的购物车生成多个订单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47231681/

相关文章:

ios - Google Analytics(分析)增强型电子商务未收到收入

java - 类似于 Java 的 OpenCart

javascript - 编辑表格上的值后如何更新字段(使用 jquery 或 javascript)

asp.net - 如何实现 ASP.NET 购物车?

content-management-system - Hybris CMS Cockpit - 添加 Javascript

google-analytics - Opencart 上 'add to cart' 的 GA 跟踪

php - Woocommerce 在结帐页面显示运输方式?

e-commerce - Paypal 自适应支付 API,多个接收者,哪个 apiUsername/apiPassword/apiSignature?

spring-security - 在 SAP Hybris 中,不要在结帐过程等中要求 rememberMe 用户登录

hybris - 如何使用impex在Hybris中仅导出一种产品