2025-11-26 17:20:30 +08:00
|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
|
|
namespace app\api\model;
|
|
|
|
|
|
|
|
|
|
|
|
use think\Db;
|
|
|
|
|
|
use think\Model;
|
|
|
|
|
|
|
|
|
|
|
|
class Family extends Model
|
|
|
|
|
|
{
|
|
|
|
|
|
/*
|
|
|
|
|
|
* 创建家族
|
|
|
|
|
|
* @param $name string 家族名称
|
|
|
|
|
|
* @param $user_id int 用户id
|
|
|
|
|
|
*/
|
|
|
|
|
|
public function createFamily($user_id)
|
|
|
|
|
|
{
|
|
|
|
|
|
$name = db::name('user')->where('id', $user_id)->value('nickname').'的家族';
|
|
|
|
|
|
$data = [
|
|
|
|
|
|
'name' => $name,
|
|
|
|
|
|
'user_id' => $user_id,
|
|
|
|
|
|
'type' => 1,
|
|
|
|
|
|
'createtime' => time(),
|
|
|
|
|
|
];
|
|
|
|
|
|
//开启事务
|
|
|
|
|
|
db::startTrans();
|
2025-11-26 18:09:58 +08:00
|
|
|
|
$id = db::name('vs_family')->insertGetId($data);
|
2025-11-26 17:20:30 +08:00
|
|
|
|
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'];
|
|
|
|
|
|
|
2025-11-27 11:48:53 +08:00
|
|
|
|
$myFamily['group_members_num'] = db::name('vs_user_sign')->where(['parent_user_id' => $myFamily['user_id']])->count();
|
2025-11-26 17:20:30 +08:00
|
|
|
|
$myFamily['group_earnings'] = db::name('vs_user_sign_earnings')->where('user_id',$myFamily['user_id'])->sum('earnings');
|
|
|
|
|
|
|
2025-11-28 11:24:08 +08:00
|
|
|
|
// $lists= db::name('vs_user_sign')->alias('a')
|
|
|
|
|
|
// ->join('user b','a.sign_user_id = b.id')
|
|
|
|
|
|
// ->field('b.is_online,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();
|
|
|
|
|
|
$lists= db::name('vs_family')->alias('a')
|
|
|
|
|
|
->join('user b','a.user_id = b.id')
|
|
|
|
|
|
->join('vs_user_sign c','a.user_id = c.sign_user_id')
|
|
|
|
|
|
->field('b.is_online,b.market_value,b.nickname,b.avatar,b.user_code,c.type,c.end_time,c.sign_user_type,a.user_id')
|
2025-11-28 18:41:18 +08:00
|
|
|
|
->where(['a.pid' => $myFamily['user_id'],'a.deletetime' => 0,'a.type' => 0])
|
2025-11-26 17:20:30 +08:00
|
|
|
|
->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');
|
2025-11-27 11:48:53 +08:00
|
|
|
|
$lists[$k]['is_show_sign'] = $v['end_time'] - time() < 48*3600 ? 1 : 0;
|
|
|
|
|
|
$lists[$k]['sign_times'] = get_system_config_value('sign_times');//非首签签约时长
|
2025-12-01 09:32:54 +08:00
|
|
|
|
$lists[$k]['free_re_sign_day'] = get_system_config_value('free_re_sign_day');//免费续签时间
|
2025-11-27 11:48:53 +08:00
|
|
|
|
$lists[$k]['sign_user_ratio'] = get_system_config_value('sign_user_ratio');//签约者身价的百分比
|
|
|
|
|
|
//end_time 换算为天数,不足1天,按小时显示
|
|
|
|
|
|
$remaining_time = $v['end_time'] - time();
|
|
|
|
|
|
if ($remaining_time > 0) {
|
2025-11-28 18:43:18 +08:00
|
|
|
|
$days = ceil($remaining_time / (24 * 3600));
|
2025-11-27 11:48:53 +08:00
|
|
|
|
if ($days > 0) {
|
|
|
|
|
|
$lists[$k]['end_day'] = $days . '天';
|
|
|
|
|
|
} else {
|
|
|
|
|
|
$hours = ceil($remaining_time / 3600);
|
|
|
|
|
|
$lists[$k]['end_day'] = $hours . '小时';
|
|
|
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
|
|
|
$lists[$k]['end_day'] = '已过期';
|
|
|
|
|
|
}
|
2025-11-26 17:20:30 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
$myFamily['group_members_lists'] = $lists ;
|
|
|
|
|
|
}
|
|
|
|
|
|
return ['code' => 1, 'msg' => '成功', 'data' => $myFamily];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|