OrderStatus.php 5.0 KB

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