123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455 |
- <?php
- /**
- * Created by PhpStorm.
- * User: tandunzhao
- * Date: 2017/12/4
- * Time: 下午1:43
- */
- namespace App\Modules\Book\Services;
- use App\Modules\Book\Models\BookConfig;
- use App\Modules\Book\Models\BookRole;
- use App\Modules\Product\Services\ProductService;
- use App\Modules\Book\Models\Book;
- use Redis;
- use DB;
- class BookConfigService
- {
- /**
- * 根据id获取图书
- * @param $bid
- * @return mixed
- */
- public static function getBookById($bid)
- {
- $res = BookConfig::getBookById($bid);
- //$res->tags = BookTagsService::getBookTags($bid);
- return $res;
- }
- /**
- * 获取角色图书
- */
- public static function getBookByRole($role)
- {
- $book = [];
- if($role)
- {
- $bids = BookRole::getBidByRole($role);
- if($bids)
- {
- $books = BookConfig::getSimpleBooksByIds($bids);
- $books && $book = array_shift($books);
- }
- }
- return $book;
- }
- /**
- * 根据bid数组获取多本图书
- * @param $where
- * @param null $order
- * @return mixed
- */
- public static function getBooksByIds(array $where, $order = [])
- {
- if(empty($where)){
- return (object)array();
- }
- if ($order)
- $res = BookConfig::getBooksByIds($where, $order);
- else
- $res = BookConfig::getBooksByIds($where);
- return $res;
- }
- /**
- *
- * 根据条件获取图书
- * @param array $where ['key'=>'根据关键词查询','category_id'=>'根据分类id查询','is_on_shelf'=>上下架查询,'channel_name'=>'频道查询(男频女频)']
- * @param array $order 排序 默认是bid排序
- * @param int $page_size
- * @return mixed
- */
- public static function getBooks(array $where, array $order = [], $page_size = 15)
- {
- return BookConfig::getBooks($where, $order, $page_size);
- }
- /**
- *
- * 根据条件获取图书
- * @param array $where ['key'=>'根据关键词查询','category_id'=>'根据分类id查询','is_on_shelf'=>上下架查询,'channel_name'=>'频道查询(男频女频)']
- * @param array $order 排序 默认是bid排序
- * @param int $page_size
- * @return mixed
- */
- public static function getPromotionBooks(array $where, array $bids, array $order = [], $page_size = 15)
- {
- return BookConfig::getPromotionBooks($where, $bids, $order, $page_size);
- }
- /**
- * @param array $where
- * @param array $data
- */
- public static function getPromotionBooksV2(array $where, array $whereIn, array $data, array $orwhereIn,$whereDeedIn='',$superior_lib='',$keywords='')
- {
- //全站派单
- $total_send_order_sum = '(select sum(num) as total_send_order_sum from book_send_order_stats where book_send_order_stats.bid=book_configs.bid) as total_send_order_sum';
- //七天派单数
- $week_send_orders = sprintf(
- "(select sum(num) as week_send_order_sum from book_send_order_stats as a where a.bid=book_configs.bid and a.day>='%s') as week_send_order_sum",
- date('Y-m-d', strtotime('-7 day'))
- );
- //我的派单
- $channel_send_orders = sprintf(
- "(select sum(num) as channel_send_order_sum from book_send_order_stats as a where a.bid=book_configs.bid and a.distribution_channel_id=%s) as channel_send_order_sum",
- $data['distribution_channel_id']
- );
- //我的派单数
- $res = BookConfig::join('books', 'book_configs.bid', '=', 'Books.id')
- ->leftjoin('chapters','books.first_cid','=','chapters.id')
- ->leftjoin('book_categories', 'book_categories.id', 'books.category_id')
- ->leftjoin('book_channel_scores', function ($join) use ($data) {
- $join->where('book_channel_scores.distribution_channel_id', '=', $data['distribution_channel_id'])
- ->on('book_channel_scores.bid', '=', 'book_configs.bid');
- });
- if($superior_lib){
- $res->leftjoin($superior_lib,$superior_lib.'.bid','=','book_configs.bid');
- }
- $res->select(
- 'book_configs.book_name',
- 'book_configs.bid',
- 'book_categories.category_name',
- 'book_categories.channel_name',
- 'books.chapter_count',
- 'books.size',
- 'book_configs.cover',
- 'book_configs.charge_type',
- 'books.status',
- 'book_channel_scores.score as own_score',
- 'book_configs.recommend_index',
- 'book_configs.editor_recommend',
- 'book_configs.created_at',
- 'book_configs.editor_recommend',
- DB::raw($total_send_order_sum),
- DB::raw($week_send_orders),
- DB::raw($channel_send_orders),
- 'books.first_cid',
- 'chapters.name as first_chapter_name',
- 'books.chapter_count'
- )->where($where);
- if ($whereIn) {
- $res->whereNotIn('book_configs.bid', $whereIn);
- }
- if($whereDeedIn){
- $res->whereIn('book_configs.bid',$whereDeedIn);
- }
- $res->where(function ($query) use ($orwhereIn) {
- $query->where('book_configs.is_on_shelf', 2);
- if ($orwhereIn) {
- $query->orWhere('book_configs.is_on_shelf', 1)->whereIn('book_configs.bid', $orwhereIn);
- }
- });
- if ($keywords) {
- $res->where(function ($query) use ($keywords) {
- $query->where('book_configs.book_name', 'like', '%' . $keywords . '%')
- ->orWhere([
- ['book_configs.roles','like','%'.$keywords.'%'],
- ['book_configs.is_on_shelf','=',2]
- ]);
- //->orWhere('book_configs.roles', 'like', '%' . $keywords . '%');
- });
- }
- /*if ($orwhere) {
- $res->orWhere(function ($query) use ($orwhere, $orwhereIn,$whereDeedIn) {
- if($whereDeedIn){
- $orwhereIn = $whereDeedIn;
- }
- $query->where($orwhere)->whereIn('book_configs.bid', $orwhereIn);
- });
- }*/
- //\Log::info('books_list:books_data:'.json_encode($data));
- if(in_array($data['order_field'],['total_send_order_sum','week_send_order_sum','order_index']))
- {
- //\Log::info('books_list:order_filed:'.$data['order_field']);
- return $res->orderBy($data['order_field'], $data['order_type'])
- ->orderBy('recommend_index', 'desc')
- ->orderBy('books.size', 'desc')
- ->paginate();
- }else{
- $res->orderBy($data['order_field'], $data['order_type']);
- if($data['order_field']=='recommend_index'){
- $res->orderBy('books.size','desc');
- }
- return $res->paginate();
- }
- }
- /**
- * 根据关键词查询
- * @param $key
- * @param int $page_size
- * @param int|Array $is_on_shelf 上架信息
- * @return mixed
- */
- public static function getBooksByKey($key, $page_size = 15, $is_on_shelf = null)
- {
- if (!$is_on_shelf) {
- $is_on_shelf = [1, 2];
- }
- $res = BookConfig::getBooksByKey($key, $page_size, $is_on_shelf);
- return $res;
- }
- /**
- * 更新图书
- * 可以修改的字段
- * ['force_subscribe_chapter_seq'=>'强关章节','price'=>价格,cover=>封面,book_name,charge_type,hot,
- * is_on_shelf,recommend_index,is_show_index_content,click_count,copyright_limit_data]
- * @param $bid
- * @param array $data
- * @return bool
- */
- public static function updateBookConfig($bid, array $data)
- {
- if (empty($data)) return false;
- $book_info = BookConfig::getBookById($bid);
- if (!$book_info) return false;
- if (isset($data['price']) && $data['price'] != '') {
- if ($data['price'] != $book_info->price) {
- $product = ProductService::addProduct(['price' => $data['price'], 'type' => 'BOOK_ORDER', 'given' => 0]);
- $data['product_id'] = $product->id;
- }
- }
- return BookConfig::updateBookInfo($bid, $data);
- }
- /**
- * @param $protuct_id
- * @return mixed
- */
- public static function getBookByProduct($protuct_id)
- {
- return BookConfig::getBookByProduct($protuct_id);
- }
- /**
- * 获取相同频道的高推荐书籍 循环获取未读的
- * @param $bid
- * @param int $num
- * @return bool
- */
- public static function getSimpleChannelBookLoop($bid, $num,$uid)
- {
- return BookConfig::getSimpleChannelBookLoop($bid, $num,$uid);
- }
- /**
- * 获取相同频道的高推荐书籍 超哥客服消息专用
- * @param $bid
- * @param int $num
- * @return bool
- */
- public static function getSimpleChannelBook($bid, $num = 4)
- {
- return BookConfig::getSimpleChannelBook($bid, $num);
- }
- /**
- * 获取托管智能推送的书籍,头条要95分以上,其余4条优质书库随机,按分数倒叙排列
- * @param $bid
- * @param int $num
- * @return bool
- */
- public static function getTrusteeShipChannelBook($distribution_channel_id, $channel_name, $num = 4)
- {
- return BookConfig::getTrusteeShipChannelBook($distribution_channel_id, $channel_name, $num);
- }
- /**
- * 获取阅读完的推荐
- * @param $category_id
- * @param int $num
- * @return mixed
- */
- public static function getRecommendBooks($bid, $category_id, $num = 4)
- {
- return BookConfig::getRecommendBooks($bid, $category_id, $num);
- }
- /**
- * 修改推荐位
- * @param int $bid
- * @param int $cid
- * @return mixed
- */
- public static function editRecommendCid($bid, $cid)
- {
- return BookConfig::where('bid', $bid)->update(['recommend_cid' => $cid]);
- }
- /**
- * 是否优质书籍
- * @param int $bid
- * @param int $high
- * @return mixed
- */
- public static function editIsHighQuality($bid, $high)
- {
- return BookConfig::where('bid', $bid)->update(['is_high_quality' => $high]);
- }
- /**
- * 签到推荐
- * @param array $bid
- * @param $channel_name
- * @param int $num
- * @return mixed
- */
- public static function getSignRecommendBooks(array $bid, $channel_name, $num = 2)
- {
- return BookConfig::getSignRecommendBooks($bid, $channel_name, $num);
- }
- /**
- * 签到推荐缓存版本
- * @param array $bid
- * @param $channel_name
- * @param int $num
- * @return mixed
- */
- public static function getSignRecommendBooksFromCache(array $bid, $channel_name, $num = 2)
- {
- return BookConfig::getSignRecommendBooksFromCache($bid, $channel_name, $num);
- }
- /**
- * 获取指定bid的书籍
- */
- public static function getBidRecommendBooks(array $bids)
- {
- return BookConfig::getBidRecommendBooks($bids);
- }
- public static function getH5RecommendBooks($uid, $pos, $num)
- {
- return BookConfig::getH5RecommendBooks($uid, $pos, $num);
- }
-
- public static function getSpecialHotRandomRecommendBooks($num,$channel_name)
- {
- return BookConfig::getSpecialHotRandomRecommendBooks($num,$channel_name);
- }
-
- /**
- * 修改vip卡点
- */
- public static function editVipSeq($bid, $seq)
- {
- return BookConfig::updateVipSeq($bid, $seq);
- }
- public static function getAllBooks($on_shelf, $order = [])
- {
- return BookConfig::getAllBooks($on_shelf, $order);
- }
- /**
- * 根据条件获取 不分页
- */
- public static function getBooksNoPage(array $where = [], array $order = [], array $on_shelf, $limit = 20)
- {
- return BookConfig::getBooksNoPage($where, $order, $on_shelf, $limit);
- }
- /**
- * @param string $name
- */
- public static function getBooksByName(string $name)
- {
- return BookConfig::where('book_name', 'like', '%' . $name . '%')->whereIn('is_on_shelf', [1, 2])->select('bid', 'book_name')->limit(10)->get();
- }
- public static function getSimpleBooksByIds(array $ids)
- {
- $str = implode(',', $ids);
- $field = 'bid,' . $str;
- return BookConfig::whereIn('bid', $ids)->select('bid', 'book_name')->orderBy(DB::raw('field(' . $field . ')'))->get();
- }
- /**
- * 获取图书简介
- * @param int $bid
- * @return mixed
- */
- public static function getBookIntroByBid(int $bid ,string $book_name){
- $where = [];
- if($bid){
- $where[] = ['book_configs.bid',$bid];
- }
- if($book_name){
- $where[] = ['book_configs.book_name','like','%'.$book_name.'%'];
- }
- if(empty($where)){
- return false;
- }
- return BookConfig::where($where)
- ->join('books','book_configs.bid','=','books.id')
- ->select(
- 'books.intro',
- DB::raw('concat(book_configs.book_name,"(",book_configs.bid,")") as book_name'))
- ->get();
- }
- public static function getBookByIdAndStatus($bid,$status){
- return BookConfig::getBookByIdAndStatus($bid,$status);
- }
- public static function get_all_test_books($is_all){
- return BookConfig::get_all_test_books($is_all);
- }
- public static function get_test_books($status){
- return BookConfig::get_test_books($status);
- }
- public static function updateTestBook($bid, $status,$plan_push_user_num){
- return BookConfig::updateTestBook($bid, $status,$plan_push_user_num);
- }
- public static function get_all_smart_push_books($is_all){
- return BookConfig::get_all_smart_push_books($is_all);
- }
- public static function getHotRandomRecommendBookText($distribution_channel_id,$uid, $num){
- return BookConfig::getHotRandomRecommendBookText($distribution_channel_id,$uid, $num);
- }
- public static function resetBookLibRedis($category_type){
- $force_update = true;
- $is_high_quality = 1;
- $boy = '男频';
- $girl = '女频';
- \Log::info('resetBookLibRedis,category_type:'.$category_type);
- try{
- // 更新全库
- BookConfig::getLeftRecommendBook($boy, $is_high_quality,$force_update);
- BookConfig::getLeftRecommendBook($girl, $is_high_quality,$force_update);
- }catch(Exception $e){
- \Log::info('resetBookLibRedis_ept:'.$e->getMessage());
- }
- }
- }
|