OrderStatus.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <?php
  2. namespace App\Enums;
  3. /**
  4. * 订单状态枚举类
  5. */
  6. enum OrderStatus: int
  7. {
  8. /**
  9. * 订单状态:下单
  10. */
  11. case CREATED = 1;
  12. /**
  13. * 订单状态:指定
  14. */
  15. case ASSIGNED = 2;
  16. /**
  17. * 订单状态:支付
  18. */
  19. case PAID = 3;
  20. /**
  21. * 订单状态:取消
  22. */
  23. case CANCELLED = 4;
  24. /**
  25. * 订单状态:退款中
  26. */
  27. case REFUNDING = 5;
  28. /**
  29. * 订单状态:退款成功
  30. */
  31. case REFUNDED = 6;
  32. /**
  33. * 订单状态:退款失败
  34. */
  35. case REFUND_FAILED = 7;
  36. /**
  37. * 订单状态:接单
  38. */
  39. case ACCEPTED = 8;
  40. /**
  41. * 订单状态:出发
  42. */
  43. case DEPARTED = 9;
  44. /**
  45. * 订单状态:到达
  46. */
  47. case ARRIVED = 10;
  48. /**
  49. * 订单状态:服务中
  50. */
  51. case SERVING = 11;
  52. /**
  53. * 订单状态:服务结束
  54. */
  55. case FINISHED = 12;
  56. /**
  57. * 订单状态:撤离
  58. */
  59. case LEFT = 13;
  60. /**
  61. * 订单状态:已评价
  62. */
  63. case COMMENTED = 14;
  64. /**
  65. * 获取状态的显示文本
  66. *
  67. * @return string 状态的中文描述
  68. */
  69. public function label(): string
  70. {
  71. return match ($this) {
  72. self::CREATED => '下单',
  73. self::ASSIGNED => '指定',
  74. self::PAID => '支付',
  75. self::CANCELLED => '取消',
  76. self::REFUNDING => '退款中',
  77. self::REFUNDED => '退款成功',
  78. self::REFUND_FAILED => '退款失败',
  79. self::ACCEPTED => '接单',
  80. self::DEPARTED => '出发',
  81. self::ARRIVED => '到达',
  82. self::SERVING => '服务',
  83. self::FINISHED => '结束',
  84. self::LEFT => '撤离',
  85. self::COMMENTED => '评价',
  86. };
  87. }
  88. /**
  89. * 获取状态的整数值
  90. *
  91. * @return int 状态值
  92. */
  93. public function value(): int
  94. {
  95. return $this->value;
  96. }
  97. /**
  98. * 检查当前状态是否与指定状态相同
  99. *
  100. * @param self $status 要比较的状态
  101. * @return bool 如果状态相同返回 true,否则返回 false
  102. */
  103. public function is(self $status): bool
  104. {
  105. return $this === $status;
  106. }
  107. /**
  108. * 根据整数值创建对应的状态枚举实例
  109. *
  110. * @param int $value 状态值
  111. * @return self|null 返回对应的状态枚举实例,如果值无效则返回 null
  112. */
  113. public static function fromValue(int $value): ?self
  114. {
  115. return match ($value) {
  116. self::CREATED->value => self::CREATED,
  117. self::ASSIGNED->value => self::ASSIGNED,
  118. self::PAID->value => self::PAID,
  119. self::CANCELLED->value => self::CANCELLED,
  120. self::REFUNDING->value => self::REFUNDING,
  121. self::REFUNDED->value => self::REFUNDED,
  122. self::REFUND_FAILED->value => self::REFUND_FAILED,
  123. self::ACCEPTED->value => self::ACCEPTED,
  124. self::DEPARTED->value => self::DEPARTED,
  125. self::ARRIVED->value => self::ARRIVED,
  126. self::SERVING->value => self::SERVING,
  127. self::FINISHED->value => self::FINISHED,
  128. self::LEFT->value => self::LEFT,
  129. self::COMMENTED->value => self::COMMENTED,
  130. default => null
  131. };
  132. }
  133. /**
  134. * 获取所有状态的值数组
  135. *
  136. * @return array 包含所有状态值的数组
  137. */
  138. public static function values(): array
  139. {
  140. return array_column(self::cases(), 'value');
  141. }
  142. /**
  143. * 获取所有状态的键值对数组
  144. *
  145. * @return array 状态值作为键,显示文本作为值的关联数组
  146. */
  147. public static function all(): array
  148. {
  149. return [
  150. self::CREATED->value => self::CREATED->label(),
  151. self::ASSIGNED->value => self::ASSIGNED->label(),
  152. self::PAID->value => self::PAID->label(),
  153. self::CANCELLED->value => self::CANCELLED->label(),
  154. self::REFUNDING->value => self::REFUNDING->label(),
  155. self::REFUNDED->value => self::REFUNDED->label(),
  156. self::REFUND_FAILED->value => self::REFUND_FAILED->label(),
  157. self::ACCEPTED->value => self::ACCEPTED->label(),
  158. self::DEPARTED->value => self::DEPARTED->label(),
  159. self::ARRIVED->value => self::ARRIVED->label(),
  160. self::SERVING->value => self::SERVING->label(),
  161. self::FINISHED->value => self::FINISHED->label(),
  162. self::LEFT->value => self::LEFT->label(),
  163. self::COMMENTED->value => self::COMMENTED->label(),
  164. ];
  165. }
  166. }