已支付 -> 已分配 -> 已接单 -> 已出发 -> 已到达 -> 开始服务 -> 服务中 -> 服务结束 -> 撤离中 -> 已撤离 -> 已完成 * 任意状态都可以变为:已取消 */ enum OrderStatus: int { /** * 订单状态:已创建 * 用户创建订单但尚未支付的状态 */ case CREATED = 1; // 订单初始状态 /** * 订单状态:已支付 * 用户完成支付,等待技师接单 */ case PAID = 2; // 可以进入抢单流程 /** * 订单状态:已分配 * 技师接受订单,准备提供服务 */ case ASSIGNED = 3; // 技师已分配 /** * 订单状态:已接单 * 技师接受订单,准备提供服务 */ case ACCEPTED = 4; // 技师已确认接单 /** * 订单状态:已出发 * 技师已经出发前往服务地点 */ case DEPARTED = 5; // 技师开始前往目的地 /** * 订单状态:已到达 * 技师已到达服务地点 */ case ARRIVED = 6; // 技师已到达用户位置 /** * 订单状态:开始服务 * 技师开始提供服务 */ case SERVICE_START = 7; // 正式开始服务 /** * 订单状态:服务中 * 技师正在提供服务 */ case SERVICING = 8; // 服务进行中 /** * 订单状态:服务结束 * 技师已完成服务内容 */ case SERVICE_END = 9; // 服务内容已完成 /** * 订单状态:撤离中 * 技师正在离开服务地点 */ case LEAVING = 10; // 技师正在返程 /** * 订单状态:已撤离 * 技师已完成服务并离开服务地点 */ case LEFT = 11; // 技师已完成服务并离开服务地点 /** * 订单状态:已完成 * 订单全部流程结束 */ case COMPLETED = 12; // 订单完成状态 /** * 订单状态:已取消 * 订单被取消(可能是用户取消或系统取消) */ case CANCELLED = 13; // 订单终止状态 /** * 订单状态:已退款 * 订单被取消并已退款 */ case REFUNDED = 14; // 订单已退款 /** * 订单状态:已拒单 * 技师拒绝接单 */ case REJECTED = 15; // 技师拒单 /** * 获取状态的显示文本 * 将状态值转换为对应的中文描述 * * @return string 状态的中文描述 */ public function label(): string { return match ($this) { self::CREATED => '已创建', // 订单创建完成 self::PAID => '已支付', // 支付完成 self::ASSIGNED => '已分配', // 技师分配 self::ACCEPTED => '已接单', // 技师接单 self::DEPARTED => '已出发', // 技师出发 self::ARRIVED => '已到达', // 技师到达 self::SERVICE_START => '开始服务', // 开始提供服务 self::SERVICING => '服务中', // 服务进行中 self::SERVICE_END => '服务结束', // 服务完成 self::LEAVING => '撤离中', // 技师离开 self::LEFT => '已撤离', // 技师已完成服务并离开服务地点 self::COMPLETED => '已完成', // 订单完结 self::CANCELLED => '已取消', // 订单取消 self::REFUNDED => '已退款', // 订单已退款 self::REJECTED => '已拒单', // 技师拒单 }; } /** * 获取状态的整数值 * * @return int 状态值 */ public function value(): int { return $this->value; } /** * 检查当前状态是否与指定状态相同 * * @param self $status 要比较的状态 * @return bool 如果状态相同返回 true,否则返回 false */ public function is(self $status): bool { return $this === $status; } /** * 根据整数值创建对应的状态枚举实例 * * @param int $value 状态值 * @return self|null 返回对应的状态枚举实例,如果值无效则返回 null */ public static function fromValue(int $value): ?self { return match ($value) { self::CREATED->value => self::CREATED, self::PAID->value => self::PAID, self::ASSIGNED->value => self::ASSIGNED, self::ACCEPTED->value => self::ACCEPTED, self::DEPARTED->value => self::DEPARTED, self::ARRIVED->value => self::ARRIVED, self::SERVICE_START->value => self::SERVICE_START, self::SERVICING->value => self::SERVICING, self::SERVICE_END->value => self::SERVICE_END, self::LEAVING->value => self::LEAVING, self::LEFT->value => self::LEFT, self::COMPLETED->value => self::COMPLETED, self::CANCELLED->value => self::CANCELLED, self::REFUNDED->value => self::REFUNDED, self::REJECTED->value => self::REJECTED, default => null }; } /** * 获取所有状态的值数组 * * @return array 包含所有状态值的数组 */ public static function values(): array { return array_column(self::cases(), 'value'); } /** * 获取所有状态的键值对数组 * * @return array 状态值作为键,显示文本作为值的关联数组 */ public static function all(): array { return [ self::CREATED->value => self::CREATED->label(), self::PAID->value => self::PAID->label(), self::ASSIGNED->value => self::ASSIGNED->label(), self::ACCEPTED->value => self::ACCEPTED->label(), self::DEPARTED->value => self::DEPARTED->label(), self::ARRIVED->value => self::ARRIVED->label(), self::SERVICE_START->value => self::SERVICE_START->label(), self::SERVICING->value => self::SERVICING->label(), self::SERVICE_END->value => self::SERVICE_END->label(), self::LEAVING->value => self::LEAVING->label(), self::LEFT->value => self::LEFT->label(), self::COMPLETED->value => self::COMPLETED->label(), self::CANCELLED->value => self::CANCELLED->label(), self::REFUNDED->value => self::REFUNDED->label(), self::REJECTED->value => self::REJECTED->label(), ]; } }