DadaExpressServices.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. <?php
  2. /**
  3. * User: admin
  4. * Date Time: 2021/3/26 16:18
  5. */
  6. namespace bizGhs\express\services;
  7. use biz\shop\classes\ShopExpressClass;
  8. use biz\sj\classes\SjExpressClass;
  9. use bizGhs\order\classes\OrderClass;
  10. use common\components\dada\dada;
  11. use common\components\util;
  12. use Yii;
  13. class DadaExpressServices
  14. {
  15. //达达订单状态常量定义
  16. //待接单=1,待取货=2,配送中=3,已完成=4,已取消=5, 指派单=8,妥投异常之物品返回中=9, 妥投异常之物品返回完成=10, 骑士到店=100,创建达达运单失败=1000
  17. const ORDER_WAIT_ACCEPT = 1; //待接单
  18. const ORDER_WAIT_PICKUP = 2; //待取货
  19. const ORDER_SENDING = 3; //配送中
  20. const ORDER_COMPLETE = 4; //已完成
  21. const ORDER_CANCEL = 5; //已取消
  22. const ORDER_WAIT_DISPATCH = 8; //指派单
  23. const ORDER_UNUSUAL_BACK = 9; // 妥投异常之物品返回中
  24. const ORDER_UNUSUAL_COMPLETE = 10; //妥投异常之物品返回完成
  25. const RIDER_TO_SHOP = 100; //骑士到店
  26. const ORDER_FAIL = 1000; //失败
  27. //根据订单号,发快递
  28. public static function addOrder($orderInfo,$expressRemark = '')
  29. {
  30. if (empty($orderInfo)) {
  31. util::fail("订单不存在");
  32. }
  33. $sjId = $orderInfo->sjId;
  34. $sourceId = SjExpressClass::getSourceId($sjId);
  35. $orderParams = self::orderParams($orderInfo->attributes,$expressRemark);
  36. $res = dada::addOrder($sourceId, $orderParams);
  37. Yii::debug($orderParams);
  38. Yii::debug($res);
  39. return $res;
  40. }
  41. //根据订单号,运费计算
  42. /*
  43. * 返回数据
  44. deliverFee: 12 //运费(单位:元)
  45. deliveryNo: "Dada5ba78cd1b7df4948b54c8021f3c84db8" //平台订单号
  46. distance: 1134639.1063765883 //配送距离(单位:米)
  47. fee: 12 //实际运费(单位:元),运费减去优惠券费用
  48. insuranceFee: 0 // 保价费(单位:元)
  49. tips: 0 // 小费(单位:元)
  50. */
  51. public static function queryDeliverFee($orderInfo)
  52. {
  53. //
  54. if (empty($orderInfo)) {
  55. util::fail("订单不存在");
  56. }
  57. $sjId = $orderInfo['sjId'];
  58. $sourceId = SjExpressClass::getSourceId($sjId);
  59. $orderParams = self::orderParams($orderInfo);
  60. $res = dada::queryDeliverFee($sourceId, $orderParams);
  61. Yii::debug($orderParams);
  62. Yii::debug($res);
  63. return $res;
  64. }
  65. //取消订单
  66. public static function cancelOrder($orderSn, $reasonId, $reason = '')
  67. {
  68. $orderInfo = OrderClass::getByOrderSn($orderSn);
  69. $sjId = $orderInfo['sjId'];
  70. $sourceId = SjExpressClass::getSourceId($sjId);
  71. $res = dada::formalCancel($sourceId, $orderSn, $reasonId, $reason);
  72. return $res;
  73. }
  74. //订单状态查询
  75. public static function statusOrder($orderSn)
  76. {
  77. $orderInfo = OrderClass::getByOrderSn($orderSn);
  78. $sjId = $orderInfo['sjId'];
  79. $sourceId = SjExpressClass::getSourceId($sjId);
  80. $res = dada::statusQuery($sourceId, $orderSn);
  81. return $res;
  82. }
  83. //订单重发
  84. public static function reAddOrder($orderInfo)
  85. {
  86. if (empty($orderInfo)) {
  87. util::fail("订单不存在");
  88. }
  89. $sjId = $orderInfo['sjId'];
  90. $sourceId = SjExpressClass::getSourceId($sjId);
  91. $orderParams = self::orderParams($orderInfo);
  92. $res = dada::reAddOrder($sourceId, $orderParams);
  93. return $res;
  94. }
  95. //组装订单参数
  96. public static function orderParams($orderInfo,$expressRemark='')
  97. {
  98. $sjId = $orderInfo['sjId'];
  99. //$online = Yii::$app->params['dadaOnline'];
  100. $shopId = $orderInfo['shopId'];
  101. $orderSn = $orderInfo['orderSn'];
  102. //获取快递方 商户id, 跟门店id
  103. $shopNo = ShopExpressClass::getShopNo($sjId, $shopId);
  104. if (getenv('YII_ENV', 'local') != 'production') {
  105. $shopNo = '11047059';
  106. }
  107. $params = [
  108. 'shop_no' => $shopNo,
  109. 'origin_id' => $orderSn,
  110. 'city_code' => '0592', //厦门 暂写死
  111. 'cargo_price' => (float)$orderInfo['actPrice'], //订单金额(单位:元) 实际支付价格?
  112. 'is_prepay' => 0, // 是否需要垫付 1:是 0:否 (垫付订单金额,非运费)
  113. 'receiver_name' => $orderInfo['customName'], //收货人姓名
  114. 'receiver_address' => $orderInfo['fullAddress'], //收货人地址
  115. 'receiver_lat' => (float)$orderInfo['lat'], // 存的是百度经纬度,需要转高德经纬度
  116. 'receiver_lng' => (float)$orderInfo['long'], // 存的是百度经纬度,需要转高德经纬度
  117. 'callback' => Yii::$app->params['ghsHost'] . '/notice/express-call-back',
  118. 'cargo_weight' => (float)$orderInfo['weight'],//订单重量(单位:Kg)
  119. 'receiver_phone' => $orderInfo['customMobile'],//否 收货人手机号(手机号和座机号必填一项)
  120. 'info' => $expressRemark,//备注
  121. 'cargo_type' => 3, //类型:鲜花
  122. 'cargo_num' => (int)$orderInfo['bigNum'],
  123. 'origin_mark_no' => '#销花宝#',
  124. ];
  125. if ($orderInfo['sendTime'] != '0000-00-00 00:00:00') {
  126. $params['delay_publish_time'] = strtotime($orderInfo['sendTime']);
  127. }
  128. return $params;
  129. }
  130. }