爱学习系统实用小插件--数据统计


一 源代码(php项目)

<?php
// 数据库连接信息
$db_host = 'localhost'; // 数据库主机
$db_name = ''; // 数据库名
$db_user = ''; // 数据库用户名
$db_pass = ''; // 数据库密码

// wxPusher 配置
$wxPusherAppToken = "";  // 替换为你的wxPusher AppToken
$wxPusherUids = [""];    // 接收消息的用户UID数组(如 ["UID_1", "UID_2"])
$wxPusherApiUrl = "https://wxpusher.zjiecode.com/api/send/message";

try {
    // 连接数据库
    $pdo = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // 获取当前日期和本周的准确时间范围(周一00:00:00到周日23:59:59)
    $start_of_week = date('Y-m-d 00:00:00', strtotime('last Monday'));
    $end_of_week = date('Y-m-d 23:59:59', strtotime('next Sunday'));
    $today = date('Y-m-d');

    // 查询今日订单数量
    $stmt = $pdo->query("SELECT COUNT(*) AS today_orders FROM love_learn_order WHERE DATE(addtime) = '$today'");
    $today_orders = $stmt->fetch(PDO::FETCH_ASSOC)['today_orders'];

    // 获取昨日日期
    $yesterday = date('Y-m-d', strtotime('-1 day'));
    // 查询昨日订单数量
    $stmt = $pdo->query("SELECT COUNT(*) AS yesterday_orders FROM love_learn_order WHERE DATE(addtime) = '$yesterday'");
    $yesterday_orders = $stmt->fetch(PDO::FETCH_ASSOC)['yesterday_orders'];

    // 查询本周订单数量
    $stmt = $pdo->query("SELECT COUNT(*) AS week_orders FROM love_learn_order WHERE addtime BETWEEN '$start_of_week' AND '$end_of_week'");
    $week_orders = $stmt->fetch(PDO::FETCH_ASSOC)['week_orders'];

    // 查询总订单数量
    $stmt = $pdo->query("SELECT COUNT(*) AS total_orders FROM love_learn_order");
    $total_orders = $stmt->fetch(PDO::FETCH_ASSOC)['total_orders'];

    // 查询今日新增代理数量
    $stmt = $pdo->query("SELECT COUNT(*) AS today_users FROM love_learn_user WHERE DATE(addtime) = '$today'");
    $today_users = $stmt->fetch(PDO::FETCH_ASSOC)['today_users'];

    // 查询本周新增代理数量(周一00:00:00到周日23:59:59)
    $stmt = $pdo->query("SELECT COUNT(*) AS week_users FROM love_learn_user WHERE addtime BETWEEN '$start_of_week' AND '$end_of_week'");
    $week_users = $stmt->fetch(PDO::FETCH_ASSOC)['week_users'];

    // 查询余额大于0的代理数量
    $stmt = $pdo->query("SELECT COUNT(*) AS active_users FROM love_learn_user WHERE money > 0");
    $active_users = $stmt->fetch(PDO::FETCH_ASSOC)['active_users'];

    // 查询今日登录代理数量(按endtime字段统计)
    $stmt = $pdo->query("SELECT COUNT(*) AS today_login_users FROM love_learn_user WHERE DATE(endtime) = '$today'");
    $today_login_users = $stmt->fetch(PDO::FETCH_ASSOC)['today_login_users'];

    // 查询本周登录代理数量(周一00:00:00到周日23:59:59,同一个代理在一周内多次登录,仅取一次计数)
    $stmt = $pdo->query("SELECT COUNT(DISTINCT uid) AS week_login_users FROM love_learn_user WHERE endtime BETWEEN '$start_of_week' AND '$end_of_week'");
    $week_login_users = $stmt->fetch(PDO::FETCH_ASSOC)['week_login_users'];

    // 查询总代理数量
    $stmt = $pdo->query("SELECT COUNT(*) AS total_users FROM love_learn_user");
    $total_users = $stmt->fetch(PDO::FETCH_ASSOC)['total_users'];

    // 查询今日订单量TOP3用户
    $stmt = $pdo->query("
        SELECT o.uid, u.name, COUNT(*) AS order_count 
        FROM love_learn_order o
        LEFT JOIN love_learn_user u ON o.uid = u.uid
        WHERE DATE(o.addtime) = '$today'
        GROUP BY o.uid
        ORDER BY order_count DESC 
        LIMIT 3
    ");
    $top_users = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // 查询今日销量前10的项目
    $stmt = $pdo->query("SELECT ptname, COUNT(*) AS oid FROM love_learn_order WHERE DATE(addtime) = '$today' GROUP BY ptname ORDER BY oid DESC LIMIT 10");
    $today_top_projects = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // 查询本周销量前10的项目
    $stmt = $pdo->query("SELECT ptname, COUNT(*) AS oid FROM love_learn_order WHERE addtime BETWEEN '$start_of_week' AND '$end_of_week' GROUP BY ptname ORDER BY oid DESC LIMIT 10");
    $week_top_projects = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // 生成统计内容
    $content = "📊 统计报告\n\n";
    $content .= "【订单统计】\n";
    $content .= "今日订单:$today_orders\n";
    $content .= "昨日订单:$yesterday_orders\n";
    $content .= "本周订单:$week_orders\n";
    $content .= "累计订单:$total_orders\n\n";

    $content .= "【代理统计】\n";
    $content .= "今日新增:$today_users\n";
    $content .= "本周新增:$week_users\n";
    $content .= "余额代理:$active_users\n"; // 余额大于0
    $content .= "今日登录:$today_login_users\n";
    $content .= "本周登录:$week_login_users\n";
    $content .= "累计代理:$total_users\n\n";

    $content .= "【贡献统计】\n";
    if (!empty($top_users)) {
        foreach ($top_users as $index => $user) {
            $rank = $index + 1;
            $name = $user['name'] ?? '匿名用户';
            $content .= "第{$rank}名:\n";
            $content .= "UID:{$user['uid']}\n";
            $content .= "昵称:{$name}\n";
            $content .= "今日订单:{$user['order_count']}\n\n";
        }
    } else {
        $content .= "今日暂无订单数据\n";
    }

    $content .= "🔥 今日热销TOP10\n";
    if (!empty($today_top_projects)) {
        foreach ($today_top_projects as $index => $project) {
            $rank = $index + 1;
            $content .= "{$rank}. {$project['ptname']} (销量: {$project['oid']})\n";
        }
    } else {
        $content .= "暂无今日销售数据\n";
    }

    $content .= "\n🏆 本周热销TOP10\n";
    if (!empty($week_top_projects)) {
        foreach ($week_top_projects as $index => $project) {
            $rank = $index + 1;
            $content .= "{$rank}. {$project['ptname']} (销量: {$project['oid']})\n";
        }
    } else {
        $content .= "暂无本周销售数据\n";
    }

    // 发送微信通知
    $data = [
        "appToken"    => $wxPusherAppToken,
        "content"     => $content,
        "summary"     => "每日和每周统计报告", // 消息摘要(显示在通知栏)
        "contentType" => 1, // 1-文本消息
        "uids"        => $wxPusherUids
    ];

    $options = [
        'http' => [
            'header'  => "Content-type: application/json\r\n",
            'method'  => 'POST',
            'content' => json_encode($data),
        ],
    ];

    $context = stream_context_create($options);
    $response = file_get_contents($wxPusherApiUrl, false, $context);

    if ($response === false) {
        echo "推送失败,请检查网络或配置";
    } else {
        $result = json_decode($response, true);
        if ($result['success']) {
            echo "推送成功!";
        } else {
            echo "推送失败:" . $result['msg'];
        }
    }
} catch (PDOException $e) {
    die("数据库连接失败: " . $e->getMessage());
}
?>

二 功能解释

推送每天平台数据到WxPusher公众号/APP。

推送内容:

【订单统计】

今日订单:

昨日订单:

本周订单:

累计订单:

【代理统计】

今日新增:

本周新增:

余额代理:

今日登录:

本周登录:

累计代理:

【贡献统计】(取当日订单量前三名代理)

第1名:

UID:

昵称:

今日订单:

 

今日热销项目TOP10

1...

2...

...

本周热销项目TOP10

1...

2...

...

三 配置方法

1. 在你网站根目录新建一个文件夹,命名为:jiankong,创建php文件,命名为sjtj.php

2. 粘贴源代码,填写自己的数据库信息,填写WxPusher的AppToken以及用户组UID

3. 打开宝塔面板 =>计划任务 =>新建shell脚本 => 填写脚本内容:cd /www/wwwroot/你的网站根目录/jiankong/sjtj && sudo -u root php sjtj.php,设置每天晚上11.59分执行即可


附:

WxPusher注册以及获取token及uid方法:

WxPusher微信消息推送服务

点击以上链接,扫码登录(新用户自动注册)

右上角,新建新应用,填写必填项即可。

用户列表中即可看到UID

应用列表中可以看到自己的apptoken

当然如果不习惯用这个推送工具,自行更新其他的即可。


收藏

爱学习系统实用小插件--定期清理僵尸用户

易支付使用配置教程

评 论
请登录后再评论
avatar
小鹿同学管理员
  • Chrome
  • Windows10
29系统同样可以实用,把数据库格式换成自己的就行。
29 天前