diff --git a/application/api/controller/Friend.php b/application/api/controller/Friend.php new file mode 100644 index 0000000..633a234 --- /dev/null +++ b/application/api/controller/Friend.php @@ -0,0 +1,66 @@ +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']); + } +} \ No newline at end of file diff --git a/application/api/model/Chat.php b/application/api/model/Chat.php index 4d92dd6..3b9ae5d 100644 --- a/application/api/model/Chat.php +++ b/application/api/model/Chat.php @@ -90,6 +90,15 @@ class Chat extends Model //送盲盒礼物推送文字消息 // RoomGiftBlindBox = 1038, + //交友房间内发送消息 + //交友房游戏阶段 + // FriendRoomGameStart = 1039, + //交友房延时 + // FriendRoomDelay = 1040, + //交友结束推送是否创建小房间 + // FriendRoomEnd = 1041, + + $text = [ diff --git a/application/api/model/Friend.php b/application/api/model/Friend.php index b0c3563..f43319e 100644 --- a/application/api/model/Friend.php +++ b/application/api/model/Friend.php @@ -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 diff --git a/application/api/model/Room.php b/application/api/model/Room.php index 0e174a0..221306e 100644 --- a/application/api/model/Room.php +++ b/application/api/model/Room.php @@ -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();