|
|
@@ -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'));
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|