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

1440 lines
57 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\admin\model;
use think\Db;
use think\Model;
class Room extends Model
{
protected $pk = 'rid';
protected $auto = ['update_time'];
protected $insert = [
'add_time',
];
protected $update = ['update_time'];
protected function setAddTimeAttr()
{
return time();
}
protected function setUpdateTimeAttr()
{
return time();
}
public function get_room_list($data, $order, $sort, $page = 1, $limit = 20)
{
$map = [];
foreach ($data as $k => $v) {
if (!empty($v)) {
if (in_array($k, ['room_name'])) {
$map[] = [$k, 'like', "%$v%"];
} else {
$map[] = [$k, '=', $v];
}
}
}
$user_list = db::name('room')->where($map)->order($order, $sort)->page($page, $limit)->select();
foreach ($user_list as $k => &$v) {
$user = db::name('user')->where(['uid' => $v['room_owner_uid']])->find();
$v['nickname'] = $user['uid'] . '-' . $user['nick_name'];
$v['head_pic'] = localpath_to_netpath($v['room_cover']);
$v['room_type'] = db::name('room_type')->where(['tid' => $v['tid']])->value('type_name');
$v['room_cate_id'] = db::name('room_category')->where(['cate_id' => $v['cate_id']])->value('category_name');
$v['room_cover'] = localpath_to_netpath($v['room_cover']);
$v['room_name'] = mb_convert_encoding(base64_decode($v['base64_room_name']), 'UTF-8', 'UTF-8');
}
$data = [];
$data['count'] = db::name('room')->where($map)->count();
$data['list'] = $user_list;
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
}
public function edit_room_info($data)
{
$room_info = db::name('room')->where('rid', $data['rid'])->find();
if(!$room_info){
return ['code' => 201, 'msg' => '参数错误', 'data' => ''];
}
// dump($data);exit;
if($data['envelope_rate'] > 0.02){
return ['code' => 201, 'msg' => '红包流水比例不能大于0.02', 'data' => ''];
}
Db::startTrans();
try {
$validate = validate('room');
$reslut = $validate->scene('adminEdit')->check($data);
if ($reslut !== true) {
Db::rollback();
return ['code' => 201, 'msg' => $validate->getError(), 'data' => null];
}
$data['base64_room_name'] = base64_encode($data['room_name']);
$reslut = model('room')->isUpdate(true)->save($data);
if (!$reslut) {
Db::rollback();
return ['code' => 201, 'msg' => '编辑失败', 'data' => ''];
}
if($data['cate_id'] != $room_info['cate_id']){
if($room_info['cate_id'] == 26){
$map = [];
$map[] = ['rid', '=', $data['rid']];
$map[] = ['is_stop', '=', 2];
$map[] = ['is_delete', '=', 1];
$room_auction_info = db::name('room_new_auction_log')->where($map)->find();
if($room_auction_info){
return ['code' => 201, 'msg' => '当前有进行中的新人拍卖,无法切换', 'data' => null];
}
}
if($room_info['cate_id'] == 27){
//当前是否已有进行中的K歌
$map = [];
$map[] = ['rid', '=', $data['rid']];
$map[] = ['is_delete', '=', 1];
$room_auction_info = db::name('room_song_log')->where($map)->find();
if($room_auction_info){
return ['code' => 201, 'msg' => '当前K歌进行中无法切换', 'data' => null];
}
}
if($room_info['cate_id'] == 28){
$map = [];
$map[] = ['rid', '=', $data['rid']];
$map[] = ['status', '=', 2];
$map[] = ['is_delete', '=', 1];
$room_auction_info = db::name('room_auction_log')->where($map)->find();
if($room_auction_info){
return ['code' => 201, 'msg' => '当前有尚未结束的拍卖,无法切换', 'data' => null];
}
}
if($room_info['cate_id'] == 29){
$map = [];
$map[] = ['rid', '=', $data['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];
}
}
//清理该房间所有麦位魅力值
$map = [];
$map[] = ['rid', '=', $data['rid']];
$map[] = ['charm_value', '>', 0];
$list = db::name('room_user_cc')->where($map)->select();
if(!empty($list)){
foreach ($list as $k => $v){
$reslut = db::name('room_user_micro_charm_log')->where('cid', $v['cid'])->update(['change_value' => 0, 'update_time' => time()]);
if(!$reslut){
Db::rollback();
return ['code' => 201, 'msg' => '编辑失败', 'data' => ''];
}
}
$reslut = db::name('room_user_cc')->where($map)->update(['charm_value' => 0, 'update_time' => time()]);
if(!$reslut){
Db::rollback();
return ['code' => 201, 'msg' => '编辑失败', 'data' => ''];
}
}
}
//获取机器人数量
if($data['robot_num'] != $room_info['robot_num']){
//在麦上的机器人数量
$yuan_uids = db::name('user')->where(['is_sys_tester'=>1,'belong_rid'=>$data['rid']])->column('uid');
if(empty($yuan_uids)){
$yuan_uids = [-1];
}
$micro_uids = db::name('room_micro')->where([['rid','=',$data['rid']],['uid','in',$yuan_uids]])->column('uid');
$micro_uids_num = count($micro_uids);
if($data['robot_num'] < $micro_uids_num){
return ['code' => 201, 'msg' => "当前机器人有{$micro_uids_num}在麦位上", 'data' => null];
}
//清空原始人员
db::name('user')->where(['is_sys_tester'=>1,'belong_rid'=>$data['rid']])->where('uid','not in',$micro_uids)->update(['belong_rid'=>0,'update_time'=>time()]);
//重新注入新人员
$new_num = $data['robot_num'] - $micro_uids_num;
//当前空闲机器人
$kong_xian_num = db::name('user')->where(['is_sys_tester'=>1,'belong_rid'=>0])->count("*");
if($new_num > $kong_xian_num){
return ['code' => 201, 'msg' => "空闲机器人数量不足,剩余{$kong_xian_num}", 'data' => ''];
}
//新机器人
if($new_num > 0){
$new_uids_arr = db::name('user')->where(['is_sys_tester'=>1,'belong_rid'=>0])->orderRand()->limit($new_num)->column('uid');
db::name('user')->where(['is_sys_tester'=>1])->where('uid','in',$new_uids_arr)->update(['belong_rid'=>$data['rid'],'update_time'=>time()]);
}
}
Db::commit();
if($data['cate_id'] != $room_info['cate_id']){
$push_room_data = [];
$push_room_data['rid'] = $data['rid'];
$push_room_data['type'] = 1;
$push_data = [];
$push_data['code'] = 369;
$push_data['msg'] = "房间类型变更推送";
$push_data['data'] = $push_room_data;
$reslut = model('api/WebSocketPush')->send_to_group($data['rid'], $push_data);
}
return ['code' => 200, 'msg' => "成功", 'data' => null];
} catch (\Exception $e) {
dump($e);
//回滚事务
Db::rollback();
return ['code' => 201, 'msg' => "失败", 'data' => null];
}
}
public function add_room($data)
{
$user_info = db::name('user')->where(['uid' => $data['room_owner_uid']])->find();
if (empty($user_info)) {
return ['code' => 201, 'msg' => '厅主不存在', 'data' => null];
}
$map = [];
$map[] = ['room_owner_uid', '=', $data['room_owner_uid']];
$map[] = ['tid', '=', $data['tid']];
$room_info = db::name('room')->where($map)->find();
if (!empty($room_info)) {
return ['code' => 201, 'msg' => '该厅主已拥有该类型直播间', 'data' => null];
}
if ($room_info['is_delete'] == 2) {
return ['code' => 201, 'msg' => '该厅主房间正在删除状态中,请勿重复创建', 'data' => null];
}
if (!$data['room_cover']) {
return ['code' => 201, 'msg' => '房间封面不能为空', 'data' => null];
}
$validate = validate('room');
$reslut = $validate->scene('adminAdd')->check($data);
if ($reslut !== true) {
return ['code' => 201, 'msg' => $validate->getError(), 'data' => null];
}
$data['base64_room_name'] = base64_encode($data['room_name']);
$data['room_host_uid'] = $data['room_owner_uid'];
$reslut = model('room')->save($data);
//更新用户为厅住身份
$update_data = [];
$update_data['uid'] = $data['room_owner_uid'];
$update_data['is_anchor'] = 2;
db::name('user')->update($update_data);
if (!$reslut) {
return ['code' => 201, 'msg' => '添加失败', 'data' => ''];
} else {
return ['code' => 200, 'msg' => '添加成功', 'data' => ''];
}
}
//获取房间信息
public function get_room_info($rid)
{
if (empty($rid)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$room_info = db::name('room')->where(['rid' => $rid])->find();
$user_info = db::name('user')->where(['uid' => $room_info['room_owner_uid']])->find();
$room_info['nickname'] = $user_info['nick_name'] . '-' . $user_info['uid'];
$room_info['room_cover'] = localpath_to_netpath($room_info['room_cover']);
$room_info['room_name'] = mb_convert_encoding(base64_decode($room_info['base64_room_name']), 'UTF-8', 'UTF-8');
// dump($room_info);die;
return ['code' => 200, 'msg' => '获取成功', 'data' => $room_info];
}
//删除房间
public function room_del($rid)
{
if (empty($rid)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
db::name('room')->where(['rid' => $rid])->update(['is_delete' => 2, 'delete_time' => time()]);
return ['code' => 200, 'msg' => '删除成功', 'data' => null];
}
public function get_room_visitor_list($data, $order, $sort, $page = 1, $limit = 20)
{
$room_info = db::name('room')->where(['rid' => $data['rid']])->find();
if (empty($room_info)) {
return ['code' => 201, 'msg' => '房间信息不存在', 'data' => null];
}
$map = [];
$map[] = ['rid', '=', $data['rid']];
if (!empty($data['uid'])) {
$map[] = ['uid', '=', $data['uid']];
}
$room_micro_data = explode(',', $room_info['room_micro']);
if (!empty($data['is_micro'])) {
if ($data['is_micro'] == 1) {
$map[] = ['uid', 'in', $room_micro_data];
} elseif ($data['is_micro'] == 2) {
$map[] = ['uid', 'not in', $room_micro_data];
}
}
$room_visitor_list = db::name('room_visitor')->where($map)->order($order, $sort)->page($page, $limit)->select();
foreach ($room_visitor_list as $k => &$v) {
$user = db::name('user')->where(['uid' => $v['uid']])->find();
$v['nickname'] = $user['uid'] . '-' . $user['nick_name'];
$v['user_type_desc'] = '游客'; //游客
if (in_array($v['uid'], $room_micro_data)) {
$v['user_type_desc'] = '麦位用户'; //麦位用户
}
}
$data = [];
$data['count'] = db::name('room_visitor')->where($map)->count();
$data['list'] = $room_visitor_list;
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
}
//获取房间背景列表
public function room_background_list($bid, $image_name, $order, $sort, $page = 1, $limit = 20)
{
$map = [];
if (!empty($bid)) {
$map[] = ['bid', '=', $bid];
}
if (!empty($image_name)) {
$map[] = ['image_name', 'like', '%' . $image_name . '%'];
}
$map[] = ['is_delete', '=', 1];
$user_list = db::name('room_background')->where($map)->order($order, $sort)->page($page, $limit)->select();
foreach ($user_list as $k => &$v) {
$v['image_url'] = localpath_to_netpath($v['image_url']);
}
$data = [];
$data['count'] = db::name('room_background')->where($map)->count();
$data['list'] = $user_list;
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
}
//获取房间背景信息
public function background_info($bid)
{
if (empty($bid)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$room_info = db::name('room_background')->where(['bid' => $bid])->find();
$room_info['image_url'] = localpath_to_netpath($room_info['image_url']);
// dump($room_info);die;
return ['code' => 200, 'msg' => '获取成功', 'data' => $room_info];
}
//删除房间背景
public function room_background_del($bid)
{
if (empty($bid)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$room_info = db::name('room_background')->where(['bid' => $bid])->update(['is_delete' => 2, 'delete_time' => time()]);
return ['code' => 200, 'msg' => '删除成功', 'data' => null];
}
//修改房背景信息
public function edit_room_background($bid, $image_name, $image_url, $image_size, $status)
{
if (empty($bid)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$arr = [];
$arr['image_name'] = $image_name;
$arr['image_url'] = $image_url;
$arr['image_size'] = formatBytes($image_size);
$arr['status'] = $status;
$arr['update_time'] = time();
$upd = db::name('room_background')->where(['bid' => $bid])->update($arr);
if ($upd) {
return ['code' => 200, 'msg' => '修改成功', 'data' => null];
} else {
return ['code' => 201, 'msg' => '修改失败', 'data' => null];
}
}
//添加房背景信息
public function add_room_background($image_name, $image_url, $image_size, $status)
{
$arr = [];
$arr['image_name'] = $image_name;
$arr['image_url'] = $image_url;
$arr['image_size'] = formatBytes($image_size);
$arr['status'] = $status;
$arr['add_time'] = time();
$arr['update_time'] = time();
$upd = db::name('room_background')->insert($arr);
if ($upd) {
return ['code' => 200, 'msg' => '添加成功', 'data' => null];
} else {
return ['code' => 201, 'msg' => '添加失败', 'data' => null];
}
}
//--
//获取房间表情列表
public function room_emoji_list($eid, $type, $name, $emoji_type, $order, $sort, $page = 1, $limit = 20)
{
$map = [];
if (!empty($eid)) {
$map[] = ['eid', '=', $eid];
}
if (!empty($type)) {
$map[] = ['type', '=', $type];
}
if(!empty($emoji_type)){
$map[] = ['emoji_type', '=', $emoji_type];
}
if (!empty($name)) {
$map[] = ['name', 'like', '%' . $name . '%'];
}
$map[] = ['is_delete', '=', 1];
$user_list = db::name('room_emoji')->where($map)->order($order, $sort)->page($page, $limit)->select();
foreach ($user_list as $k => &$v) {
$v['image'] = localpath_to_netpath($v['image']);
}
$data = [];
$data['count'] = db::name('room_emoji')->where($map)->count();
$data['list'] = $user_list;
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
}
//获取房间表情
public function room_emoji_info($eid)
{
if (empty($eid)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$room_emoji = db::name('room_emoji')->where(['eid' => $eid])->find();
$room_emoji['http_image'] = localpath_to_netpath($room_emoji['image']);
return ['code' => 200, 'msg' => '获取成功', 'data' => $room_emoji];
}
//删除房间表情
public function del_room_emoji($eid)
{
if (empty($eid)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$room_emoji = db::name('room_emoji')->where(['eid' => $eid])->update(['is_delete' => 2, 'delete_time' => time()]);
return ['code' => 200, 'msg' => '删除成功', 'data' => null];
}
//修改房间表情
public function edit_room_emoji($eid, $pid, $type, $name, $emoji_type, $nid, $image, $second, $result, $show_status, $sort)
{
if (empty($eid)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$arr = [];
$arr['type'] = $type;
$arr['emoji_type'] = $emoji_type;
$arr['nid'] = $nid;
$arr['name'] = $name;
$arr['image'] = $image;
$arr['pid'] = $pid;
$arr['result'] = $result;
$arr['show_status'] = $show_status;
$arr['sort'] = $sort;
$arr['update_time'] = time();
$upd = db::name('room_emoji')->where(['eid' => $eid])->update($arr);
if ($upd) {
return ['code' => 200, 'msg' => '修改成功', 'data' => null];
} else {
return ['code' => 201, 'msg' => '修改失败', 'data' => null];
}
}
//添加房间表情
public function add_room_emoji($pid, $type, $name, $emoji_type, $nid, $image, $second, $result, $show_status, $sort)
{
if (empty($name) || empty($image)) {
return ['code' => 201, 'msg' => '名称或图片不能为空', 'data' => null];
}
$arr = [];
$arr['type'] = $type;
$arr['emoji_type'] = $emoji_type;
$arr['nid'] = $nid;
$arr['name'] = $name;
$arr['image'] = $image;
$arr['second'] = 3;
$arr['pid'] = $pid;
$arr['result'] = $result;
$arr['show_status'] = $show_status;
$arr['sort'] = $sort;
$arr['add_time'] = time();
$arr['update_time'] = time();
$upd = db::name('room_emoji')->insert($arr);
if ($upd) {
return ['code' => 200, 'msg' => '添加成功', 'data' => null];
} else {
return ['code' => 201, 'msg' => '添加失败', 'data' => null];
}
}
//获取房间分类
public function get_room_cate()
{
$list = db::name('room_type')->field('tid,type_name')->where(['is_delete' => 1])->select();
foreach ($list as $k => $v) {
$list[$k]['list'] = db::name('room_category')->field('cate_id,tid,category_name')->where(['tid' => $v['tid']])->select();
}
return ['code' => 200, 'msg' => '获取成功', 'data' => $list];
}
//获取房间分类列表
public function room_cate_list($cate_id, $category_name, $order, $sort, $page = 1, $limit = 20)
{
$map = [];
if (!empty($cate_id)) {
$map[] = ['cate_id', '=', $cate_id];
}
if (!empty($category_name)) {
$map[] = ['category_name', 'like', '%' . $category_name . '%'];
}
$map[] = ['is_delete', '=', 1];
$list = db::name('room_category')->where($map)->order($order, $sort)->page($page, $limit)->select();
foreach ($list as $k => &$v) {
$v['tid_type_name'] = db::name('room_type')->where(['tid' => $v['tid']])->value('type_name');
}
$data = [];
$data['count'] = db::name('room_category')->where($map)->count();
$data['list'] = $list;
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
}
//删除房间分类
public function room_cate_del($cate_id)
{
$room_cate = db::name('room')->where(['cate_id' => $cate_id])->find();
if ($room_cate) {
return ['code' => 201, 'msg' => '还有房间在此分类中', 'data' => null];
}
$del = db::name('room_category')->where(['cate_id' => $cate_id])->update(['is_delete' => 2]);
if ($del) {
return ['code' => 200, 'msg' => '删除成功', 'data' => null];
} else {
return ['code' => 201, 'msg' => '删除失败', 'data' => null];
}
}
//获取房间分类
public function get_room_cate_info($cate_id)
{
if (empty($cate_id)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$room_category_info = db::name('room_category')->find($cate_id);
return ['code' => 200, 'msg' => '获取成功', 'data' => $room_category_info];
}
//修改房间分类
public function room_cate_edit($cate_id, $tid, $category_name, $sort)
{
if (empty($cate_id)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$arr['tid'] = $tid;
$arr['sort'] = $sort;
$arr['category_name'] = $category_name;
$arr['update_time'] = time();
$upd = db::name('room_category')->where(['cate_id' => $cate_id])->update($arr);
if ($upd) {
return ['code' => 200, 'msg' => '修改成功', 'data' => null];
} else {
return ['code' => 201, 'msg' => '修改失败', 'data' => null];
}
}
//添加房间分类
public function add_room_cate($tid, $category_name, $sort)
{
$arr = [];
$arr['tid'] = $tid;
$arr['sort'] = $sort;
$arr['category_name'] = $category_name;
$arr['update_time'] = time();
$arr['add_time'] = time();
$add = db::name('room_category')->insert($arr);
if ($add) {
return ['code' => 200, 'msg' => '添加成功', 'data' => null];
} else {
return ['code' => 201, 'msg' => '添加失败', 'data' => null];
}
}
//--------
//获取房间类型列表
public function get_room_type_list($tid, $type_name, $order, $sort, $page = 1, $limit = 20)
{
$map = [];
if (!empty($tid)) {
$map[] = ['tid', '=', $tid];
}
if (!empty($type_name)) {
$map[] = ['type_name', 'like', '%' . $type_name . '%'];
}
$map[] = ['is_delete', '=', 1];
$user_list = db::name('room_type')->where($map)->order($order, $sort)->page($page, $limit)->select();
$data = [];
$data['count'] = db::name('room_type')->where($map)->count();
$data['list'] = $user_list;
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
}
//删除房间类型
public function room_type_del($tid)
{
$room_category = db::name('room_category')->where(['tid' => $tid])->find();
if ($room_category) {
return ['code' => 201, 'msg' => '请先删除该房间下分类', 'data' => null];
}
$del = db::name('room')->where(['tid' => $tid])->update(['is_delete' => 2]);
if ($del) {
return ['code' => 200, 'msg' => '删除成功', 'data' => null];
} else {
return ['code' => 201, 'msg' => '删除失败', 'data' => null];
}
}
//获取房间类型信息
public function get_room_type_info($tid)
{
if (empty($tid)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$room_type_info = db::name('room_type')->find($tid);
return ['code' => 200, 'msg' => '获取成功', 'data' => $room_type_info];
}
//修改房间类型信息
public function edit_room_type_info($tid, $room_type)
{
if (empty($tid)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$upd = db::name('room_type')->where(['tid' => $tid])->update(['type_name' => $room_type, 'update_time' => time()]);
if ($upd) {
return ['code' => 200, 'msg' => '修改成功', 'data' => null];
} else {
return ['code' => 201, 'msg' => '修改失败', 'data' => null];
}
}
//添加房间类型
public function add_room_type($room_type)
{
$arr = [];
$arr['type_name'] = $room_type;
$arr['update_time'] = time();
$arr['add_time'] = time();
$add = db::name('room_type')->insert($arr);
if ($add) {
return ['code' => 200, 'msg' => '添加成功', 'data' => null];
} else {
return ['code' => 201, 'msg' => '添加失败', 'data' => null];
}
}
//------
//获取房间音乐列表
public function room_music_list($mid, $music_name, $singer, $order, $sort, $page = 1, $limit = 20)
{
$map = [];
if (!empty($mid)) {
$map[] = ['mid', '=', $mid];
}
if (!empty($music_name)) {
$map[] = ['music_name', 'like', '%' . $music_name . '%'];
}
if (!empty($singer)) {
$map[] = ['singer', 'like', '%' . $singer . '%'];
}
$map[] = ['is_delete', '=', 1];
$user_list = db::name('music')->where($map)->order($order, $sort)->page($page, $limit)->select();
$data = [];
$data['count'] = db::name('music')->where($map)->count();
$data['list'] = $user_list;
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
}
//获取房间音乐信息
public function music_info($mid)
{
if (empty($mid)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$room_info = db::name('music')->where(['mid' => $mid])->find();
$room_info['http_music_url'] = localpath_to_netpath($room_info['music_url']);
// $room_info['room_cover'] = localpath_to_netpath($room_info['room_cover']);
// dump($room_info);die;
return ['code' => 200, 'msg' => '获取成功', 'data' => $room_info];
}
//删除房间音乐
public function room_music_del($mid)
{
if (empty($mid)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$room_info = db::name('music')->where(['mid' => $mid])->update(['is_delete' => 2, 'delete_time' => time()]);
return ['code' => 200, 'msg' => '删除成功', 'data' => null];
}
//修改房间音乐
public function edit_room_music($mid, $music_name, $singer, $music_url, $music_size, $status, $music_type)
{
if (empty($mid)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$arr = [];
$arr['music_name'] = $music_name;
$arr['singer'] = $singer;
$arr['music_url'] = $music_url;
$arr['music_size'] = formatBytes($music_size);
$arr['status'] = $status;
$arr['music_type'] = $music_type;
$arr['update_time'] = time();
$upd = db::name('music')->where(['mid' => $mid])->update($arr);
if ($upd) {
return ['code' => 200, 'msg' => '修改成功', 'data' => null];
} else {
return ['code' => 201, 'msg' => '修改失败', 'data' => null];
}
}
//添加房间音乐
public function add_room_music($music_name, $singer, $music_url, $music_size, $status, $music_type)
{
$arr = [];
$arr['singer'] = $singer;
$arr['music_name'] = $music_name;
$arr['music_url'] = $music_url;
$arr['music_size'] = formatBytes($music_size);
$arr['status'] = $status;
$arr['music_type'] = $music_type;
$arr['add_time'] = time();
$arr['update_time'] = time();
$upd = db::name('music')->insert($arr);
if ($upd) {
return ['code' => 200, 'msg' => '添加成功', 'data' => null];
} else {
return ['code' => 201, 'msg' => '添加失败', 'data' => null];
}
}
//获取列表
public function room_subsidy($order, $sort, $page, $limit)
{
$map = [];
$map[] = ['is_delete', '=', 1];
$list = db::name('room_subsidy')->where($map)->order($order, $sort)->page($page, $limit)->select();
foreach ($list as $k => &$v){
if($v['type'] == 2){
$v['money'] = $v['money'].'%';
}
}
$data = [];
$data['count'] = db::name('room_subsidy')->where($map)->count();
$data['list'] = $list;
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
}
//删除
public function room_subsidy_del($id)
{
$del = db::name('room_subsidy')->where(['id' => $id])->update(['is_delete' => 2]);
if ($del) {
return ['code' => 200, 'msg' => '删除成功', 'data' => null];
} else {
return ['code' => 201, 'msg' => '删除失败', 'data' => null];
}
}
//获取
public function room_subsidy_info($id)
{
if (empty($id)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$room_subsidy_info = db::name('room_subsidy')->find($id);
return ['code' => 200, 'msg' => '获取成功', 'data' => $room_subsidy_info];
}
//修改
public function edit_room_subsidy($id, $level_name, $total_gift_price, $money, $type)
{
if (empty($id)) {
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$arr = [];
$arr['type'] = $type;
$arr['level_name'] = $level_name;
$arr['total_gift_price'] = $total_gift_price;
$arr['money'] = $money;
$arr['update_time'] = time();
$upd = db::name('room_subsidy')->where(['id' => $id])->update($arr);
if ($upd) {
return ['code' => 200, 'msg' => '修改成功', 'data' => null];
} else {
return ['code' => 201, 'msg' => '修改失败', 'data' => null];
}
}
//添加
public function add_room_subsidy($level_name, $total_gift_price, $money, $type)
{
$arr = [];
$arr['type'] = $type;
$arr['level_name'] = $level_name;
$arr['total_gift_price'] = $total_gift_price;
$arr['money'] = $money;
$arr['add_time'] = time();
$add = db::name('room_subsidy')->insert($arr);
if ($add) {
return ['code' => 200, 'msg' => '添加成功', 'data' => null];
} else {
return ['code' => 201, 'msg' => '添加失败', 'data' => null];
}
}
//获取列表
public function give_room_subsidy_list($room_number, $owner_uid, $is_fa, $order, $sort, $page, $limit, $belong_week){
$map = [];
if(!empty($room_number)){
$rid = db::name('room')->where('room_number', $room_number)->value('rid');
$map[] = ['rid', '=', $rid];
}
if(!empty($owner_uid)){
$map[] = ['owner_uid', '=', $owner_uid];
}
if(!empty($is_fa)){
$map[] = ['is_fa', '=', $is_fa];
}
// if(!empty($start)){
// $now_time = strtotime($start);
// $last_week = strtotime('-1 week last sunday', $now_time);
// $map[] = ['last_week_time', '=', $last_week];
// }else{
// $now_time = time();
// $last_week = strtotime('-1 week last sunday', $now_time);
// $map[] = ['last_week_time', '=', $last_week];
// }
if(!empty($belong_week)){
$map[] = ['belong_week', '=', trim($belong_week)];
}
$map[] = ['type', '=', 1];
$list = db::name('room_week_earnings_log')->where($map)->order(['belong_week'=>'desc','earnings'=>'desc'])->page($page, $limit)->select();
foreach ($list as $k => &$v){
$room_info = db::name('room')->find($v['rid']);
$v['room_number'] = $room_info['room_number'];
$v['room_name'] = mb_convert_encoding(base64_decode($room_info['base64_room_name']), 'UTF-8', 'UTF-8');
$user_info = db::name('user')->find($v['owner_uid']);
$v['nick_name'] = mb_convert_encoding(base64_decode($user_info['base64_nick_name']), 'UTF-8', 'UTF-8');
}
$data = [];
$data['count'] = db::name('room_week_earnings_log')->where($map)->count();
$totalRowData = db::name('room_week_earnings_log')->field('SUM(change_value) as change_value,SUM(earnings) as earnings')->where($map)->find();
$data['totalRow'] = $totalRowData;
$data['list'] = $list;
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
}
//详情
public function room_week_earnings_log_info($id=0){
$map = [];
$map[] = ['id','=',$id];
$week_earnings_info = db::name('room_week_earnings_log')->where($map)->find();
return ['code' => 200, 'msg' => '获取成功', 'data' => $week_earnings_info];
}
//修复
public function room_week_earnings_log_edit($data){
$map = [];
$map[] = ['id','=',$data['id']];
$week_earnings_info = db::name('room_week_earnings_log')->where($map)->find();
if($week_earnings_info['apply_status'] != 1){
return ['code' => 201, 'msg' => '已审核完成', 'data' => null];
}
if($data['apply_status'] == 1){
return ['code' => 201, 'msg' => '请选择审核状态!', 'data' => null];
}
if(empty($week_earnings_info)){
return ['code' => 201, 'msg' => '审批对象不存在', 'data' => null];
}
db::name('room_week_earnings_log')->where($map)->update(['apply_status'=>$data['apply_status'],'remark'=>trim($data['remark']),'update_time'=>time()]);
return ['code' => 200, 'msg' => '操作成功', 'data' => $week_earnings_info];
}
//批量结算---------------需要
public function batch_give_room_subsidy(){
$week_start = date('Y-m-d', strtotime("last week Monday"));
$week_end = date('Y-m-d', strtotime("last week Sunday"));
$balance_week = $week_start."-".$week_end;
$is_had_deal_wsh = db::name('room_week_earnings_log')->where(['is_delete'=>1,'belong_week'=>$balance_week,'is_fa'=>2,'apply_status'=>1])->find();
if(!empty($is_had_deal_wsh)){
return ['code' => 201, 'msg' => "存在未审核的清单", 'data' => null];
}
$is_had_deal = db::name('room_week_earnings_log')->where(['is_delete'=>1,'belong_week'=>$balance_week,'is_fa'=>2,'apply_status'=>2])->find();
if(empty($is_had_deal)){
return ['code' => 201, 'msg' => "没有要结算的工资", 'data' => null];
}
try {
db::name('room_week_earnings_log')->where(['is_delete'=>1,'belong_week'=>$balance_week,'is_fa'=>2])->update(['is_delete'=>2,'update_time'=>time()]);
//推入事务逻辑
//推入队列
$redis = connectionRedis();
$redis->rPush('balance_room_wages_date',$balance_week);
// $data = model('api/RoomWages')->batch_give_room_subsidy($balance_week);
// if($data['code'] != 200){
// return ['code' => 200, 'msg' =>$data['msg'], 'data' => null];
// }
return ['code' => 200, 'msg' => "发放成功", 'data' => null];
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
return ['code' => 201, 'msg' => "发放失败", 'data' => null];
}
}
//补贴详情
public function get_give_room_subsidy_info($id){
if(empty($id)){
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$user_room_week_earnings = db::name('user_room_week_earnings')->where('id', $id)->find();
if(!$user_room_week_earnings){
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
return ['code' => 200, 'msg' => '获取成功', 'data' => $user_room_week_earnings];
}
//修改补贴
public function edit_give_room_subsidy($id, $user_earnings){
if(empty($id)){
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
$user_room_week_earnings = db::name('user_room_week_earnings')->where('id', $id)->find();
if(!$user_room_week_earnings){
return ['code' => 201, 'msg' => '参数异常', 'data' => null];
}
if($user_earnings < 0){
return ['code' => 201, 'msg' => '收益不能小于0', 'data' => null];
}
if($user_room_week_earnings['is_delete'] == 2){
return ['code' => 201, 'msg' => '该收益已结算,无法编辑', 'data' => null];
}
$update = [];
$update['user_earnings'] = $user_earnings;
$update['update_time'] = time();
$reslut = db::name('user_room_week_earnings')->where('id', $id)->update($update);
if($reslut){
return ['code' => 200, 'msg' => '编辑成功', 'data' => null];
}else{
return ['code' => 201, 'msg' => '编辑失败', 'data' => null];
}
}
//检测房间
public function check_room($rid){
$room_info = db::name('room')->where('rid', $rid)->find();
if(!$room_info){
return ['code' => 201, 'msg' => '参数错误', 'data' => null];
}
$check_room_info = model('api/AgoraCallback')->channel_room($rid);
if($check_room_info['code'] == 200 && !empty($check_room_info['data']['broadcasters'])){
// dump($check_room_info['data']['broadcasters']);exit;
foreach($check_room_info['data']['broadcasters'] as $k => $v){
$room_micro = $room_info['room_host_uid'].','.$room_info['room_micro'];
$room_micro_info = explode(',', $room_micro);
if(!in_array($v, $room_micro_info)){
model('api/AgoraCallback')->kicking_user($v, $rid, 20);
$insert = [];
$insert['uid'] = $v;
$insert['rid'] = $rid;
$insert['type'] = 311;
$insert['content'] = $room_micro;
$insert['add_time'] = time();
db::name('user_agora_block')->insert($insert);
}
}
}
return ['code' => 200, 'msg' => '检测完成', 'data' => null];
}
//清理麦位
public function check_room_micro($rid){
$room_info = db::name('room')->where('rid', $rid)->find();
if(!$room_info){
return ['code' => 201, 'msg' => '参数错误', 'data' => null];
}
$check_room_info = model('api/AgoraCallback')->channel_room($rid);
if($check_room_info['code'] == 200 && !empty($check_room_info['data']['broadcasters'])){
// dump($check_room_info['data']['broadcasters']);exit;
// foreach($check_room_info['data']['broadcasters'] as $k => $v){
// $room_micro = $room_info['room_host_uid'].','.$room_info['room_micro'];
// $room_micro_info = explode(',', $room_micro);
// if(!in_array($v, $room_micro_info)){
// }
// }
$room_micro = $room_info['room_micro'];
$room_micro_info = explode(',', $room_micro);
foreach ($room_micro_info as $k => $v){
if($v > 0 && !in_array($v,$check_room_info['data']['broadcasters'])){
}
}
}
return ['code' => 200, 'msg' => '清理完成', 'data' => null];
}
//动态列表
public function room_apply_list( $room_owner_uid,$room_number,$apply_status, $page = 1, $limit = 20)
{
$map = [];
if (!empty($room_owner_uid)) {
$map[] = ['ra.room_owner_uid', '=', $room_owner_uid];
}
if (!empty($room_number)) {
$map[] = ['r.room_number', '=', $room_number];
}
if (!empty($apply_status)) {
$map[] = ['ra.apply_status', '=', $apply_status];
}
$list = db::name('room_apply')
->alias('ra')
->join('yy_user u', 'u.uid = ra.room_owner_uid')
->join('yy_room r','r.rid = ra.rid')
->field('ra.id,ra.rid,ra.room_owner_uid,ra.cate_id,ra.apply_status,u.base64_nick_name as nick_name,r.base64_room_name as room_name,r.cate_id as now_cate_id,r.room_number,r.pretty_room_number,ra.add_time')
->where($map)
->page($page, $limit)
->order("id desc")
->select();
foreach ($list as $k => &$v) {
$v['nick_name'] = mb_convert_encoding(base64_decode($v['nick_name']), 'UTF-8', 'UTF-8');
$v['nickname'] = $v['room_owner_uid'] . '-' . $v['nick_name'];
$v['room_cate_name'] = db::name('room_category')->where(['cate_id' => $v['cate_id']])->value('category_name');
$v['now_room_cate_name'] = db::name('room_category')->where(['cate_id' => $v['now_cate_id']])->value('category_name');
$v['room_name'] = mb_convert_encoding(base64_decode($v['room_name']), 'UTF-8', 'UTF-8');
}
$data = [];
$data['count'] = db::name('room_apply')
->alias('ra')
->join('yy_user u', 'u.uid = ra.room_owner_uid')
->join('yy_room r','r.rid = ra.rid')
->where($map)
->count('ra.id');
$data['list'] = $list;
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
}
public function room_apply_info($id=0){
$map = ['ra.id'=>$id];
$room_apply = db::name('room_apply')
->alias('ra')
->join('yy_user u', 'u.uid = ra.room_owner_uid')
->join('yy_room r','r.rid = ra.rid')
->field('ra.id,ra.rid,ra.room_owner_uid,ra.cate_id,ra.apply_status,u.base64_nick_name as nick_name,r.base64_room_name as room_name,r.cate_id as now_cate_id,r.room_number,r.pretty_room_number,ra.add_time')
->where($map)
->find();
/* foreach ($list as $k => &$v) {*/
$room_apply['nick_name'] = mb_convert_encoding(base64_decode($room_apply['nick_name']), 'UTF-8', 'UTF-8');
$room_apply['nickname'] = $room_apply['room_owner_uid'] . '-' . $room_apply['nick_name'];
$room_apply['room_cate_name'] = db::name('room_category')->where(['cate_id' => $room_apply['cate_id']])->value('category_name');
$room_apply['now_room_cate_name'] = db::name('room_category')->where(['cate_id' => $room_apply['now_cate_id']])->value('category_name');
$room_apply['room_name'] = mb_convert_encoding(base64_decode($room_apply['room_name']), 'UTF-8', 'UTF-8');
// }
return ['code' => 200, 'msg' => '获取成功', 'data' => $room_apply];
}
//房间审核
public function room_apply_edit($data1){
if(empty($data1['rid'])){
return ['code' => 201, 'msg' => '获取不到房间!', 'data' => null];
}
$rid = $data1['rid'];
$room_info = db::name('room')->where(['rid'=>$rid,'is_delete'=>1])->find();
if(empty($room_info)){
return ['code' => 201, 'msg' => '房间不存在!', 'data' => null];
}
$id = $data1['id'];
$room_apply_info = db::name('room_apply')->where(['id'=>$id])->find();
$room_name = $room_apply_info['room_name'];
$cate_id = $room_apply_info['cate_id']; //想要切换的房间类型
//审核状态变化
if($data1['apply_status'] == $room_apply_info['apply_status']){
return ['code' => 201, 'msg' => '当前审核状态已存在!', 'data' => null];
}
if($data1['apply_status'] ==1){
return ['code' => 201, 'msg' => '不能将房间审核更改为待审核!', 'data' => null];
}
if($room_apply_info['apply_status'] ==3){
return ['code' => 201, 'msg' => '该房间类型已关闭!', 'data' => null];
}
try {
Db::startTrans();
//房间状态已通过 改为 拒绝
$is_change = false;
if(($room_apply_info['apply_status'] == 2) && ($data1['apply_status'] == 3)){
$cate_id = 18;
$data = [];
if($room_info['cate_id'] != $cate_id && $cate_id > 0){
$is_change = true;
if($room_info['cate_id'] == 19){
$map = [];
$map[] = ['rid', '=', $rid];
$room_privacy = db::name('room_privacy')->where($map)->select();
if(!empty($room_privacy)){
db::rollback();
return ['code' => 201, 'msg' => '当前有小黑屋,暂时无法变更房间', 'data' => null];
}
}
if($room_info['cate_id'] == 26){
$map = [];
$map[] = ['rid', '=', $rid];
$map[] = ['is_stop', '=', 2];
$map[] = ['is_delete', '=', 1];
$room_auction_info = db::name('room_new_auction_log')->where($map)->find();
if($room_auction_info){
db::rollback();
return ['code' => 201, 'msg' => '当前有进行中的新人拍卖,无法切换', 'data' => null];
}
}
if($room_info['cate_id'] == 27){
//当前是否已有进行中的K歌
$map = [];
$map[] = ['rid', '=', $rid];
$map[] = ['is_delete', '=', 1];
$room_auction_info = db::name('room_song_log')->where($map)->find();
if($room_auction_info){
db::rollback();
return ['code' => 201, 'msg' => '当前K歌进行中无法切换', 'data' => null];
}
}
if($room_info['cate_id'] == 28){
$map = [];
$map[] = ['rid', '=', $rid];
$map[] = ['status', '=', 2];
$map[] = ['is_delete', '=', 1];
$room_auction_info = db::name('room_auction_log')->where($map)->find();
if($room_auction_info){
db::rollback();
return ['code' => 201, 'msg' => '当前有尚未结束的拍卖,无法切换', 'data' => null];
}
}
if($room_info['cate_id'] == 29){
$map = [];
$map[] = ['rid', '=', $rid];
$map[] = ['is_delete', '=', 1];
$room_dating_log = db::name('room_dating_log')->where($map)->find();
if($room_dating_log){
db::rollback();
return ['code' => 201, 'msg' => '当前玩法进行中,无法切换', 'data' => null];
}
}
if(in_array($room_info['cate_id'],[36,37])){
$map = [];
$map[] = ['rid', '=', $rid];
$map[] = ['is_delete', '=', 1];
$room_dating_log = db::name('room_xq1')->where($map)->find();
if($room_dating_log){
db::rollback();
return ['code' => 201, 'msg' => '当前玩法进行中,无法切换', 'data' => null];
}
}
$data['cate_id'] = $cate_id;
//房间类型编辑
$reslut = model('admin/room')->save($data, ['rid' => $rid]);
if (!$reslut) {
Db::rollback();
return ['code' => 201, 'msg' => '编辑失败', 'data' => null];
}
//清理该房间所有麦位魅力值
$map = [];
$map[] = ['rid', '=', $rid];
$map[] = ['charm_value', '>', 0];
$list = db::name('room_user_cc')->where($map)->select();
if(!empty($list)){
foreach ($list as $k => $v){
$reslut = db::name('room_user_micro_charm_log')->where('cid', $v['cid'])->update(['change_value' => 0, 'update_time' => time()]);
if(!$reslut){
Db::rollback();
return ['code' => 201, 'msg' => '编辑失败', 'data' => ''];
}
}
$reslut = db::name('room_user_cc')->where($map)->update(['charm_value' => 0, 'update_time' => time()]);
if(!$reslut){
Db::rollback();
return ['code' => 201, 'msg' => '编辑失败', 'data' => ''];
}
}
}
}
//审核状态修改
db::name('room_apply')->where(['id'=>$id])->update(['apply_status'=>$data1['apply_status'],'reamrks'=>$data1['remarke']]);
// 1待审核 2审核通过 3审核失败
$category_name= db::name('room_category')->where(['cate_id'=>$room_apply_info['cate_id']])->value('category_name');
if($data1['apply_status'] == 2){
$result = "审核通过";
}elseif($data1['apply_status'] == 3){
$result = "已被关闭";
}
$remarke = "您申请变更房间类型为{$category_name}{$result}";
//提现驳回
$reslut=model('api/UserMessage')->send_message($room_apply_info['room_owner_uid'], 1, 0,'房间审核', $remarke);
if ($reslut['code']!=200) {
Db::rollback();
return ['code' => 201, 'msg' => "处理失败", 'data' => null];
}
Db::commit();
if($is_change){
if($cate_id != $room_info['cate_id']){
$push_room_data = [];
$push_room_data['rid'] = $rid;
$push_room_data['type'] = 1;
$push_data = [];
$push_data['code'] = 369;
$push_data['msg'] = "房间类型变更推送";
$push_data['data'] = $push_room_data;
$reslut = model('api/WebSocketPush')->send_to_group($rid, $push_data);
}
}
return ['code' => 200, 'msg' => '编辑成功', 'data' => null];
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
// halt($e);
return ['code' => 201, 'msg' => '编辑失败', 'data' => null];
}
}
// public function check_empty_room(){
// $robot_rids = db::name('room')->where([['robot_num','>',0]])->coulum('rid');
// $room_uids = db::name('room_micro')->where([['rid','in',$robot_rids],['uid','<>',0]])->group('rid')->column('rid');
// array_diff();
// }
public function out_forbid_log($data,$page,$page_limit){
$map = [];
if(!empty($data['operator_uid'])){
$map[] = ['ru.operator_uid', '=', trim($data['operator_uid'])];
}
if(!empty($data['uid'])){
$map[] = ['ru.uid', '=', trim($data['uid'])];
}
if(!empty($data['room_number'])){
$map[] = ['r.room_number|r.pretty_room_number', '=', trim($data['room_number'])];
}
if(!empty($data['type'])){
$map[] = ['ru.type', '=', trim($data['type'])];
}
if(!empty($data['start'])){
$map[] = ['ru.add_time', '>=', strtotime(trim($data['start']))];
}
if(!empty($data['end'])){
$map[] = ['ru.add_time', '<=', strtotime(trim($data['end']))];
}
$list = db::name('room_forbid_user ru')
->join('yy_user u1','ru.operator_uid = u1.uid','left')
->join('yy_user u2','ru.uid = u2.uid')
->join('yy_room r','r.rid = ru.rid')
->field('ru.*,u1.base64_nick_name as operator_nick_name,u2.base64_nick_name as nick_name,if(pretty_room_number <> 0,pretty_room_number,room_number) as room_number')
->where($map)
->page($page, $page_limit)
->order(['ru.fid'=>'desc'])
->select();
foreach ($list as &$v){
if(!empty($v['operator_uid'])){
$v['operator_nick_name'] = mb_convert_encoding(base64_decode($v['operator_nick_name']), 'UTF-8', 'UTF-8');
$v['operator_nick_name'] = "{$v['operator_nick_name']}-{$v['operator_uid']}";
}else{
$v['operator_nick_name'] = "";
}
$v['nick_name'] = mb_convert_encoding(base64_decode($v['nick_name']), 'UTF-8', 'UTF-8');
$v['nick_name'] = "{$v['nick_name']}-{$v['uid']}";
$v['status'] = 2; //未解禁
if($v['over_time'] <= time()){
$v['status'] = 1; //已解禁
}
}
$data = [];
$data['count'] = db::name('room_forbid_user ru')
->join('yy_user u1','ru.operator_uid = u1.uid','left')
->join('yy_user u2','ru.uid = u2.uid')
->join('yy_room r','r.rid = ru.rid')
->where($map)
->count();
$data['list'] = $list;
return ['code' => 200, 'msg' => '检测完成', 'data' => $data];
}
public function jie_word($fid){
$result = db::name('room_forbid_user')->where(['fid'=>$fid])->find();
if(empty($result)){
return ['code' => 201, 'msg' => '操作对象不存在!', 'data' => null];
}
if($result['over_time'] <= time()){
return ['code' => 201, 'msg' => '已解禁!', 'data' => null];
}
db::name('room_forbid_user')->where(['fid'=>$fid])->update(['over_time'=>time(),'update_time'=>time()]);
return ['code' => 200, 'msg' => '操作成功', 'data' => null];
}
}