2026-02-26 13:35:38 +08:00
|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 文件功能:全局风云排行榜控制器
|
|
|
|
|
|
* 各种维度(等级、经验、交友币、魅力)的前20名抓取与缓存展示。
|
|
|
|
|
|
*
|
|
|
|
|
|
* @author ChatRoom Laravel
|
|
|
|
|
|
*
|
|
|
|
|
|
* @version 1.0.0
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
|
|
|
|
|
|
|
|
use App\Models\User;
|
|
|
|
|
|
use Illuminate\Support\Facades\Cache;
|
|
|
|
|
|
use Illuminate\View\View;
|
|
|
|
|
|
|
|
|
|
|
|
class LeaderboardController extends Controller
|
|
|
|
|
|
{
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 渲染排行榜主视角
|
|
|
|
|
|
*/
|
|
|
|
|
|
public function index(): View
|
|
|
|
|
|
{
|
|
|
|
|
|
// 缓存 15 分钟,防止每秒几百个人看排行榜把数据库扫死
|
|
|
|
|
|
// 选用 remember 则在过期时自动执行闭包查询并重置缓存
|
|
|
|
|
|
$ttl = 60 * 15;
|
|
|
|
|
|
|
2026-02-27 00:33:25 +08:00
|
|
|
|
// 管理员等级阈值,排行榜中隐藏管理员
|
|
|
|
|
|
$superLevel = (int) \App\Models\Sysparam::getValue('superlevel', '100');
|
|
|
|
|
|
|
2026-02-26 13:35:38 +08:00
|
|
|
|
// 1. 境界榜 (以 user_level 为尊)
|
2026-02-27 00:33:25 +08:00
|
|
|
|
$topLevels = Cache::remember('leaderboard:top_levels', $ttl, function () use ($superLevel) {
|
2026-02-26 21:10:34 +08:00
|
|
|
|
return User::select('id', 'username', 'usersf', 'user_level', 'sex')
|
2026-02-26 13:35:38 +08:00
|
|
|
|
->where('user_level', '>', 0)
|
2026-02-27 00:33:25 +08:00
|
|
|
|
->where('user_level', '<', $superLevel)
|
2026-02-26 13:35:38 +08:00
|
|
|
|
->orderByDesc('user_level')
|
|
|
|
|
|
->orderBy('id')
|
|
|
|
|
|
->limit(20)
|
|
|
|
|
|
->get();
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
// 2. 修为榜 (以 exp_num 为尊)
|
2026-02-27 00:33:25 +08:00
|
|
|
|
$topExp = Cache::remember('leaderboard:top_exp', $ttl, function () use ($superLevel) {
|
2026-02-26 21:10:34 +08:00
|
|
|
|
return User::select('id', 'username', 'usersf', 'exp_num', 'sex', 'user_level')
|
2026-02-26 13:35:38 +08:00
|
|
|
|
->where('exp_num', '>', 0)
|
2026-02-27 00:33:25 +08:00
|
|
|
|
->where('user_level', '<', $superLevel)
|
2026-02-26 13:35:38 +08:00
|
|
|
|
->orderByDesc('exp_num')
|
|
|
|
|
|
->orderBy('id')
|
|
|
|
|
|
->limit(20)
|
|
|
|
|
|
->get();
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
// 3. 财富榜 (以 jjb-交友币 为尊)
|
2026-02-27 00:33:25 +08:00
|
|
|
|
$topWealth = Cache::remember('leaderboard:top_wealth', $ttl, function () use ($superLevel) {
|
2026-02-26 21:10:34 +08:00
|
|
|
|
return User::select('id', 'username', 'usersf', 'jjb', 'sex', 'user_level')
|
2026-02-26 13:35:38 +08:00
|
|
|
|
->where('jjb', '>', 0)
|
2026-02-27 00:33:25 +08:00
|
|
|
|
->where('user_level', '<', $superLevel)
|
2026-02-26 13:35:38 +08:00
|
|
|
|
->orderByDesc('jjb')
|
|
|
|
|
|
->orderBy('id')
|
|
|
|
|
|
->limit(20)
|
|
|
|
|
|
->get();
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
// 4. 魅力榜 (以 meili 为尊)
|
2026-02-27 00:33:25 +08:00
|
|
|
|
$topCharm = Cache::remember('leaderboard:top_charm', $ttl, function () use ($superLevel) {
|
2026-02-26 21:10:34 +08:00
|
|
|
|
return User::select('id', 'username', 'usersf', 'meili', 'sex', 'user_level')
|
2026-02-26 13:35:38 +08:00
|
|
|
|
->where('meili', '>', 0)
|
2026-02-27 00:33:25 +08:00
|
|
|
|
->where('user_level', '<', $superLevel)
|
2026-02-26 13:35:38 +08:00
|
|
|
|
->orderByDesc('meili')
|
|
|
|
|
|
->orderBy('id')
|
|
|
|
|
|
->limit(20)
|
|
|
|
|
|
->get();
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
return view('leaderboard.index', compact('topLevels', 'topExp', 'topWealth', 'topCharm'));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|