stanley-king 7 anni fa
parent
commit
7a32fda757

+ 1 - 1
data/logic/order.logic.php

@@ -115,8 +115,8 @@ class orderLogic
             if (!$update) {
                 throw new Exception('保存失败');
             }
-            account_helper::onOrderSuccess($order_id);
 
+            QueueClient::push('onAsyncOrderComplete',['pay_sn' => $order_info['pay_sn']]);
             //添加订单日志
             $data = array();
             $data['order_id'] = $order_id;

+ 12 - 2
data/logic/queue.logic.php

@@ -628,10 +628,20 @@ class queueLogic
         account_helper::onPredeposit($param['change_type'],$param['buyer_id'],$param['order_sn']);
         return callback(true);
     }
-    public function onPaySuccess($param)
+
+    public function onAsyncPaySuccess($param)
     {
         $pay_sn = $param['pay_sn'];
-        account_helper::onPaySuccess($pay_sn);
+        account_helper::onAsyncPaySuccess($pay_sn);
+        return callback(true);
+    }
+
+    public function onAsyncOrderComplete($param)
+    {
+        $pay_sn = $param['pay_sn'];
+        if(!empty($pay_sn)) {
+            account_helper::onAsyncOrderComplete($pay_sn);
+        }
         return callback(true);
     }
 

+ 34 - 91
helper/account_helper.php

@@ -22,6 +22,9 @@ require_once(BASE_ROOT_PATH . '/helper/search/tcp_client.php');
 require_once(BASE_ROOT_PATH . '/helper/async_push/IPusher.php');
 require_once(BASE_ROOT_PATH . '/helper/async_push/status.php');
 require_once(BASE_ROOT_PATH . '/helper/async_push/register.php');
+require_once(BASE_ROOT_PATH . '/helper/async_push/order.php');
+require_once(BASE_ROOT_PATH . '/helper/order_helper.php');
+
 require_once(BASE_ROOT_PATH . '/helper/fcode/present_manager.php');
 require_once(BASE_ROOT_PATH . '/helper/schema_helper.php');
 require_once(BASE_ROOT_PATH . '/helper/url_helper.php');
@@ -66,31 +69,6 @@ class account_helper
         }
     }
 
-//    private static function guide_bonus($member_id,&$money)
-//    {
-//        $type_sns = [];
-//        $params = bonus\parameters::guide();
-//        foreach ($params as $param)
-//        {
-//            $type = bonus_helper::create_type_input($param);
-//            $money = $type->getTotal_amount();
-//            $ret = bonus_helper::make_bonus($param,$param['rate_money']);
-//
-//            if($ret != false) {
-//                $type_sn = $ret['type_sn'];
-//                bonus_helper::send($type_sn,[$member_id]);
-//                $type_sns[] = $type_sn;
-//            } else {
-//                return false;
-//            }
-//        }
-//        if(empty($type_sns)) {
-//            return false;
-//        } else {
-//            return $type_sns[0];
-//        }
-//    }
-
     public static function gain_system($to_id, $amount)
     {
         if(self::$stSysBonus == null) {
@@ -327,7 +305,7 @@ class account_helper
 
     static public function paysuccess_bonus($buyer_id, $total_amount)
     {
-        $params = \bonus\parameters::paied($total_amount);
+        $params = \bonus\parameters::order_complete($total_amount);
 
         $val = 0.00;
         foreach ($params as $param)
@@ -377,21 +355,6 @@ class account_helper
         }
     }
 
-    //在支付成功之后,可以提醒用户收到货后,可以收到红包奖励。
-    public static function onPaySuccess($pay_sn)
-    {
-        $mod = Model('order');
-        $info = $mod->getOrderInfo(['pay_sn' => $pay_sn]);
-        $buyer_id = intval($info['buyer_id']);
-        push_helper::paysuccess($buyer_id);
-
-//        $inviters = search\relation_client::instance()->fetch_inviters(['user_id' => $buyer_id]);
-//        $invitees = search\relation_client::instance()->fetch_invitees(['user_id' => $buyer_id]);
-//        if(empty($inviters))
-//        {
-//        }
-    }
-
     //在发货之后,可以提醒用户留意收货,在订单中查看物流,短信通知
     public static function onOrderSend($order_sn,$logistics_company,$logistics)
     {
@@ -406,40 +369,20 @@ class account_helper
         sms_helper::send_nostore_message($mobile,Sms::order_sended,['company'=> $logistics_company,'logistics'=>$logistics,'time'=>'5']);
     }
 
-    public static function onOrderSuccess($order_id)
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    public static function onLogin($member_id)
     {
-        if(empty($pay_sn)) {
-            Log::record("account_helper::onOrderSuccess $order_id error.",Log::ERR);
-        } else {
-            Log::record("account_helper::onOrderSuccess $order_id={$order_id}.",Log::DEBUG);
-        }
-
-        $mod_order = Model('order');
-        $order = $mod_order->getOrderInfo(['order_id' => $order_id]);
+        relation_helper::onLogin($member_id);
 
-        $buyer_id = intval($order['buyer_id']);
-        $goods_amount = intval($order['goods_amount']);
-        if($buyer_id <= 0) {
-            Log::record("account_helper::onOrderSuccess err buyer_id.",Log::ERR);
-            return;
-        }
+        $anotice  = new user_session\anotice();
+        $anotice->onStatus();
 
-        $pay_sn = $order['pay_sn'];
-        $num = \fcode\operator::unlock($pay_sn);
-        if($num > 0) {
-            push_helper::fcode_unlock($buyer_id,$num);
-        }
+        $favorate = new user_session\favorite();
+        $favorate->onLogin();
 
-        $bonus_amount = account_helper::paysuccess_bonus($buyer_id,$goods_amount);
-        if(intval($bonus_amount * 100) + 0.5 > 10)
-        {
-            push_helper::paysuccess_bonus($buyer_id,$bonus_amount);
-            $mem_info = new member_info($buyer_id);
-            $mobile = $mem_info->mobile();
-            sms_helper::send_nostore_message($mobile,Sms::order_received,['time'=>'5']);
-        }
+        $fcode = new user_session\fcode();
+        $fcode->onStatus();
     }
-
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     public static function onStatus($member_id)
     {
@@ -465,26 +408,12 @@ class account_helper
         QueueClient::push('onAsyncStatus',['member_id' => $member_id]);
     }
 
-    public static function onLogin($member_id)
-    {
-        relation_helper::onLogin($member_id);
-
-        $anotice  = new user_session\anotice();
-        $anotice->onStatus();
-
-        $favorate = new user_session\favorite();
-        $favorate->onLogin();
-
-        $fcode = new user_session\fcode();
-        $fcode->onStatus();
-    }
-
     public static function onAsyncStatus($member_id)
     {
         $iPusher = new async_push\status($member_id);
         $iPusher->run();
     }
-
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     public static function onRegister($member_id,$relay_id)
     {
         relation_helper::onRegister($member_id);
@@ -494,6 +423,9 @@ class account_helper
         }
         $publisher = new message\publisher();
         $publisher->add_inviter($member_id,$relay_id);
+        if($relay_id > 0) {
+            $publisher->add_fellow($relay_id,[$member_id]);
+        }
 
         QueueClient::push('onAsyncRegister',['user' => $member_id,'inviter' => $relay_id]);
     }
@@ -503,18 +435,27 @@ class account_helper
         $iPusher = new async_push\register($user,$inviter);
         $iPusher->run();
     }
-    public static function onAsyncEvaluate($member_id)
-    {
 
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    //在支付成功之后,可以提醒用户收到货后,可以收到红包奖励。
+    public static function onAsyncPaySuccess($pay_sn)
+    {
+        $iPusher = new async_push\order($pay_sn);
+        $iPusher->onPaySuccess();
     }
-    public static function onAsyncPaySuccess($order_id)
+
+    public static function onAsyncOrderComplete($pay_sn)
     {
-        //todo 你的好友(匿名)购买了***,去看看~
+        $iPusher = new async_push\order($pay_sn);
+        $iPusher->onOrderComplete();
     }
-    public static function onAsyncOrderSuccess($order_id)
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    public static function onAsyncEvaluate($member_id)
     {
-        //
+
     }
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     public static function onAsyncGoodsDiscount($gid)
     {
 
@@ -524,10 +465,12 @@ class account_helper
     {
 
     }
+
     public static function onAsyncDiscoverComment($spid,$commentid)
     {
 
     }
+
     public static function onAsyncFollow($user,$follow)
     {
 

+ 15 - 2
helper/async_push/IPusher.php

@@ -8,7 +8,20 @@
 
 namespace async_push;
 
-interface IPusher
+abstract class IPusher
 {
-    public function run();
+    abstract public function run();
+
+    protected function ex_user($invitees,$user)
+    {
+        $index = 0;
+        foreach ($invitees as $invitee) {
+            if($invitee == $user) {
+                unset($invitees[$index]);
+                break;
+            }
+            $index++;
+        }
+        return $invitees;
+    }
 }

+ 218 - 0
helper/async_push/order.php

@@ -0,0 +1,218 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: stanley-king
+ * Date: 2017/11/4
+ * Time: 下午10:17
+ */
+
+namespace async_push;
+
+use push_helper;
+use order_helper;
+use member_info;
+use Exception;
+use search;
+use bonus;
+use bonus_helper;
+use sms_helper;
+use Sms;
+
+class simple_order
+{
+    private $order_info;
+    public function __construct($order_info)
+    {
+        $this->order_info = $order_info;
+    }
+
+    public function user() {
+        return $this->order_info['order_info']['buyer_id'];
+    }
+    public function discount() {
+        return $this->order_info['order_info']['pd_amount'];
+    }
+    public function goods() {
+        return $this->order_info['order_goods'][0];
+    }
+    public function total() {
+        return $this->order_info['order_info']['order_amount'];
+    }
+}
+
+class order extends IPusher
+{
+    private $simple_order;
+    private $user_info;
+    private $paysn;
+
+    public function __construct($paysn)
+    {
+        $this->paysn = $paysn;
+        $order = $this->order(['pay_sn' => $paysn]);
+        if(empty($order)) throw new Exception("错误的订单");
+
+        $this->simple_order = new simple_order($order);
+        $user = $this->simple_order->user();
+        $this->user_info = new member_info($user);
+    }
+
+    public function run()
+    {
+    }
+
+    public function onPaySuccess()
+    {
+        push_helper::user_order_paied($this->user_info->member_id(),$this->paysn);
+        $inviters = search\relation_client::instance()->fetch_inviters(['user_id' => $this->user_info->member_id()]);
+        $this->notify_paided_goods($inviters);
+    }
+
+    private function notify_paided_goods($inviters)
+    {
+        if(empty($inviters)) return false;
+
+        $goods = $this->simple_order->goods();
+        $level = 0;
+        $ex_invitee = $this->user_info->member_id();
+        foreach ($inviters as $inviter)
+        {
+            $this->nofity_paied_inviter($inviter,$level,$goods);
+            $invitees = search\relation_client::instance()->fetch_invitees(['user_id' => $inviter]);
+            $invitees = $this->ex_user($invitees,$ex_invitee);
+            $this->nofity_paied_invitees($inviter,$invitees,$level,$goods);
+            $ex_invitee = $inviter;
+            $level += 1;
+        }
+        return true;
+    }
+
+    private function nofity_paied_inviter($inviter,$level,$goods)
+    {
+        push_helper::inviter_order_paied($inviter,$this->user_info->member_id(),$level + 1,$goods);
+    }
+    private function nofity_paied_invitees($inviter,$invitees,$level,$goods)
+    {
+        foreach ($invitees as $invitee) {
+            push_helper::invitee_order_paied($invitee,$this->user_info->member_id(),$goods);
+        }
+    }
+
+    public function onOrderComplete()
+    {
+        $num = \fcode\operator::unlock($this->paysn);
+        if($num > 0) {
+            push_helper::fcode_unlock($this->user_info->member_id(),$num);
+        }
+        sms_helper::send_nostore_message($this->user_info->mobile(),Sms::order_received,['time'=>'5']);
+
+        $this->send_complete_bonus();
+        $inviters = search\relation_client::instance()->fetch_inviters(['user_id' => $this->user_info->member_id()]);
+        $this->notify_complete_inviter($inviters);
+    }
+
+    private function notify_complete_inviter($inviters)
+    {
+        if(empty($inviters)) return false;
+
+        $level = 0;
+        $ex_invitee = $this->user_info->member_id();
+        foreach ($inviters as $inviter)
+        {
+            $this->reward_inviter($inviter,$level);
+            $invitees = search\relation_client::instance()->fetch_invitees(['user_id' => $inviter]);
+            $invitees = $this->ex_user($invitees,$ex_invitee);
+            $this->reward_invitees($inviter,$invitees,$level);
+            $ex_invitee = $inviter;
+            $level += 1;
+        }
+        return true;
+    }
+
+    private function reward_inviter($inviter, $level)
+    {
+        $params = bonus\parameters::order_complete_inviter($this->user_info->nickname(),$level);
+        foreach ($params as $param)
+        {
+            $type = bonus_helper::create_type_input($param);
+            $money = $type->getTotal_amount();
+            $rate  = $type->bonus_rate();
+            $ret = bonus_helper::make_bonus($param,$param['rate_money']);
+
+            if($ret != false) {
+                $type_sn = $ret['type_sn'];
+                bonus_helper::send($type_sn,[$inviter]);
+                push_helper::inviter_order_complete_bonus($inviter,$this->user_info->member_id(),$level + 1,$money,$rate,$type_sn);
+            } else {
+                return false;
+            }
+        }
+    }
+
+    private function reward_invitees($inviter, $invitees, $level)
+    {
+        if(empty($invitees)) return false;
+        $inviter_info = new member_info($inviter);
+
+        $num = count($invitees);
+        $params = bonus\parameters::order_complete_invitee($inviter_info->nickname(),$level,$num);
+        foreach ($params as $param)
+        {
+            $type = bonus_helper::create_type_input($param);
+            $money = $type->getTotal_amount();
+            $rate  = $type->bonus_rate();
+            $ret = bonus_helper::make_bonus($param,$param['rate_money']);
+
+            if($ret != false) {
+                $type_sn = $ret['type_sn'];
+                bonus_helper::send($type_sn,$invitees);
+                foreach ($invitees as $invitee) {
+                    push_helper::invitee_order_complete_bonus($invitee,$this->user_info,$money / $num,$rate,$type_sn);
+                }
+            } else {
+                return false;
+            }
+        }
+    }
+
+    private function send_complete_bonus()
+    {
+        $total_amount = $this->simple_order->total();
+
+        $fixed_params = bonus\parameters::order_complete_fixed($total_amount);
+        foreach ($fixed_params as $param)
+        {
+            $ret = bonus_helper::make_bonus($param,$param['rate_money']);
+            if($ret != false) {
+                $type_sn = $ret['type_sn'];
+                $bonus = bonus_helper::send($type_sn, [$this->user_info->member_id()]);
+                $bonus_value = $bonus[0]['bonus_value'];
+                $bonus_rate = $bonus[0]['bonus_rate'];
+                push_helper::user_order_complete_fixed($this->user_info->member_id(),$bonus_value,$bonus_rate,$type_sn);
+            }
+        }
+
+        $random_params = bonus\parameters::order_complete_random($total_amount);
+        foreach ($random_params as $param)
+        {
+            $ret = bonus_helper::make_bonus($param,$param['rate_money']);
+            if($ret != false) {
+                $type_sn = $ret['type_sn'];
+                push_helper::user_order_complete_random($this->user_info->member_id(),$param['rate_money']['num'],$type_sn);
+            }
+        }
+    }
+
+    private function order($condition)
+    {
+        $model_order = Model('order');
+        $order_list = $model_order->getNormalOrderList($condition,0, '*', 'order_id desc', '', ['order_common','order_address', 'order_goods']);
+        $order_helper = new order_helper($order_list);
+        $orders = $order_helper->format();
+        if(!empty($orders)) {
+            return $orders[0];
+        } else {
+            return false;
+        }
+    }
+}

+ 15 - 26
helper/async_push/register.php

@@ -13,10 +13,8 @@ use push_helper;
 use bonus;
 use bonus_helper;
 use member_info;
-use sms_helper;
-use Sms;
 
-class register implements IPusher
+class register extends IPusher
 {
     private $cur_user;
     private $cur_info;
@@ -69,18 +67,6 @@ class register implements IPusher
         }
         return true;
     }
-    private function ex_user($invitees,$user)
-    {
-        $index = 0;
-        foreach ($invitees as $invitee) {
-            if($invitee == $user) {
-                unset($invitees[$index]);
-                break;
-            }
-            $index++;
-        }
-        return $invitees;
-    }
 
     //给Level 级的邀请者发奖励
     private function reward_inviter($inviter, $level)
@@ -119,7 +105,7 @@ class register implements IPusher
 
             if($ret != false) {
                 $type_sn = $ret['type_sn'];
-                bonus_helper::send($type_sn,$inviter);
+                bonus_helper::send($type_sn,$invitees);
                 foreach ($invitees as $invitee) {
                     push_helper::invitee_bonus($inviter,$invitee,$this->cur_info,$level + 1,$money / $num,$rate,$type_sn);
                 }
@@ -131,17 +117,20 @@ class register implements IPusher
 
     public function reward_user()
     {
-        $param = bonus\parameters::reigster_fixed();
-        $type = bonus_helper::create_type_input($param);
-        $money = $type->getTotal_amount();
-        $ret = bonus_helper::make_bonus($param,$param['rate_money']);
+        $params = bonus\parameters::user_reigster_fixed();
+        foreach ($params as $param)
+        {
+            $type = bonus_helper::create_type_input($param);
+            $money = $type->getTotal_amount();
+            $ret = bonus_helper::make_bonus($param,$param['rate_money']);
 
-        if($ret != false) {
-            $type_sn = $ret['type_sn'];
-            bonus_helper::send($type_sn,[$this->cur_user]);
-            push_helper::register_bonus($this->cur_user,$money);
-        } else {
-            return false;
+            if($ret != false) {
+                $type_sn = $ret['type_sn'];
+                bonus_helper::send($type_sn,[$this->cur_user]);
+                push_helper::register_bonus($this->cur_user,$money);
+            } else {
+                return false;
+            }
         }
     }
 }

+ 1 - 1
helper/async_push/status.php

@@ -14,7 +14,7 @@ use member_info;
 use fcode;
 use push_helper;
 
-class status implements IPusher
+class status extends IPusher
 {
     private $member_id;
     private $mod_member;

+ 17 - 11
helper/bonus/manager.php

@@ -261,20 +261,26 @@ class manager
 
             $index = 0;
             $bonus_values = 0.00;
-            foreach ($items as &$bonus) {
-                $user_id = $member_ids[$index];
+            foreach ($items as &$bonus)
+            {
+                try
+                {
+                    $user_id = $member_ids[$index];
 
-                $minfo = new member_info($user_id);
-                $bonus['user_id'] = $user_id;
-                $bonus['user_mobile'] = $minfo->mobile();
-                $bonus['user_name'] = $minfo->nickname();
-                $bonus['grab_time'] = time();
-                $bonus['get_time'] = time();
-                $bonus['bonus_status'] = 2;
+                    $minfo = new member_info($user_id);
+                    $bonus['user_id'] = $user_id;
+                    $bonus['user_mobile'] = $minfo->mobile();
+                    $bonus['user_name'] = $minfo->nickname();
+                    $bonus['grab_time'] = time();
+                    $bonus['get_time'] = time();
+                    $bonus['bonus_status'] = 2;
 
+                    $ret[] = $bonus;
+                    $bonus_values += $bonus['bonus_value'];
+                } catch (Exception $ex) {
+                    Log::record($ex->getMessage(),Log::ERR);
+                }
                 ++$index;
-                $ret[] = $bonus;
-                $bonus_values += $bonus['bonus_value'];
             }
 
             $mod_bonus->replaceAll($items);

+ 154 - 48
helper/bonus/parameters.php

@@ -58,30 +58,34 @@ class parameters
         return $param;
     }
 
-    public static function guide()
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    public static function user_reigster_fixed()
     {
         $params = [];
-
-        $param = [];
-        $param['make_type'] = type::MakeInviteRewardType;
-        $param['type_name'] = "邀请好友,奖励红包";
-        $param['send_type'] = type::SendType_Fixed;
-        $param['grab_type'] = type::GrabType_All;
-        $param['sender_id']   = self::admin_member_id;
-        $param['sender_name'] = self::admin_name;
-        $param['usable_days'] = self::usable_days;
-        $param['rate_money'][] = ['amount' => 30, 'num' => 1, 'rate' => 50];
+        $param['make_type']  = type::MakeRegisterType;
+        $param['type_name']  = "新人购物红包";
+        $param['type_bless'] = "感谢您加入熊猫美妆";
+        $param['send_type']  = type::SendType_Fixed;
+        $param['grab_type']  = type::GrabType_All;
+        $param['sender_id']    = self::admin_member_id;
+        $param['sender_name']  = self::admin_name;
+        $param['usable_days']  = self::usable_days;
+        $param['rate_money'][] = ['amount' => 100,'num' => 1, 'rate' => 30];
         $params[] = $param;
 
-        $param = [];
-        $param['make_type'] = type::MakeInviteRewardType;
-        $param['type_name'] = "邀请好友,奖励红包";
-        $param['send_type'] = type::SendType_Fixed;
+        return $params;
+    }
+
+    public static function user_register_random()
+    {
+        $params = [];
+        $param['make_type'] = type::MakeRegisterType;
+        $param['type_name'] = "新人红包";
+        $param['send_type'] = type::SendType_Random;
         $param['grab_type'] = type::GrabType_All;
         $param['sender_id']   = self::admin_member_id;
         $param['sender_name'] = self::admin_name;
-        $param['usable_days'] = self::usable_days;
-        $param['rate_money'][] = ['amount' => 100,'num' => 1, 'rate' => 30];
+        $param['rate_money'][] = ['amount' => 50,'num' => 1, 'rate' => 30];
         $params[] = $param;
 
         return $params;
@@ -116,7 +120,7 @@ class parameters
         return $params;
     }
 
-    public static function guide_invitee($inviter,$invitee,$level,$num)
+    public static function guide_invitee($inviter_name, $invitee_name, $level, $num)
     {
         $rate_moneys = [
             ['amount' => 2,  'num' => $num, 'rate' => 100],
@@ -132,7 +136,7 @@ class parameters
         $param['make_type'] = type::MakeInviteRewardType;
         $param['type_name'] = "好友加入,雨露均沾";
         $level = $level + 1;
-        $param['type_bless'] = "祝贺{$invitee}成为{$inviter}的{$level}度粉丝";
+        $param['type_bless'] = "祝贺{$invitee_name}成为{$inviter_name}的{$level}度粉丝";
         $param['send_type']  = type::SendType_Fixed;
         $param['grab_type']  = type::GrabType_All;
         $param['sender_id']   = self::admin_member_id;
@@ -144,6 +148,135 @@ class parameters
         return $params;
     }
 
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    static private function order_complete_fixed_rates($order_amount)
+    {
+        $money = intval($order_amount/100) * 100;
+
+        if($money > 1000) {
+            return ['amount' => 200,'num' => 1, 'rate' => 50];
+        }
+        elseif($money > 500) {
+            return ['amount' => 200,'num' => 1, 'rate' => 40];
+        }
+        elseif ($money > 300) {
+            return ['amount' => 200,'num' => 1, 'rate' => 30];
+        }
+        elseif ($money > 200) {
+            return ['amount' => 100,'num' => 1, 'rate' => 30];
+        }
+        else {
+            return ['amount' => 100,'num' => 1, 'rate' => 30];
+        }
+    }
+    static private function order_complete_random_rates($order_amount)
+    {
+        $money = intval($order_amount/100) * 100;
+
+        if($money > 1000) {
+            return ['amount' => 200,'num' => 10, 'rate' => 50];
+        }
+        elseif($money > 500) {
+            return ['amount' => 200,'num' => 10, 'rate' => 40];
+        }
+        elseif ($money > 300) {
+            return ['amount' => 200,'num' => 10, 'rate' => 30];
+        }
+        elseif ($money > 200) {
+            return ['amount' => 100,'num' => 10, 'rate' => 30];
+        }
+        else {
+            return ['amount' => 100,'num' => 10, 'rate' => 30];
+        }
+    }
+
+    public static function order_complete_fixed($order_amount)
+    {
+        $params = [];
+        $param['make_type']  = type::MakePayType;
+        $param['type_name']  = "购物奖励";
+        $param['type_bless'] = "祝您购物愉快,请常回来看看~";
+        $param['send_type']  = type::SendType_Fixed;
+        $param['grab_type']  = type::GrabType_All;
+        $param['sender_id']   = self::admin_member_id;
+        $param['sender_name'] = self::admin_name;
+        $param['usable_days'] = self::usable_days + 15;
+        $param['rate_money'][] = self::order_complete_fixed_rates($order_amount);
+
+        $params[] = $param;
+        return $params;
+    }
+
+    public static function order_complete_random($order_amount)
+    {
+        $params = [];
+        $param['make_type']  = type::MakePayType;
+        $param['type_name']  = "购物奖励";
+        $param['type_bless'] = "祝您购物愉快,请常回来看看~";
+        $param['send_type']  = type::SendType_Random;
+        $param['grab_type']  = type::GrabType_All;
+        $param['sender_id']   = self::admin_member_id;
+        $param['sender_name'] = self::admin_name;
+        $param['usable_days'] = self::usable_days;
+        $param['rate_money'][] = self::order_complete_random_rates($order_amount);
+
+        $params[] = $param;
+        return $params;
+    }
+
+    public static function order_complete_inviter($nickname,$level)
+    {
+        $rate_moneys = [
+            ['amount' => 2,'num' => 1, 'rate' => 100],
+            ['amount' => 1,'num' => 1, 'rate' => 100]
+        ];
+
+        $count = count($rate_moneys);
+        $cur_index = $level < $count ? $level : $count -1;
+
+        $params = [];
+
+        $param['make_type'] = type::MakeInviteRewardType;
+        $param['type_name'] = "粉丝购物,奖励红包";
+        $level = $level + 1;
+        $param['type_bless'] = "祝贺您的{$level}度粉丝{$nickname}购物成功";
+        $param['send_type']  = type::SendType_Fixed;
+        $param['grab_type']  = type::GrabType_All;
+        $param['sender_id']   = self::admin_member_id;
+        $param['sender_name'] = self::admin_name;
+        $param['usable_days'] = self::usable_days;
+        $param['rate_money'][] = $rate_moneys[$cur_index];
+        $params[] = $param;
+
+        return $params;
+    }
+
+    public static function order_complete_invitee($user_name, $level, $num)
+    {
+        $rate_moneys = [
+            ['amount' => 2,  'num' => $num, 'rate' => 100],
+            ['amount' => 1,  'num' => $num, 'rate' => 100],
+        ];
+
+        $count = count($rate_moneys);
+        $cur_index = $level < $count ? $level : $count -1;
+
+        $params = [];
+
+        $param['make_type'] = type::MakeInviteRewardType;
+        $param['type_name'] = "好友购物,雨露均沾";
+        $param['type_bless'] = "祝贺您的好友 {$user_name} 购物成功";
+        $param['send_type']  = type::SendType_Fixed;
+        $param['grab_type']  = type::GrabType_All;
+        $param['sender_id']   = self::admin_member_id;
+        $param['sender_name'] = self::admin_name;
+        $param['usable_days'] = self::usable_days;
+        $param['rate_money'][] = $rate_moneys[$cur_index];
+        $params[] = $param;
+
+        return $params;
+    }
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     public static function admin_fixed($rate,$amount,$num,$type_name)
     {
         $param['make_type'] = type::MakeSendType;
@@ -173,34 +306,6 @@ class parameters
         return $param;
     }
 
-    public static function reigster_fixed()
-    {
-        $param['make_type']  = type::MakeRegisterType;
-        $param['type_name']  = "新人购物红包";
-        $param['type_bless'] = "感谢您加入熊猫美妆";
-        $param['send_type']  = type::SendType_Fixed;
-        $param['grab_type']  = type::GrabType_All;
-        $param['sender_id']    = self::admin_member_id;
-        $param['sender_name']  = self::admin_name;
-        $param['usable_days']  = self::usable_days;
-        $param['rate_money'][] = ['amount' => 100,'num' => 1, 'rate' => 30];
-
-        return $param;
-    }
-
-    public static function register_random()
-    {
-        $param['make_type'] = type::MakeRegisterType;
-        $param['type_name'] = "新人红包";
-        $param['send_type'] = type::SendType_Random;
-        $param['grab_type'] = type::GrabType_All;
-        $param['sender_id']   = self::admin_member_id;
-        $param['sender_name'] = self::admin_name;
-        $param['rate_money'][] = ['amount' => 50,'num' => 1, 'rate' => 30];
-
-        return $param;
-    }
-
     public static function shake_system($rate_moneys)
     {
         $param['make_type'] = type::MakeShakeGainType;
@@ -279,7 +384,7 @@ class parameters
         return $rate_moneys;
     }
 
-    public static function paied($order_amount)
+    public static function order_complete($order_amount)
     {
         $rate_moneys = self::paied_rates($order_amount);
 
@@ -299,6 +404,7 @@ class parameters
 
         return $params;
     }
+
     public static function order_cancel($bonus_rate)
     {
         $params = [];

+ 3 - 0
helper/order_helper.php

@@ -648,6 +648,7 @@ class order_helper
         $result["add_time"] = intval($order["add_time"]);
         $result["payment_code"] = $order["payment_code"];
         $result["payment_desc"] = $this->payment_desc($order["payment_code"]);
+        $result['buyer_id'] = intval($order['buyer_id']);
 
         $result["payment_time"] = intval($order["payment_time"]);
         $result["finnshed_time"] = intval($order["finnshed_time"]);
@@ -744,6 +745,8 @@ class order_helper
     {
         $result = [];
         $order_goods = $order['extend_order_goods'];
+        if(empty($order_goods)) return $result;
+
         foreach ($order_goods as $val)
         {
             $goods["rec_id"] = intval($val["rec_id"]);

+ 3 - 1
helper/pay_helper.php

@@ -73,6 +73,8 @@ class pay_helper
                         Log::record("Put order to oms error: pay_sn={$pay_sn},bonus pay.",Log::ERR);
                     }
                 }
+                $pay_helper = new pay_helper();
+                $pay_helper->OnSuccess($pay_sn);
             }
             return $output;
         }
@@ -245,7 +247,7 @@ class pay_helper
         if($result['state'] != true) {
             return false;
         } else {
-            QueueClient::push('onPaySuccess',['pay_sn' => $pay_sn]);
+            QueueClient::push('onAsyncPaySuccess',['pay_sn' => $pay_sn]);
             return true;
         }
     }

+ 183 - 41
helper/push_helper.php

@@ -8,6 +8,19 @@
 
 class push_helper
 {
+    static $admin_info = null;
+
+    private static function admin_alias() {
+        return bonus\parameters::admin_member_id;
+    }
+    private static function admin_avatar()
+    {
+        if(self::$admin_info == null) {
+            self::$admin_info = new member_info(self::admin_alias());
+        }
+        return self::$admin_info->avatar();
+    }
+
     public static function stolen_bonus(member_info $from_info,member_info $to_info,$amount)
     {
         $thief = $to_info->nickname();
@@ -148,45 +161,6 @@ class push_helper
         QueueClient::push('upushSendMsg',$push_param);
     }
 
-    public static function paysuccess($member_id)
-    {
-        $minfo = new member_info($member_id);
-        $text = "已收到你的货款,请留意发货短信,确认收货后会有红包奖励~";
-
-        $push_param['alias'] = $member_id;
-        $push_param['title'] = "收到购物款";
-        $push_param['text']  = $text;
-
-        $push_param['extra']['go_type']   = '';
-        $push_param['extra']['title']     = "收到购物款";
-        $push_param['extra']['text']      = $text;
-        $push_param['extra']['show_type'] = 'pop';
-        $push_param['extra']['url']      = 'xmmz://p.lrlz.com/mine/order/index?index=1';
-        $push_param['extra']['image']     = $minfo->avatar();
-
-        QueueClient::push('upushSendMsg',$push_param);
-    }
-
-    public static function paysuccess_bonus($member_id,$money)
-    {
-        $text = "感谢您的支持,熊猫美妆向您派发了{$money}元的购物红包,请查收~.";
-        $minfo = new member_info($member_id);
-
-        $push_param['alias'] = $member_id;
-        $push_param['title'] = "购物奖励";
-        $push_param['text']  = $text;
-        $push_param['img']   = $minfo->avatar();;
-
-        $push_param['extra']['go_type']  = 'bonus';
-        $push_param['extra']['title']    = "购物奖励";
-        $push_param['extra']['text']     = $text;
-        $push_param['extra']['show_type']= 'pop';
-        $push_param['extra']['url']      = 'xmmz://p.lrlz.com/main/index?index=2';
-        $push_param['extra']['image']    = $minfo->avatar();
-
-        QueueClient::push('upushSendMsg',$push_param);
-    }
-
     public static function evaluation_bonus($member_id,$money)
     {
         $text = "感谢您的评价,熊猫美妆送给您{$money}元红包,请查收~.";
@@ -248,6 +222,12 @@ class push_helper
     private static function inviter_text(member_info $invitee, $level, $money, $rate)
     {
         $nickname = $invitee->nickname();
+        $text = self::money_rate_desc($money, $rate);
+        return "恭喜{$nickname}成为您的{$level}度粉丝,您获得{$text}红包奖励.";
+    }
+
+    public static function money_rate_desc($money,$rate)
+    {
         $discount = 100 - $rate;
         if($discount == 0) {
             $desc = "现金";
@@ -255,8 +235,8 @@ class push_helper
             $tmp = $discount / 10;
             $desc = "{$tmp}折";
         }
-        $text = "恭喜{$nickname}成为您的{$level}度粉丝,您获得{$money}元{$desc}红包奖励.";
-        return $text;
+        $amount = intval($money * 100 + 0.5) / 100;
+        return "{$amount}元{$desc}";
     }
 
     public static function inviter_bonus($inviter, $invitee, $level, $money, $rate, $type_sn)
@@ -314,6 +294,168 @@ class push_helper
 
         QueueClient::push('upushSendMsg',$push_param);
     }
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    private static function buygoods_inviter_text(member_info $user, $level, $goods_name)
+    {
+        $text = "您的{$level}度粉丝 {$user->nickname()},刚刚购买了《{$goods_name}》.";
+        return $text;
+    }
+    public static function inviter_order_paied($inviter, $user, $level, $goods_info)
+    {
+        $user_info = new member_info($user);
+        $text = self::buygoods_inviter_text($user_info,$level,$goods_info['goods_name']);
+
+        $push_param['alias'] = $inviter;
+        $push_param['title'] = "粉丝正在买";
+        $push_param['text']  = $text;
+
+        $push_param['extra']['go_type']  = 'bonus';
+        $push_param['extra']['title']    = "粉丝正在买";
+        $push_param['extra']['text']     = $text;
+        $push_param['extra']['show_type']= 'pop';
+
+        $push_param['extra']['url']      = schema_helper::goods($goods_info['goods_id']);
+        $push_param['extra']['image']    = $goods_info['goods_image'];
+
+        QueueClient::push('upushSendMsg',$push_param);
+    }
+
+    private static function buygoods_invitee_text(member_info $user, $goods_name)
+    {
+        $text = "您的朋友 {$user->nickname()},刚刚购买了《{$goods_name}》.";
+        return $text;
+    }
+    public static function invitee_order_paied($invitee, $user, $goods_info)
+    {
+        $user_info = new member_info($user);
+        $text = self::buygoods_invitee_text($user_info,$goods_info['goods_name']);
+
+        $push_param['alias'] = $invitee;
+        $push_param['title'] = "朋友正在买";
+        $push_param['text']  = $text;
+
+        $push_param['extra']['go_type']  = 'bonus';
+        $push_param['extra']['title']    = "朋友正在买";
+        $push_param['extra']['text']     = $text;
+        $push_param['extra']['show_type']= 'pop';
+
+        $push_param['extra']['url']      = schema_helper::goods($goods_info['goods_id']);
+        $push_param['extra']['image']    = $goods_info['goods_image'];
+
+        QueueClient::push('upushSendMsg',$push_param);
+    }
+
+    public static function user_order_paied($user, $paysn)
+    {
+        $text = "请留意发货短信,确认收货后会有红包奖励~";
+
+        $push_param['alias'] = $user;
+        $push_param['title'] = "收到购物款";
+        $push_param['text']  = $text;
+
+        $push_param['extra']['go_type']   = '';
+        $push_param['extra']['title']     = "收到购物款";
+        $push_param['extra']['text']      = $text;
+        $push_param['extra']['show_type'] = 'pop';
+        $push_param['extra']['url']       = schema_helper::order_info($paysn);
+        $push_param['extra']['image']     = self::admin_avatar();
+
+        QueueClient::push('upushSendMsg',$push_param);
+    }
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    public static function user_order_complete_fixed($user, $money, $rate, $type_sn)
+    {
+        $desc = self::money_rate_desc($money,$rate);
+        $text = "感谢您的惠顾,熊猫美妆向您派发了{$desc}红包,请查收~.";
+
+        $push_param['alias'] = $user;
+        $push_param['title'] = "购物奖励";
+        $push_param['text']  = $text;
+        $push_param['img']   = self::admin_avatar();
+
+        $push_param['extra']['go_type']  = 'bonus';
+        $push_param['extra']['title']    = "购物奖励";
+        $push_param['extra']['text']     = $text;
+        $push_param['extra']['show_type']= 'pop';
+        $push_param['extra']['url']      = schema_helper::bonus_detail($type_sn);
+        $push_param['extra']['image']    = self::admin_avatar();
+
+        QueueClient::push('upushSendMsg',$push_param);
+    }
+
+    public static function user_order_complete_random($user,$num,$type_sn)
+    {
+        $text = "感谢您的惠顾,熊猫美妆向您派发了{$num}份可分享红包,点击领取一份~.";
+
+        $push_param['alias'] = $user;
+        $push_param['title'] = "购物分享";
+        $push_param['text']  = $text;
+        $push_param['img']   = self::admin_avatar();
+
+        $push_param['extra']['go_type']  = 'bonus';
+        $push_param['extra']['title']    = "购物分享";
+        $push_param['extra']['text']     = $text;
+        $push_param['extra']['show_type']= 'pop';
+        $push_param['extra']['url']      = schema_helper::bonus_detail($type_sn);
+        $push_param['extra']['image']    = self::admin_avatar();
+
+        QueueClient::push('upushSendMsg',$push_param);
+    }
+
+    private static function inviter_order_complete_text(member_info $invitee, $level, $money, $rate)
+    {
+        $nickname = $invitee->nickname();
+        $text = self::money_rate_desc($money, $rate);
+        return "恭喜您的{$level}度粉丝{$nickname}购物成功,您获得{$text}红包奖励.";
+    }
+
+    public static function inviter_order_complete_bonus($inviter, $invitee, $level, $money, $rate, $type_sn)
+    {
+        $invitee_info = new member_info($invitee);
+        $text = self::inviter_order_complete_text($invitee_info,$level,$money,$rate);
+
+        $push_param['alias'] = $inviter;
+        $push_param['title'] = "粉丝购物奖励";
+        $push_param['text']  = $text;
+
+        $push_param['extra']['go_type']  = 'bonus';
+        $push_param['extra']['title']    = "粉丝购物奖励";
+        $push_param['extra']['text']     = $text;
+        $push_param['extra']['show_type']= 'pop';
+
+        $push_param['extra']['url']      = schema_helper::bonus_detail($type_sn);
+        $push_param['extra']['image']    = $invitee_info->avatar();
+
+        QueueClient::push('upushSendMsg',$push_param);
+    }
+
+    private static function invitee_order_complete_text(member_info $user, $money, $rate)
+    {
+        $nickname = $user->nickname();
+        $text = self::money_rate_desc($money, $rate);
+        return "恭喜您的朋友{$nickname}购物成功,您获得{$text}红包奖励.";
+    }
+    public static function invitee_order_complete_bonus($invitee,member_info $user, $money, $rate, $type_sn)
+    {
+        $invitee_info = new member_info($invitee);
+        $text = self::invitee_order_complete_text($user,$money,$rate);
+
+        $push_param['alias'] = $invitee;
+        $push_param['title'] = "粉丝购物奖励";
+        $push_param['text']  = $text;
+
+        $push_param['extra']['go_type']  = 'bonus';
+        $push_param['extra']['title']    = "粉丝购物奖励";
+        $push_param['extra']['text']     = $text;
+        $push_param['extra']['show_type']= 'pop';
+
+        $push_param['extra']['url']      = schema_helper::bonus_detail($type_sn);
+        $push_param['extra']['image']    = $invitee_info->avatar();
+
+        QueueClient::push('upushSendMsg',$push_param);
+    }
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
     public static function fcode_unlock($member_id,$num)
     {

+ 5 - 0
helper/schema_helper.php

@@ -27,6 +27,11 @@ class schema_helper
     static public function send_bonus() {
         return self::prefix . "/bonus/send";
     }
+    static public function bonus_detail($type_sn) {
+        $url = BASE_SITE_URL . "/mobile/index.php?act=bonusex&op=open&client_type=wap&type_sn={$type_sn}";
+        $url = urlencode($url);
+        return self::prefix . "/bonus/detail?url={$url}&type_sn={$type_sn}";
+    }
     static public function friends() {
         return self::prefix . "/bonus/friend";
     }

+ 7 - 3
test/TestPush.php

@@ -36,12 +36,15 @@ class TestPush extends PHPUnit_Framework_TestCase
             push_helper::paysuccess_bonus(self::test_android_member_id,100);
             push_helper::paysuccess_bonus(self::test_ios_member_id,100);
         }
-
     }
+
     public function testPaysuccess()
     {
-        push_helper::paysuccess_bonus(self::test_android_member_id,100);
-        push_helper::paysuccess_bonus(self::test_ios_member_id,100);
+        account_helper::onAsyncPaySuccess('270563196360813623');
+    }
+    public function testOrderComplete()
+    {
+        account_helper::onAsyncOrderComplete('270563196360813623');
     }
 
     public function testMessage()
@@ -64,4 +67,5 @@ class TestPush extends PHPUnit_Framework_TestCase
     {
 
     }
+
 }

+ 1 - 5
test/account_helperTest.php

@@ -54,10 +54,6 @@ class account_helperTest extends PHPUnit_Framework_TestCase
     {
         account_helper::order_cancel('8000000000001603',36490);
     }
-    public function testOrderSuccess()
-    {
-        account_helper::onOrderSuccess(6422);
-    }
     public function testPayRefund()
     {
         //account_helper::pay_refund(36490,500,'退款红包');
@@ -65,7 +61,7 @@ class account_helperTest extends PHPUnit_Framework_TestCase
     public function testPaysuccess()
     {
         $pay_sn = '910510761110261481';
-        account_helper::onPaySuccess($pay_sn);
+        account_helper::onAsyncPaySuccess($pay_sn);
     }
     public function testOrderSuccessSys()
     {

+ 1 - 1
test/queueTest.php

@@ -38,7 +38,7 @@ class queueTest extends PHPUnit_Framework_TestCase
     public function testOrderSuccess()
     {
         $mod = Model('order');
-        $pay_sn = '910510761110261481';
+        $pay_sn = '270563196360813623';
         $order_info = $mod->getOrderInfo(array('pay_sn' => $pay_sn));
         $logic_order = Logic('order');
         $result = $logic_order->changeOrderStateReceive($order_info,'system','系统','超期未收货系统自动完成订单');