فهرست منبع

礼物,爆币算法

lizhen_gitee 1 سال پیش
والد
کامیت
63cbfb83fc
2فایلهای تغییر یافته به همراه116 افزوده شده و 0 حذف شده
  1. 115 0
      application/api/controller/Gift.php
  2. 1 0
      application/extra/wallet.php

+ 115 - 0
application/api/controller/Gift.php

@@ -20,6 +20,121 @@ class Gift extends Api
         $this->gifttypeModel = new \app\common\model\GiftType();
     }
 
+    //gift_id必须是爆币礼物才可以
+    public function test($user_id,$gift_id = 0,$pay_total = 10000){
+
+        //奖项参数
+        $conf_arr = Db::name('gift_baobi_config')->where('gift_id',$gift_id)->select();
+        if(empty($conf_arr)){
+            return true;
+        }
+
+        //用户今天的爆币情况,与消费情况,不用区分具体哪个爆币礼物
+        $today_start = strtotime(date('Y-m-d'));
+        $today_end   = $today_start + 86399;
+        $map = [
+            'user_id' => $user_id,
+            'createtime' => ['BETWEEN',[$today_start,$today_end]],
+        ];
+        $today_data = Db::name('gift_baobi_log')->field('sum(pay_total) as today_pay_total,sum(baobi_total) as today_baobi_total')->where($map)->find('pay_total');
+        if($today_data['today_baobi_total'] > $today_data['today_pay_total']){
+            //爆币比消费还高了,不用抽奖了,记录个日志,返回。这里的日志仅用来记录今日消费 sum(pay_total)
+            $data = [];
+            $data['user_id']   = $user_id;
+            $data['gift_id'] = $gift_id;
+            $data['baobi_id'] = 0;
+            $data['beilv'] = 0;
+            $data['rate'] = 0;
+            $data['pay_total'] = $pay_total;
+            $data['baobi_total'] = 0;
+            $data['createtime'] = time();
+
+            $log_id = Db::name('gift_baobi_log')->insertGetId($data);
+            if(!$log_id){
+                return false;
+            }
+
+            return true;
+        }
+
+
+        //概率新数组
+        $gailv = [];
+        $bei = 100; //小数变整数
+        foreach ($conf_arr as $key=>$value)
+        {
+            $gailv[$value['id']] = $value['rate']*$bei;
+        }
+        //dump($gailv);
+
+        //奖项新数组
+        $conf_column = [];
+        foreach ($conf_arr as $key=>$value)
+        {
+            $conf_column[$value['id']] = $value;
+        }
+        //dump($conf_column);
+
+        //抽
+        $rid = $this->getRand($gailv); //根据概率获取奖项id
+        //dump($rid);
+
+        //返回中奖结果
+        $result = $conf_column[$rid];
+
+        //爆币金额
+        $baobi_total = bcdiv(bcmul($pay_total,$result['beilv'],0),100,0);
+
+        //写入爆币记录,不论有没有钱。全都写入其实是为了方便查日志,比在money_log里找范围更小,而且可删除
+        $data = [];
+        $data['user_id']   = $user_id;
+        $data['gift_id'] = $gift_id;
+        $data['baobi_id'] = $result['id'];
+        $data['beilv'] = $result['beilv'];
+        $data['rate'] = $result['rate'];
+        $data['pay_total'] = $pay_total;
+        $data['baobi_total'] = $baobi_total;
+        $data['createtime'] = time();
+
+        $log_id = Db::name('gift_baobi_log')->insertGetId($data);
+        if(!$log_id){
+            return false;
+        }
+
+        //直接给用户钱
+        if($baobi_total > 0){
+            $rs_wallet = model('wallet')->lockChangeAccountRemain($user_id,$baobi_total,'+',0,'送礼物爆币'.$result['beilv'].'%',21,'jewel');
+            if($rs_wallet['status'] === false){
+                return false;
+            }
+        }
+
+        //默认成功
+        return true;
+    }
+
+    //概率获得算法
+    private function getRand($proArr) {
+        //概率数组的总概率精度
+        $proSum = array_sum($proArr);
+
+        $key = rand(1, $proSum);
+//        echo $key;
+        $result = 0;
+        $now = 0;
+        foreach ($proArr as $k=>$v)
+        {
+            $now = $now + $v;
+            if($key<=$now)
+            {
+                $result = $k;
+                break;
+            }
+        }
+        unset ($proArr);
+        return $result;
+    }
+
     /**
      * 获取礼物列表
      */

+ 1 - 0
application/extra/wallet.php

@@ -26,6 +26,7 @@ return [
         18 => '充值退款',//减少                              需要测试
         19 => '绑定关系',//减少
         20 => '完成任务', //增加
+        21 => '赠送礼物爆币', //增加
 
         32 => '购买家族卡', //减少
         33 => '充值', //增加 ios