Browse Source

常用菜单 service init

ANG YU 5 years ago
parent
commit
060ac9f075
1 changed files with 84 additions and 0 deletions
  1. 84 0
      app/Services/CheckActiveMenuService.php

+ 84 - 0
app/Services/CheckActiveMenuService.php

@@ -0,0 +1,84 @@
+<?php
+
+
+namespace App\Services;
+
+
+use App\Menu;
+use App\UserVisitMenuLog;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\Redis;
+
+class CheckActiveMenuService
+{
+    public static function sync()
+    {
+        try {
+            $userVisitMenuLogsL1 = Redis::LRANGE('UserVisitMenuLogsL1', 0, -1);
+            UserVisitMenuLog::query()->insert(self::redisListToArray($userVisitMenuLogsL1));
+            self::switchL1ToL2();
+        } catch (\Exception $e) {
+            return;
+        }
+    }
+
+    /**
+     * @param Request $request
+     */
+    public static function set(Request $request): void
+    {
+        $uri = substr($request->getRequestUri(), 1);
+        // 请求方法为get
+        if ($request->method() == 'GET') {
+            $menu = Menu::query()->where('route', $uri)->first();
+            if ($menu) {
+                //redis正常保存在缓存中
+                $date = date('Y-m-d H:i:s');
+                $userVisitMenuLog = new UserVisitMenuLog([
+                    'user_id' => Auth::user()['id'],
+                    'menu_id' => $menu->id,
+                    'created_at' => $date,
+                    'updated_at' => $date,
+                ]);
+                try {
+                    //菜单点击入缓存
+                    Redis::LPUSH('UserVisitMenuLogsL1', $userVisitMenuLog);
+                } catch (\Exception $e) {
+                    //连接不上缓存。直接入库
+                    $userVisitMenuLog->save();
+                }
+            }
+        }
+    }
+
+    /**
+     * 将缓存中的数据拿出保存,转换为数组,方便数据库保存
+     * @param $userVisitMenuLogsStr
+     * @return array
+     */
+    public static function redisListToArray($userVisitMenuLogsStr): array
+    {
+        $userVisitMenuLogsArr = [];
+        foreach ($userVisitMenuLogsStr as $userVisitMenuLog) {
+            $userVisitMenuLogObj = json_decode($userVisitMenuLog);
+            $userVisitMenuLogsArr[] = [
+                'user_id' => $userVisitMenuLogObj->user_id,
+                'menu_id' => $userVisitMenuLogObj->menu_id,
+                'created_at' => $userVisitMenuLogObj->created_at,
+                'updated_at' => $userVisitMenuLogObj->updated_at,
+            ];
+        }
+        return $userVisitMenuLogsArr;
+    }
+
+    /**
+     *将L1缓存转移到L2
+     */
+    public static function switchL1ToL2(): void
+    {
+        while (Redis::LLEN('UserVisitMenuLogsL1') > 0) {
+            Redis::LPUSH('UserVisitMenuLogsL2', Redis::LPOP('UserVisitMenuLogsL1'));
+        }
+    }
+}