stanley-king 3 rokov pred
rodič
commit
ae5162fa00

+ 1 - 0
admin/control/refill_order_manual.php

@@ -65,6 +65,7 @@ class refill_order_manualControl extends SystemControl
         } else {
             showMessage('手动操作类型错误', 'index.php?act=refill_order&op=index');
         }
+
         if($refill_info['notify_time'] == 0) {
             $mod_refill->edit($order_id, ['notify_state' =>1, 'notify_time' => time()]);
         }

+ 10 - 0
data/model/refill_order.model.php

@@ -48,4 +48,14 @@ class refill_orderModel extends Model
     {
         return $this->table('refill_order')->field('order_time')->where(['order_id' => ['gt',0]])->order('order_id asc')->find();
     }
+
+    public function add_detail($mchid,$mch_order,$details,$order_state)
+    {
+        return $this->table('refill_detail')->insert(['mchid' => $mchid,'mch_order' => $mch_order,'order_time' => time(),'params' => json_decode($details),'order_state' => $order_state]);
+    }
+
+    public function edit_detail($mchid,$mch_order,$datas)
+    {
+        return $this->table('refill_detail')->where(['mchid' => $mchid,'mch_order' => $mch_order])->update($datas);
+    }
 }

+ 2 - 0
global.php

@@ -124,6 +124,8 @@ define('ORDER_STATE_QUEUE', 50);
 
 define('ORDER_STATE_NOEXIST', 60);
 
+define('ORDER_STATE_HANDLED', 70);
+
 //未付款订单,自动取消的分钟
 define('VRORDER_AUTO_CANCEL_MINUTE', 10); //
 //未付款订单,自动取消的天数

+ 11 - 0
helper/refill/util.php

@@ -230,6 +230,16 @@ class util
         }
     }
 
+    public static function push_add_zero($params)
+    {
+        try {
+            $ret = queue\DispatcherClient::instance()->push('add_zero', $params);
+            return $ret !== false;
+        } catch (Exception $ex) {
+            return false;
+        }
+    }
+
     public static function push_addthird($params)
     {
         try {
@@ -503,6 +513,7 @@ class util
 
     public static function pop_queue_order($mchid,$mch_order)
     {
+        Model('refill_order')->edit_detail($mchid,$mch_order,['order_state' => ORDER_STATE_HANDLED]);
         $ins = Cache::getInstance('cacheredis');
 
         $name = 'merchant_order_query';

+ 2 - 0
mobile/control/refill.php

@@ -118,6 +118,7 @@ class refillControl extends merchantControl
         $mchid = $this->mchid();
         if ($state === true) {
             refill\util::push_queue_order($this->mchid(),$mch_order,ORDER_STATE_QUEUE);
+            Model('refill_order')->add_detail($this->mchid(),$mch_order,$params,ORDER_STATE_QUEUE);
             Log::record("refill::util::push_add success mchid={$mchid} mch_order={$mch_order} state={$state}",Log::DEBUG);
             return self::outsuccess(['state' => true]);
         } else {
@@ -198,6 +199,7 @@ class refillControl extends merchantControl
         $state = refill\util::push_addthird($params);
         if ($state === true) {
             refill\util::push_queue_order($this->mchid(),$mch_order,ORDER_STATE_QUEUE);
+            Model('refill_order')->add_detail($this->mchid(),$mch_order,$params,ORDER_STATE_QUEUE);
             return self::outsuccess(['state' => true]);
         } else {
             return self::outerr(208, '提交失败');

+ 2 - 0
racc/control/lzrefill.php

@@ -101,6 +101,7 @@ class lzrefillControl extends lzbaseControl
         $ret = refill\util::push_add($params);
         if ($ret) {
             refill\util::push_queue_order($this->mchid(), $mch_order, ORDER_STATE_QUEUE);
+            Model('refill_order')->add_detail($this->mchid(),$mch_order,$params,ORDER_STATE_QUEUE);
             return self::outsuccess($this->merchant_available);
         } else {
             return self::outerr(-6, $this->merchant_available);
@@ -219,6 +220,7 @@ class lzrefillControl extends lzbaseControl
         $ret = refill\util::push_addthird($params);
         if($ret) {
             refill\util::push_queue_order($this->mchid(), $mch_order, ORDER_STATE_QUEUE);
+            Model('refill_order')->add_detail($this->mchid(),$mch_order,$params,ORDER_STATE_QUEUE);
             return self::outsuccess($this->merchant_available);
         }
         else {

+ 1 - 0
racc/control/refill.php

@@ -107,6 +107,7 @@ class refillControl extends merchantControl
         ];
 
         refill\util::push_queue_order($this->mchid(),$mch_order,ORDER_STATE_QUEUE);
+        Model('refill_order')->add_detail($this->mchid(),$mch_order,$params,ORDER_STATE_QUEUE);
         refill\util::push_add($params);
         return self::outsuccess(['state' => true]);
     }

+ 2 - 0
rdispatcher/processor.php

@@ -30,6 +30,8 @@ class processor extends queue\ILooper
             {
                 if ($method == 'add') {
                     $this->mProxy->add($params);
+                } elseif ($method == 'add_zero') {
+                    $this->mProxy->add_zero($params);
                 } elseif ($method == 'notify') {
                     $channel = $params['channel'];
                     $input = $params['params'];

+ 54 - 0
rdispatcher/proxy.php

@@ -36,6 +36,7 @@ class proxy
         $quantity = 1;
 
         refill\util::push_queue_order($mchid,$mch_order,ORDER_STATE_SEND);
+        Model('refill_order')->add_detail($mchid,$mch_order,$params,ORDER_STATE_SEND);
 
         $first_comit = false;
         if($card_type == 0)
@@ -121,6 +122,58 @@ class proxy
         }
     }
 
+    public function add_zero($params)
+    {
+        $mchid = $params['mchid'];
+        $buyer_id = $params['buyer_id'];
+        $amount = intval($params['amount']);
+
+        $card_no = $params['card_no'];
+        $mch_order = $params['mch_order'];
+        $notify_url = $params['notify_url'];
+        $idcard = $params['idcard'] ?? '';
+        $card_name = $params['card_name'] ?? '';
+
+        $order_time = $params['order_time'] ?? time();
+        $commit_times = $params['commit_times'] ?? 0;
+        $last_order_id = $params['order_id'] ?? 0;
+
+        $org_quality = intval($params['org_quality']) ?? 0;
+        $card_type   = intval($params['card_type']) ?? 0;
+        $regin_no   = intval($params['regin_no']) ?? -1;
+        $quantity = 1;
+
+        refill\util::push_queue_order($mchid,$mch_order,ORDER_STATE_SEND);
+        Model('refill_order')->add_detail($mchid,$mch_order,$params,ORDER_STATE_SEND);
+
+        $first_comit = false;
+        if($card_type == 0)
+        {
+            $first_comit = true;
+            [$validate,$card_type,$region] = mtopcard\valid_phone($card_no);
+            $params['card_type'] = $card_type;
+            $params['regin_no'] = $region;
+            $regin_no = $region;
+        } else {
+            $validate = true;
+        }
+
+        [$org_quality,$quality] = refill\RefillFactory::instance()->find_quality($mchid,$amount,$card_type,$org_quality,$commit_times,time() - $order_time,'',$regin_no);
+        if($first_comit) {
+            refill\util::incr_user_commit($mchid,$card_type,$amount,$org_quality);
+        }
+        Log::record("proxy::add mch_order={$mch_order} card_no = {$card_no} regin_no={$regin_no} org_quality={$org_quality} quality={$quality}",Log::DEBUG);
+
+        $order_id = refill\RefillFactory::instance()->zero_order($mchid, $buyer_id, $amount, $card_no,
+            $mch_order, $idcard, $card_name, $notify_url, $quality, $org_quality, $order_time, $commit_times,
+            "手动0元订单");
+
+        refill\util::pop_queue_order($mchid, $mch_order);
+        QueueClient::push("NotifyMerchantComplete", ['order_id' => $order_id, 'manual' => false]);
+        util::del_exclude_channel($mchid, $mch_order, $card_type);
+    }
+
+
     private function latest_order($refill_order,$mchid,$mch_order)
     {
         $orders = $refill_order->getMerchantOrderList(['mchid' => $mchid,'mch_order' => $mch_order]);
@@ -189,6 +242,7 @@ class proxy
             'third_card_type' => $third_card_type];
 
         refill\util::push_queue_order($mchid,$mch_order,ORDER_STATE_SEND);
+        Model('refill_order')->add_detail($mchid,$mch_order,$params,ORDER_STATE_SEND);
         refill\util::incr_user_commit($mchid,$card_type,$amount,$org_quality);
 
         [$errcode, $errmsg, $order_id, $neterr,$net_errno] = refill\RefillFactory::instance()->add($mchid, $buyer_id, $amount, $card_no,