1.ws优化bet.win订阅,修复中大奖没有推送
This commit is contained in:
@@ -494,6 +494,50 @@ final class GameBetSettleService
|
||||
$effectiveBetWins = self::buildBetWinPayloadsFromSettledOrders($periodId, $resultNumber);
|
||||
}
|
||||
self::publishBetWinsAfterCommit($effectiveBetWins, $periodId);
|
||||
if ($periodId > 0 && $resultNumber > 0) {
|
||||
self::ensurePeriodBetWinNotifications($periodId, $resultNumber);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 开奖后兜底:库内已有中奖但 Redis 无 bet.win 去重键时补推(避免 streak/wallet 整期 dedup 或旧版逻辑漏推)。
|
||||
*/
|
||||
public static function ensurePeriodBetWinNotifications(int $periodId, int $resultNumber): void
|
||||
{
|
||||
if ($periodId <= 0 || $resultNumber < 1) {
|
||||
return;
|
||||
}
|
||||
$payloads = self::buildBetWinPayloadsFromSettledOrders($periodId, $resultNumber);
|
||||
if ($payloads === []) {
|
||||
return;
|
||||
}
|
||||
$missing = [];
|
||||
foreach ($payloads as $payload) {
|
||||
if (!is_array($payload)) {
|
||||
continue;
|
||||
}
|
||||
$userId = filter_var($payload['user_id'] ?? 0, FILTER_VALIDATE_INT);
|
||||
if ($userId === false || $userId <= 0) {
|
||||
continue;
|
||||
}
|
||||
$key = self::BET_WIN_NOTIFY_DEDUP_PREFIX . $periodId . ':' . $userId;
|
||||
try {
|
||||
$existing = Redis::get($key);
|
||||
if ($existing !== false && $existing !== null && $existing !== '') {
|
||||
continue;
|
||||
}
|
||||
} catch (Throwable) {
|
||||
}
|
||||
$missing[] = $payload;
|
||||
}
|
||||
if ($missing !== []) {
|
||||
Log::warning('bet.win ensurePeriodBetWinNotifications republish', [
|
||||
'period_id' => $periodId,
|
||||
'result_number' => $resultNumber,
|
||||
'user_ids' => array_map(static fn (array $p): int => (int) ($p['user_id'] ?? 0), $missing),
|
||||
]);
|
||||
self::publishBetWinsAfterCommit($missing, $periodId);
|
||||
}
|
||||
}
|
||||
|
||||
private static function markBetWinNotifyOnce(int $periodId, int $userId): bool
|
||||
|
||||
Reference in New Issue
Block a user