Files
mier-php/application/admin/model/Room.php

1440 lines
57 KiB
PHP
Raw Normal View History

2025-08-11 10:22:05 +08:00
<?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];
}
}