用户可以从两个入口进行下单,一是从购物车页进入下单页,二是在商品详情页中直接进入下单页。
订单所涉及的表为order、ordercommon、ordergoods、orderlog、orderpay,其关系如下图
无论是通过购物车页下单,还是商品详情页,都是展示相同的下单页面,要经过\home\buy\buy_step1中buy的logic模型的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中buy的logic模型的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码状态,删除购物车相关商品,如果是分享注册的用户则生成推广记录,最后给店铺发送订单通知。
QQ:858761000
联系电话:15364080101(微信同号)
Copyright@2010-2024 长沙德尚网络科技有限公司 版权所有
湘ICP备14007737号-2