1206 lines
55 KiB
PHP
1206 lines
55 KiB
PHP
<?php
|
||
|
||
namespace app\api\model;
|
||
use think\Model;
|
||
use think\Session;
|
||
use think\Db;
|
||
|
||
class Guild extends Model
|
||
{
|
||
// 开启自动写入时间戳字段
|
||
protected $autoWriteTimestamp = 'int';
|
||
// 定义时间戳字段名
|
||
protected $createTime = 'createtime';
|
||
protected $updateTime = 'updatetime';
|
||
/*
|
||
* 获取公会列表
|
||
* @param $page
|
||
* @param $limit
|
||
*/
|
||
public function get_guild_list($page,$page_limit,$search='',$user_id=0)
|
||
{
|
||
$where =[];
|
||
//判断是不是数字
|
||
if (is_numeric($search)) {
|
||
$where = ['guild_special_id'=>['like',$search.'%']]; //通过工会ID搜索
|
||
}else{
|
||
$where = ['guild_name'=>['like',$search.'%']];
|
||
}
|
||
$list = [];
|
||
$list = Db::name('vs_guild')
|
||
->field('id,guild_special_id,user_id,guild_name,cover,num,intro,createtime,income')
|
||
->where(['is_show'=>1,'delete_time'=>0])
|
||
->where($where)
|
||
->page($page, $page_limit)
|
||
->order('num desc')
|
||
->select();
|
||
$count = Db::name('vs_guild')
|
||
->where(['is_show'=>1,'delete_time'=>0])
|
||
->where($where)
|
||
->count();
|
||
if($list){
|
||
foreach ($list as $key => &$value) {
|
||
$list[$key]['cover'] = localpath_to_netpath( $value['cover']);
|
||
$list[$key]['createtime'] = date('Y-m-d H:i:s',$value['createtime']);
|
||
//会长信息
|
||
$list[$key]['user_name'] = Db::name('user')->where(['id'=>$value['user_id']])->value('nickname');//会长昵称
|
||
$list[$key]['user_avatar'] = Db::name('user')->where(['id'=>$value['user_id']])->value('avatar');//会长头像
|
||
//当前用户是否加入该公会
|
||
$guild_user = Db::name('vs_guild_user')->where(['guild_id'=>$value['id'],'user_id'=>$user_id,'status'=>1,'delete_time'=>0])->value('id');
|
||
$list[$key]['is_join'] = $guild_user ? 1 : 0;
|
||
//公会用户头像
|
||
$guild_user_list = Db::name('vs_guild_user')->alias('a')
|
||
->join('user b','a.user_id = b.id')
|
||
->field('a.user_id,b.avatar')
|
||
->where(['a.guild_id'=>$value['id'],'a.delete_time'=>0,'a.status'=>1,'a.is_deacon'=>2])
|
||
->order('a.coin desc')
|
||
->limit(3)
|
||
->select();
|
||
$list[$key]['guild_user_list'] = $guild_user_list;
|
||
//工会总流水
|
||
$list[$key]['total_transaction'] = $value['income'];
|
||
//公会靓号处理
|
||
$list[$key]['guild_special_id'] = model('api/Decorate')->user_decorate_detail($value['id'], 8);
|
||
}
|
||
}
|
||
$data =[
|
||
'page' => $page,
|
||
'limit' => $page_limit,
|
||
'count' => $count,
|
||
'list' => $list
|
||
];
|
||
return ['code'=>1,'msg'=>'获取成功','data'=>$data];
|
||
}
|
||
|
||
/*
|
||
* 获取公会详情
|
||
* @param $id
|
||
* @param $user_id
|
||
*/
|
||
public function get_guild_info($id,$user_id=0)
|
||
{
|
||
$info = Db::name('vs_guild')
|
||
->field('id,guild_special_id,user_id,guild_name,cover,num,intro,createtime,income')
|
||
->where(['id'=>$id,'is_show'=>1,'delete_time'=>0])
|
||
->find();
|
||
if($info){
|
||
$info['cover'] = localpath_to_netpath( $info['cover']);
|
||
$info['createtime'] = date('Y-m-d H:i:s',$info['createtime']);
|
||
//当前用户是否是会长
|
||
$info['is_leader'] = $info['user_id'] == $user_id ? 1 : 0;
|
||
//当前用户是否加入当前工会
|
||
$info['is_join'] = Db::name('vs_guild_user')->where(['user_id'=>$user_id,'guild_id'=>$id,'status'=>1,'delete_time'=>0])->value('guild_id')> 0 ? 1 : 0;
|
||
//工会总流水
|
||
$info['total_transaction'] = $info['income'];
|
||
//工会房间数
|
||
$info['room_num'] = Db::name('vs_guild_user')->where(['guild_id'=>$id,'status'=>1,'delete_time'=>0,'room_id'=>['<>',0]])->count();
|
||
//付费退出公会所需金
|
||
$info['quit_guild_gold'] = get_system_config_value('quit_guild_gold');
|
||
//工会群组ID
|
||
$info['group_id'] = "g".$info['id'];
|
||
//会长信息
|
||
$user_data = Db::name('user')->where(['id'=>$info['user_id']])->field('id,nickname,avatar')->find();
|
||
$info['user_data']['nickname'] = $user_data['nickname'];
|
||
$info['user_data']['avatar'] = localpath_to_netpath($user_data['avatar']);
|
||
$info['user_data']['icon'][0] = model('UserData')->user_wealth_icon($info['user_id']);//财富图标
|
||
$info['user_data']['icon'][1] = model('UserData')->user_charm_icon($info['user_id']);//魅力图标
|
||
//公会靓号处理
|
||
$info['guild_special_id'] = model('api/Decorate')->user_decorate_detail($info['id'], 8);
|
||
}else{
|
||
$info = [];
|
||
}
|
||
return ['code'=>1,'msg'=>'获取成功','data'=>$info];
|
||
}
|
||
|
||
/*
|
||
* 加入工会申请
|
||
*/
|
||
public function join_guild_apply($guild_id,$user_id=0)
|
||
{
|
||
$user_info = model('User')->get_user_info($user_id);
|
||
if(!$user_info){
|
||
return ['code' => 0, 'msg' => '参数错误', 'data' => null];
|
||
}
|
||
if($user_info['is_real']!=1 || empty($user_info['card_id'])){
|
||
return ['code' => 0, 'msg' => '请先实名认证', 'data' => null];
|
||
}
|
||
//公会是否存在
|
||
$guild_info = db::name('vs_guild')->where(['id'=>$guild_id,'delete_time'=>0])->find();
|
||
if(!$guild_info){
|
||
return ['code' => 0, 'msg' => '该公会不存在', 'data' => null];
|
||
}
|
||
$is_check_join = Db::name('vs_guild_user')->where(['user_id'=>$user_id,'delete_time'=>0])->order('id desc')->find();
|
||
if($is_check_join && $is_check_join['guild_id']!=$guild_id){
|
||
return ['code'=>0,'msg'=>'您已加入别的工会,请先退出公会再加入', 'data' => null];
|
||
}
|
||
if($is_check_join && $is_check_join['guild_id']==$guild_id && $is_check_join['status']==1){
|
||
return ['code'=>0,'msg'=>'您已加入该工会', 'data' => null];
|
||
}
|
||
if($is_check_join && $is_check_join['guild_id']==$guild_id && $is_check_join['status']==2){
|
||
return ['code'=>0,'msg'=>'您已提交申请,请耐心等待', 'data' => null];
|
||
}
|
||
//是否被踢出过
|
||
$ti_chu = db::name('vs_guild_user')->where(['user_id'=>$user_id,'guild_id'=>$guild_id,'delete_time'=>['<>',0],'quit_type'=>2])->find();
|
||
if(!empty($ti_chu)){
|
||
return ['code' => 0, 'msg' => '已被踢出,禁止加入!', 'data' => null];
|
||
}
|
||
//退出公会是否超过30天
|
||
$map = [];
|
||
$map['user_id'] = $user_id;
|
||
$map['delete_time'] = ['<>',0];
|
||
$map['quit_type'] = 1;
|
||
$quit_guild_info = Db::name('vs_guild_user')->where($map)->order('quit_time', 'desc')->field('quit_time,guild_id,quit_type')->find();
|
||
if(!empty($quit_guild_info)) {
|
||
$quit_time = empty($quit_guild_info['quit_time']) ? 0 : $quit_guild_info['quit_time'];
|
||
$quit_type = $quit_guild_info['quit_type'];
|
||
if($quit_guild_info['guild_id'] != $guild_id) {
|
||
$last_time = 30 * 24 * 3600;
|
||
if((time() - $last_time) <= $quit_time) {
|
||
return ['code' => 0, 'msg' => '退出公会未超过30天,不能重新加入其他公会', 'data' => null];
|
||
}
|
||
}
|
||
}
|
||
//是否有房间
|
||
$rid = 0;
|
||
$room_info = db::name('vs_room')->where('user_id', $user_id)->find();
|
||
if($room_info){
|
||
$rid = $room_info['id'];
|
||
}
|
||
$insert_data = [];
|
||
$insert_data['user_id'] = $user_id;
|
||
$insert_data['guild_id'] = $guild_id;
|
||
$insert_data['room_id'] = $rid;
|
||
$insert_data['status'] = 2;
|
||
$insert_data['is_deacon'] = 2;
|
||
$insert_data['createtime'] = time();
|
||
// $update_data['apply_time'] = time();
|
||
$insert_data['is_show_room'] = 1;
|
||
$reslut = db::name('vs_guild_user')->insert($insert_data);
|
||
if($reslut){
|
||
//增加公会人数
|
||
db::name('vs_guild')->where('id', $guild_info['id'])->setInc('num', 1);
|
||
//拉用户进入工会群聊
|
||
// model('Tencent')->add_group_member('g'.$guild_id, $user_id);
|
||
// model('Tencent')->send_group_system_notification('g'.$guild_id,"欢迎".$user_info['nickname'].'加入公会');
|
||
|
||
return ['code' => 1, 'msg' => '提交成功', 'data' => null];
|
||
}else{
|
||
return ['code' => 0, 'msg' => '提交失败', 'data' => null];
|
||
}
|
||
}
|
||
|
||
/*
|
||
* 申请列表
|
||
*/
|
||
public function get_apply_guild_list($uid, $guild_id, $page, $page_limit){
|
||
$page = (int)$page;
|
||
$page_limit = $page_limit < 30 ? $page_limit : 30;
|
||
|
||
$user_info = db::name('user')->find($uid);
|
||
if(!$user_info){
|
||
return ['code' => 0, 'msg' => '参数错误', 'data' => null];
|
||
}
|
||
|
||
//公会信息
|
||
$guild_info = db::name('vs_guild')->where(['id'=>$guild_id,'delete_time'=>0])->find();
|
||
if(!$guild_info){
|
||
return ['code' => 0, 'msg' => '该公会不存在', 'data' => null];
|
||
}
|
||
$map = [];
|
||
$map = [
|
||
'a.guild_id' => $guild_id,
|
||
'a.status' => 2
|
||
];
|
||
$count = db::name('vs_guild_user')->alias('a')->join('user b', 'a.user_id = b.id')->where($map)->count();
|
||
$list = db::name('vs_guild_user')->alias('a')->join('user b', 'a.user_id = b.id')
|
||
->field('a.id, a.user_id, a.guild_id, a.room_id, a.status, b.nickname, b.avatar,b.user_code')
|
||
->where($map)
|
||
->order('id desc')
|
||
->page($page, $page_limit)
|
||
->select();
|
||
foreach ($list as $k => &$v){
|
||
$v['user_code'] = model('Decorate')->user_decorate_detail($v['user_id'],6);
|
||
}
|
||
$data = [];
|
||
$data =[
|
||
'page' => $page,
|
||
'limit' => $page_limit,
|
||
'count' => $count,
|
||
'list' => $list,
|
||
];
|
||
return ['code' => 200, 'msg' => '获取成功', $data];
|
||
}
|
||
|
||
/*
|
||
* 同意,拒绝申请
|
||
*/
|
||
public function operate_guild($apply_id, $type,$uid=0,$remarks=""){
|
||
if($uid != 0){
|
||
$user_info = db::name('user')->find($uid);
|
||
if(!$user_info){
|
||
return ['code' => 0, 'msg' => '参数错误', 'data' => null];
|
||
}
|
||
}
|
||
//该申请是否已被操作
|
||
$is_operate = db::name('vs_guild_user')->where(['id'=>$apply_id,'status'=>2])->find();
|
||
if(!$is_operate){
|
||
return ['code' => 201, 'msg' => '该申请不存在', 'data' => null];
|
||
}
|
||
if(!in_array($type, [1,2])){
|
||
return ['code' => 0, 'msg' => '参数错误', 'data' => null];
|
||
}
|
||
$guild_info = db::name('vs_guild')->where('id', $is_operate['guild_id'])->find();
|
||
if($uid!=0 && $uid != $guild_info['user_id']){
|
||
return ['code' => 0, 'msg' => '您没有权限操作', 'data' => null];
|
||
}
|
||
//审核通过
|
||
if($type == 1) {
|
||
$is_join_guild = Db::name('vs_guild_user')->where(['user_id' => $is_operate['user_id'], 'delete_time' => 0, 'status' => 1])->find();
|
||
if(!empty($is_join_guild)) {
|
||
return ['code' => 0, 'msg' => '已加入其他工会', 'data' => null];
|
||
}
|
||
}
|
||
Db::startTrans();
|
||
try {
|
||
if($type == 1){//同意
|
||
$update_data = [];
|
||
$update_data['status'] = 1;
|
||
$update_data['updatetime'] = time();
|
||
$update_data['is_show_room'] = 1;
|
||
$update_data['apply_time'] = time();
|
||
$update_data['remarks'] = $remarks;
|
||
//结算比例
|
||
$configs = get_system_config();
|
||
//未加入工会的收益
|
||
$ratiogr = $configs['room_gift_ratio'];
|
||
//收益增加 加入工会的收益
|
||
$ratiog = $configs['room_gift_guild_ratio'];
|
||
//收礼人最终的收益比例
|
||
$ratio = $ratiogr + $ratiog;
|
||
$update_data['settlement_ratio'] = $ratio;
|
||
$reslut = db::name('vs_guild_user')->where(['id'=>$apply_id])->update($update_data);
|
||
if(!$reslut){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '操作失败', 'data' => null];
|
||
}
|
||
//增加公会人数
|
||
db::name('vs_guild')->where('id', $guild_info['id'])->setInc('num', 1);
|
||
//拉用户进入工会群聊
|
||
$user_nickname = db::name('user')->where('id', $is_operate['user_id'])->value('nickname');
|
||
model('api/Tencent')->add_group_member('g'.$is_operate['guild_id'], $is_operate['user_id']);
|
||
model('api/Tencent')->send_group_system_notification('g'.$is_operate['guild_id'],"欢迎".$user_nickname.'加入公会');
|
||
//发系统信息
|
||
$content = "恭喜加入{$guild_info['guild_name']}工会,您的个人收益增加{$ratiog}%,目前总收益{$ratio}%";
|
||
model('api/UserMessage')->send_system_message($is_operate['user_id'], "加入公会成功通知", $content, 1);
|
||
}else if($type == 2){//拒绝
|
||
$update_data = [];
|
||
$update_data['status'] = 3;
|
||
$update_data['updatetime'] = time();
|
||
$update_data['apply_time'] = time();
|
||
$update_data['remarks'] = $remarks;
|
||
$reslut = db::name('vs_guild_user')->where(['id'=>$apply_id])->update($update_data);
|
||
if(!$reslut){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '操作失败', 'data' => null];
|
||
}
|
||
}
|
||
Db::commit();
|
||
return ['code' => 1, 'msg' => '操作成功', 'data' => null];
|
||
} catch (\Exception $e) {
|
||
// 回滚事务
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '操作失败', 'data' => null];
|
||
}
|
||
}
|
||
|
||
/*
|
||
* 踢出工会
|
||
*/
|
||
public function kick_out_guild($uid,$user_id, $guild_id){
|
||
$user_info = db::name('user')->find($user_id);
|
||
if(!$user_info){
|
||
return ['code' => 0, 'msg' => '参数错误', 'data' => null];
|
||
}
|
||
|
||
$guild_info = db::name('vs_guild')->find($guild_id);
|
||
if(!$guild_id){
|
||
return ['code' => 0, 'msg' => '参数错误', 'data' => null];
|
||
}
|
||
|
||
if($uid != $guild_info['user_id']){
|
||
return ['code' => 0, 'msg' => '您没有权限操作','data' => null];
|
||
}
|
||
$map = [];
|
||
$map['user_id'] = $user_id;
|
||
$map['guild_id'] = $guild_id;
|
||
$map['status'] = 1;
|
||
$map['delete_time'] = 0;
|
||
$user_guild_info = db::name('vs_guild_user')->where($map)->find();
|
||
if(!$user_guild_info){
|
||
return ['code' => 0, 'msg' => '该用户不在该公会', 'data' => null];
|
||
}
|
||
if($user_guild_info['is_deacon'] == 1){
|
||
return ['code' => 0, 'msg' => '会长无法被踢出','data' => null];
|
||
}
|
||
$update_data = [];
|
||
$update_data['delete_time'] = time();
|
||
$update_data['updatetime'] = time();
|
||
$update_data['quit_time'] = time();
|
||
$update_data['quit_type'] = 2;
|
||
$reslut = db::name('vs_guild_user')->where('id', $user_guild_info['id'])->update($update_data);
|
||
if($reslut){
|
||
//减少公会人数
|
||
db::name('vs_guild')->where('id', $guild_info['id'])->setDec('num');
|
||
model('Tencent')->delete_group_member('g'.$guild_id, $user_id);
|
||
return ['code' => 1, 'msg' => '踢出成功','data' => null];
|
||
}else{
|
||
return ['code' => 0, 'msg' => '踢出失败','data' => null];
|
||
}
|
||
}
|
||
|
||
//退出公会
|
||
public function quit_guild($uid, $guild_id,$type){
|
||
$config = get_system_config();
|
||
$user_info = db::name('user')->find($uid);
|
||
if(!$user_info){
|
||
return ['code' => 0, 'msg' => '参数错误', 'data' => null];
|
||
}
|
||
$guild_info = db::name('vs_guild')->find($guild_id);
|
||
if(!$guild_info){
|
||
return ['code' => 0, 'msg' => '参数错误', 'data' => null];
|
||
}
|
||
$map = [];
|
||
$map['user_id'] = $uid;
|
||
$map['guild_id'] = $guild_id;
|
||
$map['status'] = 1;
|
||
$map['delete_time'] = 0;
|
||
$user_guild_info = db::name('vs_guild_user')->where($map)->find();
|
||
if(!$user_guild_info){
|
||
return ['code' => 0, 'msg' => '用户不在该公会', 'data' => null];
|
||
}
|
||
if($user_guild_info['is_deacon'] == 1){
|
||
return ['code' => 0, 'msg' => '会长无法退出公会', 'data' => null];
|
||
}
|
||
$time = 60 * 60 * 24 * $config['quit_guild_time'];
|
||
$time = $user_guild_info['createtime'] + $time;
|
||
if($time > time() && $type != 2){
|
||
return ['code' => 0, 'msg' => '加入公会'.$config['quit_guild_time'].'天内无法退出', 'data' => null];
|
||
}
|
||
Db::startTrans();
|
||
try {
|
||
$update_data = [];
|
||
if($type ==2){
|
||
//付费退出
|
||
//扣款
|
||
$quit_guild_gold = $config['quit_guild_gold'];
|
||
$res = model('common/UserWallet')->change_user_money($uid, $quit_guild_gold, model('common/UserWallet')::MONEYTYPECOIN, model('common/UserWallet')::GUILD_EXIT,model('common/UserWallet')::ChangeTypeLable(model('common/UserWallet')::GUILD_EXIT));
|
||
if($res['code'] == 0){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => $res['msg'], 'data' => null];
|
||
}
|
||
$update_data['quit_type'] = 4;
|
||
$update_data['quit_time'] = time();
|
||
$update_data['delete_time'] = time();
|
||
$update_data['updatetime'] = time();
|
||
$reslut = db::name('vs_guild_user')->where('id',$user_guild_info['id'])->update($update_data);
|
||
if(!$reslut){
|
||
Db::rollback();
|
||
return ['code' => 0, '' => '退出失败', 'data' => null];
|
||
}
|
||
//加入审核表
|
||
$insert_data = [];
|
||
$insert_data['guid'] = $user_guild_info['id'];
|
||
$insert_data['user_id'] = $uid;
|
||
$insert_data['guild_id'] = $guild_id;
|
||
$insert_data['status'] = 1;
|
||
$insert_data['type'] = 2;
|
||
$insert_data['createtime'] = time();
|
||
$insert_data['updatetime'] = time();
|
||
$res = db::name('vs_guild_user_quit_log')->insert($insert_data);
|
||
if(!$res){
|
||
Db::rollback();
|
||
return ['code' => 0, '' => '退出失败', 'data' => null];
|
||
}
|
||
//减少公会人数
|
||
db::name('vs_guild')->where('id', $guild_info['id'])->setDec('num');
|
||
model('Tencent')->delete_group_member('g'.$guild_id, $uid);
|
||
Db::commit();
|
||
return ['code' => 1, 'msg' => '退出成功', 'data' => null];
|
||
}else{
|
||
$quit_log = db::name('vs_guild_user_quit_log')->where(['guild_id'=>$guild_id,'user_id'=>$uid,'status'=>0])->find();
|
||
if($quit_log){
|
||
return ['code' => 0, 'msg' => '您已提交退出申请,请等待会长审核', 'data' => null];
|
||
}
|
||
//加入审核表
|
||
$insert_data = [];
|
||
$insert_data['guid'] = $user_guild_info['id'];
|
||
$insert_data['user_id'] = $uid;
|
||
$insert_data['guild_id'] = $guild_id;
|
||
$insert_data['status'] = 0;
|
||
$insert_data['type'] = 1;
|
||
$insert_data['createtime'] = time();
|
||
$insert_data['updatetime'] = time();
|
||
$res = db::name('vs_guild_user_quit_log')->insert($insert_data);
|
||
if(!$res){
|
||
Db::rollback();
|
||
return ['code' => 0, '' => '退出失败', 'data' => null];
|
||
}
|
||
Db::commit();
|
||
return ['code' => 1, 'msg' => '退出成功,等待会长审核', 'data' => null];
|
||
}
|
||
} catch (\Exception $e) {
|
||
// 回滚事务
|
||
dump($e);
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '退出失败', 'data' => null];
|
||
}
|
||
}
|
||
|
||
/*
|
||
* 退出申请列表
|
||
*
|
||
*/
|
||
public function quit_apply_list($uid,$guild_id,$page, $page_limit){
|
||
$guild_info = db::name('vs_guild')->where(['id'=>$guild_id,'delete_time'=>0])->find();
|
||
if(empty($guild_info)){
|
||
return ['code' => 0, 'msg' => '公会不存在!', 'data' => null];
|
||
}
|
||
if($guild_info['user_id'] != $uid){
|
||
// return ['code' => 0, 'msg' => '您不是该公会会长,无法访问权限', 'data' => null];
|
||
}
|
||
//申请主动退出工会的列表
|
||
$map = ['a.guild_id' => $guild_id];
|
||
$list = db::name('vs_guild_user_quit_log')->alias('a')->join('user b', 'a.user_id = b.id')
|
||
->field('a.id, a.user_id, a.guild_id,a.createtime,a.status,b.nickname, b.avatar,b.user_code')
|
||
->where($map)
|
||
->order('id desc')
|
||
->page($page, $page_limit)
|
||
->select();
|
||
$count = db::name('vs_guild_user_quit_log')->alias('a')->join('user b', 'a.user_id = b.id')->where($map)->count();
|
||
foreach ($list as $k => &$v){
|
||
$v['apply_quit_time'] = (72*60*60 - (time() - $v['createtime']))/(60*60); //申请退出结束时间(时)
|
||
$v['user_code'] = model('Decorate')->user_decorate_detail($v['user_id'],6);
|
||
}
|
||
$data = [];
|
||
$data =[
|
||
'page' => $page,
|
||
'limit' => $page_limit,
|
||
'count' => $count,
|
||
'list' => $list,
|
||
];
|
||
return ['code' => 200, 'msg' => '获取成功', 'data' => $data];
|
||
}
|
||
|
||
/*
|
||
* quit_apply_audit
|
||
* 退出申请审核
|
||
* @param int $uid 用户id
|
||
* @param int $guild_id 公会id
|
||
* @param int $type 审核状态 1通过 2拒绝
|
||
*
|
||
*/
|
||
public function quit_apply_audit($uid,$apply_id,$type){
|
||
$user_info = db::name('user')->find($uid);
|
||
if(!$user_info){
|
||
return ['code' => 0, 'msg' => '参数错误', 'data' => null];
|
||
}
|
||
$apply_info = db::name('vs_guild_user_quit_log')->where(['id'=>$apply_id,'status'=>0])->find();
|
||
if(!$apply_info){
|
||
return ['code' => 0, 'msg' => '申请不存在', 'data' => null];
|
||
}
|
||
try {
|
||
Db::startTrans();
|
||
if($type == 1){
|
||
$update_data = [];
|
||
$update_data['status'] = 1;
|
||
$update_data['updatetime'] = time();
|
||
$res = db::name('vs_guild_user_quit_log')->where('id',$apply_id)->update($update_data);
|
||
if($res){
|
||
$update_data['quit_type'] = 1;
|
||
$update_data['quit_time'] = time();
|
||
$update_data['delete_time'] = time();
|
||
$update_data['updatetime'] = time();
|
||
$reslut = db::name('vs_guild_user')->where('id',$apply_info['guid'])->update($update_data);
|
||
if(!$reslut){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '审核失败', 'data' => null];
|
||
}
|
||
} else {
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '审核失败', 'data' => null];
|
||
}
|
||
//减少公会人数
|
||
db::name('vs_guild')->where('id', $apply_id)->setDec('num');
|
||
model('Tencent')->delete_group_member('g'.$apply_id, $apply_info['user_id']);
|
||
} else {
|
||
$update_data = [];
|
||
$update_data['status'] = 2;
|
||
$update_data['updatetime'] = time();
|
||
$res = db::name('vs_guild_user_quit_log')->where('id',$apply_id)->update($update_data);
|
||
if(!$res){
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '审核失败', 'data' => null];
|
||
}
|
||
}
|
||
Db::commit();
|
||
return ['code' => 1, 'msg' => '审核成功', 'data' => null];
|
||
}catch (\Exception $e) {
|
||
// 回滚事务
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '审核失败', 'data' => null];
|
||
}
|
||
}
|
||
|
||
//解散公会
|
||
public function diss_guild($uid,$guild_id){
|
||
$guild_info = db::name('vs_guild')->where(['id'=>$guild_id,'user_id'=>$uid,'delete_time'=>0])->find();
|
||
if(empty($guild_info)){
|
||
return ['code' => 0, 'msg' => '公会不存在!', 'data' => null];
|
||
}
|
||
try {
|
||
Db::startTrans();
|
||
//成员解散
|
||
db::name('vs_guild_user')->where(['guild_id'=>$guild_id,'status'=>1,'delete_time'=>0])->update(['delete_time'=>time(),'quit_type'=>3,'quit_time'=>time()]);
|
||
//解散公会
|
||
db::name('vs_guild')->where('id',$guild_id)->update(['delete_time'=>time(),'status'=>2]);
|
||
//解散群
|
||
model('Tencent')->delete_group('g'.$guild_id);
|
||
Db::commit();
|
||
return ['code' => 1, 'msg' => '解散成功!', 'data' => null];
|
||
}catch (\Exception $e) {
|
||
// 回滚事务
|
||
Db::rollback();
|
||
return ['code' => 0, 'msg' => '解散失败', 'data' => null];
|
||
}
|
||
}
|
||
|
||
/*
|
||
* 工会房间列表
|
||
* @param int $guild_id 公会id
|
||
* @param int $page 分页
|
||
* @param int $page_limit 每页数量
|
||
*/
|
||
public function get_guild_room_list($guild_id, $page = 1, $page_limit = 20){
|
||
$map = [];
|
||
$map['guild_id'] = $guild_id;
|
||
$map['status'] = 1;
|
||
$list = db::name('vs_guild_user')->where($map)->where("delete_time",0)->order('createtime desc')->page($page, $page_limit)->select();
|
||
$data = [];
|
||
foreach ($list as $k => $v){
|
||
//房间信息
|
||
$room_info = db::name('vs_room')->where(['id'=>$v['room_id'],'room_status'=>1,'delete_time'=>0])->find();
|
||
if($room_info){
|
||
$data[$k]['room_id'] = $room_info['id'];
|
||
$data[$k]['room_number'] = model('Decorate')->user_decorate_detail($room_info['id'],7);
|
||
$data[$k]['room_name'] = $room_info['room_name'];
|
||
$data[$k]['room_cover'] = localpath_to_netpath($room_info['room_cover']);
|
||
}
|
||
}
|
||
return ['code' => 1, 'msg' => '获取成功', 'data' => $data];
|
||
}
|
||
|
||
/*
|
||
* 工会补贴列表
|
||
* @param int $guild_id 公会id
|
||
* @param int $page 分页
|
||
* int $page_limit 每页数量
|
||
* @return array
|
||
*/
|
||
public function get_guild_subsidy_list($guild_id, $page = 1, $page_limit = 20){
|
||
$guild_info = db::name('vs_guild')->where(['id'=>$guild_id,'delete_time'=>0])->find();
|
||
if(empty($guild_info)){
|
||
return ['code' => 0, 'msg' => '公会不存在!', 'data' => null];
|
||
}
|
||
$list = db::name('vs_guild_subsidy')
|
||
->where("guild_id",$guild_id)
|
||
->order('createtime asc')
|
||
->page($page, $page_limit)
|
||
->select();
|
||
$count = db::name('vs_guild_subsidy')->where("guild_id",$guild_id)->count();
|
||
$data = [];
|
||
foreach ($list as $k => $v){
|
||
$data[$k]['time'] = date('m.d',strtotime($v['start_time']))."-".date('m.d',strtotime($v['end_time']));
|
||
$data[$k]['total_transaction'] = $v['total_transaction'];
|
||
$data[$k]['subsidy_amount'] = $v['subsidy_amount'];
|
||
$data[$k]['status_str'] = $v['status']==1 ? "已发放" : "未发放";
|
||
}
|
||
$return_data =[
|
||
'page' => $page,
|
||
'limit' => $page_limit,
|
||
'count' => $count,
|
||
'list' => $data,
|
||
];
|
||
return ['code' => 1, 'msg' => '获取成功', 'data' => $return_data];
|
||
}
|
||
/*
|
||
* 工会补贴
|
||
* @param int $guild_id 公会id
|
||
* @param int $page 分页
|
||
* int $page_limit 每页数量
|
||
* @return array
|
||
*/
|
||
public function get_guild_subsidy($guild_id){
|
||
$guild_info = db::name('vs_guild')->where(['id'=>$guild_id,'delete_time'=>0])->find();
|
||
if(empty($guild_info)){
|
||
return ['code' => 0, 'msg' => '公会不存在!', 'data' => null];
|
||
}
|
||
//规则
|
||
$data['rule'] = get_system_config_value('web_site').'/api/Page/page_show?id=15';
|
||
//上周流水
|
||
$week_start = date('Y-m-d 00:00:00', strtotime('last week Monday'));
|
||
$week_end = date('Y-m-d 23:59:59', strtotime('last week Monday +6 days'));
|
||
$guild_subsidy = db::name('vs_guild_subsidy')
|
||
->where(["guild_id"=>$guild_id,'start_time' => $week_start, 'end_time' => $week_end])
|
||
->find();
|
||
$data['list'] = [];
|
||
$data['list'][0]['name'] = "上周流水";
|
||
$data['list'][0]['total_transaction'] = isset($guild_subsidy['total_transaction'])?$guild_subsidy['total_transaction']:0;
|
||
$data['list'][0]['subsidy_amount'] = isset($guild_subsidy['subsidy_amount'])?$guild_subsidy['subsidy_amount']:0;
|
||
$data['list'][0]['status_str'] = isset( $guild_subsidy['status'])&& $guild_subsidy['status']==1 ? "已发放" : "未发放";
|
||
//本周流水
|
||
//本周的第一天
|
||
$week = strtotime(date('Y-m-d 00:00:00', strtotime('this week Monday')));
|
||
$guild_user = db::name('vs_guild_user')->where(['guild_id' => $guild_id])->select();
|
||
$transaction = 0;
|
||
foreach ($guild_user as $k => $v){
|
||
$week_start_time_seach = $week;
|
||
$week_end_time_seach = time();
|
||
if($v['createtime'] && $week_start_time_seach < $v['createtime']){
|
||
$week_start_time_seach = $v['createtime'];
|
||
}
|
||
if($v['quit_time'] && ($week_end_time_seach > $v['quit_time'])){
|
||
$week_end_time_seach = $v['quit_time'];
|
||
}
|
||
$transaction_one = db::name('vs_give_gift')
|
||
->whereIn('from_id',$v['room_id'])
|
||
->where(['from'=>['in',[2,3,6]],'createtime' => ['between', [$week_start_time_seach, $week_end_time_seach]]])
|
||
->sum('total_price');
|
||
$transaction += $transaction_one;
|
||
|
||
}
|
||
$total_transaction = $transaction;
|
||
$ss = 0;
|
||
if($total_transaction){
|
||
//根据工会流水 获取补贴比例 单位%
|
||
//获取补贴配置
|
||
$config = db::name('vs_guild_subsidy_config')->where(['status' => 1])->order('end_amount desc')->select(); //配置查询
|
||
foreach ($config as $k => $v) {
|
||
if ($total_transaction >= $v['end_amount']) {
|
||
$subsidy_ratio = $v['subsidy_ratio'];
|
||
$ss = ($total_transaction * ($subsidy_ratio / 100)) / get_system_config_value('rmb_coin_ratio');//转为钻石
|
||
break; // 找到匹配项后提前退出循环
|
||
}
|
||
}
|
||
}
|
||
//待开发
|
||
$data['list'][1]['name'] = "本周流水";
|
||
$data['list'][1]['total_transaction'] = isset($total_transaction)?$total_transaction:0;
|
||
$data['list'][1]['subsidy_amount'] = $ss;
|
||
$data['list'][1]['status_str'] = "未发放";
|
||
return ['code' => 1, 'msg' => '获取成功', 'data' => $data];
|
||
}
|
||
|
||
/*
|
||
* 获取公会成员列表
|
||
*/
|
||
public function get_guild_member_list($guild_id, $start_time = 0, $end_time = 0, $page = 1, $page_limit = 20)
|
||
{
|
||
$coin_consumption_type_array = model('common/UserWallet')->coin_consumption_type_array;
|
||
$coin_consumption_type_array = array_diff($coin_consumption_type_array, [model('common/UserWallet')::OPERATION_CONSUME]);
|
||
|
||
// 总消费 - 需要按时间限制并只统计加入工会后的消费
|
||
if (!$start_time || !$end_time) {
|
||
// 如果没有指定时间范围,则查询所有记录
|
||
$start_time_filter = 0;
|
||
$end_time_filter = time();
|
||
} else {
|
||
$start_time_filter = strtotime($start_time." 00:00:00");
|
||
$end_time_filter = strtotime($end_time." 23:59:59");
|
||
}
|
||
|
||
// 所有工会成员
|
||
$all_guild_user = db::name('vs_guild_user')->where(['guild_id' => $guild_id,'status'=>1,"delete_time"=>0])->select();
|
||
$total_consumption = 0;
|
||
foreach ($all_guild_user as $key => $value) {
|
||
// 计算时间范围:取工会加入时间和指定时间范围的较大值作为开始时间
|
||
$actual_start_time = max($value['createtime'], $start_time_filter);
|
||
$actual_end_time = $end_time_filter;
|
||
|
||
// 如果开始时间大于结束时间,则跳过该用户
|
||
if ($actual_start_time > $actual_end_time) {
|
||
continue;
|
||
}
|
||
|
||
$consumption = db::name('vs_user_money_log')
|
||
->whereIn('change_type',$coin_consumption_type_array)
|
||
->where(['money_type'=>1,'user_id' => $value['user_id']])
|
||
->where('createtime', '>=', $actual_start_time)
|
||
->where('createtime', '<=', $actual_end_time)
|
||
->sum('change_value');
|
||
$total_consumption = $total_consumption + ($consumption ?: 0);
|
||
}
|
||
|
||
if (!$start_time || !$end_time) {
|
||
// 如果没有指定时间范围,则查询所有记录
|
||
$start_time = 0;
|
||
$end_time = time();
|
||
}else{
|
||
$start_time = strtotime($start_time." 00:00:00");
|
||
$end_time = strtotime($end_time." 23:59:59");
|
||
}
|
||
|
||
// 查询成员列表及各自消费
|
||
$list = Db::name('vs_guild_user')
|
||
->alias('a')
|
||
->join('user b', 'a.user_id = b.id')
|
||
->join('vs_user_money_log c', 'a.user_id = c.user_id AND c.money_type = 1 AND c.change_type IN (' . implode(',', $coin_consumption_type_array) . ') AND c.createtime >= a.createtime' . ($start_time ? ' AND c.createtime >= ' . $start_time : '') . ($end_time ? ' AND c.createtime <= ' . $end_time : ''), 'LEFT')
|
||
->field('a.id, a.user_id, a.guild_id, a.room_id, a.status, a.is_deacon, b.nickname, b.avatar, b.user_code, a.createtime, a.apply_time, SUM(c.change_value) AS total_consumption')
|
||
->where(['a.guild_id' => $guild_id, 'a.status' => 1,'a.delete_time' => 0])
|
||
->group('a.user_id')
|
||
->order('a.id asc')
|
||
->page($page, $page_limit)
|
||
->select();
|
||
|
||
$count = Db::name('vs_guild_user')
|
||
->alias('a')
|
||
->join('user b', 'a.user_id = b.id')
|
||
->join('vs_user_money_log c', 'a.user_id = c.user_id AND c.money_type = 1 AND c.change_type IN (' . implode(',', $coin_consumption_type_array) . ') AND c.createtime >= a.createtime' . ($start_time ? ' AND c.createtime >= ' . $start_time : '') . ($end_time ? ' AND c.createtime <= ' . $end_time : ''), 'LEFT')
|
||
->field('a.id, a.user_id, a.guild_id, a.room_id, a.status, a.is_deacon, b.nickname, b.avatar, b.user_code, a.createtime, a.apply_time, SUM(c.change_value) AS total_consumption')
|
||
->where(['a.guild_id' => $guild_id, 'a.status' => 1,'a.delete_time' => 0])
|
||
->group('a.user_id')
|
||
->count();
|
||
|
||
$data = [];
|
||
foreach ($list as $k => $v) {
|
||
$data[$k]['id'] = $v['id'];
|
||
$data[$k]['guild_id'] = $v['guild_id'];
|
||
$data[$k]['user_id'] = $v['user_id'];
|
||
$data[$k]['nickname'] = $v['nickname'];
|
||
$data[$k]['avatar'] = localpath_to_netpath($v['avatar']);
|
||
$data[$k]['user_code'] = model('Decorate')->user_decorate_detail($v['user_id'], 6);
|
||
$data[$k]['is_deacon'] = $v['is_deacon'];
|
||
$data[$k]['total_consumption'] = $v['total_consumption'] ?: 0;
|
||
}
|
||
$return_data =[
|
||
'page' => $page,
|
||
'limit' => $page_limit,
|
||
'count' => $count,
|
||
'total_consumption' => $total_consumption,
|
||
'list' => $data,
|
||
];
|
||
return ['code' => 200, 'msg' => '获取成功', 'data' => $return_data];
|
||
}
|
||
|
||
/*
|
||
* 工会流水查询
|
||
* @return array
|
||
*/
|
||
public function get_guild_transaction($guild_id,$seach_start_time,$seach_end_time,$page,$page_limit){
|
||
$guild_info = db::name('vs_guild')->where(['id'=>$guild_id,'delete_time'=>0])->find();
|
||
if(empty($guild_info)){
|
||
return ['code' => 0, 'msg' => '公会不存在!', 'data' => null];
|
||
}
|
||
//工会总流水
|
||
$all_guild_room = db::name('vs_guild_user')->where(['guild_id' => $guild_id,'status'=>1,"delete_time"=>0])->select();
|
||
$total_transaction = 0;
|
||
foreach ($all_guild_room as $key => $value) {
|
||
$start_time = $seach_start_time;
|
||
$end_time = $seach_end_time;
|
||
if(!$start_time){
|
||
$start_time_all = $value['createtime'];
|
||
$end_time_all = time();
|
||
}else{
|
||
$start_time_all = strtotime($start_time." 00:00:00");
|
||
$end_time_all = strtotime($end_time." 23:59:59");
|
||
}
|
||
if($value['createtime'] && $start_time_all < $value['createtime']){
|
||
$start_time_all = $value['createtime'];
|
||
}
|
||
if($value['quit_time'] && ($end_time_all > $value['quit_time'])){
|
||
$end_time_all = $value['quit_time'];
|
||
}
|
||
$transaction = db::name('vs_give_gift')
|
||
->where('from_id',$value['room_id'])
|
||
->where(['from'=>['in',[2,3,6]],'createtime' => ['between', [$start_time_all, $end_time_all]]])
|
||
->sum('total_price');
|
||
$total_transaction = $total_transaction+$transaction;
|
||
}
|
||
//查询工会所有房间流水
|
||
$list = db::name('vs_guild_user')->where(['guild_id'=>$guild_id,'delete_time'=>0,'status'=>1,'room_id'=>['<>',0]])
|
||
->order('id asc')
|
||
->page($page, $page_limit)
|
||
->select();
|
||
|
||
$count = db::name('vs_guild_user')->where(['guild_id'=>$guild_id,'delete_time'=>0,'status'=>1,'room_id'=>['<>',0]])->count();
|
||
$room_data = [];
|
||
$i=0;
|
||
foreach ($list as $k=>$v){
|
||
$start_time = $seach_start_time;
|
||
$end_time = $seach_end_time;
|
||
if(!$start_time){
|
||
$start_time_seach = $value['createtime'];
|
||
$end_time_seach = time();
|
||
}else{
|
||
$start_time_seach = strtotime($start_time." 00:00:00");
|
||
$end_time_seach = strtotime($end_time." 23:59:59");
|
||
}
|
||
if($value['createtime'] && $start_time_all < $value['createtime']){
|
||
$start_time_seach = $value['createtime'];
|
||
}
|
||
if($value['quit_time'] && ($end_time_all > $value['quit_time'])){
|
||
$end_time_seach = $value['quit_time'];
|
||
}
|
||
$room_info = db::name('vs_room')->where(['id'=>$v['room_id'],'room_status'=>1,'delete_time'=>0])->find();
|
||
if($room_info){
|
||
$room_data[$i]['room_id'] = $room_info['id'];
|
||
$room_data[$i]['room_number'] = model('Decorate')->user_decorate_detail($room_info['id'],7);
|
||
$room_data[$i]['room_name'] = $room_info['room_name'];
|
||
$room_data[$i]['room_cover'] = localpath_to_netpath($room_info['room_cover']);
|
||
$room_data[$i]['total_price'] = db::name('vs_give_gift')
|
||
->where('from_id',$v['room_id'])
|
||
->where(['from'=>['in',[2,3,6]],'createtime' => ['between', [$start_time_seach, $end_time_seach]]])
|
||
->sum('total_price');
|
||
$i++;
|
||
}
|
||
|
||
}
|
||
$return_data = [];
|
||
$return_data =[
|
||
'page' => $page,
|
||
'limit' => $page_limit,
|
||
'count' => $count,
|
||
'total_transaction' => $total_transaction ? $total_transaction : 0,
|
||
'list' => $room_data,
|
||
];
|
||
return ['code' => 1, 'msg' => '获取成功', 'data' => $return_data];
|
||
}
|
||
|
||
/*
|
||
* 用户是否加入工会
|
||
* @param $user_id 用户id
|
||
* @param $guild_id 工会id
|
||
* @return array
|
||
*/
|
||
public function user_is_join($user_id){
|
||
$guild = Db::name('vs_guild_user')->where(['user_id'=>$user_id,'delete_time'=>0])->find();
|
||
if(empty($guild)){
|
||
return 0;
|
||
}else{
|
||
$guild_data['guild_id'] = $guild['guild_id'];
|
||
$guild_data['status'] = $guild['status'];
|
||
//1已通过 2已提交 3已拒绝
|
||
$guild_data['status_str'] = $guild['status'] == 1 ? '已通过' : ($guild['status'] == 2 ? '已提交' : '已拒绝');
|
||
$guild_data['is_deacon'] = $guild['is_deacon'];
|
||
return $guild_data;
|
||
}
|
||
}
|
||
|
||
/*
|
||
* 获取公会成员列表
|
||
*/
|
||
public function get_guild_user_list($guild_ids,$user_id,$page=1,$page_limit=30){
|
||
//获取$guild_id的第一个字母
|
||
$guild_id_first_letter = substr($guild_ids, 0, 1);
|
||
$guild_id = substr($guild_ids, 1);
|
||
if($guild_id_first_letter == 'g'){
|
||
$count = Db::name('vs_guild_user')
|
||
->alias('a')
|
||
->join('user b','a.user_id = b.id')
|
||
->where(['a.guild_id'=>$guild_id,'a.status'=>1,'a.delete_time'=>0])
|
||
->count();
|
||
$list = Db::name('vs_guild_user')
|
||
->alias('a')
|
||
->join('user b', 'a.user_id = b.id')
|
||
->field('a.id, a.user_id, a.guild_id, b.nickname, b.avatar, b.user_code, a.createtime')
|
||
->where(['a.guild_id' => $guild_id, 'a.status' => 1,'a.delete_time' => 0])
|
||
->order('a.id asc')
|
||
->page($page, $page_limit)
|
||
->select();
|
||
}else{
|
||
$myFamilyPid = db::name('vs_family')->where(['id' => $guild_id])->value('user_id');
|
||
$list = db::name('vs_family')->alias('a')
|
||
->join('user b','a.user_id = b.id')
|
||
->field('b.is_online,b.market_value,b.nickname,b.avatar,b.user_code,a.user_id,a.createtime')
|
||
->where(['a.pid' => $myFamilyPid,'a.deletetime' => 0,'a.type' => 0])
|
||
->order('a.id asc')
|
||
->page($page, $page_limit)
|
||
->select();
|
||
|
||
$count = db::name('vs_family')->alias('a')
|
||
->join('user b','a.user_id = b.id')
|
||
->where(['a.pid' => $myFamilyPid,'a.deletetime' => 0,'a.type' => 0])
|
||
->count();
|
||
}
|
||
if($list){
|
||
$member_array = array_column($list, 'user_id');
|
||
$member_array_str = [];
|
||
foreach ($member_array as $k=> $v){
|
||
$member_array_str[] = 'u' . $v;
|
||
}
|
||
$group_member_info = model('Tencent')->get_group_member_info($guild_ids,$member_array_str);
|
||
if($group_member_info['code'] == 0){
|
||
return V($group_member_info['code'],$group_member_info['msg'], $group_member_info['data']);
|
||
}
|
||
$member = [];
|
||
foreach ($group_member_info['data'] as $k=> $v){
|
||
$member[$v['Member_Account']] = $v['Role'];
|
||
}
|
||
//Owner(群主),Admin(群管理员),Member(普通群成员),NotMember(非群成员)。
|
||
$role = [
|
||
'Owner'=>'群主',
|
||
'Admin'=>'群管理员',
|
||
'Member'=>'普通群成员',
|
||
'NotMember'=>'非群成员'
|
||
];
|
||
foreach ($list as $key => $value) {
|
||
if($user_id == $value['user_id']){
|
||
$list[$key]['is_self'] = 1;
|
||
}else{
|
||
$list[$key]['is_self'] = 0;
|
||
}
|
||
$list[$key]['user_code'] = model('Decorate')->user_decorate_detail($value['user_id'], 6);
|
||
//角色:
|
||
$list[$key]['role'] = $member['u'.$value['user_id']];
|
||
$list[$key]['role_str'] = $role[$list[$key]['role']];
|
||
$list[$key]['createtime'] = date('Y-m-d H:i:s',$value['createtime']);
|
||
//当前用户是否在房间
|
||
$in_room = db::name('vs_room_visitor')->alias('a')
|
||
->join('vs_room b', 'a.room_id = b.id')
|
||
->field('a.room_id')
|
||
->where(['b.type_id' =>['<>',6]])
|
||
->where(['a.user_id' => $value['user_id'], 'a.is_delete' => 1])
|
||
->find();
|
||
$list[$key]['in_room_id'] = $in_room['room_id'] ?? 0;
|
||
}
|
||
}
|
||
|
||
$return_data =[
|
||
'page' => $page,
|
||
'limit' => $page_limit,
|
||
'count' => $count,
|
||
'list' => $list,
|
||
];
|
||
|
||
return ['code' => 1, 'msg' => '获取成功', 'data' => $return_data];
|
||
|
||
}
|
||
/*
|
||
* 群聊详情
|
||
*/
|
||
public function guild_info($guild_ids,$user_id=0){
|
||
if(!$guild_ids){
|
||
return ['code' => 0, 'msg' => '参数错误'];
|
||
}
|
||
//获取$guild_id的第一个字母
|
||
$guild_id_first_letter = substr($guild_ids, 0, 1);
|
||
$guild_id = substr($guild_ids, 1);
|
||
if($guild_id_first_letter == 'g'){
|
||
$guild_info = db::name('vs_guild')->where(['id'=>$guild_id,'status'=>1,'delete_time'=>0])->find();
|
||
$cover = $guild_info['cover'];
|
||
}else{
|
||
$guild_info = db::name('vs_family')->where(['id'=>$guild_id])->find();
|
||
$cover = db::name('user')->where(['id'=>$guild_info['user_id']])->value('avatar');
|
||
}
|
||
|
||
$group_member_info = model('Tencent')->get_group_info($guild_ids);
|
||
if($group_member_info['code']!=1){
|
||
return ['code' => 0, 'msg' => '群聊不存在',null];
|
||
}
|
||
$user_list = $this->get_guild_user_list($guild_ids,0,1,10);
|
||
$is_deacon = 2;
|
||
if($guild_info['user_id'] ==$user_id){
|
||
$is_deacon = 1;
|
||
}
|
||
$return_data =[
|
||
'guild_id' => $guild_ids,
|
||
'guild_cover' => $cover,
|
||
'is_deacon' => $is_deacon,
|
||
'user_list' => $user_list['data']['list'],
|
||
'name' => $group_member_info['data'][0]['Name'],
|
||
'notification' => $group_member_info['data'][0]['Notification']
|
||
];
|
||
return ['code' => 1, 'msg' => '获取成功', 'data' => $return_data];
|
||
|
||
}
|
||
/*
|
||
* 设置群聊信息
|
||
*/
|
||
public function set_guild_info($guild_id,$name,$notice,$avatar){
|
||
$return = model('Tencent')->modify_group_base_info($guild_id, $name,$avatar, $notice);
|
||
return ['code' => $return['code'], 'msg' => $return['msg'], 'data' => $return['data']];
|
||
}
|
||
|
||
/*
|
||
* 我的公会
|
||
* @param $id
|
||
* @param $user_id
|
||
*/
|
||
public function my_guild($user_id)
|
||
{
|
||
$guild_user = Db::name('vs_guild_user')->where(['user_id'=>$user_id,'status'=>1,'delete_time'=>0])->find();
|
||
if(empty($guild_user)){
|
||
return ['code' => 0, 'msg' => '您没有加入任何公会', 'data'=>null];
|
||
}
|
||
$info = Db::name('vs_guild')
|
||
->field('id,guild_special_id,user_id,guild_name,cover,num,intro,createtime,income')
|
||
->where(['id'=>$guild_user['guild_id'],'is_show'=>1,'delete_time'=>0])
|
||
->find();
|
||
$guild_data = [];
|
||
if($info){
|
||
//用户信息
|
||
$user_data = Db::name('user')->where(['id'=>$user_id])->field('id,nickname,avatar')->find();
|
||
$guild_data['user_id'] = $user_data['id'];
|
||
$guild_data['user_nickname'] = $user_data['nickname'];
|
||
$guild_data['user_code'] = model('Decorate')->user_decorate_detail($user_id, 6);
|
||
$guild_data['user_avatar'] = localpath_to_netpath($user_data['avatar']);
|
||
$guild_data['is_leader'] = $info['user_id'] == $user_id ? 1 : 0;//当前用户是否是会长
|
||
$guild_data['guild_id'] = $info['id'];
|
||
$guild_data['guild_code'] = $info['guild_special_id'];
|
||
$guild_data['guild_name'] = $info['guild_name'];
|
||
//加入公会时间
|
||
$guild_data['join_time'] = date('Y-m-d H:i:s',$guild_user['apply_time']);
|
||
//本周金额
|
||
//本周的第一天
|
||
$week = strtotime(date('Y-m-d 00:00:00', strtotime('this week Monday')));
|
||
$week_end_time = time();
|
||
$guild_data['week_income'] = db::name('vs_give_gift')
|
||
->whereIn('gift_user',$user_id)
|
||
->where(['createtime' => ['between', [$week, $week_end_time]]])
|
||
->sum('total_price');
|
||
//厅主收益
|
||
$guild_data['room_author_ratio'] = $guild_user['room_id']==0 ? 0 : get_system_config_value('room_author_ratio');
|
||
//礼物分成
|
||
$guild_data['settlement_ratio'] = $guild_user['settlement_ratio'];
|
||
//付费退出公会所需金
|
||
$guild_data['quit_guild_gold'] = get_system_config_value('quit_guild_gold');
|
||
//工会群组ID
|
||
$guild_data['guild_group_id'] = "g".$info['id'];
|
||
//工会基础信息
|
||
$guild_data_info = Db::name('vs_guild_data')->where(['guild_id'=>$info['id']])->find();
|
||
$guild_data['agreement'] = $guild_data_info['agreement'] ?? '';
|
||
}
|
||
return ['code'=>1,'msg'=>'获取成功','data'=>$guild_data];
|
||
}
|
||
|
||
/*
|
||
* 加入工会——不用申请直接加入
|
||
*/
|
||
public function join_guild($guild_id,$user_id=0)
|
||
{
|
||
$user_info = model('User')->get_user_info($user_id);
|
||
if(!$user_info){
|
||
return ['code' => 0, 'msg' => '参数错误', 'data' => null];
|
||
}
|
||
if($user_info['is_real']!=1 || empty($user_info['card_id'])){
|
||
return ['code' => 0, 'msg' => '请先实名认证', 'data' => null];
|
||
}
|
||
//公会是否存在
|
||
$guild_info = db::name('vs_guild')->where(['id'=>$guild_id,'delete_time'=>0])->find();
|
||
if(!$guild_info){
|
||
return ['code' => 0, 'msg' => '该公会不存在', 'data' => null];
|
||
}
|
||
$is_check_join = Db::name('vs_guild_user')->where(['user_id'=>$user_id,'delete_time'=>0])->find();
|
||
if($is_check_join && $is_check_join['guild_id']!=$guild_id){
|
||
return ['code'=>0,'msg'=>'您已加入别的工会,请先退出公会再加入', 'data' => null];
|
||
}
|
||
if($is_check_join && $is_check_join['guild_id']==$guild_id && $is_check_join['status']==1){
|
||
return ['code'=>0,'msg'=>'您已加入该工会', 'data' => null];
|
||
}
|
||
if($is_check_join && $is_check_join['guild_id']==$guild_id && $is_check_join['status']==2){
|
||
return ['code'=>0,'msg'=>'您已提交申请,请耐心等待', 'data' => null];
|
||
}
|
||
//是否被踢出过
|
||
$ti_chu = db::name('vs_guild_user')->where(['user_id'=>$user_id,'guild_id'=>$guild_id,'delete_time'=>['<>',0],'quit_type'=>2])->find();
|
||
if(!empty($ti_chu)){
|
||
return ['code' => 0, 'msg' => '已被踢出,禁止加入!', 'data' => null];
|
||
}
|
||
//退出公会是否超过30天
|
||
$map = [];
|
||
$map['user_id'] = $user_id;
|
||
$map['delete_time'] = ['<>',0];
|
||
$map['quit_type'] = 1;
|
||
$quit_guild_info = Db::name('vs_guild_user')->where($map)->order('quit_time', 'desc')->field('quit_time,guild_id,quit_type')->find();
|
||
if(!empty($quit_guild_info)) {
|
||
$quit_time = empty($quit_guild_info['quit_time']) ? 0 : $quit_guild_info['quit_time'];
|
||
$quit_type = $quit_guild_info['quit_type'];
|
||
if($quit_guild_info['guild_id'] != $guild_id) {
|
||
$last_time = 30 * 24 * 3600;
|
||
if((time() - $last_time) <= $quit_time) {
|
||
return ['code' => 0, 'msg' => '退出公会未超过30天,不能重新加入其他公会', 'data' => null];
|
||
}
|
||
}
|
||
}
|
||
//是否有房间
|
||
$rid = 0;
|
||
$room_info = db::name('vs_room')->where('user_id', $user_id)->find();
|
||
if($room_info){
|
||
$rid = $room_info['id'];
|
||
}
|
||
$insert_data = [];
|
||
$insert_data['user_id'] = $user_id;
|
||
$insert_data['guild_id'] = $guild_id;
|
||
$insert_data['room_id'] = $rid;
|
||
$insert_data['status'] = 1;
|
||
$insert_data['is_deacon'] = 2;
|
||
$insert_data['createtime'] = time();
|
||
$insert_data['apply_time'] = time();
|
||
$insert_data['is_show_room'] = 1;
|
||
//结算比例
|
||
$configs = get_system_config();
|
||
//收礼人最终的收益比例 = 未加入工会的收益 + 加入工会的收益
|
||
$insert_data['settlement_ratio'] = $configs['room_gift_ratio'] + $configs['room_gift_guild_ratio'];
|
||
$reslut = db::name('vs_guild_user')->insert($insert_data);
|
||
if($reslut){
|
||
//增加公会人数
|
||
db::name('vs_guild')->where('id', $guild_info['id'])->setInc('num', 1);
|
||
//拉用户进入工会群聊
|
||
model('Tencent')->add_group_member('g'.$guild_id, $user_id);
|
||
model('Tencent')->send_group_system_notification('g'.$guild_id,"欢迎".$user_info['nickname'].'加入公会');
|
||
//发系统信息
|
||
$content = "恭喜加入{$guild_info['guild_name']}工会,您的个人收益增加{$configs['room_gift_guild_ratio']}%,目前总收益{$insert_data['settlement_ratio']}%";
|
||
model('api/UserMessage')->send_system_message($user_id, "加入公会成功通知", $content, 1);
|
||
return ['code' => 1, 'msg' => '提交成功', 'data' => null];
|
||
}else{
|
||
return ['code' => 0, 'msg' => '提交失败', 'data' => null];
|
||
}
|
||
}
|
||
|
||
//工会邀请用户处理
|
||
public function guild_invite_handle($user_id,$message_id,$status){
|
||
$guild_user_invited = Db::name('vs_guild_user_invited')->where(['message_id'=>$message_id,'delete_time'=>0])->find();
|
||
if(empty($guild_user_invited)){
|
||
return ['code' => 0, 'msg' => '邀请信息不存在', 'data' => null];
|
||
}
|
||
if($user_id != $guild_user_invited['user_id']){
|
||
return ['code' => 0, 'msg' => '您没有权限处理此信息', 'data' => null];
|
||
}
|
||
if($guild_user_invited['status'] != 0){
|
||
return ['code' => 0, 'msg' => '此邀请信息已处理过', 'data' => null];
|
||
}
|
||
if($status == 1){
|
||
//加入工会
|
||
$res = $this->join_guild($guild_user_invited['guild_id'],$guild_user_invited['user_id']);
|
||
if($res['code'] != 1){
|
||
return ['code' => 0, 'msg' => $res['msg'], 'data' => null];
|
||
}
|
||
$guild_user_invited_data = [
|
||
'status' => 1,
|
||
'apply_time' => time(),
|
||
'updatetime' => time(),
|
||
];
|
||
}else{
|
||
$guild_user_invited_data = [
|
||
'status' => 2,
|
||
'apply_time' => time(),
|
||
'updatetime' => time(),
|
||
];
|
||
}
|
||
$guild_user_invited_res = Db::name('vs_guild_user_invited')->where(['message_id'=>$message_id,'delete_time'=>0])->update($guild_user_invited_data);
|
||
if($guild_user_invited_res){
|
||
return ['code' => 1, 'msg' => '处理成功', 'data' => null];
|
||
}else{
|
||
return ['code' => 0, 'msg' => '处理失败', 'data' => null];
|
||
}
|
||
}
|
||
}
|