代码初始化

This commit is contained in:
2025-08-07 20:21:47 +08:00
commit 50f3a2dbb0
2191 changed files with 374790 additions and 0 deletions

View File

@@ -0,0 +1,476 @@
<?php
namespace app\api\model;
use think\Db;
use think\Loader;
use think\Model;
Loader::import('shengwang.Shengwang', EXTEND_PATH, '.php');
class Agora extends Model
{
//获取歌曲列表
public function agora_song_list($page, $page_limit, $song_code){
$config = get_system_config();
$agora_app_id = $config['agora_app_id'];//cc71b8df2c254c35bc96fbf591b6801f
$requestId = 'df2ce922m28xy80z80i3j7tq2vbooetv';
$pageType = $page;
$pageCode = $song_code;
$size = $page_limit;
$agora_app_key = $config['agora_app_key'];
$agora_app_secret = $config['agora_app_secret'];
$credentials = $agora_app_key . ":" . $agora_app_secret;
// 使用 base64 进行编码
$AuthorizationHeader = base64_encode($credentials);
$postUrl = 'https://api.agora.io/cn/v1.0/projects/'.$agora_app_id.'/ktv-service/api/serv/songs?requestId='.$requestId.'&pageType='.$pageType.'&pageCode='.$pageCode.'&size='.$size;
$headerArray =array(
"Content-type:application/json",
"Accept:application/json",
"Authorization:Basic ".$AuthorizationHeader,
);
$ch = curl_init();//初始化curl
curl_setopt($ch, CURLOPT_URL, $postUrl);//抓取指定网页
// curl_setopt($ch, CURLOPT_HEADER, 1);//设置header
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
// curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
// curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);CURLOPT_RETURNTRANSFER
curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArray);
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
$data = curl_exec($ch);//运行curl
curl_close($ch);
$data = json_decode($data, true);
if($data['code'] == 0){
return ['code' => 200, 'msg' => $data['msg'], 'data' => $data['data']];
}else{
return ['code' => 201, 'msg' => $data['msg'], 'data' => null];
}
// dump($data);
}
//获取增量歌曲列表
public function agora_new_song_list($page, $page_limit, $lastUpdateTime = 0){
$config = get_system_config();
$agora_app_id = $config['agora_app_id'];//cc71b8df2c254c35bc96fbf591b6801f
$requestId = 'df2ce922m28xy80z80i3j7tq2vbooetv';
$pageType = $page;
// $pageCode = $song_code;
$size = $page_limit;
$agora_app_key = $config['agora_app_key'];
$agora_app_secret = $config['agora_app_secret'];
$credentials = $agora_app_key . ":" . $agora_app_secret;
// 使用 base64 进行编码
$AuthorizationHeader = base64_encode($credentials);
$postUrl = 'https://api.agora.io/cn/v1.0/projects/'.$agora_app_id.'/ktv-service/api/serv/songs-incr?requestId='.$requestId.'&lastUpdateTime='.$lastUpdateTime.'&size='.$size.'&pageType='.$pageType;//'&pageType='.$pageType.'&pageCode='.$pageCode.'&size='.$size.
$headerArray =array(
"Content-type:application/json",
"Accept:application/json",
"Authorization:Basic ".$AuthorizationHeader,
);
$ch = curl_init();//初始化curl
curl_setopt($ch, CURLOPT_URL, $postUrl);//抓取指定网页
// curl_setopt($ch, CURLOPT_HEADER, 1);//设置header
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
// curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
// curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);CURLOPT_RETURNTRANSFER
curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArray);
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
$data = curl_exec($ch);//运行curl
curl_close($ch);
$data = json_decode($data, true);
if($data['code'] == 0){
return ['code' => 200, 'msg' => $data['msg'], 'data' => $data['data']];
}else{
return ['code' => 201, 'msg' => $data['msg'], 'data' => null];
}
}
//获取指定歌曲详情
public function agora_song_info($song_code, $lyric_type){
$config = get_system_config();
$agora_app_id = $config['agora_app_id'];//cc71b8df2c254c35bc96fbf591b6801f
$requestId = 'df2ce922m28xy80z80i3j7tq2vbooetv';
$songCode = $song_code;
$agora_app_key = $config['agora_app_key'];
$agora_app_secret = $config['agora_app_secret'];
$credentials = $agora_app_key . ":" . $agora_app_secret;
$lyric_type = 1;
// 使用 base64 进行编码
$AuthorizationHeader = base64_encode($credentials);
$postUrl = 'https://api.agora.io/cn/v1.0/projects/'.$agora_app_id.'/ktv-service/api/serv/song-url?requestId='.$requestId.'&lyricType='.$lyric_type.'&songCode='.$songCode;//'&pageType='.$pageType.'&pageCode='.$pageCode.'&size='.$size.
$headerArray =array(
"Content-type:application/json",
"Accept:application/json",
"Authorization:Basic ".$AuthorizationHeader,
);
$ch = curl_init();//初始化curl
curl_setopt($ch, CURLOPT_URL, $postUrl);//抓取指定网页
// curl_setopt($ch, CURLOPT_HEADER, 1);//设置header
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
// curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
// curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);CURLOPT_RETURNTRANSFER
curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArray);
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
$data = curl_exec($ch);//运行curl
curl_close($ch);
$data = json_decode($data, true);
// dump($data);exit;
if($data['code'] == 0){
return ['code' => 200, 'msg' => $data['msg'], 'data' => $data['data']];
}else{
return ['code' => 201, 'msg' => $data['msg'], 'data' => null];
}
}
//获取声网token信息
public function agora_token_info($uid, $room_id){
$config = get_system_config();
$agora_app_id = $config['agora_app_id'];
$agora_app_certificate = $config['agora_app_certificate'];
$agora_app_key = $config['agora_app_key'];
$agora_app_secret = $config['agora_app_secret'];
$agora = new \shengwang\Shengwang();
$Rtc_token = $agora->RtcTokenBuilder($uid, $room_id, 0, $agora_app_id, $agora_app_certificate);
return $Rtc_token;
}
//同步热门歌单
public function synchro_agora_song_hot($hot_type){
$config = get_system_config();
$agora_app_id = $config['agora_app_id'];//cc71b8df2c254c35bc96fbf591b6801f
$requestId = 'df2ce922m28xy80z80i3j7tq2vbooetv';
$agora_app_key = $config['agora_app_key'];
$agora_app_secret = $config['agora_app_secret'];
$credentials = $agora_app_key . ":" . $agora_app_secret;
// 使用 base64 进行编码
$AuthorizationHeader = base64_encode($credentials);
$postUrl = 'https://api.agora.io/cn/v1.0/projects/'.$agora_app_id.'/ktv-service/api/serv/song-hot?requestId='.$requestId.'&hotType='.$hot_type;
$headerArray =array(
"Content-type:application/json",
"Accept:application/json",
"Authorization:Basic ".$AuthorizationHeader,
);
$ch = curl_init();//初始化curl
curl_setopt($ch, CURLOPT_URL, $postUrl);//抓取指定网页
// curl_setopt($ch, CURLOPT_HEADER, 1);//设置header
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
// curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
// curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);CURLOPT_RETURNTRANSFER
curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArray);
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
$data = curl_exec($ch);//运行curl
curl_close($ch);
$data = json_decode($data, true);
if($data['code'] == 0){
return ['code' => 200, 'msg' => $data['msg'], 'data' => $data['data']];
}else{
return ['code' => 201, 'msg' => $data['msg'], 'data' => null];
}
}
/************************************分 割 线***********************************************************/
//同步热门歌单
public function synchro_hot_song($hot_type){
$time = date('Y-m-d').' 5:00:00';
$time = strtotime($time);
//当天是否已同步
$map = [];
$map[] = ['add_time', '>=', $time];
$hot_song = db::name('agora_song_hot')->where($map)->order('hid desc')->limit(1)->find();
if($hot_song){
return ['code' => 201, 'msg' => '今日已同步过热门歌单', 'data' => null];
}
//获取热门歌单
$datas = model('Agora')->synchro_agora_song_hot($hot_type);
if($datas['code'] == 200){
if(empty($datas['data']['list'])){
return['code' => 201, 'msg' => '暂无歌曲数据', 'data' => null];
}else{
$data = [];
$data_array = [];
foreach ($datas['data']['list'] as $k => $v){
$data['song_code'] = $v['songCode'];
$data['num'] = $v['num'];
$data['add_time'] = time();
$data_array[] = $data;
}
$result = db::name('agora_song_hot')->insertAll($data_array);
if($result){
return ['code' => 200, 'msg' => '同步成功', 'data' => null];
}else{
return ['code' => 201, 'msg' => '同步失败', 'data' => null];
}
}
}else{
return ['code' => 201, 'msg' => $datas['msg'], 'data' => null];
}
}
//热歌榜单
public function hot_song_list(){
$data = db::name('agora_song_hot')->alias('a')->join('yy_agora_song b','a.song_code = b.song_code')->field('a.hid,a.song_code,a.num,b.song_name,b.poster,b.singer,duration')->order('hid asc')->limit(100)->select();
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
}
//获得歌曲列表
public function song_list($name, $page, $page_limit){
$map = [];
if(!empty($name)){
$map[] = ['song_name|singer', 'like', '%'.$name.'%'];
}
$data = db::name('agora_song')->where($map)->order('aid asc')->page($page, $page_limit)->select();
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
}
//点歌
public function dot_song($uid, $rid, $song_code, $is_accapella){
$user_info = db::name('user')->find($uid);
if(!$user_info){
return ['code' => 201, 'msg' => '该用户不存在', 'data' => null];
}
$room_info = db::name('room')->where('rid', $rid)->find();
if(!$room_info){
return ['code' => 201, 'msg' => '该房间不存在', 'data' => null];
}
$song = db::name('agora_song')->where('song_code', $song_code)->find();
if(!$song){
return ['code' => 201, 'msg' => '该歌曲不存在', 'data' => null];
}
$map = [];
$map[] = ['rid', '=', $rid];
$map[] = ['uid', '=', $uid];
$map[] = ['song_code', '=', $song_code];
$map[] = ['is_delete', '=', 1];
$song_dot = db::name('agora_song_dot')->where($map)->find();
if($song_dot){
return ['code' => 201, 'msg' => '该歌曲已点过', 'data' => null];
}
//K歌厅点歌限制
if($room_info['cate_id'] == 27){
//当前是否已进唱歌模式
$auction_info = db::name('room_song_log')->where('rid', $rid)->where('is_delete', 1)->find();
if($auction_info){
$user_song_dot_arr = explode(',', $auction_info['uid_array']);
if(in_array($uid, $auction_info)){
$where = [];
$where[] = ['uid', '=', $uid];
$where[] = ['rsid', '=', $auction_info['id']];
$where[] = ['status', '>', 1];
$user_song_info = db::name('room_song_user_log')->where($where)->find();
if($user_song_info){
return ['code' => 201, 'msg' => '您已过了唱歌阶段无法点歌', 'data' => null];
}
}else{
return ['code' => 201, 'msg' => '当前活动进行中无法点歌', 'data' => null];
}
}
}
//练歌房一个用户只能点一首歌
// if($room_info['cate_id'] == 27){
// $map = [];
// $map[] = ['rid', '=', $rid];
// $map[] = ['uid', '=', $uid];
// $map[] = ['song_code', '=', $song_code];
// $map[] = ['is_delete', '=', 1];
// $song_dot = db::name('agora_song_dot')->where($map)->find();
// if($song_dot){
// return ['code' => 201, 'msg' => '你有点歌的尚未唱完,无法再次点歌', 'data' => null];
// }
// }
$map = [];
$map[] = ['rid', '=', $rid];
$map[] = ['uid', '=', $uid];
$map[] = ['is_delete', '=', 1];
$user_song_dot = db::name('agora_song_dot')->where($map)->find();
if($user_song_dot){
$update = [];
$update['song_code'] = $song_code;
$update['is_accapella'] = $is_accapella;
$update['update_time'] = time();
$result = db::name('agora_song_dot')->where('did', $user_song_dot['did'])->update($update);
}else{
$data = [];
$data['rid'] = $rid;
$data['uid'] = $uid;
$data['song_code'] = $song_code;
$data['is_accapella'] = $is_accapella;
$data['add_time'] = time();
$result = db::name('agora_song_dot')->insert($data);
}
if($result){
$map = [];
$map[] = ['a.rid', '=', $rid];
$map[] = ['a.is_delete', '=', 1];
$song_data = db::name('agora_song_dot')->alias('a')->join('yy_user b','a.uid = b.uid')->join('yy_agora_song c','c.song_code = a.song_code')->field('a.did,a.rid,a.uid,a.song_code,c.song_name,c.poster,c.singer,c.duration,b.base64_nick_name,a.is_accapella')->where($map)->select();
foreach ($song_data as $k => &$v){
$v['nick_name'] = mb_convert_encoding(base64_decode($v['base64_nick_name']), 'UTF-8', 'UTF-8');
}
// dump($song_data);
//socket播报
$push_data = [];
$push_data['code'] = 401;
$push_data['msg'] = "点歌房间播报";
$push_data['data'] = $song_data;
model('api/WebSocketPush')->send_to_group($rid, $push_data);
model('api/room')->push_room_micro_data($rid);
return ['code' => 200, 'msg' => '点歌成功', 'data' => null];
}else{
return ['code' => 201, 'msg' => '点歌失败', 'data' => null];
}
}
//取消点歌
public function dot_song_del($uid, $rid, $song_code){
$user_info = db::name('user')->find($uid);
if(!$user_info){
return ['code' => 201, 'msg' => '该用户不存在', 'data' => null];
}
$room_info = db::name('room')->where('rid', $rid)->find();
if(!$room_info){
return ['code' => 201, 'msg' => '该房间不存在', 'data' => null];
}
if(empty($song_code)){
return ['code' => 201, 'msg' => '参数错误', 'data' => null];
}
$song_code = explode(',', $song_code);
$map = [];
$map[] = ['song_code', 'in', $song_code];
$song = db::name('agora_song')->where($map)->find();
if(!$song){
return ['code' => 201, 'msg' => '该歌曲不存在', 'data' => null];
}
$map = [];
$map[] = ['rid', '=', $rid];
$map[] = ['song_code', 'in', $song_code];
$map[] = ['is_delete', '=', 1];
if($room_info['room_owner_uid'] != $uid){
$map[] = ['uid', '=', $uid];
$song_dot = db::name('agora_song_dot')->where($map)->find();
if(!$song_dot){
return ['code' => 201, 'msg' => '你尚未点击该首歌曲', 'data' => null];
}
}
$data = [];
$data['is_delete'] = 2;
$data['delete_time'] = time();
$result = db::name('agora_song_dot')->where($map)->update($data);
if($result){
$map = [];
$map[] = ['a.rid', '=', $rid];
$map[] = ['a.is_delete', '=', 1];
$song_data = db::name('agora_song_dot')->alias('a')->join('yy_user b','a.uid = b.uid')->join('yy_agora_song c','c.song_code = a.song_code')->field('a.did,a.rid,a.uid,a.song_code,c.song_name,c.poster,c.singer,c.duration,b.base64_nick_name')->where($map)->select();
foreach ($song_data as $k => &$v){
$v['nick_name'] = mb_convert_encoding(base64_decode($v['base64_nick_name']), 'UTF-8', 'UTF-8');
}
//socket播报
$push_data = [];
$push_data['code'] = 401;
$push_data['msg'] = "点歌房间播报";
$push_data['data'] = $song_data;
model('api/WebSocketPush')->send_to_group($rid, $push_data);
model('api/room')->push_room_micro_data($rid);
return ['code' => 200, 'msg' => '取消成功', 'data' => null];
}else{
return ['code' => 201, 'msg' => '取消失败', 'data' => null];
}
}
//点歌列表
public function dot_song_list($rid){
$room_info = db::name('room')->where('rid', $rid)->find();
if(!$room_info){
return ['code' => 201, 'msg' => '该房间不存在', 'data' => null];
}
$map = [];
$map[] = ['a.rid', '=', $rid];
$map[] = ['a.is_delete', '=', 1];
$song_data = db::name('agora_song_dot')->alias('a')->join('yy_user b','a.uid = b.uid')->join('yy_agora_song c','c.song_code = a.song_code')->field('a.did,a.rid,a.uid,a.song_code,c.song_name,c.poster,c.singer,c.duration,b.base64_nick_name')->where($map)->order('did asc')->select();
foreach ($song_data as $k => &$v){
$v['nick_name'] = mb_convert_encoding(base64_decode($v['base64_nick_name']), 'UTF-8', 'UTF-8');
}
return ['code' => 200, 'msg' => '点歌成功', 'data' => $song_data];
}
public function agora_rtm_token_info($uid,$room_id)
{
// require_once Env::get('root_path') . 'extend/shengwang/Shengwang.php';
$config = get_system_config();
$agora_app_id = $config['agora_app_id'];
$agora_app_certificate = $config['agora_app_certificate'];
// $agora_app_key = $config['agora_app_key'];
// $agora_app_secret = $config['agora_app_secret'];
$agora = new \shengwang\Shengwang();
$Rtm_token = $agora->RtmTokenBuilders($uid, $agora_app_id, $agora_app_certificate,$room_id);
return $Rtm_token;
}
//取消用户点歌
public function user_quit_song_del($uid, $rid){
//查询当前用户在该房间所点歌曲
$map = [];
$map[] = ['rid', '=', $rid];
$map[] = ['uid', '=', $uid];
$map[] = ['is_delete', '=', 1];
$user_song_list = db::name('agora_song_dot')->where($map)->select();
if($user_song_list){
$update_data = [];
$update_data['is_delete'] = 2;
$update_data['delete_time'] = time();
$result = db::name('agora_song_dot')->where($map)->update($update_data);
if($result){
$map = [];
$map[] = ['a.rid', '=', $rid];
$map[] = ['a.is_delete', '=', 1];
$song_data = db::name('agora_song_dot')->alias('a')->join('yy_user b','a.uid = b.uid')->join('yy_agora_song c','c.song_code = a.song_code')->field('a.did,a.rid,a.uid,a.song_code,a.is_accapella,c.song_name,c.poster,c.singer,c.duration,b.base64_nick_name,b.sex')->where($map)->select();
foreach ($song_data as $k => &$v){
$v['nick_name'] = mb_convert_encoding(base64_decode($v['base64_nick_name']), 'UTF-8', 'UTF-8');
}
//socket播报
$push_data = [];
$push_data['code'] = 401;
$push_data['msg'] = "点歌房间播报";
$push_data['data'] = $song_data;
model('api/WebSocketPush')->send_to_group($rid, $push_data);
model('api/room')->push_room_micro_data($rid);
}
}
return true;
}
}