Browse Source

'返回推荐书籍'

zhuchengjie 2 years ago
parent
commit
74d2a04ad7

+ 38 - 0
app/Http/Controllers/QuickApp/Book/BookController.php

@@ -4,6 +4,8 @@ namespace App\Http\Controllers\QuickApp\Book;
 
 use App\Libs\Utils;
 use App\Modules\Book\Services\BookAuditService;
+use App\Modules\Channel\Services\ChannelRecommendBookConfigService;
+use App\Modules\Channel\Services\ChannelRecommendBooksService;
 use App\Modules\RecommendBook\Services\QappRecommendService;
 use App\Modules\RecommendBook\Services\RecommendService;
 use App\Modules\Book\Services\RecoBannerService;
@@ -625,5 +627,41 @@ class BookController extends BaseController
         return response()->collection(new BookTransformer(), $books);
     }
 
+    /**
+     * 新推荐书单
+     * @param Request $request
+     * @return mixed
+     */
+    public function recommend_books(Request $request)
+    {
+        $package = $request->header('x-package','');
+        $id = $request->get('id',0);
+        if(empty($package)){
+            return response()->success([]);
+        }
+
+        //判断包是否存在
+        $package_info = QappPackage::getPackageByPackage($package);
+        if(empty($package_info) || !isset($package_info->channel_id)){
+            return response()->success([]);
+        }
+
+        //包对应有没有配置开启推荐书单
+        $config = ChannelRecommendBookConfigService::getRecommendConfigs($package_info->channel_id);
+        if(empty($config) || !isset($config->status) || $config->status == 0){
+            return response()->success([]);
+        }
+
+        $list = ChannelRecommendBooksService::getRecommendBooks($package_info->channel_id,$id);
+
+        //获取返回的bid
+        $bid = array_column($list,'bid');
+
+        //次数+1
+        ChannelRecommendBooksService::incrRecommendNum($package_info->channel_id,$bid);
+
+        return response()->success($list);
+    }
+
 
 }

+ 3 - 0
app/Http/Routes/QuickApp/QuickAppRoutes.php

@@ -75,6 +75,9 @@ Route::group(['domain' => env('QUICKAPP_DOMAIN'), 'namespace' => 'App\Http\Contr
         Route::get('books/recommen_yueai', 'Book\BookController@recommenYueAi');
         // 书籍推荐书籍
         Route::get('books/shelf_recom', 'Book\BookController@shelfRecom');
+        //新书籍推荐
+        Route::get('books/recommend_books', 'Book\BookController@recommend_books');
+
         //阅读完后的推荐
         Route::get('books/readOverRecommend', 'Book\BookController@readOverRecommend');
         //图书详情

+ 15 - 0
app/Modules/Channel/Models/ChannelRecommendBookConfig.php

@@ -0,0 +1,15 @@
+<?php
+
+
+namespace App\Modules\Channel\Models;
+
+
+use Illuminate\Database\Eloquent\Model;
+
+class ChannelRecommendBookConfig extends Model
+{
+
+    protected $table = 'channel_recommend_book_config';
+    protected $fillable = ['id', 'channel_id', 'type', 'frequency', 'person', 'status',
+        'created_at', 'updated_at'];
+}

+ 18 - 0
app/Modules/Channel/Models/ChannelRecommendBooks.php

@@ -0,0 +1,18 @@
+<?php
+
+
+namespace App\Modules\Channel\Models;
+
+
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\SoftDeletes;
+
+class ChannelRecommendBooks extends Model
+{
+
+    use SoftDeletes;
+    protected $table = 'channel_recommend_books';
+    protected $fillable = ['id', 'channel_id', 'bid', 'priority', 'recommend_num', 'check_num',
+        'created_at', 'updated_at'];
+    protected $dates = ['deleted_at'];
+}

+ 16 - 0
app/Modules/Channel/Services/ChannelRecommendBookConfigService.php

@@ -0,0 +1,16 @@
+<?php
+
+
+namespace App\Modules\Channel\Services;
+
+
+use App\Modules\Channel\Models\ChannelRecommendBookConfig;
+
+class ChannelRecommendBookConfigService
+{
+
+    static function getRecommendConfigs($channel_id)
+    {
+        return ChannelRecommendBookConfig::where('channel_id',$channel_id)->first();
+    }
+}

+ 41 - 0
app/Modules/Channel/Services/ChannelRecommendBooksService.php

@@ -0,0 +1,41 @@
+<?php
+
+
+namespace App\Modules\Channel\Services;
+
+
+use App\Modules\Channel\Models\ChannelRecommendBooks;
+
+class ChannelRecommendBooksService
+{
+
+    static function getRecommendBooks($channel_id,$id,$limit = 3,$data = [])
+    {
+        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')
+            ->orderBy('channel_recommend_books.priority','DESC')->orderBy('channel_recommend_books.created_at','DESC');
+
+        $query->where('channel_recommend_books.channel_id',$channel_id);
+
+        if(!empty($id) && $id != 0){
+            $query->where('id','<',$id);
+        }
+
+        $list = $query->limit($limit)->get()->toArray();
+
+        $data = array_merge($list,$data);
+        if(count($data) < 3){
+            $count = 3 - count($data);
+            self::getRecommendBooks($channel_id,$id,$count,$data);
+        }
+
+        return $data;
+    }
+
+    static function incrRecommendNum($channel_id,$bids)
+    {
+        return ChannelRecommendBooks::where('channel_id',$channel_id)->whereIn('bid',$bids)->increment('recommend_num');
+    }
+}