member_info['member_id']); $cart_list = $cart_model->getCartList('db', $condition); // 购物车列表 [得到最新商品属性及促销信息] $cart_list = model('buy_1', 'logic')->getGoodsCartList($cart_list); $goods_model = model('goods'); $sum = 0; $cart_a = array(); $k = 0; $voucher_model = model('voucher'); foreach ($cart_list as $key => $val) { $cart_a[$val['store_id']]['store_id'] = $val['store_id']; $cart_a[$val['store_id']]['store_name'] = $val['store_name']; //获取店铺代金券 $cart_a[$val['store_id']]['voucher_list'] = $voucher_model->getVouchertemplateList(array(array('vouchertemplate_store_id', '=', $val['store_id']), array('vouchertemplate_if_private', '=', 0), array('vouchertemplate_state', '=', 1), array('vouchertemplate_enddate', '>', TIMESTAMP))); // $goods_data = $goods_model->getGoodsOnlineInfoForShare($val['goods_id']); $cart_a[$val['store_id']]['goods'][$key] = $val; $cart_a[$val['store_id']]['goods'][$key]['cart_id'] = $val['cart_id']; $cart_a[$val['store_id']]['goods'][$key]['goods_num'] = $val['goods_num']; $cart_a[$val['store_id']]['goods'][$key]['goods_image_url'] = goods_cthumb($val['goods_image'], $val['store_id']); $cart_a[$val['store_id']]['goods'][$key]['goods_state'] = $val['state']; // if (isset($goods_data['goods_promotion_type'])) { // $cart_a[$val['store_id']]['goods'][$key]['goods_price'] = $goods_data['goods_promotion_price']; // } $cart_a[$val['store_id']]['goods'][$key]['gift_list'] = isset($val['gift_list']) ? $val['gift_list'] : ''; if ($val['bl_id']) { foreach ($cart_a[$val['store_id']]['goods'][$key]['bl_goods_list'] as $k => $v) { $cart_a[$val['store_id']]['goods'][$key]['bl_goods_list'][$k]['goods_image_url'] = goods_cthumb($v['goods_image'], $val['store_id']); } } if ($val['state']) { $cart_list[$key]['goods_sum'] = ds_price_format($val['goods_price'] * $val['goods_num']); $sum += $cart_list[$key]['goods_sum']; $k++; } } foreach ($cart_a as $key => $value) { $value['goods'] = array_values($value['goods']); $cart_l[] = $value; } if (isset($cart_l)) { $cart_b = array_values($cart_l); } else { $cart_b = array(); } ds_json_encode(10000, '', array('cart_list' => $cart_a, 'sum' => ds_price_format($sum), 'cart_count' => count($cart_list), 'cart_val' => $cart_b), request()->action()); } /** * @api {POST} api/membercart/cart_add 购物车添加 * @apiVersion 1.0.0 * @apiGroup MemberCart * * @apiHeader {String} X-DS-KEY 用户授权token * * @apiParam {Int} goods_id 商品ID * @apiParam {Int} quantity 购买数量 * @apiParam {Int} bl_id 组合购买ID * * @apiSuccess {String} code 返回码,10000为成功 * @apiSuccess {String} message 返回消息 * @apiSuccess {Object} result 返回数据(购物车主键ID) */ public function cart_add() { if (isset($this->member_info) && !$this->member_info['is_buylimit']) { ds_json_encode(10001, lang('cart_buy_noallow'), '', request()->action()); } if (config('ds_config.member_auth') && $this->member_info['member_auth_state'] != 3) { ds_json_encode(10001, lang('cart_buy_noauth'), '', request()->action()); } $goods_id = intval(input('post.goods_id')); $quantity = intval(input('post.quantity')); $bl_id = intval(input('post.bl_id')); $goods_model = model('goods'); $cart_model = model('cart'); $logic_buy_1 = model('buy_1', 'logic'); if (!$bl_id) { if ($goods_id <= 0 || $quantity <= 0) { ds_json_encode(10001, lang('param_error'), '', request()->action()); } $goods_info = $goods_model->getGoodsOnlineInfoAndPromotionById($goods_id); //验证是否可以购买 if (empty($goods_info)) { ds_json_encode(10001, lang('cart_add_goods_not_exists'), '', request()->action()); } //抢购 $logic_buy_1->getGroupbuyInfo($goods_info, $quantity); //秒杀 $logic_buy_1->getXianshiInfo($goods_info, $quantity); if (isset($this->member_info) && $goods_info['store_id'] == $this->member_info['store_id']) { ds_json_encode(10001, lang('cannot_buy_self_goods'), '', request()->action()); } if (intval($goods_info['goods_storage']) < 1 || intval($goods_info['goods_storage']) < $quantity) { ds_json_encode(10001, lang('cart_add_stock_shortage'), '', request()->action()); } } else { //优惠套装加入购物车(单套) $pbundling_model = model('pbundling'); $bl_info = $pbundling_model->getBundlingInfo(array('bl_id' => $bl_id)); if (empty($bl_info) || $bl_info['bl_state'] == '0') { ds_json_encode(10001, lang('recommendations_buy_separately'), '', request()->action()); } //检查每个商品是否符合条件,并重新计算套装总价 $bl_goods_list = $pbundling_model->getBundlingGoodsList(array('bl_id' => $bl_id)); $goods_id_array = array(); $bl_amount = 0; foreach ($bl_goods_list as $goods) { $goods_id_array[] = $goods['goods_id']; $bl_amount += $goods['blgoods_price']; } $goods_model = model('goods'); $goods_list = $goods_model->getGoodsOnlineListAndPromotionByIdArray($goods_id_array); foreach ($goods_list as $goods_info) { if (isset($this->member_info) && $goods_info['store_id'] == $this->member_info['store_id']) { ds_json_encode(10001, lang('cannot_buy_self_goods'), '', request()->action()); } if (intval($goods_info['goods_storage']) < 1) { ds_json_encode(10001, lang('cart_add_stock_shortage'), '', request()->action()); } } //优惠套装作为一条记录插入购物车,图片取套装内的第一个商品图 $goods_info = array(); $goods_info['store_id'] = $bl_info['store_id']; $goods_info['goods_id'] = $goods_list[0]['goods_id']; $goods_info['goods_storage'] = $goods_list[0]['goods_storage']; $goods_info['goods_name'] = $bl_info['bl_name']; $goods_info['goods_price'] = $bl_amount; $goods_info['goods_num'] = 1; $goods_info['goods_image'] = $goods_list[0]['goods_image']; $goods_info['store_name'] = $bl_info['store_name']; $goods_info['bl_id'] = $bl_id; $quantity = 1; } $param = array(); $param['buyer_id'] = isset($this->member_info) ? $this->member_info['member_id'] : 0; $param['store_id'] = $goods_info['store_id']; $param['goods_id'] = $goods_info['goods_id']; $param['goods_name'] = $goods_info['goods_name']; $param['goods_price'] = $goods_info['goods_price']; $param['goods_image'] = $goods_info['goods_image']; $param['store_name'] = $goods_info['store_name']; $param['goods_storage'] = $goods_info['goods_storage']; $param['bl_id'] = $bl_id; $result = $cart_model->addCart($param, 'db', $quantity); if ($result) { ds_json_encode(10000, lang('ds_common_op_succ'), $result, request()->action()); } else { ds_json_encode(10001, $cart_model->error_message, '', request()->action()); } } /** * @api {POST} api/membercart/cart_del 购物车删除 * @apiVersion 1.0.0 * @apiGroup MemberCart * * @apiHeader {String} X-DS-KEY 用户授权token * * @apiParam {String} cart_id 购物车主键ID 例3,5,8 * * @apiSuccess {String} code 返回码,10000为成功 * @apiSuccess {String} message 返回消息 */ public function cart_del() { $cart_id = input('param.cart_id'); $cart_id_array = ds_delete_param($cart_id); if ($cart_id_array == FALSE) { ds_json_encode('10001', lang('param_error'), '', request()->action()); } $cart_model = model('cart'); if ($cart_id > 0) { $condition = array(); $condition[] = array('buyer_id', '=', $this->member_info['member_id']); $condition[] = array('cart_id', 'in', $cart_id_array); $cart_model->delCart('db', $condition, $this->member_info['member_id']); } ds_json_encode(10000, '', 1, request()->action()); } /** * @api {POST} api/membercart/cart_edit_quantity 更新购物车购买数量 * @apiVersion 1.0.0 * @apiGroup MemberCart * * @apiHeader {String} X-DS-KEY 用户授权token * * @apiParam {Int} cart_id 购物车主键ID * @apiParam {Int} quantity 修改数量 * * @apiSuccess {String} code 返回码,10000为成功 * @apiSuccess {String} message 返回消息 * @apiSuccess {Object} result 返回数据 * @apiSuccess {Object} result.quantity 数量 * @apiSuccess {Object} result.goods_price 单价 * @apiSuccess {Object} result.total_price 总价 * */ public function cart_edit_quantity() { $cart_id = intval(abs(input('post.cart_id'))); $quantity = intval(abs(input('post.quantity'))); if (empty($cart_id) || empty($quantity)) { ds_json_encode(10001, lang('param_error'), '', request()->action()); } $cart_model = model('cart'); $cart_info = $cart_model->getCartInfo(array('cart_id' => $cart_id, 'buyer_id' => $this->member_info['member_id'])); //检查是否为本人购物车 if ($cart_info['buyer_id'] != $this->member_info['member_id']) { ds_json_encode(10001, lang('param_error'), '', request()->action()); } //检查库存是否充足 if (!$this->_check_goods_storage($cart_info, $quantity, $this->member_info['member_id'])) { ds_json_encode(10001, lang('goods_quantity_limit'), '', request()->action()); } $data = array(); $data['goods_num'] = $quantity; $data['goods_price'] = $cart_info['goods_price']; $condition = array(); $condition[] = array('cart_id', '=', $cart_id); $condition[] = array('buyer_id', '=', $cart_info['buyer_id']); $update = $cart_model->editCart($data, $condition, $cart_info['buyer_id']); if ($update) { $return = array(); $return['quantity'] = $quantity; $return['goods_price'] = ds_price_format($cart_info['goods_price']); $return['total_price'] = ds_price_format($cart_info['goods_price'] * $quantity); ds_json_encode(10000, '', $return, request()->action()); } else { ds_json_encode(10001, lang('ds_common_op_fail'), '', request()->action()); } } /** * 检查库存是否充足 */ private function _check_goods_storage(&$cart_info, $quantity, $member_id) { $goods_model = model('goods'); $pbundling_model = model('pbundling'); $logic_buy_1 = model('buy_1', 'logic'); if ($cart_info['bl_id'] == '0') { //普通商品 $goods_info = $goods_model->getGoodsOnlineInfoAndPromotionById($cart_info['goods_id']); //抢购 $logic_buy_1->getGroupbuyInfo($goods_info, $quantity); if (isset($goods_info['ifgroupbuy'])) { if ($goods_info['upper_limit'] && $quantity > $goods_info['upper_limit']) { return false; } } //批发 $logic_buy_1->getWholesaleInfo($goods_info, $quantity); //秒杀 $logic_buy_1->getXianshiInfo($goods_info, $quantity); if (intval($goods_info['goods_storage']) < $quantity) { return false; } //会员等级折扣 $logic_buy_1->getMgdiscountInfo($goods_info); $goods_info['cart_id'] = $cart_info['cart_id']; $goods_info['buyer_id'] = $cart_info['buyer_id']; $cart_info = $goods_info; } else { //优惠套装商品 $bl_goods_list = $pbundling_model->getBundlingGoodsList(array('bl_id' => $cart_info['bl_id'])); $goods_id_array = array(); foreach ($bl_goods_list as $goods) { $goods_id_array[] = $goods['goods_id']; } $bl_goods_list = $goods_model->getGoodsOnlineListAndPromotionByIdArray($goods_id_array); //如果有商品库存不足,更新购买数量到目前最大库存 foreach ($bl_goods_list as $goods_info) { if (intval($goods_info['goods_storage']) < $quantity) { return false; } } } return true; } /** * @api {POST} api/Membercart/cart_count 检查购物车数量 * @apiVersion 1.0.0 * @apiGroup Membercart * * @apiHeader {String} X-DS-KEY 用户授权token * * @apiSuccess {String} code 返回码,10000为成功 * @apiSuccess {String} message 返回消息 * @apiSuccess {Object} result 返回数据 * @apiSuccess {Int} result.cart_count 购物车数量 */ public function cart_count() { $cart_model = model('cart'); $count = $cart_model->getCartCountByMemberId($this->member_info['member_id']); $data['cart_count'] = $count; ds_json_encode(10000, '', $data, request()->action()); } }