2025-08-16 11:29:29 +08:00
|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
|
|
namespace app\api\model;
|
|
|
|
|
|
|
2025-08-16 18:48:10 +08:00
|
|
|
|
use think\Db;
|
2025-08-16 11:29:29 +08:00
|
|
|
|
use think\Model;
|
|
|
|
|
|
|
|
|
|
|
|
class Friend extends Model
|
|
|
|
|
|
{
|
2025-08-16 18:48:10 +08:00
|
|
|
|
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['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]);
|
|
|
|
|
|
|
|
|
|
|
|
//推送给前端消息
|
2025-08-16 19:04:30 +08:00
|
|
|
|
$text['text'] = '交友开始';
|
2025-08-16 18:48:10 +08:00
|
|
|
|
$text['step'] = 2;
|
|
|
|
|
|
model('api/Chat')->sendMsg(1039,$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 || $delay_times <= 0) {
|
|
|
|
|
|
return ['code' => 0, 'msg' => '参数有误!', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
//修改结束 时间
|
|
|
|
|
|
$res = db::name('vs_user_friending')->where('id', $id)->update(['end_time' => ['exp', 'end_time+' . $delay_times * 60]]);
|
|
|
|
|
|
if(!$res){
|
|
|
|
|
|
return ['code' => 0, 'msg' => '操作失败!', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
//推送延时
|
|
|
|
|
|
$text['text'] = '延时';
|
|
|
|
|
|
$text['end_time'] = db::name('vs_user_friending')->where('id', $id)->value('end_time');
|
|
|
|
|
|
model('api/Chat')->sendMsg(1040,$room_id,$text);
|
|
|
|
|
|
return ['code' => 1, 'msg' => '操作成功!', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//交友结束(结束牵手良缘)
|
|
|
|
|
|
public function end_friend($user_id,$room_id,$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];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!$id || !$room_id) {
|
|
|
|
|
|
return ['code' => 0, 'msg' => '参数有误!', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 获取心动值最高的
|
|
|
|
|
|
$originalPairs = db::name('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){
|
|
|
|
|
|
$return['is_cp'] = 1;
|
|
|
|
|
|
$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'];
|
|
|
|
|
|
}else{
|
|
|
|
|
|
$return = [];
|
|
|
|
|
|
$return['is_cp'] = 0;
|
|
|
|
|
|
$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']);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//结束交友游戏
|
|
|
|
|
|
if($step == 1){
|
|
|
|
|
|
db::name('vs_user_friending')->where(['id' => $id])->update(['status' => 2]);
|
|
|
|
|
|
}
|
|
|
|
|
|
//推送给前端消息
|
|
|
|
|
|
$text['text'] = $step == 1 ? '交友结束' : '牵手良缘';
|
|
|
|
|
|
$text['step'] = $step;//1 等待邂逅 2 心动连线 3 牵手良缘
|
|
|
|
|
|
model('api/Chat')->sendMsg(1039,$room_id,$text);
|
|
|
|
|
|
// 修改当前交友阶段
|
|
|
|
|
|
db::name('vs_room')->where(['id' => $room_id])->setField('step', $step);
|
|
|
|
|
|
|
|
|
|
|
|
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 || !$friending_config_id || !$room_id || !$user_id) {
|
|
|
|
|
|
return ['code' => 0, 'msg' => '参数有误!', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
$user1 = min($user1_id, $user2_id);
|
|
|
|
|
|
$user2 = max($user1_id, $user2_id);
|
|
|
|
|
|
$friending_heart = db::name('user_friending_heart')
|
|
|
|
|
|
->where(['room_id'=>$room_id,'friend_id'=>$friend_id ,'user1_id' =>$user1,'user2_id' => $user2])->find();
|
|
|
|
|
|
$originalPairs = db::name('user_friending_heart')
|
|
|
|
|
|
->where(['id'=>$friending_heart['id']])
|
|
|
|
|
|
->save(['status' => 3,'friend_config_id' =>$friending_config_id]);
|
|
|
|
|
|
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')){
|
|
|
|
|
|
//创建小房间
|
|
|
|
|
|
$room_id = model('api/Room')->user_create_room($user1,'的电影房',get_system_config_value('web_site').'/data/avatar/head_pic.png','交友房产生的一次性房间',7);
|
|
|
|
|
|
if($room_id['code'] != 1){
|
|
|
|
|
|
return ['code' => 0, 'msg' => 'cp电影房创建失败,请联系管理员','data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
if($room_id['data']){
|
|
|
|
|
|
$text['text'] = '交友结束并创建房间';
|
|
|
|
|
|
$text['relation_name'] = $relation;
|
|
|
|
|
|
$text['room_id'] = $room_id['data'];//前端用来让用户跳转的房间id
|
|
|
|
|
|
$text['user1_id'] = $user1;//进小房间的用户id
|
|
|
|
|
|
$text['user2_id'] = $user2;//进小房间的用户id
|
|
|
|
|
|
model('api/Chat')->sendMsg(1041,$room_id,$text);
|
|
|
|
|
|
}
|
|
|
|
|
|
}else{
|
|
|
|
|
|
$text['text'] = '交友结束未创建房间';
|
|
|
|
|
|
$text['relation_name'] = $relation;
|
|
|
|
|
|
model('api/Chat')->sendMsg(1041,$room_id,$text);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 修改当前交友阶段
|
|
|
|
|
|
db::name('vs_room')->where(['id' => $room_id])->setField('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']);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
$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('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(1039,$room_id,$text);
|
|
|
|
|
|
return ['code' => 1, 'msg' => '创建关系成功', 'data' => ['id' => $id,'end_time' =>get_system_config_value('friend_room_timea')]];
|
|
|
|
|
|
} else {
|
|
|
|
|
|
return ['code' => 0, 'msg' => '创建关系失败!', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//退出私密房间
|
|
|
|
|
|
public function outRoom($user_id,$room_id){
|
|
|
|
|
|
//查询在房间的用户
|
|
|
|
|
|
$users = db::name('vs_room_visitor')->where(['room_id'=>$room_id])->select();
|
|
|
|
|
|
|
|
|
|
|
|
//退出房间
|
|
|
|
|
|
foreach ($users as $v){
|
|
|
|
|
|
//退出房间
|
|
|
|
|
|
model('Room')->quit_room($v['user_id'], $room_id,$v['user_id']);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//注销房间
|
|
|
|
|
|
db::name('vs_room')->where(['id'=>$room_id])->update(['room_status'=>3]);
|
|
|
|
|
|
|
|
|
|
|
|
return ['code' => 1, 'msg' => '退出成功!', 'data' => null];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-08-16 11:29:29 +08:00
|
|
|
|
//房间内送礼
|
|
|
|
|
|
/*
|
|
|
|
|
|
* @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 坑位
|
|
|
|
|
|
*/
|
2025-08-16 19:04:30 +08:00
|
|
|
|
public function room_give_gift($uid, $to_uid, $gift_id, $gift_num, $from_type, $type, $room_id, $pit_number,$heart_id)
|
2025-08-16 11:29:29 +08:00
|
|
|
|
{
|
|
|
|
|
|
$res = model('GiveGift')->give_gift($uid, $to_uid, $gift_id, $gift_num,$from_type,$type, $room_id,$pit_number);
|
|
|
|
|
|
if($res['code'] != 1){
|
|
|
|
|
|
return $res;
|
|
|
|
|
|
}
|
|
|
|
|
|
//送礼成功后续操作
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|