1.优化中奖后只推送一帧中奖记录消息

This commit is contained in:
2026-05-25 16:46:47 +08:00
parent 21caa6d548
commit c10908b4da
4 changed files with 111 additions and 5 deletions

View File

@@ -25,7 +25,7 @@ final class GameBetSettleService
/**
* 对指定期次按开奖号码结算所有「待开奖」注单;同一注单幂等(仅 status=1 会更新)。
*
* @return array{jackpot_hits: list<array{user_id: int, period_no: string, total_win: string, result_number: int}>}
* @return array{jackpot_hits: list<array{user_id: int, nickname: string, period_no: string, total_win: string, result_number: int}>}
*
* @throws Throwable
*/
@@ -147,6 +147,7 @@ final class GameBetSettleService
}
$jackpotHits = [];
$hitUserIds = [];
foreach ($jackpotNotify as $uid => $_) {
if (!isset($aggregateByUser[$uid])) {
continue;
@@ -155,8 +156,14 @@ final class GameBetSettleService
if (bccomp($agg['total_win'], '0', 2) <= 0) {
continue;
}
$hitUserIds[] = (int) $uid;
}
$userNameMap = self::loadUserDisplayNames($hitUserIds);
foreach ($hitUserIds as $uid) {
$agg = $aggregateByUser[$uid];
$jackpotHits[] = [
'user_id' => (int) $uid,
'user_id' => $uid,
'nickname' => $userNameMap[$uid] ?? ('用户' . $uid),
'period_no' => (string) ($agg['period_no'] ?? ''),
'total_win' => (string) $agg['total_win'],
'result_number' => $resultNumber,
@@ -166,6 +173,41 @@ final class GameBetSettleService
return ['jackpot_hits' => $jackpotHits];
}
/**
* 批量读取用户展示名nickname 优先;空则 fallback 到 username仍空则返回空串调用方自行兜底
*
* @param list<int> $userIds
* @return array<int, string>
*/
private static function loadUserDisplayNames(array $userIds): array
{
$userIds = array_values(array_unique(array_filter($userIds, static fn ($v): bool => $v > 0)));
if ($userIds === []) {
return [];
}
$rows = Db::name('user')
->whereIn('id', $userIds)
->field(['id', 'nickname', 'username'])
->select()
->toArray();
$out = [];
foreach ($rows as $row) {
$uid = isset($row['id']) && is_numeric($row['id']) ? (int) $row['id'] : 0;
if ($uid <= 0) {
continue;
}
$nickname = isset($row['nickname']) && is_string($row['nickname']) ? trim($row['nickname']) : '';
if ($nickname !== '') {
$out[$uid] = $nickname;
continue;
}
$username = isset($row['username']) && is_string($row['username']) ? trim($row['username']) : '';
$out[$uid] = $username;
}
return $out;
}
/**
* 大奖审核通过后派彩(幂等):仅当 play_record.status=待审核 且 win_amount>=阈值时执行。
*