updateUserActivityTime(); // 获取请求参数 $page = $data->getPage(); $level = $data->getLevel(); // 等级筛选:0=全部,1=直推,2=间推,3=三推 $pageNum = $page ? $page->getPage() : 1; $pageSize = $page ? $page->getPerPage() : 20; // 限制分页参数 $pageNum = max(1, $pageNum); $pageSize = min(100, max(1, $pageSize)); // 最大100条 // 获取当前农场用户对应的URS用户ID $ursUserId = UrsUserMappingService::getUrsUserId($this->user_id); if (!$ursUserId) { // 用户未进入URS推广系统,返回空列表 Log::info('用户未进入URS推广系统', [ 'user_id' => $this->user_id ]); return $this->setEmptyResponse($response, $pageNum, $pageSize); } // 获取团队成员数据 $teamData = $this->getTeamMemberData($ursUserId, $level, $pageNum, $pageSize); // 设置分页信息 $responsePage = new ResponsePage(); $responsePage->setCurrentPage($pageNum); $responsePage->setPerPage($pageSize); $responsePage->setTotal($teamData['total']); $responsePage->setLastPage(ceil($teamData['total'] / $pageSize)); $responsePage->setHasMore($pageNum < ceil($teamData['total'] / $pageSize)); $response->setPage($responsePage); // 设置列表数据 $response->setList($teamData['list']); Log::info('推广团队成员列表获取成功', [ 'user_id' => $this->user_id, 'urs_user_id' => $ursUserId, 'level' => $level, 'page' => $pageNum, 'size' => $pageSize, 'total' => $teamData['total'] ]); } catch (\Exception $e) { Log::error('获取推广团队成员列表失败', [ 'user_id' => $this->user_id, 'error' => $e->getMessage(), 'trace' => $e->getTraceAsString() ]); // 发生错误时返回空列表 return $this->setEmptyResponse($response, $pageNum ?? 1, $pageSize ?? 20); } return $response; } /** * 设置空响应数据 * * @param ResponsePromotionList $response * @param int $pageNum * @param int $pageSize * @return ResponsePromotionList */ private function setEmptyResponse(ResponsePromotionList $response, int $pageNum, int $pageSize): ResponsePromotionList { $responsePage = new ResponsePage(); $responsePage->setCurrentPage($pageNum); $responsePage->setPerPage($pageSize); $responsePage->setTotal(0); $responsePage->setLastPage(0); $responsePage->setHasMore(false); $response->setPage($responsePage); $response->setList([]); return $response; } /** * 获取团队成员数据 * * @param int $ursUserId URS用户ID * @param int $level 等级筛选 * @param int $pageNum 页码 * @param int $pageSize 每页大小 * @return array */ private function getTeamMemberData(int $ursUserId, int $level, int $pageNum, int $pageSize): array { try { // 获取团队成员 $teamMembers = UrsReferralService::getTeamMembers($ursUserId); // 根据等级筛选 $filteredMembers = []; if ($level == 0) { // 全部等级 foreach ([1, 2, 3] as $lvl) { if (!empty($teamMembers[$lvl])) { foreach ($teamMembers[$lvl] as $member) { $filteredMembers[] = ['urs_user_id' => $member, 'level' => $lvl]; } } } } else { // 指定等级 if (!empty($teamMembers[$level])) { foreach ($teamMembers[$level] as $member) { $filteredMembers[] = ['urs_user_id' => $member, 'level' => $level]; } } } // 过滤出已进入农场的用户 $validMembers = []; foreach ($filteredMembers as $member) { $farmUserId = UrsUserMappingService::getFarmUserId($member['urs_user_id']); if ($farmUserId) { $validMembers[] = [ 'urs_user_id' => $member['urs_user_id'], 'farm_user_id' => $farmUserId, 'level' => $member['level'] ]; } } $total = count($validMembers); // 分页处理 $offset = ($pageNum - 1) * $pageSize; $pagedMembers = array_slice($validMembers, $offset, $pageSize); // 构建列表项 $listItems = []; foreach ($pagedMembers as $member) { $listItem = $this->buildListItem($member['farm_user_id']); if ($listItem) { $listItems[] = $listItem; } } return [ 'total' => $total, 'list' => $listItems ]; } catch (\Exception $e) { Log::error('获取团队成员数据失败', [ 'urs_user_id' => $ursUserId, 'level' => $level, 'error' => $e->getMessage() ]); return [ 'total' => 0, 'list' => [] ]; } } /** * 构建列表项 * * @param int $farmUserId 农场用户ID * @return PromotionListItem|null */ private function buildListItem(int $farmUserId): ?PromotionListItem { try { // 获取用户基本信息 $userInfo = UserService::infoinfo($farmUserId); if (!$userInfo) { return null; } // 获取用户钻石余额 $fund2Balance = 0; try { $accounts = AccountService::list4user($farmUserId); foreach ($accounts as $account) { if ($account->fundId === FUND_TYPE::FUND2->value) { // 直接使用余额值,protobuf的fund2字段是int64 $fund2Balance = (int)$account->balance; break; } } } catch (\Exception $e) { Log::warning('获取用户资金信息失败', [ 'user_id' => $farmUserId, 'error' => $e->getMessage() ]); } // 获取用户房屋等级 $houseLevel = 1; // 默认等级 try { $farmUser = FarmUser::where('user_id', $farmUserId)->first(); if ($farmUser) { $houseLevel = $farmUser->house_level; } } catch (\Exception $e) { Log::warning('获取用户房屋等级失败', [ 'user_id' => $farmUserId, 'error' => $e->getMessage() ]); } // 创建列表项 $listItem = new PromotionListItem(); $listItem->setUserId($farmUserId); $listItem->setNickname($userInfo->nickname ?: '用户' . $farmUserId); $listItem->setAvatar($userInfo->avatar ?: ''); $listItem->setFund2($fund2Balance); $listItem->setContribution(0); // 贡献值暂时设为0,后续可扩展 $listItem->setHouseLevel($houseLevel); return $listItem; } catch (\Exception $e) { Log::error('构建列表项失败', [ 'user_id' => $farmUserId, 'error' => $e->getMessage() ]); return null; } } }