updateUserActivityTime(); // 获取当前农场用户对应的URS用户ID $ursUserId = UrsUserMappingService::getUrsUserId($this->user_id); if (!$ursUserId) { // 用户未进入URS推广系统,返回空数据 Log::info('用户未进入URS推广系统', [ 'user_id' => $this->user_id ]); return $this->setEmptyResponse($response); } // 获取推广关系统计 $referralStats = UrsReferralService::getReferralStats($ursUserId); // 获取今日统计数据 $todayStats = $this->getTodayStats($ursUserId); // 获取活跃用户统计 $activeStats = $this->getActiveStats($ursUserId); // 获取收益统计 $rewardStats = $this->getRewardStats($ursUserId); // 设置响应数据 $response->setTotalCount($referralStats['total_team_count'] ?? 0); $response->setDirectCount($referralStats['direct_count'] ?? 0); $response->setIndirectCount($referralStats['indirect_count'] ?? 0); $response->setDayRecentCount($todayStats['team_new_count'] ?? 0); $response->setDayDirectCount($todayStats['direct_new_count'] ?? 0); $response->setActiveCount($activeStats['team_active_count'] ?? 0); $response->setDirectActiveCount($activeStats['direct_active_count'] ?? 0); // 设置收益数据 if ($rewardStats['today_reward']) { $response->setTodayReward($rewardStats['today_reward']); } if ($rewardStats['total_reward']) { $response->setTotalReward($rewardStats['total_reward']); } Log::info('推广团队信息获取成功', [ 'user_id' => $this->user_id, 'urs_user_id' => $ursUserId, 'total_count' => $referralStats['total_team_count'] ?? 0, 'direct_count' => $referralStats['direct_count'] ?? 0 ]); } catch (\Exception $e) { Log::error('获取推广团队信息失败', [ 'user_id' => $this->user_id, 'error' => $e->getMessage(), 'trace' => $e->getTraceAsString() ]); // 发生错误时返回空数据 return $this->setEmptyResponse($response); } return $response; } /** * 设置空响应数据 * * @param ResponsePromotionInfo $response * @return ResponsePromotionInfo */ private function setEmptyResponse(ResponsePromotionInfo $response): ResponsePromotionInfo { $response->setTotalCount(0); $response->setDirectCount(0); $response->setIndirectCount(0); $response->setDayRecentCount(0); $response->setDayDirectCount(0); $response->setActiveCount(0); $response->setDirectActiveCount(0); return $response; } /** * 获取今日统计数据 * * @param int $ursUserId URS用户ID * @return array */ private function getTodayStats(int $ursUserId): array { try { $teamMembers = UrsReferralService::getTeamMembers($ursUserId); $directNewCount = 0; $teamNewCount = 0; // 统计今日新增的直推用户 if (!empty($teamMembers[1])) { foreach ($teamMembers[1] as $directMember) { $farmUserId = UrsUserMappingService::getFarmUserId($directMember); if ($farmUserId) { // 检查用户映射创建时间是否为今日 $mapping = UrsUserMappingService::getMappingDetail($directMember); if ($mapping && $mapping->mappingTime && Carbon::parse($mapping->mappingTime)->isToday()) { $directNewCount++; $teamNewCount++; } } } } // 统计今日新增的间推和三推用户 foreach ([2, 3] as $level) { if (!empty($teamMembers[$level])) { foreach ($teamMembers[$level] as $member) { $farmUserId = UrsUserMappingService::getFarmUserId($member); if ($farmUserId) { $mapping = UrsUserMappingService::getMappingDetail($member); if ($mapping && $mapping->mappingTime && Carbon::parse($mapping->mappingTime)->isToday()) { $teamNewCount++; } } } } } return [ 'direct_new_count' => $directNewCount, 'team_new_count' => $teamNewCount ]; } catch (\Exception $e) { Log::error('获取今日统计数据失败', [ 'urs_user_id' => $ursUserId, 'error' => $e->getMessage() ]); return [ 'direct_new_count' => 0, 'team_new_count' => 0 ]; } } /** * 获取活跃用户统计 * * @param int $ursUserId URS用户ID * @return array */ private function getActiveStats(int $ursUserId): array { try { $teamMembers = UrsReferralService::getTeamMembers($ursUserId); $activeThreshold = Carbon::now()->subHours(24); // 24小时内活跃 $directActiveCount = 0; $teamActiveCount = 0; // 统计直推活跃用户 if (!empty($teamMembers[1])) { foreach ($teamMembers[1] as $directMember) { $farmUserId = UrsUserMappingService::getFarmUserId($directMember); if ($farmUserId) { $lastActivity = UserActivityService::getLastActivityTime($farmUserId); if ($lastActivity && $lastActivity->gt($activeThreshold)) { $directActiveCount++; $teamActiveCount++; } } } } // 统计间推和三推活跃用户 foreach ([2, 3] as $level) { if (!empty($teamMembers[$level])) { foreach ($teamMembers[$level] as $member) { $farmUserId = UrsUserMappingService::getFarmUserId($member); if ($farmUserId) { $lastActivity = UserActivityService::getLastActivityTime($farmUserId); if ($lastActivity && $lastActivity->gt($activeThreshold)) { $teamActiveCount++; } } } } } return [ 'direct_active_count' => $directActiveCount, 'team_active_count' => $teamActiveCount ]; } catch (\Exception $e) { Log::error('获取活跃用户统计失败', [ 'urs_user_id' => $ursUserId, 'error' => $e->getMessage() ]); return [ 'direct_active_count' => 0, 'team_active_count' => 0 ]; } } /** * 获取收益统计 * * @param int $ursUserId URS用户ID * @return array */ private function getRewardStats(int $ursUserId): array { try { // 获取今日收益统计 $today = Carbon::today()->format('Y-m-d'); $tomorrow = Carbon::tomorrow()->format('Y-m-d'); $todayStats = UrsProfitService::getUserProfitStats($ursUserId, null, $today, $tomorrow); // 获取总收益统计 $totalStats = UrsProfitService::getUserProfitStats($ursUserId); // 构建今日收益Reward对象 $todayReward = null; if ($todayStats['total_amount'] > 0) { $todayReward = $this->buildRewardFromStats($todayStats); } // 构建总收益Reward对象 $totalReward = null; if ($totalStats['total_amount'] > 0) { $totalReward = $this->buildRewardFromStats($totalStats); } return [ 'today_reward' => $todayReward, 'total_reward' => $totalReward ]; } catch (\Exception $e) { Log::error('获取收益统计失败', [ 'urs_user_id' => $ursUserId, 'error' => $e->getMessage() ]); return [ 'today_reward' => null, 'total_reward' => null ]; } } /** * 从统计数据构建Reward对象 * * @param array $stats 统计数据 * @return Reward */ private function buildRewardFromStats(array $stats): Reward { $reward = new Reward(); // 创建代币奖励列表 $coins = []; // 推广收益和种植收益都以钻石形式显示 if ($stats['total_amount'] > 0) { $rewardCoin = new RewardCoin(); $rewardCoin->setType(FUND_TYPE::FUND2->value); // 钻石类型 $rewardCoin->setQuantity((float)$stats['total_amount']); $coins[] = $rewardCoin; } $reward->setCoins($coins); // 其他奖励类型暂时为空 $reward->setItems([]); $reward->setGods([]); $reward->setLands([]); $reward->setPets([]); $reward->setPetPowers([]); $reward->setSkins([]); return $reward; } }