为CollectUserLogsCommand命令添加Point模块的日志收集功能,创建PointLogCollector收集器,实现积分日志的自动收集和用户友好消息转换。
app/Module/Game/Logics/UserLogCollectors/PointLogCollector.phppoint_logs表,源类型为pointcreate_time字段// 根据操作类型生成不同的消息格式
$message = match($record->operate_type) {
LOG_TYPE::TASK_COMPLETE => "完成任务{$action} {$amount} {$pointTypeName}",
LOG_TYPE::CHECKIN_REWARD => "签到{$action} {$amount} {$pointTypeName}",
LOG_TYPE::ACTIVITY_REWARD => "活动奖励{$action} {$amount} {$pointTypeName}",
LOG_TYPE::ACHIEVEMENT_REWARD => "成就奖励{$action} {$amount} {$pointTypeName}",
LOG_TYPE::REFERRAL_REWARD => "推荐奖励{$action} {$amount} {$pointTypeName}",
LOG_TYPE::POINT_CONSUME => "消费{$action} {$amount} {$pointTypeName}",
LOG_TYPE::POINT_EXCHANGE => "兑换{$action} {$amount} {$pointTypeName}",
LOG_TYPE::TRANSFER => $this->buildTransferMessage($record, $pointTypeName, $action, $amount),
LOG_TYPE::CIRCULATION => "积分流转{$action} {$amount} {$pointTypeName}",
LOG_TYPE::ADMIN_OPERATE => "管理员操作{$action} {$amount} {$pointTypeName}",
// ... 更多类型
};
LOG_TYPE::TEST)private function registerCollectors(): void
{
$this->collectors = [
'fund' => new FundLogCollector(),
'item' => new ItemLogCollector(),
'farm' => new FarmLogCollector(),
'point' => new PointLogCollector(), // 新增
// 可以在这里添加更多收集器
];
}
use App\Module\Game\Logics\UserLogCollectors\PointLogCollector;
// 按类型统计
$fundCount = \App\Module\Game\Models\UserLog::where('source_type', 'fund')->count();
$itemCount = \App\Module\Game\Models\UserLog::where('source_type', 'item')->count();
$farmCount = \App\Module\Game\Models\UserLog::where('source_type', 'farm')->count();
$pointCount = \App\Module\Game\Models\UserLog::where('source_type', 'point')->count(); // 新增
$this->line(" 📊 按类型统计:");
$this->line(" 💰 资金日志: {$fundCount}");
$this->line(" 📦 物品日志: {$itemCount}");
$this->line(" 🌾 农场日志: {$farmCount}");
$this->line(" ⭐ 积分日志: {$pointCount}"); // 新增
// getTableMaxId方法
case 'point_logs':
return \App\Module\Point\Models\PointLogModel::max('id') ?: 0;
// getTableRecordCount方法
case 'point_logs':
return \App\Module\Point\Models\PointLogModel::count();
private function showStats(UserLogCollectorManager $manager): void
{
$this->line("");
$this->line("收集器数量: 4"); // 从3更新为4
$this->line("- fund: 资金日志收集器");
$this->line("- item: 物品日志收集器");
$this->line("- farm: 农场日志收集器");
$this->line("- point: 积分日志收集器"); // 新增
$this->line("");
}
修复了generateHash方法中枚举对象转换为字符串的问题:
$data = [
$log->user_id,
$log->point_id->value, // 修复:添加->value
$log->amount,
$log->operate_type->value,
$log->operate_id,
$log->before_balance,
$log->later_balance,
$log->create_time,
$log->prev_hash
];
生成的消息示例:
"完成任务获得 100 经验积分(完成每日任务)""签到获得 20 签到积分(每日签到奖励)""消费消耗 30 经验积分(购买道具消耗积分)""推荐奖励获得 200 推荐积分(推荐新用户奖励)""成就奖励获得 50 成就积分(完成首次登录成就)"--info参数显示所有收集器信息--statistics参数显示详细统计--detail参数显示处理过程--reset参数重置收集进度php artisan game:collect-user-logs --info
输出显示Point收集器已成功注册:
收集器: point
类名: App\Module\Game\Logics\UserLogCollectors\PointLogCollector
源表: point_logs
类型: point
php artisan game:collect-user-logs --detail
成功处理了10条积分日志记录:
📝 开始处理各收集器...
fund: 处理了 0 条记录
item: 处理了 0 条记录
farm: 处理了 0 条记录
point: 处理了 10 条记录
php artisan game:collect-user-logs --statistics
积分日志统计正确显示:
📊 按类型统计:
💰 资金日志: 4297
📦 物品日志: 6648
🌾 农场日志: 673866
⭐ 积分日志: 10
生成的用户日志消息格式正确,内容友好:
BaseLogCollector (基类)
├── FundLogCollector (资金日志)
├── ItemLogCollector (物品日志)
├── FarmLogCollector (农场日志)
└── PointLogCollector (积分日志) ← 新增
Point原始日志 → PointLogCollector → 用户友好消息 → UserLog表
point_logs表获取新记录user_logs表# 执行日志收集
php artisan game:collect-user-logs
# 详细模式
php artisan game:collect-user-logs --detail
# 限制处理数量
php artisan game:collect-user-logs --limit=500
# 查看收集器信息
php artisan game:collect-user-logs --info
# 查看统计信息
php artisan game:collect-user-logs --statistics
# 重置收集进度
php artisan game:collect-user-logs --reset
在buildUserFriendlyMessage方法中添加新的match分支:
LOG_TYPE::NEW_OPERATION => "新操作{$action} {$amount} {$pointTypeName}",
在shouldLogRecord方法中添加新的过滤条件:
// 过滤特定操作ID
if (str_starts_with($record->operate_id, 'internal_')) {
return false;
}
可以根据不同的积分类型或用户群体定制消息格式。
Point模块的日志收集功能已完全集成到CollectUserLogsCommand中,具备以下特点:
现在用户可以通过CollectUserLogsCommand命令自动收集积分日志,生成用户友好的日志消息,为用户提供清晰的积分变动记录。