时间: 2025年06月16日 16:19
问题: 用户登录后,资金账户未创建,比如:userid 38936
kku_fund表中没有对应的资金账户记录kku_users表中,但缺少必要的资金账户通过代码分析发现:
AccountService::check4user()方法用于检查和创建用户账户文件: app/Module/Fund/Listeners/LoginSuccessListener.php
<?php
namespace App\Module\Fund\Listeners;
use App\Module\AppGame\Events\LoginSuccessEvent;
use App\Module\Fund\Services\AccountService;
use Illuminate\Support\Facades\Log;
/**
* 登录成功事件监听器
*
* 监听用户登录成功事件,自动创建用户资金账户
*/
class LoginSuccessListener
{
/**
* 处理事件
*
* @param LoginSuccessEvent $event
* @return void
*/
public function handle(LoginSuccessEvent $event): void
{
try {
$userId = $event->user->id;
Log::info('用户登录成功,开始检查和创建资金账户', [
'user_id' => $userId,
'login_time' => $event->loginTime
]);
// 检查和创建用户资金账户
AccountService::check4user($userId);
Log::info('用户资金账户检查和创建完成', [
'user_id' => $userId
]);
} catch (\Exception $e) {
Log::error('处理登录成功事件失败,资金账户创建失败', [
'error' => $e->getMessage(),
'user_id' => $event->user->id,
'trace' => $e->getTraceAsString()
]);
}
}
}
文件: app/Module/Fund/Providers/FundServiceProvider.php
添加登录成功事件监听器的注册:
use App\Module\AppGame\Events\LoginSuccessEvent;
use App\Module\Fund\Listeners\LoginSuccessListener;
protected $listen = [
// ... 其他事件监听器
LoginSuccessEvent::class => [
LoginSuccessListener::class . '@handle',
],
];
问题: UserActivityService::updateLoginTime方法中使用了错误的枚举类型
修复: 将STATUS2::Normal改为STATUS::Off
// 修复前
$userInfo = UserInfo::firstOrCreate(
['user_id' => $userId],
['status' => \App\Module\User\Enums\STATUS2::Normal]
);
// 修复后
$userInfo = UserInfo::firstOrCreate(
['user_id' => $userId],
['status' => \App\Module\User\Enums\STATUS::Off]
);
文件: app/Module/Fund/Commands/TestLoginAccountCreationCommand.php
创建测试命令验证登录时资金账户自动创建功能。
INSERT INTO kku_fund (user_id, fund_id, balance, create_time, update_time) VALUES
(38936, 1, 0.0000000000, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),
(38936, 2, 0.0000000000, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()),
(38936, 3, 0.0000000000, UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
通过测试命令验证:
# 运行测试命令
php artisan fund:test-login-account-creation {user_id}
测试结果显示:
通过创建Fund模块的登录成功事件监听器,成功解决了用户登录后资金账户未创建的问题。现在所有新用户在登录时都会自动创建完整的资金账户体系,确保系统功能的正常运行。
影响范围: