| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- <?php
- namespace common\components\delivery\platform\fengniao;
- /**
- * Class OrderStatusUtil
- * 蜂鸟配送平台状态转换工具类 (转换为主订单 status)
- * @package common\components\delivery\platform\fengniao
- */
- class OrderStatusUtil
- {
- /**
- * 蜂鸟平台订单状态到订单 status 的转换映射
- *
- * 蜂鸟平台状态码说明:
- * 0 - 订单生成
- * 1 - 运单生成成功
- * 20 - 骑手接单
- * 80 - 骑手到店
- * 2 - 配送中
- * 3 - 已完成
- * 4 - 已取消
- * 5 - 配送异常
- *
- * 订单 status 状态码说明
- * 1 - 待付款
- * 2 - 待配送
- * 3 - 配送中
- * 4 - 已完成
- * 5 - 已取消 (订单最终状态,配送取消不应直接使用此状态)
- */
- const STATUS_MAPPING = [
- 0 => 3, // 订单生成 -> 配送中
- 1 => 3, // 运单生成成功 -> 配送中
- 20 => 3, // 骑手接单 -> 配送中
- 80 => 3, // 骑手到店 -> 配送中
- 2 => 3, // 配送中 -> 配送中
- 3 => 4, // 已完成 -> 已完成
- 4 => 2, // 已取消 -> 待配送 (配送取消,可重新派单)
- 5 => 2, // 配送异常 -> 待配送 (可重新派单)
- ];
- /**
- * 将蜂鸟平台的订单状态转换为系统内的 status
- *
- * @param int $fengniaoStatus 蜂鸟平台的订单状态码
- * @return int 转换后的系统 status 状态码
- * @throws \Exception 当状态码无法转换时抛出异常
- */
- public static function convertStatus($fengniaoStatus)
- {
- $fengniaoStatus = (int)$fengniaoStatus;
- if (!isset(self::STATUS_MAPPING[$fengniaoStatus])) {
- throw new \Exception("无效的蜂鸟订单状态码:{$fengniaoStatus}");
- }
- return self::STATUS_MAPPING[$fengniaoStatus];
- }
- /**
- * 获取蜂鸟平台的状态描述
- *
- * @param int $fengniaoStatus 蜂鸟平台的订单状态码
- * @return string 状态描述
- */
- public static function getStatusDesc($fengniaoStatus)
- {
- $statusDescMap = [
- 0 => '订单生成',
- 1 => '运单生成成功',
- 20 => '骑手接单',
- 80 => '骑手到店',
- 2 => '配送中',
- 3 => '已完成',
- 4 => '已取消',
- 5 => '配送异常',
- ];
- return $statusDescMap[$fengniaoStatus] ?? '未知状态';
- }
- /**
- * 获取系统 status 的状态描述
- *
- * @param int $status 系统的 status 状态码
- * @return string 状态描述
- */
- public static function getSystemStatusDesc($status)
- {
- $statusDescMap = [
- 1 => '待付款',
- 2 => '待配送',
- 3 => '配送中',
- 4 => '已完成',
- 5 => '已取消',
- ];
- return $statusDescMap[$status] ?? '未知状态';
- }
- }
|