Files
yusheng-php/application/api/model/SingerSong.php
2025-11-14 18:03:43 +08:00

277 lines
11 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\api\model;
use think\Db;
use think\Model;
class SingerSong extends Model
{
/*
* 歌手认证 状态及等级
*/
public function singerAuthStatus($user_id)
{
$res = db::name('vs_singer')->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];
}
$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])->count();
$res = db::name('vs_singer_song')->where(['user_id' => $user_id])->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]])->count();
$res = db::name('vs_singer_song')->where(['user_id' => ['in', $room_singer]])->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]['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()
];
$result = db::name('vs_song_log')->insert($data);
if (!$result) {
return ['code' => 0, 'msg' => '点歌失败', 'data' => null];
}
//给前端推送
$text = [
'text' => '房间点歌变化'
];
//聊天室推送系统消息
model('Chat')->sendMsg(1070,$room_id,$text);
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;
}
$res = db::name('vs_song_log')->where($where)->order('sort desc')->page($page,$page_limit)->select();
$count = db::name('vs_song_log')->where($where)->count();
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]['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;
}
}