// +---------------------------------------------------------------------- declare (strict_types=1); namespace app\index\controller; use app\api\model\Cart as CartModel; use app\index\service\Cart as CartService; use app\common\exception\BaseException; use think\facade\Cache; use think\facade\Session; use think\response\Json; use think\View; /** * 购物车管理 * Class Cart * @package app\api\controller */ class Cart extends Controller { /** * @return |\think\response\View */ public function shoppingCart() { $userId = Session::get('user_id'); if (empty($userId)) { return view('passport/login'); } // 购物车商品列表 $service = new CartService; $list = $service->getList(); // 购物车商品总数量 $cartTotal = (new CartModel)->getCartTotal(); //dd($list->toArray(),$cartTotal); $user = $this->getCurrentLoginUser(); //dd($user->toArray()); $cartMoney = '0.00'; foreach ($list as $item) { $temp = bcmul(strval($item['goods_num']), $item['goods']['goods_price_min'], 2); $cartMoney = bcadd($cartMoney, $temp, 2); } return view('shoppingCart', ['list' => $list, 'cartTotal' => $cartTotal, 'cartMoney' => $cartMoney, 'points' => $user['points']]); } /** * 购物车商品列表 * @return Json * @throws BaseException * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException * @throws \cores\exception\BaseException */ public function list(): Json { // 购物车商品列表 $service = new CartService; $list = $service->getList(); // 购物车商品总数量 $cartTotal = (new CartModel)->getCartTotal(); return $this->renderSuccess(compact('cartTotal', 'list')); } /** * 购物车商品总数量 * @return Json * @throws BaseException */ public function total(): Json { $model = new CartModel; $cartTotal = $model->getCartTotal(); return $this->renderSuccess(compact('cartTotal')); } /** * 加入购物车 * @param int $goodsId 商品ID * @param string $goodsSkuId 商品sku索引 * @param int $goodsNum 商品数量 * @return Json |\think\response\View * @throws BaseException * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public function add(int $goodsId, string $goodsSkuId, int $goodsNum): Json { $userId = Session::get('user_id'); if (empty($userId)) { return $this->renderJson(config('status.not_logged'), 'Log in please!'); } $key = $this->request->param('key',null); if (!empty($key)){ Cache::set(\app\index\model\User::SHARE_PREFIX . $userId, $key,3600*24*30); } $model = new CartModel; if (!$model->add($goodsId, $goodsSkuId, $goodsNum)) { return $this->renderError($model->getError() ?: '加入购物车失败'); } // 购物车商品总数量 $cartTotal = $model->getCartTotal(); return $this->renderSuccess(compact('cartTotal'), '加入购物车成功'); } /** * 更新购物车商品数量 * @param int $goodsId 商品ID * @param string $goodsSkuId 商品sku索引 * @param int $goodsNum 商品数量 * @return Json * @throws BaseException * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public function update(int $goodsId, string $goodsSkuId, int $goodsNum): Json { $userId = Session::get('user_id'); if (empty($userId)) { return $this->renderJson(config('status.not_logged'), 'Log in please!'); } if ($goodsNum <= 0) { return $this->renderError('Action Not Supported!'); } $model = new CartModel; if (!$model->sUpdate($goodsId, $goodsSkuId, $goodsNum)) { return $this->renderError($model->getError() ?: '更新失败'); } // 购物车商品总数量 //$cartTotal = $model->getCartTotal(); $cartMoney = $this->getCartMoney(); return $this->renderSuccess(compact('cartMoney'), '更新成功'); } /** * 删除购物车中指定记录 * @param array $cartIds 购物车ID集, 如果为空删除所有 * @return Json * @throws BaseException */ public function clear(array $cartIds = []): Json { $userId = Session::get('user_id'); if (empty($userId)) { return $this->renderJson(config('status.not_logged'), 'Log in please!'); } $model = new CartModel; if (!$model->clear($cartIds)) { return $this->renderError($model->getError() ?: '操作失败'); } // 购物车商品总数量 //$cartTotal = $model->getCartTotal(); $cartMoney = $this->getCartMoney(); return $this->renderSuccess(compact('cartMoney'), '操作成功'); } private function getCartMoney() { $service = new CartService; $list = $service->getList(); $sum = '0.00'; foreach ($list as $item) { $temp = bcmul(strval($item['goods_num']), strval($item['goods']['goods_price_min']), 2); $sum = bcadd($sum, $temp, 2); } return $sum; } }