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']) ]; \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, ]); //管理直推人数和团队人数 if($_user['parent_id']){ parent_info( $_user['id'],[ 'id' => $_user['parent_id'], 'username' => Db::name('user')->where('id',$_user['parent_id'])->value('username') ]); $this->buildTeam($_user); //直属团队人数 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']); } } } 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, 50, 100, 1000, 5000, 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; // 或记录日志以便调试 } } }