OrderStatus.php 4.9 KB

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