123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- <?php
- /**
- * Created by PhpStorm.
- * User: Elton
- * Date: 2019/9/7
- * Time: 11:39
- */
- namespace app\common\service;
- use app\common\library\Redis;
- use think\Cache;
- class GussNovelService
- {
- private static $self;
- public static function instance()
- {
- if(self::$self == null){
- self::$self = new self();
- }
- return self::$self;
- }
- public function getNovelEndRecommendModel(){
- return model('NovelEndRecommend');
- }
- /**
- * 猜猜你喜欢,获取书籍
- * @param string $sex 性别 0=未知,1=男性,2=女性
- * @param int $num 书籍数量
- * @return array|false|mixed|\PDOStatement|string|\think\Collection
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\ModelNotFoundException
- * @throws \think\exception\DbException
- */
- public function getLikedNovels($sex = '1', $num = 4,$isWater=false)
- {
- $novelsFileCacheKey = $isWater ? 'NFCK:W:' . $sex : 'NFCK:' . $sex;
- if ($novels = Cache::get($novelsFileCacheKey)) {
- if ($novels === 1) {
- LogService::info('novels_file缓存命中,内容空');
- return [];
- } else {
- LogService::info('novels_file缓存命中');
- return $novels;
- }
- }
- $novels = $this->getNovelEndRecommendModel()->getBooksBySex($sex,$isWater);
- // 今日阅读数
- $bookNumKey = 'B-N';
- // 获取测书书库中书籍ids
- $novelsBookIds = [];
- $data = [];
- if ( !empty( $novels ) ) {
- $novelsBookIds = array_column( $novels, 'book_id' );
- $books = model('Book')->getBooksInfo( $novelsBookIds );
- $booksInfo = [];
- if( !empty($books) ){
- foreach ($books as $k => $v){
- // 如果书籍已经入库,则不显示
- if($v['state'] != -1){
- $booksInfo[$v['id']] = $v;
- }
- }
- }
- foreach ($novels as $key=>$book) {
- //没有bookInfo 的去掉
- if ( !isset( $booksInfo[$book['book_id']] ) ){
- continue;
- }
- $bookInfo = $booksInfo[$book['book_id']];
- $book = array_merge($book, $bookInfo);
- $data[] = $book;
- }
- }
- // B-N + read_num
- // 根据阈值去重, 书籍点击率大于推荐书籍阈值,剔除
- // if ($novels) {
- // foreach ($novels as $key=>$book) {
- // // 排重
- // if($book_id == $book['book_id']){
- // unset($novels[$key]);
- // }
- // if(($book['read_num'] + $book['bn_num']) >= $book['click_threshold']){
- // unset($novels[$key]);
- // }
- // }
- // }
- if ($data) {
- //wudd 跟阅读记录过滤互斥书籍
- // $data = BookRelationService::instance()->filterLikeBookRelation($data, $num);
- $data = array_slice($data, 0, $num);
- }
- if ($data && !empty($data)) {
- LogService::info('novels_redis缓存命中');
- cache::set($novelsFileCacheKey, $data, 600);
- } else {
- LogService::info('novels_redis缓存命中,内容空');
- cache::set($novelsFileCacheKey, 1, 600);
- }
- return $data;
- }
- /**
- * 将数组中的某个值作为KEY
- * @param $arr
- * @param $keyname
- * @return array
- */
- private function _convertArr($arr, $keyname)
- {
- $res = [];
- if ($arr && is_array($arr)) {
- foreach ($arr as $key => $item) {
- $res[$item[$keyname]] = $item;
- }
- }
- return $res;
- }
- }
|