UrsPromotionRelationLevel.php 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php
  2. namespace App\Module\UrsPromotion\Enums;
  3. /**
  4. * URS推广关系层级枚举
  5. *
  6. * 定义URS推广系统中的推荐关系层级
  7. */
  8. enum UrsPromotionRelationLevel: int
  9. {
  10. /**
  11. * 直推关系 - 第一层级
  12. */
  13. case DIRECT = 1;
  14. /**
  15. * 间推关系 - 第二层级及以上
  16. */
  17. case INDIRECT = 2;
  18. /**
  19. * 获取层级名称
  20. */
  21. public function getName(): string
  22. {
  23. return match($this) {
  24. self::DIRECT => '直推',
  25. self::INDIRECT => '间推',
  26. };
  27. }
  28. /**
  29. * 获取层级描述
  30. */
  31. public function getDescription(): string
  32. {
  33. return match($this) {
  34. self::DIRECT => '直接推荐的下级用户',
  35. self::INDIRECT => '间接推荐的下级用户(二级及以上)',
  36. };
  37. }
  38. /**
  39. * 获取所有层级
  40. */
  41. public static function getAllLevels(): array
  42. {
  43. return [
  44. self::DIRECT->value => self::DIRECT->getName(),
  45. self::INDIRECT->value => self::INDIRECT->getName(),
  46. ];
  47. }
  48. /**
  49. * 检查是否为有效层级
  50. */
  51. public static function isValidLevel(int $level): bool
  52. {
  53. return $level >= self::DIRECT->value && $level <= self::getMaxLevel();
  54. }
  55. /**
  56. * 获取最大层级(支持20代)
  57. */
  58. public static function getMaxLevel(): int
  59. {
  60. return 20;
  61. }
  62. /**
  63. * 获取团队统计深度(达人等级计算使用)
  64. */
  65. public static function getTeamStatsDepth(): int
  66. {
  67. return 20;
  68. }
  69. /**
  70. * 根据深度获取层级类型
  71. */
  72. public static function getLevelByDepth(int $depth): int
  73. {
  74. return $depth === 1 ? self::DIRECT->value : self::INDIRECT->value;
  75. }
  76. /**
  77. * 获取层级名称(根据深度)
  78. */
  79. public static function getLevelNameByDepth(int $depth): string
  80. {
  81. if ($depth === 1) {
  82. return '直推';
  83. } elseif ($depth <= 20) {
  84. return $depth . '级间推';
  85. } else {
  86. return '超级间推';
  87. }
  88. }
  89. }