panghu hace 7 meses
padre
commit
e00927c3a0

+ 14 - 3
app/Http/Controllers/Api/GoodsController.php

@@ -80,14 +80,25 @@ class GoodsController extends ApiController
         $goods_id = $commonServer->filtrationStr('goods_id');//商品id
         if (empty($goods_id)) return $this->apiResponseError('请选择商品');
 
-        $spec_type = Goods::where('id',$goods_id)->where('is_del',0)->value('spec_type');
-        if ($spec_type == 2){
+        $goods = Goods::where('is_del',0)
+            ->where('status',1)
+            ->where('id',$goods_id)
+            ->select(['id as goods_id','category_id','goods_name','goods_desc','goods_image','price','spec_type','line_price','sales'])
+            ->first();
+
+        if (empty($goods)){
+            return $this->apiResponseError('商品不存在');
+        }
+
+        if ($goods->{'spec_type'} == 2){
             $sku = GoodsSpecServer::creatServer()->getGoodsSku($goods_id);
         }else{
             $sku = [];
         }
+        $data['goods'] = $goods;
+        $data['sku'] = $sku;
 
-        return $this->apiResponseSuccess('成功',$sku);
+        return $this->apiResponseSuccess('成功',$data);
     }
 
 

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

@@ -39,7 +39,8 @@ 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 = $commonServer->filtrationStr('goods_spec',0);//商品规格数组
+        $goods_spec_id = $commonServer->filtrationStr('goods_spec_id');//规格id,删除时需要
+        $goods_spec = request()->input('goods_spec',[]);//商品规格数组
         $number = $commonServer->filtrationStr('number',0);//数量
 
         if (empty($goods_id)) return $this->apiResponseError('请选择商品');
@@ -47,7 +48,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,$number);
+        $result = ShoppingCartServer::creatServer()->saveShopping($m_id,$shop_id,$category_id,$goods_id,$goods_spec_id,$goods_spec,$number);
 
         if ($result['code'] == 0) {
             return $this->apiResponseError($result['msg']);

+ 33 - 37
app/Servers/ShoppingCartServer.php

@@ -53,7 +53,7 @@ class ShoppingCartServer
         $shopping =  Shopping::from('shopping as p')
             ->leftJoin('goods as g','g.id','=','p.goods_id')
             ->where($where)
-            ->select(['p.id as shopping_id','p.number','g.id as goods_id','g.shop_id','g.goods_name','g.goods_image','g.price','g.spec_type','g.category_id','g.pack_price'])
+            ->select(['p.id as shopping_id','p.number','p.goods_spec_id','g.id as goods_id','g.shop_id','g.goods_name','g.goods_image','g.price','g.spec_type','g.category_id','g.pack_price'])
             ->orderBy('p.id','asc')
             ->get();
 
@@ -105,7 +105,8 @@ class ShoppingCartServer
                 'spec_type' => $value['spec_type'],
                 'price' => $goods_price,
                 'pack_price' => $value['pack_price'],
-                'goods_attr' => $goods_attr,
+                'goods_spec_id' => $value['goods_spec_id'],
+                'goods_attr' => trim($goods_attr,','),
                 'status_str' => $status_str,
                 'spec_list' => $goods_spec_list,
             ];
@@ -131,11 +132,12 @@ class ShoppingCartServer
         return $data;
     }
 
-    function saveShopping($m_id,$shop_id,$category_id,$goods_id,$goods_spec,$number)
+    function saveShopping($m_id,$shop_id,$category_id,$goods_id,$goods_spec_id,$goods_spec,$number)
     {
         if (empty($goods_spec)){
             $goods_spec = [];
         }
+        $goods_spec_ids = [];
         $goods_spec_data = [];
         //获取商品
         $goods = Goods::where('is_del',0)
@@ -166,30 +168,40 @@ class ShoppingCartServer
                 }elseif ($skuInfo->{'sku_type'} == 2 && $skuInfo->{'affect_quantity'} == 0){//可多选规格但是不能多添加购物车数量
                     $spec_number = 1;//数量只能为1
                 }
+                $goods_spec_ids[] = $spec['id'];
                 $goods_spec_data[] = [
                     'id' => $spec['id'],
                     'number' => $spec_number,
                 ];
             }
+
+            sort($goods_spec_ids);
+            $goods_spec_id = implode('_',$goods_spec_ids);
         }
 
         DB::beginTransaction();
+        //获取购物车是否存在此商品
+        $where = [['m_id',$m_id], ['shop_id',$shop_id], ['category_id',$category_id], ['goods_id',$goods_id]];
+        if ($goods_spec_id) $where[] = ['goods_spec_id',$goods_spec_id];
+        //查询此商品购物车数量
+        $shopping_info = Shopping::where($where)->select(['id', 'goods_id', 'number'])->first();
         try {
-            if ($goods->{'spec_type'} == 2){//如果是多规则,只添加
-                //如果商品是多规格但是没选规格
-                if ($goods->{'spec_type'} == 2 && empty($goods_spec_id)){
-                    return ['code' => 0, 'msg' => '请选择商品规格'];
-                }
+            if (empty($shopping_info)) {//没购物车信息
                 if ($number <= 0){
                     DB::rollBack();
                     return ['code' => 0, 'msg' => '请选择数量'];
                 }
+                //如果商品是多规格但是没选规格
+                if ($goods->{'spec_type'} == 2 && empty($goods_spec)){
+                    return ['code' => 0, 'msg' => '请选择商品规格'];
+                }
                 //入库
                 $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,
                 ]);
                 $shopping_id = $shopping->{'id'};
@@ -197,39 +209,23 @@ class ShoppingCartServer
                     DB::rollBack();
                     return ['code' => 0, 'msg' => '操作失败'];
                 }
+
                 if (!empty($goods_spec_data)){//规则明细存入
-                    ShoppingDetail::insert($goods_spec_data);
+                    foreach ($goods_spec_data as $spec){
+                        ShoppingDetail::create([
+                            'shopping_id' => $shopping_id,
+                            'goods_id' => $goods_id,
+                            'goods_spec_id' => $spec['id'],
+                            'number' => $spec['number'],
+                        ]);
+                    }
                 }
             }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' => '请选择数量'];
-                    }
-                    //入库
-                    $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 ($number <= 0){//数量为0直接删除
+                    Shopping::where('id',$shopping_info->{'id'})->delete();//删除主表
+                    ShoppingDetail::where('shopping_id',$shopping_info->{'id'})->delete();//删除详情表
                 }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]);
-                    }
+                    Shopping::where('id',$shopping_info->{'id'})->update(['number' => $number]);
                 }
             }