field('uid')->find($uid); if(!$user_info){ return ['code' => 201, 'msg' => '参数错误', 'data' => null]; } $room_info = db::name('room')->find($rid); if(!$room_info){ return ['code' => 201, 'msg' => '该房间不存在', 'data' => null]; } // $room_admin_uid_arr = explode(',', $room_info['room_admin_uid']); // if ($uid != $room_info['room_owner_uid'] && !in_array($uid, $room_admin_uid_arr)) { // return ['code' => 201, 'msg' => '无权限操作', 'data' => null]; // } if($uid != $room_info['room_host_uid']){ return ['code' => 201, 'msg' => '仅限主持麦操作', 'data' => null]; } //是否已有未结束阶段 $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['is_delete', '=', 1]; $room_dating_log = db::name('room_dating_log')->where($map)->find(); if($room_dating_log){ return ['code' => 201, 'msg' => '无法重复开启', 'data' => null]; } Db::startTrans(); try { // $room_micro_data = explode(',', $room_info['room_micro']); $room_micro_data = db::name('room_micro')->where('rid', $rid)->order('micro_id asc')->column('uid'); $left_micro_num = 0; $right_micro_num = 0; $micro_uid_data = ''; foreach($room_micro_data as $a => $b){ if(in_array($a, [0,2,4]) && $b > 0){ $left_micro_num += 1; $micro_uid_data .= $b.','; }else if(in_array($a, [1,3,5]) && $b > 0){ $right_micro_num += 1; $micro_uid_data .= $b.','; } } // if($left_micro_num < 1 && $right_micro_num < 1){ // return ['code' => 201, 'msg' => '双方人数不能为0人', 'data' => null]; // } // if($left_micro_num != $right_micro_num){ // return ['code' => 201, 'msg' => '双方人数必须一致才能开始', 'data' => null]; // } if(($left_micro_num + $right_micro_num) < 1){ return ['code' => 201, 'msg' => '当前交友麦上没有人无法开启', 'data' => null]; } $insert = []; $insert['rid'] = $rid; $insert['participate_uid'] = $micro_uid_data; $insert['stage'] = 2; $insert['duration'] = $config['heartbeat_line_time']; $insert['add_time'] = time(); $insert['end_time'] = time() + $config['heartbeat_line_time']; $reslut = db::name('room_dating_log')->insert($insert); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } Db::commit(); model('api/room')->push_room_micro_data($rid); return ['code' => 200, 'msg' => '操作成功', 'data' => null]; } catch (\Exception $e) { // 回滚事务 dump($e); Db::rollback(); return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } } //生成心动连线 public function user_send_gift_heartbeat_line($uid, $receive_uid, $rid, $change_value, $help_uid){ // $user_info = db::name('user')->field('uid')->find($uid); // if(!$user_info){ // return ['code' => 201, 'msg' => '参数错误', 'data' => null]; // } $room_info = db::name('room')->find($rid); if(!$room_info){ return ['code' => 201, 'msg' => '该房间信息不存在', 'data' => null]; } Db::startTrans(); try { $micro_uid_7 = 0; $room_micro_datas = []; // $room_micro_data = explode(',', $room_info['room_micro']); $room_micro_data = db::name('room_micro')->where('rid', $rid)->order('micro_id asc')->column('uid'); foreach ($room_micro_data as $a => $b){ if($a < 6){ $room_micro_datas[] = $b; } $micro_uid_7 = $room_micro_data[6]; } $is_push = 2; //是否有未结束的第二阶段 $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['stage', '=', 2]; $map[] = ['is_delete', '=', 1]; $room_dating_log = db::name('room_dating_log')->where($map)->find(); if($room_dating_log){ // if(!in_array($uid, $room_micro_datas) && in_array($receive_uid, $room_micro_datas)){//普通用户送麦上,助力 if(!empty($help_uid)){//助力 //助力所在的麦位及对应麦位 $micro_id_1 = db::name('room_micro')->where('rid', $rid)->where('uid', $help_uid)->value('micro_id'); if($micro_id_1 == 1){ $help_receive_uid = db::name('room_micro')->where('rid', $rid)->where('micro_id', 2)->value('uid'); }else if($micro_id_1 == 2){ $help_receive_uid = db::name('room_micro')->where('rid', $rid)->where('micro_id', 1)->value('uid'); }else if($micro_id_1 == 3){ $help_receive_uid = db::name('room_micro')->where('rid', $rid)->where('micro_id', 4)->value('uid'); }else if($micro_id_1 == 4){ $help_receive_uid = db::name('room_micro')->where('rid', $rid)->where('micro_id', 3)->value('uid'); }else if($micro_id_1 == 5){ $help_receive_uid = db::name('room_micro')->where('rid', $rid)->where('micro_id', 6)->value('uid'); }else if($micro_id_1 == 6){ $help_receive_uid = db::name('room_micro')->where('rid', $rid)->where('micro_id', 5)->value('uid'); } $map = []; $map[] = ['pid', '=', $room_dating_log['id']]; $map[] = ['uid|receive_uid', '=', $help_uid];//需更改help_uid $map[] = ['uid|receive_uid', '=', $help_receive_uid]; // $user_room_dating_line = db::name('user_room_dating_line')->where($map)->select(); $user_room_dating_line = db::name('user_room_dating_line')->where($map)->order('rank_value desc')->find(); if(!empty($user_room_dating_line)){ //增加数值 $update = []; $update['update_time'] = time(); $reslut = db::name('user_room_dating_line')->where('id', $user_room_dating_line['id'])->inc('rank_value', $change_value)->inc('subjoin_value', $change_value)->update($update); // $reslut = db::name('user_room_dating_line')->where($map)->inc('rank_value', $change_value)->inc('subjoin_value', $change_value)->update($update); // if(!$reslut){ // Db::rollback(); // return ['code' => 201, 'msg' => '失败', 'data' => null]; // } //添加记录 $map = []; $map[] = ['pid', '=', $room_dating_log['id']]; $map[] = ['line_id', '=', $user_room_dating_line['id']]; $map[] = ['uid', '=', $uid]; $map[] = ['receive_uid', '=', $help_uid];//需更改help_uid $user_room_dating_help = db::name('user_room_dating_help')->where($map)->find(); if($user_room_dating_help){ $reslut = db::name('user_room_dating_help')->where($map)->inc('subjoin_value', $change_value)->update($update); }else{ $insert = []; $insert['pid'] = $room_dating_log['id']; $insert['line_id'] = $user_room_dating_line['id']; $insert['uid'] = $uid; $insert['receive_uid'] = $help_uid; $insert['subjoin_value'] = $change_value; $insert['add_time'] = time(); $reslut = db::name('user_room_dating_help')->insert($insert); } // if(!$reslut){ // Db::rollback(); // return ['code' => 201, 'msg' => '失败', 'data' => null]; // } $is_push = 1; } // $map = []; // $map[] = ['uid|receive_uid', '=', $help_uid];//需更改help_uid // $map[] = ['uid|receive_uid', '=', $help_receive_uid]; // $map[] = ['r_date', '=', date('Y-m-d')]; // $dating_mt_wheel = db::name('dating_mt_wheel')->where($map)->find(); // if(!empty($dating_mt_wheel)){ // db::name('dating_mt_wheel')->where(['id'=>$dating_mt_wheel['id']])->inc('rank_value', $change_value)->update(['update_time'=>time()]); // } // }else if(in_array($uid, $room_micro_datas) && in_array($receive_uid, $room_micro_datas)){//同是麦上用户连线或增加心动值 }else{//非助力,连线 if($uid == $room_info['room_host_uid'] || $uid == $micro_uid_7 || $receive_uid == $room_info['room_host_uid'] || $receive_uid == $micro_uid_7){ //用户为主持麦和嘉宾麦无法参与 }else{ //是否有连线 $map = []; $map[] = ['pid', '=', $room_dating_log['id']]; $map[] = ['uid|receive_uid', '=', $uid]; $map[] = ['uid|receive_uid', '=', $receive_uid]; $user_room_dating_line = db::name('user_room_dating_line')->where($map)->find(); if($user_room_dating_line){ $update = []; $update['update_time'] = time(); $reslut = db::name('user_room_dating_line')->where('id', $user_room_dating_line['id'])->inc('rank_value', $change_value)->update($update); // if(!$reslut){ // Db::rollback(); // return ['code' => 201, 'msg' => '失败', 'data' => null]; // } }else{//没有记录连线 //绑定连线 $insert = []; $insert['pid'] = $room_dating_log['id']; $insert['uid'] = $uid; $insert['receive_uid'] = $receive_uid; $insert['add_time'] = time(); $insert['rank_value'] = $change_value; $reslut = db::name('user_room_dating_line')->insert($insert); // if(!$reslut){ // Db::rollback(); // return ['code' => 201, 'msg' => '失败', 'data' => null]; // } //uid是否在参与人员中 $participate_uid_array = trim($room_dating_log['participate_uid'], ','); $participate_uid_array = explode(',', $participate_uid_array); $participate_uid_data = ''; if(!in_array($uid, $participate_uid_array)){ $participate_uid_data = $room_dating_log['participate_uid'].$uid.','; } //receive_uid是否在参与人员中 if(!in_array($receive_uid, $participate_uid_array)){ if(empty($participate_uid_data)){ $participate_uid_data = $room_dating_log['participate_uid'].$receive_uid.','; }else{ $participate_uid_data = $participate_uid_data.$receive_uid.','; } } if(!empty($participate_uid_data)){ $update = []; $update['participate_uid'] = $participate_uid_data; $update['update_time'] = time(); $reslut = db::name('room_dating_log')->where('id', $room_dating_log['id'])->update($update); // if(!$reslut){ // Db::rollback(); // return ['code' => 201, 'msg' => '失败', 'data' => null]; // } } } //增加建立关系后的心动连线值 // $map = []; // $map[] = ['uid|receive_uid', '=', $uid];//需更改help_uid // $map[] = ['uid|receive_uid', '=', $receive_uid]; // $map[] = ['r_date', '=', date('Y-m-d')]; // $dating_mt_wheel = db::name('dating_mt_wheel')->where($map)->find(); // if(!empty($dating_mt_wheel)){ // db::name('dating_mt_wheel')->where(['id'=>$dating_mt_wheel['id']])->inc('rank_value', $change_value)->update(['update_time'=>time()]); // } $is_push = 1; } } } if($is_push == 1){ $reslut = $this->update_dating_room_micro($rid); if($reslut['code'] == 201){ Db::rollback(); return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } } Db::commit(); return ['code' => 200, 'msg' => '操作成功', 'data' => null]; } catch (\Exception $e) { // 回滚事务 dump($e); Db::rollback(); return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } } //麦位变更 public function update_dating_room_micro($rid){ $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['stage', '=', 2]; $map[] = ['is_delete', '=', 1]; $room_dating_log = db::name('room_dating_log')->where($map)->find(); if($room_dating_log){ $room_micro_uid_array = trim($room_dating_log['participate_uid'], ','); $room_micro_uid_array = explode(',', $room_micro_uid_array); $map = []; $map[] = ['pid', '=', $room_dating_log['id']]; $map[] = ['uid|receive_uid', 'in', $room_micro_uid_array]; $user_room_dating_line = db::name('user_room_dating_line')->where($map)->order('rank_value desc,add_time asc')->find(); if(!empty($user_room_dating_line)){ // $room_micro = db::name('room')->where('rid',$rid)->value('room_micro'); // $room_micro_data = explode(',', $room_micro); $room_micro_data_s = db::name('room_micro')->where('rid', $rid)->order('micro_id asc')->field('uid,is_online,micro_id')->select(); $room_micro_data_u = []; foreach ($room_micro_data_s as $val) { if($val['uid'] > 0) { $room_micro_data_u[$val['uid']] = $val; } } $room_micro_data = db::name('room_micro')->where('rid', $rid)->order('micro_id asc')->column('uid'); $room_micro_datas = $room_micro_data; //第一的麦位 $user_sex = db::name('user')->where('uid', $user_room_dating_line['uid'])->value('sex'); if($user_sex == 1){ if($room_micro_data[2] != $user_room_dating_line['uid']){ $room_micro_data[2] = $user_room_dating_line['uid']; } if($room_micro_data[3] != $user_room_dating_line['receive_uid']){ $room_micro_data[3] = $user_room_dating_line['receive_uid']; } }else{ if($room_micro_data[3] != $user_room_dating_line['uid']){ $room_micro_data[3] = $user_room_dating_line['uid']; } if($room_micro_data[2] != $user_room_dating_line['receive_uid']){ $room_micro_data[2] = $user_room_dating_line['receive_uid']; } } $room_micro_uid_1 = [$user_room_dating_line['uid'], $user_room_dating_line['receive_uid']]; $room_micro_uid_array_1 = array_diff($room_micro_uid_array, $room_micro_uid_1); $map = []; $map[] = ['pid', '=', $room_dating_log['id']]; $map[] = ['uid|receive_uid', 'in', $room_micro_uid_1]; $user_room_dating_line_data = db::name('user_room_dating_line')->where($map)->column('id'); if(!empty($room_micro_uid_array_1)){ //第二的麦位连线 $map = []; $map[] = ['pid', '=', $room_dating_log['id']]; $map[] = ['uid|receive_uid', 'in', $room_micro_uid_array_1]; $map[] = ['id', 'not in', $user_room_dating_line_data]; $user_room_dating_line_1 = db::name('user_room_dating_line')->where($map)->order('rank_value desc,add_time asc')->find(); if(!empty($user_room_dating_line_1)){ $user_sex_1 = db::name('user')->where('uid', $user_room_dating_line_1['uid'])->value('sex'); if($user_sex_1 == 1){ if($room_micro_data[0] != $user_room_dating_line_1['uid']){ $room_micro_data[0] = $user_room_dating_line_1['uid']; } if($room_micro_data[1] != $user_room_dating_line_1['receive_uid']){ $room_micro_data[1] = $user_room_dating_line_1['receive_uid']; } }else{ if($room_micro_data[0] != $user_room_dating_line_1['receive_uid']){ $room_micro_data[0] = $user_room_dating_line_1['receive_uid']; } if($room_micro_data[1] != $user_room_dating_line_1['uid']){ $room_micro_data[1] = $user_room_dating_line_1['uid']; } } $room_micro_uid_2 = [$user_room_dating_line_1['uid'], $user_room_dating_line_1['receive_uid']]; $room_micro_uid_array_2 = array_diff($room_micro_uid_array_1, $room_micro_uid_2); $room_micro_uid_3 = [$user_room_dating_line['uid'], $user_room_dating_line['receive_uid'],$user_room_dating_line_1['uid'], $user_room_dating_line_1['receive_uid']]; $map = []; $map[] = ['pid', '=', $room_dating_log['id']]; $map[] = ['uid|receive_uid', 'in', $room_micro_uid_3]; $user_room_dating_line_data_1 = db::name('user_room_dating_line')->where($map)->column('id'); if(!empty($room_micro_uid_array_2)){ //第三的麦位连线 $map = []; $map[] = ['pid', '=', $room_dating_log['id']]; $map[] = ['uid|receive_uid', 'in', $room_micro_uid_array_2]; $map[] = ['id', 'not in', $user_room_dating_line_data_1]; $user_room_dating_line_2 = db::name('user_room_dating_line')->where($map)->order('rank_value desc,add_time asc')->find(); if(!empty($user_room_dating_line_2)){ $user_sex_2 = db::name('user')->where('uid', $user_room_dating_line_2['uid'])->value('sex'); if($user_sex_2 == 1){ if($room_micro_data[4] != $user_room_dating_line_2['uid']){ $room_micro_data[4] = $user_room_dating_line_2['uid']; } if($room_micro_data[5] != $user_room_dating_line_2['receive_uid']){ $room_micro_data[5] = $user_room_dating_line_2['receive_uid']; } }else{ if($room_micro_data[4] != $user_room_dating_line_2['receive_uid']){ $room_micro_data[4] = $user_room_dating_line_2['receive_uid']; } if($room_micro_data[5] != $user_room_dating_line_2['uid']){ $room_micro_data[5] = $user_room_dating_line_2['uid']; } } }else{ $room_micro_uid_array_2 = array_values($room_micro_uid_array_2); $room_micro_data[4] = 0; $room_micro_data[5] = 0; foreach ($room_micro_uid_array_2 as $a => $b){ if($a == 0){ $room_micro_data[4] = $b; }else if($a == 1){ $room_micro_data[5] = $b; } } } }else{ $room_micro_data[4] = 0; $room_micro_data[5] = 0; } }else{ $room_micro_uid_array_1 = array_values($room_micro_uid_array_1); $room_micro_data[0] = 0; $room_micro_data[1] = 0; $room_micro_data[4] = 0; $room_micro_data[5] = 0; foreach ($room_micro_uid_array_1 as $a => $b){ if($a == 0){ $room_micro_data[0] = $b; }else if($a == 1){ $room_micro_data[1] = $b; }else if($a == 2){ $room_micro_data[4] = $b; }else if($a == 3){ $room_micro_data[5] = $b; } } } }else{ $room_micro_data[0] = 0; $room_micro_data[1] = 0; $room_micro_data[4] = 0; $room_micro_data[5] = 0; } if($room_micro_datas != $room_micro_data){ //改变麦位 foreach ($room_micro_data as $i => $j){ $update_data = ['uid' => $j, 'frame_gid' => 0, 'centre_gid' => 0, 'above_gid' => 0, 'below_gid' => 0, 'left_gid'=> 0, 'right_gid' => 0, 'update_time' => time()]; if(isset($room_micro_data_u[$j])) { $update_data['is_online'] = $room_micro_data_u[$j]['is_online']; } $reslut = db::name('room_micro')->where('rid', $rid)->where('micro_id', ($i+1))->update($update_data); // if(!$reslut){ // return ['code' => 201, 'msg' => '失败', 'data' => null]; // } } } } } return ['code' => 200, 'msg' => '成功', 'data' => null]; } //增加心动连线时长 public function add_heartbeat_line_duration($uid, $rid, $duration){ $config = get_uncache_system_config(); $user_info = db::name('user')->field('uid')->find($uid); if(!$user_info){ return ['code' => 201, 'msg' => '参数错误', 'data' => null]; } $room_info = db::name('room')->find($rid); if(!$room_info){ return ['code' => 201, 'msg' => '该房间不存在', 'data' => null]; } $duration_time = $duration * 60; if($duration < 1){ return ['code' => 201, 'msg' => '添加时间最低不能小于1分钟', 'data' => null]; } if($duration > 60){ return ['code' => 201, 'msg' => '单次添加时间不能大于60分钟', 'data' => null]; } if(ceil($duration) != $duration){ return ['code' => 201, 'msg' => '添加时间必须为整数', 'data' => null]; } // $room_admin_uid_arr = explode(',', $room_info['room_admin_uid']); $room_admin_uid_arr = db::name('room_admin')->where('rid', $rid)->where('is_delete', 1)->column('uid'); if ($uid != $room_info['room_owner_uid'] && $uid != $room_info['room_host_uid']) { return ['code' => 201, 'msg' => '无权限操作', 'data' => null]; } //是否已有未结束阶段 $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['stage', '=', 2]; $map[] = ['is_delete', '=', 1]; $room_dating_log = db::name('room_dating_log')->where($map)->find(); if(!$room_dating_log){ return ['code' => 201, 'msg' => '当前未有心动连线阶段', 'data' => null]; } if($room_dating_log['end_time'] < time()){ return ['code' => 201, 'msg' => '当前未有心动连线阶段', 'data' => null]; } $surplus_time = $room_dating_log['end_time'] - time(); $total_time = $duration_time + $surplus_time; if($total_time > 10800){ return ['code' => 201, 'msg' => '添加总时长不能大于3小时', 'data' => null]; } Db::startTrans(); try { $update = []; $update['duration'] = $room_dating_log['duration'] + $duration_time; $update['end_time'] = $room_dating_log['end_time'] + $duration_time; $update['update_time'] = time(); $reslut = db::name('room_dating_log')->where('id', $room_dating_log['id'])->update($update); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } //添加记录 $insert = []; $insert['user_id'] = $uid; $insert['pid'] = $room_dating_log['id']; $insert['rid'] = $rid; $insert['duration'] = $duration; $insert['add_time'] = time(); $reslut = db::name('room_dating_duration_log')->insert($insert); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } Db::commit(); model('api/room')->push_room_micro_data($rid); return ['code' => 200, 'msg' => '操作成功', 'data' => null]; } catch (\Exception $e) { // 回滚事务 dump($e); Db::rollback(); return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } } //结束心动连线阶段 public function end_heartbeat_line($uid, $rid){ $config = get_uncache_system_config(); $user_info = db::name('user')->field('uid')->find($uid); if(!$user_info){ return ['code' => 201, 'msg' => '参数错误', 'data' => null]; } $room_info = db::name('room')->find($rid); if(!$room_info){ return ['code' => 201, 'msg' => '该房间不存在', 'data' => null]; } // $room_admin_uid_arr = explode(',', $room_info['room_admin_uid']); $room_admin_uid_arr = db::name('room_admin')->where('rid', $rid)->where('is_delete', 1)->column('uid'); if ($uid != $room_info['room_owner_uid'] && $uid != $room_info['room_host_uid']) { return ['code' => 201, 'msg' => '无权限操作', 'data' => null]; } if(empty($room_info['room_host_uid'])){ return ['code' => 201, 'msg' => '当前没有主持,无法结束', 'data' => null]; } //是否已有未结束阶段 $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['stage', '=', 2]; $map[] = ['is_delete', '=', 1]; $room_dating_log = db::name('room_dating_log')->where($map)->find(); if(!$room_dating_log){ return ['code' => 201, 'msg' => '当前未有心动连线阶段', 'data' => null]; } Db::startTrans(); try { $map = []; $map[] = ['pid', '=', $room_dating_log['id']]; $map[] = ['rank_value', '>', 99]; $user_room_dating_line = db::name('user_room_dating_line')->where($map)->order('rank_value desc')->find(); if(!empty($user_room_dating_line)){ $update = []; $update['stage'] = 3; $update['update_time'] = time(); $reslut = db::name('room_dating_log')->where('id', $room_dating_log['id'])->update($update); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } }else{//为空则直接跳回第一阶段 //结束第三阶段 $update = []; $update['is_delete'] = 2; $update['update_time'] = time(); $reslut = db::name('room_dating_log')->where('id', $room_dating_log['id'])->update($update); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } //清空麦位 $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['micro_id', 'in', [1,2,3,4,5,6]]; $update = []; $update['uid'] = 0; $update['frame_gid'] = 0; $update['centre_gid'] = 0; $update['above_gid'] = 0; $update['below_gid'] = 0; $update['left_gid'] = 0; $update['right_gid'] = 0; $update['update_time'] = time(); $reslut = db::name('room_micro')->where($map)->update($update); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } } Db::commit(); model('api/room')->push_room_micro_data($rid); //推送主持麦绑定关系 // $where = []; // $where[] = ['pid', '=', $room_dating_log['id']]; // $user_room_dating_line = db::name('user_room_dating_line')->where($where)->order('rank_value desc')->find(); $push_room_dating_data = []; if(!empty($room_info['room_host_uid']) && !empty($user_room_dating_line)){ $users_info = db::name('user')->where('uid', $user_room_dating_line['uid'])->field('uid,nick_name,base64_nick_name,head_pic,sex')->find(); $receive_info = db::name('user')->where('uid', $user_room_dating_line['receive_uid'])->field('uid,nick_name,base64_nick_name,head_pic,sex')->find(); $push_room_dating_data['user_info']['uid'] = $user_room_dating_line['uid']; $push_room_dating_data['user_info']['nick_name'] = mb_convert_encoding(base64_decode($users_info['base64_nick_name']), 'UTF-8', 'UTF-8'); $push_room_dating_data['user_info']['head_pic'] = localpath_to_netpath($users_info['head_pic']); $push_room_dating_data['user_info']['sex'] = $users_info['sex']; $push_room_dating_data['receive_info']['uid'] = $user_room_dating_line['receive_uid']; $push_room_dating_data['receive_info']['nick_name'] = mb_convert_encoding(base64_decode($receive_info['base64_nick_name']), 'UTF-8', 'UTF-8'); $push_room_dating_data['receive_info']['head_pic'] = localpath_to_netpath($receive_info['head_pic']); $push_room_dating_data['receive_info']['sex'] = $receive_info['sex']; $push_data = []; $push_data['code'] = 341; $push_data['msg'] = "推送主持麦绑定关系"; $push_data['data'] = $push_room_dating_data; model('api/WebSocketPush')->send_to_one($room_info['room_host_uid'], $push_data); // dump($res);exit; } return ['code' => 200, 'msg' => '操作成功', 'data' => $push_room_dating_data]; } catch (\Exception $e) { // 回滚事务 dump($e); Db::rollback(); return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } } //定时任务结束第二阶段 public function close_room_dating_stage(){ //查询即将结束的第二阶段 $now_time = time(); $map = []; $map[] = ['stage', '=', 2]; $map[] = ['end_time', '<', $now_time]; $map[] = ['is_delete', '=', 1]; $list = db::name('room_dating_log')->where($map)->select(); foreach ($list as $k => $v){ Db::startTrans(); try { $room_info = db::name('room')->find($v['rid']); $map = []; $map[] = ['pid', '=', $v['id']]; $map[] = ['rank_value', '>', 99]; $user_room_dating_line = db::name('user_room_dating_line')->where($map)->order('rank_value desc')->find(); if(!empty($user_room_dating_line)){ $update = []; $update['stage'] = 3; $update['update_time'] = time(); $reslut = db::name('room_dating_log')->where('id', $v['id'])->update($update); if(!$reslut){ Db::rollback(); } }else{//为空则直接跳回第一阶段 //结束第三阶段 $update = []; $update['is_delete'] = 2; $update['update_time'] = time(); $reslut = db::name('room_dating_log')->where('id', $v['id'])->update($update); if(!$reslut){ Db::rollback(); } //清空麦位 $map = []; $map[] = ['rid', '=', $v['rid']]; $map[] = ['micro_id', 'in', [1,2,3,4,5,6]]; $update = []; $update['uid'] = 0; $update['frame_gid'] = 0; $update['centre_gid'] = 0; $update['above_gid'] = 0; $update['below_gid'] = 0; $update['left_gid'] = 0; $update['right_gid'] = 0; $update['update_time'] = time(); $reslut = db::name('room_micro')->where($map)->update($update); if(!$reslut){ Db::rollback(); } } Db::commit(); model('api/room')->push_room_micro_data($v['rid']); if(!empty($room_info['room_host_uid']) && !empty($user_room_dating_line)){ $users_info = db::name('user')->where('uid', $user_room_dating_line['uid'])->field('uid,nick_name,base64_nick_name,head_pic,sex')->find(); $receive_info = db::name('user')->where('uid', $user_room_dating_line['receive_uid'])->field('uid,nick_name,base64_nick_name,head_pic,sex')->find(); $push_room_dating_data = []; $push_room_dating_data['user_info']['uid'] = $user_room_dating_line['uid']; $push_room_dating_data['user_info']['nick_name'] = mb_convert_encoding(base64_decode($users_info['base64_nick_name']), 'UTF-8', 'UTF-8'); $push_room_dating_data['user_info']['head_pic'] = localpath_to_netpath($users_info['head_pic']); $push_room_dating_data['user_info']['sex'] = $users_info['sex']; $push_room_dating_data['receive_info']['uid'] = $user_room_dating_line['receive_uid']; $push_room_dating_data['receive_info']['nick_name'] = mb_convert_encoding(base64_decode($receive_info['base64_nick_name']), 'UTF-8', 'UTF-8'); $push_room_dating_data['receive_info']['head_pic'] = localpath_to_netpath($receive_info['head_pic']); $push_room_dating_data['receive_info']['sex'] = $receive_info['sex']; $push_data = []; $push_data['code'] = 341; $push_data['msg'] = "推送主持麦绑定关系"; $push_data['data'] = $push_room_dating_data; model('api/WebSocketPush')->send_to_one($room_info['room_host_uid'], $push_data); } } catch (\Exception $e) { // 回滚事务 dump($e); Db::rollback(); } } } /********************************牵手良缘**************************************/ //关系列表 public function get_relation_list($type){ $map = []; $map[] = ['is_delete', '=', 1]; $map[] = ['type', '=', $type]; $list = db::name('relation')->where($map)->field('id, name, day, color')->select(); return ['code' => 200, 'msg' => '获取成功', 'data' => $list]; } //绑定用户关系 public function binding_user_relation($uid, $rid, $user_id, $receive_uid, $relation_id){ $config = get_uncache_system_config(); $user_info = db::name('user')->field('uid')->find($uid); if(!$user_info){ return ['code' => 201, 'msg' => '参数错误', 'data' => null]; } $room_info = db::name('room')->find($rid); if(!$room_info){ return ['code' => 201, 'msg' => '该房间不存在', 'data' => null]; } // $room_admin_uid_arr = explode(',', $room_info['room_admin_uid']); $room_admin_uid_arr = db::name('room_admin')->where('rid', $rid)->where('is_delete', 1)->column('uid'); if ($uid != $room_info['room_owner_uid'] && $uid != $room_info['room_host_uid']) { return ['code' => 201, 'msg' => '无权限操作', 'data' => null]; } $relation_info = db::name('relation')->where('is_delete', 1)->find($relation_id); if(!$relation_info){ return ['code' => 201, 'msg' => '该关系不存在', 'data' => null]; } //当前是否是第三阶段 $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['stage', '=', 3]; $map[] = ['is_delete', '=', 1]; $room_dating_log = db::name('room_dating_log')->where($map)->find(); if(!$room_dating_log){ return ['code' => 201, 'msg' => '当前不是牵手良缘阶段', 'data' => null]; } //计算绑定天数 $map = []; $map[] = ['pid', '=', $room_dating_log['id']]; $map[] = ['rank_value', '>', 0]; $user_room_dating_line = db::name('user_room_dating_line')->where($map)->order('rank_value desc')->find(); $day_num = 0; //最低进入私密小屋 $min_enter_privacy_amount = $config['enter_privacy_room_min_amount']; $is_enter_privacy_room = 2; if($user_room_dating_line) { $relation_min_amount = $config['bind_relation_day_amount']; $rank_value = $user_room_dating_line['rank_value']; if($rank_value > $relation_min_amount) { $day_nums = bcdiv($rank_value, 100, 1); $day_num = intval($day_nums); } if($min_enter_privacy_amount <= $rank_value) { $is_enter_privacy_room = 1; } } if($relation_id == 36) { $day_num = 0; } $now_time = time(); Db::startTrans(); try { if($day_num > 0) { //是否已有该关系 $map = []; $map[] = ['uid|receive_uid', '=', $user_id]; $map[] = ['uid|receive_uid', '=', $receive_uid]; $map[] = ['relation_id', '=', $relation_id]; $map[] = ['is_delete', '=', 1]; $user_relation = db::name('user_relation_binding')->where($map)->find(); if($user_relation){ $update = []; // $update['day'] = $relation_info['day']; $end_time = $user_relation['end_time'] + ($day_num * 60 * 60 * 24); if($end_time < 2129791740){ $update['end_time'] = $user_relation['end_time'] + ($day_num * 60 * 60 * 24); } $update['update_time'] = $now_time; $reslut = db::name('user_relation_binding')->where('id', $user_relation['id'])->inc('day', $day_num)->update($update); }else{ $insert = []; $insert['uid'] = $user_id; $insert['receive_uid'] = $receive_uid; $insert['relation_id'] = $relation_id; $insert['day'] = $day_num; $insert['add_time'] = $now_time; $insert['end_time'] = $now_time + ($day_num * 60 * 60 *24); $reslut = db::name('user_relation_binding')->insert($insert); } if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '操作失败7', 'data' => null]; } //记录 $insert = []; $insert['uid'] = $user_id; $insert['receive_uid'] = $receive_uid; $insert['relation_id'] = $relation_id; $insert['day'] = $relation_info['day']; $insert['add_time'] = $now_time; $reslut = db::name('user_relation_binding_log')->insert($insert); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '操作失败6', 'data' => null]; } $map = []; $map[] = ['uid|receive_uid', '=', $user_room_dating_line['uid']];//需更改help_uid $map[] = ['uid|receive_uid', '=', $user_room_dating_line['receive_uid']]; $map[] = ['r_date', '=', date('Y-m-d')]; $dating_mt_wheel = db::name('dating_mt_wheel')->where($map)->find(); if(!empty($dating_mt_wheel)){ db::name('dating_mt_wheel')->where(['id'=>$dating_mt_wheel['id']])->inc('rank_value', $user_room_dating_line['rank_value'])->update(['update_time'=>time()]); }else{ //建立关系以后数据存储 db::name('dating_mt_wheel')->insert([ 'uid' => $user_room_dating_line['uid'], 'receive_uid' => $user_room_dating_line['receive_uid'], 'rank_value' => $user_room_dating_line['rank_value'], 'r_date' => date('Y-m-d'), 'add_time' => time(), 'update_time' => time() ]); } } //结束第三阶段 $update = []; $update['is_delete'] = 2; $update['update_time'] = time(); $reslut = db::name('room_dating_log')->where('id', $room_dating_log['id'])->update($update); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '操作失败5', 'data' => null]; } //清空麦位 $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['micro_id', 'in', [1,2,3,4,5,6]]; $update = []; $update['uid'] = 0; $update['frame_gid'] = 0; $update['centre_gid'] = 0; $update['above_gid'] = 0; $update['below_gid'] = 0; $update['left_gid'] = 0; $update['right_gid'] = 0; $update['update_time'] = time(); $reslut = db::name('room_micro')->where($map)->update($update); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '操作失败4', 'data' => null]; } if($is_enter_privacy_room == 1) { $prid = 0; //是否有空闲的私密小屋 $map = []; $map[] = ['is_use', '=', 2]; $room_privacy = db::name('room_privacy')->where($map)->find(); if(!empty($room_privacy)){ $update = []; $update['rid'] = $rid; $update['uid_data'] = $user_id.','.$receive_uid; $update['is_use'] = 1; $update['update_time'] = $now_time; $update['end_time'] = $now_time + $config['privacy_room_time']; $reslut = db::name('room_privacy')->where('prid', $room_privacy['prid'])->update($update); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '操作失败3', 'data' => null]; } $prid = $room_privacy['prid']; }else{ $reslut = $this->create_privacy_room(); if($reslut['code'] != 200){ Db::rollback(); return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null]; } $prid = $reslut['data']; $update = []; $update['rid'] = $rid; $update['uid_data'] = $user_id.','.$receive_uid; $update['is_use'] = 1; $update['update_time'] = $now_time; $update['end_time'] = $now_time + $config['privacy_room_time']; $reslut = db::name('room_privacy')->where('prid', $prid)->update($update); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '操作失败1', 'data' => null]; } } if(empty($prid)){ Db::rollback(); return ['code' => 201, 'msg' => '操作失败2', 'data' => null]; } } Db::commit(); model('api/room')->push_room_micro_data($rid); if($is_enter_privacy_room == 1) { if(!empty($user_id)){ $push_send_user_data = []; $push_send_user_data['rid'] = $rid; $push_send_user_data['prid'] = $prid; $push_send_user_data['agora_token'] = model('api/Agora')->agora_token_info($user_id, $prid); $push_send_user_data['agora_app_id'] = $config['agora_app_id']; $push_data = []; $push_data['code'] = 351; $push_data['msg'] = "推送进入私密小屋"; $push_data['data'] = $push_send_user_data; model('api/WebSocketPush')->send_to_one($user_id, $push_data); } if(!empty($receive_uid)){ $push_send_receive_data = []; $push_send_receive_data['rid'] = $rid; $push_send_receive_data['prid'] = $prid; $push_send_receive_data['agora_token'] = model('api/Agora')->agora_token_info($receive_uid, $prid); $push_send_receive_data['agora_app_id'] = $config['agora_app_id']; $push_data = []; $push_data['code'] = 351; $push_data['msg'] = "推送进入私密小屋"; $push_data['data'] = $push_send_receive_data; model('api/WebSocketPush')->send_to_one($receive_uid, $push_data); } } return ['code' => 200, 'msg' => '操作成功', 'data' => null]; } catch (\Exception $e) { // 回滚事务 dump($e); Db::rollback(); return ['code' => 201, 'msg' => '操作失败8', 'data' => null]; } } //结束牵手良缘阶段【重新推送】 public function end_push_binding_relation($uid, $rid){ $config = get_uncache_system_config(); $user_info = db::name('user')->field('uid')->find($uid); if(!$user_info){ return ['code' => 201, 'msg' => '参数错误', 'data' => null]; } $room_info = db::name('room')->find($rid); if(!$room_info){ return ['code' => 201, 'msg' => '该房间不存在', 'data' => null]; } // $room_admin_uid_arr = explode(',', $room_info['room_admin_uid']); $room_admin_uid_arr = db::name('room_admin')->where('rid', $rid)->where('is_delete', 1)->column('uid'); if ($uid != $room_info['room_owner_uid'] && $uid != $room_info['room_host_uid']) { return ['code' => 201, 'msg' => '无权限操作', 'data' => null]; } if(empty($room_info['room_host_uid'])){ return ['code' => 201, 'msg' => '当前没有主持,无法结束', 'data' => null]; } //是否已有未结束阶段 $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['stage', '=', 3]; $map[] = ['is_delete', '=', 1]; $room_dating_log = db::name('room_dating_log')->where($map)->find(); if(!$room_dating_log){ return ['code' => 201, 'msg' => '当前未有牵手良缘阶段', 'data' => null]; } Db::startTrans(); try { $map = []; $map[] = ['pid', '=', $room_dating_log['id']]; $map[] = ['rank_value', '>', 0]; $user_room_dating_line = db::name('user_room_dating_line')->where($map)->order('rank_value desc')->find(); if(!empty($user_room_dating_line)){ }else{ //结束第三阶段 $update = []; $update['is_delete'] = 2; $update['update_time'] = time(); $reslut = db::name('room_dating_log')->where('id', $room_dating_log['id'])->update($update); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } //清空麦位 $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['micro_id', 'in', [1,2,3,4,5,6]]; $update = []; $update['uid'] = 0; $update['frame_gid'] = 0; $update['centre_gid'] = 0; $update['above_gid'] = 0; $update['below_gid'] = 0; $update['left_gid'] = 0; $update['right_gid'] = 0; $update['update_time'] = time(); $reslut = db::name('room_micro')->where($map)->update($update); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } } Db::commit(); model('api/room')->push_room_micro_data($rid); $push_room_dating_data = []; if(!empty($user_room_dating_line)){ $users_info = db::name('user')->where('uid', $user_room_dating_line['uid'])->field('uid,nick_name,base64_nick_name,head_pic,sex')->find(); $receive_info = db::name('user')->where('uid', $user_room_dating_line['receive_uid'])->field('uid,nick_name,base64_nick_name,head_pic,sex')->find(); $push_room_dating_data['user_info']['uid'] = $user_room_dating_line['uid']; $push_room_dating_data['user_info']['nick_name'] = mb_convert_encoding(base64_decode($users_info['base64_nick_name']), 'UTF-8', 'UTF-8'); $push_room_dating_data['user_info']['head_pic'] = localpath_to_netpath($users_info['head_pic']); $push_room_dating_data['user_info']['sex'] = $users_info['sex']; $push_room_dating_data['receive_info']['uid'] = $user_room_dating_line['receive_uid']; $push_room_dating_data['receive_info']['nick_name'] = mb_convert_encoding(base64_decode($receive_info['base64_nick_name']), 'UTF-8', 'UTF-8'); $push_room_dating_data['receive_info']['head_pic'] = localpath_to_netpath($receive_info['head_pic']); $push_room_dating_data['receive_info']['sex'] = $receive_info['sex']; $push_data = []; $push_data['code'] = 341; $push_data['msg'] = "推送主持麦绑定关系"; $push_data['data'] = $push_room_dating_data; model('api/WebSocketPush')->send_to_one($room_info['room_host_uid'], $push_data); } return ['code' => 200, 'msg' => '操作成功', 'data' => $push_room_dating_data]; } catch (\Exception $e) { // 回滚事务 dump($e); Db::rollback(); return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } } /************************私密小屋*****************************/ //真心话大冒险 public function get_truth_or_dare_list($uid, $prid){ $room_privacy = db::name('room_privacy')->find($prid); if(!$room_privacy){ return ['code' => 201, 'msg' => '该私密小屋不存在', 'data' => null]; } $now_time = time(); if($room_privacy['is_use'] == 2 || $room_privacy['end_time'] < $now_time){ return ['code' => 201, 'msg' => '该私密小屋已到期', 'data' => null]; } $user_id_data = explode(',', $room_privacy['uid_data']); $user_id = $user_id_data[0]; $receive_uid = $user_id_data[1]; if(!in_array($uid, $user_id_data)){ return ['code' => 201, 'msg' => '无权限操作', 'data' => null]; } if($uid == $user_id){ $push_uid = $receive_uid; }else if($uid == $receive_uid){ $push_uid = $user_id; } $map = []; $map[] = ['type', '=', 1]; $map[] = ['is_delete', '=', 1]; $info = db::name('topic_card')->where($map)->field('id, type, content')->orderRaw('rand()')->find(); if(!empty($info)){ $push_topic_card_info = []; $push_topic_card_info['id'] = $info['id']; $push_topic_card_info['type'] = $info['type']; $push_topic_card_info['content'] = $info['content']; if(!empty($push_uid)){ $push_data = []; $push_data['code'] = 354; $push_data['msg'] = "真心话大冒险推送"; $push_data['data'] = $push_topic_card_info; model('api/WebSocketPush')->send_to_one($push_uid, $push_data); } } return ['code' => 200, 'msg' => '获取成功', 'data' => $info]; } //话题卡 public function get_topic_card_list($uid, $prid){ $room_privacy = db::name('room_privacy')->find($prid); if(!$room_privacy){ return ['code' => 201, 'msg' => '该私密小屋不存在', 'data' => null]; } $now_time = time(); if($room_privacy['is_use'] == 2 || $room_privacy['end_time'] < $now_time){ return ['code' => 201, 'msg' => '该私密小屋已到期', 'data' => null]; } $user_id_data = explode(',', $room_privacy['uid_data']); $user_id = $user_id_data[0]; $receive_uid = $user_id_data[1]; if(!in_array($uid, $user_id_data)){ return ['code' => 201, 'msg' => '无权限操作', 'data' => null]; } if($uid == $user_id){ $push_uid = $receive_uid; }else if($uid == $receive_uid){ $push_uid = $user_id; } $map = []; $map[] = ['type', '=', 2]; $map[] = ['is_delete', '=', 1]; $info = db::name('topic_card')->where($map)->field('id, type, content')->orderRaw('rand()')->find(); if(!empty($info)){ $push_topic_card_info = []; $push_topic_card_info['id'] = $info['id']; $push_topic_card_info['type'] = $info['type']; $push_topic_card_info['content'] = $info['content']; if(!empty($push_uid)){ $push_data = []; $push_data['code'] = 354; $push_data['msg'] = "话题卡推送"; $push_data['data'] = $push_topic_card_info; model('api/WebSocketPush')->send_to_one($push_uid, $push_data); } } return ['code' => 200, 'msg' => '获取成功', 'data' => $info]; } //用户关系列表 public function get_user_relation_list($uid, $user_id, $page, $page_limit){ $page = intval($page); $page_limit = $page_limit < 20 ? $page_limit : 20; if(empty($user_id)){ $user_id = $uid; } $user_info = db::name('user')->find($user_id); if(!$user_info){ return ['code' => 201, 'msg' => '参数错误', 'data' => null]; } $map = []; $map[] = ['a.uid|a.receive_uid', '=', $user_id]; $map[] = ['a.end_time','>', time()]; $map[] = ['a.is_delete', '=', 1]; $list = db::name('user_relation_binding')->alias('a')->join('yy_relation b', 'a.relation_id = b.id')->field('a.id, a.uid, a.receive_uid, a.relation_id, a.end_time, b.name, b.color')->where($map)->order('id desc')->page($page, $page_limit)->select(); foreach ($list as $k => &$v){ if($v['uid'] == $user_id){ $receive_uid = $v['receive_uid']; }else if($v['receive_uid'] == $user_id){ $receive_uid = $v['uid']; } $receive_info = db::name('user')->field('uid,base64_nick_name,head_pic,sex')->find($receive_uid); $v['uid'] = $receive_uid; $v['nick_name'] = mb_convert_encoding(base64_decode($receive_info['base64_nick_name']), 'UTF-8', 'UTF-8'); $v['head_pic'] = localpath_to_netpath($receive_info['head_pic']); $v['sex'] = $receive_info['sex']; $v['surplus_time'] = ceil(($v['end_time'] - time()) / (60*60*24)); unset($v['receive_uid']); } $data = []; $data['list'] = $list; $data['count'] = count($list); return ['code' => 200, 'msg' => '获取成功', 'data'=> $data]; } //生成私密小屋 public function create_privacy_room(){ $config = get_uncache_system_config(); Db::startTrans(); try { $prid = $this->get_available_prid(); $insert = []; $insert['prid'] = $prid; $insert['add_time'] = time(); $reslut = db::name('room_privacy')->insert($insert); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '操作失败9', 'data' => null]; } //创建腾讯IM群组 $reslut = model('Tencent')->create_group($prid); if($reslut['code'] != 200){ Db::rollback(); return['code' => 201, 'msg' => $reslut['msg'], 'data' => null]; } Db::commit(); return ['code' => 200, 'msg' => '操作成功', 'data' => $prid]; } catch (\Exception $e) { // 回滚事务 dump($e); Db::rollback(); return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } } //过滤私密房间ID private function get_available_prid($prid = 0) { if (empty($prid)) { $prid = db::name('room_privacy')->order('prid desc')->value('prid'); if(empty($prid)){ $prid = 1000001; } } $prid = $prid + 1; $user_info = db::name('room_privacy')->field('prid')->where('prid', $prid)->find(); if (!empty($user_info)) { $this->get_available_prid($user_info['prid']); } else { return $prid; } } //私密小屋详情 public function get_privacy_room_info($uid, $prid){ $now_time = time(); $privacy_room = db::name('room_privacy')->find($prid); if(!$privacy_room){ return ['code' => 201, 'msg' => '该私密小屋不存在', 'data' => null]; } if($privacy_room['is_use'] == 2 || $privacy_room['end_time'] < $now_time){ return ['code' => 201, 'msg' => '该私密小屋已到期', 'data' => null]; } $surplus_time = $privacy_room['end_time'] - time(); $user_id_data = explode(',', $privacy_room['uid_data']); $user_id = $user_id_data[0]; $receive_uid = $user_id_data[1]; $users_info = db::name('user')->field('uid,nick_name,base64_nick_name,head_pic')->find($user_id); $receive_info = db::name('user')->field('uid, nick_name, base64_nick_name, head_pic')->find($receive_uid); $map = []; $map[] = ['a.is_delete', '=', 1]; $map[] = ['b.is_delete', '=', 1]; $map[] = ['b.is_show', '=', 1]; $list = db::name('room_privacy_gift')->alias('a')->join('yy_gift b', 'a.gid = b.gid')->field('a.gid,a.duration,b.gift_name,b.base_image,b.gift_price')->where($map)->order('b.gift_price asc')->select(); foreach ($list as $k => &$v){ $v['base_image'] = localpath_to_netpath($v['base_image']); } $map = []; $map[] = ['type', '=', 1]; $map[] = ['is_delete', '=', 1]; $topic_card_info = db::name('topic_card')->where($map)->field('id, type, content')->order('id asc')->find(); $data = []; $data['surplus_time'] = $surplus_time; $data['user_info']['uid'] = $user_id; $data['user_info']['nick_name'] = mb_convert_encoding(base64_decode($users_info['base64_nick_name']), 'UTF-8', 'UTF-8'); $data['user_info']['head_pic'] = localpath_to_netpath($users_info['head_pic']); $data['receive_info']['uid'] = $receive_uid; $data['receive_info']['nick_name'] = mb_convert_encoding(base64_decode($receive_info['base64_nick_name']), 'UTF-8', 'UTF-8'); $data['receive_info']['head_pic'] = localpath_to_netpath($receive_info['head_pic']); $data['gift_list'] = $list; $data['topic_card_info'] = $topic_card_info; return ['code' => 200, 'msg' => '获取成功', 'data' => $data]; } //私密小屋结束 public function end_room_privacy($uid, $prid){ $user_info = db::name('user')->field('uid')->find($uid); if(!$user_info){ return ['code' => 201, 'msg' => '参数错误', 'data' => null]; } $room_privacy = db::name('room_privacy')->find($prid); if(!$room_privacy){ return ['code' => 201, 'msg' => '该私密小屋不存在', 'data' => null]; } $now_time = time(); if($room_privacy['is_use'] == 2 || $room_privacy['end_time'] < $now_time){ return ['code' => 201, 'msg' => '该私密小屋已到期', 'data' => null]; } $user_id_data = explode(',', $room_privacy['uid_data']); $user_id = $user_id_data[0]; $receive_uid = $user_id_data[1]; if(!in_array($uid, $user_id_data)){ return ['code' => 201, 'msg' => '无权限操作', 'data' => null]; } Db::startTrans(); try { $update = []; $update['rid'] = 0; $update['uid_data'] = ''; $update['is_use'] = 2; $update['update_time'] = time(); $update['end_time'] = 0; $reslut = db::name('room_privacy')->where('prid', $prid)->update($update); if(!$reslut){ Db::rollback(); return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } Db::commit(); $push_room_privacy_data = []; $push_room_privacy_data['prid'] = $prid; if(!empty($user_id)){ $push_data = []; $push_data['code'] = 353; $push_data['msg'] = "退出私密小屋"; $push_data['data'] = $push_room_privacy_data; model('api/WebSocketPush')->send_to_one($user_id, $push_data); } if(!empty($receive_uid)){ $push_data = []; $push_data['code'] = 353; $push_data['msg'] = "退出私密小屋"; $push_data['data'] = $push_room_privacy_data; model('api/WebSocketPush')->send_to_one($receive_uid, $push_data); } return ['code' => 200, 'msg' => '操作成功', 'data' => $push_room_privacy_data]; } catch (\Exception $e) { // 回滚事务 dump($e); Db::rollback(); return ['code' => 201, 'msg' => '操作失败', 'data' => null]; } } //定时任务关闭到期私密小屋 public function close_room_privacy_status(){ //查询即将结束的私密小屋 $now_time = time(); $map = []; $map[] = ['end_time', '<', $now_time]; $map[] = ['is_use', '=', 1]; $list = db::name('room_privacy')->where($map)->select(); foreach ($list as $k => $v){ Db::startTrans(); try { $update = []; $update['rid'] = 0; $update['uid_data'] = ''; $update['is_use'] = 2; $update['update_time'] = time(); $update['end_time'] = 0; $reslut = db::name('room_privacy')->where('prid', $v['prid'])->update($update); if(!$reslut){ Db::rollback(); } $user_id_data = explode(',', $v['uid_data']); $user_id = $user_id_data[0]; $receive_uid = $user_id_data[1]; Db::commit(); $push_room_privacy_data = []; $push_room_privacy_data['prid'] = $v['prid']; if(!empty($user_id)){ $push_data = []; $push_data['code'] = 353; $push_data['msg'] = "退出私密小屋"; $push_data['data'] = $push_room_privacy_data; model('api/WebSocketPush')->send_to_one($user_id, $push_data); } if(!empty($receive_uid)){ $push_data = []; $push_data['code'] = 353; $push_data['msg'] = "退出私密小屋"; $push_data['data'] = $push_room_privacy_data; model('api/WebSocketPush')->send_to_one($receive_uid, $push_data); } } catch (\Exception $e) { // 回滚事务 Db::rollback(); } } } //清除过期关系 public function close_user_relation(){ $map = []; $map[] = ['end_time', '<', time()]; $map[] = ['is_delete', '=', 1]; $info = db::name('user_relation_binding')->where($map)->find(); if(!empty($info)){ db::name('user_relation_binding')->where($map)->update(['is_delete' => 2, 'update_time' => time()]); } echo date('Y-m-d H:i:s').'清除过期关系 执行成功'; } public function del_user_relation($uid,$user_relation_id=0){ $user_relation_binding = db::name('user_relation_binding')->where(['id'=>$user_relation_id,"uid|receive_uid"=>$uid])->find(); if(empty($user_relation_binding)){ return ['code' => 201, 'msg' => '关系不存在', 'data' => null]; } $del_user_relation_money = get_uncache_system_config('del_user_relation_money'); if($del_user_relation_money <= 0){ return ['code' => 201, 'msg' => '价格有误!', 'data' => null]; } $user_zijin = db::name('user')->where(['uid'=>$uid])->field('money')->find(); if(empty($user_zijin)){ return ['code' => 201, 'msg' => '参数有误!', 'data' => null]; } if($user_zijin['money'] < $del_user_relation_money){ return ['code' => 201, 'msg' => '账户余额不足!', 'data' => null]; } try { Db::startTrans(); $reslut = model('admin/User')->change_user_money_by_uid($uid, -$del_user_relation_money, 1, 53, "删除用户关系", $uid, $user_relation_binding['id']); if ($reslut['code'] == 201) { Db::rollback(); return ['code' => 201, 'msg' => $reslut['msg'], 'data' => null]; } //删除用户关系 db::name('user_relation_binding')->where(['id'=>$user_relation_binding['id']])->update(['is_delete' => 2, 'update_time' => time(),'remarks'=>"{$uid}删除用户关系"]); Db::commit(); return ['code' => 200, 'msg' => '删除成功!', 'data' => null]; }catch (\Exception $e) { // 回滚事务 Db::rollback(); return ['code' => 200, 'msg' => '删除失败!', 'data' => null]; } } //房间挂件礼物信息 public function get_room_pendant_gift_info($uid, $rid){ $room_info = db::name('room')->field('rid')->find($rid); if(!$room_info){ return ['code' => 201, 'msg' => '该房间不存在', 'data' => null]; } $data = []; $data['user_info']['uid'] = 0; $data['user_info']['nick_name'] = ''; $data['user_info']['head_pic'] = ''; $data['receive_info']['uid'] = 0; $data['receive_info']['nick_name'] = ''; $data['receive_info']['head_pic'] = ''; $map = []; $map[] = ['rid', '=', $rid]; $map[] = ['end_time', '>', time()]; $map[] = ['is_show', '=', 1]; $info = db::name('room_pendant_gift_log')->where($map)->order('id desc')->find(); if($info){ $user_info = db::name('user')->field('uid, base64_nick_name, head_pic')->find($info['uid']); $receive_info = db::name('user')->field('uid, base64_nick_name, head_pic')->find($info['receive_uid']); $data['user_info']['uid'] = $info['uid']; $data['user_info']['nick_name'] = mb_convert_encoding(base64_decode($user_info['base64_nick_name']), 'UTF-8', 'UTF-8'); $data['user_info']['head_pic'] = localpath_to_netpath($user_info['head_pic']); $data['receive_info']['uid'] = $info['receive_uid']; $data['receive_info']['nick_name'] = mb_convert_encoding(base64_decode($receive_info['base64_nick_name']), 'UTF-8', 'UTF-8'); $data['receive_info']['head_pic'] = localpath_to_netpath($receive_info['head_pic']); $gift_info = db::name('gift')->where('gid', $info['gid'])->find(); $data['pendant_image'] = localpath_to_netpath($gift_info['pendant_image']); } return ['code' => 200, 'msg' => '获取成功', 'data' => $data]; } public function get_motian_rank($type=1){ if($type == 1){ $r_date = date('Y-m-d', strtotime('-1 day')); $limit = 5; }else{ $r_date = date('Y-m-d'); $limit = 20; } $list = db::name('dating_mt_wheel') ->alias('dw') ->where(['r_date'=>$r_date]) ->join('yy_user u1','u1.uid = dw.uid') ->join('yy_user u2','u2.uid = dw.receive_uid') ->field('dw.uid,u1.base64_nick_name as nick_name,u1.head_pic,dw.receive_uid,u2.base64_nick_name as receive_nick_name,u2.head_pic as receive_head_pic,rank_value') ->order(['rank_value'=>'desc']) ->limit(0,$limit) ->select(); if(!empty($list)){ foreach ($list as &$v){ $v['nick_name'] = mb_convert_encoding(base64_decode($v['nick_name']), 'UTF-8', 'UTF-8'); $v['head_pic'] = localpath_to_netpath($v['head_pic']); $v['receive_nick_name'] = mb_convert_encoding(base64_decode($v['receive_nick_name']), 'UTF-8', 'UTF-8'); $v['receive_head_pic'] = localpath_to_netpath($v['receive_head_pic']); if($v['rank_value'] >= 1000){ $v['rank_value'] = del_coin_num($v['rank_value']/1000,1).'k'; }elseif ($v['rank_value'] >= 10000) { $v['rank_value'] = del_coin_num($v['rank_value']/10000,1).'w'; } } } return ['code' => 200, 'msg' => '获取成功', 'data' => $list]; } }