修复红包领取三重问题:①getOnlineUserIds 兼容旧版用户(fallback数据库查询) ②聊天领取按钮用全局Map替代内嵌JSON避免HTML属性破坏 ③doClaim改判 data.ok 而非不存在的 data.status
This commit is contained in:
@@ -364,6 +364,7 @@ class WeddingService
|
||||
|
||||
/**
|
||||
* 从 Redis room:{roomId}:users Hash 获取当前在线用户 ID 列表。
|
||||
* 若 Hash value 中无 user_id(旧版登录用户),则用 username 批量查库补齐。
|
||||
*
|
||||
* @param int $roomId 房间 ID
|
||||
* @return array<int>
|
||||
@@ -373,16 +374,33 @@ class WeddingService
|
||||
try {
|
||||
$key = "room:{$roomId}:users";
|
||||
$users = Redis::hgetall($key);
|
||||
if (empty($users)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$ids = [];
|
||||
$fallbacks = []; // 需要 fallback 查库的用户名
|
||||
|
||||
foreach ($users as $username => $jsonInfo) {
|
||||
$info = json_decode($jsonInfo, true);
|
||||
// user_id 由 ChatController::join() 写入 userData
|
||||
if (isset($info['user_id'])) {
|
||||
// 新版登录:user_id 直接存在 Redis
|
||||
$ids[] = (int) $info['user_id'];
|
||||
} else {
|
||||
// 旧版登录(修复前):user_id 缺失,记录 username 待批量查库
|
||||
$fallbacks[] = $username;
|
||||
}
|
||||
}
|
||||
|
||||
// 对旧用户批量查库补齐 user_id
|
||||
if (! empty($fallbacks)) {
|
||||
$dbIds = User::whereIn('username', $fallbacks)
|
||||
->pluck('id')
|
||||
->map(fn ($id) => (int) $id)
|
||||
->all();
|
||||
$ids = array_merge($ids, $dbIds);
|
||||
}
|
||||
|
||||
return array_values(array_unique($ids));
|
||||
} catch (\Throwable) {
|
||||
return [];
|
||||
|
||||
Reference in New Issue
Block a user