From 0be377dcfc2a676d8e22c9bfdddecc91067f7fa0 Mon Sep 17 00:00:00 2001 From: hellcat <> Date: Sun, 30 Mar 2025 20:52:31 +0800 Subject: [PATCH] 1 --- src/Command/Cron.php | 4 +- src/Controllers/TestController.php | 3 +- src/Models/CountUser.php | 15 ++++ src/Services/Cron.php | 113 ++++++++++++++++++++++++++ src/Services/TomTool/VisitorCount.php | 4 +- 5 files changed, 136 insertions(+), 3 deletions(-) create mode 100755 src/Models/CountUser.php diff --git a/src/Command/Cron.php b/src/Command/Cron.php index 09859420..5ea47a8b 100755 --- a/src/Command/Cron.php +++ b/src/Command/Cron.php @@ -64,8 +64,10 @@ EOL; // 每日清除前一天残留TgStep $jobs->clearTgStep(); - // 每日统计报表 + // 每日统计报表 - 访客 $jobs->visitorCount(); + // 每日统计报表 - 用户 + $jobs->userCount(); if (Config::obtain('enable_detect_inactive_user')) { $jobs->detectInactiveUser(); diff --git a/src/Controllers/TestController.php b/src/Controllers/TestController.php index 6ccbb2b6..0ed43a77 100755 --- a/src/Controllers/TestController.php +++ b/src/Controllers/TestController.php @@ -17,6 +17,7 @@ use App\Services\Cron as CronService; use App\Services\Reward; use App\Services\TomTool\Http; +use App\Services\TomTool\VisitorCount; session_start(); @@ -28,7 +29,7 @@ final class TestController extends BaseController { $jobs = new CronService(); - $jobs->visitorCount(); + $jobs->userCount(); exit; } diff --git a/src/Models/CountUser.php b/src/Models/CountUser.php new file mode 100755 index 00000000..eafef1f7 --- /dev/null +++ b/src/Models/CountUser.php @@ -0,0 +1,15 @@ +delete(); } + public static function userCount(): void + { + $sPrevDate = date("Y-m-d", strtotime("-2 day")); + $sPrevDateStart = date("Y-m-d 00:00:00", strtotime("-2 day")); + $sPrevDateEnd = date("Y-m-d 23:59:59", strtotime("-2 day")); + $sPrevTimeStart = strtotime($sPrevDateStart); + $sPrevTimeEnd = strtotime($sPrevDateEnd); + $sPrevDate30 = date("Y-m-d", strtotime("-30 day")); + echo "
";
+
+ //// 访客统计 start
+ $aVisitorCount = Visitor::select('from', DB::raw('count(*) as count'))
+ ->groupBy('from')
+ ->get()
+ ->toArray();
+
+ $aVisitorMix = [];
+ foreach ($aVisitorCount as $row) {
+ $aVisitorMix[$row['from']]['count'] = $row['count'];
+ }
+ //// 访客统计 end
+
+ // 注册数量
+ $aRegCount = User::select('from', DB::raw('count(*) as count'))
+ ->whereDate('reg_date', $sPrevDate)
+ ->groupBy('from')
+ ->get()
+ ->toArray();
+
+ $aRegMix = [];
+ foreach ($aRegCount as $row) {
+
+ if (isset($row['from'])) {
+ $sFrom = $row['from'];
+ } else {
+ $sFrom = '无';
+ }
+
+ $aRegMix[$sFrom]['count'] = $row['count'];
+ }
+
+ //// 付款 start
+ $aOrder = Order::whereBetween("update_time", [$sPrevTimeStart, $sPrevTimeEnd])->where("status", "activated")->get()->toArray();
+
+ // 标记是否是新用户
+ $oUserModel = new User();
+ $iPayCount = 0;
+ $iMoneyCount = 0;
+ $iPayCountNew = 0;
+ $iPayCountOld = 0;
+ $iMoneyCountNew = 0;
+ $iMoneyCountOld = 0;
+ $sFrom = '';
+ $aUserMix = [];
+ foreach ($aOrder as $row) {
+
+ $iPayCount ++;
+ $iMoneyCount += $row["price"];
+
+ $oUser = $oUserModel->where("id", $row["id"])->first();
+
+ if (isset($oUser['from'])) {
+ $sFrom = $oUser['from'];
+ } else {
+ $sFrom = "无";
+ }
+
+ if ( ($row['update_time'] - strtotime($oUser->reg_date)) < (86400 * 30) ) {
+ $iPayCountNew ++;
+ $iMoneyCountNew += $row["price"];
+ } else {
+ $iPayCountOld ++;
+ $iMoneyCountOld += $row["price"];
+// var_dump($row);
+ }
+
+ $aUserMix[$sFrom]['pay_count'] = $iPayCount;
+ $aUserMix[$sFrom]['money_count'] = $iMoneyCount;
+ $aUserMix[$sFrom]['pay_count_new'] = $iPayCountNew;
+ $aUserMix[$sFrom]['pay_count_old'] = $iPayCountOld;
+ $aUserMix[$sFrom]['money_count_new'] = $iMoneyCountNew;
+ $aUserMix[$sFrom]['money_count_old'] = $iMoneyCountOld;
+
+ }
+
+ $aAllMix = array_merge($aVisitorMix, $aRegMix, $aUserMix);
+
+
+ foreach ($aAllMix as $k => $v) {
+
+ $oCountUserModel = new CountUser();
+ $oCountUserModel->from = $k;
+ $oCountUserModel->count_from = $aVisitorMix[$k]['count'] ?? 0;
+ $oCountUserModel->count_reg = $aRegMix[$k]['count'] ?? 0;
+ $oCountUserModel->count_pay = $UserMix[$k]['pay_count'] ?? 0;
+ $oCountUserModel->count_pay_new = $UserMix[$k]['pay_count_new'] ?? 0;
+ $oCountUserModel->count_pay_old = $UserMix[$k]['pay_count_old'] ?? 0;
+ $oCountUserModel->count_money = $UserMix[$k]['money_count'] ?? 0;
+ $oCountUserModel->count_money_new = $UserMix[$k]['money_count_new'] ?? 0;
+ $oCountUserModel->count_money_old = $UserMix[$k]['money_count_old'] ?? 0;
+ $oCountUserModel->date = $sPrevDate;
+ $r = $oCountUserModel->save();
+
+ }
+
+
+ var_dump($r);
+ exit;
+
+ Visitor::truncate();
+ }
+
public static function visitorCount(): void
{
$oVisitor = Visitor::select('from', DB::raw('count(*) as count'))
diff --git a/src/Services/TomTool/VisitorCount.php b/src/Services/TomTool/VisitorCount.php
index 2cea07ea..c5ef3428 100755
--- a/src/Services/TomTool/VisitorCount.php
+++ b/src/Services/TomTool/VisitorCount.php
@@ -12,6 +12,8 @@ final class VisitorCount
public static function From()
{
+// $t = self::normalizeUrl("https://www.wocao.com/sjjs/zzz");
+// var_dump($t);exit;
// var_dump(self::normalizeUrl($_SERVER['HTTP_REFERER']));
// 如果以被设置,什么都不做
// 如果未被设置,入库并保存cookie,注册用
@@ -23,7 +25,7 @@ final class VisitorCount
} else {
- $sFrom = $_ENV['short_url'];
+ $sFrom = $_ENV['short_url'] . "/";
}