panghu 6 місяців тому
батько
коміт
7b903853ef

+ 58 - 2
app/Http/Controllers/Api/OrderController.php

@@ -61,6 +61,7 @@ class OrderController extends ApiController
         $table_number = $commonServer->filtrationStr('table_number');//桌号
         $diner_number = $commonServer->filtrationStr('diner_number');//就餐人数
         $note = $commonServer->filtrationStr('note');//备注
+        $reserve_time = $commonServer->filtrationStr('reserve_time');//预约时间
 
         if (empty($shop_id)) return $this->apiResponseError('商家错误');
         if (!in_array($order_type,[1,2])){
@@ -73,6 +74,32 @@ class OrderController extends ApiController
         if ($diner_number > 0) return $this->apiResponseError('就餐人数最大1000');
         if (!empty($note) && mb_strlen($note) > 50 ) return $this->apiResponseError('备注最大50');
 
+        if(!empty($reserve_time)){
+            // 将预约时间转换为时间戳
+            $reserve_timestamp = strtotime($reserve_time);
+            // 获取当前时间
+            $current_time = time();
+            // 计算20分钟后的时间
+            $time_plus_20min = $current_time + (20 * 60);
+            // 获取今天的日期(Y-m-d格式)
+            $today_date = date('Y-m-d');
+            // 获取预约时间的日期部分
+            $reserve_date = date('Y-m-d', $reserve_timestamp);
+
+            // 判断预约时间是否是今天且比当前时间大20分钟
+            if ($reserve_date === $today_date && $reserve_timestamp >= $time_plus_20min) {
+                // 检查预约时间是否不超过今天结束时间
+                $end_of_today = strtotime(date('Y-m-d 23:59:59'));
+                if ($reserve_timestamp >= $end_of_today) {
+                    return $this->apiResponseError('预约时间不正确');
+                }
+            } elseif($reserve_date !== $today_date) {
+                return $this->apiResponseError('预约时间不超过今天');
+            }
+            $is_reserve = 1;
+        }else{
+            $is_reserve = 0;
+        }
         //获取商家信息
         $shop = ShopServer::creatServer()->getShopInfo($shop_id);
         if (empty($shop)) return $this->apiResponseError('该商家不存在');
@@ -90,7 +117,7 @@ class OrderController extends ApiController
             return $this->apiResponseError('下单人数过多,请稍候');
         }
         //下单
-        $res = OrderServer::creatServer()->createOrder($m_id,$shop_id,$order_type,$table_number,$diner_number,$note,$goods);
+        $res = OrderServer::creatServer()->createOrder($m_id,$shop_id,$order_type,$table_number,$diner_number,$is_reserve,$reserve_time,$note,$goods);
 
         //删除锁key-防止死锁
         RedisDataServer::creatServer()->unLockKey($lock_key,$lock_value);
@@ -114,6 +141,7 @@ class OrderController extends ApiController
         $diner_number = $commonServer->filtrationStr('diner_number');//就餐人数
         $note = $commonServer->filtrationStr('note');//备注
         $shopping_cart = request()->input('shopping_cart',[]);//商品规格数组
+        $reserve_time = $commonServer->filtrationStr('reserve_time');//预约时间
 
         if (empty($shop_id)) return $this->apiResponseError('商家错误');
         if (!in_array($order_type,[1,2])){
@@ -127,6 +155,34 @@ class OrderController extends ApiController
         if ($diner_number > 1000) return $this->apiResponseError('就餐人数最大1000');
         if (!empty($note) && mb_strlen($note) > 50 ) return $this->apiResponseError('备注最大50');
 
+        if(!empty($reserve_time)){
+            // 将预约时间转换为时间戳
+            $reserve_timestamp = strtotime($reserve_time);
+            // 获取当前时间
+            $current_time = time();
+            // 计算20分钟后的时间
+            $time_plus_20min = $current_time + (20 * 60);
+            // 获取今天的日期(Y-m-d格式)
+            $today_date = date('Y-m-d');
+            // 获取预约时间的日期部分
+            $reserve_date = date('Y-m-d', $reserve_timestamp);
+
+            // 判断预约时间是否是今天且比当前时间大20分钟
+            if ($reserve_date === $today_date && $reserve_timestamp >= $time_plus_20min) {
+                // 检查预约时间是否不超过今天结束时间
+                $end_of_today = strtotime(date('Y-m-d 23:59:59'));
+                if ($reserve_timestamp >= $end_of_today) {
+                    return $this->apiResponseError('预约时间不正确');
+                }
+            } elseif($reserve_date !== $today_date) {
+                return $this->apiResponseError('预约时间不超过今天');
+            }
+            $is_reserve = 1;
+            $reserve_time = date('Y-m-d H:i:s', $reserve_timestamp);
+        }else{
+            $is_reserve = 0;
+            $reserve_time = date('Y-m-d H:i:s');
+        }
         //获取商家信息
         $shop = ShopServer::creatServer()->getShopInfo($shop_id);
         if (empty($shop)) return $this->apiResponseError('该商家不存在');
@@ -150,7 +206,7 @@ class OrderController extends ApiController
             return $this->apiResponseError('下单人数过多,请稍候');
         }
         //下单
-        $res = OrderServer::creatServer()->createOrder($m_id,$shop_id,$order_type,$table_number,$diner_number,$note,$goods,$shopping_cart);
+        $res = OrderServer::creatServer()->createOrder($m_id,$shop_id,$order_type,$table_number,$diner_number,$is_reserve,$reserve_time,$note,$goods,$shopping_cart);
 
         //删除锁key-防止死锁
         RedisDataServer::creatServer()->unLockKey($lock_key,$lock_value);

+ 3 - 1
app/Servers/OrderServer.php

@@ -40,7 +40,7 @@ class OrderServer
         return self::$server;
     }
 
-    function createOrder($m_id,$shop_id,$order_type,$table_number,$diner_number,$note,$goods_data,$shopping_cart)
+    function createOrder($m_id,$shop_id,$order_type,$table_number,$diner_number,$is_reserve,$reserve_time,$note,$goods_data,$shopping_cart)
     {
         DB::beginTransaction();
         try {
@@ -83,6 +83,8 @@ class OrderServer
                 'pack_price' => $pack_price,
                 'shop_money' => $shop_money,
                 'shopping_cart' => $shopping_cart,
+                'is_reserve' => $is_reserve,
+                'reserve_time' => $reserve_time,
             ];
             //主表信息入库
             $order = Order::create($order_info);

+ 1 - 1
app/Servers/printer/PrinterServer.php

@@ -116,7 +116,7 @@ class PrinterServer
             $order = Order::where('id',$order_id)
                 ->where('is_del',0)
                 ->where('order_status',2)
-                ->select(['id','order_sn','m_id','order_type','number','note','pay_money','goods_number','pack_price','created_at','shop_id','table_number','diner_number'])
+                ->select(['id','order_sn','m_id','order_type','number','note','pay_money','goods_number','pack_price','created_at','shop_id','table_number','diner_number','is_reserve','reserve_time'])
                 ->first();
             if (empty($order)) {
                 ErrorRecord::create(['msg' => '订单不存在打印失败:', 'data' => $order_id]);

+ 6 - 0
app/Servers/printer/SpyunServer.php

@@ -184,6 +184,12 @@ class SpyunServer
         $content = '<CB>#' . $order->{'number'} .$str.'</CB><BR>';
         $content .= '<C>桌号:' . $order->{'table_number'} . '</C><BR>';
         $content .= str_repeat('-', 32) . "<BR>";
+        //预订单
+        if ($order->{'is_reserve'} == 1){
+            $content = '<CB>预订单</CB><BR>';
+            $content .= '<C>预约时间:' . $order->{'reserve_time'} . '</C><BR>';
+            $content .= str_repeat('-', 32) . "<BR>";
+        }
         //下单时间
 
         $content .= '下单时间:'.$order->{'created_at'}. '<BR>';