1.优化后台/admin/game/live

This commit is contained in:
2026-05-26 15:10:42 +08:00
parent 1b26539ac5
commit 5cbb7ea485
4 changed files with 144 additions and 12 deletions

View File

@@ -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';