Files
yusheng-php/application/api/model/Guild.php

916 lines
41 KiB
PHP
Raw Normal View History

2025-08-07 20:21:47 +08:00
<?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,$limit=10,$search='',$user_id=0)
{
$where ="1=1";
if ($search) {
$where = ['guild_special_id'=>['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(),'is_show'=>2,'num'=>0,'guild_special_id'=>""]);
//解散群
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', strtotime('last monday'));
$week_end = date('Y-m-d', strtotime('last 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', strtotime('this week Monday')));
$guild_user = db::name('vs_guild_user')->where(['guild_id' => $guild_id,'status'=>1,"delete_time"=>null])->select();
$guild_user_ids = array_column($guild_user,'room_id');
$total_transaction = db::name('vs_give_gift')
->where(['from'=>2,'from_id' => ['in',$guild_user_ids],'createtime' => ['between', [$week, time()]]])
->sum('total_price');
$ss = 0;
if($total_transaction){
//根据工会流水 获取补贴比例 单位%
$subsidy_config = db::name('vs_guild_subsidy_config')->where('start_amount <= '. $total_transaction)
->where('end_amount > '. $total_transaction)->getField('subsidy_ratio');
$ss = $total_transaction * ($subsidy_config / 100);
}
//待开发
$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]);
// // 获取所有工会成员的 user_id
// $all_guild_users = Db::name('vs_guild_user')
// ->where(['guild_id' => $guild_id, 'status' => 1, 'delete_time' => 0])
// ->column('user_id');
//
// // 批量查询总消费
// $total_consumption = Db::name('vs_user_money_log')
// ->whereIn('change_type', $coin_consumption_type_array)
// ->where(['money_type' => 1, 'createtime' => ['between', [$start_time, $end_time]]])
// ->whereIn('user_id', $all_guild_users)
// ->sum('change_value');
//总消费
//所有工会成员
$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) {
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");
}
$consumption = db::name('vs_user_money_log')
->whereIn('change_type',$coin_consumption_type_array)
->where(['money_type'=>1,'user_id' => $value['user_id'],'createtime' => ['between', [$start_time_all, $end_time_all]]])
->sum('change_value');
$total_consumption = $total_consumption+$consumption;
}
if (!$start_time || !$end_time) {
$start_time = strtotime('-1 month'); // 默认最近一个月
$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 BETWEEN ' . $start_time . ' AND ' . $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 BETWEEN ' . $start_time . ' AND ' . $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");
}
$transaction = db::name('vs_give_gift')
->where('from_id',$value['room_id'])
->where(['from'=>2,'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 = $v['createtime'];
$end_time = time();
}else{
$start_time = strtotime($start_time." 00:00:00");
$end_time = strtotime($end_time." 23:59:59");
}
$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'=>2,'createtime' => ['between', [$start_time, $end_time]]])
->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']];
}
}