where(['user_id' => $user_id])->find(); if ($res) { $data = [ 'status' => $res['status'], 'level' => $res['level'], ]; } else { $data = [ 'status' => -1, 'level' => 0, ]; } return $data ; } /* * 歌手认证 */ public function singerAuth($user_id, $song) { //查询是否提交过认证 $res = db::name('vs_singer')->where(['user_id' => $user_id])->find(); if ($res && $res['status'] == 1) { return ['code' => 0, 'msg' => '认证已通过,无需重复提交', 'data' => null]; } if ($res) { $data = [ 'song' => $song, 'status' => 0, 'updatetime' => time() ]; $result = db::name('vs_singer')->where(['id' => $res['id']])->update($data); }else{ $data = [ 'user_id' => $user_id, 'song' => $song, 'status' => 0, 'createtime' => time() ]; $result = db::name('vs_singer')->insert($data); } if ($result) { return ['code' => 1, 'msg' => '提交成功', 'data' => null]; } else { return ['code' => 0, 'msg' => '提交失败', 'data' => null]; } } /* * 歌手添加歌曲 * @param song_name 歌曲名称 * @param gift_id 礼物id * @param gift_num 礼物数量 */ public function singerAddSong($user_id, $song_name, $gift_id, $gift_num) { //查询是否是认证歌手 $res = db::name('vs_singer')->where(['user_id' => $user_id])->find(); if (!$res || $res['status'] != 1) { return ['code' => 0, 'msg' => '请先认证歌手', 'data' => null]; } //查询是否提交过歌曲 $res = db::name('vs_singer_song')->where(['user_id' => $user_id, 'song_name' => $song_name])->find(); if ($res) { return ['code' => 0, 'msg' => '请勿重复提交歌曲', 'data' => null]; } //礼物不能是CP礼物 $cp_gift_ids = explode(',', get_system_config_value('cp_gift_id')); if (in_array($gift_id, $cp_gift_ids)) { return ['code' => 0, 'msg' => '礼物不能是CP礼物,请重新选择', 'data' => null]; } $data = [ 'user_id' => $user_id, 'song_name' => $song_name, 'gift_id' => $gift_id, 'gift_num' => $gift_num, 'createtime' => time() ]; $result = db::name('vs_singer_song')->insert($data); if ($result) { return ['code' => 1, 'msg' => '提交成功', 'data' => null]; } else { return ['code' => 0, 'msg' => '提交失败', 'data' => null]; } } /* * 获取房间内麦位上歌手歌曲 * @param room_id 房间id * @param user_id 用户id */ public function getSong($uid, $user_id, $room_id, $page, $page_limit) { if($user_id > 0){ $count = db::name('vs_singer_song')->where(['user_id' => $user_id,'deletetime' => 0])->count(); $res = db::name('vs_singer_song')->where(['user_id' => $user_id,'deletetime' => 0])->page($page, $page_limit)->select(); }else{ //查询当前房间内麦位上的歌手 $room_singer = db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => ['<',9]])->column('user_id'); if ($room_singer) { //$uid 是当前自己,有自己就去除自己 $room_singer = array_diff($room_singer, [$uid]); $count = db::name('vs_singer_song')->where(['user_id' => ['in', $room_singer],'deletetime' => 0])->count(); $res = db::name('vs_singer_song')->where(['user_id' => ['in', $room_singer],'deletetime' => 0])->page($page, $page_limit)->select(); }else{ $res = []; $count = 0; } } if ($res) { foreach ($res as $k => $v) { $res[$k]['gift_name'] = db::name('vs_gift')->where(['gid' => $v['gift_id']])->value('gift_name'); $res[$k]['gift_price'] = db::name('vs_gift')->where(['gid' => $v['gift_id']])->value('gift_price'); $res[$k]['base_image'] = db::name('vs_gift')->where(['gid' => $v['gift_id']])->value('base_image'); $res[$k]['singer_nickname'] = db::name('user')->where(['id' => $v['user_id']])->value('nickname'); } return ['code' => 1, 'msg' => '获取成功', 'data' => ['count' => $count, 'lists' =>$res]]; } else { return ['code' => 1, 'msg' => '暂无数据', 'data' => ['count' => $count, 'lists' =>$res]]; } } /* * 点歌 * @param song_id 歌曲id * @param user_id 用户id */ public function singerSong($user_id, $song_id, $room_id) { //查询歌曲信息 $song = db::name('vs_singer_song')->where(['id' => $song_id])->find(); if (!$song) { return ['code' => 0, 'msg' => '歌曲不存在', 'data' => null]; } //查询歌曲是否是自己的 if ($song['user_id'] == $user_id) { return ['code' => 0, 'msg' => '不能点自己歌曲', 'data' => null]; } //查询用户余额 $user_money = db::name('user_wallet')->where(['user_id' => $user_id])->value('coin'); $gift_price = db::name('vs_gift')->where(['gid' => $song['gift_id']])->value('gift_price'); if ($user_money < $gift_price * $song['gift_num']) { return ['code' => 0, 'msg' => '余额不足', 'data' => null]; } //走送礼流程 $res = model('GiveGift')->give_gift($user_id,$song['user_id'],$song['gift_id'],$song['gift_num'],2,1,$room_id); if ($res['code'] == 1) { $data = [ 'user_id' => $user_id, 'room_id' => $room_id, 'singer_song_id' => $song_id, 'createtime' => time() ]; //插入数据库并获取ID $result = db::name('vs_song_log')->insertGetId($data); if (!$result) { return ['code' => 0, 'msg' => '点歌失败', 'data' => null]; } //获取当前房间内点歌总数 $song_info_count = db::name('vs_song_log')->where(['room_id' => $room_id,'status' => ['in',[0,1]]])->count(); //给前端推送 $text = [ 'text' => '房间点歌数量变化', 'count' => $song_info_count ]; model('Chat')->sendMsg(1072,$room_id,$text); if($song_info_count == 1){ //修改房间当前演唱歌曲 db::name('vs_song_log')->where(['id' => $result])->update(['status' => 1]); $song_info = db::name('vs_song_log')->where(['id' => $result])->find(); $song_info['boss_user_id'] = $song_info['user_id']; $song_info['boss_nickname'] = db::name('user')->where(['id' => $song_info['user_id']])->value('nickname'); $song_info['boss_avatar'] = db::name('user')->where(['id' => $song_info['user_id']])->value('avatar'); $song_info['boss_dress'] = model('api/Decorate')->user_decorate_detail($song_info['user_id'], 1); $song_info['boss_mic_cycle'] = model('api/Decorate')->user_decorate_detail($song_info['user_id'],3); $singer_song = db::name('vs_singer_song')->where(['id' => $song_info['singer_song_id']])->find(); $song_info['singer_user_id'] = $singer_song['user_id']; $song_info['singer_nickname'] = db::name('user')->where(['id' => $singer_song['user_id']])->value('nickname'); $song_info['singer_avatar'] = db::name('user')->where(['id' => $singer_song['user_id']])->value('avatar'); $song_info['singer_dress'] = model('api/Decorate')->user_decorate_detail($singer_song['user_id'], 1); $song_info['singer_mic_cycle'] = model('api/Decorate')->user_decorate_detail($singer_song['user_id'],3); $song_info['song_name'] = $singer_song['song_name']; $song_info_data = [ 'text' => '房间当前演唱歌曲变化', 'song_info' => $song_info ]; model('Chat')->sendMsg(1070,$room_id,$song_info_data); }elseif ($song_info_count == 2){ //给前端推送下首歌曲信息 $next_song_info = db::name('vs_song_log')->where(['id' => $result])->find(); $next_song_info['boss_user_id'] = $next_song_info['user_id']; $next_song_info['boss_nickname'] = db::name('user')->where(['id' => $next_song_info['user_id']])->value('nickname'); $next_song_info['boss_avatar'] = db::name('user')->where(['id' => $next_song_info['user_id']])->value('avatar'); $next_song_info['boss_dress'] = model('api/Decorate')->user_decorate_detail($next_song_info['user_id'], 1); $next_song_info['boss_mic_cycle'] = model('api/Decorate')->user_decorate_detail($next_song_info['user_id'],3); $singer_song = db::name('vs_singer_song')->where(['id' => $next_song_info['singer_song_id']])->find(); $next_song_info['singer_user_id'] = $singer_song['user_id']; $next_song_info['singer_nickname'] = db::name('user')->where(['id' => $singer_song['user_id']])->value('nickname'); $next_song_info['singer_avatar'] = db::name('user')->where(['id' => $singer_song['user_id']])->value('avatar'); $next_song_info['singer_dress'] = model('api/Decorate')->user_decorate_detail($singer_song['user_id'], 1); $next_song_info['singer_mic_cycle'] = model('api/Decorate')->user_decorate_detail($singer_song['user_id'],3); $next_song_info['song_name'] = $singer_song['song_name']; $data = [ 'text' => '房间下一首演唱歌曲变化', 'next_song_info' => $next_song_info ]; model('Chat')->sendMsg(1071,$next_song_info['room_id'],$data); } return ['code' => 1, 'msg' => '点歌成功', 'data' => null]; } else { return ['code' => 0, 'msg' => $res['msg'], 'data' => null]; } } /* * 点歌列表 * @param room_id 房间id * @param type 类型 1:已点列表,2:今日列表,3:昨日列表,4:本周列表,5:本月列表 */ public function singerSongList($room_id,$type,$page,$page_limit) { $where = [ 'room_id' => $room_id ]; switch ($type) { case 2: $where['createtime'] = ['between time',[strtotime(date('Y-m-d')),time()]]; break; case 3: $where['createtime'] = ['between time',[strtotime(date('Y-m-d',strtotime("-1 day"))),strtotime(date('Y-m-d'))]]; $where['status'] = 2; break; case 4: $where['createtime'] = ['between time',[strtotime(date('Y-m-d',strtotime("-1 week"))),time()]]; $where['status'] = 2; break; case 5: $where['createtime'] = ['between time',[strtotime(date('Y-m-d',strtotime("-1 month"))),time()]]; $where['status'] = 2; break; case 1: default: $where['status'] = ['in','1,0']; break; } $count = db::name('vs_song_log')->where($where)->count(); if($type == 1){ $res1 = db::name('vs_song_log')->where(['status' => 1,'room_id' => $room_id])->order('id desc')->select(); $res2 = db::name('vs_song_log')->where(['status' => 0,'room_id' => $room_id])->order('sort desc')->page($page,$page_limit-1)->select(); //把$res2 添加到$res1的 最后 $res = array_merge($res1,$res2); }else{ $res = db::name('vs_song_log')->where($where)->order('sort desc')->page($page,$page_limit)->select(); } if ($res) { foreach ($res as $k => $v) { $res[$k]['boss_nickname'] = db::name('user')->where(['id' => $v['user_id']])->value('nickname'); $res[$k]['song_name'] = db::name('vs_singer_song')->where(['id' => $v['singer_song_id']])->value('song_name'); $res[$k]['gift_name'] = db::name('vs_gift')->where(['gid' => db::name('vs_singer_song')->where(['id' => $v['singer_song_id']])->value('gift_id')])->value('gift_name'); $res[$k]['gift_price'] = db::name('vs_gift')->where(['gid' => db::name('vs_singer_song')->where(['id' => $v['singer_song_id']])->value('gift_id')])->value('gift_price'); $res[$k]['base_image'] = db::name('vs_gift')->where(['gid' => db::name('vs_singer_song')->where(['id' => $v['singer_song_id']])->value('gift_id')])->value('base_image'); $res[$k]['gift_num'] = db::name('vs_singer_song')->where(['id' => $v['singer_song_id']])->value('gift_num'); $res[$k]['singer_nickname'] = db::name('user')->where(['id' => db::name('vs_singer_song')->where(['id' => $v['singer_song_id']])->value('user_id')])->value('nickname'); } } return ['code' => 1, 'msg' => '获取成功', 'data' => ['count' => $count, 'lists' =>$res]]; } /* * 点歌各类型各个总数 * @param type 类型 1:已点列表,2:今日列表,3:昨日列表,4:本周列表,5:本月列表 * @param room_id 房间id */ public function singerSongCount($room_id) { $where = [ 'room_id' => $room_id ]; $res = [ 'already' => db::name('vs_song_log')->where($where)->where(['status' => ['in','1,0']])->count(), 'total' => db::name('vs_song_log')->where($where)->count(), 'today' => db::name('vs_song_log')->where($where)->where('createtime', 'between time', [strtotime(date('Y-m-d')), time()])->count(), 'yesterday' => db::name('vs_song_log')->where($where)->where('createtime', 'between time', [strtotime(date('Y-m-d', strtotime("-1 day"))), strtotime(date('Y-m-d'))])->count(), 'week' => db::name('vs_song_log')->where($where)->where('createtime', 'between time', [strtotime(date('Y-m-d', strtotime("-1 week"))), time()])->count(), 'month' => db::name('vs_song_log')->where($where)->where('createtime', 'between time', [strtotime(date('Y-m-01')), strtotime(date('Y-m-t'))])->count() ]; return ['code' => 1, 'msg' => '获取成功', 'data' => $res]; } /* * 歌手等级收礼升级 * @param user_id 用户id */ public function singerLevelUp($user_id,$coin) { //判断用户是否认证歌手 $is_singer = db::name('vs_singer')->where(['user_id' => $user_id,'status' => 1])->find(); if ($is_singer) { //增加经验值并且判断是否可以升级 $exp = db::name('vs_singer')->where(['id' => $is_singer['id']])->value('exp'); $exp_coin = round($coin / get_system_config_value('singer_coin_exp'), 2); $exps = $exp + $exp_coin; //查询等级 $level = db::name('vs_singer_level')->where(['change_value' => ['<=', $exps]])->order('change_value desc')->find(); if ($level) { db::name('vs_singer')->where(['id' => $is_singer['id']])->update(['exp' => $exps,'level' => $level['level']]); } } return true; } /* * 切歌 * @param room_id 房间id * @param user_id 用户id * @param song_id 歌曲id */ public function singerSongCut($user_id,$song_id) { $sonng_log = db::name('vs_song_log')->where(['id' => $song_id])->find(); $singer_user_id = db::name('vs_singer_song')->where(['id' => $sonng_log['singer_song_id']])->value('user_id'); //判断用户是否是房主 $room_info = db::name('vs_room')->where('id', $sonng_log['room_id'])->field('user_id')->find(); //判断用户是否是主持 $room_user_info = db::name('vs_room_host')->where(['room_id' => $sonng_log['room_id'], 'user_id' => $user_id,'delete_time' => null])->find(); if ($room_info['user_id'] != $user_id && !$room_user_info && $singer_user_id != $user_id) { return ['code' => 0, 'msg' => '您没有权限切歌','data' => null]; } if ($sonng_log) { if ($sonng_log['status'] == 1) { $up = db::name('vs_song_log')->where(['id' => $song_id])->update(['status' => 2]); if ($up) { $id = db::name('vs_song_log')->where(['room_id' => $sonng_log['room_id'],'status' => 0])->order('sort desc')->value('id'); if($id){ db::name('vs_song_log')->where(['id' => $id])->update(['status' => 1]); //给前端推送 //获取当前房间内点歌总数 $song_info_count = db::name('vs_song_log')->where(['room_id' => $sonng_log['room_id'],'status' => ['in',[0,1]]])->count(); //给前端推送 $text = [ 'text' => '房间点歌数量变化', 'count' => $song_info_count ]; model('Chat')->sendMsg(1072,$sonng_log['room_id'],$text); //房间当前演唱歌曲 $song_info = db::name('vs_song_log')->where(['id' => $id])->find(); $song_info['boss_user_id'] = $song_info['user_id']; $song_info['boss_nickname'] = db::name('user')->where(['id' => $song_info['user_id']])->value('nickname'); $song_info['boss_avatar'] = db::name('user')->where(['id' => $song_info['user_id']])->value('avatar'); $song_info['boss_dress'] = model('api/Decorate')->user_decorate_detail($song_info['user_id'], 1); $song_info['boss_mic_cycle'] = model('api/Decorate')->user_decorate_detail($song_info['user_id'],3); $singer_song = db::name('vs_singer_song')->where(['id' => $song_info['singer_song_id']])->find(); $song_info['singer_user_id'] = $singer_song['user_id']; $song_info['singer_nickname'] = db::name('user')->where(['id' => $singer_song['user_id']])->value('nickname'); $song_info['singer_avatar'] = db::name('user')->where(['id' => $singer_song['user_id']])->value('avatar'); $song_info['singer_dress'] = model('api/Decorate')->user_decorate_detail($singer_song['user_id'], 1); $song_info['singer_mic_cycle'] = model('api/Decorate')->user_decorate_detail($singer_song['user_id'],3); $song_info['song_name'] = $singer_song['song_name']; $song_info_data = [ 'text' => '房间当前演唱歌曲变化', 'song_info' => $song_info ]; model('Chat')->sendMsg(1070,$sonng_log['room_id'],$song_info_data); //给前端推送下首歌曲信息 $next_song_info = db::name('vs_song_log')->where(['room_id' => $sonng_log['room_id'],'status' => 0])->order('sort desc')->find(); if($next_song_info){ $next_song_info['boss_user_id'] = $next_song_info['user_id']; $next_song_info['boss_nickname'] = db::name('user')->where(['id' => $next_song_info['user_id']])->value('nickname'); $next_song_info['boss_avatar'] = db::name('user')->where(['id' => $next_song_info['user_id']])->value('avatar'); $next_song_info['boss_dress'] = model('api/Decorate')->user_decorate_detail($next_song_info['user_id'], 1); $next_song_info['boss_mic_cycle'] = model('api/Decorate')->user_decorate_detail($next_song_info['user_id'],3); $singer_song = db::name('vs_singer_song')->where(['id' => $next_song_info['singer_song_id']])->find(); $next_song_info['singer_user_id'] = $singer_song['user_id']; $next_song_info['singer_nickname'] = db::name('user')->where(['id' => $singer_song['user_id']])->value('nickname'); $next_song_info['singer_avatar'] = db::name('user')->where(['id' => $singer_song['user_id']])->value('avatar'); $next_song_info['singer_dress'] = model('api/Decorate')->user_decorate_detail($singer_song['user_id'], 1); $next_song_info['singer_mic_cycle'] = model('api/Decorate')->user_decorate_detail($singer_song['user_id'],3); $next_song_info['song_name'] = $singer_song['song_name']; }else{ $next_song_info = null; } $data = [ 'text' => '房间下一首演唱歌曲变化', 'next_song_info' => $next_song_info ]; model('Chat')->sendMsg(1071,$sonng_log['room_id'],$data); }else{ $song_info_data = [ 'text' => '房间当前演唱歌曲变化', 'song_info' => null ]; model('Chat')->sendMsg(1070,$sonng_log['room_id'],$song_info_data); $data = [ 'text' => '房间下一首演唱歌曲变化', 'next_song_info' => null ]; model('Chat')->sendMsg(1071,$sonng_log['room_id'],$data); return ['code' => 0, 'msg' => '暂无歌曲,请点歌吧','data' => null]; } }else{ return ['code' => 0, 'msg' => '切歌失败','data' => null]; } } }else{ return ['code' => 0, 'msg' => '网络错误','data' => null]; } return ['code' => 1, 'msg' => '切歌成功','data' => null]; } }