panghu 7 bulan lalu
induk
melakukan
f2745a1fb0

+ 2 - 2
app/Http/Controllers/Api/ShoppingController.php

@@ -39,7 +39,7 @@ class ShoppingController extends ApiController
         $goods_id = $commonServer->filtrationStr('goods_id');//商品id
         $shop_id = $commonServer->filtrationStr('shop_id');//商家id
         $category_id = $commonServer->filtrationStr('category_id');//分类id
-        $goods_spec_id = $commonServer->filtrationStr('goods_spec_id',0);//商品规格id
+        $goods_spec = $commonServer->filtrationStr('goods_spec',0);//商品规格数组
         $number = $commonServer->filtrationStr('number',0);//数量
 
         if (empty($goods_id)) return $this->apiResponseError('请选择商品');
@@ -47,7 +47,7 @@ class ShoppingController extends ApiController
 
         if (empty($shop_id)) return $this->apiResponseError('请选择商家');
         if (empty($category_id)) return $this->apiResponseError('类目错误');
-        $result = ShoppingCartServer::creatServer()->saveShopping($m_id,$shop_id,$category_id,$goods_id,$goods_spec_id,$number);
+        $result = ShoppingCartServer::creatServer()->saveShopping($m_id,$shop_id,$category_id,$goods_id,$goods_spec,$number);
 
         if ($result['code'] == 0) {
             return $this->apiResponseError($result['msg']);

+ 176 - 67
app/Servers/ShoppingCartServer.php

@@ -131,21 +131,12 @@ class ShoppingCartServer
         return $data;
     }
 
-    /**
-     * 添加购物车
-     * @param $m_id
-     * @param $shop_id
-     * @param $category_id
-     * @param $goods_id
-     * @param $goods_spec_id
-     * @param $number
-     * @return array
-     */
-    function saveShopping($m_id,$shop_id,$category_id,$goods_id,$goods_spec_id,$number)
+    function saveShopping($m_id,$shop_id,$category_id,$goods_id,$goods_spec,$number)
     {
-        if (empty($goods_spec_id)){
-            $goods_spec_id = '';
+        if (empty($goods_spec)){
+            $goods_spec = [];
         }
+        $goods_spec_data = [];
         //获取商品
         $goods = Goods::where('is_del',0)
             ->where('id',$goods_id)
@@ -156,27 +147,35 @@ class ShoppingCartServer
         if (empty($goods)) return ['code' => 0, 'msg' => '当前商品不存在'];
         if ($goods->{'status'} != 1) return ['code' => 0, 'msg' => '当前商品已下架'];
         //如果是单规格但是选择了规格
-        if ($goods->{'spec_type'} == 1 && !empty($goods_spec_id)){
+        if ($goods->{'spec_type'} == 1 && !empty($goods_spec)){
             return ['code' => 0, 'msg' => '该商品没有规格'];
         }
-        if (!empty($goods_spec_id)){
-            $sku_id = GoodsSpec::where('goods_id',$goods_id)->where('id',$goods_spec_id)->where('is_del',0)->value('sku_id');
-            if (empty($sku_id)){
-                return ['code' => 0, 'msg' => '商品规格错误'];
-            }
-            $skuInfo = GoodsSku::where('goods_id',$goods_id)->where('id',$sku_id)->where('is_del',0)->first();
-            if (empty($skuInfo)){
-                return ['code' => 0, 'msg' => '商品规格不存在'];
+        if (!empty($goods_spec)){
+            foreach ($goods_spec as $spec){
+                $spec_number = $spec['number'];
+                $sku_id = GoodsSpec::where('goods_id',$goods_id)->where('id',$spec['id'])->where('is_del',0)->value('sku_id');
+                if (empty($sku_id)){
+                    return ['code' => 0, 'msg' => '商品规格错误'];
+                }
+                $skuInfo = GoodsSku::where('goods_id',$goods_id)->where('id',$sku_id)->where('is_del',0)->first();
+                if (empty($skuInfo)){
+                    return ['code' => 0, 'msg' => '商品规格不存在'];
+                }
+                if ($skuInfo->{'sku_type'} == 1){//商品只能单选
+                    $spec_number = 1;//单选购物数量只能为1
+                }elseif ($skuInfo->{'sku_type'} == 2 && $skuInfo->{'affect_quantity'} == 0){//可多选规格但是不能多添加购物车数量
+                    $spec_number = 1;//数量只能为1
+                }
+                $goods_spec_data[] = [
+                    'id' => $spec['id'],
+                    'number' => $spec_number,
+                ];
             }
         }
+
         DB::beginTransaction();
         try {
-            //获取购物车是否存在此商品
-            $where = [['m_id',$m_id], ['shop_id',$shop_id], ['category_id',$category_id], ['goods_id',$goods_id]];
-            //查询此商品购物车数量
-            $shopping_info = Shopping::where($where)->select(['id', 'goods_id', 'number'])->first();
-
-            if (empty($shopping_info)) {//没用购物车信息
+            if ($goods->{'spec_type'} == 2){//如果是多规则,只添加
                 //如果商品是多规格但是没选规格
                 if ($goods->{'spec_type'} == 2 && empty($goods_spec_id)){
                     return ['code' => 0, 'msg' => '请选择商品规格'];
@@ -198,47 +197,33 @@ class ShoppingCartServer
                     DB::rollBack();
                     return ['code' => 0, 'msg' => '添加失败'];
                 }
-                //如果有规则就入库规则信息
-                if (!empty($goods_spec_id)){
-                    if ($skuInfo->{'sku_type'} == 1){//商品只能单选
-                        $number = 1;//单选购物数量只能为1
-                    }elseif ($skuInfo->{'sku_type'} == 2 && $skuInfo->{'affect_quantity'} == 0){//可多选规格但是不能多添加购物车数量
-                        $number = 1;//数量只能为1
+                if (!empty($goods_spec_data)){//规则明细存入
+                    ShoppingDetail::insert($goods_spec_data);
+                }
+            }else{
+                //获取购物车是否存在此商品
+                $where = [['m_id',$m_id], ['shop_id',$shop_id], ['category_id',$category_id], ['goods_id',$goods_id]];
+                //查询此商品购物车数量
+                $shopping_info = Shopping::where($where)->select(['id', 'goods_id', 'number'])->first();
+                if (empty($shopping_info)) {//没购物车信息
+                    if ($number <= 0){
+                        DB::rollBack();
+                        return ['code' => 0, 'msg' => '请选择数量'];
                     }
-                    ShoppingDetail::create([
-                        'shopping_id' => $shopping_id,
+                    //入库
+                    $shopping = Shopping::create([
+                        'm_id' => $m_id,
+                        'shop_id' => $shop_id,
+                        'category_id' => $category_id,
                         'goods_id' => $goods_id,
-                        'goods_spec_id' => $goods_spec_id,
                         'number' => $number,
                     ]);
-                }
-            }else{//有购物车信息,更新
-                $shopping_id = $shopping_info->{'id'};
-
-                if (!empty($goods_spec_id)){//选择了规则就是更新购物车详情表
-                    if ($number <= 0){//数量为0直接删除
-                        ShoppingDetail::where('shopping_id',$shopping_info->{'id'})->where('goods_id',$goods_id)->where('goods_spec_id',$goods_spec_id)->delete();//删除详情表
-                    }else{
-                        //检查该规格信息是否讯息
-                        $details = ShoppingDetail::where('shopping_id',$shopping_info->{'id'})->where('goods_id',$goods_id)->where('goods_spec_id',$goods_spec_id)->select(['id'])->first();
-
-                        if ($skuInfo->{'sku_type'} == 1){//商品只能单选
-                            $number = 1;//单选购物数量只能为1
-                        }elseif ($skuInfo->{'sku_type'} == 2 && $skuInfo->{'affect_quantity'} == 0){//可多选规格但是不能多添加购物车数量
-                            $number = 1;//数量只能为1
-                        }
-                        if (empty($details)){
-                            ShoppingDetail::create([
-                                'shopping_id' => $shopping_id,
-                                'goods_id' => $goods_id,
-                                'goods_spec_id' => $goods_spec_id,
-                                'number' => $number,
-                            ]);
-                        }elseif ($skuInfo->{'sku_type'} == 2 && $skuInfo->{'affect_quantity'} == 1){//可多选规格并且能多添加购物车数量
-                            ShoppingDetail::where('shopping_id',$shopping_info->{'id'})->where('goods_id',$goods_id)->where('goods_spec_id',$goods_spec_id)->update(['number' => $number]);//跟新购物车
-                        }
+                    $shopping_id = $shopping->{'id'};
+                    if (empty($shopping_id)) {
+                        DB::rollBack();
+                        return ['code' => 0, 'msg' => '添加失败'];
                     }
-                }else{//没选规则就是更新主表
+                }else{
                     if ($number <= 0){//数量为0直接删除
                         Shopping::where('id',$shopping_info->{'id'})->delete();//删除主表
                         ShoppingDetail::where('shopping_id',$shopping_info->{'id'})->delete();//删除详情表
@@ -246,18 +231,142 @@ class ShoppingCartServer
                         Shopping::where('id',$shopping_info->{'id'})->update(['number' => $number]);
                     }
                 }
-
             }
 
-
             DB::commit();
             return ['code' => 1, 'msg' => '添加成功'];
         }catch (\Exception $e){
             DB::rollBack();
             return ['code' => 0, 'msg' => '添加失败'];
         }
-
     }
+//    /**
+//     * 添加购物车
+//     * @param $m_id
+//     * @param $shop_id
+//     * @param $category_id
+//     * @param $goods_id
+//     * @param $goods_spec_id
+//     * @param $number
+//     * @return array
+//     */
+//    function saveShopping($m_id,$shop_id,$category_id,$goods_id,$goods_spec_id,$number)
+//    {
+//        if (empty($goods_spec_id)){
+//            $goods_spec_id = '';
+//        }
+//        //获取商品
+//        $goods = Goods::where('is_del',0)
+//            ->where('id',$goods_id)
+//            ->where('shop_id',$shop_id)
+//            ->where('category_id',$category_id)
+//            ->select(['id as goods_id','status','spec_type'])
+//            ->first();
+//        if (empty($goods)) return ['code' => 0, 'msg' => '当前商品不存在'];
+//        if ($goods->{'status'} != 1) return ['code' => 0, 'msg' => '当前商品已下架'];
+//        //如果是单规格但是选择了规格
+//        if ($goods->{'spec_type'} == 1 && !empty($goods_spec_id)){
+//            return ['code' => 0, 'msg' => '该商品没有规格'];
+//        }
+//        if (!empty($goods_spec_id)){
+//            $sku_id = GoodsSpec::where('goods_id',$goods_id)->where('id',$goods_spec_id)->where('is_del',0)->value('sku_id');
+//            if (empty($sku_id)){
+//                return ['code' => 0, 'msg' => '商品规格错误'];
+//            }
+//            $skuInfo = GoodsSku::where('goods_id',$goods_id)->where('id',$sku_id)->where('is_del',0)->first();
+//            if (empty($skuInfo)){
+//                return ['code' => 0, 'msg' => '商品规格不存在'];
+//            }
+//        }
+//        DB::beginTransaction();
+//        try {
+//            //获取购物车是否存在此商品
+//            $where = [['m_id',$m_id], ['shop_id',$shop_id], ['category_id',$category_id], ['goods_id',$goods_id]];
+//            //查询此商品购物车数量
+//            $shopping_info = Shopping::where($where)->select(['id', 'goods_id', 'number'])->first();
+//
+//            if (empty($shopping_info)) {//没用购物车信息
+//                //如果商品是多规格但是没选规格
+//                if ($goods->{'spec_type'} == 2 && empty($goods_spec_id)){
+//                    return ['code' => 0, 'msg' => '请选择商品规格'];
+//                }
+//                if ($number <= 0){
+//                    DB::rollBack();
+//                    return ['code' => 0, 'msg' => '请选择数量'];
+//                }
+//                //入库
+//                $shopping = Shopping::create([
+//                    'm_id' => $m_id,
+//                    'shop_id' => $shop_id,
+//                    'category_id' => $category_id,
+//                    'goods_id' => $goods_id,
+//                    'number' => $number,
+//                ]);
+//                $shopping_id = $shopping->{'id'};
+//                if (empty($shopping_id)) {
+//                    DB::rollBack();
+//                    return ['code' => 0, 'msg' => '添加失败'];
+//                }
+//                //如果有规则就入库规则信息
+//                if (!empty($goods_spec_id)){
+//                    if ($skuInfo->{'sku_type'} == 1){//商品只能单选
+//                        $number = 1;//单选购物数量只能为1
+//                    }elseif ($skuInfo->{'sku_type'} == 2 && $skuInfo->{'affect_quantity'} == 0){//可多选规格但是不能多添加购物车数量
+//                        $number = 1;//数量只能为1
+//                    }
+//                    ShoppingDetail::create([
+//                        'shopping_id' => $shopping_id,
+//                        'goods_id' => $goods_id,
+//                        'goods_spec_id' => $goods_spec_id,
+//                        'number' => $number,
+//                    ]);
+//                }
+//            }else{//有购物车信息,更新
+//                $shopping_id = $shopping_info->{'id'};
+//
+//                if (!empty($goods_spec_id)){//选择了规则就是更新购物车详情表
+//                    if ($number <= 0){//数量为0直接删除
+//                        ShoppingDetail::where('shopping_id',$shopping_info->{'id'})->where('goods_id',$goods_id)->where('goods_spec_id',$goods_spec_id)->delete();//删除详情表
+//                    }else{
+//                        //检查该规格信息是否讯息
+//                        $details = ShoppingDetail::where('shopping_id',$shopping_info->{'id'})->where('goods_id',$goods_id)->where('goods_spec_id',$goods_spec_id)->select(['id'])->first();
+//
+//                        if ($skuInfo->{'sku_type'} == 1){//商品只能单选
+//                            $number = 1;//单选购物数量只能为1
+//                        }elseif ($skuInfo->{'sku_type'} == 2 && $skuInfo->{'affect_quantity'} == 0){//可多选规格但是不能多添加购物车数量
+//                            $number = 1;//数量只能为1
+//                        }
+//                        if (empty($details)){
+//                            ShoppingDetail::create([
+//                                'shopping_id' => $shopping_id,
+//                                'goods_id' => $goods_id,
+//                                'goods_spec_id' => $goods_spec_id,
+//                                'number' => $number,
+//                            ]);
+//                        }elseif ($skuInfo->{'sku_type'} == 2 && $skuInfo->{'affect_quantity'} == 1){//可多选规格并且能多添加购物车数量
+//                            ShoppingDetail::where('shopping_id',$shopping_info->{'id'})->where('goods_id',$goods_id)->where('goods_spec_id',$goods_spec_id)->update(['number' => $number]);//跟新购物车
+//                        }
+//                    }
+//                }else{//没选规则就是更新主表
+//                    if ($number <= 0){//数量为0直接删除
+//                        Shopping::where('id',$shopping_info->{'id'})->delete();//删除主表
+//                        ShoppingDetail::where('shopping_id',$shopping_info->{'id'})->delete();//删除详情表
+//                    }else{
+//                        Shopping::where('id',$shopping_info->{'id'})->update(['number' => $number]);
+//                    }
+//                }
+//
+//            }
+//
+//
+//            DB::commit();
+//            return ['code' => 1, 'msg' => '添加成功'];
+//        }catch (\Exception $e){
+//            DB::rollBack();
+//            return ['code' => 0, 'msg' => '添加失败'];
+//        }
+//
+//    }
 
 
     /**