فهرست منبع

送礼物爆币放到房间送礼物里

lizhen_gitee 1 سال پیش
والد
کامیت
04c7ddaeb8
2فایلهای تغییر یافته به همراه142 افزوده شده و 4 حذف شده
  1. 7 3
      application/api/controller/Gift.php
  2. 135 1
      application/api/controller/Party.php

+ 7 - 3
application/api/controller/Gift.php

@@ -26,7 +26,7 @@ class Gift extends Api
         $pay_total = input('pay_total');
 
         Db::startTrans();
-        $rs = $this->test($user_id,$gift_id,$pay_total);
+        $rs = $this->baobi($user_id,$gift_id,$pay_total);
         if($rs !== true){
             Db::rollback();
         }
@@ -35,7 +35,7 @@ class Gift extends Api
     }
 
     //gift_id必须是爆币礼物才可以
-    public function test($user_id,$gift_id,$pay_total){
+    public function baobi($user_id,$gift_id,$pay_total){
 
         //奖项参数
         $conf_arr = Db::name('gift_baobi_config')->where('gift_id',$gift_id)->select();
@@ -122,6 +122,9 @@ class Gift extends Api
             if($rs_wallet['status'] === false){
                 return false;
             }
+
+            //返回爆币金额
+            return $baobi_total;
         }
 
         //默认成功
@@ -187,7 +190,8 @@ class Gift extends Api
         // 分页搜索构建
         $list = \app\common\model\GiftBack::field("id,name,image,gif_image,value,sum(number) as number")
             ->where(["user_id"=>$userid,"is_use"=>0])
-            ->group("name")
+            ->group("gift_id")
+            ->autopage()
             ->select();
         $this->success("获取成功!",$list);
     }

+ 135 - 1
application/api/controller/Party.php

@@ -1438,6 +1438,8 @@ class Party extends Common
 
             $giftValue = $giftInfo["value"] * $number;
             $getValue  = $giftValue;
+
+            $giftCountValue = $giftInfo["value"] * $number * $userCount;
         } else {
 
             // 获取礼物信息
@@ -1663,6 +1665,18 @@ class Party extends Common
                 }
             }
 
+            //爆币
+            $res_baobi = $this->baobi($this->auth->id,$data["gift_id"],$giftCountValue);
+            if($res_baobi === false){
+                Db::rollback();
+                $this->error('爆币失败');
+            }elseif($res_baobi === true){
+                $returnData["baobi"] = 0;
+            }else{
+                //爆币了
+                $returnData["baobi"] = $res_baobi;
+            }
+
             // 获取用户魅力值
             $users = $this->redis->zRange("hourCharm_".$party_id,0,-1,true);
             $u = [];
@@ -1730,6 +1744,125 @@ class Party extends Common
         }
     }
 
+    //gift_id必须是爆币礼物才可以
+    public function baobi($user_id,$gift_id,$pay_total){
+
+        //奖项参数
+        $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('IFNULL(sum(pay_total),0) as today_pay_total,IFNULL(sum(baobi_total),0) as today_baobi_total')->where($map)->find();
+        //dump($today_data);
+        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 $baobi_total;
+        }
+
+        //默认成功
+        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;
+    }
+
     //送礼完成之后,大礼物飘屏
     private function bigGiftNotice($sender,$receiver,$partyInfo,$giftUserParty){
         if ($giftUserParty['party_id'] > 0) {
@@ -1747,7 +1880,8 @@ class Party extends Common
     //某房间内礼物列表
     public function getPartyGiftLog(){
         $party_id = input('party_id',0);
-        $list = Db::name('gift_user_party')->alias('log')->field('log.gift_name,log.gift_gif_image,log.number,log.value,log.guildermoney,log.createtime,user.nickname as give_nickname,b.nickname as get_nickname')
+        $list = Db::name('gift_user_party')->alias('log')
+            ->field('log.gift_name,log.gift_gif_image,log.number,log.value,log.guildermoney,log.createtime,user.nickname as give_nickname,b.nickname as get_nickname')
             ->join('user','log.user_id = user.id','LEFT')
             ->join('user b','log.user_to_id = b.id','LEFT')
             ->where('log.party_id',$party_id)->order('log.id desc')->autopage()->select();