Explorar o código

add limit bonus

stanley-king %!s(int64=7) %!d(string=hai) anos
pai
achega
996643c705

+ 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)
     {

+ 3 - 3
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;
         }
@@ -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);

+ 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)
             {

+ 26 - 37
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);
@@ -669,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();

+ 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)
         {