Kaynağa Gözat

Merge branch 'kuaiyingyong' of iqiyoo:zhuishuyun_wap into zhucj

zhuchengjie 2 yıl önce
ebeveyn
işleme
a35ab42839

+ 54 - 3
app/Http/Controllers/QuickApp/Book/BookController.php

@@ -9,7 +9,7 @@ use App\Modules\RecommendBook\Services\RecommendService;
 use App\Modules\Book\Services\RecoBannerService;
 use App\Modules\User\Models\QappPackage;
 use App\Modules\User\Services\QappUserService;
-use Hashids\Hashids;
+
 use Illuminate\Http\Request;
 use App\Http\Controllers\QuickApp\BaseController;
 use App\Http\Controllers\QuickApp\Book\Transformers\BookTransformer;
@@ -24,6 +24,7 @@ use App\Modules\Subscribe\Services\BookOrderService;
 use App\Modules\Subscribe\Services\ChapterOrderService;
 use App\Modules\Subscribe\Services\YearOrderService;
 use App\Modules\User\Services\ReadRecordService;
+use Hashids;
 
 class BookController extends BaseController
 {
@@ -47,7 +48,7 @@ class BookController extends BaseController
             $book_info->is_on_shelf = 0;
         }
 
-        if (!in_array($book_info->is_on_shelf, [2])) {
+        if (!in_array($book_info->is_on_shelf, [1,2])) {
             return response()->error('QAPP_OFF_SHELF');
         }
         $is_on_shelf                   = UserShelfBooksService::getUserShelfBooksListByUidAndBid($this->uid, $bid);
@@ -171,12 +172,16 @@ class BookController extends BaseController
         $brand       = $request->header('x-nbrand', '');
         $codeVersion = $request->header('x-codeversion', '');
         $isAuth = check_qapp_auth($package ,0);
+        $send_order_id = $request->header('send-order-id', 0);
         // 根据包名、平台、版本号判断是否审核
         if (Utils::checkIsAudit($package, $brand, $codeVersion) || $isAuth == false) {
             $result = BookAuditService::getHomeBooksData($sex, $package,$isAuth);
             return response()->success($result);
         }
-
+        if($send_order_id >  0 && $package == "com.beidao.kuaiying.yueai" && $sex == "male"){
+            $result  = BookAuditService::getYueaiHomeBooksData($sex, $package,$isAuth,1);
+            return  response()->success($result);
+        }
         if ($sex == 'male') {
             $channel          = 1;
             $reco_banner_type = ['MALE', 'PUBLIC'];
@@ -566,6 +571,20 @@ class BookController extends BaseController
         });
         return response()->success($books);
     }
+    /**
+     * 阅爱小说任务轮播图
+     */
+    public function recommenYueAi()
+    {
+        $data = config('home.yueai');
+        $books = $data['task_banner'];
+        foreach ($books as  &$value){
+            $value['bid'] =Hashids::encode($value['bid']);
+            $value['redirect_url '] = empty($value['cid']) ? "views/Detail" :  "views/Reader";
+        }
+        unset($value);
+        return response()->success($books);
+    }
 
     /**
      * 限免
@@ -575,4 +594,36 @@ class BookController extends BaseController
         $result = BookConfigService::findFreeBooks($sex);
         return response()->success($result);
     }
+
+    public function yueaiBackRecom(Request $request)
+    {
+
+        $category_id = $request->input('category_id');
+        $bid         = $request->input('bid');
+        $package     = $request->header('x-package', '');
+        if (empty($package) || $package != 'com.beidao.kuaiying.yueai') {
+            return response()->error('PARAM_ERROR');
+        }
+        $bid =  [58238,60534,63220,12587,63221,63548,14022,59334,58888,63417,61701];
+        $bid = array_random($bid,4);
+        $books = BookConfigService::getBooksByIds($bid,[],false);
+        return response()->collection(new BookTransformer(), $books);
+    }
+
+    public function shelfRecom(Request $request)
+    {
+
+        $category_id = $request->input('category_id');
+        $bid         = $request->input('bid');
+        $package     = $request->header('x-package', '');
+        if (empty($package) || $package != 'com.beidao.kuaiying.yueai') {
+            return response()->success([]);
+        }
+        $bid =  [58238,60534,63220,12587,63221,63548,14022,59334,58888,63417,61701];
+        $bid = array_random($bid,4);
+        $books = BookConfigService::getBooksByIds($bid,[],false);
+        return response()->collection(new BookTransformer(), $books);
+    }
+
+
 }

+ 73 - 0
app/Http/Controllers/QuickApp/User/ReadRecordController.php

@@ -126,7 +126,80 @@ class ReadRecordController extends BaseController
         return response()->collection(new ReadRecordTransformer(), array_to_object($res));
     }
 
+    /***
+     * 获取上次阅读记录
+     * name: lastReadRecord
+     * @param Request $request
+     * @return mixed
+     * date 2022/08/17 15:07
+     */
+    public function lastReadRecord(Request $request)
+    {
+        $res  = ReadRecordService::getReadRecord($this->uid);
+        $package = $request->header('x-package', '');
+        //补充操作:如果该用户未订阅该下架的书籍则删除其阅读记录(书架不予显示)
+        //判断是否属于包年用户
+        $year_account = YearOrderService::getRecord($this->uid);
 
+        if ($res) {
+            $bids = array_column($res,'bid');
+            $channel_id = ($package === 'com.beidao.kuaiying.zsy') ? 7477 : 0;
+            $book = BookConfigService::getBooksByIds($bids, [], false);//下架图书最近阅读可看到
+            $book = array_column(($book->toArray()),null,'bid');
+            foreach ($res as  &$value) {
+                $value['cover']        = '';
+                $value['last_chapter'] = 0;
+                $value['intro'] = '';
+                $value['status'] = '';
+                $value['size'] = 0;
+                $value['author'] = '';
+                if(isset($book[$value['bid']])){
+                    $info = $book[$value['bid']];
+                    $value['book_name']    = $info['book_name'];
+                    $value['cover']        =  $info['cover'];
+                    $value['last_chapter'] = $info['last_chapter'];
+                    $value['intro'] =  $info['intro'];
+                    $value['status'] =  $info['status'];
+                    $value['size'] =  $info['size'];
+                    $value['author'] =  $info['author'];
+                    if($channel_id === 7477){
+                        $hidden = getHiddenCp();
+                    }else{
+                        $hidden = array_merge(getHiddenCp(),['lianshang']);
+                    }
+                    if((!$year_account && !in_array( $info['is_on_shelf'],[1,2])) || in_array( $info['cp_source'],$hidden)){
+                        //获取书籍充值类型
+                        $charge_type =  $info['charge_type'];
+                        if($charge_type == 'BOOK'){
+                            //是否购买过该书,购买过则不删除
+                            $result = BookOrderService::getRecordByuidBid($this->uid, $info['bid']);
+                        }elseif($charge_type == 'CHAPTER'){
+                            //是否购买过该书章节,购买过则不删除
+                            $result = ChapterOrderService::checkBookIsOrdered($this->uid,$info['bid']);
+                        }else{
+                            $result = false;
+                        }
+                        if (!$result) {
+                            unset($value);
+                            ReadRecordService::delReadRecordStatic($this->uid,[$info['bid']]);
+                        }
+                    }
+                }else{
+                    unset($value);
+                }
+            }
+            unset($value);
+        }
+
+        usort($res, function ($a, $b) {
+            if ($a['time'] >= $b['time']) return -1;
+            return 1;
+        });
+        if (count($res) >  0){
+            return response()->success((new ReadRecordTransformer())->transform(array_to_object($res[0])));
+        }
+        return response()->success();
+    }
     /**
      * @apiVersion 1.0.0
      * @apiDescription 添加阅读记录

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

@@ -71,6 +71,10 @@ Route::group(['domain' => env('QUICKAPP_DOMAIN'), 'namespace' => 'App\Http\Contr
         Route::get('customer_img', 'WelcomeController@getCustomerServiceImg');
         //书库
         Route::get('books/recommen', 'Book\BookController@recommen');
+        // 阅爱小说任务页面书籍位置
+        Route::get('books/recommen_yueai', 'Book\BookController@recommenYueAi');
+        // 书籍推荐书籍
+        Route::get('books/shelf_recom', 'Book\BookController@shelfRecom');
         //阅读完后的推荐
         Route::get('books/readOverRecommend', 'Book\BookController@readOverRecommend');
         //图书详情
@@ -189,6 +193,9 @@ Route::group(['domain' => env('QUICKAPP_BACK_DOMAIN'), 'namespace' => 'App\Http\
         // 相似推荐
         Route::get('books/similar', 'Book\BookController@similarRecom');
 
+        //阅爱小说返回推荐书单
+        Route::get('books/back_recom_yueai', 'Book\BookController@yueaiBackRecom');
+
         //排行榜
         Route::get('books/rank', 'Book\BookController@rank');
     });
@@ -202,6 +209,10 @@ Route::group(['domain' => env('QUICKAPP_BACK_DOMAIN'), 'namespace' => 'App\Http\
         Route::get('customer_img', 'WelcomeController@getCustomerServiceImg');
         //书库
         Route::get('books/recommen', 'Book\BookController@recommen');
+        // 阅爱小说任务页面书籍位置
+        Route::get('books/recommen_yueai', 'Book\BookController@recommenYueAi');
+        // 书籍推荐书籍
+        Route::get('books/shelf_recom', 'Book\BookController@shelfRecom');
         //阅读完后的推荐
         Route::get('books/readOverRecommend', 'Book\BookController@readOverRecommend');
         //图书详情
@@ -250,6 +261,8 @@ Route::group(['domain' => env('QUICKAPP_BACK_DOMAIN'), 'namespace' => 'App\Http\
         Route::get('userShelfBooks/isonshelf', 'User\UserShelfBooksController@isOnshelf');
         //阅读记录
         Route::get('readrecord', 'User\ReadRecordController@index');
+        // 最后阅读
+        Route::get('lastreadrecord', 'User\ReadRecordController@lastReadRecord');
         //添加阅读记录
         Route::post('readrecord', 'User\ReadRecordController@addReadRecord');
         //删除阅读记录

+ 101 - 0
app/Modules/Book/Services/BookAuditService.php

@@ -5,6 +5,7 @@ namespace App\Modules\Book\Services;
 
 
 use App\Http\Controllers\QuickApp\Book\Transformers\BookTransformer;
+use App\Modules\Book\Models\BookConfig;
 
 class BookAuditService
 {
@@ -67,4 +68,104 @@ class BookAuditService
             ],
         ];
     }
+
+    public static function getYueaiHomeBooksData($sex, $package,$is_auth,$channel): array
+    {
+        $home = config('home.yueai');
+        if (!$is_auth){
+            $home = config('home.ycsd');
+        }
+        $banner      = $home['reco_banner'];
+        $bannerBooks = $banner[$sex];
+
+        // 模块
+        [$hot, $live, $recom, $new] = [$home['hot'], $home['zhibo'], $home['recom'], $home['new_recom']];
+        [$hotBids, $liveBids, $recomBids, $newBids] = [$hot[$sex], $live[$sex], $recom[$sex], $new[$sex]];
+
+        return [
+            [
+                'type'  => 'reco_banner',
+                'lable' => $banner['label'],
+                'books' => $bannerBooks
+            ],
+            [
+                'type'  => 'hot',
+                'lable' => $hot['label'],
+                'books' => collectionTransform(new BookTransformer, BookConfigService::getBooksByIds(self::getCheckBooks($hotBids,$channel,$package,$is_auth),[],false)),
+            ],
+            [
+                'type'  => 'zhibo',
+                'lable' => $live['label'],
+                'books' => collectionTransform(new BookTransformer, BookConfigService::getBooksByIds(self::getCheckBooks($liveBids,$channel,$package,$is_auth),[],false)),
+            ],
+            [
+                'type'  => 'recom',
+                'lable' => $recom['label'],
+                // 'books' => collectionTransform(new BookTransformer, collect($books)->whereIn('bid', $recomBids)->all())
+                 'books' => collectionTransform(new BookTransformer, BookConfigService::getBooksByIds(self::getCheckBooks($recomBids,$channel,$package,$is_auth),[],false)),
+
+            ],
+            [
+                'type'  => 'new_recom',
+                'lable' => $new['label'],
+                // 'books' => collectionTransform(new BookTransformer, collect($books)->whereIn('bid', $newBids)->all())
+                'books' => collectionTransform(new BookTransformer, BookConfigService::getBooksByIds(self::getCheckBooks($newBids,$channel,$package,$is_auth),[],false)),
+            ],
+        ];
+    }
+
+    private static function getCheckBooks($bid_list,$channel,$package,$is_author)
+    {
+        $hidden_cp = getHiddenCp();
+        if($package !== 'com.beidao.kuaiying.zsy'){
+            $hidden_cp = array_merge($hidden_cp,['lianshang']);
+        }
+        //获取书本数量
+        $count = count($bid_list);
+        $where = [
+            ['book_configs.charge_type','!=','BOOK'],
+        ];
+        //获取当前有效书本数量
+        $book_count = BookConfig::join('books', 'book_configs.bid', '=', 'books.id')
+            ->leftjoin('book_categories', 'books.category_id', 'book_categories.id')
+            ->whereIn('book_configs.bid',$bid_list)
+            ->whereIn('book_configs.is_on_shelf',[1,2])
+            ->whereNotIn('book_configs.cp_source',$hidden_cp)
+            ->where($where)
+            ->where('book_categories.pid',$channel)
+            ->count();
+        if($count == $book_count){
+            return $bid_list;
+        }
+        //获取需要补充的书籍数量
+        $supplement_count = (($count - $book_count) > 0) ? $count - $book_count : 0;
+        if($supplement_count <= 0){
+            return $bid_list;
+        }
+        //获取书籍交集bid,过滤掉不符合要求的书
+        $bids = BookConfig::join('books', 'book_configs.bid', '=', 'books.id')
+            ->leftjoin('book_categories', 'books.category_id', 'book_categories.id')
+            ->whereIn('book_configs.bid',$bid_list)
+            ->whereIn('book_configs.is_on_shelf',[1,2])
+            ->where($where)
+            ->whereNotIn('book_configs.cp_source',$hidden_cp)
+            ->where('book_categories.pid',$channel)
+            ->pluck('book_configs.bid')->all();
+        $bid_list = array_intersect($bid_list,$bids);
+
+        //获取随机的有效的书籍bid
+        $rand_bid = BookConfig::join('books', 'book_configs.bid', '=', 'books.id')
+            ->leftjoin('book_categories', 'books.category_id', 'book_categories.id')
+            ->where('book_configs.is_on_shelf',2)
+            // ->where('book_configs.charge_type','!=','BOOK')
+            ->where($where)
+            ->whereNotIn('book_configs.cp_source',$hidden_cp)
+
+            ->where('book_categories.pid',$channel)
+            ->inRandomOrder()
+            ->limit($supplement_count)
+            ->get()->pluck('bid')->toArray();
+
+        return array_filter(array_merge($bid_list,$rand_bid));
+    }
 }

+ 72 - 1
config/home.php

@@ -123,10 +123,81 @@ return [
             'female' => [10846,60736,61425,10074,15216,60734],
         ],
     ],
+
+    'yueai'     => [
+        'reco_banner' => [
+            'label'  => '首页banner',
+            'male'   => [
+                [
+                    'redirect_url' => 'views/Detail',
+                    'banner_url'   => 'https://zhuishuyun.oss-cn-hangzhou.aliyuncs.com/app/banner/202208121702.jpeg',
+                    'bid'          => '95b7L6pwB84Aklkm44R0Y3rV1PqNOvjx', // 63482
+                    'cid'          => 0
+                ],[
+                    'redirect_url' => 'views/Detail',
+                    'banner_url'   => 'https://zhuishuyun.oss-cn-hangzhou.aliyuncs.com/app/banner/202208121709.jpeg',
+                    'bid'          => '5Z30ezoGbVxwMgw8ybRvYEWPjkOr61dJ', // 63547
+                    'cid'          => 0
+                ],
+                [
+                    'redirect_url' => 'views/Detail',
+                    'banner_url'   => 'https://zhuishuyun.oss-cn-hangzhou.aliyuncs.com/app/banner/202208121707.jpeg',
+                    'bid'          => '9GLjdB1wEYPA3Kd0mAKXx0NDzrWqJpOk', // 60028
+                    'cid'          => 0
+                ],
+            ],
+            'female' => [
+                [
+                    'redirect_url' => 'views/Detail',
+                    'banner_url'   => 'https://zhuishuyun.oss-cn-hangzhou.aliyuncs.com/book/cover/082576b8d38afc0b8c890c8d6e5dfc93.jpeg',
+                    'bid'          => '2VkOMpjBem8ZNgrxqQKY7d9r5LE03Dwz', // 15720 黑夜见过他深情
+                    'cid'          => 0
+                ],
+            ],
+        ],
+        'hot'         => [
+            'label'  => '热门书单',
+            'male'   => [63225,63183,14016,14927,58994,63226],
+            'female' => [14620,58195,11680,59296,13082,11681],
+        ],
+        'zhibo'       => [
+            'label'  => '神书直播',
+            'male'   => [63199,13300,58960,58890,62781,59784],
+            'female' => [58950,12331,59297,17055,15720,15537],
+        ],
+        'recom'       => [
+            'label'  => '小编精选',
+            'male'   => [63417,61736,15103,14351,58892,63226],
+            'female' => [11883,22394,12901,60902,11671,4112],
+        ],
+        'new_recom'   => [
+            'label'  => '人气新书',
+            'male'   => [63180,58896,13928,58894,14408,13931],
+            'female' => [10846,60736,61425,10074,15216,60734],
+        ],
+        'task_banner' =>  [
+            [
+                'redirect_url' => 'views/Detail',
+                'banner_url'   => 'https://zhuishuyun.oss-cn-hangzhou.aliyuncs.com/app/banner/202208151143thwzysn.jpeg',
+                'bid'          => 63187, //   下山退婚,我只要师娘!
+                'cid'          => 0
+            ],
+            [
+                'redirect_url' => 'views/Detail',
+                'banner_url'   => 'https://zhuishuyun.oss-cn-hangzhou.aliyuncs.com/app/banner/202208151144syty.jpeg',
+                'bid'          => 59334, //  世外桃源
+                'cid'          => 0
+            ],[
+                'redirect_url' => 'views/Detail',
+                'banner_url'   => 'https://zhuishuyun.oss-cn-hangzhou.aliyuncs.com/app/banner/202208151145hztx.jpeg',
+                'bid'          => 58734, // 59334 寒战天下
+                'cid'          => 0
+            ]
+        ]
+    ],
     'rank' =>[
         'male'   => [86,2942,2943,2773,2900,2921,2929,2935,2940,2944,2903,2928,2945,2948,17,85,94,141,574,1190,1780,2885,2887,2915,2920,2923,2926,2927,2937,2939,2941,2947,2993],
         'female' => [14163,17055,3697,59004,15720,13082,58950,60902,61012,7567,11671,15537,16133,16184,16220,22393,22394,22395,58329,58801,58864,59020,59295,59293,60238,60736,61425,59297,59579,59813],
     ],
 
-
 ];