Esempio n. 1
0
 public function _initialize()
 {
     //获取购物车中的总商品数和总价格
     $cart_model = new \Model\CartModel();
     $total = $cart_model->getTotal();
     $this->assign('total', $total);
     //取出顶级栏目,用于导航显示
     $cat_model = new \Model\CategoryModel();
     $nav_list = $cat_model->getNav();
     $this->assign('nav_list', $nav_list);
 }
Esempio n. 2
0
 public function clearCart()
 {
     //判断购物车中有没有商品
     $cart_model = new \Model\CartModel();
     $total = $cart_model->getTotal();
     if ($total['total_count'] > 0) {
         $cart_model->clearCart();
         $this->success('清空购物车成功', U('Index/index'), 1);
         exit;
     }
     $this->error('您的购物车空了,赶紧购物吧!', U('Index/index'));
 }
 public function flow()
 {
     //获取购物车中的全部商品
     $cart_model = new \Model\CartModel();
     $cartlist = $cart_model->cartlist();
     //下单之前要判断库存是否充足
     //运用文件锁和事务,防止订单出错
     $fp = fopen('./Public/order.lock', 'w');
     //开始加锁
     if (flock($fp, LOCK_EX)) {
         foreach ($cartlist as $v) {
             //取出库存,根据goods_id,goods_attr_id来取出(没有属性的商品则在goods表中取)
             if (!empty($v['goods_attr_id'])) {
                 $where = "goods_id=" . $v['goods_id'] . " and goods_attr_id='" . $v['goods_attr_id'] . "'";
                 $kc = M('Product')->where($where)->find();
                 //返回一个一维数组
             } else {
                 $kc = M('Goods')->where("goods_id=" . $v['goods_id'])->find();
             }
             if ($kc['goods_number'] < $v['goods_count']) {
                 $this->error('库存不足,无法下订单');
             }
         }
         //在checkout.html中表单增加隐藏域,用来获取收货人的信息,也可以用连表
         //查询的形式,在订单信息表中就不用收货人信息的几个字段,改成收货人表的
         //id字段做关联
         $data['user_id'] = $_SESSION['user_id'];
         //用户登陆的id
         $data['order_sn'] = 'sn_' . uniqid();
         //订单号
         $cart_model = new \Model\CartModel();
         $total = $cart_model->getTotal();
         $data['goods_amount'] = $total['total_price'];
         //总金额
         $data['consignee'] = I('post.consignee');
         //收货人名
         $data['address'] = I('post.address');
         //收货人地址
         $data['mobile'] = I('post.mobile');
         //收货人手机
         $data['payment'] = I('post.payment');
         //支付方式
         $data['shipping'] = I('post.shipping');
         //配送方式
         $data['addtime'] = time();
         //下单时间
         //开启事务
         mysql_query("start transaction");
         $order_id = M('OrderInfo')->add($data);
         //添加订单信息,成功返回自增的订单编号
         if (!$order_id) {
             //失败就回滚,并释放文件锁
             mysql_query("rollback");
             flock($fp, LOCK_UN);
             // 释放锁定
         }
         //将购物车中的商品全部遍历添加到订单商品关系表中
         foreach ($cartlist as $v) {
             $res_id = M('OrderGoods')->add(array('order_id' => $order_id, 'goods_id' => $v['goods_id'], 'goods_name' => $v['info']['goods_name'], 'goods_attr_id' => $v['goods_attr_id'], 'shop_price' => $v['info']['shop_price'], 'goods_count' => $v['goods_count']));
             if (!$res_id) {
                 //失败就回滚,并释放文件锁
                 mysql_query("rollback");
                 flock($fp, LOCK_UN);
                 // 释放锁定
             }
         }
         //下单成功,有一个减少库存的操作
         //判断订单商品有没有goods_attr_id,有则在product表中修改,没有则在goods表中修改
         foreach ($cartlist as $v) {
             //取出库存,根据goods_id,goods_attr_id来取出(没有属性的商品则在goods表中取)
             if (!empty($v['goods_attr_id'])) {
                 $where = "goods_id=" . $v['goods_id'] . " and goods_attr_id='" . $v['goods_attr_id'] . "'";
                 $rs = M('Product')->where($where)->setDec('goods_number', $v['goods_count']);
                 //还要更改商品表中的库存量
                 M('Goods')->where("goods_id=" . $v['goods_id'])->setDec('goods_number', $v['goods_count']);
                 if (!$rs) {
                     //失败就回滚,并释放文件锁
                     mysql_query("rollback");
                     flock($fp, LOCK_UN);
                     // 释放锁定
                 }
             } else {
                 $rs = M('Goods')->where("goods_id=" . $v['goods_id'])->setDec('goods_number', $v['goods_count']);
                 if (!$rs) {
                     //失败就回滚,并释放文件锁
                     mysql_query("rollback");
                     flock($fp, LOCK_UN);
                     // 释放锁定
                 }
             }
         }
         //都成功,提交事务
         mysql_query("commit");
         flock($fp, LOCK_UN);
         // 释放锁定
     } else {
         $this->error('系统忙,请稍后下单');
     }
     //订单成功,要清空购物车,跳转到显示订单完成的页面
     $cart_model->clearCart();
     $this->redirect("Order/done", array('order_sn' => $data['order_sn']));
 }