Merge remote-tracking branch 'origin/develop' into develop

This commit is contained in:
2025-08-16 19:11:02 +08:00
5 changed files with 289 additions and 5 deletions

View File

@@ -0,0 +1,66 @@
<?php
namespace app\api\controller;
use app\common\controller\BaseCom;
class Friend extends BaseCom
{
//交友开始
public function start_friend(){
$room_id = input('room_id', '');
$reslut = model('Friend')->start_friend($this->uid,$room_id);
return V($reslut['code'], $reslut['msg'], $reslut['data']);
}
//交友延时
public function delay(){
$friend_id = input('friend_id', '');
$room_id = input('room_id', '');
$delay_times = input('delay_times', '');//分钟
$reslut = model('Friend')->delay($this->uid,$room_id,$friend_id,$delay_times);
return V($reslut['code'], $reslut['msg'], $reslut['data']);
}
//交友结束
public function end_friend(){
$friend_id = input('friend_id', '');
$room_id = input('room_id', '');
$result = model('Friend')->end_friend($this->uid,$room_id,$friend_id);
if($result['code'] == 1){
model('Room')->clear_user_charm($this->uid, $room_id);
}
return V($result['code'], $result['msg'], $result['data']);
}
//卡关系 创建关系
public function create_relation()
{
$room_id = input('room_id', '');
$friend_id = input('friend_id', '');
$user1_id = input('user1_id', '');
$user2_id = input('user2_id', '');
$relation_id = input('relation_id', '');
$result = model('Friend')->createRelation($this->uid,$room_id,$friend_id,$user1_id,$user2_id,$relation_id);
return V($result['code'], $result['msg'], $result['data']);
}
//退出私密小屋
public function out_room()
{
$room_id = input('room_id', '');
$result = model('Friend')->outRoom($this->uid,$room_id);
return V($result['code'], $result['msg'], $result['data']);
}
}

View File

@@ -155,8 +155,9 @@ class Room extends BaseCom
$to_uid = input('to_uid', 0);//收礼人ID逗号隔开的字符串
$type = input('type', 1);//1金币购买 2送背包礼物
$pit_number = input('pit_number', 0);
$heart_id = input('heart_id', 0);
$reslut = model('Room')->room_gift($this->uid, $to_uid, $gift_id, $gift_num, $type, $room_id, $pit_number);
$reslut = model('Room')->room_gift($this->uid, $to_uid, $gift_id, $gift_num, $type, $room_id, $pit_number,$heart_id);
return V($reslut['code'], $reslut['msg'], $reslut['data']);
}

View File

@@ -90,6 +90,15 @@ class Chat extends Model
//送盲盒礼物推送文字消息
// RoomGiftBlindBox = 1038,
//交友房间内发送消息
//交友房游戏阶段
// FriendRoomGameStart = 1039,
//交友房延时
// FriendRoomDelay = 1040,
//交友结束推送是否创建小房间
// FriendRoomEnd = 1041,
$text = [

View File

@@ -2,10 +2,218 @@
namespace app\api\model;
use think\Db;
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['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]);
//推送给前端消息
$text['text'] = '交友开始';
$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];
}
//房间内送礼
/*
* @param $uid 用户id
@@ -17,7 +225,7 @@ class Friend extends Model
* @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)
public function room_give_gift($uid, $to_uid, $gift_id, $gift_num, $from_type, $type, $room_id, $pit_number,$heart_id)
{
$res = model('GiveGift')->give_gift($uid, $to_uid, $gift_id, $gift_num,$from_type,$type, $room_id,$pit_number);
if($res['code'] != 1){

View File

@@ -1213,7 +1213,7 @@ class Room extends Model
//房间送礼
public function room_gift($uid, $to_uid, $gift_id, $gift_num,$type, $room_id, $pit_number)
public function room_gift($uid, $to_uid, $gift_id, $gift_num,$type, $room_id, $pit_number, $heart_id)
{
$label_type = model('Room')->get_room_label($room_id);
if($label_type['code'] != 1){
@@ -1248,7 +1248,7 @@ class Room extends Model
}elseif($label_type['data']['type_id'] == 6){
return model('GiveGift')->give_gift($uid, $to_uid, $gift_id, $gift_num,6,$type, $room_id,$pit_number);
}elseif($label_type['data']['type_id'] == 7){
return model('Friend')->room_give_gift($uid, $to_uid, $gift_id, $gift_num,2,$type, $room_id,$pit_number);
return model('Friend')->room_give_gift($uid, $to_uid, $gift_id, $gift_num,2,$type, $room_id,$pit_number,$heart_id);
}else{
$res = model('GiveGift')->give_gift($uid, $to_uid, $gift_id, $gift_num,2,$type, $room_id,$pit_number);
return $res;
@@ -1631,7 +1631,7 @@ class Room extends Model
}
//清除房间用户的魅力值
public function clear_user_charm($user_id ,$room_id,$uid)
public function clear_user_charm($user_id ,$room_id,$uid='')
{
//判断用户是否在主持麦
// $is_host = db::name('vs_room_pit')->where(['room_id' => $room_id,'user_id' => $user_id,'pit_number' => 9])->find();