OrderStatus.php 4.7 KB

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