OrderStatusUtil.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php
  2. namespace common\components\delivery\platform\fengniao;
  3. /**
  4. * Class OrderStatusUtil
  5. * 蜂鸟配送平台状态转换工具类 (转换为主订单 status)
  6. * @package common\components\delivery\platform\fengniao
  7. */
  8. class OrderStatusUtil
  9. {
  10. /**
  11. * 蜂鸟平台订单状态到订单 status 的转换映射
  12. *
  13. * 蜂鸟平台状态码说明:
  14. * 0 - 订单生成
  15. * 1 - 运单生成成功
  16. * 20 - 骑手接单
  17. * 80 - 骑手到店
  18. * 2 - 配送中
  19. * 3 - 已完成
  20. * 4 - 已取消
  21. * 5 - 配送异常
  22. *
  23. * 订单 status 状态码说明
  24. * 1 - 待付款
  25. * 2 - 待配送
  26. * 3 - 配送中
  27. * 4 - 已完成
  28. * 5 - 已取消 (订单最终状态,配送取消不应直接使用此状态)
  29. */
  30. const STATUS_MAPPING = [
  31. 0 => 3, // 订单生成 -> 配送中
  32. 1 => 3, // 运单生成成功 -> 配送中
  33. 20 => 3, // 骑手接单 -> 配送中
  34. 80 => 3, // 骑手到店 -> 配送中
  35. 2 => 3, // 配送中 -> 配送中
  36. 3 => 4, // 已完成 -> 已完成
  37. 4 => 2, // 已取消 -> 待配送 (配送取消,可重新派单)
  38. 5 => 2, // 配送异常 -> 待配送 (可重新派单)
  39. ];
  40. /**
  41. * 将蜂鸟平台的订单状态转换为系统内的 status
  42. *
  43. * @param int $fengniaoStatus 蜂鸟平台的订单状态码
  44. * @return int 转换后的系统 status 状态码
  45. * @throws \Exception 当状态码无法转换时抛出异常
  46. */
  47. public static function convertStatus($fengniaoStatus)
  48. {
  49. $fengniaoStatus = (int)$fengniaoStatus;
  50. if (!isset(self::STATUS_MAPPING[$fengniaoStatus])) {
  51. throw new \Exception("无效的蜂鸟订单状态码:{$fengniaoStatus}");
  52. }
  53. return self::STATUS_MAPPING[$fengniaoStatus];
  54. }
  55. /**
  56. * 获取蜂鸟平台的状态描述
  57. *
  58. * @param int $fengniaoStatus 蜂鸟平台的订单状态码
  59. * @return string 状态描述
  60. */
  61. public static function getStatusDesc($fengniaoStatus)
  62. {
  63. $statusDescMap = [
  64. 0 => '订单生成',
  65. 1 => '运单生成成功',
  66. 20 => '骑手接单',
  67. 80 => '骑手到店',
  68. 2 => '配送中',
  69. 3 => '已完成',
  70. 4 => '已取消',
  71. 5 => '配送异常',
  72. ];
  73. return $statusDescMap[$fengniaoStatus] ?? '未知状态';
  74. }
  75. /**
  76. * 获取系统 status 的状态描述
  77. *
  78. * @param int $status 系统的 status 状态码
  79. * @return string 状态描述
  80. */
  81. public static function getSystemStatusDesc($status)
  82. {
  83. $statusDescMap = [
  84. 1 => '待付款',
  85. 2 => '待配送',
  86. 3 => '配送中',
  87. 4 => '已完成',
  88. 5 => '已取消',
  89. ];
  90. return $statusDescMap[$status] ?? '未知状态';
  91. }
  92. }