diff --git a/application/admin/controller/Waybill.php b/application/admin/controller/Waybill.php index f360828..0edb565 100644 --- a/application/admin/controller/Waybill.php +++ b/application/admin/controller/Waybill.php @@ -266,6 +266,17 @@ class Waybill extends Common }else{ return json(array('code' => 0, 'msg' => '请选择结果,然后再提交')); } + }elseif($table['game_id'] == 4){ + // 牛牛作废本局 - 取消单局输赢,退回原投注额 + $number_tab_info = Db::name('number_tab')->where(array('game_id' => $game_id, 'table_id' => $table_id, 'boot_id' => $boot_id, 'id' => $number_tab_id))->find(); + if(empty($number_tab_info)){ + return json(array('code' => 0, 'msg' => '数据出错,不能修改,请稍后再试')); + } + if($number_tab_info['bet_status'] != 3){ + return json(array('code' => 0, 'msg' => '该局尚未开出结果,无法作废')); + } + $returnInfo = $this->retreated_nn($game_id,$table_id,$boot_id,$number_tab_id,$number_tab_info); + return json($returnInfo); } }else{ return json(array('code' => 0, 'msg' => '数据出错,不能修改,请稍后再试')); @@ -780,4 +791,58 @@ class Waybill extends Common } return array('code' => 1, 'msg' => '修改成功'); } + + /** + * 处理牛牛作废本局 + * 作废逻辑:回滚所有用户余额,将bet状态标记为已作废(status=2),删除洗码/分成/代理抽水记录 + * $game_id 游戏ID (4=牛牛) + * $table_id 桌子ID + * $boot_id 靴ID + * $number_tab_id 铺ID + * $number_tab_info 当前铺数据 + */ + function retreated_nn($game_id,$table_id,$boot_id,$number_tab_id,$number_tab_info){ + $lastNumberTabInfo = $number_tab_info; + // 1. 获取该局所有有效下注记录(status=1) + $bets = Db::name('bet')->where(array('game_id' => $game_id, 'table_id' => $table_id, 'boot_id' => $boot_id, 'number_tab_id' => $lastNumberTabInfo['id'], 'status' => 1))->select(); + if(empty($bets)){ + return array('code' => 0, 'msg' => '该局没有下注记录,无需作废'); + } + // 2. 回滚用户余额:减去已结算的win_total(赢了的扣回,输了的退回) + foreach($bets AS $key => $value){ + $bet_win_total = $value['win_total']; + Db::execute("update `cg_user` set `money` = `money` - ".$bet_win_total." where `id`=".$value['user_id']); + } + // 3. 将bet记录标记为已作废(status=2),而非删除,保留审计痕迹 + Db::name('bet')->where(array('game_id' => $game_id, 'table_id' => $table_id, 'boot_id' => $boot_id, 'number_tab_id' => $lastNumberTabInfo['id'], 'status' => 1))->update(array('status' => 2)); + // 4. 删除该局的洗码、分成、代理抽水记录 + Db::name('xima')->where(array('game_id' => $game_id, 'table_id' => $table_id, 'boot_id' => $boot_id, 'number_tab_id' => $lastNumberTabInfo['id']))->delete(); + Db::name('cs')->where(array('game_id' => $game_id, 'table_id' => $table_id, 'boot_id' => $boot_id, 'number_tab_id' => $lastNumberTabInfo['id']))->delete(); + Db::name('agent_commission')->where(array('game_id' => $game_id, 'table_id' => $table_id, 'boot_id' => $boot_id, 'number_tab_id' => $lastNumberTabInfo['id']))->delete(); + // 5. 处理抢庄用户的余额回滚 + if($lastNumberTabInfo['rob_banker_id'] > 0){ + $bankerBet = Db::name('bet')->where(array('game_id' => $game_id, 'table_id' => $table_id, 'boot_id' => $boot_id, 'number_tab_id' => $lastNumberTabInfo['id'], 'user_id' => $lastNumberTabInfo['rob_banker_id']))->find(); + if($bankerBet && $bankerBet['status'] != 2){ + $bet_win_total = $bankerBet['win_total']; + Db::execute("update `cg_user` set `money` = `money` - ".$bet_win_total." where `id`=".$bankerBet['user_id']); + Db::name('bet')->where(array('id' => $bankerBet['id']))->update(array('status' => 2)); + } + } + // 6. 记录作废操作日志 + $retreated_log_data = array(); + $retreated_log_data['mode'] = 2; // mode=2 表示作废 + $retreated_log_data['type'] = 1; + $retreated_log_data['create_time'] = time(); + $retreated_log_data['gamei_id'] = $game_id; + $retreated_log_data['table_id'] = $table_id; + $retreated_log_data['table_name'] = $lastNumberTabInfo['table_name']; + $retreated_log_data['boot_id'] = $boot_id; + $retreated_log_data['boot_num'] = $lastNumberTabInfo['boot_num']; + $retreated_log_data['number_tab_id'] = $number_tab_id; + $retreated_log_data['number'] = $lastNumberTabInfo['number']; + $str = '庄:'.$lastNumberTabInfo['result_banker'].' 闲1:'.$lastNumberTabInfo['result_player_1'].' 闲2:'.$lastNumberTabInfo['result_player_2'].' 闲3:'.$lastNumberTabInfo['result_player_3']; + $retreated_log_data['remark'] = '牛牛作废本局,原结果为:'.$str.',已退回所有投注额'; + Db::name('retreated_log')->insert($retreated_log_data); + return array('code' => 1, 'msg' => '作废成功,已退回所有投注额'); + } } \ No newline at end of file