TestRelationCacheScript.php 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. <?php
  2. namespace App\Module\UrsPromotion\Test;
  3. use App\Module\UrsPromotion\Logics\UrsRelationCacheLogic;
  4. use App\Module\UrsPromotion\Models\UrsUserRelationCache;
  5. use Illuminate\Support\Facades\DB;
  6. use Illuminate\Support\Facades\Log;
  7. /**
  8. * URS关系缓存测试脚本
  9. *
  10. * 用于手动测试关系缓存功能
  11. */
  12. class TestRelationCacheScript
  13. {
  14. private UrsRelationCacheLogic $logic;
  15. public function __construct()
  16. {
  17. $this->logic = new UrsRelationCacheLogic();
  18. }
  19. /**
  20. * 测试为特定用户生成缓存
  21. */
  22. public function testGenerateCacheForUser(int $ursUserId): array
  23. {
  24. echo "开始为URS用户 {$ursUserId} 生成关系缓存...\n";
  25. try {
  26. $result = $this->logic->generateUserRelationCache($ursUserId);
  27. if ($result) {
  28. // 查询生成的缓存数据
  29. $caches = UrsUserRelationCache::where('urs_user_id', $ursUserId)->get();
  30. echo "缓存生成成功!生成了 " . $caches->count() . " 条缓存记录:\n";
  31. foreach ($caches as $cache) {
  32. echo sprintf(
  33. "- 深度%d: URS用户%d -> URS用户%d (农场用户%d -> 农场用户%d)\n",
  34. $cache->depth,
  35. $cache->urs_user_id,
  36. $cache->urs_related_user_id,
  37. $cache->user_id,
  38. $cache->related_user_id
  39. );
  40. }
  41. return [
  42. 'success' => true,
  43. 'cache_count' => $caches->count(),
  44. 'caches' => $caches->toArray()
  45. ];
  46. } else {
  47. echo "缓存生成失败!\n";
  48. return ['success' => false, 'error' => '生成失败'];
  49. }
  50. } catch (\Exception $e) {
  51. echo "缓存生成异常: " . $e->getMessage() . "\n";
  52. return ['success' => false, 'error' => $e->getMessage()];
  53. }
  54. }
  55. /**
  56. * 测试检查缓存完整性
  57. */
  58. public function testCheckIntegrity(): array
  59. {
  60. echo "开始检查URS关系缓存完整性...\n";
  61. try {
  62. $result = $this->logic->checkRelationCacheIntegrity();
  63. if (isset($result['error'])) {
  64. echo "检查失败: " . $result['error'] . "\n";
  65. return $result;
  66. }
  67. echo "检查结果:\n";
  68. echo "- 总用户数: " . $result['total_users'] . "\n";
  69. echo "- 有缓存的用户数: " . $result['users_with_cache'] . "\n";
  70. echo "- 缺失缓存的用户数: " . $result['missing_users'] . "\n";
  71. echo "- 循环推荐关系数: " . $result['circular_relations'] . "\n";
  72. echo "- 孤立缓存数: " . $result['orphaned_caches'] . "\n";
  73. return $result;
  74. } catch (\Exception $e) {
  75. echo "检查异常: " . $e->getMessage() . "\n";
  76. return ['error' => $e->getMessage()];
  77. }
  78. }
  79. /**
  80. * 测试批量生成缓存
  81. */
  82. public function testBatchGenerate(array $ursUserIds): array
  83. {
  84. echo "开始批量生成缓存,用户数量: " . count($ursUserIds) . "\n";
  85. $results = [];
  86. $successCount = 0;
  87. $failCount = 0;
  88. foreach ($ursUserIds as $ursUserId) {
  89. try {
  90. $result = $this->logic->generateUserRelationCache($ursUserId);
  91. if ($result) {
  92. $successCount++;
  93. echo "✓ URS用户 {$ursUserId} 缓存生成成功\n";
  94. } else {
  95. $failCount++;
  96. echo "✗ URS用户 {$ursUserId} 缓存生成失败\n";
  97. }
  98. $results[$ursUserId] = $result;
  99. } catch (\Exception $e) {
  100. $failCount++;
  101. echo "✗ URS用户 {$ursUserId} 缓存生成异常: " . $e->getMessage() . "\n";
  102. $results[$ursUserId] = false;
  103. }
  104. }
  105. echo "\n批量生成完成:\n";
  106. echo "- 成功: {$successCount}\n";
  107. echo "- 失败: {$failCount}\n";
  108. echo "- 总计: " . count($ursUserIds) . "\n";
  109. return [
  110. 'success' => $successCount,
  111. 'fail' => $failCount,
  112. 'total' => count($ursUserIds),
  113. 'results' => $results
  114. ];
  115. }
  116. /**
  117. * 清理所有缓存数据
  118. */
  119. public function clearAllCache(): void
  120. {
  121. echo "清理所有缓存数据...\n";
  122. $count = UrsUserRelationCache::count();
  123. UrsUserRelationCache::truncate();
  124. echo "已清理 {$count} 条缓存记录\n";
  125. }
  126. /**
  127. * 查看缓存统计信息
  128. */
  129. public function showCacheStats(): array
  130. {
  131. $totalCaches = UrsUserRelationCache::count();
  132. $directCaches = UrsUserRelationCache::where('level', 1)->count();
  133. $indirectCaches = UrsUserRelationCache::where('level', 2)->count();
  134. $usersWithCache = UrsUserRelationCache::distinct('urs_user_id')->count();
  135. $stats = [
  136. 'total_caches' => $totalCaches,
  137. 'direct_caches' => $directCaches,
  138. 'indirect_caches' => $indirectCaches,
  139. 'users_with_cache' => $usersWithCache
  140. ];
  141. echo "缓存统计信息:\n";
  142. echo "- 总缓存记录数: {$totalCaches}\n";
  143. echo "- 直接关系缓存: {$directCaches}\n";
  144. echo "- 间接关系缓存: {$indirectCaches}\n";
  145. echo "- 有缓存的用户数: {$usersWithCache}\n";
  146. return $stats;
  147. }
  148. }