优化:百家乐结算公告新增各用户输赢明细
- 结算时同步收集 winners(中奖用户+金额)和 losers(未中用户-金额) - 公屏广播消息末尾附加: 🏆 中奖:甲+2,000、乙+1,000 🪙 😔 未中:丙-500、丁-1,000 - 单方向最多显示 10 人,防止消息过长 - 顺手修正豹子结果文本中 dice1 重复的 bug(dice2、dice3 显示错误)
This commit is contained in:
@@ -90,11 +90,18 @@ class CloseBaccaratRoundJob implements ShouldQueue
|
|||||||
$bets = BaccaratBet::query()->where('round_id', $round->id)->where('status', 'pending')->with('user')->get();
|
$bets = BaccaratBet::query()->where('round_id', $round->id)->where('status', 'pending')->with('user')->get();
|
||||||
$totalPayout = 0;
|
$totalPayout = 0;
|
||||||
|
|
||||||
DB::transaction(function () use ($bets, $result, $config, $currency, &$totalPayout) {
|
// 收集各用户输赢结果,用于公屏展示
|
||||||
|
$winners = [];
|
||||||
|
$losers = [];
|
||||||
|
|
||||||
|
DB::transaction(function () use ($bets, $result, $config, $currency, &$totalPayout, &$winners, &$losers) {
|
||||||
foreach ($bets as $bet) {
|
foreach ($bets as $bet) {
|
||||||
|
$username = $bet->user->username ?? '匿名';
|
||||||
|
|
||||||
if ($result === 'kill') {
|
if ($result === 'kill') {
|
||||||
// 庄家收割:全灭无退款
|
// 庄家收割:全灭无退款
|
||||||
$bet->update(['status' => 'lost', 'payout' => 0]);
|
$bet->update(['status' => 'lost', 'payout' => 0]);
|
||||||
|
$losers[] = "{$username}-{$bet->amount}";
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -113,8 +120,10 @@ class CloseBaccaratRoundJob implements ShouldQueue
|
|||||||
"百家乐 #{$this->round->id} 押 {$bet->betTypeLabel()} 中奖",
|
"百家乐 #{$this->round->id} 押 {$bet->betTypeLabel()} 中奖",
|
||||||
);
|
);
|
||||||
$totalPayout += $payout;
|
$totalPayout += $payout;
|
||||||
|
$winners[] = "{$username}+".number_format($payout);
|
||||||
} else {
|
} else {
|
||||||
$bet->update(['status' => 'lost', 'payout' => 0]);
|
$bet->update(['status' => 'lost', 'payout' => 0]);
|
||||||
|
$losers[] = "{$username}-".number_format($bet->amount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -137,20 +146,23 @@ class CloseBaccaratRoundJob implements ShouldQueue
|
|||||||
broadcast(new BaccaratRoundSettled($round));
|
broadcast(new BaccaratRoundSettled($round));
|
||||||
|
|
||||||
// ── 公屏公告 ─────────────────────────────────────────────────
|
// ── 公屏公告 ─────────────────────────────────────────────────
|
||||||
$this->pushResultMessage($round, $chatState);
|
$this->pushResultMessage($round, $chatState, $winners, $losers);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 向公屏发送开奖结果系统消息。
|
* 向公屏发送开奖结果系统消息(含各用户输赢情况)。
|
||||||
|
*
|
||||||
|
* @param array<string> $winners 中奖用户列表,格式 "用户名+金额"
|
||||||
|
* @param array<string> $losers 未中奖用户列表,格式 "用户名-金额"
|
||||||
*/
|
*/
|
||||||
private function pushResultMessage(BaccaratRound $round, ChatStateService $chatState): void
|
private function pushResultMessage(BaccaratRound $round, ChatStateService $chatState, array $winners = [], array $losers = []): void
|
||||||
{
|
{
|
||||||
$diceStr = "【{$round->dice1}】【{$round->dice2}】【{$round->dice3}】";
|
$diceStr = "【{$round->dice1}】【{$round->dice2}】【{$round->dice3}】";
|
||||||
|
|
||||||
$resultText = match ($round->result) {
|
$resultText = match ($round->result) {
|
||||||
'big' => "🔵 大({$round->total_points} 点)",
|
'big' => "🔵 大({$round->total_points} 点)",
|
||||||
'small' => "🟡 小({$round->total_points} 点)",
|
'small' => "🟡 小({$round->total_points} 点)",
|
||||||
'triple' => "💥 豹子!({$round->dice1}{$round->dice1}{$round->dice1})",
|
'triple' => "💥 豹子!({$round->dice1}{$round->dice2}{$round->dice3})",
|
||||||
'kill' => "☠️ 庄家收割!({$round->total_points} 点)全灭",
|
'kill' => "☠️ 庄家收割!({$round->total_points} 点)全灭",
|
||||||
default => '',
|
default => '',
|
||||||
};
|
};
|
||||||
@@ -159,7 +171,18 @@ class CloseBaccaratRoundJob implements ShouldQueue
|
|||||||
? '共派发 🪙'.number_format($round->total_payout).' 金币'
|
? '共派发 🪙'.number_format($round->total_payout).' 金币'
|
||||||
: '本局无人获奖';
|
: '本局无人获奖';
|
||||||
|
|
||||||
$content = "🎲 【百家乐】第 #{$round->id} 局开奖!{$diceStr} 总点 {$round->total_points} → {$resultText}!{$payoutText}。";
|
// 拼接用户输赢明细(最多显示 10 人,防止消息过长)
|
||||||
|
$detailParts = [];
|
||||||
|
if ($winners) {
|
||||||
|
$detailParts[] = '🏆 中奖:'.implode('、', array_slice($winners, 0, 10)).' 🪙';
|
||||||
|
}
|
||||||
|
if ($losers) {
|
||||||
|
$detailParts[] = '😔 未中:'.implode('、', array_slice($losers, 0, 10));
|
||||||
|
}
|
||||||
|
|
||||||
|
$detail = $detailParts ? ' '.implode(' ', $detailParts) : '';
|
||||||
|
|
||||||
|
$content = "🎲 【百家乐】第 #{$round->id} 局开奖!{$diceStr} 总点 {$round->total_points} → {$resultText}!{$payoutText}。{$detail}";
|
||||||
|
|
||||||
$msg = [
|
$msg = [
|
||||||
'id' => $chatState->nextMessageId(1),
|
'id' => $chatState->nextMessageId(1),
|
||||||
|
|||||||
Reference in New Issue
Block a user