ChannelRecommendBooksService.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. namespace App\Modules\Channel\Services;
  3. use App\Modules\Channel\Models\ChannelRecommendBooks;
  4. class ChannelRecommendBooksService
  5. {
  6. static function getChannelBid($channel_id)
  7. {
  8. return ChannelRecommendBooks::where('channel_id',$channel_id)->orderBy('priority','DESC')->orderBy('created_at','DESC')->pluck('bid')->all();
  9. }
  10. static function getMergerBids($channel_id,$bid)
  11. {
  12. $bids = self::getChannelBid($channel_id);
  13. if(isset($bid) && $bid != 0){
  14. $key = array_keys($bids,$bid);
  15. if(!empty($key)){
  16. $value = 1;
  17. if(isset($bids[$key[0]+1])){
  18. $bidArr[] = $bids[$key[0]+1];
  19. }else{
  20. $bidArr[] = $bids[$value];
  21. $value += 1;
  22. }
  23. if(isset($bids[$key[0]+2])){
  24. $bidArr[] = $bids[$key[0]+2];
  25. }else{
  26. $bidArr[] = $bids[$value-1];
  27. $value += 1;
  28. }
  29. if(isset($bids[$key[0]+3])){
  30. $bidArr[] = $bids[$key[0]+2];
  31. }else{
  32. $bidArr[] = $bids[$value-1];
  33. }
  34. }else{
  35. $bidArr = [$bids[0],$bids[1],$bids[2]];
  36. }
  37. }else{
  38. $bidArr = [$bids[0],$bids[1],$bids[2]];
  39. }
  40. return $bidArr;
  41. }
  42. static function getRecommendBooks($channel_id,$bid = 0)
  43. {
  44. $bids = self::getMergerBids($channel_id,$bid);
  45. if(!isset($channel_id)) return [];
  46. $query = ChannelRecommendBooks::leftjoin('book_configs','book_configs.bid','channel_recommend_books.bid')
  47. ->leftjoin('books','books.id','channel_recommend_books.bid')
  48. ->select('books.intro','books.category_name','book_configs.book_name','book_configs.cover','book_configs.bid','channel_recommend_books.priority')
  49. ->orderBy('channel_recommend_books.priority','DESC')->orderBy('channel_recommend_books.created_at','DESC');
  50. $query->where('channel_recommend_books.channel_id',$channel_id)->whereIn('channel_recommend_books.bid',$bids);
  51. return $query->get()->toArray();
  52. }
  53. static function incrRecommendNum($channel_id,$bids)
  54. {
  55. return ChannelRecommendBooks::where('channel_id',$channel_id)->whereIn('bid',$bids)->increment('recommend_num');
  56. }
  57. }