getUserActiveCode($userId); // 如果没有有效的推荐码,则生成一个新的 if (!$code) { $codeStr = $referralCodeLogic->generateReferralCode($userId, $expireTime); if (!$codeStr) { return null; } $code = $referralCodeLogic->getUserActiveCode($userId); } if (!$code) { return null; } return [ 'code' => $code->code, 'usage_count' => $code->usage_count, 'status' => $code->status, 'expire_time' => $code->expire_time, 'created_at' => $code->created_at, 'is_valid' => $code->isValid() ]; } catch (\Exception $e) { Log::error("获取或生成用户推荐码失败: " . $e->getMessage()); return null; } } /** * 验证推荐码 * * @param string $code 推荐码 * @return array */ public static function validateReferralCode(string $code): array { try { $referralLogic = new ReferralLogic(); $referralCodeLogic = new ReferralCodeLogic($referralLogic); return $referralCodeLogic->validateReferralCode($code); } catch (\Exception $e) { Log::error("验证推荐码失败: " . $e->getMessage()); return [ 'valid' => false, 'message' => '验证推荐码时发生错误', 'code' => null ]; } } /** * 使用推荐码 * * @param string $code 推荐码 * @param int $userId 使用者ID * @param string $ipAddress IP地址 * @param string $userAgent 用户代理 * @return array */ public static function useReferralCode(string $code, int $userId, string $ipAddress, string $userAgent): array { try { $referralLogic = new ReferralLogic(); $referralCodeLogic = new ReferralCodeLogic($referralLogic); return $referralCodeLogic->useReferralCode($code, $userId, $ipAddress, $userAgent); } catch (\Exception $e) { Log::error("使用推荐码失败: " . $e->getMessage()); return [ 'success' => false, 'message' => '使用推荐码时发生错误' ]; } } /** * 禁用推荐码 * * @param string $code 推荐码 * @return bool */ public static function disableReferralCode(string $code): bool { try { $referralLogic = new ReferralLogic(); $referralCodeLogic = new ReferralCodeLogic($referralLogic); return $referralCodeLogic->disableReferralCode($code); } catch (\Exception $e) { Log::error("禁用推荐码失败: " . $e->getMessage()); return false; } } /** * 获取推荐码使用记录 * * @param string $code 推荐码 * @param int $page 页码 * @param int $pageSize 每页数量 * @return array */ public static function getReferralCodeUsages(string $code, int $page = 1, int $pageSize = 20): array { try { $query = TeamReferralCodeUsage::where('code', $code); $total = $query->count(); $usages = $query->orderBy('created_at', 'desc') ->offset(($page - 1) * $pageSize) ->limit($pageSize) ->with(['user', 'codeOwner']) ->get(); $result = []; foreach ($usages as $usage) { $result[] = [ 'id' => $usage->id, 'code' => $usage->code, 'code_owner_id' => $usage->code_owner_id, 'code_owner_name' => $usage->codeOwner ? ($usage->codeOwner->username ?? '') : '', 'user_id' => $usage->user_id, 'user_name' => $usage->user ? ($usage->user->username ?? '') : '', 'ip_address' => $usage->ip_address, 'user_agent' => $usage->user_agent, 'status' => $usage->status, 'result' => $usage->result, 'remark' => $usage->remark, 'created_at' => $usage->created_at ]; } return [ 'total' => $total, 'page' => $page, 'page_size' => $pageSize, 'total_pages' => ceil($total / $pageSize), 'usages' => $result ]; } catch (\Exception $e) { Log::error("获取推荐码使用记录失败: " . $e->getMessage()); return [ 'total' => 0, 'page' => $page, 'page_size' => $pageSize, 'total_pages' => 0, 'usages' => [] ]; } } /** * 获取用户的所有推荐码 * * @param int $userId 用户ID * @param int $page 页码 * @param int $pageSize 每页数量 * @return array */ public static function getUserAllReferralCodes(int $userId, int $page = 1, int $pageSize = 20): array { try { $query = TeamReferralCode::where('user_id', $userId); $total = $query->count(); $codes = $query->orderBy('created_at', 'desc') ->offset(($page - 1) * $pageSize) ->limit($pageSize) ->get(); $result = []; foreach ($codes as $code) { $result[] = [ 'code' => $code->code, 'usage_count' => $code->usage_count, 'status' => $code->status, 'expire_time' => $code->expire_time, 'created_at' => $code->created_at, 'is_valid' => $code->isValid() ]; } return [ 'total' => $total, 'page' => $page, 'page_size' => $pageSize, 'total_pages' => ceil($total / $pageSize), 'codes' => $result ]; } catch (\Exception $e) { Log::error("获取用户所有推荐码失败: " . $e->getMessage()); return [ 'total' => 0, 'page' => $page, 'page_size' => $pageSize, 'total_pages' => 0, 'codes' => [] ]; } } /** * 清理过期的推荐码 * * @return int 清理的数量 */ public static function cleanExpiredReferralCodes(): int { try { $referralLogic = new ReferralLogic(); $referralCodeLogic = new ReferralCodeLogic($referralLogic); return $referralCodeLogic->cleanExpiredReferralCodes(); } catch (\Exception $e) { Log::error("清理过期推荐码失败: " . $e->getMessage()); return 0; } } }