Files
yusheng-php/application/api/model/SingerSong.php

243 lines
9.3 KiB
PHP
Raw Normal View History

2025-11-12 17:10:17 +08:00
<?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();
2025-11-12 19:07:19 +08:00
if ($res && $res['status'] == 1) {
2025-11-13 15:26:17 +08:00
return ['code' => 0, 'msg' => '认证已通过,无需重复提交', 'data' => null];
2025-11-12 19:07:19 +08:00
}
2025-11-12 17:10:17 +08:00
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) {
2025-11-13 15:26:17 +08:00
return ['code' => 1, 'msg' => '提交成功', 'data' => null];
2025-11-12 17:10:17 +08:00
} else {
2025-11-13 15:26:17 +08:00
return ['code' => 0, 'msg' => '提交失败', 'data' => null];
2025-11-12 17:10:17 +08:00
}
}
/*
* 歌手添加歌曲
* @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_song')->where(['user_id' => $user_id, 'song_name' => $song_name])->find();
if ($res) {
2025-11-13 15:26:17 +08:00
return ['code' => 0, 'msg' => '请勿重复提交歌曲', 'data' => null];
2025-11-12 17:10:17 +08:00
}
$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) {
2025-11-13 15:26:17 +08:00
return ['code' => 1, 'msg' => '提交成功', 'data' => null];
2025-11-12 17:10:17 +08:00
} else {
2025-11-13 15:26:17 +08:00
return ['code' => 0, 'msg' => '提交失败', 'data' => null];
2025-11-12 17:10:17 +08:00
}
}
/*
* 获取房间内麦位上歌手歌曲
* @param room_id 房间id
* @param user_id 用户id
*/
public function getSong($user_id, $room_id, $page, $page_limit)
2025-11-12 17:10:17 +08:00
{
2025-11-12 17:45:49 +08:00
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();
2025-11-12 17:45:49 +08:00
}else{
//查询当前房间内麦位上的歌手
$room_singer = db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => ['<',9]])->column('user_id');
if ($room_singer) {
$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();
2025-11-12 17:45:49 +08:00
}else{
$res = [];
$count = 0;
2025-11-12 17:45:49 +08:00
}
}
if ($res) {
foreach ($res as $k => $v) {
$res[$k]['gift_name'] = db::name('vs_gift')->where(['gid' => $v['gift_id']])->value('gift_name');
2025-11-12 18:30:28 +08:00
$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['base_image']])->value('base_image');
$res[$k]['nickname'] = db::name('user')->where(['id' => $v['user_id']])->value('nickname');
2025-11-12 17:10:17 +08:00
}
return ['code' => 1, 'msg' => '获取成功', 'data' => ['count' => $count, 'lists' =>$res]];
2025-11-12 17:45:49 +08:00
} else {
2025-11-13 15:26:17 +08:00
return ['code' => 0, 'msg' => '暂无数据', 'data' => null];
2025-11-12 17:10:17 +08:00
}
2025-11-12 17:45:49 +08:00
2025-11-12 17:10:17 +08:00
}
2025-11-12 19:07:19 +08:00
/*
* 点歌
* @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) {
2025-11-13 15:26:17 +08:00
return ['code' => 0, 'msg' => '歌曲不存在', 'data' => null];
2025-11-12 19:07:19 +08:00
}
//查询用户余额
$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']) {
2025-11-13 15:26:17 +08:00
return ['code' => 0, 'msg' => '余额不足', 'data' => null];
2025-11-12 19:07:19 +08:00
}
//走送礼流程
$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) {
2025-11-13 15:26:17 +08:00
return ['code' => 0, 'msg' => '点歌失败', 'data' => null];
2025-11-12 19:07:19 +08:00
}
//给前端推送
$text = [
'text' => '房间点歌变化'
];
//聊天室推送系统消息
model('Chat')->sendMsg(1070,$room_id,$text);
2025-11-13 15:26:17 +08:00
return ['code' => 1, 'msg' => '点歌成功', 'data' => null];
2025-11-12 19:07:19 +08:00
} else {
2025-11-13 15:26:17 +08:00
return ['code' => 0, 'msg' => $res['msg'], 'data' => null];
2025-11-12 19:07:19 +08:00
}
}
2025-11-12 19:39:23 +08:00
/*
* 点歌列表
* @param room_id 房间id
* @param type 类型 1:已点列表2:今日列表3昨日列表4本周列表5本月列表
*/
public function singerSongList($room_id,$type,$page,$page_limit)
2025-11-12 19:39:23 +08:00
{
$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();
2025-11-12 19:39:23 +08:00
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' => $res];
}
2025-11-13 11:25:46 +08:00
/*
* 歌手等级收礼升级
* @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(['exp' => ['<=', $exps]])->order('exp desc')->find();
if ($level) {
db::name('vs_singer')->where(['id' => $is_singer['id']])->update(['exp' => $exps,'level' => $level['level']]);
}
}
return true;
}
2025-11-12 17:10:17 +08:00
}