['like',$search.'%']]; //通过工会ID搜索 } $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) ->order('income desc') ->page($page,$limit) ->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' => $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($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(); $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($uid, $apply_id, $type){ $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 != $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(); $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); }else if($type == 2){//拒绝 $update_data = []; $update_data['status'] = 3; $update_data['updatetime'] = time(); $update_data['apply_time'] = time(); $reslut = db::name('user_guild')->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]; } //减少公会人数 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['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,$start_time=0,$end_time=0,$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]; } //工会总流水 $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) { 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('coin desc') ->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){ 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_id = Db::name('vs_guild_user')->where(['user_id'=>$user_id,'status'=>1,'delete_time'=>0])->value('guild_id'); if(empty($guild_id)){ return 0; }else{ return $guild_id; } } /* * 获取公会成员列表 */ public function get_guild_user_list($guild_id,$user_id,$page=1,$page_limit=30){ $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(); $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('g' .$guild_id,$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_id,$user_id=0){ if(!$guild_id){ return ['code' => 0, 'msg' => '参数错误']; } $guild_info = db::name('vs_guild')->where(['id'=>$guild_id,'status'=>1,'delete_time'=>0])->find(); $group_member_info = model('Tencent')->get_group_info('g'.$guild_id); if($group_member_info['code']!=1){ return ['code' => 0, 'msg' => '群聊不存在',null]; } $user_list = $this->get_guild_user_list($guild_id,0,1,10); $is_deacon = 2; if($guild_info['user_id'] ==$user_id){ $is_deacon = 1; } $return_data =[ 'guild_id' => $guild_id, 'guild_cover' => $guild_info['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('g'.$guild_id, $name,$avatar, $notice); return ['code' => $return['code'], 'msg' => $return['msg'], 'data' => $return['data']]; } }