LiveCategoryService.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | LARAVEL8.0 框架 [ LARAVEL ][ RXThinkCMF ]
  4. // +----------------------------------------------------------------------
  5. // | 版权所有 2017~2021 LARAVEL研发中心
  6. // +----------------------------------------------------------------------
  7. // | 官方网站: http://www.laravel.cn
  8. // +----------------------------------------------------------------------
  9. // | Author: laravel开发员 <laravel.qq.com>
  10. // +----------------------------------------------------------------------
  11. namespace App\Services\Api;
  12. use App\Models\LiveCategoryModel;
  13. use App\Services\BaseService;
  14. use App\Services\RedisService;
  15. /**
  16. * 直播分类管理-服务类
  17. * @author laravel开发员
  18. * @since 2020/11/11
  19. * @package App\Services\Api
  20. */
  21. class LiveCategoryService extends BaseService
  22. {
  23. // 静态对象
  24. protected static $instance = null;
  25. /**
  26. * 构造函数
  27. * @author laravel开发员
  28. * @since 2020/11/11
  29. * GoodsCategoryService constructor.
  30. */
  31. public function __construct()
  32. {
  33. $this->model = new LiveCategoryModel();
  34. }
  35. /**
  36. * 静态入口
  37. * @return static|null
  38. */
  39. public static function make()
  40. {
  41. if (!self::$instance) {
  42. self::$instance = (new static());
  43. }
  44. return self::$instance;
  45. }
  46. /**
  47. * 搜索
  48. * @param $params
  49. * @return array|mixed
  50. */
  51. public function search($params)
  52. {
  53. $cacheKey = "caches:live:categorys:search_".md5(json_encode($params));
  54. $datas = RedisService::get($cacheKey);
  55. if($datas){
  56. return $datas;
  57. }
  58. $ids = $this->model->where(['status'=>1,'mark'=>1,'pid'=>0])
  59. ->where(function($query) use($params){
  60. $kw = isset($params['kw'])? trim($params['kw']) : '';
  61. if($kw){
  62. $query->where('name','like',"%{$kw}%")
  63. ->orWhere('name_en','like', "%{$kw}%")
  64. ->orWhere('name_sk','like', "%{$kw}%")
  65. ->orWhere('name_fr','like', "%{$kw}%")
  66. ->orWhere('name_ind','like', "%{$kw}%")
  67. ->orWhere('name_jap','like', "%{$kw}%")
  68. ->orWhere('name_vie','like', "%{$kw}%")
  69. ->orWhere('name_tha','like', "%{$kw}%")
  70. ->orWhere('name_mal','like', "%{$kw}%");
  71. }
  72. })->pluck('id');
  73. $datas = $this->model->where(['status'=>1,'mark'=>1])
  74. ->where('pid','>',0)
  75. ->where(function($query) use($params, $ids){
  76. $kw = isset($params['kw'])? trim($params['kw']) : '';
  77. if($kw){
  78. $query->where('name','like',"%{$kw}%")
  79. ->orWhere('name_en','like', "%{$kw}%")
  80. ->orWhere('name_sk','like', "%{$kw}%")
  81. ->orWhere('name_fr','like', "%{$kw}%")
  82. ->orWhere('name_ind','like', "%{$kw}%")
  83. ->orWhere('name_jap','like', "%{$kw}%")
  84. ->orWhere('name_vie','like', "%{$kw}%")
  85. ->orWhere('name_tha','like', "%{$kw}%")
  86. ->orWhere('name_mal','like', "%{$kw}%");
  87. }
  88. if($ids){
  89. $query->orWhereIn('pid',$ids);
  90. }
  91. })
  92. ->select(['id','pid','name','name_sk','name_fr','name_ind','name_en','name_jap','name_mal','name_vie','name_tha','status'])
  93. ->orderBy('sort','desc')
  94. ->orderBy('id','asc')
  95. ->get();
  96. $datas = $datas? $datas->toArray() : [];
  97. if($datas){
  98. RedisService::set($cacheKey, $datas, 3600);
  99. }
  100. return $datas;
  101. }
  102. /**
  103. * 分类
  104. * @return array|mixed
  105. */
  106. public function options()
  107. {
  108. $cacheKey = "caches:live:categorys:list";
  109. $datas = RedisService::get($cacheKey);
  110. if($datas){
  111. return $datas;
  112. }
  113. $categorys = [];
  114. $datas = $this->model->where(['status'=>1,'mark'=>1])
  115. ->select(['id','pid','name','name_sk','name_fr','name_ind','name_en','name_jap','name_mal','name_vie','name_tha','status'])
  116. ->orderBy('sort','desc')
  117. ->orderBy('id','asc')
  118. ->get();
  119. $datas = $datas? $datas->toArray() : [];
  120. if($datas){
  121. foreach($datas as $item){
  122. $item['checked'] = false;
  123. $item['children'] = [];
  124. if($item['pid']){
  125. $categorys[$item['pid']]['children'] = isset($categorys[$item['pid']]['children'])? $categorys[$item['pid']]['children'] : [];
  126. $categorys[$item['pid']]['children'][] = $item;
  127. }else if ($item['pid'] == 0){
  128. $categorys[$item['id']] = $item;
  129. }
  130. }
  131. $categorys = array_values($categorys);
  132. RedisService::set($cacheKey, $categorys, 3600);
  133. }
  134. return $categorys;
  135. }
  136. }