Jelajahi Sumber

add:推送统计;

Wang Chen 4 tahun lalu
induk
melakukan
12ab36deb6

+ 3 - 1
app/Cache/CacheKeys.php

@@ -23,7 +23,9 @@ class CacheKeys
             'token' => 'Lock:%s', // 锁,token
         ],
         'push'     => [
-            'user' => 'Push:%s'
+            'user'   => 'Push:%s',
+            'statPv' => 'Push:pv:%s:%s',
+            'statUv' => 'Push:uv:%s:%s',
         ],
         'ad'       => [
             'position' => 'Ad:position'

+ 112 - 0
app/Cache/Push/PushCache.php

@@ -0,0 +1,112 @@
+<?php
+
+
+namespace App\Cache\Push;
+
+
+use App\Consts\BaseConst;
+use App\Libs\Utils;
+use Illuminate\Support\Facades\Redis;
+
+class PushCache
+{
+    /**
+     * 获取用户reg id
+     * @param $uid
+     * @return mixed
+     */
+    public static function getUserPushRegId($uid)
+    {
+        $cacheKey = Utils::getCacheKey('push.user', [$uid]);
+        return Redis::get($cacheKey);
+    }
+
+    /**
+     * 设置用户reg id
+     * @param $uid
+     * @param $regId
+     * @return mixed
+     */
+    public static function setUserPushRegId($uid, $regId)
+    {
+        $cacheKey = Utils::getCacheKey('push.user', [$uid]);
+        return Redis::set($cacheKey, $regId);
+    }
+
+    /**
+     * 增加pv
+     * @param $pushId
+     * @param $date
+     * @return bool
+     */
+    public static function incrPushPv($pushId, $date): bool
+    {
+        if (empty($pushId) || empty($date)) {
+            return false;
+        }
+
+        $cacheKey = Utils::getCacheKey('push.statsPv', [$pushId, $date]);
+        Redis::incrBy($cacheKey, 1);
+        $ttl = Redis::ttl($cacheKey);
+        if ((int)$ttl < 1) {
+            Redis::expire($cacheKey, BaseConst::ONE_DAY_SECONDS * 3);
+        }
+        return true;
+    }
+
+    /**
+     * @param $pushId
+     * @param $date
+     * @param $uid
+     * @return bool
+     */
+    public static function zAddPushUv($pushId, $date, $uid): bool
+    {
+        if (empty($pushId) || empty($date) || empty($uid)) {
+            return false;
+        }
+
+        $cacheKey = Utils::getCacheKey('push.statsUv', [$pushId, $date]);
+        Redis::zAdd($cacheKey, time(), $uid);
+        $ttl = Redis::ttl($cacheKey);
+        if ((int)$ttl < 1) {
+            Redis::expire($cacheKey, BaseConst::ONE_WEEK_SECONDS);
+        }
+
+        return true;
+    }
+
+    /**
+     * 获取pv数
+     * @param $pushId
+     * @param $date
+     * @return int
+     */
+    public static function getPushyPv($pushId, $date): int
+    {
+        $cacheKey = Utils::getCacheKey('push.statPv', [$pushId, $date]);
+        $exist    = Redis::exists($cacheKey);
+        if (!$exist) {
+            return 0;
+        }
+
+        return (int)Redis::get($cacheKey);
+    }
+
+    /**
+     * 获取uv数
+     * @param $pushId
+     * @param $date
+     * @return int
+     */
+    public static function getPushUv($pushId, $date): int
+    {
+        $cacheKey = Utils::getCacheKey('push.statUv', [$pushId, $date]);
+        $exist    = Redis::exists($cacheKey);
+        if (!$exist) {
+            return 0;
+        }
+
+        return (int)Redis::zCount($cacheKey, 0, 99999999999999999999999999);
+    }
+}

+ 0 - 34
app/Cache/PushCache.php

@@ -1,34 +0,0 @@
-<?php
-
-
-namespace App\Cache;
-
-
-use App\Libs\Utils;
-use Illuminate\Support\Facades\Redis;
-
-class PushCache
-{
-    /**
-     * 获取用户reg id
-     * @param $uid
-     * @return mixed
-     */
-    public static function getUserPushRegId($uid)
-    {
-        $cacheKey = Utils::getCacheKey('push.user', [$uid]);
-        return Redis::get($cacheKey);
-    }
-
-    /**
-     * 设置用户reg id
-     * @param $uid
-     * @param $regId
-     * @return mixed
-     */
-    public static function setUserPushRegId($uid, $regId)
-    {
-        $cacheKey = Utils::getCacheKey('push.user', [$uid]);
-        return Redis::set($cacheKey, $regId);
-    }
-}

+ 3 - 3
app/Http/Kernel.php

@@ -23,7 +23,7 @@ class Kernel extends HttpKernel
      * @var array
      */
     protected $middlewareGroups = [
-        'web' => [
+        'web'      => [
             \App\Http\Middleware\EncryptCookies::class,
             \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
             \Illuminate\Session\Middleware\StartSession::class,
@@ -33,7 +33,7 @@ class Kernel extends HttpKernel
             \App\Http\Middleware\QuickAppGetUserFromToken::class,
             \App\Http\Middleware\QuickAppRefreshToken::class,
         ],
-        'api' => [
+        'api'      => [
             'throttle:60,1',
         ],
     ];
@@ -46,7 +46,7 @@ class Kernel extends HttpKernel
      * @var array
      */
     protected $routeMiddleware = [
-        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
+        'throttle'  => \Illuminate\Routing\Middleware\ThrottleRequests::class,
         'checkSign' => \App\Http\Middleware\CheckSign::class,
     ];
 }

+ 8 - 0
app/Http/Middleware/QuickAppGetUserFromToken.php

@@ -2,6 +2,7 @@
 
 namespace App\Http\Middleware;
 
+use App\Cache\Push\PushCache;
 use App\Modules\Push\Services\PushService;
 use App\Modules\User\Services\QappUserService;
 use App\Modules\User\Services\UserService;
@@ -50,6 +51,13 @@ class QuickAppGetUserFromToken extends BaseMiddleware
         $regId    = $request->header('x-regid', '');
         PushService::setUserRegId($uid, $regId, $provider, $package);
 
+        // 推送pv、uv统计
+        $pushId = (int)$request->get('push_id', 0);
+        if ($pushId) {
+            PushCache::incrPushPv($pushId, date('Ymd'));
+            PushCache::zAddPushUv($pushId, date('Ymd'), $uid);
+        }
+
         return $next($request);
     }
 }

+ 1 - 1
app/Modules/Push/Services/PushService.php

@@ -6,7 +6,7 @@ namespace App\Modules\Push\Services;
 
 use App\Cache\Lock\LockCache;
 use Exception;
-use App\Cache\PushCache;
+use App\Cache\Push\PushCache;
 use App\Consts\PushConst;
 use App\Libs\Push\OPPOPush\OPPOPushCommon;
 use App\Libs\Push\XMPush\MiPushCommon;

+ 32 - 32
config/app.php

@@ -176,39 +176,39 @@ return [
 
     'aliases' => [
 
-        'App' => Illuminate\Support\Facades\App::class,
-        'Artisan' => Illuminate\Support\Facades\Artisan::class,
-        'Auth' => Illuminate\Support\Facades\Auth::class,
-        'Blade' => Illuminate\Support\Facades\Blade::class,
-        'Cache' => Illuminate\Support\Facades\Cache::class,
-        'Config' => Illuminate\Support\Facades\Config::class,
-        'Cookie' => Illuminate\Support\Facades\Cookie::class,
-        'Crypt' => Illuminate\Support\Facades\Crypt::class,
-        'DB' => Illuminate\Support\Facades\DB::class,
-        'Eloquent' => Illuminate\Database\Eloquent\Model::class,
-        'Event' => Illuminate\Support\Facades\Event::class,
-        'File' => Illuminate\Support\Facades\File::class,
-        'Gate' => Illuminate\Support\Facades\Gate::class,
-        'Hash' => Illuminate\Support\Facades\Hash::class,
-        'Lang' => Illuminate\Support\Facades\Lang::class,
-        'Log' => Illuminate\Support\Facades\Log::class,
-        'Mail' => Illuminate\Support\Facades\Mail::class,
-        'Password' => Illuminate\Support\Facades\Password::class,
-        'Queue' => Illuminate\Support\Facades\Queue::class,
-        'Redirect' => Illuminate\Support\Facades\Redirect::class,
-        'Redis' => Illuminate\Support\Facades\Redis::class,
-        'Request' => Illuminate\Support\Facades\Request::class,
-        'Response' => Illuminate\Support\Facades\Response::class,
-        'Route' => Illuminate\Support\Facades\Route::class,
-        'Schema' => Illuminate\Support\Facades\Schema::class,
-        'Session' => Illuminate\Support\Facades\Session::class,
-        'Storage' => Illuminate\Support\Facades\Storage::class,
-        'URL' => Illuminate\Support\Facades\URL::class,
+        'App'       => Illuminate\Support\Facades\App::class,
+        'Artisan'   => Illuminate\Support\Facades\Artisan::class,
+        'Auth'      => Illuminate\Support\Facades\Auth::class,
+        'Blade'     => Illuminate\Support\Facades\Blade::class,
+        'Cache'     => Illuminate\Support\Facades\Cache::class,
+        'Config'    => Illuminate\Support\Facades\Config::class,
+        'Cookie'    => Illuminate\Support\Facades\Cookie::class,
+        'Crypt'     => Illuminate\Support\Facades\Crypt::class,
+        'DB'        => Illuminate\Support\Facades\DB::class,
+        'Eloquent'  => Illuminate\Database\Eloquent\Model::class,
+        'Event'     => Illuminate\Support\Facades\Event::class,
+        'File'      => Illuminate\Support\Facades\File::class,
+        'Gate'      => Illuminate\Support\Facades\Gate::class,
+        'Hash'      => Illuminate\Support\Facades\Hash::class,
+        'Lang'      => Illuminate\Support\Facades\Lang::class,
+        'Log'       => Illuminate\Support\Facades\Log::class,
+        'Mail'      => Illuminate\Support\Facades\Mail::class,
+        'Password'  => Illuminate\Support\Facades\Password::class,
+        'Queue'     => Illuminate\Support\Facades\Queue::class,
+        'Redirect'  => Illuminate\Support\Facades\Redirect::class,
+        'Redis'     => Illuminate\Support\Facades\Redis::class,
+        'Request'   => Illuminate\Support\Facades\Request::class,
+        'Response'  => Illuminate\Support\Facades\Response::class,
+        'Route'     => Illuminate\Support\Facades\Route::class,
+        'Schema'    => Illuminate\Support\Facades\Schema::class,
+        'Session'   => Illuminate\Support\Facades\Session::class,
+        'Storage'   => Illuminate\Support\Facades\Storage::class,
+        'URL'       => Illuminate\Support\Facades\URL::class,
         'Validator' => Illuminate\Support\Facades\Validator::class,
-        'View' => Illuminate\Support\Facades\View::class,
-         'Hashids' => Vinkla\Hashids\Facades\Hashids::class,
-        'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class ,
-        'Captcha' => Mews\Captcha\Facades\Captcha::class,
+        'View'      => Illuminate\Support\Facades\View::class,
+        'Hashids'   => Vinkla\Hashids\Facades\Hashids::class,
+        'JWTAuth'   => Tymon\JWTAuth\Facades\JWTAuth::class,
+        'Captcha'   => Mews\Captcha\Facades\Captcha::class,
     ],
 
 ];