- 新建 user_currency_logs 流水表 (Migration) - App\Enums\CurrencySource 来源枚举(可扩展) - App\Models\UserCurrencyLog 流水模型 - App\Services\UserCurrencyService 统一积分变更服务 - FishingController:抛竿/收竿接入流水记录 - AutoSaveExp:自动存点接入流水记录 - Admin/UserManagerController:管理员调整接入流水记录 - LeaderboardController:新增今日三榜(经验/金币/魅力)+ 个人流水日志页 - Admin/CurrencyStatsController:后台活动统计页 - views:新增个人日志页、后台统计页;排行榜新增今日榜数据传递 - routes:新增个人日志路由 /my/currency-logs、后台路由 /admin/currency-stats
70 lines
2.2 KiB
PHP
70 lines
2.2 KiB
PHP
<?php
|
|
|
|
/**
|
|
* 文件功能:后台积分活动统计控制器
|
|
* 展示今日(或指定日期)各来源活动产生的经验/金币/魅力统计,以及今日净流通量。
|
|
* 仅限 superlevel 以上管理员访问。
|
|
*
|
|
* @author ChatRoom Laravel
|
|
* @version 1.0.0
|
|
*/
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
use App\Enums\CurrencySource;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\UserCurrencyLog;
|
|
use App\Services\UserCurrencyService;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\View\View;
|
|
|
|
class CurrencyStatsController extends Controller
|
|
{
|
|
/**
|
|
* 注入积分统计服务
|
|
*/
|
|
public function __construct(
|
|
private readonly UserCurrencyService $currencyService,
|
|
) {}
|
|
|
|
/**
|
|
* 显示指定日期的积分活动统计(默认今日)。
|
|
*/
|
|
public function index(Request $request): View
|
|
{
|
|
// 日期选择(默认今日)
|
|
$date = $request->input('date', today()->toDateString());
|
|
|
|
// 各来源活动产出统计(按 source + currency 分组汇总)
|
|
$stats = $this->currencyService->activityStats($date);
|
|
|
|
// 按货币类型分组,方便视图展示
|
|
$statsByType = $stats->groupBy('currency')->map(
|
|
fn ($rows) => $rows->keyBy('source')
|
|
);
|
|
|
|
// 今日净流通量(正向增加 - 负向消耗),可判断通货膨胀
|
|
$netFlow = [];
|
|
foreach (['exp', 'gold', 'charm'] as $currency) {
|
|
$totalIn = UserCurrencyLog::whereDate('created_at', $date)
|
|
->where('currency', $currency)->where('amount', '>', 0)
|
|
->sum('amount');
|
|
$totalOut = UserCurrencyLog::whereDate('created_at', $date)
|
|
->where('currency', $currency)->where('amount', '<', 0)
|
|
->sum('amount');
|
|
$netFlow[$currency] = [
|
|
'in' => $totalIn,
|
|
'out' => abs($totalOut),
|
|
'net' => $totalIn + $totalOut, // 净增量
|
|
];
|
|
}
|
|
|
|
// 所有已知来源(供视图展示缺失来源的空行)
|
|
$allSources = CurrencySource::cases();
|
|
|
|
return view('admin.currency-stats.index', compact(
|
|
'date', 'stats', 'statsByType', 'netFlow', 'allSources',
|
|
));
|
|
}
|
|
}
|