zhuchengjie пре 2 година
родитељ
комит
cea44a887a
1 измењених фајлова са 43 додато и 14 уклоњено
  1. 43 14
      app/Modules/Channel/Services/ChannelRecommendBooksService.php

+ 43 - 14
app/Modules/Channel/Services/ChannelRecommendBooksService.php

@@ -9,28 +9,57 @@ use App\Modules\Channel\Models\ChannelRecommendBooks;
 class ChannelRecommendBooksService
 {
 
-    static function getRecommendBooks($channel_id,$bid,$priority,$limit = 3,$data = [])
+    static function getChannelBid($channel_id)
     {
+        return ChannelRecommendBooks::where('channel_id',$channel_id)->orderBy('priority','DESC')->orderBy('created_at','DESC')->pluck('bid')->all();
+    }
+
+    static function getMergerBids($channel_id,$bid)
+    {
+        $bids = self::getChannelBid($channel_id);
+
+        if(isset($bid) && $bid != 0){
+            $key = array_keys($bids,$bid);
+            if(!empty($key)){
+                $value = 1;
+                if(isset($bids[$key[0]+1])){
+                    $bidArr[] = $bids[$key[0]+1];
+                }else{
+                    $bidArr[] = $bids[$value];
+                    $value += 1;
+                }
+                if(isset($bids[$key[0]+2])){
+                    $bidArr[] = $bids[$key[0]+2];
+                }else{
+                    $bidArr[] = $bids[$value-1];
+                    $value += 1;
+                }
+                if(isset($bids[$key[0]+3])){
+                    $bidArr[] = $bids[$key[0]+2];
+                }else{
+                    $bidArr[] = $bids[$value-1];
+                }
+            }else{
+                $bidArr = [$bids[0],$bids[1],$bids[2]];
+            }
+        }else{
+            $bidArr = [$bids[0],$bids[1],$bids[2]];
+        }
+        return $bidArr;
+    }
+
+    static function getRecommendBooks($channel_id,$bid = 0)
+    {
+        $bids = self::getMergerBids($channel_id,$bid);
         if(!isset($channel_id)) return [];
         $query = ChannelRecommendBooks::leftjoin('book_configs','book_configs.bid','channel_recommend_books.bid')
             ->leftjoin('books','books.id','channel_recommend_books.bid')
             ->select('books.intro','books.category_name','book_configs.book_name','book_configs.cover','book_configs.bid','channel_recommend_books.priority')
             ->orderBy('channel_recommend_books.priority','DESC')->orderBy('channel_recommend_books.created_at','DESC');
 
-        $query->where('channel_recommend_books.channel_id',$channel_id);
-
-        if(!empty($priority) && $priority != 0){
-            $query->where('channel_recommend_books.priority','<=',$priority)->where('channel_recommend_books.bid','!=',$bid);
-        }
+        $query->where('channel_recommend_books.channel_id',$channel_id)->whereIn('channel_recommend_books.bid',$bids);
 
-        $list = $query->limit($limit)->get()->toArray();
-        $lists = array_merge($list,$data);
-        if(count($lists) < 3){
-            $count = 3 - count($lists);
-            self::getRecommendBooks($channel_id,$bid,0,$count,$lists);
-        }else{
-            return $lists;
-        }
+        return $query->get()->toArray();
     }
 
     static function incrRecommendNum($channel_id,$bids)