邀请加入公会功能--受邀申请处理

This commit is contained in:
2025-11-21 11:15:16 +08:00
parent afb6ee48f7
commit 81897a34b4
4 changed files with 138 additions and 6 deletions

View File

@@ -41,7 +41,7 @@ class Guild extends BaseCom
$guild_id = input('guild_id', 0);
$key_name = "api:guild:join_guild:".$uid;
redis_lock_exit($key_name);
$reslut = model('Guild')->join_guild($guild_id,$uid);
$reslut = model('Guild')->join_guild_apply($guild_id,$uid);
redis_unlock($key_name);
return V($reslut['code'],$reslut['msg'], $reslut['data']);
}
@@ -226,4 +226,15 @@ class Guild extends BaseCom
return V($reslut['code'],$reslut['msg'], $reslut['data']);
}
/*
* 受邀申请处理
*/
public function invite_apply_handle(){
$uid = $this->uid;
$apply_id = input('apply_id', 0);
$type = input('type', 0);
$reslut = model('Guild')->guild_invite_handle($uid, $apply_id, $type);
return V($reslut['code'],$reslut['msg'], $reslut['data']);
}
}

View File

@@ -115,7 +115,7 @@ class Guild extends Model
/*
* 加入工会申请
*/
public function join_guild($guild_id,$user_id=0)
public function join_guild_apply($guild_id,$user_id=0)
{
$user_info = model('User')->get_user_info($user_id);
if(!$user_info){
@@ -286,7 +286,9 @@ class Guild extends Model
//增加公会人数
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('Tencent')->add_group_member('g'.$is_operate['guild_id'], $is_operate['user_id']);
model('Tencent')->send_group_system_notification('g'.$is_operate['guild_id'],"欢迎".$user_nickname.'加入公会');
}else if($type == 2){//拒绝
$update_data = [];
$update_data['status'] = 3;
@@ -1037,4 +1039,122 @@ class Guild extends Model
}
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'].'加入公会');
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];
}
}
}

View File

@@ -43,19 +43,19 @@ class UserMessage extends Model
{
//获取系统消息
$system_message = db::name('system_message')
->where('type', 1)//1系统消息 3公告下的房间推荐4公告下的活动'
->where(['type'=>[1, 6]])//1系统消息 3公告下的房间推荐4公告下的活动' 6工会邀请
->where('FIND_IN_SET(:user_id, receiving_id)', ['user_id' => $uid])
->count();
//自己已经阅读过的信息
$user_read_message = db::name('user_message')
->where(['user_id' => $uid,'type' => 1])
->where(['user_id' => $uid,'type' => [1, 6]])
->count();
$system_no_read_count = $system_message - $user_read_message;
$system_last_message = db::name('system_message')
->field('id,type,title,content,url')
->where('type', 1)//1系统消息 3公告下的房间推荐4公告下的活动'
->where('type', [1, 6])//1系统消息 3公告下的房间推荐4公告下的活动' 6工会邀请
->where('FIND_IN_SET(:user_id, receiving_id)', ['user_id' => $uid])
->order('id desc')
->find() ?? null;
@@ -104,7 +104,7 @@ class UserMessage extends Model
if($type == 1){
$where['type'] = ['in' , [1, 5, 6]];
$where['type'] = ['in' , [1, 6]];
}else{
$where['type'] = ['in' , [3, 4]];
}

View File

@@ -45,6 +45,7 @@ class SystemMessage extends GuildAdmin
$page_limit = input('page_limit', 30);
$where['delete_time'] = 0;
$where['receiving_id'] = $guild_id;
$where['type'] = 5;
$count = db::name('system_message')->where($where)->count();
$lists = db::name('system_message')->where($where)->page($page, $page_limit)->select();