huangdong il y a 6 ans
Parent
commit
f4918b8022

+ 1 - 1
helper/bonus/BonusAmount.php

@@ -56,7 +56,7 @@ class BonusAmount implements IMoneyCalc
     public function find_rate($amount)
     {
         if ($this->is_enough($rate, $amount)) {
-            return ['rate' => defaultBonusRate(), 'amount' => intval($this->mAmount * 100 + 0.5) / 100];
+            return ['rate' => defaultBonusRate(), 'amount' => intval($amount * 100 + 0.5) / 100];
         } else {
             $amount = intval($amount * 100 + 0.5);
             return ['rate' => $rate, 'amount' => $amount / 100];

+ 21 - 13
helper/bonus/account.php

@@ -201,15 +201,10 @@ class account implements IPriceCalculate
             $this->mPayRates->add_bonuses($pay_items);
             $pay_bonus_rate = $this->mPayRates->format();
 
-            if(usedBonusRate()) {
-                $this->mShareRates = self::create_moneycalc(array());
-                $share_items = $mod_bonus->getShareableBonus($this->member_id);
-                $this->mShareRates->add_bonuses($share_items);
-                $share_bonus_rate = $this->mShareRates->format();
-            } else {
-                $this->mShareRates = $this->mPayRates;
-                $share_bonus_rate = $pay_bonus_rate;
-            }
+            $this->mShareRates = self::create_moneycalc(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');
@@ -634,7 +629,7 @@ class account implements IPriceCalculate
         $mine_cent = intval($this->total_bonus() * 100 + 0.5);
 
         if($mine_cent >= $need_cent) {
-            $result['available_bonus'] = $need_cent / 100;
+            $result['user_bonus'] = $need_cent / 100;
             $result['show_room'] = false;
             $result['room_bonus'] = 0;
             $result['rooms'] = [];
@@ -661,13 +656,26 @@ class account implements IPriceCalculate
     {
         $ways = $this->bonus_way($bonus_amount);
         if($ways['show_room'] == false || $roomid <= 0) {
-            return ['user_bonus' => $ways['available_bonus']];
+            return ['user_bonus' => $ways['user_bonus']];
         }
 
         $room_val = 0;
-        foreach ($ways['rooms'] as $room)
+        $roomid = intval($roomid);
+
+        if($roomid > 0)
+        {
+            foreach ($ways['rooms'] as $room)
+            {
+                if($roomid == $room['room_id']) {
+                    $room_val = $ways['room_bonus'];
+                    break;
+                }
+            }
+        }
+        else
         {
-            if($roomid == $room['room_id']) {
+            foreach ($ways['rooms'] as $room) {
+                $roomid = $room['room_id'];
                 $room_val = $ways['room_bonus'];
                 break;
             }

+ 15 - 15
helper/bonus/parameters.php

@@ -532,24 +532,24 @@ class sys_bonus
     {
         $result = [];
         {
-            $item['amount'] = 50;
-            $item['num'] = 10;
+            $item['amount'] = 200;
+            $item['num'] = 100;
             $item['rate'] = 50;
             $result[] = $item;
         }
-        {
-            $item['amount'] = 100;
-            $item['num'] = 20;
-            $item['rate'] = 40;
-            $result[] = $item;
-        }
-        {
-            $item['amount'] = 850;
-            $item['num'] = 70;
-            $item['rate'] = 30;
-            $result[] = $item;
-        }
-
+//        {
+//            $item['amount'] = 100;
+//            $item['num'] = 20;
+//            $item['rate'] = 40;
+//            $result[] = $item;
+//        }
+//        {
+//            $item['amount'] = 850;
+//            $item['num'] = 70;
+//            $item['rate'] = 30;
+//            $result[] = $item;
+//        }
+        
         return $result;
     }
 

+ 1 - 1
helper/bonus/type.php

@@ -424,7 +424,7 @@ class type
         return intval($this->mParam['usable_days']);
     }
     public function can_share() {
-        return usedBonusRate() ? intval($this->mParam['can_share']) : true;
+        return intval($this->mParam['can_share']);
     }
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     static public function create_by_input($paramer)

+ 1 - 1
helper/bonus/user_bonus.php

@@ -65,7 +65,7 @@ class user_bonus
         }
     }
     public function can_share() {
-        return usedBonusRate() ? intval($this->mParamer['can_share']) == 1 : true;
+        return intval($this->mParamer['can_share']) == 1;
     }
 
     public function client_can_share() {

+ 5 - 5
helper/buy_first.php

@@ -74,8 +74,8 @@ class buy_first
         $total_bonus = $this->mPriceCalculate->bonus_amount($bonusable_goods_amount,$lowest_price_amount);
         $ways = $this->mPriceCalculate->bonus_way($total_bonus);
 
-        $result['available_bonus'] = $ways['available_bonus'];
-        $result['available_pred']  = $ways['available_bonus'];
+        $result['user_bonus'] = $ways['user_bonus'];
+        $result['available_pred']  = $ways['user_bonus'] + $ways['room_bonus'];
 
         $result['show_room']  = $ways['show_room'];
         $result['room_bonus'] = $ways['room_bonus'];
@@ -98,15 +98,15 @@ class buy_first
             }
             $result['discount_gap'] = $discount_gap;
         }
-        $result['bonus_rates'] = $this->formate_rates([ 30 => $result['available_bonus'] ]);
+        $result['bonus_rates'] = $this->formate_rates([ 30 => $result['user_bonus'] + $result['room_bonus']]);
         $result['earn_bonus'] = $config['bonus_gap']['earn_bonus'];
 
         $result['usable_pred'] = true;
-        $result['pay_cash_pred']   = $result['goods_amount'] + $result['freight'] - $result['full_discount'] - $result['available_bonus'] - $result['opgoods_discount'] - $result['room_bonus'];
+        $result['pay_cash_pred']   = $result['goods_amount'] + $result['freight'] - $result['full_discount'] - $result['opgoods_discount'] - $result['user_bonus'] - $result['room_bonus'];
         $result['pay_cash_nopred'] = $result['goods_amount'] + $result['freight'] - $result['full_discount'] - $result['opgoods_discount'];
 
         //购物车显示应付现金
-        $result['pay_car_pred'] = $result['goods_amount'] - $result['full_discount'] - $result['available_bonus'] - $result['opgoods_discount'] - $result['room_bonus'];
+        $result['pay_car_pred'] = $result['goods_amount'] - $result['full_discount'] - $result['user_bonus'] - $result['opgoods_discount'] - $result['room_bonus'];
         //商品总价
         $result['pay_car_nopred'] = $result['goods_amount'] - $result['full_discount'] - $result['opgoods_discount'];
 

+ 2 - 2
helper/model/goods_summary.php

@@ -79,7 +79,7 @@ class goods_summary
         return ($add_time > $start);
     }
 
-    public function format(&$act_type, &$act_id,user_session\favorite $favorate,user_session\anotice $anotice,$main_page)
+    public function format(&$act_type, &$act_id, user_session\favorite $favorate, user_session\anotice $anotice, $main_image)
     {
         $summary = [];
 
@@ -107,7 +107,7 @@ class goods_summary
         $summary['goods_promotion_price'] = $this->goods_info['goods_promotion_price'];
         $summary['goods_lowest_price'] = $this->goods_info['goods_lowest_price'];
 
-        if($main_page)
+        if($main_image)
         {
             $image = commonid_helper::instance()->main_image($summary['goods_id']);
             if(empty($image)) {

+ 2 - 1
helper/order_helper.php

@@ -801,7 +801,6 @@ class order_helper extends order_base
         $result["order_amount"] = doubleval($order["order_amount"]);
         $result["rcb_amount"] = doubleval($order["rcb_amount"]);
         $result["pd_amount"] = doubleval($order["pd_amount"]);
-        $result['bonus_rates'] = $this->formate_rates(unserialize($order["bonus_rate"]),doubleval($order["pd_amount"]));
         $result["shipping_fee"] = doubleval($order["shipping_fee"]);
         $result["evaluation_state"] = intval($order["evaluation_state"]);
         $result["order_state"] = intval($order["order_state"]);
@@ -831,6 +830,8 @@ class order_helper extends order_base
             $result['show_room'] = false;
         }
 
+        $result['bonus_rates'] = $this->formate_rates([],$user_bonus + $room_bonus);
+
         $result['pay_cash'] = $result["order_amount"] - $result["pd_amount"] - $bonus_total;
         $result['full_discount'] = $result["goods_amount"] - $order["goods_amount"];
         $result['full_desc'] = $this->full_desc($order);

+ 24 - 10
helper/shaker_helper.php

@@ -7,8 +7,6 @@
  * Time: 上午11:33
  */
 
-use bonus\account;
-
 require_once (BASE_ROOT_PATH . '/helper/account_helper.php');
 require_once (BASE_ROOT_PATH . '/helper/bonus_helper.php');
 
@@ -47,7 +45,7 @@ class friend
 
 class gain_policy
 {
-    const max_amount = 10;
+    const max_amount = 5;
 
     private $strength;
     private $total_amount;
@@ -76,19 +74,19 @@ class gain_policy
     private function scale()
     {
         if($this->strength == 5) {
-            $start = 0.8;
+            $start = 0.4;
             $end = 1.0;
         }
         elseif ($this->strength == 4) {
-            $start = 0.6;
+            $start = 0.3;
             $end = 0.8;
         }
         elseif ($this->strength == 3) {
-            $start = 0.4;
+            $start = 0.2;
             $end = 0.6;
         }
         elseif ($this->strength == 2) {
-            $start = 0.2;
+            $start = 0.1;
             $end = 0.4;
         }
         elseif ($this->strength == 1) {
@@ -100,7 +98,7 @@ class gain_policy
         }
 
         $start = intval($start * 100 + 0.5);
-        $end = intval($end * 100 + 0.5);
+        $end   = intval($end * 100 + 0.5);
 
         $ret = mt_rand($start,$end);
         return $ret / 100;
@@ -136,6 +134,7 @@ class shaker_helper
                 $err = array('code' => errcode::ErrShake, 'msg' => self::err_msg);
                 return false;
             }
+            Log::record(__METHOD__ . " gain amount={$value}",Log::DEBUG);
 
             $bonus = account_helper::gain_bonus($user_id, $_SESSION['member_id'], $value);
             if($bonus != false) {
@@ -160,6 +159,7 @@ class shaker_helper
                     $err = array('code' => errcode::ErrShake, 'msg' => self::err_msg);
                     return false;
                 }
+                Log::record(__METHOD__ . " lost amount={$value}",Log::DEBUG);
 
                 $bonus = account_helper::gain_system($_SESSION['member_id'], $value);
                 if($bonus != false) {
@@ -174,7 +174,7 @@ class shaker_helper
 
     private function lost(&$err)
     {
-        $pred = new account($_SESSION['member_id']);
+        $pred = new bonus\account($_SESSION['member_id']);
         $total_amount = $pred->total_bonus();
 
         if(intval($total_amount * 100 + 0.5) <= 0) {
@@ -241,6 +241,20 @@ class shaker_helper
         }
     }
 
+    private function calc_strength($strength)
+    {
+        while (true)
+        {
+            $strength = intval($strength + 0.5);
+            if($strength >= 10) {
+                $strength = intval($strength + 0.5) / 10;
+            } else {
+                break;
+            }
+        }
+        return $strength;
+    }
+
     public function shake($strength,&$err)
     {
         if($this->can_shake() == false) {
@@ -249,7 +263,7 @@ class shaker_helper
             return false;
         }
 
-        $this->strength = $strength;
+        $this->strength = $this->calc_strength($strength);
         $direct = $this->direction();
         if($direct == self::direct_gain) {
             $bonuses = $this->gain($err);

+ 3 - 1
mac_start.sh

@@ -1,11 +1,13 @@
 #! /bin/sh
 #sudo /usr/local/mysql/support-files/mysql.server restart
 sudo pkill nginx
+sleep 1
 sudo nginx
-#nginx
 sudo pkill php-fpm
+sleep 1
 php-fpm
 sudo pkill redis-server
+sleep 1
 sudo redis-server /etc/redis/6379.conf
 sudo redis-server /etc/redis/6380.conf
 sudo pkill -9 $(pidof python)

+ 1 - 1
mobile/control/member_bonus.php

@@ -1083,7 +1083,7 @@ class member_bonusControl extends mbMemberControl
 
     public function shakeOp()
     {
-        if(!isset($_POST['strength']) || empty($_POST['strength'])) {
+        if(!isset($_POST['strength']) || !empty($_POST['strength'])) {
             $strength = intval($_POST['strength']);
         } else {
             $strength = 3;

+ 0 - 1
mobile/control/member_buy.php

@@ -223,7 +223,6 @@ class member_buyControl extends mbMemberControl
         }
     }
 
-
     public function pay_confirmOp()
     {
         $pay_sn = $_GET['pay_sn'];

+ 44 - 1
test/TestOrder.php

@@ -155,7 +155,6 @@ class TestOrder extends PHPUnit_Framework_TestCase
     public function testRefund()
     {
         //SELECT * FROM lrlz_order WHERE add_time > UNIX_TIMESTAMP(DATE ('2017-09-28 00:00:00')) AND order_state = 0;
-
         $items = Model()->query('SELECT * FROM lrlz_order WHERE pd_amount=0 AND LENGTH(bonus_rate) > 0 AND add_time > UNIX_TIMESTAMP(DATE (\'2017-09-01 00:00:00\')) AND order_state = 0');
         foreach ($items as $item) {
             $order_sn = $item['order_sn'];
@@ -171,6 +170,50 @@ class TestOrder extends PHPUnit_Framework_TestCase
 
         $helper = new vorder_helper($order_list);
         $result = $helper->format();
+    }
+
+    public function testBonusAmount()
+    {
+        $mod_order = Model('order');
+        $i = 0;
+        while (true)
+        {
+            $start = $i * 1000;
+            $items = $mod_order->table('order')->field('*')->order('order_id asc')->limit("{$start},1000")->select();
+            if(empty($items)) {
+                return;
+            }
+            $i++;
 
+            foreach ($items as $item)
+            {
+                $order_id = intval($item['order_id']);
+
+                $pd_amount    = intval($item['pd_amount'] * 100 + 0.5);
+                $bonus_rate   = unserialize($item['bonus_rate']);
+                $bonus_amount = unserialize($item['bonus_amount']);
+                if($bonus_amount != false) continue;
+
+                $data = [];
+                if($bonus_rate != false)
+                {
+                    $amount = 0;
+                    foreach ($bonus_rate as $rate => $money) {
+                        $amount += $money;
+                    }
+                    $data['bonus_amount'] = serialize(['user_bonus' => $amount]);
+                }
+                elseif($pd_amount > 0) {
+                    $data['bonus_amount'] = serialize(['user_bonus' => $pd_amount / 100]);
+                }
+                else {
+
+                }
+
+                $data['bonus_rate'] = '';
+                $data['pd_amount'] = 0.00;
+                $mod_order->editOrder($data,['order_id' => $order_id]);
+            }
+        }
     }
 }