0, 'msg' => '打赏礼物数量必须为整数', 'data' => null]; } $toarray = explode(',',$recv_uid); if(in_array($send_uid,$toarray)){ return ['code' => 0, 'msg' => '收礼人不能包含自己', 'data' => null]; } //获取礼物信息 $gift_info = Db::name('vs_gift')->where(['gid'=>$gift_id]) ->field('gid as gift_id,gift_name,gift_price,file_type,base_image,play_image,gift_type,label,is_public_server')->find(); $gift_info['play_image'] = '';//不要特效 //送给所有人的总价格 $all_gift_price = $gift_info['gift_price'] * $num * count($toarray); //判断是否有足够的金币 $user_waller = db::name('user_wallet_coin')->where(['user_id'=>$send_uid])->find(); if ($user_waller['coin'] < $all_gift_price) { return ['code' => 0, 'msg' => '用户金币不足', 'data' => null]; } //获取送礼用户昵称 $FromUserInfo = db::name('user')->where('id',$send_uid)->field('id as user_id,nickname,avatar,sex')->find(); $FromUserInfo['icon'][0] = model('UserData')->user_wealth_icon($send_uid);//财富图标 $FromUserInfo['icon'][1] = model('UserData')->user_charm_icon($send_uid);//魅力图标 $FromUserInfo['chat_bubble'] = model('Decorate')->user_decorate_detail($send_uid,9);//聊天气泡 //送礼 开启事务 Db::startTrans(); //扣除用户金币并记录日志 // $wallet_update = model('api/GiveGift')->change_user_cion_or_earnings_log($send_uid,$all_gift_price,$room_id,1,10,'用户金币购买幸运币礼物'); $wallet_update = model('api/UserWallet')->change_user_cion_log($send_uid, $all_gift_price, $room_id, 10, '用户金币购买幸运币礼物'); if(!$wallet_update){ Db::rollback(); return ['code' => 0, 'msg' => '扣除用户金币失败', 'data' => null]; } //用户财富等级更新 $user_level = model('api/Level')->user_level_data_update($send_uid,$all_gift_price,1,$room_id); if(!$user_level){ Db::rollback(); return ['code' => 0, 'msg' => '用户等级更新失败', 'data' => null]; } //送给一人礼物的总价格(扣除用户的数额) $gift_price = $gift_info['gift_price'] * $num; foreach ($toarray as $k => $to_id){ // 1. 记录礼物赠送 $giftRecord = [ 'send_uid' => $send_uid, 'recv_uid' => $to_id, 'gift_id' => $gift_id, 'gift_gold' => $gift_price, 'recv_gold' => $gift_price /2 , 'small_pool_add' => $gift_price /2 , 'create_time' => time() ]; $giftId = Db::name('bb_lottery_gift_record')->insertGetId($giftRecord); //收礼记录行为日志 $give_gift = model('api/SendGift')->change_user_give_gift_log($send_uid,$gift_id,$gift_price,$num,$to_id,2,1,0,'送幸运币'); if(!$give_gift){ Db::rollback(); return ['code' => 0, 'msg' => '送礼失败', 'data' => null]; } //计算收礼人得益 $receiver_earnings = $gift_price /2/get_system_config_value('rmb_coin_ratio'); //增加收益并记录日志 // $receiver = model('api/GiveGift') -> change_user_cion_or_earnings_log($to_id,$receiver_earnings,$room_id,2,11,'收幸运币礼增加收益'); $receiver = model('api/UserWallet')->change_user_earnings_log($to_id,$receiver_earnings,$room_id,11,'收幸运币礼增加收益'); // //用户魅力等级更新 // $user_level = model('api/Level')->user_level_data_update($to_id,$gift_price,2,$room_id); // if(!$user_level){ // Db::rollback(); // return ['code' => 0, 'msg' => '用户等级更新失败', 'data' => null]; // } //增加房间幸运值 db::name('vs_room')->where(['id' => $room_id])->setInc('luck_value',$gift_price); db::name('vs_room_luck_value')->insert( [ 'room_id' => $room_id, 'send_uid' => $send_uid, 'recv_uid' => $to_id, 'gift_id' => $gift_id, 'num' => $num, 'luck_value' => $gift_price, 'createtime' => time() ]); $ToUserInfo = Db::name('user')->where(['id' => $to_id])->field('id as user_id,nickname,avatar,sex')->find(); $ToUserInfo['icon'][0] = model('UserData')->user_wealth_icon($to_id);//财富图标 $ToUserInfo['icon'][1] = model('UserData')->user_charm_icon($to_id);//魅力图标 $ToUserInfo['charm'] = db::name('vs_room_user_charm')->where(['user_id' => $to_id,'room_id' => $room_id])->value('charm');//魅力 $text = $FromUserInfo['nickname'] . ' 送给 ' . $ToUserInfo['nickname'].' 礼物 ' .$gift_info['gift_name'].' x ' .$num; $text = [ 'FromUserInfo' => $FromUserInfo, 'ToUserInfo' => $ToUserInfo, 'GiftInfo' => $gift_info, 'gift_num' => $num, 'text' => $text ]; //聊天室推送系统消息 model('api/Chat')->sendMsg(1005,$room_id,$text); } Db::commit(); //计算爆币 $nums = $num * count($toarray); $ress = $this->lottery($send_uid,$gift_info['gift_price'],$nums,$room_id,$gift_id,$FromUserInfo,$gift_info); if($ress['code'] == 0){ return ['code' => 0, 'msg' => $ress['msg'], 'data' => null]; } return ['code' => 1, 'msg' => '送礼成功', 'data' => null]; } //抽奖 public function lottery($send_uid,$gift_price,$num,$room_id,$giftId,$fromUserInfo=null,$gift_info=null) { $big_prize_play_image = db::name('bb_lottery_config')->where(['key' => 'big_prize_play_image'])->value('value'); $small_prize_play_image = db::name('bb_lottery_config')->where(['key' => 'small_prize_play_image'])->value('value'); try { for($i=0;$i<$num;$i++){ $gift_gold = $gift_price; $service = new LotteryService(); $reslut = $service->handleGift($send_uid, $gift_gold, $giftId); if ($reslut['code'] == 1) { $result = $reslut['data']; //(未开奖时) if ($result['is_small_prize'] == 0) { //不做处理 } else {//开奖 // 大奖 if ($result['is_big_prize'] == 1) {//$result['big_prize_amount'],//中奖金额 $beilv = floor($result['big_prize_amount'] / $gift_price); // $wallet_update = model('api/GiveGift')->change_user_cion_or_earnings_log($send_uid,$result['big_prize_amount'],$room_id,1,58,'参与幸运币活动获得'.$beilv.'倍'); $wallet_update = model('api/UserWallet')->change_user_earnings_log($send_uid,$result['big_prize_amount'],$room_id,58,'参与幸运币活动获得'.$beilv.'倍'); if(!$wallet_update){ return ['code' => 0, 'msg' => '流水记录失败', 'data' => null]; } $tet['text'] = '恭喜用户'.$fromUserInfo['nickname'].'在幸运币活动中获得幸运币'.$beilv.'倍'; $tet['type'] = 1; $tet['beilv'] = $beilv; $tet['play_image'] = $big_prize_play_image; } else { // 小奖 $result['small_prize_amount'],//中奖金额 $beilv = floor($result['small_prize_amount'] / $gift_price); // $wallet_update = model('api/GiveGift')->change_user_cion_or_earnings_log($send_uid,$result['small_prize_amount'],$room_id,1,58,'参与幸运币活动获得'.$beilv.'倍'); $wallet_update = model('api/UserWallet')->change_user_earnings_log($send_uid,$result['small_prize_amount'],$room_id,58,'参与幸运币活动获得'.$beilv.'倍'); if(!$wallet_update){ return ['code' => 0, 'msg' => '流水记录失败', 'data' => null]; } $tet['text'] = '恭喜用户'.$fromUserInfo['nickname'].'在幸运币活动中获得幸运币'.$beilv.'倍'; $tet['type'] = 2; $tet['beilv'] = $beilv; $tet['play_image'] = $small_prize_play_image; } $tet['FromUserInfo'] = $fromUserInfo; $tet['user_id'] = $send_uid; model('api/Chat')->sendMsg(1100,$room_id,$tet); $push = new Push($send_uid, $room_id); $room_name = Db::name('vs_room')->where(['id' => $room_id, 'apply_status' => 2])->value('room_name'); $text = '恭喜'.$fromUserInfo['nickname'] . '在' . $room_name . '房间获得幸运币'. $beilv . '倍'; $text_list_new[] = [ 'text' => $text, 'gift_picture' => $gift_info['base_image'], 'room_id' => $room_id, 'fromUserName' => $fromUserInfo['nickname'], 'toUserName' => '', 'giftName' => '', 'roomId' => $room_id, 'number' => 1, ]; $push->giftBanner($text_list_new); } } } return ['code' => 1, 'msg' => '送礼成功', 'data' => null]; } catch (Exception $e) { Log::error('抽奖处理失败:' . $e->getMessage()); return ['code' => 0, 'msg' => $e->getMessage(), 'data' => null]; } } }