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 等级筛选:0=全部,1=直推,2=间推,3=三推 * @param int $pageNum 页码 * @param int $pageSize 每页大小 * @return array */ private function getTeamMemberData(int $ursUserId, int $level, int $pageNum, int $pageSize): array { try { // 获取当前用户对应的农场用户ID $farmUserId = UrsUserMappingService::getFarmUserId($ursUserId); if (!$farmUserId) { Log::warning('URS用户未映射到农场用户', [ 'urs_user_id' => $ursUserId ]); return [ 'total' => 0, 'list' => [] ]; } // 使用缓存表查询团队成员,避免递归查询性能问题 $query = \App\Module\UrsPromotion\Models\UrsUserRelationCache::where('related_user_id', $farmUserId); // 根据等级筛选 if ($level == 0) { // 全部等级:1-3代 $query->whereIn('depth', [1, 2, 3]); } else { // 指定等级 $query->where('depth', $level); } // 获取总数 $total = $query->count(); // 分页查询 $relations = $query->orderBy('depth') ->orderBy('user_id') ->offset(($pageNum - 1) * $pageSize) ->limit($pageSize) ->get(); // 构建列表项 $listItems = []; foreach ($relations as $relation) { $listItem = $this->buildListItem($relation->user_id); if ($listItem) { $listItems[] = $listItem; } } Log::info('团队成员数据查询成功', [ 'user_id' => $this->user_id, 'urs_user_id' => $ursUserId, 'farm_user_id' => $farmUserId, 'level' => $level, 'total' => $total, 'page' => $pageNum, 'size' => $pageSize, 'returned' => count($listItems) ]); return [ 'total' => $total, 'list' => $listItems ]; } catch (\Exception $e) { Log::error('获取团队成员数据失败', [ 'user_id' => $this->user_id, 'urs_user_id' => $ursUserId, 'level' => $level, 'error' => $e->getMessage(), 'trace' => $e->getTraceAsString() ]); 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; } // 获取用户钻石余额 $accounts = new FundService($farmUserId, FUND_TYPE::FUND2); $fund2Balance = (int) $accounts->balance(); // 获取用户房屋等级 $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; } } }