feat: 新增牛牛(game_id=4)作废本局功能

edit_number_tab()新增game_id==4分支,调用retreated_nn()方法:
- 回滚所有用户余额(减去win_total)
- bet记录标记status=2(已作废),保留审计痕迹
- 删除关联的洗码/分成/代理抽水记录
- 处理抢庄用户余额回滚
- 写入retreated_log操作日志

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
li 2026-02-12 16:47:47 +08:00
parent 71d7ff1d7b
commit 22b23064d8

View File

@ -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' => '作废成功,已退回所有投注额');
}
}