更新
This commit is contained in:
416
application/api/model/BlindBoxTurntableGift.php
Normal file
416
application/api/model/BlindBoxTurntableGift.php
Normal file
@@ -0,0 +1,416 @@
|
||||
<?php
|
||||
|
||||
namespace app\api\model;
|
||||
use app\common\controller\Push;
|
||||
use think\Cache;
|
||||
use think\Model;
|
||||
use think\Db;
|
||||
use think\Session;
|
||||
/*
|
||||
* 盲盒转盘
|
||||
* 2025-08-16
|
||||
*/
|
||||
class BlindBoxTurntableGift extends Model
|
||||
{
|
||||
// 开启自动写入时间戳字段
|
||||
protected $autoWriteTimestamp = true;
|
||||
// 定义时间戳字段名
|
||||
protected $createTime = 'createtime';
|
||||
protected $updateTime = 'updatetime';
|
||||
protected $table = 'fa_vs_gift';
|
||||
|
||||
//获取奖池礼物列表
|
||||
public function get_gift_list($gift_bag_id,$room_id)
|
||||
{
|
||||
$box = db::name('vs_gift_bag')->where('id',$gift_bag_id)->find();
|
||||
$gifts = db::name('vs_gift_bag_detail')->where('gift_bag_id',$gift_bag_id)->order("id desc")->select();
|
||||
$gift_list = [];
|
||||
foreach ($gifts as $key => $value) {
|
||||
$gift_data = db::name('vs_gift')->where('gid',$value['foreign_id'])->where('delete_time',0)->find();
|
||||
if($gift_data){
|
||||
$gift_list[$key]['number'] = $key;
|
||||
$gift_list[$key]['gift_id'] = $gift_data['gid'];
|
||||
$gift_list[$key]['gift_name'] = $gift_data['gift_name'];
|
||||
$gift_list[$key]['base_image'] = $gift_data['base_image'];
|
||||
$gift_list[$key]['play_image'] = $gift_data['play_image'];
|
||||
$gift_list[$key]['gift_price'] = $gift_data['gift_price'];
|
||||
}
|
||||
}
|
||||
$ext = json_decode($box['ext'],true);
|
||||
$box_gift = Db::name('vs_gift')->where('gid',$ext['gift_id'])->find();
|
||||
|
||||
//巡乐会
|
||||
$is_xlh = 0;
|
||||
$xlh_box = db::name('vs_gift_bag')->where('id',13)->find();
|
||||
$xlh_ext = json_decode($xlh_box['ext'],true);
|
||||
$xlh = [];
|
||||
if($xlh_ext['inlet_bag_id'] == $box['id']){
|
||||
$is_xlh = 1;
|
||||
$xlh['waiting_start_num'] = $xlh_ext['open_condition']['waiting_start_num'];//等待开奖次数
|
||||
$xlh['start_num'] = $xlh_ext['open_condition']['start_num'];//开始开奖次数
|
||||
//当前抽奖次数
|
||||
$xlh['current_num'] = Cache::get("xlh_periods_num") ?? 0;
|
||||
//状态
|
||||
if($xlh['current_num'] >= $xlh_ext['open_condition']['start_num']){
|
||||
$xlh['status'] = 1;//状态 1:巡乐会开始 2:即将开始开始 0:等待开始
|
||||
} elseif($xlh['current_num'] >= $xlh_ext['open_condition']['waiting_start_num'] && $xlh['current_num'] < $xlh_ext['open_condition']['start_num']){
|
||||
$xlh['status'] = 2;//状态 1:巡乐会开始 2:即将开始开始 0:等待开始
|
||||
}else{
|
||||
$xlh['status'] = 0;
|
||||
}
|
||||
}
|
||||
$result_data = [
|
||||
'title' => $box['name'],
|
||||
'rule_url' => get_system_config_value('web_site')."/api/Page/get_gift_box_rule?box_id=".$box["id"],
|
||||
'box_price' => $box_gift['gift_price'],
|
||||
'is_xlh' => $is_xlh,
|
||||
'xlh_data' => $xlh,
|
||||
'gift_list' => $gift_list,
|
||||
];
|
||||
return ['code' => 1, 'msg' => '获取成功', 'data' => $result_data];
|
||||
}
|
||||
|
||||
/*
|
||||
* 礼物特效播放
|
||||
*/
|
||||
public function gift_send($send_id){
|
||||
try{
|
||||
$blind_box_turntable = db('vs_blind_box_turntable_log')->where(['id'=>$send_id,'is_sued'=>0])->find();
|
||||
if(!$blind_box_turntable){
|
||||
return ['code' => 1, 'msg' => '成功', 'data' => null];
|
||||
}
|
||||
$room_id = $blind_box_turntable['room_id'];
|
||||
$blind_box_turntable_log = db('vs_blind_box_turntable_results_log')->where(['tid'=>$send_id])->select();
|
||||
if(!$blind_box_turntable_log){
|
||||
return ['code' => 0, 'msg' => '数据不存在','data' => null];
|
||||
}
|
||||
$room_name = Db::name('vs_room')->where(['id' => $room_id, 'apply_status' => 2])->value('room_name');
|
||||
$FromUserInfo = Db::name('user')->where(['id'=>$blind_box_turntable['user_id']])->find();
|
||||
$FromUserInfo['icon'][0] = model('UserData')->user_wealth_icon($blind_box_turntable['user_id']);//财富图标
|
||||
$FromUserInfo['icon'][1] = model('UserData')->user_charm_icon($blind_box_turntable['user_id']);//魅力图标
|
||||
$user_nickname = $FromUserInfo['nickname'];
|
||||
$textMessage = $user_nickname;
|
||||
$text_message = [];
|
||||
foreach ($blind_box_turntable_log as $key => $value) {
|
||||
$ToUserInfo = Db::name('user')->where(['id' => $value['gift_user_id']])->field('id as user_id,nickname,avatar,sex')->find();
|
||||
$draw_gift = Db::name('vs_gift')->where(['gid'=>$value['gift_id']])->find();
|
||||
$textMessage = $textMessage . ' 送给 ' . $ToUserInfo['nickname']. ' 盲盒转盘礼物 ' . $draw_gift['gift_name'].' x ' .$value['count']."\n";
|
||||
$play_image[] = $draw_gift['play_image'];
|
||||
$gift_names[] = $draw_gift['gift_name'];
|
||||
|
||||
$text_message = $user_nickname . '在' . $room_name . '房间送给了' . $ToUserInfo['nickname'] . $draw_gift['gift_name'] . 'X' . $value['count']."\n";
|
||||
if($draw_gift['is_public_server'] == 1) {
|
||||
$text_list_new[] = [
|
||||
'text' => $text_message,
|
||||
'gift_picture' => $draw_gift['base_image'],
|
||||
'room_id' => $room_id,
|
||||
'fromUserName' => $FromUserInfo['nickname'],
|
||||
'toUserName' => $ToUserInfo['nickname'],
|
||||
'giftName' => $draw_gift['gift_name'],
|
||||
'roomId' => $room_id,
|
||||
'number' => $value['count'],
|
||||
];
|
||||
}
|
||||
$ToUserInfosList[$value['gift_user_id']] = $ToUserInfo;
|
||||
|
||||
}
|
||||
foreach($ToUserInfosList as &$userInfo) {
|
||||
$userInfo['icon'][0] = model('UserData')->user_wealth_icon($userInfo['user_id']);//财富图标
|
||||
$userInfo['icon'][1] = model('UserData')->user_charm_icon($userInfo['user_id']);//魅力图标
|
||||
$userInfo['charm'] = db::name('vs_room_user_charm')->where(['user_id' => $userInfo['user_id'],'room_id' => $room_id])->value('charm');//魅力
|
||||
$ToUserInfos[] = $userInfo;
|
||||
}
|
||||
$text = [
|
||||
'FromUserInfo' => $FromUserInfo,
|
||||
'ToUserInfos' => $ToUserInfos,
|
||||
'GiftInfo' => [
|
||||
'play_image' => implode(',',$play_image),
|
||||
'gift_name' => implode(',',$gift_names),
|
||||
],
|
||||
'text' => rtrim($textMessage, "\n")
|
||||
];
|
||||
//聊天室推送系统消息
|
||||
model('Chat')->sendMsg(1005,$room_id,$text);
|
||||
$roomtype = Db::name('vs_room')->where(['id' => $room_id])->value('type_id');
|
||||
if($roomtype == 6){
|
||||
//推送消息
|
||||
$hot_value = db::name('vs_give_gift')->where('from_id', $room_id)->where('from',6)
|
||||
->sum('total_price');
|
||||
$text1 = [
|
||||
'room_id' => $room_id,
|
||||
'hot_value' => $hot_value * 10,
|
||||
'text' => '房间心动值变化'
|
||||
];
|
||||
//聊天室推送系统消息
|
||||
model('Chat')->sendMsg(1028,$room_id,$text1);
|
||||
}else{
|
||||
if(!empty($text_list_new)){
|
||||
//推送礼物横幅
|
||||
$push = new Push($blind_box_turntable['user_id'], $room_id);
|
||||
$push->giftBanner($text_list_new);
|
||||
}
|
||||
}
|
||||
db::name('vs_blind_box_turntable_log')->where('id', $send_id)->update(['is_sued' => 1, 'updatetime' => time()]);
|
||||
return ['code' => 1, 'msg' => '成功', 'data' => null];
|
||||
} catch (\Exception $e) {
|
||||
return ['code' => 0, 'msg' => "网络请求错误,请重试!", 'data' => null];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* 获取用户抽奖记录
|
||||
*/
|
||||
public function get_user_record($gift_bag_id,$user_id=0,$page=1,$page_size=12){
|
||||
$where = [];
|
||||
$where['b.gift_bag_id'] = $gift_bag_id;
|
||||
if($user_id > 0){
|
||||
$where['b.user_id'] = $user_id;
|
||||
}
|
||||
$list = db('vs_blind_box_turntable_results_log')
|
||||
->alias('a')
|
||||
->join('vs_blind_box_turntable_log b','b.id = a.tid','left')
|
||||
->join('user c','a.gift_user_id = c.id','left')
|
||||
->join('vs_gift d','d.gid = a.gift_id','left')
|
||||
->field('a.gift_id,a.count,a.gift_user_id,a.createtime,c.nickname,d.gift_name as gift_name,d.base_image')
|
||||
->where($where)
|
||||
->order('a.createtime desc')
|
||||
->page($page,$page_size)
|
||||
->select();
|
||||
foreach ($list as &$v){
|
||||
$v['createtime'] = date('Y-m-d H:i:s',$v['createtime']);
|
||||
}
|
||||
return ['code' => 1, 'msg' => '成功', 'data' => $list];
|
||||
}
|
||||
/*
|
||||
* 获取全服抽奖记录
|
||||
*/
|
||||
public function get_all_record($gift_bag_id,$page=1,$page_size=12){
|
||||
$where = [];
|
||||
$where['b.gift_bag_id'] = $gift_bag_id;
|
||||
$where['d.gift_bag_id'] = $gift_bag_id;
|
||||
$where['d.is_world_show'] = 1;
|
||||
$list = db('vs_blind_box_turntable_results_log')
|
||||
->alias('a')
|
||||
->join('vs_blind_box_turntable_log b','b.id = a.tid','left')
|
||||
->join('user c','b.user_id = c.id','left')
|
||||
->join('vs_gift_bag_detail d','d.foreign_id = a.gift_id','left')
|
||||
->join('vs_gift e','e.gid = a.gift_id','left')
|
||||
->field('a.gift_id,a.count,b.user_id,a.createtime,c.nickname,d.name as gift_name,e.base_image')
|
||||
->where($where)
|
||||
->order('a.createtime desc')
|
||||
->page($page,$page_size)
|
||||
->select();
|
||||
foreach ($list as &$v){
|
||||
$v['createtime'] = date('Y-m-d H:i:s',$v['createtime']);
|
||||
}
|
||||
return ['code' => 1, 'msg' => '成功', 'data' => $list];
|
||||
}
|
||||
/*
|
||||
* 巡乐会
|
||||
*/
|
||||
public function xlh_gift_list($room_id){
|
||||
$gift_bag_id = 13;
|
||||
$xlh_box = db::name('vs_gift_bag')->where('id',$gift_bag_id)->find();
|
||||
$xlh_ext = json_decode($xlh_box['ext'],true);
|
||||
$gifts = db::name('vs_gift_bag_detail')->where('gift_bag_id',$gift_bag_id)->order("id desc")->select();
|
||||
$gift_list = [];
|
||||
foreach ($gifts as $key => $value) {
|
||||
$gift_data = db::name('vs_gift')->where('gid',$value['foreign_id'])->where('delete_time',0)->find();
|
||||
if($gift_data){
|
||||
$gift_list[$key]['number'] = $key;
|
||||
$gift_list[$key]['gift_id'] = $gift_data['gid'];
|
||||
$gift_list[$key]['gift_name'] = $gift_data['gift_name'];
|
||||
$gift_list[$key]['base_image'] = $gift_data['base_image'];
|
||||
$gift_list[$key]['play_image'] = $gift_data['play_image'];
|
||||
$gift_list[$key]['gift_price'] = $gift_data['gift_price'];
|
||||
}
|
||||
}
|
||||
//房主信息
|
||||
// $room_user = db::name('user')->where('id',$room_data['user_id'])->find();
|
||||
//房主礼物
|
||||
$room_user_gift = db::name('vs_gift')->where('gid',$xlh_ext['locking_condition']['give_homeowner_gift_id'])->find();
|
||||
//巡乐会主礼物
|
||||
$xlh_main_gift = db::name('vs_gift')->where('gid',$xlh_ext['locking_condition']['locking_gift_id'])->find();
|
||||
//中奖用户
|
||||
$pan_xlh = db::name('vs_room_pan_xlh')->where(['send_time'=>0,'end_time'=>['>',time()]])->order('id desc')->find();
|
||||
$xlh_periods_num = Cache::get("xlh_periods_num") ?? 0;
|
||||
if(empty($pan_xlh)){
|
||||
if($xlh_periods_num >= $xlh_ext['open_condition']['start_num']){
|
||||
$xlh_periods = Cache::get("this_xlh_periods") ?? 0;
|
||||
$pan_xlh_id = db::name('vs_room_pan_xlh')->insertGetId([
|
||||
'room_id' => $room_id,
|
||||
'gift_id' => $xlh_ext['locking_condition']['locking_gift_id'],
|
||||
'homeowner_gift_id' => $xlh_ext['locking_condition']['give_homeowner_gift_id'],
|
||||
'periods' => $xlh_periods+1,
|
||||
'num' => 0,
|
||||
'end_time' => time() + $xlh_ext['locking_time']['end_time'] * 60,
|
||||
'createtime' => time()
|
||||
]);
|
||||
Cache::set("this_xlh_periods", $xlh_periods+1, 0);//修改巡乐会期数
|
||||
$pan_xlh = db::name('vs_room_pan_xlh')->where(['id'=>$pan_xlh_id])->find();
|
||||
}else{
|
||||
return ['code' => 0, 'msg' => '巡乐会已结束', 'data' => null];
|
||||
}
|
||||
}
|
||||
$xlh_user_data= null;
|
||||
$room_user_data = null;
|
||||
if($pan_xlh && $pan_xlh['user_id']){
|
||||
$xlh_user = db::name('user')->where('id',$pan_xlh['user_id'])->find();
|
||||
$xlh_user_data = [
|
||||
'user_id' => $xlh_user['id'],
|
||||
'nickname' => $xlh_user['nickname'],
|
||||
'avatar' => $xlh_user['avatar'],
|
||||
];
|
||||
if($pan_xlh['room_id']){
|
||||
$room_data = db::name('vs_room')->field('xlh_periods,xlh_periods_num,user_id')-> where('id',$pan_xlh['room_id'])->find();
|
||||
$room_user = db::name('user')->where('id',$room_data['user_id'])->find();
|
||||
$room_user_data = [
|
||||
'user_id' => $room_user['id'],
|
||||
'nickname' => $room_user['nickname'],
|
||||
'avatar' => $room_user['avatar'],
|
||||
];
|
||||
}
|
||||
}
|
||||
//$gift_list 按gift_price 升序排序
|
||||
usort($gift_list, function($a, $b) {
|
||||
return $a['gift_price'] - $b['gift_price'];
|
||||
});
|
||||
|
||||
$result_data = [
|
||||
'title' => $xlh_box['name'],
|
||||
'rule_url' => get_system_config_value('web_site')."/api/Page/get_gift_box_rule?box_id=".$xlh_box["id"],
|
||||
'box_price' => $xlh_ext['xlh_box_price'],
|
||||
'xlh_end_time' =>$pan_xlh['end_time']??0,
|
||||
'give_homeowner_gift' => [
|
||||
'gift_id' => $room_user_gift['gid'],
|
||||
'gift_name' => $room_user_gift['gift_name'],
|
||||
'gift_price' => $room_user_gift['gift_price'],
|
||||
'base_image' => $room_user_gift['base_image'],
|
||||
],
|
||||
'homeowner_user' => $room_user_data,
|
||||
'locking_gift' => [
|
||||
'gift_id' => $xlh_main_gift['gid'],
|
||||
'gift_name' => $xlh_main_gift['gift_name'],
|
||||
'gift_price' => $xlh_main_gift['gift_price'],
|
||||
'base_image' => $xlh_main_gift['base_image'],
|
||||
'gift_num' => $pan_xlh['num']??0
|
||||
],
|
||||
'xlh_user' => $xlh_user_data,
|
||||
'gift_list' => $gift_list,
|
||||
];
|
||||
return ['code' => 1, 'msg' => '获取成功', 'data' => $result_data];
|
||||
}
|
||||
|
||||
/*
|
||||
* 巡乐会抽奖记录
|
||||
*/
|
||||
public function xlh_get_user_record($user_id,$room_id,$page=1,$page_size=12){
|
||||
$where = [];
|
||||
$where['a.gift_bag_id'] = 13;
|
||||
$where['a.user_id'] = $user_id;
|
||||
$list = db('vs_gift_bag_receive_pan_log')
|
||||
->alias('a')
|
||||
->join('vs_room_pan_xlh b','b.id = a.parent_id','left')
|
||||
->join('vs_gift c','c.gid = a.gift_id','left')
|
||||
->field('a.gift_id,a.num as count,a.createtime,c.gift_name as gift_name,c.base_image')
|
||||
->where($where)
|
||||
->order('a.createtime desc')
|
||||
->page($page,$page_size)
|
||||
->select();
|
||||
foreach ($list as &$v){
|
||||
$v['createtime'] = date('Y-m-d H:i:s',$v['createtime']);
|
||||
}
|
||||
return ['code' => 1, 'msg' => '成功', 'data' => $list];
|
||||
}
|
||||
|
||||
/*
|
||||
* 巡乐会榜单
|
||||
*/
|
||||
public function xlh_ranking($room_id,$page=1,$page_size=12){
|
||||
$where = [];
|
||||
$where['a.gift_bag_id'] = 13;
|
||||
$where['e.is_world_show'] = 1;
|
||||
$list = db('vs_gift_bag_receive_pan_log')
|
||||
->alias('a')
|
||||
->join('vs_room_pan_xlh b','b.id = a.parent_id','left')
|
||||
->join('vs_gift c','c.gid = a.gift_id','left')
|
||||
->join('fa_user d','d.id = a.user_id','left')
|
||||
->join('vs_gift_bag_detail e','e.foreign_id = a.gift_id','left')
|
||||
->field('a.gift_id,a.num as count,a.createtime,c.gift_name,c.base_image,d.nickname')
|
||||
->where($where)
|
||||
->order('a.createtime desc')
|
||||
->page($page,$page_size)
|
||||
->select();
|
||||
foreach ($list as &$v){
|
||||
$v['createtime'] = date('Y-m-d H:i:s',$v['createtime']);
|
||||
}
|
||||
return ['code' => 1, 'msg' => '成功', 'data' => $list];
|
||||
}
|
||||
|
||||
/*
|
||||
* 获取用户当前房间的巡乐会信息
|
||||
*/
|
||||
public function get_user_xlh_info($room_id){
|
||||
$gift_bag_id = 13;
|
||||
$xlh_box = db::name('vs_gift_bag')->where('id',$gift_bag_id)->find();
|
||||
$xlh_ext = json_decode($xlh_box['ext'],true);
|
||||
$xlh_data = db('vs_room_pan_xlh')->where(["send_time"=>0,"end_time"=>[">",time()]])->field('id,room_id,periods,end_time')->order('periods desc')->find();
|
||||
//寻乐会状态
|
||||
$xlh_status = 0;
|
||||
// 状态
|
||||
$xlh_periods_num = Cache::get("xlh_periods_num") ?? 0;
|
||||
if($xlh_periods_num >= $xlh_ext['open_condition']['start_num']){
|
||||
$xlh_status = 1;//状态 1:巡乐会开始 2:即将开始 0:等待开始
|
||||
} elseif($xlh_periods_num >= $xlh_ext['open_condition']['waiting_start_num'] && $xlh_periods_num < $xlh_ext['open_condition']['start_num']){
|
||||
$xlh_status = 2;//状态 1:巡乐会开始 2:即将开始开始 0:等待开始
|
||||
}else{
|
||||
$xlh_status = 0;//未开始
|
||||
}
|
||||
return [
|
||||
'activities_name' => $xlh_box['name'],
|
||||
'icon' => null,
|
||||
'xlh_status'=>$xlh_status,
|
||||
'end_time'=>$xlh_data['end_time'] ?? 0,
|
||||
];
|
||||
}
|
||||
|
||||
/*
|
||||
* 巡乐会榜单
|
||||
*
|
||||
*/
|
||||
public function xlh_ranking_list($room_id,$page=1,$page_size=12){
|
||||
$gift_bag_id = 13;
|
||||
$xlh_box = db::name('vs_gift_bag')->where('id',$gift_bag_id)->find();
|
||||
$xlh_ext = json_decode($xlh_box['ext'],true);
|
||||
$pan_xlh = db::name('vs_room_pan_xlh')
|
||||
->order('id desc')
|
||||
->page($page,$page_size)
|
||||
->select();
|
||||
$list = [];
|
||||
foreach ($pan_xlh as $key=>$value){
|
||||
$list[$key]['periods'] = "第".$value['periods']."期";
|
||||
if(!empty($value['user_id'])){
|
||||
$list[$key]['nickname'] = db::name('user')->where(['id'=>$value['user_id']])->value('nickname');
|
||||
}else{
|
||||
$list[$key]['nickname'] = "无";
|
||||
}
|
||||
if(!empty($value['gift_id'])){
|
||||
$gift_data = db::name('vs_gift')->field('gift_name,base_image')->where(['gid'=>$value['gift_id']])->find();
|
||||
$list[$key]['gift_name'] = 'x '.$value['num'].' '.$gift_data['gift_name'];
|
||||
$list[$key]['base_image'] = $gift_data['base_image']??"";
|
||||
}else{
|
||||
$gift_data = db::name('vs_gift')->field('gift_name,base_image')->where(['gid'=>$xlh_ext['locking_condition']['locking_gift_id']])->find();
|
||||
$list[$key]['gift_name'] = 'x 0 '.$gift_data['gift_name'];
|
||||
$list[$key]['base_image'] = $gift_data['base_image']??"";
|
||||
}
|
||||
$list[$key]['createtime'] = $value['send_time'] ? date('Y-m-d H:i:s',$value['send_time']) : '' ;
|
||||
}
|
||||
return [
|
||||
'code' => 1,
|
||||
'msg' => '成功',
|
||||
'data' => $list
|
||||
];
|
||||
}
|
||||
|
||||
}
|
||||
1603
application/api/model/BlindBoxTurntableGiftDraw.php
Normal file
1603
application/api/model/BlindBoxTurntableGiftDraw.php
Normal file
File diff suppressed because it is too large
Load Diff
1528
application/api/model/BlindBoxTurntableGiftDrawWorld.php
Normal file
1528
application/api/model/BlindBoxTurntableGiftDrawWorld.php
Normal file
File diff suppressed because it is too large
Load Diff
801
application/api/model/Friend.php
Normal file
801
application/api/model/Friend.php
Normal file
@@ -0,0 +1,801 @@
|
||||
<?php
|
||||
|
||||
namespace app\api\model;
|
||||
|
||||
use think\Db;
|
||||
use think\Log;
|
||||
use think\Model;
|
||||
|
||||
class Friend extends Model
|
||||
{
|
||||
public function start_friend($user_id, $room_id){
|
||||
// 判断用户是否在主持麦
|
||||
$host = db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => 9,'user_id' => $user_id])->find();
|
||||
if(!$host){
|
||||
return ['code' => 0, 'msg' => '没有权限操作', 'data' => null];
|
||||
}
|
||||
|
||||
$room_info = db::name('vs_room')->field('id,step,room_status')->where(['id' => $room_id,'room_status' =>1])->find();
|
||||
if (!$room_info) {
|
||||
return ['code' => 0, 'msg' => '房间不存在!', 'data' => null];
|
||||
}
|
||||
if($room_info['step'] == 2 || $room_info['step'] == 3){
|
||||
return ['code' => 0, 'msg' => '交友正在进行中!', 'data' => null];
|
||||
}
|
||||
//在麦位上的用户
|
||||
$pit_user = db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => ['<',7],'user_id' => ['<>',0]])->count();
|
||||
|
||||
if($pit_user >= 2) {
|
||||
$data['room_id'] = $room_id;
|
||||
$data['end_time'] = time() + get_system_config_value('friend_time') * 60;
|
||||
$data['create_time'] = time();
|
||||
$data['status'] = 1;
|
||||
|
||||
$id = db::name('vs_user_friending')->insertGetId($data);
|
||||
|
||||
if (!$id) {
|
||||
return ['code' => 0, 'msg' => '操作失败!', 'data' => null];
|
||||
}
|
||||
//修改房间状态
|
||||
db::name('vs_room')->where(['id' => $room_id])->update(['step' => 2]);
|
||||
//清除房间用户的魅力
|
||||
model('Room')->clear_user_charm($user_id, $room_id);
|
||||
|
||||
//推送给前端消息
|
||||
$text['text'] = '交友开始';
|
||||
$text['step'] = 2;
|
||||
$text['friend_id'] = $id;
|
||||
$text['end_time'] = $data['end_time'];
|
||||
model('api/Chat')->sendMsg(1049,$room_id,$text);
|
||||
return ['code' => 1, 'msg' => '操作成功!', 'data' => ['friend_id' => $id]];
|
||||
}else{
|
||||
return ['code' => 0, 'msg' => '交友麦位至少两位用户才能开始', 'data' => null];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//延时
|
||||
public function delay($user_id,$room_id,$id,$delay_times){
|
||||
// 判断用户是否在主持麦
|
||||
$host = db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => 9,'user_id' => $user_id])->find();
|
||||
if(!$host){
|
||||
return ['code' => 0, 'msg' => '没有权限操作', 'data' => null];
|
||||
}
|
||||
|
||||
if (!$id || !$room_id) {
|
||||
return ['code' => 0, 'msg' => '参数有误!', 'data' => null];
|
||||
}
|
||||
if($delay_times <= 0){
|
||||
$delay_times = get_system_config_value('friend_delay_times');
|
||||
}
|
||||
//修改结束 时间
|
||||
$res = db::name('vs_user_friending')->where('id', $id)->update([
|
||||
'end_time' => Db::raw('end_time + ' . ($delay_times * 60))
|
||||
]);
|
||||
if(!$res){
|
||||
return ['code' => 0, 'msg' => '操作失败!', 'data' => null];
|
||||
}
|
||||
//推送延时
|
||||
$text['text'] = '延时';
|
||||
$text['friend_id'] = $id;
|
||||
$text['end_time'] = db::name('vs_user_friending')->where('id', $id)->value('end_time');
|
||||
model('api/Chat')->sendMsg(1050,$room_id,$text);
|
||||
return ['code' => 1, 'msg' => '操作成功!', 'data' => null];
|
||||
}
|
||||
|
||||
//交友结束(结束牵手良缘)
|
||||
public function end_friend($user_id,$room_id,$id,$is_system = 0){
|
||||
if (!$id || !$room_id) {
|
||||
return ['code' => 0, 'msg' => '参数有误!', 'data' => null];
|
||||
}
|
||||
|
||||
if($is_system == 0){
|
||||
// 判断用户是否在主持麦
|
||||
$host = db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => 9,'user_id' => $user_id])->find();
|
||||
if(!$host){
|
||||
return ['code' => 0, 'msg' => '没有权限操作', 'data' => null];
|
||||
}
|
||||
}
|
||||
|
||||
// 获取心动值最高的
|
||||
$originalPairs = db::name('vs_user_friending_heart')
|
||||
->where(['room_id'=>$room_id,'friend_id'=>$id ,'status' =>1])
|
||||
->order('heart_value DESC')->find();
|
||||
$friend_heart_value = get_system_config_value('friend_heart_value');
|
||||
if($originalPairs && $originalPairs['heart_value'] >= $friend_heart_value){
|
||||
$step = 3;//结束进入牵手良缘卡关系
|
||||
//心动值达到伐值 返回用户信息与关系列表
|
||||
$return['user1_id'] =$originalPairs['user1_id'];
|
||||
$return['user1_avatar'] = db::name('user')->where(['id'=>$originalPairs['user1_id']])->value('avatar');
|
||||
$return['user1_nickname'] = db::name('user')->where(['id'=>$originalPairs['user1_id']])->value('nickname');
|
||||
$return['user2_id'] =$originalPairs['user2_id'];
|
||||
$return['user2_avatar'] = db::name('user')->where(['id'=>$originalPairs['user2_id']])->value('avatar');
|
||||
$return['user2_nickname'] = db::name('user')->where(['id'=>$originalPairs['user2_id']])->value('nickname');
|
||||
$return['heart_value'] = $originalPairs['heart_value'];
|
||||
$return['heart_id'] = $originalPairs['id'];
|
||||
$room_updatatime = db::name('vs_room')->where(['id' => $room_id,'step' => $step])->value('updatetime');
|
||||
if($room_updatatime){ //60秒内没操作 则创建关系无
|
||||
if(time() - $room_updatatime > 60){
|
||||
$this->createRelation(0,$room_id,$id,$return['user1_id'],$return['user2_id'],0);
|
||||
return ['code' => 1, 'msg' => '操作成功!', 'data' => $return];
|
||||
}
|
||||
}else{
|
||||
// 修改当前交友阶段
|
||||
db::name('vs_room')->where(['id' => $room_id])->update(['step' => $step,'updatetime' => time()]);
|
||||
}
|
||||
}else{
|
||||
$step = 1;//结束下一轮
|
||||
// 修改当前交友阶段 分开写 放到前面是为了下麦
|
||||
db::name('vs_room')->where(['id' => $room_id])->update(['step' => 1]);
|
||||
//所有人下麦
|
||||
$on_pit = db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => ['<',7],'user_id' => ['<>',0]])->select();
|
||||
if($on_pit){
|
||||
foreach ($on_pit as $pit){
|
||||
model('RoomPit')->DownPit($pit['user_id'], $room_id,$pit['pit_number']);
|
||||
}
|
||||
}
|
||||
$return = null;
|
||||
}
|
||||
|
||||
//结束交友游戏
|
||||
if($step == 1){
|
||||
db::name('vs_user_friending')->where(['id' => $id])->update(['status' => 2]);
|
||||
}
|
||||
//推送给前端消息
|
||||
$text['text'] = $step == 1 ? '交友结束' : '牵手良缘';
|
||||
$text['step'] = $step;//1 等待邂逅 2 心动连线 3 牵手良缘
|
||||
$text['friend_user'] = $return;
|
||||
$text['friend_id'] = $id;
|
||||
model('api/Chat')->sendMsg(1049,$room_id,$text);
|
||||
model('Room')->clear_user_charm(db::name('vs_room')->where(['id' => $room_id])->value('user_id'), $room_id);
|
||||
return ['code' => 1, 'msg' => '操作成功!', 'data' => $return];
|
||||
}
|
||||
|
||||
//心动值超过配置值 创建关系
|
||||
public function createRelation($user_id,$room_id,$friend_id,$user1_id,$user2_id,$friending_config_id){
|
||||
|
||||
if (!$user1_id || !$user2_id || !$friend_id || !$room_id) {
|
||||
return ['code' => 0, 'msg' => '参数有误!', 'data' => null];
|
||||
}
|
||||
|
||||
$user1 = min($user1_id, $user2_id);
|
||||
$user2 = max($user1_id, $user2_id);
|
||||
$friending_heart = db::name('vs_user_friending_heart')
|
||||
->where(['room_id'=>$room_id,'friend_id'=>$friend_id ,'user1_id' =>$user1,'user2_id' => $user2])->order('id desc')->find();
|
||||
|
||||
$originalPairs = db::name('vs_user_friending_heart')
|
||||
->where(['id'=>$friending_heart['id']])
|
||||
->update(['status' => 3,'friend_config_id' =>$friending_config_id]);
|
||||
$msg = '';
|
||||
if ($originalPairs) {
|
||||
$relation = db::name('vs_relation')->where('id',$friending_config_id)->value('name');
|
||||
if($friending_heart['heart_value'] >= get_system_config_value('friend_heart_create_room') && $friending_config_id > 0){
|
||||
//创建小房间
|
||||
$room_ids = model('api/Room')->user_create_room($user1,'的电影房',get_system_config_value('web_site').'/data/avatar/head_pic.png','交友房产生的一次性房间',7);
|
||||
if($room_ids['code'] != 1){
|
||||
$msg = 'cp电影房创建失败';
|
||||
}else{
|
||||
//记录小房间
|
||||
$datda = [
|
||||
'room_id' => $room_ids['data'],
|
||||
'relation_id' => $friending_config_id,
|
||||
'user_id' => $user1,
|
||||
'user_id1' => $user2,
|
||||
'time_day' => time() + get_system_config_value('friend_room_timea') * 60,
|
||||
'createtime' => time(),
|
||||
'status' => 1,
|
||||
'type' => 1
|
||||
];
|
||||
db::name('vs_room_cp_movie')->insert($datda);
|
||||
|
||||
if($room_ids['data']){
|
||||
$text['text'] = '交友结束并创建房间';
|
||||
$text['room_id'] = $room_ids['data'];//前端用来让用户跳转的房间id
|
||||
}
|
||||
}
|
||||
}else{
|
||||
$text['text'] = '交友结束未创建房间';
|
||||
}
|
||||
$text['relation_name'] = $relation;
|
||||
$text['user1_id'] = $user1;
|
||||
$text['user2_id'] = $user2;
|
||||
$text['user1_avatar'] = db::name('user')->where(['id'=>$user1])->value('avatar');
|
||||
$text['user1_nickname'] = db::name('user')->where(['id'=>$user1])->value('nickname');
|
||||
$text['user2_avatar'] = db::name('user')->where(['id'=>$user2])->value('avatar');
|
||||
$text['user2_nickname'] = db::name('user')->where(['id'=>$user2])->value('nickname');
|
||||
model('api/Chat')->sendMsg(1051,$room_id,$text);
|
||||
|
||||
// 修改当前交友阶段
|
||||
db::name('vs_room')->where(['id' => $room_id])->update(['step' => 1]);
|
||||
db::name('vs_user_friending')->where(['id' => $friend_id])->update(['status' => 2]);
|
||||
//所有人下麦
|
||||
$on_pit = db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => ['<',7],'user_id' => ['<>',0]])->select();
|
||||
if($on_pit){
|
||||
foreach ($on_pit as $pit){
|
||||
model('RoomPit')->DownPit($pit['user_id'], $room_id,$pit['pit_number']);
|
||||
}
|
||||
}
|
||||
|
||||
$shijian = floor($friending_heart['heart_value']/get_system_config_value('friend_heart_value')) * get_system_config_value('friend_heart_times');
|
||||
$friendendtime = time() + $shijian * 3600;
|
||||
|
||||
//更新关系结束时间
|
||||
db::name('vs_user_friending_heart')->where(['id'=>$friending_heart['id']])->update(['contact_end_time' => $friendendtime]);
|
||||
|
||||
//关系增加时间
|
||||
$room_auction = model('RoomAuction')->room_auction_create_or_add($user1_id,$user2_id,$friending_config_id,$shijian*3600,0);
|
||||
|
||||
//推送给前端消息
|
||||
$text['text'] = '交友结束';
|
||||
$text['step'] = 1;//1 等待邂逅 2 心动连线 3 牵手良缘
|
||||
model('api/Chat')->sendMsg(1049,$room_id,$text);
|
||||
|
||||
return ['code' => 1, 'msg' => '创建关系成功!'.$msg, 'data' => null];
|
||||
} else {
|
||||
//推送给前端消息
|
||||
$text['text'] = '交友结束';
|
||||
$text['step'] = 1;//1 等待邂逅 2 心动连线 3 牵手良缘
|
||||
model('api/Chat')->sendMsg(1049,$room_id,$text);
|
||||
db::name('vs_user_friending')->where(['id' => $friend_id])->update(['status' => 2]);
|
||||
return ['code' => 0, 'msg' => '创建关系失败!', 'data' => null];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//退出私密房间
|
||||
public function outRoom($user_id,$room_id){
|
||||
//推送给前端消息
|
||||
$text['text'] = '退出私密小屋';
|
||||
model('api/Chat')->sendMsg(1055,$room_id,$text);
|
||||
|
||||
|
||||
// //查询在房间的用户
|
||||
// $users = db::name('vs_room_visitor')->where(['room_id'=>$room_id])->select();
|
||||
// if($users){
|
||||
// //退出房间
|
||||
// foreach ($users as $v){
|
||||
// //退出房间
|
||||
// model('Room')->quit_room($v['user_id'], $room_id,$v['user_id']);
|
||||
// }
|
||||
// }else{
|
||||
// model('Room')->quit_room($user_id, $room_id,$user_id);
|
||||
// }
|
||||
|
||||
//注销房间
|
||||
db::name('vs_room')->where(['id'=>$room_id])->update(['room_status'=>3]);
|
||||
db::name('vs_room_cp_movie')->where(['room_id'=>$room_id])->update(['status'=>4]);
|
||||
model('api/Tencent')->delete_group('room'.$room_id);
|
||||
|
||||
return ['code' => 1, 'msg' => '退出成功!', 'data' => null];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//房间内送礼
|
||||
/*
|
||||
* @param $uid 用户id
|
||||
* @param $to_uid 接收用户id组
|
||||
* @param $gift_id 礼物id
|
||||
* @param $gift_num 礼物数量
|
||||
* @param $from_type 来源 1聊天送礼物 2房间语聊送礼 3直播送礼 4动态打赏 5系统任务 6-cp房间送礼
|
||||
* @param $type 1金币购买 2送背包礼物
|
||||
* @param $room_id 房间id
|
||||
* @param $pit_number 坑位
|
||||
*/
|
||||
public function room_give_gift($uid, $to_uid, $gift_id, $gift_num, $from_type, $type, $room_id, $pit_number, $heart_id,$give_gift_ext)
|
||||
{
|
||||
$res = model('GiveGift')->give_gift($uid, $to_uid, $gift_id, $gift_num, $from_type, $type, $room_id, $pit_number,0,$give_gift_ext);
|
||||
if($res['code'] != 1){
|
||||
return $res;
|
||||
}
|
||||
|
||||
//送礼成功后续操作
|
||||
//查看当前时间是否在交友表的创建时间和结束时间段内 用来区分是否要拉取心动值高的用户上麦
|
||||
$friend = db::name('vs_user_friending')->where(['room_id' => $room_id,'status' => 1])->order('id desc')->find();
|
||||
if($friend && time() >= $friend['create_time'] && time() <= $friend['end_time']){
|
||||
$heart_exp = get_system_config_value('coin_charm_exp');//金币与魅力值转换比
|
||||
$sumPrice = $res['data']['gift_total'] * $heart_exp;
|
||||
$user_idd = $to_uid;
|
||||
|
||||
if($heart_id){//有这个值就是助力 不参加抢麦操作
|
||||
db::name('vs_user_friending_heart')->where(['id' => $heart_id])->setInc('heart_value', $sumPrice);
|
||||
$this->pullHeartChange($room_id,$friend['id']);//聊天室心动值变化通知
|
||||
//生成新排名 判断抱上麦 还是换麦
|
||||
$this->pullUserPit($room_id,$friend['id']);
|
||||
}else{
|
||||
//判断送礼人或收礼人里面有主持和嘉宾
|
||||
$host = $this->is_host($uid,$to_uid,$room_id);
|
||||
$user_idd = explode(",", $user_idd); // 将字符串转换为数组
|
||||
//判断是否是主持
|
||||
if($host['is_preside'] == 1){
|
||||
if(!in_array($uid,$host['is_preside_user'])){//主持不是当前送礼人,那就是在收礼人中
|
||||
//从数组中剔除主持人 && $is_preside_user!= UID
|
||||
$user_idd = array_diff($user_idd, $host['is_preside_user']); // 从数组中移除
|
||||
if($user_idd){
|
||||
//插入/更新心动表
|
||||
$this->addUserHeart($uid,$user_idd,$friend['id'],$sumPrice,$room_id,$res['data']['gift_user_data']);
|
||||
//送礼产生心动值并计算 判断拉取用户上麦还是换麦
|
||||
//生成新排名 判断抱上麦 还是换麦
|
||||
$this->pullUserPit($room_id,$friend['id']);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
//插入/更新心动表
|
||||
$this->addUserHeart($uid,$user_idd,$friend['id'],$sumPrice,$room_id,$res['data']['gift_user_data']);
|
||||
//送礼产生心动值并计算 判断拉取用户上麦还是换麦
|
||||
//生成新排名 判断抱上麦 还是换麦
|
||||
$this->pullUserPit($room_id,$friend['id']);
|
||||
}
|
||||
}
|
||||
}
|
||||
return ['code' => 1, 'msg' => '送礼成功', 'data' => null];
|
||||
}
|
||||
|
||||
//是否主持
|
||||
public function is_host($uid,$to_uid,$room_id){
|
||||
//获取当前主持人和嘉宾
|
||||
$host[] = db::name('vs_room_pit')->where(['room_id' => $room_id,'pit_number' => 9])->value('user_id');
|
||||
$host[] = db::name('vs_room_pit')->where(['room_id' => $room_id,'pit_number' => 10])->value('user_id');
|
||||
|
||||
$is_preside_user = [];
|
||||
$is_preside = 0;
|
||||
$user_ids = explode(",", $to_uid);
|
||||
foreach ($user_ids as $value) {
|
||||
//判断收礼人是否是主持
|
||||
if (in_array($value, $host)) {
|
||||
$is_preside = 1;
|
||||
$is_preside_user[] = $value;
|
||||
}
|
||||
}
|
||||
//送礼人是主持或嘉宾
|
||||
if (in_array($uid, $host)) {
|
||||
$is_preside = 1;
|
||||
$is_preside_user[] = $uid;
|
||||
}
|
||||
return ['is_preside' =>$is_preside,'is_preside_user' => $is_preside_user];
|
||||
}
|
||||
|
||||
function pullHeartChange($room_id,$friend_id){
|
||||
//聊天室心动值变化通知
|
||||
$newRanking = $this->getRanking($room_id,$friend_id);
|
||||
//心动值和心动表id
|
||||
if(!isset($newRanking[0]['heart_value']) || $newRanking[0]['heart_value'] <= 0){
|
||||
$heart1 = -1;
|
||||
$heartId1 = -1;
|
||||
}else{
|
||||
$heart1 = $newRanking[0]['heart_value'];
|
||||
$heartId1 = $newRanking[0]['id'];
|
||||
}
|
||||
if(!isset($newRanking[1]['heart_value']) || $newRanking[1]['heart_value'] <= 0){
|
||||
$heart2 = -1;
|
||||
$heartId2 = -1;
|
||||
}else{
|
||||
$heart2 = $newRanking[1]['heart_value'];
|
||||
$heartId2 = $newRanking[1]['id'];
|
||||
}
|
||||
if(!isset($newRanking[2]['heart_value']) || $newRanking[2]['heart_value'] <= 0){
|
||||
$heart3 = -1;
|
||||
$heartId3 = -1;
|
||||
}else{
|
||||
$heart3 = $newRanking[2]['heart_value'];
|
||||
$heartId3 = $newRanking[2]['id'];
|
||||
}
|
||||
$heart[0] = [
|
||||
"heartNum" => $heart1,
|
||||
"heartId" => $heartId1,
|
||||
];
|
||||
$heart[1] = [
|
||||
"heartNum" => $heart2,
|
||||
"heartId" => $heartId2,
|
||||
];
|
||||
$heart[2] = [
|
||||
"heartNum" => $heart3,
|
||||
"heartId" => $heartId3,
|
||||
];
|
||||
|
||||
// $push = new Push(0, $this->room_id); //实例化推送类
|
||||
// $push->heartChatRoom($heart);
|
||||
//推送给前端消息
|
||||
$text['text'] = '心动值变化通知';
|
||||
$text['list'] = $heart;
|
||||
model('api/Chat')->sendMsg(1054,$room_id,$text);
|
||||
return $heart;
|
||||
}
|
||||
|
||||
// 获取心跳值排行
|
||||
public function getRanking($room_id,$friend_id) {
|
||||
// 获取有心动值的用户对且不重复
|
||||
$originalPairs = db::name('vs_user_friending_heart')
|
||||
->where(['room_id'=>$room_id,'friend_id'=>$friend_id])
|
||||
->order('heart_value DESC')->select();
|
||||
// 初始化排名数组和已使用用户数组
|
||||
$ranking = [];
|
||||
$usedUsers = [];
|
||||
// 优先选择高价值且无重复用户的对
|
||||
$heart_ids = [];
|
||||
foreach ($originalPairs as &$rel) {
|
||||
// 检查当前用户对是否包含已使用的用户ID
|
||||
if (!in_array($rel['user1_id'], $usedUsers) &&
|
||||
!in_array($rel['user2_id'], $usedUsers)) {
|
||||
// 将符合条件的用户对添加到排名列表中
|
||||
$ranking[] = [
|
||||
'heart_value' => $rel['heart_value'],
|
||||
'id' => $rel['id'],
|
||||
'user1_id' => $rel['user1_id'],
|
||||
'user2_id' => $rel['user2_id'],
|
||||
];
|
||||
// 更新已使用用户列表
|
||||
$usedUsers = array_merge($usedUsers, [$rel['user1_id'], $rel['user2_id']]);
|
||||
$heart_ids[] = $rel['id'];
|
||||
// 如果排名列表达到3对用户,则停止循环
|
||||
if (count($ranking) >= 3) break;
|
||||
}
|
||||
}
|
||||
$ranking1 = [];
|
||||
$ranking2 = [];
|
||||
if(count($ranking)<3){
|
||||
$make_up_num = 3 - count($ranking);
|
||||
$ranking_make_up = db::name('vs_user_friending_heart')
|
||||
->where(['room_id'=>$room_id,'friend_id'=>$friend_id ,'id'=> ['notin',$heart_ids]])
|
||||
->limit($make_up_num)
|
||||
->order('heart_value DESC')->select();
|
||||
foreach ($ranking_make_up as $rel1) {
|
||||
// 如果两个用户都已使用,跳过这条记录
|
||||
if(in_array($rel1['user1_id'], $usedUsers) && in_array($rel1['user2_id'], $usedUsers)){
|
||||
continue;
|
||||
}
|
||||
|
||||
// 如果只有user1已使用,将user2加入排名
|
||||
if(in_array($rel1['user1_id'], $usedUsers)){
|
||||
$ranking1[] = [
|
||||
'heart_value' => 0,
|
||||
'id' => $rel1['id'],
|
||||
'user1_id' => -1,
|
||||
'user2_id' => $rel1['user2_id'],
|
||||
];
|
||||
$usedUsers[] = $rel1['user2_id'];
|
||||
$heart_ids[] = $rel1['id'];
|
||||
}
|
||||
// 如果只有user2已使用,将user1加入排名
|
||||
elseif(in_array($rel1['user2_id'], $usedUsers)){
|
||||
$ranking1[] = [
|
||||
'heart_value' => 0,
|
||||
'id' => $rel1['id'],
|
||||
'user1_id' => $rel1['user1_id'],
|
||||
'user2_id' => -1,
|
||||
];
|
||||
$usedUsers[] = $rel1['user1_id'];
|
||||
$heart_ids[] = $rel1['id'];
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
// 返回最终的排名列表
|
||||
$ranking_rut = array_merge($ranking, $ranking1);
|
||||
$nnum = count($ranking)*2 + count($ranking1);
|
||||
if($nnum<6){
|
||||
$make_up_num = 6 - $nnum;
|
||||
$ranking_make_up = db::name('vs_user_friending_heart')
|
||||
->where(array('room_id'=>$room_id,'friend_id'=>$friend_id ,'id'=>array('notin',$heart_ids)))
|
||||
->limit($make_up_num)
|
||||
->order('heart_value DESC')->select();
|
||||
if($ranking_make_up){
|
||||
foreach ($ranking_make_up as $rel1) {
|
||||
if(in_array($rel1['user1_id'], $usedUsers) && in_array($rel1['user2_id'], $usedUsers)){
|
||||
continue;
|
||||
}
|
||||
if(in_array($rel1['user1_id'], $usedUsers)){
|
||||
$ranking2[] = [
|
||||
'heart_value' => 0,
|
||||
'id' => $rel1['id'],
|
||||
'user1_id' => -1,
|
||||
'user2_id' => $rel1['user2_id'],
|
||||
];
|
||||
$usedUsers[] = $rel1['user2_id'];
|
||||
}
|
||||
if(in_array($rel1['user2_id'], $usedUsers)){
|
||||
$ranking2[] = [
|
||||
'heart_value' => 0,
|
||||
'id' => $rel1['id'],
|
||||
'user1_id' => $rel1['user1_id'],
|
||||
'user2_id' => -1,
|
||||
];
|
||||
$usedUsers[] = $rel1['user1_id'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return array_merge($ranking_rut, $ranking2);
|
||||
}
|
||||
|
||||
|
||||
//抱上麦 还是换麦
|
||||
public function pullUserPit($room_id,$friend_id){
|
||||
$friendPlayPit = $this->friendPlayPit($room_id,$friend_id); // 获取实际应该对应的麦位
|
||||
$this->changePitToPosPair($room_id,$friendPlayPit);//换麦,上下麦
|
||||
$this->pullHeartChange($room_id,$friend_id);//聊天室心动值变化通知
|
||||
}
|
||||
|
||||
//交友处理麦位排名
|
||||
public function friendPlayPit($room_id,$friend_id){
|
||||
//查询当前交友心动值表
|
||||
$heart_data = $this->getRanking($room_id,$friend_id);
|
||||
//数组根据里面的heart_value 由大到小进行排序
|
||||
usort($heart_data, function($a, $b) {
|
||||
return $b['heart_value'] - $a['heart_value'];
|
||||
});
|
||||
$pit = [];
|
||||
$pit_number_array = [2=>5,1=>6,3=>4,5=>2,6=>1,4=>3]; //麦位对应关系
|
||||
$pit_number_array_reverse = [0=>2,1=>1,2=>3,3=>4,4=>5,5=>6];
|
||||
if($heart_data){
|
||||
//排麦位
|
||||
$pit_unique = [];
|
||||
$key = 0;
|
||||
foreach($heart_data as $value) {
|
||||
if(count($pit) >= 6){
|
||||
break;
|
||||
}
|
||||
|
||||
// 处理两个用户都存在的情况
|
||||
if($value['user1_id'] != -1 && $value['user2_id'] != -1){
|
||||
if(!in_array($value['user1_id'],$pit_unique)){
|
||||
// 检查目标麦位是否已被占用
|
||||
if(!isset($pit[$pit_number_array_reverse[$key]])) {
|
||||
$pit[$pit_number_array_reverse[$key]] = $value['user1_id'];
|
||||
$pit[$pit_number_array[$pit_number_array_reverse[$key]]] = $value['user2_id'];
|
||||
$pit_unique = array_merge($pit_unique, [$value['user1_id'], $value['user2_id']]);
|
||||
}
|
||||
}
|
||||
}
|
||||
// 处理只有user2存在的情况
|
||||
elseif($value['user1_id'] == -1 && !in_array($value['user2_id'],$pit_unique)){
|
||||
// 检查该键是否已被使用
|
||||
if(!isset($pit[$pit_number_array_reverse[$key]])) {
|
||||
$pit[$pit_number_array_reverse[$key]] = $value['user2_id'];
|
||||
$pit_unique[] = $value['user2_id'];
|
||||
}
|
||||
}
|
||||
// 处理只有user1存在的情况
|
||||
elseif($value['user2_id'] == -1 && !in_array($value['user1_id'],$pit_unique)){
|
||||
// 检查该键是否已被使用
|
||||
if(!isset($pit[$pit_number_array_reverse[$key]])) {
|
||||
$pit[$pit_number_array_reverse[$key]] = $value['user1_id'];
|
||||
$pit_unique[] = $value['user1_id'];
|
||||
}
|
||||
}
|
||||
$key++;
|
||||
}
|
||||
}
|
||||
return $pit;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//换麦
|
||||
public function changePitToPosPairs($room_id,$friendPlayPit){
|
||||
$now_pit_u = array_flip($friendPlayPit);
|
||||
//按照键值排序数组
|
||||
ksort($now_pit_u);
|
||||
//查询现在麦位上有用户的数据 并且重组结果,键为麦位,值为用户,值必须存在,没值则不展示
|
||||
$pit_user = db::name('vs_room_pit')->where(['room_id' => $room_id,'pit_number'=>['<',7],'user_id' => ['>', 0]])
|
||||
->order('pit_number ASC')
|
||||
->column('pit_number,user_id');
|
||||
//比较两个数组,无论是键的差异还是值的差异,都输出字符串”有差异“否则输出”没有差异“
|
||||
$result = array_diff_assoc($pit_user, $now_pit_u);
|
||||
$result2 = array_diff_assoc($now_pit_u, $pit_user);
|
||||
if(!empty($result) || !empty($result2)){
|
||||
// var_dump('有差异');
|
||||
//获取实际麦位上的用
|
||||
$newPitUser = array_keys($friendPlayPit);
|
||||
//获取当前麦位上的用户
|
||||
$oldPitUser = db::name('vs_room_pit')->where(['room_id' => $room_id,'pit_number'=>['<',7]])->column('user_id');
|
||||
//获取交集
|
||||
$intersection = array_intersect($newPitUser,$oldPitUser);
|
||||
//取差集
|
||||
$diff = array_diff($newPitUser,$oldPitUser);
|
||||
$changeData = [];
|
||||
if($diff){
|
||||
//推下麦
|
||||
foreach($diff as $key => $value){
|
||||
if(in_array($value,$oldPitUser)){
|
||||
//查询当前空麦位
|
||||
$pit_null = model('api/RoomPit')->getRoomNullPitWithout($room_id, [7,8,9,10]);
|
||||
if($pit_null){
|
||||
// $this->room_pit_model->getOnPit($this->room_id, $value, $pit_null);
|
||||
model('api/RoomPit')->OnPit($value, $room_id, $pit_null);
|
||||
// db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => $pit_null])->update(['user_id' => $value]);
|
||||
}else{
|
||||
//下麦
|
||||
$UserRoomPit = db::name('vs_room_pit')->where(['room_id' => $room_id, 'user_id' => $value])->value('pit_number');
|
||||
model('api/RoomPit')->DownPit($value, $room_id, $UserRoomPit);
|
||||
}
|
||||
}
|
||||
|
||||
if(in_array($value,$newPitUser)){
|
||||
//推上麦
|
||||
//获取目标麦位是否有人
|
||||
$getRoomPitUser= db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => $friendPlayPit[$value]])->value('user_id');
|
||||
if($getRoomPitUser){
|
||||
//查询当前空麦位
|
||||
$getRoomNullPitss = model('api/RoomPit')->getRoomNullPitWithout($room_id, [7,8,9,10,$friendPlayPit[$value]]);
|
||||
if($getRoomNullPitss){
|
||||
// $this->room_pit_model->getOnPit($this->room_id, $getRoomPitUser, $getRoomNullPitss);
|
||||
db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => $getRoomNullPitss])->update(['user_id' => $getRoomPitUser]);
|
||||
}else{
|
||||
model('api/RoomPit')->DownPit($getRoomPitUser, $room_id, $friendPlayPit[$value]);
|
||||
}
|
||||
}
|
||||
model('api/RoomPit')->OnPit($value, $room_id, $friendPlayPit[$value]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if($intersection){//交换麦位
|
||||
//查询麦上的用户
|
||||
$newPitUserStr = implode(',',$newPitUser);
|
||||
$getRoomPit = db::name('vs_room_pit')->where("room_id=".$room_id." AND user_id in (".$newPitUserStr.")")->column('pit_number');
|
||||
db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => ['in', $getRoomPit]])->update(['user_id' => 0]);
|
||||
$changePitUser = [];
|
||||
foreach ($friendPlayPit as $key => $value){
|
||||
if(empty($value)){
|
||||
$value = model('api/RoomPit')->getRoomNullPitWithout($room_id, [7,8,9,10]);
|
||||
}
|
||||
//获取目标麦位是否有人
|
||||
$isPitHaveUser= db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => $value])->value('user_id');
|
||||
if($isPitHaveUser && !in_array($isPitHaveUser,$newPitUser)){
|
||||
$changePitUser[$key]['user_id'] = $isPitHaveUser;
|
||||
$changePitUser[$key]['pit_number'] = $value;
|
||||
}
|
||||
db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => $value])->update(['user_id' => $key]);
|
||||
}
|
||||
//处理原麦位上的用户
|
||||
foreach ($changePitUser as $key_change => $value_change){
|
||||
//判断是否在左边 1,,2,,3 麦位上
|
||||
if(in_array($value_change['pit_number'],[1,2,3])){
|
||||
$null_pit = model('api/RoomPit')->getRoomNullPitWithout($room_id, [4,5,6,7,8,9,10]);
|
||||
if(empty($null_pit)){
|
||||
$null_pit = model('api/RoomPit')->getRoomNullPitWithout($room_id, [7,8,9,10]);
|
||||
}
|
||||
}else{
|
||||
$null_pit = model('api/RoomPit')->getRoomNullPitWithout($room_id, [1,2,3,7,8,9,10]);
|
||||
if(empty($null_pit)){
|
||||
$null_pit = model('api/RoomPit')->getRoomNullPitWithout($room_id, [7,8,9,10]);
|
||||
}
|
||||
}
|
||||
db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => $null_pit])->update(['user_id' => $value_change['user_id']]);
|
||||
}
|
||||
// $getRoomNullPit = $this->room_pit_model->where(['room_id'=>$room_id,'pit_number'=>['notin',[7,9]]])->select();
|
||||
$getRoomNullPit = db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => ['<',7]])->select();
|
||||
$data_users = [];
|
||||
foreach($getRoomNullPit as $key_data => $value_data){
|
||||
$data_users[$key_data]['user_id'] = $value_data['user_id'];
|
||||
$data_users[$key_data]['nickname'] = db::name('user')->where('id',$value_data['user_id'])->value('nickname');
|
||||
$data_users[$key_data]['avatar'] = db::name('user')->where('id',$value_data['user_id'])->value('avatar');
|
||||
$data_users[$key_data]['sex'] = db::name('user')->where('id',$value_data['user_id'])->value('sex');
|
||||
//获取用户在此房间今天的魅力值
|
||||
$charm =[];
|
||||
if($value_data['user_id']){
|
||||
$charm = db::name('vs_room_user_charm')->where(['user_id' => $value_data['user_id'],'room_id' => $room_id])->value('charm');
|
||||
}
|
||||
$data_users[$key_data]['dress'] = model('Decorate')->user_decorate_detail($value_data['user_id'],1);
|
||||
$data_users[$key_data]['charm'] = $charm??0;
|
||||
$data_users[$key_data]['pit_number'] = $value_data['pit_number'];
|
||||
}
|
||||
//推送给前端消息
|
||||
$text['text'] = '房间换麦位';
|
||||
$text['list'] = $data_users;
|
||||
model('api/Chat')->sendMsg(1053,$room_id,$text);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//换麦
|
||||
public function changePitToPosPair($room_id,$friendPlayPit){
|
||||
$new_pit_u = $friendPlayPit;
|
||||
//按照键值排序数组
|
||||
ksort($new_pit_u);
|
||||
//查询原有麦位上有用户的数据 并且重组结果,键为麦位,值为用户,值必须存在,没值则不展示
|
||||
$pit_users = db::name('vs_room_pit')->where(['room_id' => $room_id,'pit_number'=>['<',7],'user_id' => ['>', 0]])
|
||||
->order('pit_number ASC')
|
||||
->field('pit_number,user_id')->select();
|
||||
$pit_user = [];
|
||||
foreach ($pit_users as $value_pit_user){
|
||||
$pit_user[$value_pit_user['pit_number']] = $value_pit_user['user_id'];
|
||||
}
|
||||
//比较两个数组,无论是键的差异还是值的差异,都输出字符串”有差异“否则输出”没有差异“
|
||||
$result = array_diff_assoc($pit_user, $new_pit_u);//第一个数组中存在但其他数组中不存在的键/值对
|
||||
$result2 = array_diff_assoc($new_pit_u, $pit_user);
|
||||
if(!empty($result) || !empty($result2)){//换麦
|
||||
db::name('vs_room_pit')->where(['room_id' => $room_id,'pit_number' => ['<',7]])->update(['user_id' => 0]);
|
||||
//新麦位上的用户
|
||||
foreach ($new_pit_u as $key_result2 => $value_result2){
|
||||
db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => $key_result2])->update(['user_id' => $value_result2]);
|
||||
}
|
||||
if($result){//原有麦位上的用户,且不在新麦位上的用户
|
||||
foreach ($result as $key_result => $value_result){
|
||||
$pit_null = model('api/RoomPit')->getRoomNullPitWithout($room_id, [7,8,9,10]);
|
||||
$onPitUser = db::name('vs_room_pit')->where(['room_id' => $room_id, 'user_id' => $value_result])->find();
|
||||
if($pit_null && !$onPitUser){
|
||||
db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => $pit_null])->update(['user_id' => $value_result]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$getRoomNullPit = db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => ['<',7]])->select();
|
||||
$data_users = [];
|
||||
foreach($getRoomNullPit as $key_data => $value_data){
|
||||
$data_users[$key_data]['user_id'] = $value_data['user_id'];
|
||||
$data_users[$key_data]['nickname'] = db::name('user')->where('id',$value_data['user_id'])->value('nickname');
|
||||
$data_users[$key_data]['avatar'] = db::name('user')->where('id',$value_data['user_id'])->value('avatar');
|
||||
$data_users[$key_data]['sex'] = db::name('user')->where('id',$value_data['user_id'])->value('sex');
|
||||
//获取用户在此房间今天的魅力值
|
||||
$charm =[];
|
||||
if($value_data['user_id']){
|
||||
$charm = db::name('vs_room_user_charm')->where(['user_id' => $value_data['user_id'],'room_id' => $room_id])->value('charm');
|
||||
}
|
||||
$data_users[$key_data]['dress'] = model('Decorate')->user_decorate_detail($value_data['user_id'],1);
|
||||
$data_users[$key_data]['charm'] = $charm??0;
|
||||
$data_users[$key_data]['pit_number'] = $value_data['pit_number'];
|
||||
}
|
||||
//推送给前端消息
|
||||
$text['text'] = '房间换麦位';
|
||||
$text['list'] = $data_users;
|
||||
model('api/Chat')->sendMsg(1053,$room_id,$text);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
//交友厅游戏开始后送礼后一系列操作
|
||||
//插入/更新心动表
|
||||
public function addUserHeart($uid,$user_id,$friend_id,$value,$room_id,$user_data){
|
||||
//给多个用户送礼
|
||||
//数组重组 下标从0开始
|
||||
$user_ids = array_values($user_id);
|
||||
// $heart_value = $value;//心动值
|
||||
$heart_value = 0;
|
||||
$heart_exp = get_system_config_value('coin_charm_exp');//金币与魅力值转换比
|
||||
for ($i = 0; $i < count($user_ids); $i++) {
|
||||
foreach ($user_data as $cv){
|
||||
if($user_ids[$i] == $cv['user_id']){
|
||||
$heart_value = $cv['gift_price'] * $heart_exp;
|
||||
}
|
||||
}
|
||||
// 处理用户ID顺序
|
||||
$user1 = min($uid, $user_ids[$i]);
|
||||
$user2 = max($uid, $user_ids[$i]);
|
||||
// 更新心动关系表
|
||||
$relation = db::name('vs_user_friending_heart')->where([
|
||||
'user1_id' => $user1,
|
||||
'user2_id' => $user2,
|
||||
'friend_id' => $friend_id
|
||||
])->find();
|
||||
|
||||
if ($relation) {
|
||||
db::name('vs_user_friending_heart')->where([
|
||||
'room_id' => $room_id,
|
||||
'user1_id' => $user1,
|
||||
'user2_id' => $user2,
|
||||
'friend_id' => $friend_id
|
||||
])->setInc('heart_value', $heart_value);
|
||||
} else {
|
||||
$relation['id'] = db::name('vs_user_friending_heart')->insert([
|
||||
'room_id' => $room_id,
|
||||
'user1_id' => $user1,
|
||||
'user2_id' => $user2,
|
||||
'friend_id' => $friend_id,
|
||||
'heart_value' => $heart_value
|
||||
]);
|
||||
}
|
||||
}
|
||||
//修改用户心动连线状态
|
||||
// $relation = db::name('vs_user_friending_heart')->where("(user1_id=".$uid." OR user2_id=".$uid.") AND friend_id=$friend_id AND room_id=$room_id AND status!=3")->order('heart_value desc')->find();
|
||||
// if($relation){
|
||||
// db::name('vs_user_friending_heart')->where("(user1_id=".$uid." OR user2_id=".$uid.") AND friend_id=$friend_id AND room_id=$room_id AND status!=3")->update(['status'=>2]);
|
||||
// db::name('vs_user_friending_heart')->where(['id'=>$relation['id']])->update(['status'=>1]);
|
||||
// }
|
||||
|
||||
}
|
||||
}
|
||||
73
application/api/model/RoomHourRanking.php
Normal file
73
application/api/model/RoomHourRanking.php
Normal file
@@ -0,0 +1,73 @@
|
||||
<?php
|
||||
|
||||
namespace app\api\model;
|
||||
|
||||
use think\Db;
|
||||
use think\Model;
|
||||
|
||||
class RoomHourRanking extends Model
|
||||
{
|
||||
//房间小时榜
|
||||
public function room_hour_ranking($page, $page_limit,$start_time = null, $end_time = null)
|
||||
{
|
||||
//当前小时开始时间
|
||||
if($start_time == null){
|
||||
$start_time = strtotime(date('Y-m-d H:00:00'));
|
||||
}
|
||||
|
||||
//结束时间
|
||||
if($end_time == null){
|
||||
$end_time = strtotime(date('Y-m-d H:59:59'));
|
||||
}
|
||||
|
||||
//判断是否开启
|
||||
$open_time = db::name('vs_hour_ranking_config')->where('id', 1)->value('open_time');
|
||||
if ($open_time == 0) {
|
||||
return ['code' => 0, 'msg' => '排行榜暂未开启', 'data' => null];
|
||||
}
|
||||
|
||||
//是否开启巡乐会
|
||||
$is_open_xlh = db::name('vs_hour_ranking_config')->where('id', 1)->value('is_open_xlh');
|
||||
|
||||
// 更进一步的优化版本:
|
||||
$subQuery = Db::name('vs_give_gift')
|
||||
->where('from', 2)
|
||||
->whereBetween('createtime', [$start_time, $end_time])
|
||||
->buildSql();
|
||||
|
||||
$profit = db::name('vs_room')->alias('a')
|
||||
->join([$subQuery => 'b'], 'a.id = b.from_id', 'left')
|
||||
->join('vs_room_label c', 'a.label_id = c.id','left')
|
||||
->field('a.id as room_id,a.user_id,a.room_name,a.label_id,a.room_cover,IFNULL(SUM(b.total_price), 0) as total_price,c.label_icon')
|
||||
->where('a.room_status', 1)
|
||||
->where('a.apply_status', 2)
|
||||
->where('a.type_id', '<>', 6)
|
||||
->group('a.id')
|
||||
->order('total_price', 'desc')
|
||||
->page($page, $page_limit)
|
||||
->select();
|
||||
|
||||
if($profit){
|
||||
foreach ($profit as &$v) {
|
||||
$v['total_price'] = $v['total_price'] * get_system_config_value('coin_charm_exp');
|
||||
if($v['room_id'] > 0 && $is_open_xlh == 1){
|
||||
$xlh_status = model('BlindBoxTurntableGift')->get_user_xlh_info($v['room_id']);
|
||||
$v['xlh_status'] = $xlh_status['xlh_status'];
|
||||
}else{
|
||||
$v['xlh_status'] = 0;
|
||||
}
|
||||
//查询房间是否有红包
|
||||
if($v['room_id'] > 0){
|
||||
$red_pack_status = Db::name('redpacket')->where(['room_id' => $v['room_id'], 'status' => ['<=',1]])->count();
|
||||
$v['redpacket_status'] = $red_pack_status;
|
||||
}else{
|
||||
$v['redpacket_status'] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
//当前小时开始时间 和结束时间 00:00-00:59 这样的格式
|
||||
$time_range = date('H:') . '00-' . date('H:'). '59';
|
||||
return ['code' => 1, 'msg' => '获取成功', 'data' => ['time_range' => $time_range, 'lists' =>$profit]];
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user