Files
im/app/event/User.php
T

198 lines
6.8 KiB
PHP
Raw Normal View History

2025-11-07 09:56:20 +08:00
<?php
namespace app\event;
use support\think\Db;
use Request;
2025-12-24 16:59:05 +08:00
use Symfony\Component\Console\Input\Input;
2025-11-07 09:56:20 +08:00
class User{
2026-03-25 02:48:30 +08:00
function register_successed($user)
{
$_user = $user;
if(!is_array($_user)){
$_user = $_user->toArray();
}
2025-11-07 09:56:20 +08:00
$date = date('Y-m-d');
cache_add('statistics_register_'.$date,1);
$saveData = [
2026-03-25 02:48:30 +08:00
//'invite_code' => build_invite_code($_user['id']),
'invite_code' => \support\Encrypt::userIDencode($_user['id']),
'userID' => \support\Encrypt::userIDencode($_user['id'])
2025-11-07 09:56:20 +08:00
];
2026-04-04 08:52:59 +08:00
\app\model\User::where('id',$_user['id'])->update($saveData);
//创建扩展数据
Db::name('user_extend')->replace()->insert([
'user_id' => $_user['id'],
'consume' => 0,
// 'profile_banner' => '',
// 'moments_banner' => '',
// 'moments_allow_view_days'=>0,
]);
2025-11-07 09:56:20 +08:00
//管理直推人数和团队人数
2026-03-25 02:48:30 +08:00
if($_user['parent_id']){
parent_info( $_user['id'],[
'id' => $_user['parent_id'],
'username' => Db::name('user')->where('id',$_user['parent_id'])->value('username')
2025-11-07 09:56:20 +08:00
]);
2026-04-06 03:10:44 +08:00
build_user_team($_user);
2026-03-25 02:48:30 +08:00
//直属团队人数
Db::name('user_extend')->where('user_id',$_user['parent_id'])
->data([
'direct_total'=> Db::raw('direct_total+1')
])->save();
cache_add('team_direct_total_'.$_user['parent_id'],1);
//管理团队人数
2026-04-04 08:52:59 +08:00
$team_user_ids = Db::name('user_team')->where('descendant_id',$_user['id'])
2026-03-25 02:48:30 +08:00
->where('depth','>',0)
->order('depth','ASC')
->column('ancestor_id');
Db::name('user_extend')->whereIn('user_id',$team_user_ids)->data([
'team_total'=> Db::raw('team_total+1')
])->save();
$list = Db::name('user_extend')->whereIn('user_id',$team_user_ids)->field('user_id,team_total')->select();
foreach($list as $v){
cache('team_user_count_'.$v['user_id'],$v['team_total']);
}
2025-11-07 09:56:20 +08:00
}
}
function login_successed($data=[]){
2026-02-24 21:02:17 +08:00
$data = $this->profile($data);
/**
* @var \support\OpenImSdk\Client $IM
*/
$IM = request()->IM;
$imToken = $IM->auth->getUserToken($data['userID'],Input('platform'));
$data['imToken'] = $imToken['token'];
2025-11-07 09:56:20 +08:00
return $data;
}
function profile($user=[]){
$data = $user;
if(!is_array($data)){
$data = $data->toArray();
}
2025-12-24 16:59:05 +08:00
$last_see = $last_see ?? cache('last_see_'.$data['id']);
$count = 0;
2026-03-25 02:48:30 +08:00
$ff = [
'unread_count' => 0,
2025-12-24 16:59:05 +08:00
'userHeadImg' => null,
];
2026-03-25 02:48:30 +08:00
try {
2026-04-04 08:52:59 +08:00
$ff = Db::name('user_extend')->where('user_id',$user['id'])->field('moments_allow_view_days,profile_banner,moments_banner')->find();
2026-03-25 02:48:30 +08:00
$data['moments_allow_view_days'] = $ff['moments_allow_view_days'];
$data['moments_banner'] = $ff['moments_banner'];
$data['profile_banner'] = $ff['profile_banner'];
$ff['userHeadImg'] = $ff['moments_banner'];
} catch (\Exception $e) {
}
$ff['unread_count'] = $count ?:0;
$data['friend_settings'] = $ff;
2025-11-07 09:56:20 +08:00
return $data;
}
function changepwd_successed($data=[]){
return $data;
}
function change_trade_pwd_successed($data=[]){
return $data;
}
function logout_successed($data=[]){
return $data;
}
function delete_successed($data=[]){
return $data;
}
//用户角色组变化
2026-03-25 02:48:30 +08:00
function role_up($user=[]){
2025-11-07 09:56:20 +08:00
$data = $user;
if(!is_array($data)){
$data = $data->toArray();
}
2026-03-25 02:48:30 +08:00
//旗下会员总数
$team_user_ids = Db::name('user_team')->where('descendant_id',$user['id'])
->where('depth','>',0)
->order('depth','ASC')
->column('ancestor_id');
Db::name('user_extend')->whereIn('user_id',$team_user_ids)
->data([
'vip_total'=> Db::raw('vip_total+1')
])
->save();
$list = Db::name('user_extend')->whereIn('user_id',$team_user_ids)->field('user_id,vip_total')->select();
foreach($list as $v){
cache('team_vip_total_'.$v['user_id'],$v['vip_total']);
2026-04-06 03:10:44 +08:00
update_user_level($v['user_id'],$v['vip_total']);
2025-11-07 09:56:20 +08:00
}
2026-03-25 02:48:30 +08:00
// if(!$user->active){
// $user->active = 1;
// $user->save();
// cache_add('team_direct_total_'.$user->parent_id,1);
// }
2025-11-07 09:56:20 +08:00
return $user;
}
2026-03-25 02:48:30 +08:00
//用户角色组变化
function role_buy($data=[])
{
// $data = [
// 'role_id'=>1,
// 'user_id'=>100008,
// 'amount'=>1000
// ];
//addJob($data,'Settlement');
}
2025-11-07 09:56:20 +08:00
/**
* 分润逻辑
*
* @param int $userId 用户ID(充值用户)
* @param float $amount 充值金额
* @param int $orderId 订单ID
* @return bool
*/
function distributeProfit($user_id, $amount, $order_id) {
// 定义分润比例
$commissionRates = Config('site.indirect_referral_award');
// 启动事务
Db::startTrans();
try {
// 查询上三级用户
$ancestors = Db::name('user_team')
->alias('ut')
->join('user wu', 'ut.ancestor_id = wu.id') // 获取上级用户信息
->where('ut.descendant_id', $user_id)
->whereBetween('ut.depth', [1, 3]) // 限制深度为 1 到 3 级
->field('ut.ancestor_id, ut.depth')
->order('ut.depth ASC')
->select();
// 遍历上级用户,计算并记录分润
/** @var \app\model\UserTeam $ancestor */
foreach ($ancestors as $ancestor) {
$depth = $ancestor['depth'];
if (isset($commissionRates[$depth])) {
$commission = $amount * $commissionRates[$depth]; // 计算分润金额
// 插入分润记录
Db::table('z_commission_logs')->insert([
'user_id' => $ancestor['ancestor_id'],
'order_id' => $order_id,
'amount' => $commission,
'created_at' => date('Y-m-d H:i:s'),
]);
}
}
// 提交事务
Db::commit();
return true;
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
throw $e; // 或记录日志以便调试
}
}
}