123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- <?php
- namespace app\common\model;
- use app\common\library\Redis;
- use app\common\service\WaterBookService;
- use think\Model;
- class AppIndex extends Model
- {
- /**
- * 首页免费/完结/点击榜/畅销榜书籍列表接口数据
- * @param int $sex 性别频道 0不区分 1男 2女
- * @param string $type 类型
- * @param int $page 页码
- * @return array
- */
- public static function booklist($sex, $type, $page)
- {
- $redis = Redis::instance();
- $key = 'BL:'.$type . ':' . $sex . ':' . $page;
- if ($redis->exists($key)) {
- $data = $redis->get($key);
- $books = json_decode($data, true);
- } else {
- $map = array();
- 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();
- break;
- case 'sell': //畅销榜 按权重
- $books = model('Book')->where($map)->order("idx", "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) {
- $books[$key]['author'] = $categoryArr[$v['book_category_id']];
- }
- }
- $json = json_encode($books);
- $redis->setex($key, 900, $json);
- }
- return $books;
- }
- /**
- * 首页配置的指定区块书籍列表接口
- * @param int $block_id 区块id
- * @param int $page 页数
- * @return array
- */
- public static function blockbooklist($block_id, $page)
- {
- $redis = Redis::instance();
- $key = 'CBBL:' . $block_id;
- if (!$redis->exists($key)) {
- $where = array();
- $where['block_id'] = $block_id;
- $where['type'] = 1;
- $resources = model('client_manage_block_resource')
- ->where($where)
- ->select();
- if (!empty($resources)) {
- foreach ($resources as $k => $r) {
- $redis->zadd($key,$r['weigh'],'B:'.$r['book_id']);
- }
- $redis->expire($key,86400*7);
- }
- }
- $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) {
- if($redis->exists($bookkey)){
- $b = $redis->hgetall($bookkey);
- }else{
- $res = explode(':',$bookkey);
- $b = model('Book')->bookInfo($res[1]);
- }
- if($b){
- if ($b['state'] != 1) {
- continue;
- }
- $data[] = array(
- 'id'=>$b['id'],
- 'name'=>$b['name'],
- 'description'=>$b['description'],
- 'author'=>$categoryArr[$b['book_category_id']],
- 'image'=>$b['image'],
- 'read_num'=>$b['read_num'],
- );
- }
- }
- return $data;
- }
- }
|