显示目录
DSO2O帮助手册 DSO2O技术手册 DSO2O开发手册

实物订单模块

用户可以从两个入口进行下单,一是从购物车页进入下单页,二是在商品详情页中直接进入下单页。

订单所涉及的表为order、ordercommonordergoodsorderlogorderpay,其关系如下图

 

无论是通过购物车页下单,还是商品详情页,都是展示相同的下单页面,要经过\home\buy\buy_step1中buylogic模型的buyStep1方法获取订单信息。

buyStep1方法中,如果是从购物车页过来的,则调用模型中的getCartList方法获取商品,如果是从商品详情页过来的,则调用getGoodsList方法获取商品。

        //得到购买商品信息
        if ($ifcart) {
            $result = $this->getCartList($cart_id, $member_id);
        }
        else {
            $result = $this->getGoodsList($cart_id, $member_id, $store_id,$extra);
        }

 

在getCartList方法中,先从购物车中获取商品,然后再查询商品的促销信息,再判断是否是优惠套装的商品,最后根据店铺id整理商品

 
        //购物车列表
        $condition = array('cart_id' => array('in', array_keys($buy_items)), 'buyer_id' => $member_id);
        $cart_list = $cart_model->getCartList('db', $condition);
 
        //购物车列表 [得到最新商品属性及促销信息]
        $cart_list = $this->_logic_buy_1->getGoodsCartList($cart_list);
 
        //商品列表 [优惠套装子商品与普通商品同级罗列]
        $goods_list = $this->_getGoodsList($cart_list);
 
        //以店铺下标归类
        $store_cart_list = $this->_getStoreCartList($cart_list);

 

在getGoodsList方法中,先查询商品的促销信息,再根据店铺id整理商品

        //商品信息[得到最新商品属性及促销信息]
        $goods_info = $this->_logic_buy_1->getGoodsOnlineInfo($goods_id, intval($quantity),$extra);
        if (empty($goods_info)) {
            return ds_callback(false, '商品已下架或不存在');
        }
 
        //不能购买自己店铺的商品
        if ($goods_info['store_id'] == $store_id) {
            return ds_callback(false, '不能购买自己店铺的商品');
        }
 
        //进一步处理数组
        $store_cart_list = array();
        $goods_list = array();
        $goods_list[0] = $store_cart_list[$goods_info['store_id']][0] = $goods_info;

 

买家在下单页设置好收货地址等信息后,通过\home\buy\buy_step2中buylogic模型的buyStep2方法提交订单信息,订单信息的处理需要经过6步操作

        try {
 
            $order_model = model('order');
            $order_model->startTrans();
 
            //第1步 表单验证
            $this->_createOrderStep1();
 
            //第2步 得到购买商品信息
            $this->_createOrderStep2();
 
            //第3步 得到购买相关金额计算等信息
            $this->_createOrderStep3();
 
            //第4步 生成订单
            $this->_createOrderStep4();
 
            //第5步 处理预存款
            $this->_createOrderStep5();
            $order_model->commit();
 
            //第6步 订单后续处理
            $this->_createOrderStep6();
            
            return ds_callback(true, '', $this->_order_data);
 
        } catch (\think\Exception $e) {
            $this->rollback();
            return ds_callback(false, $e->getMessage());
        }

其中在_createOrderStep1方法中,对收货地址、发票信息、是否支持货到付款、代金券进行了验证处理。

在_createOrderStep2方法中,判断订单商品是来自购物车还是立即购买的商品,也像buyStep1中一样,使用相同的方法整理得到店铺商品信息。

在_createOrderStep3方法中,计算了商品总金额,判断是否满足满送条件,判断是否满足代金券条件,计算了店铺的运费,计算了商品的分类佣金。

在_createOrderStep4方法中,生成了订单数据。

在_createOrderStep5方法中,判断是否使用了充值卡、预存款,如果有,则扣除。

在_createOrderStep6方法中,更新了商品库存和销量,如果使用了代金券则更新代金券状态,如果是F码商品则更新F码状态,删除购物车相关商品,如果是分享注册的用户则生成推广记录,最后给店铺发送订单通知。