get($key); if ($data) { $books = json_decode($data, true); } else { $map = array(); if ($is_water) { $map['book.classify_white_list'] = 1; } if ($sex != 0) { $map['sex'] = $sex; } $map['state'] = 1; switch ($type) { case 'free': //免费榜 $now = time(); $map['free_stime'] = array('lt', $now); $map['free_etime'] = array('gt', $now); $books = model('Book')->where($map)->order("idx", "desc")->page($page, 10)->select(); foreach ($books as $key => $book) { $from_date = date('m月d日', $book['free_stime']); $end_date = date('m月d日', $book['free_etime']); $books[$key]['free_period'] = $from_date . '至' . $end_date; } break; case 'finish': //完结榜 $map['is_finish'] = 1; $map['id'] = array('gt', 1); $books = model('Book')->where($map)->order("idx", "desc")->page($page, 10)->select(); break; case 'click': //点击榜 //$books = model('Book')->where($map)->order("read_num", "desc")->page($page, 10)->select(); $books = model('BookRanklist')->join('book', 'book_ranklist.book_id = book.id', 'left')->field('book.*')->where($map)->where('rank_category', 'eq', '0')->where('book_ranklist.status', 'eq', 'normal')->order("book_ranklist.weight", "desc")->order("book_ranklist.createtime", "desc")->page($page, 10)->select(); break; case 'sell': //畅销榜 按权重 //$books = model('Book')->where($map)->order("idx", "desc")->page($page, 10)->select(); $books = model('BookRanklist')->join('book', 'book_ranklist.book_id = book.id', 'left')->field('book.*')->where($map)->where('rank_category', 'eq', '1')->where('book_ranklist.status', 'eq', 'normal')->order("book_ranklist.weight", "desc")->order("book_ranklist.createtime", "desc")->page($page, 10)->select(); break; default: //默认就按阅读量排 $books = model('Book')->where($map)->order("idx", "desc")->page($page, 10)->select(); break; } if ($books) { $categoryArr = model("BookCategory")->getCategoryList(); foreach ($books as $key => $v) { // 是否展示 CP - VIP 付费角标 $books[$key]['vip_pay'] = BookService::instance()->showCpVipSubScript($v['id']); $books[$key]['author'] = $categoryArr[$v['book_category_id']]; $books[$key]['category_text'] = $categoryArr[$v['book_category_id']]; } } $json = json_encode($books); $redis->setex($key, 900, $json); } return $books; } /** * 首页配置的指定区块书籍列表接口 * @param int $block_id 区块id * @param int $page 页数 * @param int $is_water 是否清水 * @return array */ public static function blockbooklist($block_id, $page, $is_water=false) { $redis = Redis::instance(); if (!$is_water) { $key = 'BBL:' . $block_id; } else { $key = 'BBL:W:' . $block_id; } if (!$redis->exists($key)) { $where = array(); $where['manage_block_resource.block_id'] = $block_id; $where['manage_block_resource.type'] = 1; if($is_water){ $resources = model('manage_block_resource') ->join('book','manage_block_resource.book_id=book.id and book.state=1 and book.classify_white_list=1','left') ->where($where) ->select(); }else{ $resources = model('manage_block_resource') ->join('book', 'manage_block_resource.book_id=book.id and book.state=1') ->where($where) ->select(); } if (!empty($resources)) { foreach ($resources as $k => $r) { $redis->zadd($key,$r['weigh'],'B:'.$r['book_id']); } $redis->expire($key,3600); } } $books = $redis->zrevrangebyscore($key,'+inf','-inf',array('withscores'=>false,'limit'=>array(($page-1)*10,10))); // $categoryArr = model("BookCategory")->getCategoryList(); $data = array(); foreach ($books as $bookkey) { $b = $redis->hgetall($bookkey); if (empty($b)) { $res = explode(':', $bookkey); $b = model('Book')->bookInfo($res[1]); } if ($b) { if ($b['state'] != 1) { continue; } $bookInfo = [ 'id' => $b['id'], 'name' => $b['name'], 'description' => $b['description'], 'author' => $b['author'], 'image' => $b['image'], 'read_num' => $b['read_num'], 'is_finish' => $b['is_finish'], 'vip_pay' => BookService::instance()->showCpVipSubScript($b['id']), ]; $bookInfo['tags'] = empty($b['tags']) ? [] : explode(',', $b['tags']); $data[] = $bookInfo; } } return $data; } }