Переглянути джерело

零售端跑腿消费者实现

shizhongqi 7 місяців тому
батько
коміт
1dd176ad3c

+ 2 - 3
app-ghs/controllers/OrderController.php

@@ -37,7 +37,6 @@ use common\components\util;
 use biz\shop\classes\ShopAdminClass;
 use biz\shop\classes\ShopClass;
 use common\components\lakala\Lakala;
-use common\components\push;
 use ghs\models\order\CreateOrderForm;
 
 class OrderController extends BaseController
@@ -1383,8 +1382,8 @@ class OrderController extends BaseController
                             'pickupTime' => $pickupTime,
                             'allParmas' => $allParams,
                             // ----------
-                            'weight' => 5, // TODO
-                            'remark' => '', // TODO
+                            'weight' => $post['weight'] ?? 1,
+                            'remark' => $post['deliveryRemark'] ?? '',
                             'price' => $order->actPrice,
                         ];
                         GhsDeliveryOrderClass::askCreateOrder($data);

+ 4 - 2
app-ghs/models/order/CreateOrderForm.php

@@ -32,6 +32,8 @@ class CreateOrderForm extends BaseForm
     public $pickupTime;
     public $isCashier;
     public $payWay;
+    public $weight;
+    public $deliveryRemark;
     
     // Additional fields that might be passed or processed
     public $bookSn;
@@ -42,8 +44,8 @@ class CreateOrderForm extends BaseForm
             ['customId', 'required', 'message' => '请选择客户'],
             ['product', 'required', 'message' => '请选择花材'],
             [['customId', 'expressId', 'book', 'sendType', 'transType', 'hasPay', 'callErrand', 'isCashier', 'getStaffId', 'shopAdminId', 'bookSn'], 'integer'],
-            [['modifyPrice', 'dealPrice', 'sendCost', 'packCost', 'deliveryPrice', 'deliveryDistance'], 'number'],
-            [['getStaffName', 'shopAdminName', 'deliveryPlatform', 'deliveryBracketContent', 'pickupTime', 'historyDate'], 'string'],
+            [['modifyPrice', 'dealPrice', 'sendCost', 'packCost', 'deliveryPrice', 'deliveryDistance', 'weight'], 'number'],
+            [['getStaffName', 'shopAdminName', 'deliveryPlatform', 'deliveryBracketContent', 'pickupTime', 'historyDate', 'deliveryRemark'], 'string'],
             [['xj', 'product', 'payWay', 'deliveryAllParams'], 'safe'],
             
             ['modifyPrice', 'match', 'pattern' => '/^\d+(\.\d{1,2})?$/', 'message' => '金额不能超2位小数'],

+ 4 - 0
app-hd/controllers/OrderController.php

@@ -832,6 +832,10 @@ class OrderController extends BaseController
                         'deliveryBracketContent' => $deliveryBracketContent,
                         'pickupTime' => $pickupTime,
                         'allParams' => $allParams,
+                        //-----------------------
+                        'weight' => $post['weight'] ?? 1, // TODO
+                        'remark' => $post['deliveryRemark'] ?? '',
+                        'price' => $order->actPrice,
                     ];
                     HdDeliveryOrderClass::askCreateOrder($data);
                 }

+ 4 - 2
app-hd/models/order/CreateOrderForm.php

@@ -40,6 +40,8 @@ class CreateOrderForm extends BaseForm
     public $deliveryBracketContent;
     public $deliveryAllParams;
     public $pickupTime;
+    public $weight;
+    public $deliveryRemark;
     
     // Common order fields
     public $remark;
@@ -63,8 +65,8 @@ class CreateOrderForm extends BaseForm
             [['product'], 'validateProduct'],
             
             [['flowerNum', 'version', 'shopAdminId', 'getStaffId', 'groupId', 'fromType', 'customId', 'hasPay', 'sendType', 'forward', 'zjGathering', 'reduceStock', 'needWork', 'isCashier', 'callErrand', 'payWay', 'anonymity'], 'integer'],
-            [['modifyPrice', 'lsGoodsPrice', 'dealPrice', 'deliveryPrice', 'deliveryDistance'], 'number'],
-            [['shopAdminName', 'getStaffName', 'bookName', 'receiveMobile', 'bookMobile', 'historyDate', 'product', 'deliveryPlatform', 'deliveryBracketContent', 'pickupTime', 'remark', 'reachDate', 'reachPeriod', 'cardInfo'], 'string'],
+            [['modifyPrice', 'lsGoodsPrice', 'dealPrice', 'deliveryPrice', 'deliveryDistance', 'weight'], 'number'],
+            [['shopAdminName', 'getStaffName', 'bookName', 'receiveMobile', 'bookMobile', 'historyDate', 'product', 'deliveryPlatform', 'deliveryBracketContent', 'pickupTime', 'remark', 'deliveryRemark', 'reachDate', 'reachPeriod', 'cardInfo'], 'string'],
             [['unitGoodsPrice', 'deliveryAllParams'], 'safe'],
         ];
     }

+ 101 - 7
biz-hd/express/classes/HdDeliveryOrderClass.php

@@ -2,7 +2,10 @@
 namespace bizHd\express\classes;
 
 use bizHd\base\classes\BaseClass;
+use bizHd\order\classes\OrderClass;
+use common\components\delivery\services\DispatchService;
 use common\components\noticeUtil;
+use common\components\util;
 use mikemadisonweb\rabbitmq\components\ConsumerInterface;
 use Yii;
 
@@ -41,13 +44,104 @@ class HdDeliveryOrderClass extends BaseClass
     //消费者消费下单指令逻辑
     public static function beginCreateOrder($data)
     {
-        //花店,进行下单流程处理
-        $dataStr = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
-        noticeUtil::push('已消费hd -- ' . $dataStr);
-        $orderId = $data['orderId']; // xhGhsOrder.id
-        //$params = $data['allParams'];
-        //Yii::info('params == ' . json_encode($params, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
-        return ConsumerInterface::MSG_REJECT;
+        try{
+            //花店,进行下单流程处理
+            $dataStr = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
+            //noticeUtil::push('已消费hd -- ' . $dataStr);
+
+            $orderId = $data['orderId']; // xhOrder.id
+            $params = $data['allParams'];
+            $platform = $params['en_name'];// 平台英文名,$post['platform'] 是中文
+            $errMsg = '';
+            if (empty($platform)) {
+                Yii::error('platform为空');
+                $errMsg = 'platform参数为空';
+            }
+            $pickupTime = $data['pickupTime'];
+
+            $shopId = $data['shopId'];
+            $mainId = $data['mainId'];
+            $params['mainId'] = $mainId;
+            $params['ip'] = $data['ip'];
+            $params['weight'] = $data['weight'];
+            $params['remark'] = $data['remark'] ?? '';
+            $params['total_price_fen'] = $data['price'];
+            $params['pickupTime'] = $pickupTime['value'];
+
+            $Order = OrderClass::getById($orderId, true);
+            if (empty($Order)) {
+                $errMsg = "没有找到订单 hd-orderId={$orderId}";
+            }
+            if ($Order->mainId != $mainId) {
+                $errMsg = "hd-orderId={$orderId} 不是 mainId={$mainId} 的订单";
+            }
+            if (!in_array($Order['sendStatus'], [-4, -2, -1])) {
+                $errMsg = "订单 hd-orderId={$orderId} 已经发过跑腿";
+            }
+
+            if($errMsg != ''){
+                Yii::error($errMsg);
+                noticeUtil::push($errMsg);
+                return ConsumerInterface::MSG_REJECT;
+            }
+
+            $ds = new DispatchService($mainId, $platform);
+            $ret = $ds->createOrder($Order, 'xhOrder', $shopId, $params);
+
+            if (isset($ret['code']) && $ret['code'] == 0) {
+                $hdo = HdDeliveryOrderClass::getByCondition(['mainId' => $mainId, 'orderId' => $ret['data']['orderId']]);
+                if (empty($hdo)) {
+                    $data = [
+                        'mainId' => $mainId,
+                        'shopId' => $shopId,
+                        'deliveryId' => $ret['platform'],
+                        'hdOrderId' => $orderId,
+                        'orderId' => $ret['data']['orderId'],
+                        'distance' => $ret['data']['distance'],
+                        'fee' => $ret['data']['fee'],
+                        'orderStatus' => 0
+                    ];
+
+                    // createdAt 中保存了滴滴跑腿订单的后半截数据
+                    if($platform == 'didi'){
+                        $data['createdAt'] = date('Y-m-d H:i:s', $ret['data']['timeStamp']);
+                    }
+
+                    HdDeliveryOrderClass::add($data);
+                } else {
+                    Yii::info('重复创建订单');
+                    noticeUtil::push('重复创建订单:' . json_encode($hdo, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
+                }
+                //更新订单
+                $Order->sendDistance = $ret['data']['distance'];
+                $Order->sendStatus = 0;
+                $Order->deliveryId = $platform;
+                $Order->sendType = 2;// 2指跑腿
+                $Order->status = 3;// 3配送中
+                $save = $Order->save();
+                if ($save) {
+                    noticeUtil::push("hd-orderId={$orderId}, 创建跑腿成功--" . json_encode($Order->toArray(), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
+                } else {
+                    noticeUtil::push("hd-orderId={$orderId}, 创建跑腿失败--" . json_encode($Order->toArray(), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
+                }
+
+                return ConsumerInterface::MSG_ACK;
+            } else {
+                if (isset($ret['msg'])) {
+                    Yii::error("hd-orderId={$orderId}, 创建跑腿失败:"  . $ret['msg']);
+                    noticeUtil::push("hd-orderId={$orderId}, 创建跑腿失败:"  . $ret['msg']);
+                    return ConsumerInterface::MSG_REJECT;
+                }
+
+                Yii::error("ghs-orderId={$orderId}, 创建跑腿失败");
+                noticeUtil::push("ghs-orderId={$orderId}, 创建跑腿失败");
+                return ConsumerInterface::MSG_REJECT;
+            }
+        }catch(\Exception $e){
+            Yii::error("hd-orderId={$orderId} 创建跑腿失败:" . $e->getMessage());
+            noticeUtil::push("hd-orderId={$orderId} 创建跑腿失败:" . $e->getMessage());
+            return ConsumerInterface::MSG_REJECT;
+        }
     }
 }