041426-实现URS注册用户设置昵称和头像功能.md 4.0 KB

实现URS注册用户设置昵称和头像功能

任务时间: 2025年07月04日 14:26
任务类型: 功能实现
模块: ThirdParty/Urs/Webhook

任务描述

UrsRegisterFarmUserWebhook.php 中实现为新注册的农场用户设置昵称和随机头像(1-8)的功能。

需求分析

  • 在URS用户注册农场用户的webhook处理中,为新创建的农场用户设置昵称和头像
  • 昵称:使用传入的 nickname 参数
  • 头像:随机生成1-8范围内的头像ID
  • 参考逻辑:app/Module/AppGame/Handler/User/EditinfoHandler.php

实现方案

1. 添加必要的导入和依赖

文件: ThirdParty/Urs/Webhook/UrsRegisterFarmUserWebhook.php

添加导入

use App\Module\User\Models\UserInfo;
use Illuminate\Support\Facades\DB;

2. 调用设置用户信息的方法

processRegisterFarmUser 方法中,在登录完成后添加设置昵称和头像的调用:

// 登陆一次
$logininfo = \App\Module\AppGame\Handler\Public\Login4uHandler::completeUrsLogin($ursUserId,$farmUserId,$userKey);

// 设置昵称和头像(随机1-8),逻辑参考 app/Module/AppGame/Handler/User/EditinfoHandler.php
$this->setUserNicknameAndAvatar($farmUserId, $nickname);

3. 实现设置用户信息的方法

新增方法: setUserNicknameAndAvatar

/**
 * 设置用户昵称和头像
 *
 * @param int $farmUserId 农场用户ID
 * @param string $nickname 昵称
 * @throws \Exception
 */
protected function setUserNicknameAndAvatar(int $farmUserId, string $nickname): void
{
    try {
        // 开始事务
        DB::beginTransaction();

        // 获取用户信息
        $userInfo = UserInfo::where('user_id', $farmUserId)->first();

        if (!$userInfo) {
            // 如果用户信息不存在,创建一个新的
            $userInfo = new UserInfo();
            $userInfo->user_id = $farmUserId;
        }

        // 设置昵称
        $userInfo->nickname = $nickname;

        // 生成随机头像(1-8)
        $randomAvatar = (string) rand(1, 8);
        $userInfo->avatar = $randomAvatar;

        // 保存用户信息
        $userInfo->save();

        // 提交事务
        DB::commit();

        // 记录成功日志
        Log::info("URS用户设置昵称和头像成功", [
            'farm_user_id' => $farmUserId,
            'nickname' => $nickname,
            'avatar' => $randomAvatar,
        ]);

    } catch (\Exception $e) {
        // 回滚事务
        DB::rollBack();

        // 记录错误日志
        Log::error("URS用户设置昵称和头像失败", [
            'farm_user_id' => $farmUserId,
            'nickname' => $nickname,
            'error' => $e->getMessage(),
            'trace' => $e->getTraceAsString(),
        ]);

        // 重新抛出异常
        throw $e;
    }
}

功能特点

  1. 事务安全: 使用数据库事务确保数据一致性
  2. 错误处理: 完善的异常处理和日志记录
  3. 随机头像: 生成1-8范围内的随机头像ID
  4. 兼容性: 支持创建新用户信息或更新已存在的用户信息
  5. 日志记录: 详细的成功和失败日志记录

测试验证

创建了测试命令 app/Module/Test/Commands/TestUrsWebhookCommand.php 来验证功能:

php artisan test:urs-webhook --user-id=12345 --nickname="测试昵称"

测试结果

  • ✅ 昵称设置正确
  • ✅ 头像ID在正确范围内 (1-8)
  • ✅ 随机性验证通过(多次测试生成不同头像ID:2, 4, 8)
  • ✅ 事务处理正常
  • ✅ 日志记录完整

代码质量

  • 语法检查通过:php -l ThirdParty/Urs/Webhook/UrsRegisterFarmUserWebhook.php
  • 遵循项目编码规范
  • 添加了完整的中文注释
  • 实现了适当的错误处理和日志记录

总结

成功实现了URS注册用户设置昵称和头像的功能,功能完整、稳定,已通过测试验证。该功能将在URS用户注册农场用户时自动为其设置传入的昵称和随机生成的头像(1-8)。