MenuService.php 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. <?php
  2. namespace App\Services;
  3. use App\Traits\ServiceAppAop;
  4. use App\Menu;
  5. use Illuminate\Support\Facades\Cache;
  6. class MenuService
  7. {
  8. use ServiceAppAop;
  9. protected $modelClass=Menu::class;
  10. public function getMenu()
  11. {
  12. if (!Cache::has("menus")){
  13. if (Cache::lock("menus",2)){
  14. $this->setMenu();
  15. Cache::lock("menus")->release();
  16. }else{
  17. sleep(1);
  18. return Cache::get("menus") ?? [];
  19. }
  20. }
  21. return Cache::get("menus");
  22. }
  23. public function setMenu()
  24. {
  25. Cache::forever("menus",Menu::query()->select("id","name","parent_id","route")->orderByRaw("level DESC,sequence")->get());
  26. Cache::tags("menu")->flush();
  27. }
  28. public function appendMenu(Menu $menu)
  29. {
  30. $menus = $this->getMenu();
  31. if ($menus){
  32. $menus->add($menu);
  33. Cache::forever("menus",$menus);
  34. }
  35. }
  36. public function getVisibleFunctionList()
  37. {
  38. $authorities = app("AuthorityService")->getUserAuthority();
  39. }
  40. }