|
@@ -0,0 +1,123 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace App\Enums;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 优惠券使用规则枚举类
|
|
|
+ */
|
|
|
+enum CouponRule: int
|
|
|
+{
|
|
|
+ /**
|
|
|
+ * 使用规则:无限制
|
|
|
+ */
|
|
|
+ case UNLIMITED = 1;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 使用规则:首单专享
|
|
|
+ */
|
|
|
+ case FIRST_ORDER = 2;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 使用规则:新用户专享
|
|
|
+ */
|
|
|
+ case NEW_USER = 3;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 使用规则:指定分类
|
|
|
+ */
|
|
|
+ case SPECIFIED_CATEGORY = 4;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 使用规则:指定项目
|
|
|
+ */
|
|
|
+ case SPECIFIED_ITEM = 5;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 使用规则:满额可用
|
|
|
+ */
|
|
|
+ case SPECIFIED_AMOUNT = 6;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取规则的显示文本
|
|
|
+ *
|
|
|
+ * @return string 规则的中文描述
|
|
|
+ */
|
|
|
+ public function label(): string
|
|
|
+ {
|
|
|
+ return match($this) {
|
|
|
+ self::UNLIMITED => '无限制',
|
|
|
+ self::FIRST_ORDER => '首单专享',
|
|
|
+ self::NEW_USER => '新用户专享',
|
|
|
+ self::SPECIFIED_CATEGORY => '指定分类',
|
|
|
+ self::SPECIFIED_ITEM => '指定项目',
|
|
|
+ self::SPECIFIED_AMOUNT => '满额可用',
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取规则的整数值
|
|
|
+ *
|
|
|
+ * @return int 规则值
|
|
|
+ */
|
|
|
+ public function value(): int
|
|
|
+ {
|
|
|
+ return $this->value;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 检查当前规则是否与指定规则相同
|
|
|
+ *
|
|
|
+ * @param self $rule 要比较的规则
|
|
|
+ * @return bool 如果规则相同返回 true,否则返回 false
|
|
|
+ */
|
|
|
+ public function is(self $rule): bool
|
|
|
+ {
|
|
|
+ return $this === $rule;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据整数值创建对应的规则枚举实例
|
|
|
+ *
|
|
|
+ * @param int $value 规则值
|
|
|
+ * @return self|null 返回对应的规则枚举实例,如果值无效则返回 null
|
|
|
+ */
|
|
|
+ public static function fromValue(int $value): ?self
|
|
|
+ {
|
|
|
+ return match($value) {
|
|
|
+ self::UNLIMITED->value => self::UNLIMITED,
|
|
|
+ self::FIRST_ORDER->value => self::FIRST_ORDER,
|
|
|
+ self::NEW_USER->value => self::NEW_USER,
|
|
|
+ self::SPECIFIED_CATEGORY->value => self::SPECIFIED_CATEGORY,
|
|
|
+ self::SPECIFIED_ITEM->value => self::SPECIFIED_ITEM,
|
|
|
+ self::SPECIFIED_AMOUNT->value => self::SPECIFIED_AMOUNT,
|
|
|
+ default => null
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取所有规则的值数组
|
|
|
+ *
|
|
|
+ * @return array 包含所有规则值的数组
|
|
|
+ */
|
|
|
+ public static function values(): array
|
|
|
+ {
|
|
|
+ return array_column(self::cases(), 'value');
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取所有规则的键值对数组
|
|
|
+ *
|
|
|
+ * @return array 规则值作为键,显示文本作为值的关联数组
|
|
|
+ */
|
|
|
+ public static function all(): array
|
|
|
+ {
|
|
|
+ return [
|
|
|
+ self::UNLIMITED->value => self::UNLIMITED->label(),
|
|
|
+ self::FIRST_ORDER->value => self::FIRST_ORDER->label(),
|
|
|
+ self::NEW_USER->value => self::NEW_USER->label(),
|
|
|
+ self::SPECIFIED_CATEGORY->value => self::SPECIFIED_CATEGORY->label(),
|
|
|
+ self::SPECIFIED_ITEM->value => self::SPECIFIED_ITEM->label(),
|
|
|
+ self::SPECIFIED_AMOUNT->value => self::SPECIFIED_AMOUNT->label(),
|
|
|
+ ];
|
|
|
+ }
|
|
|
+}
|