diff --git a/extend/workermans/model/Base.php b/extend/workermans/model/Base.php index c69ee2d..3520029 100644 --- a/extend/workermans/model/Base.php +++ b/extend/workermans/model/Base.php @@ -741,21 +741,56 @@ class Base extends Model // 转桌 public static function rottable($message) { - $update_time = date('Y-m-d H:i:s'); - if(!empty($message['cart_id'])) { - if(is_string($message['cart_id'])) { - $cart_id = json_decode($message['cart_id'], true); - }else { - $cart_id = implode(',', $message['cart_id']); - } - $sql = " UPDATE `tb_cashier_cart` SET `table_code`='{$message['new_table_code']}',`update_time`='" . $update_time . "' WHERE + try { + Db::startTrans(); + $update_time = date('Y-m-d H:i:s'); + if(!empty($message['cart_id'])) { + if(is_string($message['cart_id'])) { + $cart_id = json_decode($message['cart_id'], true); + }else { + $cart_id = implode(',', $message['cart_id']); + } + $sql = " UPDATE `tb_cashier_cart` SET `table_code`='{$message['new_table_code']}',`update_time`='" . $update_time . "' WHERE `id` IN (" . $cart_id . ") AND `table_code`= '{$message['table_code']}'"; - }else { - $sql = " UPDATE `tb_cashier_cart` SET `table_code`='{$message['new_table_code']}',`update_time`='" . $update_time . "' WHERE + $old_arr = Db::name('tb_cashier_cart')->where(['table_code' => $message['table_code']])->where('id', 'in', explode(',', $cart_id))->column('number,product_id'); + }else { + $sql = " UPDATE `tb_cashier_cart` SET `table_code`='{$message['new_table_code']}',`update_time`='" . $update_time . "' WHERE `table_code`= '{$message['table_code']}'"; + $old_arr = Db::name('tb_cashier_cart')->where(['table_code' => $message['table_code']])->column('number,product_id'); + + } + + // 如果新桌子有相同的商品,合并 + // 先拿到旧桌子的商品 + $new_arr = Db::name('tb_cashier_cart')->where(['table_code' => $message['new_table_code']])->column('number,product_id'); + if($old_arr) { + foreach ($old_arr as $lk => $lv) { + foreach ($new_arr as $nk => $nv) { + if($nv['product_id'] == $lv['product_id']) { + // 新增数量 + Db::name('tb_cashier_cart') + ->where(['table_code' => $message['table_code'], 'product_id' => $lv['product_id']]) + ->inc('number', $lv['number']) + ->update(); + // 删除原数据 + Db::name('tb_cashier_cart') + ->where(['table_code' => $message['new_table_code'], 'product_id' => $lv['product_id']]) + ->delete(); + } + } + } + } + $res = Db::execute($sql); + Db::commit(); + return $res; + }catch (Exception $e) { + Db::rollback(); + Log::info('转桌时出错' . $e->getTraceAsString()); } - return Db::execute($sql); + + + } diff --git a/extend/workermans/model/Shopping.php b/extend/workermans/model/Shopping.php index ed56d65..21e4ec4 100644 --- a/extend/workermans/model/Shopping.php +++ b/extend/workermans/model/Shopping.php @@ -66,7 +66,11 @@ class Shopping extends Base if($time_dis_info) { $time_dis_info = json_decode($time_dis_info, true); }else { - $time_dis_info = null; + 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'])) { // 再来一单 @@ -304,6 +308,31 @@ class Shopping extends Base 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;