From 83e18a669a7d35167c889fa2c458d04f46550b6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=8D=8E=E6=B8=85?= <18691022700@163.com> Date: Wed, 26 Nov 2025 17:20:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=B6=E6=97=8F=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/api/controller/Family.php | 43 +++++++++ application/api/model/Family.php | 132 ++++++++++++++++++++++++++ application/api/model/Login.php | 4 + application/api/model/Sign.php | 23 ++++- application/api/model/UserData.php | 4 + 5 files changed, 204 insertions(+), 2 deletions(-) create mode 100644 application/api/controller/Family.php create mode 100644 application/api/model/Family.php diff --git a/application/api/controller/Family.php b/application/api/controller/Family.php new file mode 100644 index 0000000..5e28794 --- /dev/null +++ b/application/api/controller/Family.php @@ -0,0 +1,43 @@ +myFamily($this->uid); + + return V($reslut['code'], $reslut['msg'], $reslut['data']); + } + + + //我加入的家族 + public function myJoinFamily() + { + $user_id = db::name('vs_user_sign')->where(['sign_user_id' => $this->uid,'end_time' => ['>',time()]])->value('parent_user_id'); + if(!$user_id){ + return V(0, '没有加入家族'); + } + $reslut = model('Family')->myFamily($user_id); + return V($reslut['code'], $reslut['msg'], $reslut['data']); + } + + + //家族收益详情 + public function familyEarnings() + { + $user_id = input('user_id',0);//族长 id + $reslut = db::name('vs_user_sign_earnings')->alias('a') + ->join('user b','a.sign_user_id = b.id') + ->join('vs_gift g','a.gift_id = g.gid') + ->field('b.nickname,b.avatar,b.user_code,a.earnings,a.createtime,g.gift_name,g.gift_price') + ->where(['a.user_id' => $user_id]) + ->select(); + return V(1, '成功', $reslut); + } +} \ No newline at end of file diff --git a/application/api/model/Family.php b/application/api/model/Family.php new file mode 100644 index 0000000..95b5359 --- /dev/null +++ b/application/api/model/Family.php @@ -0,0 +1,132 @@ +where('id', $user_id)->value('nickname').'的家族'; + $data = [ + 'name' => $name, + 'user_id' => $user_id, + 'type' => 1, + 'createtime' => time(), + ]; + //开启事务 + db::startTrans(); + $id = db::name('family')->insertGetId($data); + if (!$id) { + db::rollback(); + return ['code' => 0, 'msg' => '创建失败', 'data' => null]; + } + $reslut = model('api/Tencent')->create_group($user_id,'f'.$id,"Public","",$name); + if ($reslut['code'] == 0) { + db::rollback(); + return ['code' => 0, 'msg' => '创建失败,请稍后再试!', 'data' => null]; + } + //发送系统消息 + model('api/Tencent')->send_group_system_notification('f'.$id,"家族创建成功"); + //查找他是否有签约 用户 + $sign_user = db::name('vs_user_sign')->where(['parent_user_id' => $user_id, 'end_time' => ['>',time()]])->select(); + if($sign_user){ + //拉入群聊 + foreach ($sign_user as $k => $v){ + model('api/Tencent')->add_group_member('f'.$id, $v['sign_user_id']); + $data[$k] = [ + 'name' => $name, + 'pid' => $user_id, + 'user_id' => $v['sign_user_id'], + 'createtime' => time(), + ]; + db::name('vs_family')->insert($data[$k]); + } + //发送系统消息 + model('api/Tencent')->send_group_system_notification('f'.$id,"欢迎加入家族"); + } + + db::commit(); + return ['code' => 1, 'msg' => '创建成功', 'data' => ['id' => $id]]; + } + + + /* + * 我的家族 + * @param $user_id int 用户id(创建者id) + */ + public function myFamily($user_id) + { + $myFamily = db::name('vs_family')->where(['user_id' => $user_id,'type' => 1])->find(); + if($myFamily){ + $myFamily['group_id'] = 'f'.$myFamily['id']; + $myFamily['group_owner_info'] = db::name('user')->where('id',$myFamily['user_id'])->field('nickname,avatar')->find(); + $myFamily['group_owner_info']['dress'] = model('api/Decorate')->user_decorate_detail($user_id,1); + $myFamily['group_owner_info']['user_code'] = model('api/Decorate')->user_decorate_detail($user_id,6); + $myFamily['group_owner_info']['icon'][0] = model('api/UserData')->user_wealth_icon($user_id);//财富图标 + $myFamily['group_owner_info']['icon'][1] = model('api/UserData')->user_charm_icon($user_id);//魅力图标 + //判断是否是歌手 如果是 返回等级图标 + $isSinnger = db::name('vs_singer')->where(['user_id' => $user_id,'status' => 1])->value('level'); + if($isSinnger){ + $myFamily['group_owner_info']['icon'][2] = db::name('vs_singer_level')->where(['level' => $isSinnger,'deletetime' => 0])->value('image');//等级图标 + } + $Nobility = model('api/Nobility')->getUserNobilityInfo($user_id); + $myFamily['group_owner_info']['mic_cycle'] = model('api/Decorate')->user_decorate_detail($user_id,3); + $myFamily['group_owner_info']['nobility_image'] = $Nobility['play_image']; + $myFamily['group_owner_info']['nickname_color'] = $Nobility['nick_name_color']; + + $myFamily['group_members_num'] = db::name('vs_user_sign')->where(['parent_user_id' => $myFamily['user_id'],'end_time' => ['>',time()]])->count(); + $myFamily['group_earnings'] = db::name('vs_user_sign_earnings')->where('user_id',$myFamily['user_id'])->sum('earnings'); + + $lists= db::name('vs_user_sign')->alias('a') + ->join('user b','a.sign_user_id = b.id') + ->field('b.market_value,b.nickname,b.avatar,b.user_code,a.sign_user_id as user_id,a.type,a.end_time,a.sign_user_type') + ->where(['parent_user_id' => $myFamily['user_id'],'end_time' => ['>',time()]]) + ->select(); + if($lists){ + foreach ($lists as $k => $v){ + $lists[$k]['dress'] = model('api/Decorate')->user_decorate_detail($v['user_id'],1); + $lists[$k]['user_code'] = model('api/Decorate')->user_decorate_detail($v['user_id'],6); + $lists[$k]['icon'][0] = model('api/UserData')->user_wealth_icon($v['user_id']);//财富图标 + $lists[$k]['icon'][1] = model('api/UserData')->user_charm_icon($v['user_id']);//魅力图标 + //判断是否是歌手 如果是 返回等级图标 + $isSinnger = db::name('vs_singer')->where(['user_id' => $v['user_id'],'status' => 1])->value('level'); + if($isSinnger){ + $lists[$k]['icon'][2] = db::name('vs_singer_level')->where(['level' => $isSinnger,'deletetime' => 0])->value('image');//等级图标 + } + $Nobility = model('api/Nobility')->getUserNobilityInfo($v['user_id']); + $lists[$k]['mic_cycle'] = model('api/Decorate')->user_decorate_detail($v['user_id'],3); + $lists[$k]['nobility_image'] = $Nobility['play_image']; + $lists[$k]['nickname_color'] = $Nobility['nick_name_color']; + if($v['sign_user_type'] == 0){ + $lists[$k]['free_renewal'] = max((3 - $v['type']), 0); + }else{ + $lists[$k]['free_renewal'] = 0; + } + $lists[$k]['today_earnings'] = db::name('vs_user_money_log') + ->where(['user_id' => $v['user_id'],'money_type' => 2,'change_type' =>11,'createtime' => ['between',[strtotime(date('Y-m-d')),time()]]]) + ->sum('change_value');//今日收益 + //昨日收益 + $lists[$k]['yesterday_earnings'] = db::name('vs_user_money_log') + ->where(['user_id' => $v['user_id'],'money_type' => 2,'change_type' =>11,'createtime' => ['between',[strtotime(date('Y-m-d',strtotime('-1 day'))),strtotime(date('Y-m-d'))]]]) + ->sum('change_value'); + + } + } + + $myFamily['group_members_lists'] = $lists ; + } + return ['code' => 1, 'msg' => '成功', 'data' => $myFamily]; + } + + + + +} \ No newline at end of file diff --git a/application/api/model/Login.php b/application/api/model/Login.php index 5abbb0a..56967a0 100644 --- a/application/api/model/Login.php +++ b/application/api/model/Login.php @@ -236,6 +236,10 @@ class Login extends Model $return_res[0]['is_can_chat'] = 1; } $return_res[0]['can_chat_money'] = $config_money; + $is_create_family = db::name('vs_family')->where(['user_id' => $user_info['id'],'type' => 1])->find(); + if(!$is_create_family){ + model('Family')->createFamily($user_info['id']); + } return ['code' => 1, 'msg' => '登录成功', 'data' => $return_res]; }else{ diff --git a/application/api/model/Sign.php b/application/api/model/Sign.php index 47f7cc6..3326b40 100644 --- a/application/api/model/Sign.php +++ b/application/api/model/Sign.php @@ -202,6 +202,24 @@ class Sign extends Model db::rollback(); return ['code' => 0, 'msg' => '网络错误,请重试', 'data' => null]; } + //查看当前出价用户是否创建家族 + $is_create_family = db::name('vs_family')->where(['user_id' => $max_sign_user['user_id'],'type' => 1])->find(); + if($is_create_family){ + //拉进家族和群聊 + $data2 = [ + 'name' => $is_create_family['name'], + 'pid' => $max_sign_user['user_id'], + 'user_id' => $max_sign_user['sign_user_id'], + 'createtime' => time(), + ]; + $result22 = db::name('vs_family')->insert($data2); + if(!$result22){ + db::rollback(); + return ['code' => 0, 'msg' => '网络错误,请重试!!', 'data' => null]; + } + //拉入群聊 + model('Tencent')->add_group_member('f'.$is_create_family['id'], $max_sign_user['sign_user_id']); + } //其他的出价退回到用户的钱包 这个是为了防止上面并发产生的没退款用户 $refund = db::name('vs_user_sign_auction')->where(['room_id' => $room_id,'sign_time' => $sign_time,'type' => 0])->select(); @@ -239,14 +257,15 @@ class Sign extends Model //签过 给被签约的人分七天给他 // 数据插入 循环插入7条数据 day 取值是今天开始连续七天 的每一天的值 到天 for ($i = 0; $i < 7; $i++){ - $data = [ + $data1 = [ 'user_id' => $max_sign_user['sign_user_id'], 'value' => round($shouyizs/7, 4), 'day' => date('Y-m-d', strtotime("+$i days")), // 从今天开始连续七天的日期 + 'times' => $i+1, 'createtime' => time() ]; // 插入数据库 - $result[$i] = db::name('vs_user_sign_task')->insert($data); + $result[$i] = db::name('vs_user_sign_task')->insert($data1); if(!$result[$i]){ db::rollback(); return ['code' => 0, 'msg' => '网络错误,请重试', 'data' => null]; diff --git a/application/api/model/UserData.php b/application/api/model/UserData.php index dd7e818..14cc642 100644 --- a/application/api/model/UserData.php +++ b/application/api/model/UserData.php @@ -90,6 +90,10 @@ class UserData extends Model $member_name = $user_info['nickname']; $member_face_url = $user_info['avatar']; model('Tencent')->modify_user_infos($uid, $member_name, $member_face_url); + $is_create_family = db::name('vs_family')->where(['user_id' => $uid,'type' => 1])->find(); + if(!$is_create_family){ + model('Family')->createFamily($uid); + } return ['code' => 1, 'msg' => '修改成功', 'data' => $user_info]; } else { return ['code' => 0, 'msg' => '修改失败,','data' =>null];