fix(tongji): 恢复游戏进度并完善周榜

This commit is contained in:
大哥大哥的大哥哥
2026-07-20 19:04:45 +08:00
parent 8a6890767e
commit 9e684f0afb
7 changed files with 206 additions and 15 deletions
+4 -1
View File
@@ -44,7 +44,10 @@ class TcmController extends BaseApiController
/** 获取当前登录用户的控糖消消乐每周7人同行榜。 */
public function gameWeeklyLeaderboard()
{
$result = GamePlatformLogic::leaderboard((int) $this->userId);
$result = GamePlatformLogic::leaderboard(
(int) $this->userId,
(string) $this->request->get('session_key', '')
);
if ($result === false) {
return $this->fail(GamePlatformLogic::getError());
}
+11 -2
View File
@@ -31,7 +31,7 @@ class GamePlatformLogic
/**
* 获取当前用户所在的真实周榜;首次进入会分配到当周同性别7人组。
*/
public static function leaderboard(int $userId): array|false
public static function leaderboard(int $userId, string $sessionKey = ''): array|false
{
self::$error = '';
if ($userId <= 0) {
@@ -43,7 +43,16 @@ class GamePlatformLogic
$score = self::ensureWeeklyScore($userId, self::weekStart());
$inviteCode = self::ensureShareInvite($userId, self::weekStart());
Db::commit();
return self::buildLeaderboard((int) $score['group_id'], $userId, $inviteCode);
$result = self::buildLeaderboard((int) $score['group_id'], $userId, $inviteCode);
$sessionKey = trim($sessionKey);
if (preg_match('/^[A-Za-z0-9_-]{16,64}$/', $sessionKey)) {
$confirmed = Db::name('tcm_game_session')
->where('session_key', $sessionKey)
->where('user_id', $userId)
->value('learned_count');
$result['confirmed_session_learned'] = max(0, (int) $confirmed);
}
return $result;
} catch (\Throwable $e) {
Db::rollback();
self::logException('leaderboard', $e);