要说直播app中哪个功能更容易吸引用户获得流量,其实大多数还是一些互动性较强的功能更受欢迎一些,比如大转盘功能。这里所提到的大转盘功能呢,最主要就是在直播间内用户可以通过触发转盘实现抽奖,不仅可以促进主播与用户之间的亲密度,还可以活跃直播间氛围。那么在直播app开发时,大转盘功能是怎样实现的呢?

$rs = array('code' => 0, 'msg' => '', 'info' => array());
$turntable_con=$this->getConfig(); //获取转盘转动次数和价格的配置
$times=0; //初始化转动次数
$total=0; //初始化价格

foreach($turntable_con as $k=>$v){
if($v['id']==$id){ //$id是传递过来的转动id,判断穿过来的id和转盘的id进行匹配,匹配到之后获取转动次数和转动价格
$times=$v['times'];
$total=$v['coin'];
break;
}
}

 if($times<=0){ //判断转动次数配置是否正确
$rs['code'] = 1002;
$rs['msg'] = '信息错误';
return $rs;
}

 if($total<=0){ //判断转动价格是否配置正确
$rs['code'] = 1002;
$rs['msg'] = '信息错误';
return $rs;
}
/* 更新用户余额 消费 */
$ifok =DI()->notorm->user
->where('id = ? and coin >=?', $uid,$total) //$uid是用户的唯一id
->update(array('coin' => new NotORM_Literal("coin - {$total}")) );

if(!$ifok){ //判断扣费是否成功
$rs['code'] = 1001;
$rs['msg'] = '余额不足';
return $rs;
}

  /* 添加转盘记录 */
$model = new Model_Turntable(); //实例化
$insert2=array("uid"=>$uid,"liveuid"=>$liveuid,"showid"=>$showid,"coin"=>$total,"nums"=>$times,"addtime"=>$nowtime );
$log=$model->setlog($insert2);//转盘记录id
$domain_pack = new Domain_Backpack();
$domain = new Domain_Live(); //实例化
$giftlist=$domain->getGiftList(); //获取礼物列表
$configpub=getConfigPub(); //获取公共配置
$list=$this->getTurntables(); //获取转盘所有的奖励
$win_list=[]; //初始化中奖列表
for($i=0;$i<$times;$i++){ //循环转盘
$win=rand(1,100*1000); //取一个随机数
$rate=0;
foreach($list as $k=>$v){
if($v['type']!=0){ //判断如果不是空奖
$rate+=$v['rate']*1000; //中奖概率*1000
if($win <= $rate){ //判断如果随机数大于中奖概率证明中奖了
if(isset($win_list[$v['id']])){ //判断中的这个奖品,之前有没有中过
$win_list[$v['id']]['nums']++; //如果中过就加个数量
}else{ //如果没有中过
$data=[
'id'=>$v['id'],
'type'=>$v['type'],
'type_val'=>$v['type_val'],
'name'=>'',
'thumb'=>'',
'nums'=>'1',
];
if($v['type']==1){ //如果中的是钻石
$data['name']=$configpub['name_coin'].$v['type_val'];
$data['thumb']='/public/app/pay/coin.png';
}

if($v['type']==2){ //如果中的是礼物
foreach($giftlist as $k2=>$v2){
if($v['type_val']==$v2['id']){
$data['name']=$v2['giftname'];
$data['thumb']=$v2['gifticon'];
}
}
}

if($v['type']==3){ //如果中的是线下奖品
$data['name']=$v['type_val'];
$data['thumb']=$v['thumb'];
}

$win_list[$v['id']]=$data; //把奖品放入到中奖列表中
}
break;
}
}
}

}

       $win_list=array_values($win_list);

if($win_list){
$model->uplogwin($logid,1); //修改转盘记录状态为已中奖
}

/* 写入中奖纪录 */
foreach($win_list as $k=>$v){
$data=[
'logid'=>$logid,
'uid'=>$uid,
'type'=>$v['type'],
'type_val'=>$v['type_val'],
'nums'=>$v['nums'],
'addtime'=>$nowtime,
];
if($v['type']==3){
/* 线下奖品 */
$data['thumb']=$v['thumb'];
}
$model->setWin($data);

if($v['type']==1){
/* 钻石奖品 添加余额 */
$win_coin=$v['type_val'] * $v['nums'];
DI()->notorm->user
->where('id = ?', $uid)
->update(array('coin' => new NotORM_Literal("coin + {$win_coin}") ) ); }

if($v['type']==2){
/* 礼物放进背包 */
$domain_pack->addBackpack($uid,$v['type_val'],$v['nums']);
}

unset($v['type']);
unset($v['type_val']);

$v['thumb']=get_upload_path($v['thumb']);

$win_list[$k]=$v;
}

/* 余额 */
$userinfo2 =DI()->notorm->user
->select('consumption,coin')
->where('id = ?', $uid)
->fetchOne();

$rs['info'][0]['coin']=$userinfo2['coin'];
$rs['info'][0]['list']=$win_list;
return $rs;

以上就是在直播app开发时实现大转盘功能的流程,本文仅供参考,具体实现形式还是根据各自实际需求来定。