CouponRule.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. <?php
  2. namespace App\Enums;
  3. /**
  4. * 优惠券使用规则枚举类
  5. */
  6. enum CouponRule: int
  7. {
  8. /**
  9. * 使用规则:无限制
  10. */
  11. case UNLIMITED = 1;
  12. /**
  13. * 使用规则:首单专享
  14. */
  15. case FIRST_ORDER = 2;
  16. /**
  17. * 使用规则:新用户专享
  18. */
  19. case NEW_USER = 3;
  20. /**
  21. * 使用规则:指定分类
  22. */
  23. case SPECIFIED_CATEGORY = 4;
  24. /**
  25. * 使用规则:指定项目
  26. */
  27. case SPECIFIED_ITEM = 5;
  28. /**
  29. * 使用规则:满额可用
  30. */
  31. case SPECIFIED_AMOUNT = 6;
  32. /**
  33. * 获取规则的显示文本
  34. *
  35. * @return string 规则的中文描述
  36. */
  37. public function label(): string
  38. {
  39. return match ($this) {
  40. self::UNLIMITED => '无限制',
  41. self::FIRST_ORDER => '首单专享',
  42. self::NEW_USER => '新用户专享',
  43. self::SPECIFIED_CATEGORY => '指定分类',
  44. self::SPECIFIED_ITEM => '指定项目',
  45. self::SPECIFIED_AMOUNT => '满额可用',
  46. };
  47. }
  48. /**
  49. * 获取规则的整数值
  50. *
  51. * @return int 规则值
  52. */
  53. public function value(): int
  54. {
  55. return $this->value;
  56. }
  57. /**
  58. * 检查当前规则是否与指定规则相同
  59. *
  60. * @param self $rule 要比较的规则
  61. * @return bool 如果规则相同返回 true,否则返回 false
  62. */
  63. public function is(self $rule): bool
  64. {
  65. return $this === $rule;
  66. }
  67. /**
  68. * 根据整数值创建对应的规则枚举实例
  69. *
  70. * @param int $value 规则值
  71. * @return self|null 返回对应的规则枚举实例,如果值无效则返回 null
  72. */
  73. public static function fromValue(int $value): ?self
  74. {
  75. return match ($value) {
  76. self::UNLIMITED->value => self::UNLIMITED,
  77. self::FIRST_ORDER->value => self::FIRST_ORDER,
  78. self::NEW_USER->value => self::NEW_USER,
  79. self::SPECIFIED_CATEGORY->value => self::SPECIFIED_CATEGORY,
  80. self::SPECIFIED_ITEM->value => self::SPECIFIED_ITEM,
  81. self::SPECIFIED_AMOUNT->value => self::SPECIFIED_AMOUNT,
  82. default => null
  83. };
  84. }
  85. /**
  86. * 获取所有规则的值数组
  87. *
  88. * @return array 包含所有规则值的数组
  89. */
  90. public static function values(): array
  91. {
  92. return array_column(self::cases(), 'value');
  93. }
  94. /**
  95. * 获取所有规则的键值对数组
  96. *
  97. * @return array 规则值作为键,显示文本作为值的关联数组
  98. */
  99. public static function all(): array
  100. {
  101. return [
  102. self::UNLIMITED->value => self::UNLIMITED->label(),
  103. self::FIRST_ORDER->value => self::FIRST_ORDER->label(),
  104. self::NEW_USER->value => self::NEW_USER->label(),
  105. self::SPECIFIED_CATEGORY->value => self::SPECIFIED_CATEGORY->label(),
  106. self::SPECIFIED_ITEM->value => self::SPECIFIED_ITEM->label(),
  107. self::SPECIFIED_AMOUNT->value => self::SPECIFIED_AMOUNT->label(),
  108. ];
  109. }
  110. }