1.优化后台/admin/game/live
This commit is contained in:
@@ -270,10 +270,6 @@ final class GameLiveService
|
||||
GameHotDataRedis::gameRecordRevalidateFromDbIfStale($record, $periodSeconds);
|
||||
$record = self::resolveRecord($recordId);
|
||||
}
|
||||
if ($record && GameHotDataRedis::isExpiredPayoutRecord($record)) {
|
||||
self::finalizePayoutGrace();
|
||||
$record = self::resolveRecord($recordId);
|
||||
}
|
||||
if (!$record) {
|
||||
return self::emptySnapshotPayload();
|
||||
}
|
||||
@@ -307,13 +303,13 @@ final class GameLiveService
|
||||
->where('bo.period_id', $rid)
|
||||
->order('bo.id', 'desc')
|
||||
->limit(200)
|
||||
->field('bo.id,bo.user_id,bo.period_no,bo.pick_numbers,bo.total_amount,bo.streak_at_bet,bo.create_time,gu.username as user_username')
|
||||
->field('bo.id,bo.user_id,bo.period_no,bo.pick_numbers,bo.total_amount,bo.streak_at_bet,bo.win_amount,bo.status as bet_status,bo.create_time,gu.username as user_username')
|
||||
->select()
|
||||
->toArray();
|
||||
|
||||
$candidates = [];
|
||||
$canCalculate = $elapsed >= $betSeconds && ($status === 0 || $status === 1);
|
||||
if ($canCalculate) {
|
||||
if (self::shouldBuildCandidateEstimates($status, $elapsed, $betSeconds)) {
|
||||
for ($n = 1; $n <= self::DRAW_NUMBER_MAX; $n++) {
|
||||
$loss = self::estimateLossForNumber($bets, $n);
|
||||
$candidates[] = [
|
||||
@@ -323,6 +319,8 @@ final class GameLiveService
|
||||
}
|
||||
}
|
||||
|
||||
$resultNumber = isset($record['result_number']) ? (int) $record['result_number'] : 0;
|
||||
|
||||
$aiLocked = $record['ai_locked_number'] ?? null;
|
||||
$aiDisplay = null;
|
||||
if ($aiLocked !== null && $aiLocked !== '' && is_numeric((string) $aiLocked)) {
|
||||
@@ -357,10 +355,14 @@ final class GameLiveService
|
||||
'pick_numbers' => $row['pick_numbers'],
|
||||
'total_amount' => (string) $row['total_amount'],
|
||||
'streak_at_bet' => (int) $row['streak_at_bet'],
|
||||
'win_amount' => (string) ($row['win_amount'] ?? '0.00'),
|
||||
'bet_status' => (int) ($row['bet_status'] ?? 0),
|
||||
'create_time' => (int) $row['create_time'],
|
||||
];
|
||||
}, $bets),
|
||||
'candidate_numbers' => $candidates,
|
||||
'result_number' => $resultNumber > 0 ? $resultNumber : null,
|
||||
'show_settlement_preview' => self::shouldBuildCandidateEstimates($status, $elapsed, $betSeconds),
|
||||
'ai_default_number' => $aiDisplay,
|
||||
'calc_number' => $aiDisplay,
|
||||
'pending_draw_number' => $pendingDraw,
|
||||
@@ -412,6 +414,8 @@ final class GameLiveService
|
||||
'can_calculate' => false,
|
||||
'can_draw' => false,
|
||||
'can_schedule_draw' => false,
|
||||
'result_number' => null,
|
||||
'show_settlement_preview' => false,
|
||||
'server_time' => time(),
|
||||
];
|
||||
}
|
||||
@@ -1312,6 +1316,18 @@ final class GameLiveService
|
||||
return $max;
|
||||
}
|
||||
|
||||
/**
|
||||
* 封盘至本期完全结束前均展示赔付预估(含已开奖/派彩中),供后台实时对局页保留表格数据。
|
||||
*/
|
||||
private static function shouldBuildCandidateEstimates(int $status, int $elapsed, int $betSeconds): bool
|
||||
{
|
||||
if ($elapsed < $betSeconds) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return in_array($status, [0, 1, 2, 3, 4], true);
|
||||
}
|
||||
|
||||
private static function estimateLossForNumber(array $bets, int $number): string
|
||||
{
|
||||
$payout = '0.00';
|
||||
|
||||
Reference in New Issue
Block a user