request->post(); $res = \Yii::$app->services->validate->validate($params, [ [['goods_id','attr_id', 'num'], 'required'], ]); if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage()); $goods = Goods::findOne([ 'id'=>$params['goods_id'], 'status'=>StatusEnum::ENABLED, 'is_on_sale'=>1, 'check_status'=>1, ]); if (empty($goods)) return $this->error("商品不存在"); if(!empty($goods['goods_source'])) return $this->error('该商品不允许加入购物车'); if(empty($goods['mch_id'])) return $this->error('该商品不允许加入购物车'); // 没有规格id则查找默认规格【寻找价格最低的规格】 $where = ['goods_id' => $params['goods_id'], 'status' => StatusEnum::ENABLED]; !empty($params['attr_id']) && $where['id'] = $params['attr_id']; $goods_attr = GoodsAttr::find()->where($where)->orderBy('price asc')->one(); if($goods_attr->goods_id!=$params['goods_id']) return $this->error("goods_id与attr_id不配对"); if (empty($goods->is_attr)) { if (empty($goods->stock)) return $this->error('库存不足'); } else { //多规格 if (empty($goods_attr)) return $this->error("所选的规格不存在"); if (empty($goods_attr->stock)) return $this->error("所选的规格库存不足"); } $params['mch_id'] = $goods['mch_id']; $params['mall_id'] = $this->mall_id; $params['user_id'] = $this->user_id; Cart::addCart($params); return $this->success('加入购物车成功', []); }catch (\Exception $e){ return $this->error($e->getMessage(), []); } } /** * 删除购物车 * @return mixed|void */ public function actionDel() { $params = \Yii::$app->request->post(); $res = \Yii::$app->services->validate->validate($params, [ [['list'], 'required'], ]); if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage()); $params['mall_id'] = $this->mall_id; $params['user_id'] = $this->user_id; Cart::delCart($params); return $this->success('操作成功', []); } /** * 购物车列表 * @return mixed|void */ public function actionIndex() { $params = \Yii::$app->request->get(); $res = \Yii::$app->services->validate->validate($params, [ [['mch_id'], 'safe'], ]); if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage()); $list = Cart::getCartList($this->user_id); $mch_list = []; $mch_id_arr = []; if (!empty($list)) { $attr_id_arr = []; $num_arr =[]; foreach ($list as $v) { $row = json_decode($v, true); if (is_array($row)) { $attr_id_arr[] = $row['attr_id']; $mch_id_arr[] = $row['mch_id']; $num_arr[$row['attr_id']] = $row['num']; } } $params['where'] = [['id' => $attr_id_arr],['>','stock',0],['status'=>StatusEnum::ENABLED]]; $params['with'] = ['goods' => function ($query) { $query->select('id,mch_id,goods_name,is_on_sale,freight_type,cover_pic'); }]; $params['select'] = 'id,goods_id,pic_url,price,name,stock'; $list = GoodsAttr::lists($params); if(!empty($params['mch_id'])){ $mch_id_arr = $params['mch_id']; } $mch_list = Mch::lists(['where'=>[['id'=>$mch_id_arr]],'select'=>'id,store_name,logo_img,shop_status']); $rows = []; $user = $this->user; $user_level = UserLevel::findOne(['mall_id' => $this->mall_id, 'level' => $user['level'], 'status' => StatusEnum::ENABLED]); $discount = 10; if (isset($user_level)) $discount = $user_level['discount']; if (!empty($list)) { foreach ($list as $v) { $member_price_setting = json_decode($v['goods']['extra']['member_price_setting']); $v['member_price'] = Goods::computeMemberPrice($v['price'],$v['sign_id'],$user['level'],$v['goods']['is_attr'], $v['goods']['extra']['is_member_price'],$member_price_setting,$discount); if (!empty($v['goods']['extra']['is_member_price']) && !empty($v['extra']['member_price_setting'])) { $member_price_setting = $v['extra']['member_price_setting']; if ($v['goods']['is_attr']) { if (!empty($member_price_setting['level' . $user['level']][$v['sign_id']])) $v['price'] = $member_price_setting['level' . $user['level']][$v['sign_id']]; } else { if (!empty($member_price_setting[$user['level']])) $v['price'] = $member_price_setting[$user['level']]; } } if($v['goods']['is_on_sale']){ $rows[$v['goods']['mch_id']][] = [ 'goods_id' => $v['goods_id'], 'num' => $num_arr[$v['id']], 'attr_id' => $v['id'], 'price' => $v['price'], 'member_price' => $v['member_price'], 'cover_pic' =>$v['pic_url']?$v['pic_url']:$v['goods']['cover_pic'], 'attr' => $v['name'], 'stock' => $v['stock'], 'goods_name' => $v['goods']['goods_name'], 'is_on_sale' => $v['goods']['is_on_sale'], 'freight_type' => explode(',',$v['goods']['freight_type']), ]; } } } foreach ($mch_list as &$val) { $total_price =$total_num = 0; $list = []; if(isset($rows[$val['id']])){ foreach ($rows[$val['id']] as $rk => $rv) { $price_sum = 0; $total_num += $rv['num']; $price_sum = bcmul($rv['price'], $rv['num'], 2); $total_price = bcadd($total_price, $price_sum, 2); } $list=$rows[$val['id']]; } $val['list'] = $list; $val['total_price'] = $total_price; $val['total_num'] = $total_num; $val['business_status'] = ''; $val['business_status'] = $val['shop_status']==1?'正在营业':'休息中'; } } return $this->success('操作成功', $mch_list); } public function actionClear() { $params['mall_id'] = $this->mall_id; $params['user_id'] = $this->user_id; $list = Cart::getCartList($this->user_id); if (!empty($list)) { foreach ($list as $v) { $row = json_decode($v, true); if (is_array($row)&&!empty($row['mch_id'])) { $params['list'][] = ['attr_id'=>$row['attr_id']]; } } Cart::delCart($params); } return $this->success('操作成功', []); } }