Files
Socket/app/services/bet/ToBetCommonService.php
T
OG Backup 2cd31285f0 backup: 线上最终版本全量备份
包含所有线上运行的改动:
- 荷官端倒计时卡顿修复(CountdownService TTL+10/前端watchdog)
- 停止下注debounce防重复(8个handle.js)
- 洗码量规则重写(单边/双边/开和不计/百家乐+龙虎)
- 龙虎和局不杀庄闲(全额退回)
- 日志系统(Logger工具类/日志查看/清理脚本)
- 好路提醒异常处理(WaybillRemindService try-catch)
- 扫牌器连接改进(ScanConnectService)
- 牛牛/三卡开牌修复
- .gitignore更新/.DS_Store清理
2026-06-14 14:20:43 +08:00

88 lines
5.2 KiB
PHP

<?php
namespace app\services\bet;
use app\models\bet\Bet;
use app\models\process\NumberTab;
use app\models\user\User;
use app\models\user\Session;
use app\services\connect\InitTableService;
use app\utils\Logger;
class ToBetCommonService
{
/**
* TODO toBet检验
* @param array $tableInfo 桌子信息
* @param array $event socket属性
* @param array $data 下注信息
* @return array
*/
public static function toBetCheck(array $tableInfo, array $event, array $data): array
{
/** 通用检验重复部分开始 */
$amount = array_sum($data);
if ($amount == 0){
Logger::warn(Logger::CAT_BET, 'bet_rejected', ['reason' => 'to_bet_fail_6', 'detail' => 'zero_amount']);
return ['status' => false, 'msg' => 'to_bet_fail_6'];
}
$numberTabId = isset($event['number_tab_id']) && intval($event['number_tab_id']) > 0 ? intval($event['number_tab_id']) : 0;
$userId = isset($event['user_id']) && intval($event['user_id']) > 0 ? intval($event['user_id']) : 0;
$userInfo = User::get(['id' => $userId, 'status' => 1, 'is_delete' => 0]);
if (!$userInfo) {
Logger::warn(Logger::CAT_BET, 'bet_rejected', ['user_id' => $userId, 'table_id' => $tableInfo['id'] ?? 0, 'reason' => 'to_bet_fail_2', 'detail' => 'user_not_found']);
return ['status' => false, 'msg' => 'to_bet_fail_2'];
}
if($userInfo['bet_type'] == 2){
$session_id = $userInfo['api_token'];
$sessionInfo = Session::get(['session_id' => $session_id]);
if(!$sessionInfo){
Logger::warn(Logger::CAT_BET, 'bet_rejected', ['user_id' => $userId, 'table_id' => $tableInfo['id'] ?? 0, 'reason' => 'to_bet_fail_9', 'detail' => 'session_not_found']);
return ['status' => false, 'msg' => 'to_bet_fail_9'];
}
if(!$sessionInfo['server_status']){
Logger::warn(Logger::CAT_BET, 'bet_rejected', ['user_id' => $userId, 'table_id' => $tableInfo['id'] ?? 0, 'reason' => 'to_bet_fail_10', 'detail' => 'server_status_off']);
return ['status' => false, 'msg' => 'to_bet_fail_10'];
}
}
// 使用 InitTableService::initTable 获取当前靴的最新一局,与其他服务保持一致
$numberTabInfo = InitTableService::initTable($tableInfo);
if ($numberTabInfo['id'] != $numberTabId){
Logger::warn(Logger::CAT_BET, 'bet_rejected', ['user_id' => $userId, 'table_id' => $tableInfo['id'] ?? 0, 'reason' => 'to_bet_fail_5', 'detail' => 'number_tab_mismatch']);
return ['status' => false, 'msg' => 'to_bet_fail_5'];
}
if ($numberTabInfo['bet_status'] != 1 || time() > ($numberTabInfo['bet_start_time'] + $tableInfo['wait_time'])){
Logger::warn(Logger::CAT_BET, 'bet_rejected', ['user_id' => $userId, 'table_id' => $tableInfo['id'] ?? 0, 'reason' => 'to_bet_fail_4', 'detail' => 'bet_closed_or_timeout']);
return ['status' => false, 'msg' => 'to_bet_fail_4'];
}
// 超过50局幸运6禁止下注
if ($numberTabInfo['number'] > 50 && isset($event['luck_six_amount']) && $event['luck_six_amount'] > 0){
Logger::warn(Logger::CAT_BET, 'bet_rejected', ['user_id' => $userId, 'table_id' => $tableInfo['id'] ?? 0, 'reason' => 'to_bet_fail_7', 'detail' => 'luck_six_over_50_rounds']);
return ['status' => false, 'msg' => 'to_bet_fail_7'];
}
// 超过30局大小禁止下注
if ($numberTabInfo['number'] > 30 && isset($event['big_amount']) && $event['big_amount'] > 0){
Logger::warn(Logger::CAT_BET, 'bet_rejected', ['user_id' => $userId, 'table_id' => $tableInfo['id'] ?? 0, 'reason' => 'to_bet_fail_8', 'detail' => 'big_over_30_rounds']);
return ['status' => false, 'msg' => 'to_bet_fail_8'];
}
if ($numberTabInfo['number'] > 30 && isset($event['small_amount']) && $event['small_amount'] > 0){
Logger::warn(Logger::CAT_BET, 'bet_rejected', ['user_id' => $userId, 'table_id' => $tableInfo['id'] ?? 0, 'reason' => 'to_bet_fail_8', 'detail' => 'small_over_30_rounds']);
return ['status' => false, 'msg' => 'to_bet_fail_8'];
}
if($userInfo['win_limit'] > 0){
$winTotalToday = Bet::getWinTotalToday($userInfo['id']);
if($winTotalToday >= $userInfo['win_limit']){
Logger::warn(Logger::CAT_BET, 'bet_rejected', ['user_id' => $userId, 'table_id' => $tableInfo['id'] ?? 0, 'reason' => 'win_limit_tip', 'detail' => 'daily_win_limit_reached']);
return ['status' => false, 'msg' => 'win_limit_tip'];
}
}
if ($userInfo['money'] < $amount){
Logger::warn(Logger::CAT_BET, 'bet_rejected', ['user_id' => $userId, 'table_id' => $tableInfo['id'] ?? 0, 'reason' => 'to_bet_fail_1', 'detail' => 'insufficient_balance']);
return ['status' => false, 'msg' => 'to_bet_fail_1'];
}
return ['status' => true, 'numberTabInfo' => $numberTabInfo, 'userInfo' => $userInfo];
/** 通用检验重复部分结束 */
}
}