263 lines
8.7 KiB
PHP
Executable File
263 lines
8.7 KiB
PHP
Executable File
<?php
|
|
namespace app\event;
|
|
use support\think\Db;
|
|
use Request;
|
|
use Symfony\Component\Console\Input\Input;
|
|
class User{
|
|
function register_successed($user)
|
|
{
|
|
$_user = $user;
|
|
if(!is_array($_user)){
|
|
$_user = $_user->toArray();
|
|
}
|
|
$date = date('Y-m-d');
|
|
cache_add('statistics_register_'.$date,1);
|
|
$saveData = [
|
|
//'invite_code' => build_invite_code($_user['id']),
|
|
'invite_code' => \support\Encrypt::userIDencode($_user['id']),
|
|
'userID' => \support\Encrypt::userIDencode($_user['id'])
|
|
];
|
|
//管理直推人数和团队人数
|
|
if($_user['parent_id']){
|
|
parent_info( $_user['id'],[
|
|
'id' => $_user['parent_id'],
|
|
'username' => Db::name('user')->where('id',$_user['parent_id'])->value('username')
|
|
]);
|
|
//直属团队人数
|
|
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);
|
|
|
|
//管理团队人数
|
|
$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([
|
|
'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']);
|
|
}
|
|
}
|
|
|
|
\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,
|
|
]);
|
|
|
|
|
|
$this->buildTeam($user);
|
|
}
|
|
function login_successed($data=[]){
|
|
$data = $this->profile($data);
|
|
/**
|
|
* @var \support\OpenImSdk\Client $IM
|
|
*/
|
|
$IM = request()->IM;
|
|
$imToken = $IM->auth->getUserToken($data['userID'],Input('platform'));
|
|
$data['imToken'] = $imToken['token'];
|
|
return $data;
|
|
}
|
|
protected function level_up($user_id,$count=0){
|
|
$levels = [
|
|
0,
|
|
500,
|
|
1000,
|
|
5000,
|
|
10000,
|
|
20000,
|
|
];
|
|
$level = 0;
|
|
foreach($levels as $k=>$v){
|
|
if($count>=$v){
|
|
$level= $k;
|
|
}else{
|
|
break;
|
|
}
|
|
}
|
|
Db::name('user')->where('id',$user_id)->data(['level'=>$level])->save();
|
|
|
|
}
|
|
function profile($user=[]){
|
|
$data = $user;
|
|
if(!is_array($data)){
|
|
$data = $data->toArray();
|
|
}
|
|
$last_see = $last_see ?? cache('last_see_'.$data['id']);
|
|
$count = 0;
|
|
$ff = [
|
|
'unread_count' => 0,
|
|
'userHeadImg' => null,
|
|
];
|
|
try {
|
|
$ff = Db::name('user_extend')->where('user_id',$user->id)->field('moments_allow_view_days,profile_banner,moments_banner')->find();
|
|
$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;
|
|
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;
|
|
}
|
|
//用户角色组变化
|
|
function role_up($user=[]){
|
|
$data = $user;
|
|
if(!is_array($data)){
|
|
$data = $data->toArray();
|
|
}
|
|
//旗下会员总数
|
|
$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']);
|
|
$this->level_up($v['user_id'],$v['vip_total']);
|
|
}
|
|
|
|
// if(!$user->active){
|
|
// $user->active = 1;
|
|
// $user->save();
|
|
// cache_add('team_direct_total_'.$user->parent_id,1);
|
|
// }
|
|
return $user;
|
|
}
|
|
//用户角色组变化
|
|
function role_buy($data=[])
|
|
{
|
|
// $data = [
|
|
// 'role_id'=>1,
|
|
// 'user_id'=>100008,
|
|
// 'amount'=>1000
|
|
// ];
|
|
|
|
//addJob($data,'Settlement');
|
|
}
|
|
|
|
function buildTeam($user){
|
|
|
|
|
|
// 插入自己的团队关系 (自己是自己的后代)
|
|
$teamData = [
|
|
[
|
|
'ancestor_id' => $user->id,
|
|
'descendant_id' => $user->id,
|
|
'depth' => 0,
|
|
'status' => 0,
|
|
]
|
|
];
|
|
// 2. 处理团队关系(如果有推荐人)
|
|
if ($user->parent_id) {
|
|
|
|
parent_info( $user->id,[
|
|
'id' => $user->parent_id,
|
|
'username' => Db::name('user')->where('id',$user->parent_id)->value('username')
|
|
]);
|
|
// 获取推荐人所有的上级关系,生成新用户的团队关系
|
|
$ancestors = Db::name('user_team')
|
|
->where('descendant_id', $user->parent_id)
|
|
->select();
|
|
/** @var \app\model\UserTeam $ancestor */
|
|
// 插入新用户与祖先的关系
|
|
foreach ($ancestors as $ancestor) {
|
|
$teamData[] = [
|
|
'ancestor_id' => $ancestor['ancestor_id'],
|
|
'descendant_id' => $user->id,
|
|
'depth' => $ancestor['depth'] + 1,
|
|
'status' => 1, // 默认状态为 0,表示无效
|
|
];
|
|
}
|
|
}
|
|
// 批量插入关系
|
|
try {
|
|
if($teamData){
|
|
Db::name('user_team')->insertAll($teamData);
|
|
}
|
|
} catch (\Exception $e) {
|
|
cp($e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 分润逻辑
|
|
*
|
|
* @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; // 或记录日志以便调试
|
|
}
|
|
}
|
|
} |