diff --git a/application/api/model/GiveGift.php b/application/api/model/GiveGift.php index 5085fb0..82993fb 100644 --- a/application/api/model/GiveGift.php +++ b/application/api/model/GiveGift.php @@ -40,6 +40,10 @@ class GiveGift extends Model */ public function give_gift($uid,$to_uid,$gid,$num,$from_type,$type,$from_id = 0,$pit_number = 0,$change_type = 0,$ext = []) { + if(isset($ext['is_draw_gift']) && $ext['is_draw_gift'] == 1) { + $return_pan = $this->give_gift_to_pan($uid, $to_uid, $gid, $num, $from_type, $type, $from_id, $pit_number, $change_type, $ext); + return $return_pan; + } //送的礼物信息 $gift_info = Db::name('vs_gift')->where(['gid'=>$gid]) ->field('gid as gift_id,gift_name,gift_price,file_type,base_image,play_image,gift_type,label,is_public_server')->find(); @@ -262,11 +266,14 @@ class GiveGift extends Model } //增加房主收益并记录日志 $room_owner_earningss = $room_owner_earnings - $host_earnings; - $room_owner_earning = $this -> change_user_cion_or_earnings_log($room_owner,$room_owner_earningss,$from_id,2,18,'房主收益'); - if(!$room_owner_earning){ - Db::rollback(); - return ['code' => 0, 'msg' => '房主收益失败', 'data' => null]; + if($room_owner_earningss > 0){ + $room_owner_earning = $this -> change_user_cion_or_earnings_log($room_owner,$room_owner_earningss,$from_id,2,18,'房主收益'); + if(!$room_owner_earning){ + Db::rollback(); + return ['code' => 0, 'msg' => '房主收益失败', 'data' => null]; + } } + }else{ //增加房主收益并记录日志 $room_owner_earning = $this -> change_user_cion_or_earnings_log($room_owner,$room_owner_earnings,$from_id,2,18,'房主收益'); @@ -275,6 +282,13 @@ class GiveGift extends Model return ['code' => 0, 'msg' => '房主收益失败', 'data' => null]; } } + }else{ + //增加房主收益并记录日志 + $room_owner_earning = $this -> change_user_cion_or_earnings_log($room_owner,$room_owner_earnings,$from_id,2,18,'房主收益'); + if(!$room_owner_earning){ + Db::rollback(); + return ['code' => 0, 'msg' => '房主收益失败', 'data' => null]; + } } } } @@ -303,7 +317,9 @@ class GiveGift extends Model //平台收益 = 总金额 - 收礼人收益 - 房主收益 - 工会长收益 $app_ratio = 100 - $ratio - $configs['room_author_ratio'] - $guid_ratio; $app_earning = coin_earning($gv['gift_price'], $app_ratio); - $gift_rate = $this->change_give_gift_profit($gv['give_gift_id'], $ratio, $receiver_earnings, $configs['room_author_ratio'], $room_owner_earnings, $app_ratio, $app_earning); + $receiver_earningss = $this -> receiver_earnings($to_id,$gv['gift_price'],$from_type); + $room_owner_earningss = $this -> receiver_earnings($room_owner,$gv['gift_price'],99);//结果是钻石 + $gift_rate = $this->change_give_gift_profit($gv['give_gift_id'], $ratio, $receiver_earningss, $configs['room_author_ratio'], $room_owner_earningss, $app_ratio, $app_earning); if (!$gift_rate) { Db::rollback(); return ['code' => 0, 'msg' => '礼物记录失败', 'data' => null]; @@ -557,6 +573,308 @@ class GiveGift extends Model return ['code' => 1, 'msg' => '送礼成功', 'data' => ['gift_total' => $gift_total,'gift_user_data' =>$gift_user_data]]; } + /* + * 送礼物-盲盒转盘专用 + * @param int $uid 用户id + * @param int $from_id 来源id + * @param str $to_uid 接收礼物用户id字符串逗号分隔 + * @param int $gid 礼物id + * @param int $num 礼物数量 + * @param int $from_type 来源 1聊天送礼物 2房间语聊送礼 3直播送礼 4动态打赏 5系统任务 6-cp房间送礼 + * @param int $type 金币购买 1金币购买 2送背包礼物 + * @param int $pit_number 坑位编号 + * @return array + * 用户,在房间中,给谁,送了什么礼物,多少个,来源 + */ + public function give_gift_to_pan($uid,$to_uid,$gid,$num,$from_type,$type,$from_id = 0,$pit_number = 0,$change_type = 0,$ext = []) + { + //送的礼物信息 + $gift_info = Db::name('vs_gift')->where(['gid'=>$gid]) + ->field('gid as gift_id,gift_name,gift_price,file_type,base_image,play_image,gift_type,label,is_public_server')->find(); + if(empty($gift_info)){ + return ['code' => 0, 'msg' => '礼物不存在', 'data' => null]; + } + if(!$to_uid){ + return ['code' => 0, 'msg' => '请选择收礼人', 'data' => null]; + } + $toarray = explode(',',$to_uid); + if(in_array($uid,$toarray)){ + return ['code' => 0, 'msg' => '收礼人不能包含自己', 'data' => null]; + } + if (ceil($num) != $num) { + return ['code' => 0, 'msg' => '打赏礼物数量必须为整数', 'data' => null]; + } + if ($num < 1) { + return ['code' => 0, 'msg' => '打赏礼物数量必须大于零', 'data' => null]; + } + $user_info = Db::name('user')->where(['id'=>$uid,'status'=>1])->find(); + if(empty($user_info)){ + return ['code' => 301, 'msg' => '当前用户登录失效', 'data' => null]; + } + + //获取送礼用户昵称 + $FromUserInfo = db::name('user')->where('id',$uid)->field('id as user_id,nickname,avatar,sex')->find(); + $FromUserInfo['icon'][0] = model('UserData')->user_wealth_icon($uid);//财富图标 + $FromUserInfo['icon'][1] = model('UserData')->user_charm_icon($uid);//魅力图标 + + //送给一人礼物的总价格(扣除用户的数额) + $gift_price = $gift_info['gift_price'] * $num; + + $roomId = 0; + if($from_type == 2 || $from_type == 3 || $from_type == 6){ + $roomId = $from_id; + } + + //循环送礼 + $gift_total = 0; + $give_gift = 0; + $gift_user_data = []; + foreach ($toarray as $k => $to_id){ + $gift_user_data[]['user_id'] = $to_id; + $gift_box1 = []; + $gift_box = []; + $gift_total += $gift_price; + //收礼记录行为日志 + $give_gift = $this -> change_user_give_gift_log($uid,$gid,$gift_price,$num,$to_id,$from_type,$type,$from_id,$pit_number); + if(!$give_gift){ + return ['code' => 0, 'msg' => '送礼失败', 'data' => null]; + } + $gift_user_data[$k]['gift_price'] = $gift_price; + + //计算收礼人得益 + $receiver_earnings = $this -> receiver_earnings($to_id,$gift_price,$from_type); + if($receiver_earnings <= 0){ + return ['code' => 0, 'msg' => '收礼人收益配置有误', 'data' => null]; + } + //1聊天送礼物 2房间语聊送礼 3直播送礼 4动态打赏 5系统任务 6-cp房间送礼 + if($from_type == 1 || $from_type == 2 || $from_type == 3 ||$from_type == 4 || $from_type == 6){ + //增加收益并记录日志 + $receiver = $this -> change_user_cion_or_earnings_log($to_id,$receiver_earnings,$from_id,2,11,'收礼增加收益'); + }elseif($from_type == 5){ + //增加收益并记录日志 + $receiver = $this -> change_user_cion_or_earnings_log($to_id,$receiver_earnings,$from_id,1,$change_type,'活动增加金币'); + }else{ + $receiver = false; + } + if(!$receiver){ + return ['code' => 0, 'msg' => '收礼人收益失败', 'data' => null]; + } + //用户魅力等级更新 + $user_level = model('Level')->user_level_data_update($to_id,$gift_price,2,$roomId); + if(!$user_level){ + return ['code' => 0, 'msg' => '用户等级更新失败', 'data' => null]; + } + + $room_owner_earnings = 0;//房主收益 + $room_owner_earningsg = 0;//公会会长收益 + //是否在房间 + if(isset($from_id) && ($from_type == 2 || $from_type == 6)){ + if($from_type == 6){ //cp电影房 + //房主有收益 + if(get_system_config_value('room_cp_room_user_ratio') > 0){ + $room_owner = Db::name('vs_room')->where(['id'=>$from_id,'apply_status'=>2])->value('user_id'); + //计算房主收益//room_author_ratio + $room_owner_earnings = $this -> receiver_earnings($room_owner,$gift_price,699); + if($room_owner_earnings > 0){ + //增加收益并记录日志 + $room_owner_earning = $this -> change_user_cion_or_earnings_log($room_owner,$room_owner_earnings,$from_id,2,18,'房主收益'); + if(!$room_owner_earning){ + return ['code' => 0, 'msg' => '房主收益失败', 'data' => null]; + } + } + } + //公会长收益 + if(get_system_config_value('room_cp_guild_user_ratio') > 0){ + $guild_id = Db::name('vs_guild_user')->where(['user_id'=>$to_uid,'status'=>1])->value('guild_id'); + if($guild_id){ + $room_guild = Db::name('vs_guild')->where(['id'=>$guild_id])->value('user_id'); + //计算会长收益 + $room_owner_earningsg = $this -> receiver_earnings($room_guild,$gift_price,698); + //增加收益并记录日志 + $room_owner_earningg = $this -> change_user_cion_or_earnings_log($room_guild,$room_owner_earningsg,$from_id,2,21,'工会长收益'); + if(!$room_owner_earningg){ + return ['code' => 0, 'msg' => '工会长收益失败', 'data' => null]; + } + } + } + + }else{ + $room_owner = Db::name('vs_room')->where(['id'=>$from_id,'apply_status'=>2])->value('user_id'); + //计算房主收益//room_author_ratio + $room_owner_earnings = $this -> receiver_earnings($room_owner,$gift_price,99);//结果是钻石 + if($room_owner_earnings > 0){ + //主持人收益 + //在主持位的主持人 + $host_id = Db::name('vs_room_pit')->where(['room_id'=>$from_id,'pit_number'=>9])->value('user_id'); + if($host_id){ + //计算主持人收益 + $host_earnings = $this -> receiver_earnings($host_id,$room_owner_earnings*get_system_config_value('rmb_coin_ratio'),98,$from_id); + if($host_earnings > 0){ + //增加主持人收益并记录日志 + $host_earnings_earning = $this -> change_user_cion_or_earnings_log($host_id,$host_earnings,$from_id,2,19,'主持人收益'); + if(!$host_earnings_earning){ + return ['code' => 0, 'msg' => '主持人收益失败', 'data' => null]; + } + //增加房主收益并记录日志 + $room_owner_earningss = $room_owner_earnings - $host_earnings; + if($room_owner_earningss > 0){ + $room_owner_earning = $this -> change_user_cion_or_earnings_log($room_owner,$room_owner_earningss,$from_id,2,18,'房主收益'); + if(!$room_owner_earning){ + return ['code' => 0, 'msg' => '房主收益失败', 'data' => null]; + } + } + + }else{ + //增加房主收益并记录日志 + $room_owner_earning = $this -> change_user_cion_or_earnings_log($room_owner,$room_owner_earnings,$from_id,2,18,'房主收益'); + if(!$room_owner_earning){ + return ['code' => 0, 'msg' => '房主收益失败', 'data' => null]; + } + } + }else{ + //增加房主收益并记录日志 + $room_owner_earning = $this -> change_user_cion_or_earnings_log($room_owner,$room_owner_earnings,$from_id,2,18,'房主收益'); + if(!$room_owner_earning){ + return ['code' => 0, 'msg' => '房主收益失败', 'data' => null]; + } + } + } + } + if($gift_info['label'] == 2){ + foreach ($gift_box as $gv) { + //记录送礼利率和各方收益 + //收礼人是否加入公会 + $configs = get_system_config(); + $is_join_guild = Db::name('vs_guild_user')->where(['user_id' => $to_uid, 'status' => 1, 'quit_time' => 0])->field('guild_id')->find(); + //收益增加 加入工会的收益 + if ($is_join_guild) { + $ratiog = $configs['room_gift_guild_ratio']; + } else { + $ratiog = 0; + } + //未加入工会的收益 + $ratiogr = $configs['room_gift_ratio']; + //收礼人最终的收益比例 + $ratio = $ratiogr + $ratiog; + //房主收益大于0 就代表有收益 且在房间 + if ($room_owner_earningsg > 0) { + $guid_ratio = $configs['room_cp_guild_user_ratio']; + } else { + $guid_ratio = 0; + } + //平台收益 = 总金额 - 收礼人收益 - 房主收益 - 工会长收益 + $app_ratio = 100 - $ratio - $configs['room_author_ratio'] - $guid_ratio; + $app_earning = coin_earning($gv['gift_price'], $app_ratio); + $receiver_earningss = $this -> receiver_earnings($to_id,$gv['gift_price'],$from_type); + $room_owner_earningss = $this -> receiver_earnings($room_owner,$gv['gift_price'],99);//结果是钻石 + $gift_rate = $this->change_give_gift_profit($gv['give_gift_id'], $ratio, $receiver_earningss, $configs['room_author_ratio'], $room_owner_earningss, $app_ratio, $app_earning); + if (!$gift_rate) { + Db::rollback(); + return ['code' => 0, 'msg' => '礼物记录失败', 'data' => null]; + } + } + }else{ + //记录送礼利率和各方收益 + //收礼人是否加入公会 + $configs = get_system_config(); + $is_join_guild = Db::name('vs_guild_user')->where(['user_id' => $to_uid, 'status' => 1, 'quit_time' => 0])->field('guild_id')->find(); + //收益增加 加入工会的收益 + if ($is_join_guild) { + $ratiog = $configs['room_gift_guild_ratio']; + } else { + $ratiog = 0; + } + //未加入工会的收益 + $ratiogr = $configs['room_gift_ratio']; + //收礼人最终的收益比例 + $ratio = $ratiogr + $ratiog; + //房主收益大于0 就代表有收益 且在房间 + if ($room_owner_earningsg > 0) { + $guid_ratio = $configs['room_cp_guild_user_ratio']; + } else { + $guid_ratio = 0; + } + //平台收益 = 总金额 - 收礼人收益 - 房主收益 - 工会长收益 + $app_ratio = 100 - $ratio - $configs['room_author_ratio'] - $guid_ratio; + $app_earning = coin_earning($gift_price, $app_ratio); + $gift_rate = $this->change_give_gift_profit($give_gift, $ratio, $receiver_earnings, $configs['room_author_ratio'], $room_owner_earnings, $app_ratio, $app_earning); + if (!$gift_rate) { + return ['code' => 0, 'msg' => '礼物记录失败', 'data' => null]; + } + } + } + + $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' => $from_id])->value('charm');//魅力 + + if(isset($from_id) && ($from_type == 2 || $from_type == 6)){ + //查询房间是否在PK中 是fa_vs_room_pk 表中的 room_id_a,还是room_id_b + $room_pk = Db::name('vs_room_pk')->where(['status' => 3, 'room_id_a' => $from_id])->field('pk_id')->find(); + if (!empty($room_pk)) { + // 当前 room_id 是 room_id_a 修改create_value_a + $rooma = Db::name('vs_room_pk')->where('pk_id', $room_pk['pk_id'])->setInc('create_value_a', $gift_price * 10); + $roomPKinfo = Db::name('vs_room_pk')->where('pk_id', $room_pk['pk_id'])->find(); + //推送变化 + $text = [ + 'room_id_a' => $roomPKinfo['room_id_a'],//发起者房间id + 'create_value_a' => $roomPKinfo['create_value_a'],//发起者房间值 + 'room_id_b' => $roomPKinfo['room_id_b'],//接受者房间id + 'receive_value_b' => $roomPKinfo['receive_value_b'],//接受者房间值 + 'text' => '' + ]; + model('Chat')->sendMsg(1015,$roomPKinfo['room_id_a'],$text); + model('Chat')->sendMsg(1015,$roomPKinfo['room_id_b'],$text); + } else { + // 当前 room_id 不是 room_id_a,可能是 room_id_b 或者不存在 + $room_pk_b = Db::name('vs_room_pk')->where(['status' => 3, 'room_id_b' => $from_id])->field('pk_id')->find(); + if (!empty($room_pk_b)) { + // 当前 room_id 是 room_id_b + $roomb = Db::name('vs_room_pk')->where('pk_id', $room_pk_b['pk_id'])->setInc('receive_value_b', $gift_price * 10); + $roomPKinfo = Db::name('vs_room_pk')->where('pk_id', $room_pk_b['pk_id'])->find(); + //推送变化 + $text = [ + 'room_id_a' => $roomPKinfo['room_id_a'],//发起者房间id + 'create_value_a' => $roomPKinfo['create_value_a'],//发起者房间值 + 'room_id_b' => $roomPKinfo['room_id_b'],//接受者房间id + 'receive_value_b' => $roomPKinfo['receive_value_b'],//接受者房间值 + 'text' => '' + ]; + model('Chat')->sendMsg(1015,$roomPKinfo['room_id_a'],$text); + model('Chat')->sendMsg(1015,$roomPKinfo['room_id_b'],$text); + } + } + //直播间送礼物 每日任务 + model('DailyTasks')->tasks_complete($uid,3); + } + } + + //增加房间火热值hot_value + $gift_totalaa = $gift_total * get_system_config_value('coin_charm_exp'); + db::name('vs_room')->where(['id' => $from_id])->inc('hot_value', $gift_totalaa)->inc('today_hot_value', $gift_totalaa)->update(); + + $roomtype = Db::name('vs_room')->where(['id' => $from_id])->value('type_id'); + if($roomtype == 6){ + //推送消息 交友房创建的私密房 倒计时增加 + $value = db::name('vs_room_cp_movie')->where('room_id', $from_id)->where('type',1) + ->value('time_day'); + if($value){ + db::name('vs_room_cp_movie')->where('room_id', $from_id)->where('type',1) + ->setInc('time_day', $gift_total); + $text111 = [ + 'room_id' => $from_id, + 'time_day' => db::name('vs_room_cp_movie')->where('room_id', $from_id)->where('type',1)->value('time_day'), + 'text' => '房间结束时间变化' + ]; + //聊天室推送系统消息 + model('Chat')->sendMsg(1052,$from_id,$text111); + } + } + + return ['code' => 1, 'msg' => '送礼成功', 'data' => ['gift_total' => $gift_total,'gift_user_data' =>$gift_user_data]]; + } + //送礼特效 public function give_gift_effect($to_id,$FromUserInfo,$gift_info,$num,$from_id) { @@ -808,35 +1126,35 @@ class GiveGift extends Model $gift_earning = coin_earning($all_gift_price,$gift_chat_earning); if($gift_type == 1){ //操作送礼人金币 - $res = model('common/UserWallet')->change_user_money($user_id, $all_gift_price, model('common/UserWallet')::MONEYTYPECOIN, model('common/UserWallet')::OPERATION_GIFT,model('common/UserWallet')::ChangeTypeLable(model('common/UserWallet')::OPERATION_GIFT),0,$to_uid,0); - if($res['code'] == 1){ - //操作收礼人收益 - $res = model('common/UserWallet')->change_user_money($to_uid, $gift_earning, model('common/UserWallet')::MONEYTYPEARNINGS, model('common/UserWallet')::GIVE_GIFT_EARNING,model('common/UserWallet')::ChangeTypeLable(model('common/UserWallet')::GIVE_GIFT_EARNING),0,$to_uid,0); - if($res['code'] == 1){ - //插入送礼记录 - $data = [ - 'user_id' => $user_id, - 'gift_user' => $to_uid, - 'gift_id' => $gid, - 'number' => $num, - 'from_id' => 0, - 'total_price' => $all_gift_price, - 'type' => 1, - 'from' => 1, - 'createtime' => time(), - 'updatetime' => time() - ]; - $re = Db::name('vs_give_gift')->insertGetId($data); - if($re){ - $app_ratio = 100 - $gift_chat_earning; - $app_earning = coin_earning($all_gift_price,$app_ratio); - $this->change_give_gift_profit($re,$gift_chat_earning,$gift_earning,0,0,$app_ratio,$app_earning); - return ['code' => 1, 'msg' => '送礼成功', 'data' => null]; - }else{ - return ['code' => 0, 'msg' => '送礼失败', 'data' => null]; - } - } - } + $res = model('common/UserWallet')->change_user_money($user_id, $all_gift_price, model('common/UserWallet')::MONEYTYPECOIN, model('common/UserWallet')::OPERATION_GIFT,model('common/UserWallet')::ChangeTypeLable(model('common/UserWallet')::OPERATION_GIFT),0,$to_uid,0); + if($res['code'] == 1){ + //操作收礼人收益 + $res = model('common/UserWallet')->change_user_money($to_uid, $gift_earning, model('common/UserWallet')::MONEYTYPEARNINGS, model('common/UserWallet')::GIVE_GIFT_EARNING,model('common/UserWallet')::ChangeTypeLable(model('common/UserWallet')::GIVE_GIFT_EARNING),0,$to_uid,0); + if($res['code'] == 1){ + //插入送礼记录 + $data = [ + 'user_id' => $user_id, + 'gift_user' => $to_uid, + 'gift_id' => $gid, + 'number' => $num, + 'from_id' => 0, + 'total_price' => $all_gift_price, + 'type' => 1, + 'from' => 1, + 'createtime' => time(), + 'updatetime' => time() + ]; + $re = Db::name('vs_give_gift')->insertGetId($data); + if($re){ + $app_ratio = 100 - $gift_chat_earning; + $app_earning = coin_earning($all_gift_price,$app_ratio); + $this->change_give_gift_profit($re,$gift_chat_earning,$gift_earning,0,0,$app_ratio,$app_earning); + return ['code' => 1, 'msg' => '送礼成功', 'data' => null]; + }else{ + return ['code' => 0, 'msg' => '送礼失败', 'data' => null]; + } + } + } }else{//背包礼物 $remarks = "赠送 ".$to_user_info['nickname']." 背包礼物 "; $res = model('UserGiftPack')->change_user_gift_pack($user_id,$gid,$num * -1,model('UserGiftPack')::GIFT_USE,$remarks); @@ -1015,7 +1333,7 @@ class GiveGift extends Model } //扣除用户金额 - $re = Db::name('user_wallet')->where('user_id',$uid)->setDec('coin',$total_gift_price); + $re = Db::name('user_wallet')->where('user_id',$uid)->setDec('coin',$total_gift_price); if(!$re){ return ['code'=>0,'msg'=>'扣除用户金额失败','data'=>null]; }