| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- <?php
- /**
- * User: admin
- * Date Time: 2021/3/26 16:18
- */
- namespace bizGhs\express\services;
- use biz\shop\classes\ShopExpressClass;
- use biz\sj\classes\SjExpressClass;
- use bizGhs\order\classes\OrderClass;
- use common\components\dada\dada;
- use common\components\util;
- use Yii;
- class DadaExpressServices
- {
- //达达订单状态常量定义
- //待接单=1,待取货=2,配送中=3,已完成=4,已取消=5, 指派单=8,妥投异常之物品返回中=9, 妥投异常之物品返回完成=10, 骑士到店=100,创建达达运单失败=1000
- const ORDER_WAIT_ACCEPT = 1; //待接单
- const ORDER_WAIT_PICKUP = 2; //待取货
- const ORDER_SENDING = 3; //配送中
- const ORDER_COMPLETE = 4; //已完成
- const ORDER_CANCEL = 5; //已取消
- const ORDER_WAIT_DISPATCH = 8; //指派单
- const ORDER_UNUSUAL_BACK = 9; // 妥投异常之物品返回中
- const ORDER_UNUSUAL_COMPLETE = 10; //妥投异常之物品返回完成
- const RIDER_TO_SHOP = 100; //骑士到店
- const ORDER_FAIL = 1000; //失败
- //根据订单号,发快递
- public static function addOrder($orderInfo,$expressRemark = '')
- {
- if (empty($orderInfo)) {
- util::fail("订单不存在");
- }
- $sjId = $orderInfo->sjId;
- $sourceId = SjExpressClass::getSourceId($sjId);
- $orderParams = self::orderParams($orderInfo->attributes,$expressRemark);
- $res = dada::addOrder($sourceId, $orderParams);
- Yii::debug($orderParams);
- Yii::debug($res);
- return $res;
- }
- //根据订单号,运费计算
- /*
- * 返回数据
- deliverFee: 12 //运费(单位:元)
- deliveryNo: "Dada5ba78cd1b7df4948b54c8021f3c84db8" //平台订单号
- distance: 1134639.1063765883 //配送距离(单位:米)
- fee: 12 //实际运费(单位:元),运费减去优惠券费用
- insuranceFee: 0 // 保价费(单位:元)
- tips: 0 // 小费(单位:元)
- */
- public static function queryDeliverFee($orderInfo)
- {
- //
- if (empty($orderInfo)) {
- util::fail("订单不存在");
- }
- $sjId = $orderInfo['sjId'];
- $sourceId = SjExpressClass::getSourceId($sjId);
- $orderParams = self::orderParams($orderInfo);
- $res = dada::queryDeliverFee($sourceId, $orderParams);
- Yii::debug($orderParams);
- Yii::debug($res);
- return $res;
- }
- //取消订单
- public static function cancelOrder($orderSn, $reasonId, $reason = '')
- {
- $orderInfo = OrderClass::getByOrderSn($orderSn);
- $sjId = $orderInfo['sjId'];
- $sourceId = SjExpressClass::getSourceId($sjId);
- $res = dada::formalCancel($sourceId, $orderSn, $reasonId, $reason);
- return $res;
- }
- //订单状态查询
- public static function statusOrder($orderSn)
- {
- $orderInfo = OrderClass::getByOrderSn($orderSn);
- $sjId = $orderInfo['sjId'];
- $sourceId = SjExpressClass::getSourceId($sjId);
- $res = dada::statusQuery($sourceId, $orderSn);
- return $res;
- }
- //订单重发
- public static function reAddOrder($orderInfo)
- {
- if (empty($orderInfo)) {
- util::fail("订单不存在");
- }
- $sjId = $orderInfo['sjId'];
- $sourceId = SjExpressClass::getSourceId($sjId);
- $orderParams = self::orderParams($orderInfo);
- $res = dada::reAddOrder($sourceId, $orderParams);
- return $res;
- }
- //组装订单参数
- public static function orderParams($orderInfo,$expressRemark='')
- {
- $sjId = $orderInfo['sjId'];
- //$online = Yii::$app->params['dadaOnline'];
- $shopId = $orderInfo['shopId'];
- $orderSn = $orderInfo['orderSn'];
- //获取快递方 商户id, 跟门店id
- $shopNo = ShopExpressClass::getShopNo($sjId, $shopId);
- if (getenv('YII_ENV', 'local') != 'production') {
- $shopNo = '11047059';
- }
- $params = [
- 'shop_no' => $shopNo,
- 'origin_id' => $orderSn,
- 'city_code' => '0592', //厦门 暂写死
- 'cargo_price' => (float)$orderInfo['actPrice'], //订单金额(单位:元) 实际支付价格?
- 'is_prepay' => 0, // 是否需要垫付 1:是 0:否 (垫付订单金额,非运费)
- 'receiver_name' => $orderInfo['customName'], //收货人姓名
- 'receiver_address' => $orderInfo['fullAddress'], //收货人地址
- 'receiver_lat' => (float)$orderInfo['lat'], // 存的是百度经纬度,需要转高德经纬度
- 'receiver_lng' => (float)$orderInfo['long'], // 存的是百度经纬度,需要转高德经纬度
- 'callback' => Yii::$app->params['ghsHost'] . '/notice/express-call-back',
- 'cargo_weight' => (float)$orderInfo['weight'],//订单重量(单位:Kg)
- 'receiver_phone' => $orderInfo['customMobile'],//否 收货人手机号(手机号和座机号必填一项)
- 'info' => $expressRemark,//备注
- 'cargo_type' => 3, //类型:鲜花
- 'cargo_num' => (int)$orderInfo['bigNum'],
- 'origin_mark_no' => '#销花宝#',
- ];
- if ($orderInfo['sendTime'] != '0000-00-00 00:00:00') {
- $params['delay_publish_time'] = strtotime($orderInfo['sendTime']);
- }
- return $params;
- }
- }
|