[ 'count' => 30, // 用户总数 'min_direct' => 5, // 最小直推人数 'max_direct' => 30, // 最大直推人数 'role_weights' => [ // 角色权重分布 1 => 0, // 普通用户 30% 2 => 70, // VIP 35% 3 => 30 // 渠道商 35% ] ], 'chain' => [ 'min_depth' => 5, // 最小层级深度 'max_depth' => 15, // 最大层级深度 'max_children' => 5 // 每个用户最多下级数 ], 'purchase' => [ 'amount' => 1000, // 购买金额 'quantity' => 1 // 购买数量 ] ]; // 生成随机用户数据 $users = $this->generateRandomUsers($test_params['users']); // 构建用户关系链 $users = $this->buildUserChain($users, $test_params['chain']); // 获取购买者(最后一个用户) $buyer_id = max(array_keys($users)); // 模拟购买数据 $product_data = [ 'user_id' => $buyer_id, 'product_id' => 1, 'questionnaire_id' => 1, 'id' => 1, 'amount' => round($test_params['purchase']['amount'], 4), 'quantity' => $test_params['purchase']['quantity'] ]; cp("
");
        // 输出用户关系链
        // cp("所有用户列表:");
        // cp("========================================");
        
        // // 显示所有用户信息
        // foreach ($users as $user_id => $user) {
        //     $role_text = $user['role_id'] == 1 ? '普通用户' : ($user['role_id'] == 2 ? 'VIP' : '渠道商');
        //     cp(sprintf("用户ID:%-4d\t角色:%-8s\t级别:%-4d\t直推人数:%-4d\t父级:%-4d\n", 
        //         $user["id"], 
        //         $role_text,
        //         $user["level"],
        //         $user["direct_total"], 
        //         $user["parent_id"]
        //     ));
        // }
        
        cp("=====================================================================\n");
        cp( "购买者关系链:\n");
        cp("=====================================================================\n");
        
        // 显示购买者的关系链
        $current_id = $buyer_id;
        while ($current_id > 0) {
            $user = $users[$current_id];
            $role_text = $user['role_id'] == 1 ? '普通用户' : ($user['role_id'] == 2 ? 'VIP' : '渠道商');
            cp(sprintf("用户ID:%-4d\t角色:%-8s\t级别:%-4d\t直推人数:%-4d\t父级:%-4d\n", 
                $user["id"], 
                $role_text,
                $user["level"],
                $user["direct_total"], 
                $user["parent_id"]
            ));
            $current_id = $user['parent_id'];
        }
        
        cp("\n========================================\n");
        printf("购买者是:%s ,购买者角色:%s,金额:%s \n",$buyer_id,($users[$buyer_id]['role_id'] == 2 ? 'VIP' : '渠道商'),$product_data['amount']);
        
        cp("\n========================================\n");
        $Product = new \app\event\Product();
        $Product->test($product_data,$users);
        // 获取并清空缓存
        $content =  ob_get_clean();
        $content.=  "
"; return $content; } // 生成随机用户数据 private function generateRandomUsers($params = []) { $defaults = [ 'count' => 30, // 用户总数 'min_direct' => 0, // 最小直推人数 'max_direct' => 30, // 最大直推人数 'role_weights' => [ // 角色权重分布 1 => 40, // 普通用户 40% 2 => 30, // VIP 30% 3 => 30 // 渠道商 30% ] ]; $params = array_merge($defaults, $params); $users = []; for ($i = 1; $i <= $params['count']; $i++) { // 根据权重随机选择角色 $role_id = $this->getRandomRoleByWeight($params['role_weights']); $user_id = rand($i*100,$i*1000); $users[''.$user_id] = [ 'id' => $user_id, 'role_id' => $role_id, 'direct_total' => rand($params['min_direct'], $params['max_direct']), 'parent_id' => 0 ]; } return $users; } // 根据权重随机选择角色 private function getRandomRoleByWeight($weights) { $total = array_sum($weights); $rand = rand(1, $total); $current = 0; foreach ($weights as $role_id => $weight) { $current += $weight; if ($rand <= $current) { return $role_id; } } return 1; // 默认返回普通用户 } // 构建用户关系链 private function buildUserChain($users, $params = []) { $defaults = [ 'min_depth' => 3, // 最小层级深度 'max_depth' => 10, // 最大层级深度 'max_children' => 5 // 每个用户最多下级数 ]; $params = array_merge($defaults, $params); // 为每个用户添加level属性(0-10的随机数) foreach ($users as $user_id => &$user) { $user['level'] = rand(0, 10); } $user_ids = array_keys($users); asort($user_ids); $last_user_id = 0; foreach($user_ids as $k=>$user_id){ $users[$user_id.'']['parent_id'] = $last_user_id; $last_user_id = $user_id; } return $users; } }