浏览代码

Merge branch 'bonus_limit' into bonus_rate

stanley-king 7 年之前
父节点
当前提交
d0c66f29a9

+ 3 - 0
admin/control/person_bonus.php

@@ -163,6 +163,8 @@ class person_bonusControl extends SystemControl
                 if($params == false) {
                     showMessage($error,'index.php?act=person_bonus&op=add','','error');
                 } else {
+                    $client = Logic('queue');
+                    $client->sendBonusAndSMS($params);
                     QueueClient::push('sendBonusAndSMS',$params);
                     showMessage(Language::get('nc_common_save_succ'),'index.php?act=person_bonus&op=add');
                 }
@@ -211,6 +213,7 @@ class person_bonusControl extends SystemControl
         $params['bonus']['rate'] = intval($input['bonus_rate']);;
         $params['bonus']['amount'] = doubleval($input['bonus_amount']);;
         $params['bonus']['bless'] = $input['bonus_bless'];
+        $params['bonus']['can_share'] = intval($input['can_share']);
 
         $params['sms']['open'] = $input['send_sms'] == 'on' ? true : false;
         if($params['sms']['open'])

+ 10 - 0
admin/templates/default/person_bonus.add.php

@@ -38,6 +38,7 @@
             <tr id="tr_memberinfo">
                 <td colspan="2" style="font-weight:bold;" id="td_memberinfo"></td>
             </tr>
+
             <tr>
                 <td colspan="2" class="required"><label><?php echo $lang['admin_points_operatetype']; ?>:</label></td>
             </tr>
@@ -48,6 +49,15 @@
                     </select></td>
                 <td class="vatop tips"></td>
             </tr>
+
+            <tr class="noborder">
+                <td class="vatop rowform"><label>可以分享:  </label><select id="can_share" name="can_share">
+                        <option value="1">是</option>
+                        <option value="0">否</option>
+                    </select></td>
+                <td class="vatop tips"></td>
+            </tr>
+
             <tr>
                 <td colspan="2" class="required"><label>红包祝福语:</label></td>
             </tr>

+ 3 - 1
data/logic/queue.logic.php

@@ -487,6 +487,8 @@ class queueLogic
         $rate    = $params['bonus']['rate'];
         $bless   = $params['bonus']['bless'];
         $amount  = $params['bonus']['amount'];
+        $can_share  = intval($params['bonus']['can_share']);
+
 
         $chunks = array_chunk($members,1000);
         foreach ($chunks as $chunk)
@@ -497,7 +499,7 @@ class queueLogic
             foreach ($chunk as $member) {
                 $ids[] = $member['member_id'];
             }
-            $ret = account_helper::add_bonus($rate,$amount,$ids,$bless);
+            $ret = account_helper::add_bonus($rate,$amount,$ids,$bless,$can_share);
             if($ret == false) continue;
 
             if($fSendSms)

+ 5 - 0
data/model/user_bonus.model.php

@@ -43,6 +43,11 @@ class user_bonusModel extends Model
         $cond = array('user_id' => $member_id,'bonus_status' => 3,'usable_time' => array('gt',time()),'remain_amount' => array('gt','0.00'));
         return $this->getBonusList($cond,'*','usable_time asc');
     }
+    public function getShareableBonus($member_id)
+    {
+        $cond = array('user_id' => $member_id,'bonus_status' => 3,'usable_time' => array('gt',time()),'remain_amount' => array('gt','0.00'),'can_share' => 1);
+        return $this->getBonusList($cond,'*','usable_time asc');
+    }
 
     public function getUsableSum($member_id)
     {

+ 5 - 5
helper/account_helper.php

@@ -87,7 +87,7 @@ class account_helper
     public static function gain_bonus($from_id,$to_id,$amount)
     {
         $pred_from = new predeposit_helper($from_id);
-        $bonus_rate = $pred_from->find_bonus($amount);
+        $bonus_rate = $pred_from->find_share_bonus($amount);
         if($bonus_rate == false) {
             return false;
         }
@@ -113,7 +113,7 @@ class account_helper
     public static function lost_bonus($from_id,$to_id,$amount)
     {
         $pred_from = new predeposit_helper($from_id);
-        $bonus_rate = $pred_from->find_bonus($amount);
+        $bonus_rate = $pred_from->find_share_bonus($amount);
         if($bonus_rate == false) {
             return false;
         }
@@ -217,9 +217,9 @@ class account_helper
         }
     }
 
-    public static function add_bonus($rate,$amount,$member_ids,$type_name)
+    public static function add_bonus($rate,$amount,$member_ids,$type_name,$can_share)
     {
-        $param = \bonus\parameters::admin_fixed(intval($rate),doubleval($amount),count($member_ids),$type_name);
+        $param = bonus\parameters::admin_fixed(intval($rate),doubleval($amount),count($member_ids),$type_name,$can_share);
         $fix_bonus = self::send_bonus($param,$param['rate_money'],$member_ids);
         if($fix_bonus != false) {
             return true;
@@ -245,7 +245,7 @@ class account_helper
     public static function withhold_bonus($rate,$amount,$member_id)
     {
         $rates = [intval($rate) => doubleval($amount)];
-        $ret = bonus_helper::withold($member_id,$rates,bonus_helper::send_bonus_withold);
+        $ret = bonus_helper::withold($member_id,$rates,bonus_helper::pay_order_withold);
         if($ret) {
             $pred = new predeposit_helper($member_id);
             $pred->reduce_pred($amount);

+ 1 - 1
helper/async/broadcast/params_table.php

@@ -19,7 +19,7 @@ class params_table
         $this->mSmstypeParams = [];
         $this->mSmstypeParams[Sms::tpl_new_goods] = [
             'type_bless' => '韩国品牌婵真上架,领红包,愉快购物~',
-            'type_name'  => '购物红包',
+            'type_name'  => '购物红包',
             'push_title' => "收到上新红包",
             'push_text'  => "韩国大牌 婵真 最新入驻,领50元红包,马上尝鲜~",
             'push_url' => ""

+ 24 - 18
helper/bonus/generator.php

@@ -45,6 +45,7 @@ class DirectGenerator extends IGenerator
 
     public function make_bonus($rates)
     {
+
     }
 }
 
@@ -59,8 +60,10 @@ class GeneralGenerator extends IGenerator
     public function make_bonus($rates)
     {
         $paramer = $this->mType->get_param();
+
         $type_id = $this->mType->getType_id();
         $type_sn = $this->mType->getType_sn();
+        $can_share = $this->mType->can_share();
 
         $this->mDatas = [];
 
@@ -74,7 +77,7 @@ class GeneralGenerator extends IGenerator
 
             if($this->mType->isRandomAmount())
             {
-                $this->random($type_id,$type_sn,$paramer['min_amount'],$amount,$num,$rate,$min_tmp,$max_tmp);
+                $this->random($type_id,$type_sn,$paramer['min_amount'],$amount,$num,$rate,$can_share,$min_tmp,$max_tmp);
                 if($min_val == -1) {
                     $min_val = $min_tmp;
                 }
@@ -98,7 +101,7 @@ class GeneralGenerator extends IGenerator
             else
             {
                 $fixed_money =  $amount;
-                $this->general($type_id,$type_sn,$num,$fixed_money,$rate);
+                $this->general($type_id,$type_sn,$num,$fixed_money,$rate,$can_share);
             }
         }
 
@@ -135,37 +138,40 @@ class GeneralGenerator extends IGenerator
         return $ret;
     }
 
-    private function random($type_id,$type_sn,$min_amount,$amount,$num,$rate,&$min_val,&$max_val)
+    private function random($type_id,$type_sn,$min_amount,$amount,$num,$rate,$can_share,&$min_val,&$max_val)
     {
         $allocator = new allocator();
         $moneys = $allocator->separate_money($min_amount,$amount,$num,$min_val,$max_val);
 
         foreach($moneys as $val)
         {
-            $item = array('bonus_sn' => make_bonus_sn(),
-                'bonus_value' => $val,
-                'remain_amount' => $val,
-                'type_id' => $type_id,
-                'bonus_status' => 0,
-                'bonus_rate' => $rate,
-                'type_sn' => $type_sn);
+            $item =['bonus_sn' => make_bonus_sn(),
+                    'bonus_value' => $val,
+                    'remain_amount' => $val,
+                    'type_id' => $type_id,
+                    'bonus_status' => 0,
+                    'bonus_rate' => $rate,
+                    'type_sn' => $type_sn,
+                    'can_share' => $can_share];
 
             $this->mDatas[] = $item;
         }
     }
 
-    private function general($type_id,$type_sn,$total_num,$fixed_money,$rate)
+    private function general($type_id,$type_sn,$total_num,$fixed_money,$rate,$can_share)
     {
         $val =  $fixed_money;
         for($i = 0; $i < $total_num; $i++)
         {
-            $item = array( 'bonus_sn' => make_bonus_sn(),
-                'bonus_value' => $val,
-                'remain_amount' => $val,
-                'type_id' => $type_id,
-                'bonus_status' => 0,
-                'bonus_rate' => $rate,
-                'type_sn' => $type_sn);
+            $item =['bonus_sn' => make_bonus_sn(),
+                    'bonus_value' => $val,
+                    'remain_amount' => $val,
+                    'type_id' => $type_id,
+                    'bonus_status' => 0,
+                    'bonus_rate' => $rate,
+                    'type_sn' => $type_sn,
+                    'can_share' => $can_share];
+
             $this->mDatas[] = $item;
         }
     }

+ 2 - 1
helper/bonus/parameters.php

@@ -343,7 +343,7 @@ class parameters
         return $params;
     }
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-    public static function admin_fixed($rate,$amount,$num,$type_name)
+    public static function admin_fixed($rate,$amount,$num,$type_name,$can_share = 1)
     {
         $param['make_type'] = type::MakeSendType;
         $param['type_name'] = empty($type_name) ? "系统红包" : $type_name;
@@ -352,6 +352,7 @@ class parameters
         $param['sender_id']   = self::admin_member_id;
         $param['sender_name'] = self::admin_name;
         $param['usable_days'] = self::usable_days;
+        $param['can_share']   = $can_share;
         $param['rate_money'][] = ['amount' => $amount,'num' => $num, 'rate' => $rate];
 
         return $param;

+ 9 - 1
helper/bonus/type.php

@@ -141,6 +141,12 @@ class type
         } else {
             $this->mParam['grab_type'] = intval($param['grab_type']);
         }
+
+        if(!isset($param['can_share'])) {
+            $this->mParam['can_share'] = 1;
+        } else {
+            $this->mParam['can_share'] = intval($param['can_share']);
+        }
     }
 
     private function fill_total($send_type,$param)
@@ -416,7 +422,9 @@ class type
     public function usable_days() {
         return intval($this->mParam['usable_days']);
     }
-    
+    public function can_share() {
+        return intval($this->mParam['can_share']);
+    }
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     static public function crate_by_input($paramer)
     {

+ 8 - 0
helper/bonus/user_bonus.php

@@ -64,6 +64,14 @@ class user_bonus
             return intval($this->mParamer['bonus_status']);
         }
     }
+    public function can_share() {
+        return intval($this->mParamer['can_share']) == 1;
+    }
+
+    public function client_can_share() {
+        return (!$this->expired() && $this->can_share() && $this->spend_over() == false && $this->isBinded());
+    }
+
     public function can_shake() {
         $status = intval($this->mParamer['bonus_status']);
         return ($status == self::GrabStatus || $status == self::BindStatus);

+ 12 - 2
helper/bonus/witholder.php

@@ -93,6 +93,7 @@ class witholder
 
                 $param = $bonus->get_param();
                 $param['remain_amount'] = $left;
+
                 if($this->mUsedType == bonus_helper::send_bonus_withold) {
                     $send = intval($bonus->send_amount() * 100 + 0.5);
                     $send = $send + $money;
@@ -105,6 +106,9 @@ class witholder
                     $paied = $paied / 100;
                     $param['pay_amount'] = $paied;
                 }
+                else {
+
+                }
                 QueueClient::push("onUseBonus",['time' => time(),'use_type' => $this->mUsedType,'rate' => $rate,'amount' => $money / 100,'member_id' => $this->member_id]);
 
                 $this->mod_bonus->replace($param);
@@ -133,9 +137,12 @@ class witholder
         foreach ($bonuses as $bonus)
         {
             if($left <= 0) break;
+            if($this->mUsedType == bonus_helper::send_bonus_withold && $bonus->can_share() == false) {
+                continue;
+            }
 
-            $rate = $bonus->bonus_rate();
-            $param = $bonus->get_param();
+            $rate   = $bonus->bonus_rate();
+            $param  = $bonus->get_param();
             $remain = $bonus->remain_amount();
             $remain = intval($remain * 100 + 0.5);
 
@@ -162,6 +169,9 @@ class witholder
                 $paied = $paied / 100;
                 $param['pay_amount'] = $paied;
             }
+            else {
+
+            }
 
             QueueClient::push("onUseBonus",['time' => time(),'use_type' => $this->mUsedType,'rate' => $rate,'amount' => $used / 100,'member_id' => $this->member_id]);
             array_push($datas,$param);

+ 49 - 31
helper/predeposit_helper.php

@@ -219,7 +219,8 @@ class predeposit_helper
 {
     private $model_pd;
     private $member_id;
-    private $mRates;
+    private $mPayRates;
+    private $mShareRates;
     private $mBonusState;
     private $mRateVersion; //用来记录,红包过期带来的红包变化
 
@@ -247,8 +248,9 @@ class predeposit_helper
             }
             else
             {
-                if(isset($_SESSION['bonus_rate']) && isset($_SESSION['bonus_state'])) {
-                    $this->mRates = new RateMoney($_SESSION['bonus_rate']);
+                if(isset($_SESSION['bonus_rate']) && isset($_SESSION['bonus_state']) && isset($_SESSION['share_bonus_rate'])) {
+                    $this->mPayRates = new RateMoney($_SESSION['bonus_rate']);
+                    $this->mShareRates = new RateMoney($_SESSION['share_bonus_rate']);
                     $this->mBonusState = $_SESSION['bonus_state'];
                 } else {
                     $fUpdate = true;
@@ -259,10 +261,16 @@ class predeposit_helper
         if($fUpdate || $this->need_update())
         {
             $mod_bonus = Model('user_bonus');
-            $this->mRates = new RateMoney(array());
-            $items = $mod_bonus->getUsableBonus($this->member_id);
-            $this->mRates->add_bonuses($items);
-            $bonus_rate = $this->mRates->format();
+            $this->mPayRates = new RateMoney(array());
+            $pay_items = $mod_bonus->getUsableBonus($this->member_id);
+            $this->mPayRates->add_bonuses($pay_items);
+            $pay_bonus_rate = $this->mPayRates->format();
+
+            $this->mShareRates = new RateMoney(array());
+            $share_items = $mod_bonus->getShareableBonus($this->member_id);
+            $this->mShareRates->add_bonuses($share_items);
+            $share_bonus_rate = $this->mShareRates->format();
+
 
             $this->mBonusState = [];
             $querys = array('usable','expiring','used','expired');
@@ -275,8 +283,10 @@ class predeposit_helper
                 }
                 $this->mBonusState[$state] = doubleval($sum);
             }
-            $this->write_rates($this->mBonusState,$bonus_rate);
-            $this->mRates->clean();
+
+            $this->write_rates($this->mBonusState,$pay_bonus_rate,$share_bonus_rate);
+            $this->mPayRates->clean();
+            $this->mShareRates->clean();
             $_SESSION['bonus_update_time'] = time();
         }
     }
@@ -295,20 +305,26 @@ class predeposit_helper
 
     public function __destruct()
     {
-        if($this->mRates != null && $this->mRates->dirty()) {
+        if($this->mPayRates != null && $this->mPayRates->dirty()) {
+            $this->del_rates();
+        }
+        if($this->mShareRates != null && $this->mShareRates->dirty()) {
             $this->del_rates();
         }
     }
 
-    public function bonus_rate() {
-        return $this->mRates;
+    public function pay_bonus_rates() {
+        return $this->mPayRates;
+    }
+    public function share_bonus_rates() {
+        return $this->mShareRates;
     }
 
     static public function order_cash($goods_amount, &$rates)
     {
         if(isset($_SESSION['bonus_rate']) == false) {
             $pred = new predeposit_helper($_SESSION['member_id']);
-            $bonus_rate = $pred->bonus_rate();
+            $bonus_rate = $pred->pay_bonus_rates();
         } else {
             $bonus_rate = new RateMoney($_SESSION['bonus_rate']);
         }
@@ -322,7 +338,7 @@ class predeposit_helper
         {
             if(isset($_SESSION['bonus_rate']) == false) {
                 $pred = new predeposit_helper($_SESSION['member_id']);
-                $bonus_rate = $pred->bonus_rate();
+                $bonus_rate = $pred->pay_bonus_rates();
             } else {
                 $bonus_rate = new RateMoney($_SESSION['bonus_rate']);
             }
@@ -392,10 +408,11 @@ class predeposit_helper
         return $cond;
     }
 
-    private function write_rates($bonus_state,$bonus_rate)
+    private function write_rates($bonus_state, $pay_bonus_rate,$share_bonus_rate)
     {
         $_SESSION['bonus_state'] = $bonus_state;
-        $_SESSION['bonus_rate'] = $bonus_rate;
+        $_SESSION['bonus_rate']  = $pay_bonus_rate;
+        $_SESSION['share_bonus_rate']   = $share_bonus_rate;
         $_SESSION['bonus_rate_version'] = $this->mRateVersion;
     }
 
@@ -407,7 +424,9 @@ class predeposit_helper
         if(isset($_SESSION['bonus_rate'])) {
             unset($_SESSION['bonus_rate']);
         }
-
+        if(isset($_SESSION['share_bonus_rate'])) {
+            unset($_SESSION['share_bonus_rate']);
+        }
         if(isset($_SESSION['bonus_rate_version'])) {
             unset($_SESSION['bonus_rate_version']);
         }
@@ -425,21 +444,21 @@ class predeposit_helper
 
     public function total_bonus()
     {
-        return $this->mRates->total();
+        return $this->mPayRates->total();
     }
 
     public function is_enough($money) {
         return intval($this->total_bonus() * 100) >= intval($money * 100);
     }
 
-    public function person_enough($money,&$bonus_rate)
+    public function share_enough($money, &$bonus_rate)
     {
-        if($this->mRates == null) return false;
-        return $this->mRates->is_enough($bonus_rate,$money);
+        if($this->mPayRates == null) return false;
+        return $this->mShareRates->is_enough($bonus_rate,$money);
     }
 
     public function rates() {
-        return $this->mRates == null ? false : $this->mRates;
+        return $this->mPayRates == null ? false : $this->mPayRates;
     }
 
     public function makeby_bonus($param, $rate_moneys, $bonus_sn)
@@ -458,7 +477,7 @@ class predeposit_helper
         $this->handout_bonus($money,$type_sn,session_helper::nickname(),"发送了{$money}元的红包.",\bonus\type::MakeSendType);
 
         foreach ($rate_moneys as $item) {
-            $this->mRates->with_hold($item['rate'],$item['amount']);
+            $this->mPayRates->with_hold($item['rate'],$item['amount']);
         }
 
         return $result;
@@ -482,7 +501,7 @@ class predeposit_helper
         $this->handout_bonus($money,$type_sn,session_helper::nickname(),"发送了{$money}元的红包.",\bonus\type::MakeSendType);
 
         foreach ($rate_moneys as $item) {
-            $this->mRates->with_hold($item['rate'],$item['amount']);
+            $this->mPayRates->with_hold($item['rate'],$item['amount']);
         }
 
         return $result;
@@ -506,7 +525,7 @@ class predeposit_helper
         $this->handout_bonus($money,$type_sn,session_helper::nickname(),"发送了{$money}元的红包.",\bonus\type::MakeSendType);
 
         foreach ($rate_moneys as $item) {
-            $this->mRates->with_hold($item['rate'],$item['amount']);
+            $this->mPayRates->with_hold($item['rate'],$item['amount']);
         }
 
         return $result;
@@ -556,8 +575,7 @@ class predeposit_helper
         }
         else
         {
-            if(bonus_helper::withold_bonus($this->member_id,$bonus->bonus_rate(),
-                $bonus_sn,$type->getTotal_amount(),bonus_helper::send_bonus_withold))
+            if(bonus_helper::withold_bonus($this->member_id,$bonus->bonus_rate(),$bonus_sn,$type->getTotal_amount(),bonus_helper::send_bonus_withold))
             {
                 $type_sn = $result['type_sn'];
                 $money = $result['money'];
@@ -855,7 +873,7 @@ class predeposit_helper
 
     public function calc_rates($order_pd_amount)
     {
-        $rates = $this->mRates->calc_rates($order_pd_amount);
+        $rates = $this->mPayRates->calc_rates($order_pd_amount);
         return $rates;
     }
 
@@ -874,7 +892,7 @@ class predeposit_helper
             }
         }
 
-        $pred_amount = $pred_amount - $this->mRates->calc_money($pred_amount,$rates);
+        $pred_amount = $pred_amount - $this->mPayRates->calc_money($pred_amount,$rates);
         $cur_used = intval($pred_amount * 100 + 0.5);
         $cur_used = $cur_used > $pd_amount  ? $pd_amount : $cur_used;
 
@@ -909,9 +927,9 @@ class predeposit_helper
         return $ret;
     }
 
-    public function find_bonus($amount)
+    public function find_share_bonus($amount)
     {
-        $bonus_rate = $this->bonus_rate();
+        $bonus_rate = $this->share_bonus_rates();
         return $bonus_rate->find_rate($amount);
     }
 

+ 1 - 1
helper/ugc/setting.php

@@ -59,7 +59,7 @@ class bonus_builder
         $type = bonus_helper::create_type_input($param);
         $pred = new predeposit_helper($_SESSION['member_id']);
 
-        if(!$pred->person_enough($type->getTotal_amount(),$this->rate)) {
+        if(!$pred->share_enough($type->getTotal_amount(),$this->rate)) {
             return false;
         }
 

+ 1 - 1
mobile/control/cart.php

@@ -70,7 +70,7 @@ class cartControl extends mobileControl
         if($_SESSION['is_login'] == 1)
         {
             $pred = new predeposit_helper($_SESSION['member_id']);
-            $bonus_rate = $pred->bonus_rate();
+            $bonus_rate = $pred->pay_bonus_rates();
 
             if($bonus_rate != null)
             {

+ 63 - 83
mobile/control/member_bonus.php

@@ -52,32 +52,34 @@ class member_bonusControl extends mbMemberControl
         }
 
         $result = array_merge($result,$bonus_state);
-        $bonus_rate = $this->mPred->bonus_rate();
 
-        if($bonus_rate != null)
+        $result['bonus_rate'] = $this->format_rates($this->mPred->pay_bonus_rates());
+        $result['share_bonus_rate'] = $this->format_rates($this->mPred->share_bonus_rates());
+
+        $result['send_bless'] = $this->cur_bless();
+        $result['avatar'] = session_helper::avatar();
+        $result['sub_titles'] = ['shake' => '','invite' => '赚百分百红包','friends' => '','bonus_detail' => $warning];
+        $this->update_available_bonus($result['bonus_total']);
+
+        return self::outsuccess($result);
+    }
+
+    private function format_rates($bonus_rate)
+    {
+        if ($bonus_rate != null)
         {
             $rates = $bonus_rate->format();
             $rates_money = [];
             foreach ($rates as $rate => $money) {
-                $item['rate']  = $rate;
+                $item['rate'] = $rate;
                 $item['total'] = $money;
                 $rates_money[] = $item;
             }
-        } else {
-            $rates_money = null;
         }
-
-        if(empty($rates_money)) {
-            $result['bonus_rate'] = null;
-        } else {
-            $result['bonus_rate'] = $rates_money;
+        else {
+            $rates_money = null;
         }
-        $result['send_bless'] = $this->cur_bless();
-        $result['avatar'] = session_helper::avatar();
-        $result['sub_titles'] = ['shake' => '','invite' => '赚百分百红包','friends' => '','bonus_detail' => $warning];
-        $this->update_available_bonus($result['bonus_total']);
-
-        return self::outsuccess($result);
+        return $rates_money;
     }
 
     private function update_available_bonus($amount)
@@ -128,26 +130,10 @@ class member_bonusControl extends mbMemberControl
 
         $bonus_state = $this->mPred->bonus_state();
         $result = array_merge($result,$bonus_state);
-        $bonus_rate = $this->mPred->bonus_rate();
 
-        if($bonus_rate != null)
-        {
-            $rates = $bonus_rate->format();
-            $rates_money = [];
-            foreach ($rates as $rate => $money) {
-                $item['rate']  = $rate;
-                $item['total'] = $money;
-                $rates_money[] = $item;
-            }
-        } else {
-            $rates_money = null;
-        }
+        $result['bonus_rate'] = $this->format_rates($this->mPred->pay_bonus_rates());
+        $result['share_bonus_rate'] = $this->format_rates($this->mPred->share_bonus_rates());
 
-        if(empty($rates_money)) {
-            $result['bonus_rate'] = null;
-        } else {
-            $result['bonus_rate'] = $rates_money;
-        }
         $result['avatar'] = session_helper::avatar();
         $result['sub_titles'] = ['shake' => '偷点地主家的余粮','invite' => '赚百分百红包','friends' => ''];
         $result['shake_sub']  = "偷点地主家的余粮";
@@ -186,7 +172,7 @@ class member_bonusControl extends mbMemberControl
         $param = $this->fill_param($_GET,$bonus_rate);
         $type = bonus_helper::create_type_input($param);
 
-        if(!$this->mPred->person_enough($type->getTotal_amount(),$bonus_rate)) {
+        if(!$this->mPred->share_enough($type->getTotal_amount(),$bonus_rate)) {
             return self::outerr(errcode::ErrBonusNotEnough,'余额不够发送红包');
         }
 
@@ -339,7 +325,7 @@ class member_bonusControl extends mbMemberControl
 
     public function match_goodsOp()
     {
-        $bonus_rate = $this->mPred->bonus_rate();
+        $bonus_rate = $this->mPred->pay_bonus_rates();
         $rate_moneys = $bonus_rate->format();
         $price = bonus_helper::match_price($rate_moneys);
 
@@ -442,6 +428,9 @@ class member_bonusControl extends mbMemberControl
         if($bonus->expired()) {
             return self::outerr(errcode::ErrBonus,"该红包已经过期,不能再发送.");
         }
+        if(!$bonus->can_share()) {
+            return self::outerr(errcode::ErrBonus,"该红包只可用于购物,不能分享.");
+        }
 
         $param = $this->fill_param($_GET,$bonus->bonus_rate());
         $type = bonus_helper::create_type_input($param);
@@ -577,17 +566,17 @@ class member_bonusControl extends mbMemberControl
             $item["send_type"] = $type->send_type();
 
             if($type->make_type() == bonus\type::MakeInviteType) {
-                $item["sender_name"] = "邀请好友红包";
+                $item["title"] = "邀请好友红包";
             }
             else
             {
                 if($type->isFixedAmount()) {
-                    $item["sender_name"] = "普通红包";
+                    $item["title"] = "普通红包";
                 } else {
-                    $item["sender_name"] = "拼手气红包";
+                    $item["title"] = "拼手气红包";
                 }
             }
-            //$item["sender_name"] = $type->sender_name();
+            $item['sender_name'] = $item['title'];
             $item["total_amount"] = $type->getTotal_amount();
             $item["total_num"] = $type->getTotal_num();
             $item["remain_amount"] = $type->remain_amount();
@@ -596,8 +585,10 @@ class member_bonusControl extends mbMemberControl
             $item["send_start_date"] = $type->get_start_time();
             $item["send_end_date"] = $type->get_end_time();
             $item["make_type"] = $type->make_type();
+
             $item["is_end"] = $type->isEnd();
-            $item["binded_over"] = $type->getTotal_num() == $type->binded_num();
+            $item["binded_over"] = $type->binded_over();
+            $item['can_share'] = !$type->isEnd() && !$type->binded_over();
 
             $type_sn = $type->getType_sn();
             $open_url   = BASE_SITE_URL . "/mobile/index.php?act=bonusex&op=open&client_type=wap&type_sn={$type_sn}";
@@ -614,48 +605,34 @@ class member_bonusControl extends mbMemberControl
 
     private function tip_block($state,$count)
     {
-        if(is_publish())
-        {
-            if($state == 'usable') {
-                $special_id = $count > 0 ? 151 : 149;
-            }
-            elseif($state == 'expiring') {
-                $special_id = $count > 0 ? 150 : 150;
-            }
-            elseif($state == 'used') {
-                $special_id = 153;
-            }
-            elseif($state == 'expired') {
-                $special_id = 0;
-            }
-            elseif($state == 'send') {
-                $special_id = $count == 0 ? 152 : 0;
-            }
-            else {
-                $special_id = 0;
-            }
+        global $config;
+        $banners = $config['bonus_detail_banner'];
+
+        if($state == 'usable') {
+            $key = 'usable';
         }
-        else
-        {
-            if($state == 'usable') {
-                $special_id = $count > 0 ? 151 : 149;
-            }
-            elseif($state == 'expiring') {
-                $special_id = $count > 0 ? 150 : 150;
-            }
-            elseif($state == 'used') {
-                $special_id = 153;
-            }
-            elseif($state == 'expired') {
-                $special_id = 0;
-            }
-            elseif($state == 'send') {
-                $special_id = $count == 0 ? 152 : 0;
-            }
-            else {
-                $special_id = 0;
-            }
+        elseif($state == 'expiring') {
+            $key = 'expiring';
+        }
+        elseif($state == 'used') {
+            $key = 'used';
+        }
+        elseif($state == 'expired') {
+            $key = 'expired';
         }
+        elseif($state == 'send') {
+            $key = 'send';
+        }
+        else {
+            $key = '';
+        }
+
+        if(!empty($key)) {
+            $special_id = $count <= 0 ? $banners[$key][0] : $banners[$key][1];
+        } else {
+            $special_id = 0;
+        }
+
         if($special_id == 0) return false;
 
         $helper = new special_formater($special_id);
@@ -681,7 +658,7 @@ class member_bonusControl extends mbMemberControl
             foreach ($items as $item)
             {
                 $bonus = bonus\user_bonus::create_by_param($item);
-                $type = bonus\type::create_by_sn($bonus->type_sn());
+                $type  = bonus\type::create_by_sn($bonus->type_sn());
                 $user_id = $type->sender_id();
                 $member = new member_info($user_id);
                 $avatar = $member->avatar();
@@ -925,6 +902,8 @@ class member_bonusControl extends mbMemberControl
             $item['expired'] = $user_bonus->expired();
             $item['spend_over'] = $user_bonus->spend_over();
             $item['get_time'] = $user_bonus->get_time();
+            $item['can_share'] = $user_bonus->client_can_share();
+
             $bonus_rate = $user_bonus->bonus_rate();
             $item['bonus_rate'] = empty($bonus_rate)  ? 30 : $bonus_rate;
 
@@ -933,7 +912,8 @@ class member_bonusControl extends mbMemberControl
             }
 
             $type = $types[$user_bonus->type_id()];
-            $item['sender_name'] = $this->show_name($type);//$type->sender_name();
+            $item['sender_name'] = $this->show_name($type);
+            $item['title'] = $this->show_name($type);
             $item['rand_type']  = $type->isRandomAmount();
             $item['total_num']  = $type->getTotal_num();
             $item['binded_num'] = $type->binded_num();

+ 1 - 1
mobile/control/member_ugc.php

@@ -501,7 +501,7 @@ class member_ugcControl extends specialControl
     {
         $this->need_login();
         $pred = new predeposit_helper($_SESSION['member_id']);
-        $bonus_rate = $pred->bonus_rate();
+        $bonus_rate = $pred->pay_bonus_rates();
 
         if($bonus_rate != null)
         {