'商户信息不存在'])]); return; } if(!empty($message['new_table_code'])) { $table_code = $message['new_table_code']; }else { $table_code = $message['table_code']; } // $table = Db::query(" // SELECT * FROM `tb_shop_table` WHERE // `table_code`= '{$table_code}' // "); // if (!$table) { // self::gateway_query('sendToClient', [$client_id, json_encode(['msg' => '桌台信息不存在'])]); // return; // } if(empty($message['table_code'])) { $message['table_code'] = 'PRO' . Random::build('numeric'); } // 处理购物车数据 switch ($message['operate_type']) { // 初始化购物车 case 'init': $rand = 'shopping_init' . Random::build(); // 商户ID 和桌码ID $table_code = self::get_shopping_send_id($message); // 绑定桌码和 client_id Gateway::bindUid($client_id, $table_code); // 限时折扣 $redis_str = Base::get_shopping_save_uid($message['shop_id'], $message['table_code']) . ':time_discount'; $time_dis_info = Redis::get($redis_str); if($time_dis_info) { $time_dis_info = json_decode($time_dis_info, true); }else { if(!empty($message['time_dis_info'])) { $time_dis_info = !is_array($message['time_dis_info'])?json_decode($message['time_dis_info'], true):$message['time_dis_info']; }else { $time_dis_info = null; } } if(!empty($message['one_more_order'])) { // 再来一单 if(empty($message['order_id']) || empty($message['user_id'])) { Gateway::sendToClient($client_id, json_encode(['msg' => 'order_id 或 user_id 必传'])); return; } // 新增再来一单时先删除之前的数据 Db::name('tb_cashier_cart')->where([ 'shop_id' => $message['shop_id'], 'user_id' => $message['user_id'], ])->delete(); $order_arr = Db::name('tb_order_detail')->where(['order_id' => $message['order_id']])->select()->toArray(); foreach ($order_arr as $k => $order) { self::add_data([ 'shop_id' => $message['shop_id'], 'sku_id' => $order['sku_id'], 'product_id' => $order['product_id'], 'number' => $order['num'], 'table_code' => $message['table_code'], 'product_name' => $order['product_name'], 'sku_name' => $order['sku_name'], 'product_type' => $order['product_type'], 'is_print' => $order['is_print'], 'user_id' => $message['user_id'], 'create_time' => d(), ]); } } $car = Db::query(" SELECT * FROM `tb_cashier_cart` WHERE `shop_id`={$message['shop_id']} AND `table_code`='{$message['table_code']}' "); $snd_data = [ 'msg' => '购物车初始化', 'operate_type' => 'init', 'msg_id' => $rand, 'type' => 'shopping', 'table_code' => $message['table_code'], 'data' => $car, 'time_dis_info' => $time_dis_info, ]; self::gateway_query('sendToClient', [$client_id, json_encode($snd_data)]); break; // 新增 case 'add': if( !empty($message['product_id']) && !empty($message['sku_id']) && !empty($message['number']) ) { // 查询购物车是否有重复的商品,有则新增,无则累加 (有赠送品的除外) try { if(empty($message['goods_type']) || $message['goods_type'] != 'package') { $car = Db::query(" SELECT * FROM `tb_cashier_cart` WHERE `shop_id`={$message['shop_id']} AND `sku_id`={$message['sku_id']} AND `product_id`={$message['product_id']} AND `table_code`='{$message['table_code']}' "); }else { // 如果是套餐商品,直接新增 $car[0] = []; } if(empty($car[0])) { if($message['number'] <= 0) { self::gateway_query('sendToClient', [$client_id, json_encode(['msg' => '数量不合法'])]); return; } $res = $res_id = self::add_data($message); }else { $car = $car[0]; $res_id = $car['id']; // 如果是新增套餐商品,硬新增 if(!empty($message['pro_group_info'])) { $res = $res_id = self::add_data($message); }else { // 是赠品,新增 if($car['is_gift'] == 1) { // 如果原本的也是赠送的,则修改数量 if(!empty($message['is_gift']) && $message['is_gift'] == 1) { $res = self::savenumber($car, $message); }else { $res = $res_id = self::add_data($message); } }else { // 如新增的也是赠送的 if(!empty($message['is_gift']) && $message['is_gift'] == 1) { $res = $res_id = self::add_data($message); }else { $res = self::savenumber($car, $message); } } } } if($res) { $status = 1; }else { $status = 0; } $rand = 'shopping_add' . Random::build(); $data = Db::query(" SELECT * FROM `tb_cashier_cart` WHERE `id`={$res_id}"); // 向此桌码下面的 client_id 发送消息 $snd_data = [ 'msg' => '购物车新增', 'operate_type' => 'add', 'msg_id' => $rand, 'type' => 'shopping', 'status' => $status, 'data' => $data[0] ]; $s_id = self::get_shopping_send_id($message); self::gateway_query('sendToUid', [$s_id, json_encode($snd_data)]); }catch (Exception $e){ Log::info('新增购物车时[error]->>>>>' . $e->getMessage()); } } break; // 修改 case 'edit': if (empty($message['id'])) { self::gateway_query('sendToClient', [$client_id, json_encode(['msg' => '购物车ID必传'])]); return; } try { $data = Db::query(" SELECT * FROM `tb_cashier_cart` WHERE `id`={$message['id']}"); if(!$data) { self::gateway_query('sendToClient', [$client_id, json_encode(['msg' => '购物车不存在, 请检查购物车ID是否正确'])]); return; } // $message['number'] += $data[0]['number']; $message_edit = [ 'number' => $message['number'], 'id' => $message['id'], ]; if(!empty($message['remark'])) { $message_edit['remark'] = $message['remark']; } $res = self::edit_data($message_edit); $s_id = self::get_shopping_send_id($message); $rand = 'shopping_edit' . Random::build(); if($res) { $status = 1; $data = Db::query(" SELECT * FROM `tb_cashier_cart` WHERE `id`={$message['id']}"); }else { $status = 0; } $snd_data = [ 'msg' => '购物车修改', 'operate_type' => 'edit', 'msg_id' => $rand, 'type' => 'shopping', 'status' => $status, 'data' => $data[0] ]; self::gateway_query('sendToUid', [$s_id, json_encode($snd_data)]); }catch (Exception $e) { Log::info('修改购物车时[error]->>>>>' . $e->getMessage()); } break; // 删除 case 'del': if (empty($message['id'])) { self::gateway_query('sendToClient', [$client_id, json_encode(['msg' => '购物车ID不存在'])]); return; } $data = Db::query(" SELECT * FROM `tb_cashier_cart` WHERE `id`={$message['id']}"); if (empty($data)) { self::gateway_query('sendToClient', [$client_id, json_encode(['msg' => '数据不存在'])]); return; } try { $res = Db::table('tb_cashier_cart')->where('id', $message['id'])->delete(); if($res) { $status = 1; }else { $status = 0; } $s_id = self::get_shopping_send_id($message); $rand = 'shopping_del' . Random::build(); $snd_data = [ 'msg' => '购物车删除', 'operate_type' => 'del', 'msg_id' => $rand, 'type' => 'shopping', 'status' => $status, 'data' => $data[0] ]; self::gateway_query('sendToUid', [$s_id, json_encode($snd_data)]); }catch (\Exception $e) { Log::info('删除购物车时[error]->>>>>' . $e->getMessage()); } break; // 清除 case 'cleanup': try { $res = Db::table('tb_cashier_cart')->where('table_code', $message['table_code'])->delete(); if($res) { $status = 1; }else { $status = 0; } $status = 1; $s_id = self::get_shopping_send_id($message); $rand = 'shopping_cleanup' . Random::build(); $snd_data = [ 'msg' => '购物车清除', 'operate_type' => 'cleanup', 'msg_id' => $rand, 'type' => 'shopping', 'status' => $status, 'data' => [ 'table_code' => $message['table_code'], ] ]; self::gateway_query('sendToUid', [$s_id, json_encode($snd_data)]); }catch (Exception $e) { Log::info('删除购物车时[error]->>>>>' . $e->getMessage()); } break; case 'rottable': if (empty($message['table_code']) || empty($message['new_table_code'])) { self::gateway_query('sendToClient', [$client_id, json_encode(['msg' => '桌码或新桌码必填'])]); return; } try { $data = Db::query(" SELECT * FROM `tb_cashier_cart` WHERE `table_code`='{$message['table_code']}'"); if(!$data) { self::gateway_query('sendToClient', [$client_id, json_encode(['msg' => '购物车不存在'])]); return; } // 查看目标桌有没有商品,有的话返回提示 // 参数第一次出发 is_hb 1 第一次触发 id_hb 2 第二次触发 if(!empty($message['is_hb'])) { // 第一次触发 if($message['is_hb'] == 1) { $y_product = Db::name('tb_cashier_cart')->where(['table_code' => $message['new_table_code'], 'shop_id' => $message['shop_id']])->find(); if($y_product) { // 有商品,返回提示合并还是舍弃 Gateway::sendToClient($client_id, json_encode([ 'msg' => '目标台桌存在其他商品,请选择合并还是舍弃', 'status' => 0, 'operate_type' => 'rottable_error', 'type' => 'shopping' ])); return; } }elseif($message['is_hb'] == 2) { // 第二次触发 现选择的是合并还是舍弃 if(!empty($message['give_up'])) { // 如果是舍弃,直接删掉 Db::name('tb_cashier_cart')->where(['table_code' => $message['new_table_code'], 'shop_id' => $message['shop_id']])->delete(); } } } $res = self::rottable($message); if($res) { $status = 1; }else { $status = 0; } $rand = 'shopping_edit' . Random::build(); $snd_data = [ 'msg' => '购物车转桌', 'operate_type' => 'rottable', 'msg_id' => $rand, 'status' => $status, 'type' => 'shopping', 'data' => [ 'table_code' => $message['table_code'], 'new_table_code' => $message['new_table_code'], ] ]; self::gateway_query('sendToClient', [$client_id, json_encode($snd_data)]); }catch (\ba\Exception $e) { Log::info('修改购物车时转桌[error]->>>>>' . $e->getMessage()); } break; // 批量操作(打包与不打包) case 'batch': try { if (!isset($message['is_pack'])) { self::gateway_query('sendToClient', [$client_id, json_encode(['msg' => 'is_pack必填'])]); return; } $data = Db::query(" SELECT * FROM `tb_cashier_cart` WHERE `table_code`= '{$message['table_code']}'"); if(!$data) { self::gateway_query('sendToClient', [$client_id, json_encode(['msg' => '桌码不存在'])]); return; } $res = self::batch($message); if($res) { $status = 1; }else { $status = 0; } $rand = 'shopping_batch' . Random::build(); $snd_data = [ 'msg' => '购物车批量操作', 'operate_type' => 'batch', 'msg_id' => $rand, 'status' => $status, 'type' => 'shopping', 'data' => [] ]; self::gateway_query('sendToClient', [$client_id, json_encode($snd_data)]); }catch (Exception $e) { Log::info('打包购物车时[error]->>>>>' . $e->getMessage()); } break; // 锁单 case 'pay_lock': self::paylock($client_id, $message); break; // 解锁 case 'pay_unlock': self::payunlock($client_id, $message); break; // 查询是否锁单 case 'search_pay_lock': self::searchpaylock($client_id, $message); break; // 批量修改(历史订单与购物车) case 'bulk_edit': try { if(empty($message['data']['history']) && empty($message['data']['cart'])) { self::gateway_query('sendToClient', [$client_id, json_encode(['msg' => '数据结构错误'])]); return; } $res = self::bulk_edit_data($message); $rand = 'cashier_edit' . Random::build(); $snd_data = [ 'msg' => '购物车修改', 'type' => 'shopping', 'status' => $res['status'], 'operate_type' => 'bulk_edit', 'data_type' => $res['data_type'], 'msg_id' => $rand, 'data' => [] ]; self::gateway_query('sendToClient', [$client_id, json_encode($snd_data)]); }catch (\ba\Exception $e) { Log::info('修改购物车时[error]->>>>>' . $e->getMessage()); } break; } } }