Files
mier-php/application/api/model/DatingRoom.php
2025-08-11 10:22:05 +08:00

1679 lines
76 KiB
PHP

<?php
namespace app\api\model;
use think\Db;
use think\Model;
use think\facade\Env;
class DatingRoom extends Model
{
/*********************************心动连线***************************************/
//开启心动连线
public function open_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']);
// 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];
}
}