时间: 2025年06月23日 01:15-01:21
状态: ✅ 已完成
用户反馈user_log的fund_log收集有问题,需要清空重新收集并检查解决问题。
发现问题在于CollectUserLogsCommand中的getLastProcessedIdFromUserLogs方法:
// 问题代码
$lastLog = \App\Module\Game\Models\UserLog::where('source_table', $sourceTable)
->where('source_type', $sourceType) // 这里有问题
->orderBy('source_id', 'desc')
->first();
问题分析:
FundLogCollector使用动态source_type,根据备注内容设置不同的类型(如"system"、"farm_upgrade"等)source_type("system"),导致查询不到正确的最后处理记录BaseLogCollector的getLastProcessedId方法是正确的,只使用source_table过滤fund_logs的记录被正确收集,按source_type分布:
修改CollectUserLogsCommand::getLastProcessedIdFromUserLogs方法,对fund_logs表特殊处理:
elseif ($sourceTable === 'fund_logs') {
// 对于fund_logs表,使用动态source_type,只按source_table查询
// 这与BaseLogCollector的getLastProcessedId方法保持一致
$maxId = \App\Module\Game\Models\UserLog::where('source_table', $sourceTable)
->max('source_id');
return $maxId ?: 0;
}
# 检查数据状态
SELECT COUNT(*) FROM kku_fund_logs; # 205条
SELECT COUNT(*) FROM kku_user_logs WHERE source_table = 'fund_logs'; # 205条
SELECT MAX(source_id) FROM kku_user_logs WHERE source_table = 'fund_logs'; # 515845
app/Module/Game/Commands/CollectUserLogsCommand.phpgetLastProcessedIdFromUserLogs方法中添加fund_logs特殊处理逻辑php artisan game:collect-user-logs --detail
修复后输出:
🔧 fund: 最后处理ID 515845, 待处理 0 条 ✅
🔧 item: 最后处理ID 11802, 待处理 0 条
🔧 farm_harvest: 最后处理ID 432, 待处理 0 条
🔧 farm_upgrade: 最后处理ID 432, 待处理 0 条
🔧 point: 最后处理ID 372, 待处理 0 条
private function getSourceTypeByRemark(string $remark): string
{
$remarkInfo = $this->parseRemark($remark);
if (isset($remarkInfo['source'])) {
switch ($remarkInfo['source']) {
case 'land_upgrade':
return REWARD_SOURCE_TYPE::FARM_UPGRADE->value;
case 'admin_operation':
return REWARD_SOURCE_TYPE::ADMIN_GRANT->value;
// ... 其他类型
default:
return REWARD_SOURCE_TYPE::SYSTEM->value;
}
}
return REWARD_SOURCE_TYPE::SYSTEM->value;
}
"消耗组:43,来源:land_upgrade,ID:380" → "土地升级消耗钻石 300""系统充值 - 用于Transfer模块测试" → "管理员操作(系统充值 - 用于Transfer模块测试)获得钻石 10000"git commit -m "修复用户日志收集器fund_logs进度显示问题
- 修复CollectUserLogsCommand中getLastProcessedIdFromUserLogs方法
- 对fund_logs表使用source_table过滤而非source_type过滤
- 解决FundLogCollector使用动态source_type导致的进度计算错误
- 现在fund收集器正确显示已处理完所有记录
- fund_logs表的205条记录已全部正确收集并转换为用户友好消息"
✅ 问题已解决:
关键改进: