Browse Source

增加摇一摇游戏

stanley-king 8 years atrás
parent
commit
218f315d39

+ 2 - 2
data/logic/payment.logic.php

@@ -111,7 +111,7 @@ class paymentLogic
 
 
         $order_list = $model_order->getNormalOrderList(array('pay_sn' => $pay_sn));
-        $pred_helper = new predeposit_helper();
+        $pred_helper = new predeposit_helper($member_id);
         $pd_amount = intval($pd_amount * 100 + 0.5);
 
         $used_pred = intval(0);
@@ -156,7 +156,7 @@ class paymentLogic
 
         $order_list = $model_order->getNormalOrderList(array('pay_sn' => $pay_sn));
         $model_pd = Model('predeposit');
-        $pred_helper = new predeposit_helper();
+        $pred_helper = new predeposit_helper($member_id);
 
         try
         {

+ 23 - 0
helper/account_helper.php

@@ -58,6 +58,29 @@ class account_helper
         $param['type_name'] = "从{$name}摇来的红包";
 
         $ret = bonus_helper::make_bonus($param);
+        if($ret != false) {
+            $bonusex = bonus_helper::send($ret['type_sn'],array($to_id));
+            
+            return $bonusex;
+        } else {
+            return false;
+        }
+    }
+
+    public static function lost_bonus($from_id,$to_id,$amount)
+    {
+        $param = self::base_param($amount,1);
+        $member_info = Model('member')->getMemberInfoByID($from_id);
+
+        $param['sender_id'] = $member_info['member_id'];
+        $param['sender_mobile'] = $member_info['member_mobile'];
+        $param['sender_name'] = $member_info['member_nickname'];
+        $param['make_type'] = \bonus\type::MakeShakeType;
+
+        $name = $member_info['member_nickname'];
+        $param['type_name'] = "{$name}摇过来的红包";
+
+        $ret = bonus_helper::make_bonus($param);
         if($ret != false)
         {
             $bonusex = bonus_helper::send($ret['type_sn'],array($to_id));

+ 3 - 0
helper/bonus/user_bonus.php

@@ -97,6 +97,9 @@ class user_bonus
         }
         return $user_name;
     }
+    public function user_id() {
+        return intval($this->mParamer['user_id']);
+    }
     public function user_comment() {
         $user_comment = $this->mParamer['user_comment'];
         if(mb_strlen($user_comment) < 20) {

+ 1 - 1
helper/bonus_helper.php

@@ -134,7 +134,7 @@ class bonus_helper
         }
 
         $manager = new \bonus\manager();
-        $pd_helper = new predeposit_helper();
+        $pd_helper = new predeposit_helper($_SESSION['member_id']);
 
         $bonusex = array();
         foreach($bind_bonus as $val)

+ 2 - 2
helper/pay_helper.php

@@ -117,8 +117,8 @@ class pay_helper
             $type_sn = $ret['type_sn'];
             $money = $ret['money'];
 
-            $pre_helper = new predeposit_helper();
-            $pre_helper->hand_out_store_bonus($money,$sender_id,$member_info['member_nickname'],$type_sn,$relayer_id,"发送了{$money}元的转发红包.");
+            $pre_helper = new predeposit_helper($sender_id);
+            $pre_helper->hand_out_relay_bonus($money,$member_info['member_nickname'],$type_sn,$relayer_id,"发送了{$money}元的转发红包.");
             $url = BASE_SITE_URL . "/mobile/index.php?act=bonusex&op=open&client_type=wap&type_sn={$type_sn}";
             return array('money' => $money,'total_num' => self::total_number,'sender_name' => '熊猫美妆');
         }

+ 29 - 23
helper/predeposit_helper.php

@@ -10,13 +10,16 @@
 class predeposit_helper
 {
     private $model_pd;
-    public function __construct() {
+    private $member_id;
+
+    public function __construct($member_id) {
         $this->model_pd = Model('predeposit');
+        $this->member_id = $member_id;
     }
 
     public function get_predeposit()
     {
-        $pd_array = Model('member')->getMemberPdInfo($_SESSION['member_id']);
+        $pd_array = Model('member')->getMemberPdInfo($this->member_id);
         $total_value = $pd_array['available_predeposit'];   // 当前预存款
         $freeze_value = $pd_array['freeze_predeposit'];     // 当前预存款冻结
 
@@ -26,7 +29,7 @@ class predeposit_helper
     public function get_predeposit_total()
     {
         $member = Model('member');
-        $relay_array = $member->getMemberPdInfo($_SESSION['member_id']);
+        $relay_array = $member->getMemberPdInfo($this->member_id);
         $total = floatval($relay_array['available_predeposit']);
         return $total;
     }
@@ -37,9 +40,10 @@ class predeposit_helper
 
     public function bonus_add_money($amount,$bonus_sn,$sender_name,$info)
     {
+        $member_info = Model('member')->getMemberInfoByID($this->member_id);
         $data = array();
-        $data['member_id'] = $_SESSION['member_id'];
-        $data['member_name'] = $_SESSION['member_name'];
+        $data['member_id'] = $this->member_id;
+        $data['member_name'] = $member_info['member_name'];
         $data['amount'] = $amount;
         $data['order_sn'] = $bonus_sn;
         $data['admin_name'] = $sender_name;
@@ -48,16 +52,16 @@ class predeposit_helper
         $this->model_pd->changePd("bonus_add_money", $data);
     }
 
-    public function bonus_refund($mod_pred,$sender_id,$sener_name,$amount,$type_sn)
-    {
-        $log_data = array();
-        $log_data['member_id']   = $sender_id;
-        $log_data['member_name'] = $sener_name;
-        $log_data['amount'] = $amount;
-        $log_data['type_sn'] = $type_sn;
-
-        $mod_pred->changePd('bonus_refund',$log_data);
-    }
+//    public function bonus_refund($mod_pred,$sender_id,$sener_name,$amount,$type_sn)
+//    {
+//        $log_data = array();
+//        $log_data['member_id']   = $sender_id;
+//        $log_data['member_name'] = $sener_name;
+//        $log_data['amount'] = $amount;
+//        $log_data['type_sn'] = $type_sn;
+//
+//        $mod_pred->changePd('bonus_refund',$log_data);
+//    }
 
     public function transform_money($member_id,$name,$amount)
     {
@@ -74,22 +78,25 @@ class predeposit_helper
         $this->model_pd->changePd("sys_add_money",$data);
     }
 
-    public function hand_out_bonus($amount,$bonus_sn,$sender_name,$info) {
+    public function hand_out_bonus($amount, $type_sn, $sender_name, $info)
+    {
+        $member_info = Model('member')->getMemberInfoByID($this->member_id);
+
         $data = array();
-        $data['member_id'] = $_SESSION['member_id'];
-        $data['member_name'] = $_SESSION['member_name'];
+        $data['member_id'] = $this->member_id;
+        $data['member_name'] = $member_info['member_name'];
         $data['amount'] = $amount;
-        $data['order_sn'] = $bonus_sn;
+        $data['order_sn'] = $type_sn;
         $data['admin_name'] = $sender_name;
-        $data['pdr_sn'] = $bonus_sn;
+        $data['pdr_sn'] = $type_sn;
         $data['lg_desc'] = $info;
         $this->model_pd->changePd("hand_out_bonus", $data);
     }
 
-    public function hand_out_store_bonus($amount,$member_id,$sender_name,$type_sn,$relayer_id,$info)
+    public function hand_out_relay_bonus($amount,$sender_name,$type_sn,$relayer_id,$info)
     {
         $data = array();
-        $data['member_id'] = $member_id;
+        $data['member_id'] = $this->member_id;
         $data['member_name'] = $relayer_id; //转发者id,当作姓名
         $data['amount'] = $amount;
         $data['order_sn'] = $type_sn;
@@ -101,7 +108,6 @@ class predeposit_helper
 
     private function filter_sn($lg_desc)
     {
-        //发送红包系统调节预存款【减少】,红包单号: 910514563264556490
         $pos = mb_strpos($lg_desc,':');
         if($pos != false) {
             return mb_substr($lg_desc,$pos + 1);

+ 83 - 43
helper/shaker_helper.php

@@ -7,6 +7,7 @@
  * Time: 上午11:33
  */
 require_once (BASE_ROOT_PATH . '/helper/account_helper.php');
+require_once (BASE_ROOT_PATH . '/helper/predeposit_helper.php');
 
 class friend
 {
@@ -46,7 +47,7 @@ class gain_policy
         $this->total_amount = $amount;
     }
 
-    public function gain()
+    public function calculate()
     {
         $cur_value = intval($this->total_amount) >= self::max_amount ? self::max_amount : $this->total_amount;
         return $this->scale() * $cur_value;
@@ -88,8 +89,8 @@ class gain_policy
 
 class shaker_helper
 {
-    const max_gain_period = 12 * 3600;
-    const max_lost_period = 1800;
+    const max_gain_period = 300;//12 * 3600;
+    const max_lost_period = 60;//1800;
 
     const shake_expire  = 5;
     const direct_gain = 0;
@@ -103,17 +104,20 @@ class shaker_helper
     {
         $friends = $this->gain_friends();
         $usable_amount = 0.0;
-        $user_id = $this->find_friend($friends, $usable_amount);
+        $user_id = $this->find_gain_friend($friends, $usable_amount);
         if ($user_id != false)
         {
             $policy = new gain_policy($this->strength, $usable_amount);
-            $value = $policy->gain();
-            bonus_helper::withold($user_id, $value);
+            $value = $policy->calculate();
+
             $bonus = account_helper::gain_bonus($user_id, $_SESSION['member_id'], $value);
             if($bonus != false) {
-                $this->add_gained_friend(array($user_id));
-
                 $name = user_helper::nickname();
+
+                $predo = new predeposit_helper($_SESSION['member_id']);
+                $predo->hand_out_bonus($value,$bonus[0]['type_sn'],user_helper::nickname(),"被{$name}要走了{$value}元的红包.");
+
+                $this->add_gained_friend(array($user_id));
                 $push_param = array();
                 $push_param['member_id'] = $user_id;
                 $push_param['text'] = "您的好友{$name} 在熊猫美妆中偷走你{$value}元.";
@@ -127,14 +131,14 @@ class shaker_helper
         }
         else
         {
-//            if ($this->gained_system() == false) {
-//                $result = array('code' => errcode::ErrShake, 'msg' => "系统红包一天只能抢一次~发红包邀请好友进来就可以抢他们的红包了.");
-//                return false;
-//            }
-//            else
+            if ($this->gained_system() == false) {
+                $result = array('code' => errcode::ErrShake, 'msg' => "系统红包一天只能抢一次~发红包邀请好友进来就可以抢他们的红包了.");
+                return false;
+            }
+            else
             {
                 $policy = new gain_policy($this->strength, 50);
-                $value = $policy->gain();
+                $value = $policy->calculate();
                 $bonus = account_helper::gain_sysBonus($_SESSION['member_id'], $value);
                 if($bonus != false) {
                     $this->save_gained_system();
@@ -146,43 +150,54 @@ class shaker_helper
 
     private function lost(&$result)
     {
+        $predo = new predeposit_helper($_SESSION['member_id']);
+        $total_amount = $predo->get_predeposit_total();
+
+        if(intval($total_amount * 100 + 0.5) <= 0) {
+            $result = array('code' => errcode::ErrShake,'msg' => '您余额不足~');
+            return false;
+        }
+
         $friends = $this->lost_friends();
-        $mod_bonus = Model('user_bonus');
-        $usable_amount = $mod_bonus->getUsableSum($_SESSION['member_id']);
-        if(intval($usable_amount * 100 + 0.5) <= 0) {
-            $result = array('code' => errcode::ErrShake,'msg' => '');
+        $user_id = $this->find_lost_friend($friends);
 
+        if($user_id == false) {
+            $result = array('code' => errcode::ErrShake, 'msg' => "么有摇到红包~");
             return false;
         }
 
-        $friends = $this->gain_friends();
-        $usable_amount = 0.0;
-        $user_id = $this->find_friend($friends, $usable_amount);
-        if ($user_id != false)
-        {
-            $policy = new gain_policy($this->strength, $usable_amount);
-            $value = $policy->gain();
-            $bonus = account_helper::gain_bonus($user_id, $_SESSION['member_id'], $value);
-            if($bonus != false) {
-                bonus_helper::withold($user_id, $value);
+        $policy = new gain_policy($this->strength, $total_amount);
+        $value = $policy->calculate();
+        $bonus = account_helper::lost_bonus($_SESSION['member_id'],$user_id, $value);
+        if($bonus != false) {
+            $predo->hand_out_bonus($value,$bonus[0]['type_sn'],user_helper::nickname(),"您摇丢了{$value}的红包.");
+            $this->add_lost_friend(array($user_id));
+            $name = user_helper::nickname();
+            $push_param = array();
+            $push_param['member_id'] = $user_id;
+            $push_param['text'] = "您的好友{$name}把{$value}元的红包,摇到你的账户.";
+            $push_param['go_type'] = 'bonus';
+            QueueClient::push('upushSendMsg', $push_param);
+        } else {
+            $result = array('code' => errcode::ErrShake, 'msg' => "没摇到任何红包~");
+        }
 
-                $this->add_gained_friend(array($user_id));
+        return $bonus;
+    }
 
-                $name = user_helper::nickname();
-                $push_param = array();
-                $push_param['member_id'] = $user_id;
-                $push_param['text'] = "您的好友{$name} 在熊猫美妆中偷走你{$value}元.";
-                $push_param['go_type'] = 'bonus';
-                QueueClient::push('upushSendMsg', $push_param);
-            } else {
-                $result = array('code' => errcode::ErrShake, 'msg' => "么有抢到好友红包~");
-            }
+    private function find_lost_friend($friends)
+    {
+        while (true)
+        {
+            $count = count($friends);
+            if($count == 0) return false;
 
-            return $bonus;
+            $pos = mt_rand(0,$count -1);
+            return $friends[$pos];
         }
     }
 
-    private function find_friend($friends,&$usable_amount)
+    private function find_gain_friend($friends, &$usable_amount)
     {
         while (true)
         {
@@ -209,7 +224,7 @@ class shaker_helper
         }
 
         $this->strength = $strength;
-        $direct = self::direct_gain;//$this->direction();
+        $direct = $this->direction();
         if($direct == self::direct_gain) {
             return $this->gain($result);
         }
@@ -269,6 +284,27 @@ class shaker_helper
         }
     }
 
+    private function add_lost_friend($user_ids)
+    {
+        if(!isset($_SESSION['game_shake']['losted_friends'])) {
+            $_SESSION['game_shake']['losted_friends'] = array();
+        }
+        $friends = &$_SESSION['game_shake']['losted_friends'];
+
+        foreach ($user_ids as $user_id)
+        {
+            if(isset($friends[$user_id])) {
+                $friends[$user_id]['user_id'] = $user_id;
+                $friends[$user_id]['last_time'] = time();
+                $friends[$user_id]['count'] = intval($friends[$user_id]['count']) + 1;
+            } else {
+                $friends[$user_id]['user_id'] = $user_id;
+                $friends[$user_id]['last_time'] = time();
+                $friends[$user_id]['count'] = 1;
+            }
+        }
+    }
+
     //可以偷的好友
     private function gain_friends()
     {
@@ -291,7 +327,7 @@ class shaker_helper
 
         $all_friends = array_merge($subscriber,$follower);
         sort($all_friends,SORT_NUMERIC);
-        $all_friends = array_unique($all_friends,SORT_NUMERIC);
+        $all_friends = array_merge(array_unique($all_friends,SORT_NUMERIC),[]);
         sort($all_friends);
         foreach ($exids as $uid)
         {
@@ -323,7 +359,10 @@ class shaker_helper
         $follower = relation_helper::follower($_SESSION['member_id']);
 
         $all_friends = array_merge($subscriber,$follower);
-        sort($all_friends);
+        sort($all_friends,SORT_NUMERIC);
+        $all_friends = array_merge(array_unique($all_friends,SORT_NUMERIC),[]);
+        sort($all_friends,SORT_NUMERIC);
+
         foreach ($exids as $uid)
         {
             $pos = algorithm_helper::bsearch($uid,$all_friends);
@@ -367,6 +406,7 @@ class shaker_helper
         else
         {
             $rand = mt_rand(1,100);
+
             $direct = ($rand % 2) == 0 ? self::direct_gain : self::direct_lost;
             $_SESSION['game_shake']['direction'] = $direct;
         }

+ 22 - 3
mobile/control/member_bonus.php

@@ -195,15 +195,34 @@ class member_bonusControl extends mbMemberControl
         }
         else
         {
-            $type_infos = array();
+            $total_amount = 0;
+            $result = array();
             foreach ($items as $bonus) {
                 $user_bonus = bonus\user_bonus::create_by_param($bonus);
                 $type_info = bonus_helper::get_typeinfo($user_bonus->type_sn());
                 $type_info = $type_info['type_info'];
-                $type_infos[$user_bonus->type_sn()] = $type_info;
+                $type = bonus\type::crate_by_paramer($type_info);
+
+                $item = array();
+                if($_SESSION['member_id'] == $user_bonus->user_id()) {
+                    $item['direction'] = 'gain';
+                    $item['name'] = $type->sender_name();
+                    $item['bonus_value'] = $user_bonus->bonus_value();
+
+                    $total_amount += $user_bonus->bonus_value();
+                } else {
+                    $item['direction'] = 'lost';
+                    $item['name'] = $user_bonus->user_name();
+                    $item['bonus_value'] = $user_bonus->bonus_value();
+
+                    $total_amount -= $user_bonus->bonus_value();
+                }
+
+                array_push($result,$item);
             }
 
-            return self::outsuccess(array("bonuses" => $items,"types" => $type_infos));
+            $count = count($result);
+            return self::outsuccess(array("bonuses" => $result,"info" => array('count' => $count, 'money' => $total_amount)));
         }
     }
 }

+ 2 - 2
mobile/control/test.php

@@ -232,8 +232,8 @@ class testControl extends mobileHomeControl
             $money = intval($balance * 100 + 0.5);
 
             if($money > 0) {
-                $pd_helper = new predeposit_helper();
-                $pd_helper->transform_money($user['member_id'],$name,$balance);
+                $pd_helper = new predeposit_helper($user['member_id']);
+                $pd_helper->transform_money($name,$balance);
             }
         }
     }