|
@@ -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)
|