| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426 | <?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\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;    }    /**     * 根据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        $num     * @param        $uid     * @param string $property     * @return false     */    public static function getSimpleChannelBookLoop($bid, $num,$uid, $property = '')    {    	return BookConfig::getSimpleChannelBookLoop($bid, $num,$uid, $property);    }    /**     * 获取相同频道的高推荐书籍 超哥客服消息专用     * @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);    }    /**     * 获取指定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());    	}    }}
 |