Explorar o código

常用菜单 service 获取常用菜单

ANG YU %!s(int64=5) %!d(string=hai) anos
pai
achega
de9ab70c40

+ 27 - 0
app/Services/CheckActiveMenuService.php

@@ -5,8 +5,10 @@ namespace App\Services;
 
 
 
 
 use App\Menu;
 use App\Menu;
+use App\User;
 use App\UserVisitMenuLog;
 use App\UserVisitMenuLog;
 use Illuminate\Http\Request;
 use Illuminate\Http\Request;
+use Illuminate\Support\Arr;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Redis;
 use Illuminate\Support\Facades\Redis;
 
 
@@ -52,6 +54,31 @@ class CheckActiveMenuService
         }
         }
     }
     }
 
 
+    public static function activeMenus()
+    {
+        if (Redis::LLEN('UserVisitMenuLogsL1') + Redis::LLEN('UserVisitMenuLogsL2') > 0) {
+            //缓存中有数据
+
+            $array1 = self::redisListToArray(Redis::LRANGE('UserVisitMenuLogsL1', 0, -1));
+            $array2 = self::redisListToArray(Redis::LRANGE('UserVisitMenuLogsL2', 0, -1));
+            $array = array_merge($array1, $array2);
+            $conller = collect($array);
+            $user_id = 1;
+            if (Auth::user()) {
+                $user_id = Auth::user()->id;
+            }
+            $arr = $conller->filter(function ($item) use ($user_id){
+                return $user_id === $item['user_id'];
+            })->groupBy('menu_id')->sortByDesc(function ($item){
+                return $item->count();
+            })->forPage(0,5)->keys();
+            $menus = Menu::query()->find($arr)->sortBy(function($item)use($arr){
+                return $arr->search($item->id);
+            });
+            dd($menus,$arr);
+        }
+    }
+
     /**
     /**
      * 将缓存中的数据拿出保存,转换为数组,方便数据库保存
      * 将缓存中的数据拿出保存,转换为数组,方便数据库保存
      * @param $userVisitMenuLogsStr
      * @param $userVisitMenuLogsStr

+ 26 - 0
tests/Services/CheckActiveMenuService/CheckActiveMenuServiceActiveMenusTest.php

@@ -0,0 +1,26 @@
+<?php
+
+namespace Tests\Services\CheckActiveMenuService;
+
+use App\Services\CheckActiveMenuService;
+use App\UserVisitMenuLog;
+use Illuminate\Support\Facades\Redis;
+use Tests\TestCase;
+
+class CheckActiveMenuServiceActiveMenusTest extends TestCase
+{
+    /** @var CheckActiveMenuService $checkActiveMenuService */
+    public $checkActiveMenuService;
+
+    public function setUp(): void
+    {
+        parent::setUp();
+        $this->checkActiveMenuService = app('CheckActiveMenuService');
+    }
+
+    public function testActiveMenus()
+    {
+        $this->checkActiveMenuService->activeMenus();
+    }
+
+}