panghu 8 kuukautta sitten
vanhempi
commit
6dd33530fa

+ 23 - 9
app/Http/Controllers/Api/OrderController.php

@@ -5,6 +5,7 @@ namespace App\Http\Controllers\Api;
 
 
 use App\Http\Controllers\ApiController;
+use App\Models\MemberOpenId;
 use App\Models\Order;
 use App\Models\OrderItem;
 use App\Servers\CommonServer;
@@ -65,13 +66,16 @@ class OrderController extends ApiController
             return $this->apiResponseError('就餐方式错误');
         }
         if (empty($table_number) || $table_number < 0) return $this->apiResponseError('桌号错误');
-        if (empty($diner_number) || $table_number < 0) return $this->apiResponseError('就餐人数错误');
-        if (!empty($note) && mb_strlen($note) > 30 ) return $this->apiResponseError('备注最大30');
+        if (empty($diner_number) || $diner_number < 0) return $this->apiResponseError('就餐人数错误');
+
+        if ($table_number > 1000) return $this->apiResponseError('桌号最大1000');
+        if ($diner_number > 0) return $this->apiResponseError('就餐人数最大1000');
+        if (!empty($note) && mb_strlen($note) > 50 ) return $this->apiResponseError('备注最大50');
 
         //获取商家信息
         $shop = ShopServer::creatServer()->getShopInfo($shop_id);
         if (empty($shop)) return $this->apiResponseError('该商家不存在');
-        if ($shop->{'status'} != 1) return $this->apiResponseError('商家闭店休息中');
+        if ($shop['status'] != 1) return $this->apiResponseError('商家闭店休息中');
         //获取购买的商品信息
         $goods = ShoppingCartServer::creatServer()->getShoppingList($m_id,$shop_id);
         if (count($goods['goods_list']) <= 0) {
@@ -123,7 +127,7 @@ class OrderController extends ApiController
         //获取商家信息
         $shop = ShopServer::creatServer()->getShopInfo($order_info->{'shop_id'});
         if (empty($shop)) return $this->apiResponseError('该商家不存在');
-        if ($shop->{'status'} != 1) return $this->apiResponseError('商家已闭店');
+        if ($shop['status'] != 1) return $this->apiResponseError('商家已闭店');
         //定义返回参数
         $data = ['pay_status' => false, 'wx_pay' => [], 'zfb_pay' => []];
         if($pay_type == 1) {
@@ -164,13 +168,18 @@ class OrderController extends ApiController
                 }
             })
             ->select(['id','order_sn','order_status','pay_money','goods_number','created_at','shop_id'])
-            ->orderBy('o.id','desc')
+            ->orderBy('id','desc')
             ->paginate(10);
         foreach ($list as $value){
 
             $shop_info = ShopServer::creatServer()->getShopInfo($value->{'shop_id'});
             $value->{'shop_name'} = $commonServer->truncateChineseString($shop_info['shop_name'],16);
-            $value->{'item'} = OrderItem::where('order_id',$value->{'id'})->select(['goods_name','goods_img'])->orderBy('id','asc')->get();
+            $value->{'item'} = OrderItem::from('order_item as o')
+                ->leftJoin('goods as g', 'o.goods_id', '=', 'g.id')
+                ->where('o.order_id',$value->{'id'})
+                ->select(['o.id','o.goods_id','o.goods_name','o.goods_img','g.status'])
+                ->orderBy('o.id','asc')
+                ->get();
             $value->initializeModel();
         }
 
@@ -231,10 +240,15 @@ class OrderController extends ApiController
             ->select(['id','order_sn','pay_type','m_id','note','order_status','pay_money','goods_number','shop_id','created_at','pack_price','table_number','diner_number','number'])
             ->first();
         if (empty($order)) return $this->apiResponseError('订单不存在');
+        if ($order->{'order_type'} == 1) {//堂食打包费为0
+            $order->{'pack_price'} = 0;
+        }
         $order->{'shop'} = ShopServer::creatServer()->getShopInfo($order->{'shop_id'});
-        $order->{'item'} = OrderItem::where('order_id',$order_id)
-            ->select(['goods_name','goods_img','goods_attr','goods_number','goods_price'])
-            ->orderBy('id','asc')
+        $order->{'item'} = OrderItem::from('order_item as o')
+            ->leftJoin('goods as g', 'o.goods_id', '=', 'g.id')
+            ->where('o.order_id',$order_id)
+            ->select(['o.id','o.goods_id','o.goods_name','o.goods_img','o.goods_attr','o.goods_number','o.goods_price','o.goods_spec_list','g.status'])
+            ->orderBy('o.id','asc')
             ->get();
 
         $order->initializeModel();

+ 8 - 0
app/Models/OrderItem.php

@@ -31,6 +31,14 @@ class OrderItem extends Model
      */
     public $timestamps = true;
 
+    /**
+     * 类型转换
+     *
+     * @var array
+     */
+    protected $casts = [
+        'goods_spec_list' => 'array',
+    ];
 
     /**
      * 不能被批量赋值的属性

+ 7 - 24
app/Servers/OrderServer.php

@@ -50,7 +50,11 @@ class OrderServer
             $goods_money = $goods_data['total_goods_money'];//商品总价
             $goods_number = $goods_data['total_num'];//商品总数
             $pack_price = $goods_data['pack_price'];//打包费
-            $order_money = bcadd($goods_money, $pack_price, 2);//订单金额 =(商品金额 + 打包费)
+            if ($order_type == 1){//堂食不算打包费
+                $order_money = $goods_money;
+            }else{//打包
+                $order_money = bcadd($goods_money, $pack_price, 2);//订单金额 =(商品金额 + 打包费)
+            }
             //预留优惠卷金额
             $coupon_money = 0;
             //用户支付金额=订单金额 - 优惠卷金额
@@ -94,7 +98,7 @@ class OrderServer
                     'shop_id' => $shop_id,
                     'order_id' => $order_id,
                     'goods_id' => $goods['goods_id'],
-                    'goods_spec_id' => empty($goods['goods_spec_id']) ? '' : $goods['goods_spec_id'],
+                    'goods_spec_list' => empty($goods['spec_list']) ? '' : $goods['spec_list'],
                     'goods_name' => $goods['goods_name'],
                     'goods_img' => $goods['goods_image'],
                     'goods_attr' => trim($goods['goods_attr'],','),
@@ -104,27 +108,6 @@ class OrderServer
                 ];
                 //总商品金额
                 $goods_total_money = bcadd($goods_total_money,$goods_info['goods_money'],2);
-                //商品没有设置无限库存,扣减库存
-                if ($goods['is_infinite'] != 1){
-                    $goodsStock = Goods::where('id',$goods_info['goods_id'])->select(['id','stock'])->first();
-                    if (empty($goodsStock)){
-                        DB::rollBack();
-                        return ['code' => 0, 'msg' => '商品不存在'];
-                    }
-                    //剩余库存
-                    $surplus_stock = bcsub($goodsStock->{'stock'},$goods_info['goods_number']);
-                    if ($surplus_stock < 0){
-                        DB::rollBack();
-                        return ['code' => 0, 'msg' => $goods_info['goods_name'].'商品库存不足'];
-                    }
-
-                    $update['stock'] = $surplus_stock;
-                    if ($surplus_stock <= 0){//设置商品售罄
-                        $update['status'] = 3;
-                    }
-
-                    Goods::where('id',$goods_info['goods_id'])->update($update);
-                }
 
                 OrderItem::create($goods_info);
             }
@@ -140,7 +123,7 @@ class OrderServer
             return ['code' => 1, 'msg' => '成功', 'data' => ['order_id'=>$order_id]];
         }catch (\Exception $e){
             DB::rollBack();
-            return ['code'=>0,'msg'=>'下单出错'];
+            return ['code'=>0,'msg'=>'下单出错'.$e->getMessage()];
         }
     }
 

+ 36 - 17
app/Servers/ShoppingCartServer.php

@@ -49,7 +49,7 @@ class ShoppingCartServer
     function getShoppingList($m_id,$shop_id)
     {
         //获取购物车商品数据
-        $where = [['p.m_id',$m_id], ['p.shop_id',$shop_id], ['p.type',1], ['g.is_del',0], ['g.status',1]];
+        $where = [['p.m_id',$m_id], ['p.shop_id',$shop_id], ['g.is_del',0], ['g.status',1]];
         $shopping =  Shopping::from('shopping as p')
             ->leftJoin('goods as g','g.id','=','p.goods_id')
             ->where($where)
@@ -78,15 +78,16 @@ class ShoppingCartServer
                     ->where('d.shopping_id',$value->{'shopping_id'})
                     ->where('d.goods_id',$value->{'goods_id'})
                     ->where('s.is_del',0)
-                    ->select(['d.*','s.spec_name','s.spec_price'])
+                    ->select(['d.id','d.goods_id','d.goods_spec_id','d.number','s.spec_name','s.spec_price'])
                     ->get();
-                $spec_total_price = 0;//规则总价置为0
                 foreach ($details as $detail){
-
-                    $goods_attr .= $detail['spec_name'] . ',';
-                    $spec_total_price =  bcmul($detail['number'],$detail['spec_price'],2);//规格数量乘以价格等于 规格总价
+                    if ($detail->{'number'} > 1){
+                        $goods_attr .= $detail['spec_name'].'x'.$detail->{'number'} . ',';
+                    }else{
+                        $goods_attr .= $detail['spec_name'] . ',';
+                    }
+                    $goods_spec_price =  bcadd($goods_spec_price,bcmul($detail['number'],$detail['spec_price'],2),2);//规格数量乘以价格等于 规格总价
                 }
-                $goods_spec_price = bcmul($goods_spec_price,$spec_total_price,2);
                 $goods_spec_list = $details;
             }
             //计算价格
@@ -150,14 +151,10 @@ class ShoppingCartServer
             ->where('id',$goods_id)
             ->where('shop_id',$shop_id)
             ->where('category_id',$category_id)
-            ->select(['id as goods_id','is_infinite','stock','status','spec_type'])
+            ->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'} == 2 && empty($goods_spec_id)){
-            return ['code' => 0, 'msg' => '请选择商品规格'];
-        }
         //如果是单规格但是选择了规格
         if ($goods->{'spec_type'} == 1 && !empty($goods_spec_id)){
             return ['code' => 0, 'msg' => '该商品没有规格'];
@@ -180,6 +177,10 @@ class ShoppingCartServer
             $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' => '请选择数量'];
@@ -212,11 +213,28 @@ class ShoppingCartServer
                     ]);
                 }
             }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{
-                        if ($skuInfo->{'sku_type'} == 2 && $skuInfo->{'affect_quantity'} == 1){//可多选规格并且能多添加购物车数量
+                        //检查该规格信息是否讯息
+                        $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]);//跟新购物车
                         }
                     }
@@ -255,10 +273,11 @@ class ShoppingCartServer
         try {
             $where = [['m_id',$m_id], ['shop_id',$shop_id]];
 
-            $shopping_info = Shopping::where($where)->select(['id', 'goods_id', 'number'])->first();
-
-            Shopping::where('id',$shopping_info->{'id'})->delete();//删除主表
-            ShoppingDetail::where('shopping_id',$shopping_info->{'id'})->delete();//删除详情表
+            $shopping_info = Shopping::where($where)->select(['id', 'goods_id', 'number'])->get();
+            foreach ($shopping_info as $v){
+                Shopping::where('id',$v->{'id'})->delete();//删除主表
+                ShoppingDetail::where('shopping_id',$v->{'id'})->delete();//删除详情表
+            }
 
             DB::commit();
             return ['code' => 1, 'msg' => '删除成功'];