Quellcode durchsuchen

add double check for query net function

stanley-king vor 2 Jahren
Ursprung
Commit
11bc801850
1 geänderte Dateien mit 70 neuen und 46 gelöschten Zeilen
  1. 70 46
      helper/refill/RefillBase.php

+ 70 - 46
helper/refill/RefillBase.php

@@ -214,7 +214,6 @@ class RefillBase
         catch (Exception $ex) {
             $tran->rollback();
             Log::record("Error:" . $ex->getMessage(), Log::ERR);
-
             Swoole\Coroutine::sleep(5);
             util::push_notify($chname,$input);
             return false;
@@ -726,64 +725,89 @@ class RefillBase
 
     public function query_net($order_id)
     {
-        $mod_order = Model('vr_order');
-        $order_info = $mod_order->getOrderInfo(['order_id' => $order_id]);
+        $query_handler = function ($order_id, $order_info)
+        {
+            $mod_refill = Model('refill_order');
+            $refill_info = $mod_refill->getOrderInfo(['order_id' => $order_id,'inner_status' => 0]);
+            $chname = $refill_info['channel_name'];
 
-        if(empty($order_info)) return false;
+            if($order_info['order_state'] == ORDER_STATE_PAY) {
+                $query_able = true;
+            }
+            else {
+                $query_able = false;
+            }
 
-        $mod_refill = Model('refill_order');
-        $refill_info = $mod_refill->getOrderInfo(['order_id' => $order_id,'inner_status' => 0]);
-        $chname = $refill_info['channel_name'];
-        $mchid = $refill_info['mchid'];
-        $mch_order = $refill_info['mch_order'];
+            $can_try = false;
+            if($query_able)
+            {
+                if (empty($chname)) return [false, $can_try, $chname];
 
-        if($order_info['order_state'] == ORDER_STATE_PAY) {
-            $query_able = true;
-        }
-        else {
-            $query_able = false;
-        }
+                $provider = $this->mPolicy->provider($chname);
+                if(empty($provider)) return [false, $can_try, $chname];
 
-        if($query_able)
-        {
-            if(empty($chname)) return false;
+                [$state, $order_state] = $provider->query($refill_info);
 
-            $provider = $this->mPolicy->provider($chname);
-            if(empty($provider)) return false;
+                if(!$state) {
+                    QueueClient::async_push("QueryOrderNeterr",['order_id' => $order_id],30);
+                    $neterr = true;
+                }
+                elseif($order_state == ORDER_STATE_SUCCESS || $order_state == ORDER_STATE_CANCEL)
+                {
+                    $neterr = false;
+                    $logic_vr_order = Logic("vr_order");
+                    $logic_vr_order->changeOrderStateSend($order_id, true);
 
-            [$state, $order_state] = $provider->query($refill_info);
-            if(!$state) {
-                QueueClient::async_push("QueryOrderNeterr",['order_id' => $order_id],30);
-                $neterr = true;
-            }
-            elseif($order_state == ORDER_STATE_SUCCESS || $order_state == ORDER_STATE_CANCEL)
-            {
-                $neterr = false;
-                $logic_vr_order = Logic("vr_order");
-                $logic_vr_order->changeOrderStateSend($order_id, true);
+                    $data = ['commit_time' => time()];
+                    $mod_refill->edit($order_id, $data);
+                    QueueClient::async_push("QueryRefillState", ['order_id' => $order_id], 1);
+                }
+                elseif ($order_state == ORDER_STATE_NOEXIST) {
+                    $neterr = false;
+                    $logic_vr_order = Logic("vr_order");
+                    $logic_vr_order->changeOrderStateSend($order_id, true);
+                    $can_try = true;
+                }
+                else {
+                    $neterr = true;
+                    QueueClient::async_push("QueryOrderNeterr",['order_id' => $order_id],30);
+                }
 
-                $data = ['commit_time' => time()];
-                $mod_refill->edit($order_id, $data);
-                QueueClient::async_push("QueryRefillState", ['order_id' => $order_id], 1);
+                util::monitor_netchk($chname,$neterr);
             }
-            elseif ($order_state == ORDER_STATE_NOEXIST) {
-                $neterr = false;
-                $logic_vr_order = Logic("vr_order");
-                $logic_vr_order->changeOrderStateCancel($order_info, '', "{$chname}查询订单不存在.",true,true);
 
-                $mod_refill->edit($order_id, ['notify_time' => time(), 'notify_state' => 1]);
-                util::pop_queue_order($mchid,$mch_order);
-                QueueClient::push("NotifyMerchantComplete", ['order_id' => $order_id, 'manual' => false]);
-            }
-            else {
-                $neterr = true;
+            return [true,$can_try,$chname];
+        };
+
+        $mod_order = Model('vr_order');
+        $order_info = $mod_order->getOrderInfo(['order_id' => $order_id]);
+        if (empty($order_info)) return false;
+
+        try {
+            $can_try = false;
+            $tran = new trans_wapper($mod_order, 'query_net change order state trans');
+            $order_info = $mod_order->getOrderInfo(['order_id' => $order_id], '*', true, true);
+            [$ret, $can_try, $chname] = $query_handler($order_id, $order_info);
+            $tran->commit();
+            $trans_succ = true;
+        }
+        catch (Exception $ex) {
+            Log::record("Error:" . $ex->getMessage(), Log::ERR);
+            $trans_succ = false;
+            $tran->rollback();
+            $ret = false;
+        }
+
+        if($can_try)
+        {
+            if($trans_succ) {
+                $this->proc_notify($order_id, false, true, $chname);
+            } else {
                 QueueClient::async_push("QueryOrderNeterr",['order_id' => $order_id],30);
             }
-
-            util::monitor_netchk($chname,$neterr);
         }
 
-        return true;
+        return $ret;
     }
 
     public function manual_success($order_id)