AppIndex.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <?php
  2. namespace app\common\model;
  3. use app\common\library\Redis;
  4. use app\common\service\WaterBookService;
  5. use think\Model;
  6. class AppIndex extends Model
  7. {
  8. /**
  9. * 首页免费/完结/点击榜/畅销榜书籍列表接口数据
  10. * @param int $sex 性别频道 0不区分 1男 2女
  11. * @param string $type 类型
  12. * @param int $page 页码
  13. * @return array
  14. */
  15. public static function booklist($sex, $type, $page)
  16. {
  17. $redis = Redis::instance();
  18. $key = 'BL:'.$type . ':' . $sex . ':' . $page;
  19. if ($redis->exists($key)) {
  20. $data = $redis->get($key);
  21. $books = json_decode($data, true);
  22. } else {
  23. $map = array();
  24. if ($sex != 0) {
  25. $map['sex'] = $sex;
  26. }
  27. $map['state'] = 1;
  28. switch ($type) {
  29. case 'free': //免费榜
  30. $now = time();
  31. $map['free_stime'] = array('lt', $now);
  32. $map['free_etime'] = array('gt', $now);
  33. $books = model('Book')->where($map)->order("idx", "desc")->page($page, 10)->select();
  34. foreach ($books as $key => $book) {
  35. $from_date = date('m月d日', $book['free_stime']);
  36. $end_date = date('m月d日', $book['free_etime']);
  37. $books[$key]['free_period'] = $from_date . '至' . $end_date;
  38. }
  39. break;
  40. case 'finish': //完结榜
  41. $map['is_finish'] = 1;
  42. $map['id'] = array('gt', 1);
  43. $books = model('Book')->where($map)->order("idx", "desc")->page($page, 10)->select();
  44. break;
  45. case 'click': //点击榜
  46. $books = model('Book')->where($map)->order("read_num", "desc")->page($page, 10)->select();
  47. break;
  48. case 'sell': //畅销榜 按权重
  49. $books = model('Book')->where($map)->order("idx", "desc")->page($page, 10)->select();
  50. break;
  51. default: //默认就按阅读量排
  52. $books = model('Book')->where($map)->order("idx", "desc")->page($page, 10)->select();
  53. break;
  54. }
  55. if ($books) {
  56. $categoryArr = model("BookCategory")->getCategoryList();
  57. foreach ($books as $key=>$v) {
  58. $books[$key]['author'] = $categoryArr[$v['book_category_id']];
  59. }
  60. }
  61. $json = json_encode($books);
  62. $redis->setex($key, 900, $json);
  63. }
  64. return $books;
  65. }
  66. /**
  67. * 首页配置的指定区块书籍列表接口
  68. * @param int $block_id 区块id
  69. * @param int $page 页数
  70. * @return array
  71. */
  72. public static function blockbooklist($block_id, $page)
  73. {
  74. $redis = Redis::instance();
  75. $key = 'CBBL:' . $block_id;
  76. if (!$redis->exists($key)) {
  77. $where = array();
  78. $where['block_id'] = $block_id;
  79. $where['type'] = 1;
  80. $resources = model('client_manage_block_resource')
  81. ->where($where)
  82. ->select();
  83. if (!empty($resources)) {
  84. foreach ($resources as $k => $r) {
  85. $redis->zadd($key,$r['weigh'],'B:'.$r['book_id']);
  86. }
  87. $redis->expire($key,86400*7);
  88. }
  89. }
  90. $books = $redis->zrevrangebyscore($key,'+inf','-inf',array('withscores'=>false,'limit'=>array(($page-1)*10,10)));
  91. $categoryArr = model("BookCategory")->getCategoryList();
  92. $data = array();
  93. foreach ($books as $bookkey) {
  94. if($redis->exists($bookkey)){
  95. $b = $redis->hgetall($bookkey);
  96. }else{
  97. $res = explode(':',$bookkey);
  98. $b = model('Book')->bookInfo($res[1]);
  99. }
  100. if($b){
  101. if ($b['state'] != 1) {
  102. continue;
  103. }
  104. $data[] = array(
  105. 'id'=>$b['id'],
  106. 'name'=>$b['name'],
  107. 'description'=>$b['description'],
  108. 'author'=>$categoryArr[$b['book_category_id']],
  109. 'image'=>$b['image'],
  110. 'read_num'=>$b['read_num'],
  111. );
  112. }
  113. }
  114. return $data;
  115. }
  116. }