validateRegisterRequest($request); // 处理注册农场用户通知 return $this->processRegisterFarmUser( $request->get('user_id'), $request->get('user_key'), $request->get('nickname') ); } /** * 验证注册请求 * * @param Request $request 请求对象 * @throws \Exception */ protected function validateRegisterRequest(Request $request): void { $requiredFields = ['user_id', 'user_key']; foreach ($requiredFields as $field) { if (!$request->has($field)) { throw new \Exception("缺少必需字段: {$field}"); } } // 验证用户ID $userId = $request->input('user_id'); if (!is_numeric($userId) || $userId <= 0) { throw new \Exception('用户ID格式无效'); } // 验证用户密钥 $userKey = $request->input('user_key'); if (empty($userKey)) { throw new \Exception('用户密钥不能为空'); } // 验证用户昵称 $nickname = $request->input('nickname'); if (empty($nickname)) { throw new \Exception('用户昵称不能为空'); } } /** * 处理注册农场用户 * * @param int $ursUserId URS用户ID * @param string $userKey 用户密钥 * @return array */ protected function processRegisterFarmUser($ursUserId, $userKey,$nickname): array { // 记录处理日志 Log::info("URS注册农场用户处理开始", [ 'urs_user_id' => $ursUserId, 'user_key_length' => strlen($userKey), 'request_id' => $this->getRequestId(), ]); try { // 使用UrsUserMappingService的公共逻辑获取或创建农场用户ID $farmUserId = UrsUserMappingService::getFarmUserIdByUserKeyWithAutoCreate($userKey, $ursUserId); if (!$farmUserId) { Log::error("URS注册农场用户失败:无法获取或创建农场用户ID", [ 'urs_user_id' => $ursUserId, 'user_key_length' => strlen($userKey), ]); throw new \Exception("无法获取或创建农场用户ID"); } // 记录成功日志 Log::info("URS注册农场用户成功", [ 'urs_user_id' => $ursUserId, 'farm_user_id' => $farmUserId, 'user_key_length' => strlen($userKey), ]); // 登陆一次 $logininfo = \App\Module\AppGame\Handler\Public\Login4uHandler::completeUrsLogin($ursUserId,$farmUserId,$userKey); // 设置昵称和头像(随机1-8),逻辑参考 app/Module/AppGame/Handler/User/EditinfoHandler.php $this->setUserNicknameAndAvatar($farmUserId, $nickname); // 返回成功响应 return [ 'farm_user_id' => $farmUserId, 'logininfo'=>$logininfo['userDto'], 'status' => 'success' ]; } catch (\Exception $e) { // 记录异常日志 Log::error("URS注册农场用户处理异常", [ 'urs_user_id' => $ursUserId, 'user_key_length' => strlen($userKey), 'error' => $e->getMessage(), 'trace' => $e->getTraceAsString(), ]); // 重新抛出异常,让上层处理 throw $e; } } /** * 设置用户昵称和头像 * * @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; } } }