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-30 09:15:05 +08:00
use think\Log ;
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 ;
2025-08-21 11:56:38 +08:00
$data [ 'create_time' ] = time ();
2025-08-16 18:48:10 +08:00
$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-09-10 18:51:31 +08:00
//清除房间用户的魅力
model ( 'Room' ) -> clear_user_charm ( $user_id , $room_id );
2025-08-16 18:48:10 +08:00
//推送给前端消息
2025-08-16 19:04:30 +08:00
$text [ 'text' ] = '交友开始' ;
2025-08-16 18:48:10 +08:00
$text [ 'step' ] = 2 ;
2025-08-19 10:20:04 +08:00
$text [ 'friend_id' ] = $id ;
2025-08-21 09:18:58 +08:00
$text [ 'end_time' ] = $data [ 'end_time' ];
2025-08-20 15:15:47 +08:00
model ( 'api/Chat' ) -> sendMsg ( 1049 , $room_id , $text );
2025-08-16 18:48:10 +08:00
return [ 'code' => 1 , 'msg' => '操作成功!' , 'data' => [ 'friend_id' => $id ]];
} else {
2025-09-02 09:37:12 +08:00
return [ 'code' => 0 , 'msg' => '交友麦位至少两位用户才能开始' , 'data' => null ];
2025-08-16 18:48:10 +08:00
}
}
//延时
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 ];
}
2025-08-21 11:56:38 +08:00
if ( ! $id || ! $room_id ) {
2025-08-16 18:48:10 +08:00
return [ 'code' => 0 , 'msg' => '参数有误!' , 'data' => null ];
}
2025-08-21 11:56:38 +08:00
if ( $delay_times <= 0 ){
$delay_times = get_system_config_value ( 'friend_delay_times' );
}
2025-08-16 18:48:10 +08:00
//修改结束 时间
2025-08-21 12:03:04 +08:00
$res = db :: name ( 'vs_user_friending' ) -> where ( 'id' , $id ) -> update ([
'end_time' => Db :: raw ( 'end_time + ' . ( $delay_times * 60 ))
]);
2025-08-16 18:48:10 +08:00
if ( ! $res ){
return [ 'code' => 0 , 'msg' => '操作失败!' , 'data' => null ];
}
//推送延时
$text [ 'text' ] = '延时' ;
2025-08-22 10:37:00 +08:00
$text [ 'friend_id' ] = $id ;
2025-08-16 18:48:10 +08:00
$text [ 'end_time' ] = db :: name ( 'vs_user_friending' ) -> where ( 'id' , $id ) -> value ( 'end_time' );
2025-08-20 15:15:47 +08:00
model ( 'api/Chat' ) -> sendMsg ( 1050 , $room_id , $text );
2025-08-16 18:48:10 +08:00
return [ 'code' => 1 , 'msg' => '操作成功!' , 'data' => null ];
}
//交友结束(结束牵手良缘)
2025-08-21 16:46:14 +08:00
public function end_friend ( $user_id , $room_id , $id , $is_system = 0 ){
2025-08-16 18:48:10 +08:00
if ( ! $id || ! $room_id ) {
return [ 'code' => 0 , 'msg' => '参数有误!' , 'data' => null ];
}
2025-08-21 16:46:14 +08:00
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 ];
}
}
2025-08-16 18:48:10 +08:00
// 获取心动值最高的
2025-08-20 10:17:10 +08:00
$originalPairs = db :: name ( 'vs_user_friending_heart' )
2025-08-16 18:48:10 +08:00
-> 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' ];
2025-09-10 19:58:44 +08:00
$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 );
2025-09-10 20:18:26 +08:00
return [ 'code' => 1 , 'msg' => '操作成功!' , 'data' => $return ];
2025-09-10 19:58:44 +08:00
}
} else {
// 修改当前交友阶段
db :: name ( 'vs_room' ) -> where ([ 'id' => $room_id ]) -> update ([ 'step' => $step , 'updatetime' => time ()]);
2025-09-10 17:46:15 +08:00
}
2025-08-16 18:48:10 +08:00
} else {
$step = 1 ; //结束下一轮
2025-08-22 18:02:24 +08:00
// 修改当前交友阶段 分开写 放到前面是为了下麦
2025-09-10 20:18:26 +08:00
db :: name ( 'vs_room' ) -> where ([ 'id' => $room_id ]) -> update ([ 'step' => 1 ]);
2025-08-16 18:48:10 +08:00
//所有人下麦
$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' ]);
}
}
2025-08-21 16:46:14 +08:00
$return = null ;
2025-08-16 18:48:10 +08:00
}
//结束交友游戏
if ( $step == 1 ){
db :: name ( 'vs_user_friending' ) -> where ([ 'id' => $id ]) -> update ([ 'status' => 2 ]);
}
//推送给前端消息
$text [ 'text' ] = $step == 1 ? '交友结束' : '牵手良缘' ;
$text [ 'step' ] = $step ; //1 等待邂逅 2 心动连线 3 牵手良缘
2025-08-21 16:46:14 +08:00
$text [ 'friend_user' ] = $return ;
2025-08-22 10:37:00 +08:00
$text [ 'friend_id' ] = $id ;
2025-08-20 15:15:47 +08:00
model ( 'api/Chat' ) -> sendMsg ( 1049 , $room_id , $text );
2025-08-30 09:56:56 +08:00
model ( 'Room' ) -> clear_user_charm ( db :: name ( 'vs_room' ) -> where ([ 'id' => $room_id ]) -> value ( 'user_id' ), $room_id );
2025-08-16 18:48:10 +08:00
return [ 'code' => 1 , 'msg' => '操作成功!' , 'data' => $return ];
}
//心动值超过配置值 创建关系
public function createRelation ( $user_id , $room_id , $friend_id , $user1_id , $user2_id , $friending_config_id ){
2025-09-10 17:46:15 +08:00
if ( ! $user1_id || ! $user2_id || ! $friend_id || ! $room_id ) {
2025-08-16 18:48:10 +08:00
return [ 'code' => 0 , 'msg' => '参数有误!' , 'data' => null ];
}
$user1 = min ( $user1_id , $user2_id );
$user2 = max ( $user1_id , $user2_id );
2025-08-20 10:17:10 +08:00
$friending_heart = db :: name ( 'vs_user_friending_heart' )
2025-08-21 10:56:23 +08:00
-> where ([ 'room_id' => $room_id , 'friend_id' => $friend_id , 'user1_id' => $user1 , 'user2_id' => $user2 ]) -> order ( 'id desc' ) -> find ();
2025-09-10 16:40:55 +08:00
2025-08-20 10:17:10 +08:00
$originalPairs = db :: name ( 'vs_user_friending_heart' )
2025-08-16 18:48:10 +08:00
-> where ([ 'id' => $friending_heart [ 'id' ]])
2025-08-21 10:56:23 +08:00
-> update ([ 'status' => 3 , 'friend_config_id' => $friending_config_id ]);
2025-09-03 16:20:35 +08:00
$msg = '' ;
2025-08-16 18:48:10 +08:00
if ( $originalPairs ) {
$relation = db :: name ( 'vs_relation' ) -> where ( 'id' , $friending_config_id ) -> value ( 'name' );
2025-09-01 23:21:43 +08:00
if ( $friending_heart [ 'heart_value' ] >= get_system_config_value ( 'friend_heart_create_room' ) && $friending_config_id > 0 ){
2025-08-16 18:48:10 +08:00
//创建小房间
2025-08-25 09:51:32 +08:00
$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 ){
2025-09-03 16:20:35 +08:00
$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
}
2025-08-16 18:48:10 +08:00
}
} else {
$text [ 'text' ] = '交友结束未创建房间' ;
}
2025-09-15 19:42:31 +08:00
$text [ 'relation_name' ] = $relation ;
2025-09-15 19:40:47 +08:00
$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 );
2025-08-16 18:48:10 +08:00
// 修改当前交友阶段
2025-09-10 20:18:26 +08:00
db :: name ( 'vs_room' ) -> where ([ 'id' => $room_id ]) -> update ([ 'step' => 1 ]);
2025-09-10 16:40:55 +08:00
db :: name ( 'vs_user_friending' ) -> where ([ 'id' => $friend_id ]) -> update ([ 'status' => 2 ]);
2025-08-16 18:48:10 +08:00
//所有人下麦
$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 ;
//更新关系结束时间
2025-08-20 10:17:10 +08:00
db :: name ( 'vs_user_friending_heart' ) -> where ([ 'id' => $friending_heart [ 'id' ]]) -> update ([ 'contact_end_time' => $friendendtime ]);
2025-08-16 18:48:10 +08:00
//关系增加时间
$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 牵手良缘
2025-08-20 15:15:47 +08:00
model ( 'api/Chat' ) -> sendMsg ( 1049 , $room_id , $text );
2025-09-10 16:40:55 +08:00
2025-09-03 16:20:35 +08:00
return [ 'code' => 1 , 'msg' => '创建关系成功!' . $msg , 'data' => null ];
2025-08-16 18:48:10 +08:00
} else {
2025-08-25 16:19:46 +08:00
//推送给前端消息
$text [ 'text' ] = '交友结束' ;
$text [ 'step' ] = 1 ; //1 等待邂逅 2 心动连线 3 牵手良缘
model ( 'api/Chat' ) -> sendMsg ( 1049 , $room_id , $text );
2025-09-10 16:40:55 +08:00
db :: name ( 'vs_user_friending' ) -> where ([ 'id' => $friend_id ]) -> update ([ 'status' => 2 ]);
2025-08-16 18:48:10 +08:00
return [ 'code' => 0 , 'msg' => '创建关系失败!' , 'data' => null ];
}
}
//退出私密房间
public function outRoom ( $user_id , $room_id ){
2025-08-22 15:18:36 +08:00
//推送给前端消息
$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);
// }
2025-08-16 18:48:10 +08:00
//注销房间
db :: name ( 'vs_room' ) -> where ([ 'id' => $room_id ]) -> update ([ 'room_status' => 3 ]);
2025-08-25 15:52:32 +08:00
db :: name ( 'vs_room_cp_movie' ) -> where ([ 'room_id' => $room_id ]) -> update ([ 'status' => 4 ]);
2025-08-25 16:13:18 +08:00
model ( 'api/Tencent' ) -> delete_group ( 'room' . $room_id );
2025-08-16 18:48:10 +08:00
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-09-10 16:35:06 +08:00
public function room_give_gift ( $uid , $to_uid , $gift_id , $gift_num , $from_type , $type , $room_id , $pit_number , $heart_id , $give_gift_ext )
2025-08-16 11:29:29 +08:00
{
2025-09-10 16:35:06 +08:00
$res = model ( 'GiveGift' ) -> give_gift ( $uid , $to_uid , $gift_id , $gift_num , $from_type , $type , $room_id , $pit_number , $give_gift_ext );
2025-08-16 11:29:29 +08:00
if ( $res [ 'code' ] != 1 ){
return $res ;
}
2025-08-30 09:31:57 +08:00
2025-08-16 11:29:29 +08:00
//送礼成功后续操作
2025-08-18 16:33:01 +08:00
//查看当前时间是否在交友表的创建时间和结束时间段内 用来区分是否要拉取心动值高的用户上麦
2025-08-21 11:56:38 +08:00
$friend = db :: name ( 'vs_user_friending' ) -> where ([ 'room_id' => $room_id , 'status' => 1 ]) -> order ( 'id desc' ) -> find ();
2025-08-26 15:07:18 +08:00
if ( $friend && time () >= $friend [ 'create_time' ] && time () <= $friend [ 'end_time' ]){
2025-08-18 16:33:01 +08:00
$heart_exp = get_system_config_value ( 'coin_charm_exp' ); //金币与魅力值转换比
$sumPrice = $res [ 'data' ][ 'gift_total' ] * $heart_exp ;
$user_idd = $to_uid ;
if ( $heart_id ){ //有这个值就是助力 不参加抢麦操作
2025-08-20 10:17:10 +08:00
db :: name ( 'vs_user_friending_heart' ) -> where ([ 'id' => $heart_id ]) -> setInc ( 'heart_value' , $sumPrice );
2025-08-18 16:33:01 +08:00
$this -> pullHeartChange ( $room_id , $friend [ 'id' ]); //聊天室心动值变化通知
//生成新排名 判断抱上麦 还是换麦
$this -> pullUserPit ( $room_id , $friend [ 'id' ]);
} else {
//判断送礼人或收礼人里面有主持和嘉宾
$host = $this -> is_host ( $uid , $to_uid , $room_id );
2025-08-30 10:07:12 +08:00
$user_idd = explode ( " , " , $user_idd ); // 将字符串转换为数组
2025-08-18 16:33:01 +08:00
//判断是否是主持
if ( $host [ 'is_preside' ] == 1 ){
if ( ! in_array ( $uid , $host [ 'is_preside_user' ])){ //主持不是当前送礼人,那就是在收礼人中
//从数组中剔除主持人 && $is_preside_user!= UID
2025-08-30 09:31:57 +08:00
$user_idd = array_diff ( $user_idd , $host [ 'is_preside_user' ]); // 从数组中移除
2025-08-18 16:33:01 +08:00
if ( $user_idd ){
//插入/更新心动表
2025-08-30 09:46:55 +08:00
$this -> addUserHeart ( $uid , $user_idd , $friend [ 'id' ], $sumPrice , $room_id , $res [ 'data' ][ 'gift_user_data' ]);
2025-08-18 16:33:01 +08:00
//送礼产生心动值并计算 判断拉取用户上麦还是换麦
//生成新排名 判断抱上麦 还是换麦
$this -> pullUserPit ( $room_id , $friend [ 'id' ]);
}
}
} else {
//插入/更新心动表
2025-08-29 19:36:34 +08:00
$this -> addUserHeart ( $uid , $user_idd , $friend [ 'id' ], $sumPrice , $room_id , $res [ 'data' ][ 'gift_user_data' ]);
2025-08-18 16:33:01 +08:00
//送礼产生心动值并计算 判断拉取用户上麦还是换麦
//生成新排名 判断抱上麦 还是换麦
$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' );
2025-08-29 18:41:24 +08:00
$is_preside_user = [];
2025-08-18 16:33:01 +08:00
$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 ;
}
2025-08-21 15:05:10 +08:00
return [ 'is_preside' => $is_preside , 'is_preside_user' => $is_preside_user ];
2025-08-18 16:33:01 +08:00
}
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 ;
2025-08-21 11:15:53 +08:00
model ( 'api/Chat' ) -> sendMsg ( 1054 , $room_id , $text );
2025-09-05 19:44:15 +08:00
return $heart ;
2025-08-18 16:33:01 +08:00
}
// 获取心跳值排行
public function getRanking ( $room_id , $friend_id ) {
// 获取有心动值的用户对且不重复
2025-08-20 10:17:10 +08:00
$originalPairs = db :: name ( 'vs_user_friending_heart' )
2025-09-15 21:16:53 +08:00
-> where ([ 'room_id' => $room_id , 'friend_id' => $friend_id ])
2025-08-18 16:33:01 +08:00
-> order ( 'heart_value DESC' ) -> select ();
// 初始化排名数组和已使用用户数组
$ranking = [];
$usedUsers = [];
// 优先选择高价值且无重复用户的对
$heart_ids = [];
2025-09-15 22:51:48 +08:00
foreach ( $originalPairs as & $rel ) {
2025-08-18 16:33:01 +08:00
// 检查当前用户对是否包含已使用的用户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 );
2025-08-20 10:17:10 +08:00
$ranking_make_up = db :: name ( 'vs_user_friending_heart' )
2025-08-18 16:33:01 +08:00
-> 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 ) {
2025-09-15 22:51:48 +08:00
// 如果两个用户都已使用,跳过这条记录
2025-08-18 16:33:01 +08:00
if ( in_array ( $rel1 [ 'user1_id' ], $usedUsers ) && in_array ( $rel1 [ 'user2_id' ], $usedUsers )){
continue ;
}
2025-09-15 22:51:48 +08:00
// 如果只有user1已使用, 将user2加入排名
2025-08-18 16:33:01 +08:00
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' ];
2025-09-15 22:51:48 +08:00
$heart_ids [] = $rel1 [ 'id' ];
2025-08-18 16:33:01 +08:00
}
2025-09-15 22:51:48 +08:00
// 如果只有user2已使用, 将user1加入排名
elseif ( in_array ( $rel1 [ 'user2_id' ], $usedUsers )){
2025-08-18 16:33:01 +08:00
$ranking1 [] = [
'heart_value' => 0 ,
'id' => $rel1 [ 'id' ],
'user1_id' => $rel1 [ 'user1_id' ],
'user2_id' => - 1 ,
];
$usedUsers [] = $rel1 [ 'user1_id' ];
2025-09-15 22:51:48 +08:00
$heart_ids [] = $rel1 [ 'id' ];
2025-08-18 16:33:01 +08:00
}
}
2025-09-15 22:51:48 +08:00
2025-08-18 16:33:01 +08:00
}
// 返回最终的排名列表
$ranking_rut = array_merge ( $ranking , $ranking1 );
2025-09-10 19:30:15 +08:00
$nnum = count ( $ranking ) * 2 + count ( $ranking1 );
if ( $nnum < 6 ){
$make_up_num = 6 - $nnum ;
2025-08-20 10:17:10 +08:00
$ranking_make_up = db :: name ( 'vs_user_friending_heart' )
2025-08-18 16:33:01 +08:00
-> where ( array ( 'room_id' => $room_id , 'friend_id' => $friend_id , 'id' => array ( 'notin' , $heart_ids )))
-> limit ( $make_up_num )
-> order ( 'heart_value DESC' ) -> select ();
2025-08-29 19:08:43 +08:00
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' ];
}
2025-08-18 16:33:01 +08:00
}
}
2025-08-29 19:08:43 +08:00
2025-08-18 16:33:01 +08:00
}
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 );
2025-09-15 21:16:53 +08:00
//数组根据里面的heart_value 由大到小进行排序
usort ( $heart_data , function ( $a , $b ) {
return $b [ 'heart_value' ] - $a [ 'heart_value' ];
});
2025-08-18 16:33:01 +08:00
$pit = [];
$pit_number_array = [ 2 => 5 , 1 => 6 , 3 => 4 , 5 => 2 , 6 => 1 , 4 => 3 ]; //麦位对应关系
2025-08-29 18:41:24 +08:00
$pit_number_array_reverse = [ 0 => 2 , 1 => 1 , 2 => 3 , 3 => 4 , 4 => 5 , 5 => 6 ];
2025-08-18 16:33:01 +08:00
if ( $heart_data ){
//排麦位
$pit_unique = [];
2025-08-29 19:08:43 +08:00
$key = 0 ;
foreach ( $heart_data as $value ) {
2025-08-18 16:33:01 +08:00
if ( count ( $pit ) >= 6 ){
break ;
}
2025-08-29 18:41:24 +08:00
2025-09-15 22:51:48 +08:00
// 处理两个用户都存在的情况
2025-09-15 21:16:53 +08:00
if ( $value [ 'user1_id' ] != - 1 && $value [ 'user2_id' ] != - 1 ){
if ( ! in_array ( $value [ 'user1_id' ], $pit_unique )){
2025-09-15 22:51:48 +08:00
// 检查目标麦位是否已被占用
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' ]]);
}
2025-09-15 21:16:53 +08:00
}
}
2025-09-15 22:51:48 +08:00
// 处理只有user2存在的情况
elseif ( $value [ 'user1_id' ] == - 1 && ! in_array ( $value [ 'user2_id' ], $pit_unique )){
// 检查该键是否已被使用
if ( ! isset ( $pit [ $pit_number_array_reverse [ $key ]])) {
2025-08-29 18:41:24 +08:00
$pit [ $pit_number_array_reverse [ $key ]] = $value [ 'user2_id' ];
2025-09-15 22:51:48 +08:00
$pit_unique [] = $value [ 'user2_id' ];
2025-08-18 16:33:01 +08:00
}
}
2025-09-15 22:51:48 +08:00
// 处理只有user1存在的情况
elseif ( $value [ 'user2_id' ] == - 1 && ! in_array ( $value [ 'user1_id' ], $pit_unique )){
// 检查该键是否已被使用
if ( ! isset ( $pit [ $pit_number_array_reverse [ $key ]])) {
2025-08-29 18:41:24 +08:00
$pit [ $pit_number_array_reverse [ $key ]] = $value [ 'user1_id' ];
2025-09-15 22:51:48 +08:00
$pit_unique [] = $value [ 'user1_id' ];
2025-08-18 16:33:01 +08:00
}
}
2025-08-29 19:08:43 +08:00
$key ++ ;
2025-08-18 16:33:01 +08:00
}
}
2025-09-15 22:51:48 +08:00
return $pit ;
2025-08-18 16:33:01 +08:00
}
2025-09-15 22:51:48 +08:00
2025-08-18 16:33:01 +08:00
//换麦
2025-09-15 21:16:53 +08:00
public function changePitToPosPairs ( $room_id , $friendPlayPit ){
2025-09-15 16:11:38 +08:00
$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 ){
2025-08-18 16:33:01 +08:00
// $this->room_pit_model->getOnPit($this->room_id, $value, $pit_null);
2025-09-15 16:11:38 +08:00
model ( 'api/RoomPit' ) -> OnPit ( $value , $room_id , $pit_null );
2025-08-29 19:08:43 +08:00
// db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => $pit_null])->update(['user_id' => $value]);
2025-09-15 16:11:38 +08:00
} 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 );
}
2025-08-18 16:33:01 +08:00
}
2025-09-15 16:11:38 +08:00
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 ){
2025-08-18 16:33:01 +08:00
// $this->room_pit_model->getOnPit($this->room_id, $getRoomPitUser, $getRoomNullPitss);
2025-09-15 16:11:38 +08:00
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 ]);
}
2025-08-18 16:33:01 +08:00
}
2025-09-15 16:11:38 +08:00
model ( 'api/RoomPit' ) -> OnPit ( $value , $room_id , $friendPlayPit [ $value ]);
2025-08-18 16:33:01 +08:00
}
}
}
2025-09-15 16:11:38 +08:00
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 ]);
2025-08-18 16:33:01 +08:00
}
2025-09-15 16:11:38 +08:00
//获取目标麦位是否有人
$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 ;
2025-08-18 16:33:01 +08:00
}
2025-09-15 16:11:38 +08:00
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' ]]);
2025-08-18 16:33:01 +08:00
}
2025-08-21 10:56:23 +08:00
// $getRoomNullPit = $this->room_pit_model->where(['room_id'=>$room_id,'pit_number'=>['notin',[7,9]]])->select();
2025-09-15 16:11:38 +08:00
$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' ];
2025-08-18 16:33:01 +08:00
}
2025-09-15 16:11:38 +08:00
//推送给前端消息
$text [ 'text' ] = '房间换麦位' ;
$text [ 'list' ] = $data_users ;
model ( 'api/Chat' ) -> sendMsg ( 1053 , $room_id , $text );
2025-08-18 16:33:01 +08:00
}
2025-09-15 16:11:38 +08:00
}
2025-08-18 16:33:01 +08:00
}
2025-09-15 21:16:53 +08:00
//换麦
public function changePitToPosPair ( $room_id , $friendPlayPit ){
2025-09-15 22:51:48 +08:00
$new_pit_u = $friendPlayPit ;
2025-09-15 21:16:53 +08:00
//按照键值排序数组
ksort ( $new_pit_u );
2025-09-15 22:51:48 +08:00
//查询原有麦位上有用户的数据 并且重组结果,键为麦位,值为用户,值必须存在,没值则不展示
$pit_users = db :: name ( 'vs_room_pit' ) -> where ([ 'room_id' => $room_id , 'pit_number' => [ '<' , 7 ], 'user_id' => [ '>' , 0 ]])
2025-09-15 21:16:53 +08:00
-> order ( 'pit_number ASC' )
2025-09-15 22:51:48 +08:00
-> field ( 'pit_number,user_id' ) -> select ();
$pit_user = [];
2025-09-16 00:29:10 +08:00
foreach ( $pit_users as $value_pit_user ){
2025-09-15 22:51:48 +08:00
$pit_user [ $value_pit_user [ 'pit_number' ]] = $value_pit_user [ 'user_id' ];
}
2025-09-15 21:16:53 +08:00
//比较两个数组,无论是键的差异还是值的差异,都输出字符串”有差异“否则输出”没有差异“
$result = array_diff_assoc ( $pit_user , $new_pit_u ); //第一个数组中存在但其他数组中不存在的键/值对
$result2 = array_diff_assoc ( $new_pit_u , $pit_user );
if ( ! empty ( $result ) || ! empty ( $result2 )){ //换麦
if ( $result ){ //原有麦位上的用户,且不在新麦位上的用户
foreach ( $result as $key_result => $value_result ){
db :: name ( 'vs_room_pit' ) -> where ([ 'room_id' => $room_id , 'pit_number' => $key_result ]) -> 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 ]);
}
$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 );
}
}
2025-08-18 16:33:01 +08:00
//交友厅游戏开始后送礼后一系列操作
//插入/更新心动表
2025-08-29 19:36:34 +08:00
public function addUserHeart ( $uid , $user_id , $friend_id , $value , $room_id , $user_data ){
2025-08-18 16:33:01 +08:00
//给多个用户送礼
2025-08-30 09:46:55 +08:00
//数组重组 下标从0开始
$user_ids = array_values ( $user_id );
2025-08-29 19:36:34 +08:00
// $heart_value = $value;//心动值
$heart_value = 0 ;
$heart_exp = get_system_config_value ( 'coin_charm_exp' ); //金币与魅力值转换比
2025-08-18 16:33:01 +08:00
for ( $i = 0 ; $i < count ( $user_ids ); $i ++ ) {
2025-08-29 19:36:34 +08:00
foreach ( $user_data as $cv ){
if ( $user_ids [ $i ] == $cv [ 'user_id' ]){
$heart_value = $cv [ 'gift_price' ] * $heart_exp ;
}
}
2025-08-18 16:33:01 +08:00
// 处理用户ID顺序
2025-08-29 18:41:24 +08:00
$user1 = min ( $uid , $user_ids [ $i ]);
$user2 = max ( $uid , $user_ids [ $i ]);
2025-08-18 16:33:01 +08:00
// 更新心动关系表
2025-08-20 10:17:10 +08:00
$relation = db :: name ( 'vs_user_friending_heart' ) -> where ([
2025-08-18 16:33:01 +08:00
'user1_id' => $user1 ,
'user2_id' => $user2 ,
'friend_id' => $friend_id
]) -> find ();
if ( $relation ) {
2025-08-20 10:17:10 +08:00
db :: name ( 'vs_user_friending_heart' ) -> where ([
2025-08-18 16:33:01 +08:00
'room_id' => $room_id ,
'user1_id' => $user1 ,
'user2_id' => $user2 ,
'friend_id' => $friend_id
]) -> setInc ( 'heart_value' , $heart_value );
} else {
2025-08-20 10:17:10 +08:00
$relation [ 'id' ] = db :: name ( 'vs_user_friending_heart' ) -> insert ([
2025-08-18 16:33:01 +08:00
'room_id' => $room_id ,
'user1_id' => $user1 ,
'user2_id' => $user2 ,
'friend_id' => $friend_id ,
'heart_value' => $heart_value
]);
}
}
2025-08-29 18:41:24 +08:00
//修改用户心动连线状态
2025-09-10 18:39:54 +08:00
// $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]);
// }
2025-08-16 11:29:29 +08:00
}
}