recommend_text = $content; return response()->item(new BookTransformer(), $res); } /** * @apiVersion 1.0.0 * @apiDescription 修改上架状态 0下架 0 * @api {get} books/shelf/status 上架图书 * @apiParam {int} on_shelf_status * @apiParam {int} bid * @apiGroup Book * @apiName changeShelfStatus * @apiSuccess {int} code 状态码 * @apiSuccess {String} msg 信息 * @apiSuccess {object} data 结果集 * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * { * code: 0, * msg: "", * data: {} * } */ public function changeShelfStatus(Request $request) { $bid = $request->input('bid'); $shelf_status = $request->input('on_shelf_status'); if (!in_array($shelf_status, [0, 1, 2, 3])) response()->error('PARAM_EMPTY'); if (empty($bid)) return response()->error('PARAM_EMPTY'); $data = ['is_on_shelf' => $shelf_status]; if ($shelf_status == 1) { $off_shelf_domain = env('OFF_SHELF_DOMAIN'); if ($off_shelf_domain) { $data['promotion_domain'] = $off_shelf_domain; } } if (BookConfigService::updateBookConfig($bid, $data)) { return response()->success(); } else { return response()->error('PARAM_ERROR'); } } /** * @apiVersion 1.0.0 * @apiDescription 编辑图书 * @api {post} books/{bid}/edit 编辑图书 * @apiName editBookConfig * @apiParam {Int} force_subscribe_chapter_seq 强制关注的章节数(非必需) * @apiParam {Int} price 图书价格(单位:分)(非必需) * @apiParam {String} cover 封面(非必需) * @apiParam {String} book_name 书名(非必需) * @apiParam {String} copyright 版权说明(非必需) * @apiParam {String} charge_type 收费类型 按本、按章CHAPTER、BOOK(非必需) * @apiParam {Int} hot 热度(非必需) * @apiParam {Int} is_on_shelf 是否上架 1:上架 0:不上架(非必需) * @apiParam {Int} is_on_shelf 是否上架 1:上架 0:不上架(非必需) * @apiParam {String} source_domain 来源域名(非必需) * @apiParam {Int} is_show_index_content 是否推荐指数文本 * @apiParam {Int} product_id product_id * @apiGroup Book * @apiSuccess {Int} code 状态码 * @apiSuccess {String} msg 信息 * @apiSuccess {object} data 结果集 * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * { * code: 0, * msg: "", * data: {} * } */ public function editBookConfig(Request $request, $bid) { if (empty($bid)) return response()->error('PARAM_EMPTY'); //$bid = $request->input('bid'); $force_subscribe_chapter_seq = $request->input('force_subscribe_chapter_seq'); $price = $request->input('price'); $cover = $request->input('cover'); $book_name = $request->input('book_name'); $copyright = $request->input('copyright'); $charge_type = $request->input('charge_type'); $hot = $request->input('hot'); $roles = $request->input('roles'); $is_on_shelf = $request->input('is_on_shelf'); $source_domain = $request->input('source_domain'); $promotion_domain = $request->input('promotion_domain'); $recommend_index = $request->input('recommend_index'); $is_show_index_content = $request->input('is_show_index_content'); $product_id = $request->input('product_id'); $status = $request->input('status'); $book_category_id = $request->input('book_category_id'); $data = []; if (isset($force_subscribe_chapter_seq) && $force_subscribe_chapter_seq !== '') $data['force_subscribe_chapter_seq'] = $force_subscribe_chapter_seq; if (isset($price) && !empty($price)) $data['price'] = $price; if (isset($cover) && !empty($cover)) $data['cover'] = $cover; if (isset($book_name) && !empty($book_name)) $data['book_name'] = $book_name; if (isset($copyright) && !empty($copyright)) $data['copyright'] = $copyright; if (isset($charge_type) && !empty($charge_type)) $data['charge_type'] = $charge_type; if (isset($hot) && !empty($hot)) $data['hot'] = $hot; if (isset($roles) && !empty($roles)) $data['roles'] = $roles; if (isset($is_on_shelf) && $is_on_shelf !== '') $data['is_on_shelf'] = (int)$is_on_shelf; if (isset($source_domain) && !empty($source_domain)) $data['source_domain'] = $source_domain; if (isset($recommend_index) && $recommend_index !== '') $data['recommend_index'] = $recommend_index; if (isset($is_show_index_content)) $data['is_show_index_content'] = (int)$is_show_index_content; if (isset($product_id) && $product_id !== '') $data['product_id'] = (int)$product_id; if (isset($status) && $status !== '') $data['status'] = (int)$status; if (isset($book_category_id) && $book_category_id != '') $data['book_category_id'] = (int)$book_category_id; if (isset($promotion_domain) && $promotion_domain != '') $data['promotion_domain'] = $promotion_domain; if (empty($data)) return response()->error('PARAM_EMPTY'); if (BookConfigService::updateBookConfig($bid, $data)) { return response()->success(); } return response()->error('UNKNOWN_ERROR'); } /** * @apiVersion 1.0.0 * @apiDescription 编辑版权信息 * @api {post} books/editcopyright 编辑版权信息 * @apiName editCopyRight * @apiParam {Int} bid 图书id * @apiParam {String} [copyright_limit_data] 版权截至日期 * @apiParam {String} [copyright] 版权说明 * @apiGroup Book * @apiSuccess {Int} code 状态码 * @apiSuccess {String} msg 信息 * @apiSuccess {object} data 结果集 * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * { * code: 0, * msg: "", * data: {} * } */ public function editCopyRight(Request $request) { $bid = $request->input('bid'); if (empty($bid)) return response()->error('PARAM_EMPTY'); $copyright = $request->input('copyright'); $copyright_limit_data = $request->input('copyright_limit_data'); if (isset($copyright)) { $data['copyright'] = $copyright; } if (isset($copyright_limit_data)) { $data['copyright_limit_data'] = $copyright_limit_data; } if (empty($data)) return response()->error('PARAM_EMPTY'); if (BookConfigService::updateBookConfig($bid, $data)) { return response()->success(); } return response()->error('UNKNOWN_ERROR'); } /** * @apiVersion 1.0.0 * @apiDescription 编辑图书域名 * @api {post} books/editPromotionUrl 编辑图书域名 * @apiName editPromotionDomain * @apiParam {Int} bid 图书id * @apiParam {String} promotion_domain 图书域名多个以都好隔开 * @apiGroup Book * @apiSuccess {Int} code 状态码 * @apiSuccess {String} msg 信息 * @apiSuccess {object} data 结果集 * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * { * code: 0, * msg: "", * data: {} * } */ public function editPromotionDomain(Request $request) { $bid = $request->input('bid'); if (empty($bid)) return response()->error('PARAM_EMPTY'); $promotion_domain = $request->input('promotion_domain'); if (isset($promotion_domain)) { $data['promotion_domain'] = $promotion_domain; } if (empty($data)) return response()->error('PARAM_EMPTY'); if (BookConfigService::updateBookConfig($bid, $data)) { return response()->success(); } return response()->error('UNKNOWN_ERROR'); } /** * @apiVersion 1.0.0 * @apiDescription 根据分类id和关键词获取并按照推荐指数排序 * @api {get} books/search 图书搜索 * @apiParam {String} key * @apiParam {Int} category_id 分类id * @apiParam {String} [domain] 域名 按域名查询 * @apiParam {String} [old_name] 旧书名 按旧书名查询 * @apiParam {String} [copy_right_date] 版权到期时间 * @apiParam {String} order_field 排序字段(推荐指数:recommend_index|点击数:click_count|字数:size|update:时间) * @apiParam {String} order_seq 排序顺序(顺序:asc|逆序:desc) * @apiParam {Int} is_on_shelf 上架与否(0|1) * @apiParam {Int} page_size 分页大小 * @apiParam {Int} status 完结与否(0|1) * @apiGroup Book * @apiName getBooksByWhere * @apiSuccess {int} code 状态码 * @apiSuccess {String} msg 信息 * @apiSuccess {object} data 结果集 * @apiSuccess {Array} data.list 结果数据集 * @apiSuccess {Int} data.list.book_id bid * @apiSuccess {String} data.list.book_name 书名 * @apiSuccess {String} data.list.book_summary 简介 * @apiSuccess {String} data.list.book_author 作者 * @apiSuccess {String} data.list.cover_url 封面 * @apiSuccess {Int} data.list.book_word_count 字数 * @apiSuccess {Int} data.list.book_chapter_total 章节数 * @apiSuccess {Int} data.list.book_category_id 分类 * @apiSuccess {String} data.list.book_category 分类名 * @apiSuccess {String} data.list.book_end_status 是否完结 * @apiSuccess {String} data.list.book_published_time 发布时间 * @apiSuccess {String} data.list.copyright 版权信息 * @apiSuccess {Int} data.list.force_subscribe_chapter_id 强制关注的章节数 * @apiSuccess {String} data.list.update_time 更新时间 * @apiSuccess {Int} data.list.is_on_shelf 是否上架 * @apiSuccess {String} data.list.book_price 是否上架 * @apiSuccess {String} data.list.recommend_index 推荐指数 * @apiSuccess {Int} data.list.charge_type 收费类型 * @apiSuccess {Int} data.list.keyword 关键词 * @apiSuccess {Int} data.list.is_show_index_content 是否显示推荐指数文本 * @apiSuccess {Int} data.list.click_count 点击数 * @apiSuccess {Int} data.list.product_id product_id * @apiSuccess {Int} data.list.sex_preference 性格偏向 * @apiSuccess {Int} data.list.last_cid 最后一章id * @apiSuccess {Int} data.list.last_chapter 最后一章名 * @apiSuccess {String} data.list.old_name 旧书名 * @apiSuccess {object} data.meta 分页信息 * @apiSuccess {Int} data.meta.total 总条数 * @apiSuccess {Int} data.meta.per_page 每页条数 * @apiSuccess {Int} data.meta.current_page 当前页 * @apiSuccess {Int} data.meta.last_page 最后页 * @apiSuccess {String} data.meta.next_page_url 下一页 * @apiSuccess {String} data.meta.prev_page_url 上一页 * @apiSuccess {String} data.list.is_high_quality 是否优质 * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * { * code: 0, * msg: "", * data: { * list: [ * { * book_id: 5, * book_name: "肌缘巧合", * book_summary: "    他是权势倾天,纵横商界的王者,却偏偏钟情于她,一宠成瘾。“女人,我要你......只要你能满足我,别墅、游轮、支票,你随便挑。”她羞涩的半低着头:“我只想要你。”他挑眉,“你野心不小啊!”她妩媚一笑,解开他的领带,“难道你不愿意!”他宠她爱她,给她所有想要的。只是有一天她终于忍不住暴走,“靠,你有没有节制呀?我要离婚。”", * book_author: "妖火", * cover_url: "http://www.leyuee.com/cover/0/8.jpg", * book_word_count: 0, * book_chapter_total: 0, * book_category_id: null, * book_category: "爆笑,宠文,潜规则", * book_end_status: 8, * book_published_time: null, * copyright: null, * charge_type: null, * force_subscribe_chapter_id: 0, * update_time: null, * is_on_shelf: 1, * book_price: null, * keyword: "温馨,虐心,清水", * recommend_index:2, * is_show_index_content:0, * click_count:0, * product_id:0, * sex_preference:0, * last_cid:0, * last_chapter:0, * }, * ], * meta: { * total: 18, * per_page: 15, * current_page: 1, * last_page: 2, * next_page_url: "http://myapi.cn/api/hotrank/books?page=2", * prev_page_url: "" * } * } * } */ public function getBooksByWhere(Request $request) { $where = []; $order = ['book_configs.id', 'asc']; $where['is_on_shelf'] = [1, 2]; $category_id = $request->input('category_id'); if ($category_id) { if ($category_id == 1) { $where['channel_name'] = '男频'; } elseif ($category_id == 2) { $where['channel_name'] = '女频'; } else { $where['category_id'] = $category_id; } } $old_name = $request->input('old_name'); $domain = $request->input('domain'); $copy_right_date = $request->input('copy_right_date'); $bid = $request->input('bid'); if ($bid) $where['bid'] = $bid; if ($old_name) $where['old_name'] = $old_name; if ($domain) $where['domain'] = $domain; if ($copy_right_date) $where['copy_right_date'] = $copy_right_date; $author = $request->input('author'); if ($author) $where['author'] = $author; $key = $request->input('key'); if ($key) { $where['key'] = $key; } $order_field = $request->input('order_field'); $order_seq = $request->input('order_seq'); if ($order_field != '' && in_array($order_field, ['recommend_index', 'click_count', 'update', 'size', 'create'])) { if ($order_field == 'update') { $order = ['book_configs.updated_at', 'desc']; } elseif ($order_field == 'create') { $order = ['book_configs.created_at', 'desc']; } else { $order = [$order_field, 'desc']; } if ($order_seq == 'asc') { $order = [$order_field, 'asc']; } if ($order_seq == 'desc') { $order = [$order_field, 'desc']; } } $status = $request->input('status'); if ($status != '') { $where['status'] = $status; } $page_size = $request->input('page_size', 15); $books = BookConfigService::getBooks($where, $order, $page_size); return response()->pagination(new BookTransformer, $books); } public function getBooks(Request $request) { $book_name = $request->has('book_name') ? $request->input('book_name') : ''; $is_important = $request->has('is_important') ? $request->input('is_important') : 0; if (1 == $is_important) { $where['is_on_shelf'] = [1, 2]; } else { $where['is_on_shelf'] = [2]; } $data = DB::table('book_configs')->select('book_name', 'bid')->where('book_name', 'like', '%' . $book_name . '%')->whereIn('is_on_shelf', $where)->get(); return response()->success($data); } /** * @apiVersion 1.0.0 * @apiDescription 获取下架图书 * @api {get} offshelf/books 获取下架图书 * @apiParam {Int} [page_size] 分页大小 * @apiParam {String} [domain] 域名 按域名查询 * @apiParam {String} [old_name] 旧书名 按旧书名查询 * @apiParam {String} [copy_right_date] 版权到期时间 * @apiParam {Int} [page] 页码 * @apiGroup Book * @apiName getOffShelfBooks * @apiSuccess {int} code 状态码 * @apiSuccess {String} msg 信息 * @apiSuccess {object} data 结果集 * @apiSuccess {Array} data 结果数据集 * @apiSuccess {Int} data.book_id bid * @apiSuccess {String} data.book_name 书名 * @apiSuccess {String} data.book_summary 简介 * @apiSuccess {String} data.book_author 作者 * @apiSuccess {String} data.cover_url 封面 * @apiSuccess {Int} data.book_word_count 字数 * @apiSuccess {Int} data.book_chapter_total 章节数 * @apiSuccess {Int} data.book_category_id 分类 * @apiSuccess {String} data.book_category 分类名 * @apiSuccess {String} data.book_end_status 是否完结 * @apiSuccess {String} data.book_published_time 发布时间 * @apiSuccess {String} data.copyright 版权信息 * @apiSuccess {Int} data.force_subscribe_chapter_id 强制关注的章节数 * @apiSuccess {String} data.update_time 更新时间 * @apiSuccess {Int} data.is_on_shelf 是否上架 * @apiSuccess {String} data.book_price 是否上架 * @apiSuccess {String} data.recommend_index 推荐指数 * @apiSuccess {Int} data.charge_type 收费类型 * @apiSuccess {Int} data.keyword 关键词 * @apiSuccess {Int} data.is_show_index_content 是否显示推荐指数文本 * @apiSuccess {Int} data.click_count 点击数 * @apiSuccess {Int} data.product_id product_id * @apiSuccess {Int} data.sex_preference 性格偏向 * @apiSuccess {String} data.old_name 旧书名 * @apiSuccess {String} data.is_high_quality 是否优质 * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * { * code: 0, * msg: "", * data: { * [ * { * book_id: 5, * book_name: "肌缘巧合", * book_summary: "    他是权势倾天,纵横商界的王者,却偏偏钟情于她,一宠成瘾。“女人,我要你......只要你能满足我,别墅、游轮、支票,你随便挑。”她羞涩的半低着头:“我只想要你。”他挑眉,“你野心不小啊!”她妩媚一笑,解开他的领带,“难道你不愿意!”他宠她爱她,给她所有想要的。只是有一天她终于忍不住暴走,“靠,你有没有节制呀?我要离婚。”", * book_author: "妖火", * cover_url: "http://www.leyuee.com/cover/0/8.jpg", * book_word_count: 0, * book_chapter_total: 0, * book_category_id: null, * book_category: "爆笑,宠文,潜规则", * book_end_status: 8, * book_published_time: null, * copyright: null, * charge_type: null, * force_subscribe_chapter_id: 0, * update_time: null, * is_on_shelf: 1, * book_price: null, * keyword: "温馨,虐心,清水", * recommend_index:2, * is_show_index_content:0, * click_count:0, * product_id:0, * sex_preference:0, * }, * {} * ], * meta:{} * } * } */ public function getOffShelfBooks(Request $request) { $where = ['is_on_shelf' => [0]]; $key = $request->input('key'); $author = $request->input('author'); if ($author) $where['author'] = $author; if ($key) $where['key'] = $key; $category_id = $request->input('category_id'); if ($category_id) { if ($category_id == 1) { $where['channel_name'] = '男频'; } elseif ($category_id == 2) { $where['channel_name'] = '女频'; } else { $where['category_id'] = $category_id; } } $old_name = $request->input('old_name'); $domain = $request->input('domain'); $copy_right_date = $request->input('copy_right_date'); $bid = $request->input('bid'); if ($bid) $where['bid'] = $bid; if ($old_name) $where['old_name'] = $old_name; if ($domain) $where['domain'] = $domain; if ($copy_right_date) $where['copy_right_date'] = $copy_right_date; $page_size = $request->input('page_size', 15); $res = BookConfigService::getBooks($where, [], $page_size); foreach ($res as &$item) { $item->book_special_channels = []; $channels = BookSpecialChannelService::getChannelsByBid($item->bid); if ($channels) { $channel_array = []; foreach ($channels as $channel) { $channel_array[] = $channel->channel_user_id; } $item->book_special_channels = $channel_array; } } return response()->pagination(new BookTransformer, $res); } /** * @apiVersion 1.0.0 * @apiDescription 获取上架架图书 * @api {get} onshelf/books 获取上架架图书 * @apiParam {Int} [page_size] 分页大小 * @apiParam {Int} [page] 页码 * @apiParam {String} [domain] 域名 按域名查询 * @apiParam {String} [old_name] 旧书名 按旧书名查询 * @apiParam {String} [copy_right_date] 版权到期时间 * @apiParam {Int} [type] 1:内部上架,2外部上架 * @apiGroup Book * @apiName getOnShelfBooks * @apiSuccess {int} code 状态码 * @apiSuccess {String} msg 信息 * @apiSuccess {object} data 结果集 * @apiSuccess {Array} data 结果数据集 * @apiSuccess {Int} data.book_id bid * @apiSuccess {String} data.book_name 书名 * @apiSuccess {String} data.book_summary 简介 * @apiSuccess {String} data.book_author 作者 * @apiSuccess {String} data.cover_url 封面 * @apiSuccess {Int} data.book_word_count 字数 * @apiSuccess {Int} data.book_chapter_total 章节数 * @apiSuccess {Int} data.book_category_id 分类 * @apiSuccess {String} data.book_category 分类名 * @apiSuccess {String} data.book_end_status 是否完结 * @apiSuccess {String} data.book_published_time 发布时间 * @apiSuccess {String} data.copyright 版权信息 * @apiSuccess {Int} data.force_subscribe_chapter_id 强制关注的章节数 * @apiSuccess {String} data.update_time 更新时间 * @apiSuccess {Int} data.is_on_shelf 是否上架 * @apiSuccess {String} data.book_price 是否上架 * @apiSuccess {String} data.recommend_index 推荐指数 * @apiSuccess {Int} data.charge_type 收费类型 * @apiSuccess {Int} data.keyword 关键词 * @apiSuccess {Int} data.is_show_index_content 是否显示推荐指数文本 * @apiSuccess {Int} data.click_count 点击数 * @apiSuccess {Int} data.product_id product_id * @apiSuccess {Int} data.sex_preference 性格偏向 * @apiSuccess {String} data.old_name 旧书名 * @apiSuccess {String} data.is_high_quality 是否优质 * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * { * code: 0, * msg: "", * data: { * [ * { * book_id: 5, * book_name: "肌缘巧合", * book_summary: "    他是权势倾天,纵横商界的王者,却偏偏钟情于她,一宠成瘾。“女人,我要你......只要你能满足我,别墅、游轮、支票,你随便挑。”她羞涩的半低着头:“我只想要你。”他挑眉,“你野心不小啊!”她妩媚一笑,解开他的领带,“难道你不愿意!”他宠她爱她,给她所有想要的。只是有一天她终于忍不住暴走,“靠,你有没有节制呀?我要离婚。”", * book_author: "妖火", * cover_url: "http://www.leyuee.com/cover/0/8.jpg", * book_word_count: 0, * book_chapter_total: 0, * book_category_id: null, * book_category: "爆笑,宠文,潜规则", * book_end_status: 8, * book_published_time: null, * copyright: null, * charge_type: null, * force_subscribe_chapter_id: 0, * update_time: null, * is_on_shelf: 1, * book_price: null, * keyword: "温馨,虐心,清水", * recommend_index:2, * is_show_index_content:0, * click_count:0, * product_id:0, * sex_preference:0, * }, * {} * ], * meta:{} * } * } */ public function getOnShelfBooks(Request $request) { //\Log::info('setPromotionStatus is: ' ,['param'=>$request->all()]); $where = ['is_on_shelf' => [1, 2]]; $firstChapterContent = $request->input('firstChapterContent'); $week_promotion = $request->get('weekly_promotion','null'); if(!in_array($week_promotion,[0,1,'0','1','null'])) { return response()->error('PARAM_ERROR'); } if($week_promotion != 'null') { $where['is_current_week_promotion'] = $week_promotion; } $type = $request->input('type'); $order = []; if ($type == 1) { $where['is_on_shelf'] = 1; $order = ['book_configs.created_at', 'desc']; } if ($type == 2) { $where['is_on_shelf'] = 2; } $author = $request->input('author'); $roles = $request->input('roles'); $tags = $request->input('tags'); if ($author) $where['author'] = $author; $charge_type = $request->input('charge_type'); if ($charge_type) { $where['charge_type'] = $charge_type; } if($tags){ $where['tags'] = $tags; } if ($roles) { $where['roles'] = $roles; } $key = $request->input('key'); if ($key) $where['key'] = $key; $category_id = $request->input('category_id'); if ($category_id) { if ($category_id == 1) { $where['channel_name'] = '男频'; } elseif ($category_id == 2) { $where['channel_name'] = '女频'; } else { $where['category_id'] = $category_id; } } if ($firstChapterContent) { $where['firstChapterContent'] = $firstChapterContent; } $old_name = $request->input('old_name'); $domain = $request->input('domain'); $copy_right_date = $request->input('copy_right_date'); $is_high_quality = $request->input('is_high_quality'); if ($is_high_quality != '') { $where['is_high_quality'] = $is_high_quality; } $bid = $request->input('bid'); if ($bid) $where['bid'] = $bid; if ($old_name) $where['old_name'] = $old_name; if ($domain) $where['domain'] = $domain; if ($copy_right_date) $where['copy_right_date'] = $copy_right_date; $page_size = $request->input('page_size', 15); $res = BookConfigService::getBooks($where, $order, $page_size); /*$exist = Cache::get('setPromotionStatus', ''); $book_ids = explode(',', $exist);*/ //\Log::info('setPromotionStatus is: ' . $exist); foreach ($res as &$item) { $item->book_special_channels = []; $channels = BookSpecialChannelService::getChannelsByBid($item->bid); if ($channels) { $channel_array = []; foreach ($channels as $channel) { $channel_array[] = $channel->channel_user_id; } $item->book_special_channels = $channel_array; } $book_tags = BookTagsService::getBookTags($item->bid); $item->tags = $book_tags; $item->is_promotion = $item->is_current_week_promotion; /*foreach ($book_ids as $book_id) { if ($book_id == $item->bid) { $item->is_promotion = 1; } }*/ } return response()->pagination(new BookTransformer, $res); } /** * @apiVersion 1.0.0 * @apiDescription 获取屏蔽图书 * @api {get} cover/books 获取屏蔽图书 * @apiParam {Int} [page_size] 分页大小 * @apiParam {Int} [page] 页码 * @apiParam {String} [domain] 域名 按域名查询 * @apiParam {String} [old_name] 旧书名 按旧书名查询 * @apiParam {String} [copy_right_date] 版权到期时间 * @apiGroup Book * @apiName getCoverBooks * @apiSuccess {int} code 状态码 * @apiSuccess {String} msg 信息 * @apiSuccess {object} data 结果集 * @apiSuccess {Array} data 结果数据集 * @apiSuccess {Int} data.book_id bid * @apiSuccess {String} data.book_name 书名 * @apiSuccess {String} data.book_summary 简介 * @apiSuccess {String} data.book_author 作者 * @apiSuccess {String} data.cover_url 封面 * @apiSuccess {Int} data.book_word_count 字数 * @apiSuccess {Int} data.book_chapter_total 章节数 * @apiSuccess {Int} data.book_category_id 分类 * @apiSuccess {String} data.book_category 分类名 * @apiSuccess {String} data.book_end_status 是否完结 * @apiSuccess {String} data.book_published_time 发布时间 * @apiSuccess {String} data.copyright 版权信息 * @apiSuccess {Int} data.force_subscribe_chapter_id 强制关注的章节数 * @apiSuccess {String} data.update_time 更新时间 * @apiSuccess {Int} data.is_on_shelf 是否上架 * @apiSuccess {String} data.book_price 是否上架 * @apiSuccess {String} data.recommend_index 推荐指数 * @apiSuccess {Int} data.charge_type 收费类型 * @apiSuccess {Int} data.keyword 关键词 * @apiSuccess {Int} data.is_show_index_content 是否显示推荐指数文本 * @apiSuccess {Int} data.click_count 点击数 * @apiSuccess {Int} data.product_id product_id * @apiSuccess {Int} data.sex_preference 性格偏向 * @apiSuccess {String} data.old_name 旧书名 * @apiSuccess {String} data.is_high_quality 是否优质 * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * { * code: 0, * msg: "", * data: { * [ * { * book_id: 5, * book_name: "肌缘巧合", * book_summary: "    他是权势倾天,纵横商界的王者,却偏偏钟情于她,一宠成瘾。“女人,我要你......只要你能满足我,别墅、游轮、支票,你随便挑。”她羞涩的半低着头:“我只想要你。”他挑眉,“你野心不小啊!”她妩媚一笑,解开他的领带,“难道你不愿意!”他宠她爱她,给她所有想要的。只是有一天她终于忍不住暴走,“靠,你有没有节制呀?我要离婚。”", * book_author: "妖火", * cover_url: "http://www.leyuee.com/cover/0/8.jpg", * book_word_count: 0, * book_chapter_total: 0, * book_category_id: null, * book_category: "爆笑,宠文,潜规则", * book_end_status: 8, * book_published_time: null, * copyright: null, * charge_type: null, * force_subscribe_chapter_id: 0, * update_time: null, * is_on_shelf: 1, * book_price: null, * keyword: "温馨,虐心,清水", * recommend_index:2, * is_show_index_content:0, * click_count:0, * product_id:0, * sex_preference:0, * }, * {} * ], * meta:{} * } * } */ public function getCoverBooks(Request $request) { $where['is_on_shelf'] = [3, 4]; $key = $request->input('key'); if ($key) $where['key'] = $key; $author = $request->input('author'); if ($author) $where['author'] = $author; $category_id = $request->input('category_id'); if ($category_id) { if ($category_id == 1) { $where['channel_name'] = '男频'; } elseif ($category_id == 2) { $where['channel_name'] = '女频'; } else { $where['category_id'] = $category_id; } } $is_on_shelf = $request->input('is_on_shelf'); if ($is_on_shelf) $where['is_on_shelf'] = $is_on_shelf; $old_name = $request->input('old_name'); $domain = $request->input('domain'); $copy_right_date = $request->input('copy_right_date'); $bid = $request->input('bid'); if ($bid) $where['bid'] = $bid; if ($old_name) $where['old_name'] = $old_name; if ($domain) $where['domain'] = $domain; if ($copy_right_date) $where['copy_right_date'] = $copy_right_date; $page_size = $request->input('page_size', 15); $res = BookConfigService::getBooks($where, [], $page_size); return response()->pagination(new BookTransformer, $res); } /** * @apiVersion 1.0.0 * @apiDescription 获取优质书籍 * @api {get} getHighQualityBooks/books 获取优质书籍 * @apiParam {Int} [page_size] 分页大小 * @apiParam {Int} [page] 页码 * @apiParam {String} [domain] 域名 按域名查询 * @apiParam {String} [old_name] 旧书名 按旧书名查询 * @apiParam {String} [copy_right_date] 版权到期时间 * @apiGroup Book * @apiName getHighQualityBooks * @apiSuccess {int} code 状态码 * @apiSuccess {String} msg 信息 * @apiSuccess {object} data 结果集 * @apiSuccess {Array} data 结果数据集 * @apiSuccess {Int} data.book_id bid * @apiSuccess {String} data.book_name 书名 * @apiSuccess {String} data.book_summary 简介 * @apiSuccess {String} data.book_author 作者 * @apiSuccess {String} data.cover_url 封面 * @apiSuccess {Int} data.book_word_count 字数 * @apiSuccess {Int} data.book_chapter_total 章节数 * @apiSuccess {Int} data.book_category_id 分类 * @apiSuccess {String} data.book_category 分类名 * @apiSuccess {String} data.book_end_status 是否完结 * @apiSuccess {String} data.book_published_time 发布时间 * @apiSuccess {String} data.copyright 版权信息 * @apiSuccess {Int} data.force_subscribe_chapter_id 强制关注的章节数 * @apiSuccess {String} data.update_time 更新时间 * @apiSuccess {Int} data.is_on_shelf 是否上架 * @apiSuccess {String} data.book_price 是否上架 * @apiSuccess {String} data.recommend_index 推荐指数 * @apiSuccess {Int} data.charge_type 收费类型 * @apiSuccess {Int} data.keyword 关键词 * @apiSuccess {Int} data.is_show_index_content 是否显示推荐指数文本 * @apiSuccess {Int} data.click_count 点击数 * @apiSuccess {Int} data.product_id product_id * @apiSuccess {Int} data.sex_preference 性格偏向 * @apiSuccess {String} data.old_name 旧书名 * @apiSuccess {String} data.is_high_quality 是否优质 * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * { * code: 0, * msg: "", * data: { * [ * { * book_id: 5, * book_name: "肌缘巧合", * book_summary: "    他是权势倾天,纵横商界的王者,却偏偏钟情于她,一宠成瘾。“女人,我要你......只要你能满足我,别墅、游轮、支票,你随便挑。”她羞涩的半低着头:“我只想要你。”他挑眉,“你野心不小啊!”她妩媚一笑,解开他的领带,“难道你不愿意!”他宠她爱她,给她所有想要的。只是有一天她终于忍不住暴走,“靠,你有没有节制呀?我要离婚。”", * book_author: "妖火", * cover_url: "http://www.leyuee.com/cover/0/8.jpg", * book_word_count: 0, * book_chapter_total: 0, * book_category_id: null, * book_category: "爆笑,宠文,潜规则", * book_end_status: 8, * book_published_time: null, * copyright: null, * charge_type: null, * force_subscribe_chapter_id: 0, * update_time: null, * is_on_shelf: 1, * book_price: null, * keyword: "温馨,虐心,清水", * recommend_index:2, * is_show_index_content:0, * click_count:0, * product_id:0, * sex_preference:0, * }, * {} * ], * meta:{} * } * } */ public function getHighQualityBooks(Request $request) { $where = ['is_on_shelf' => [1, 2]]; $where = ['is_high_quality' => 1]; $key = $request->input('key'); if ($key) $where['key'] = $key; $author = $request->input('author'); if ($author) $where['author'] = $author; $category_id = $request->input('category_id'); if ($category_id) { if ($category_id == 1) { $where['channel_name'] = '男频'; } elseif ($category_id == 2) { $where['channel_name'] = '女频'; } else { $where['category_id'] = $category_id; } } $old_name = $request->input('old_name'); $domain = $request->input('domain'); $copy_right_date = $request->input('copy_right_date'); $bid = $request->input('bid'); if ($bid) $where['bid'] = $bid; if ($old_name) $where['old_name'] = $old_name; if ($domain) $where['domain'] = $domain; if ($copy_right_date) $where['copy_right_date'] = $copy_right_date; $page_size = $request->input('page_size', 15); $res = BookConfigService::getBooks($where, [], $page_size); return response()->pagination(new BookTransformer, $res); } /** * @apiVersion 1.0.0 * @apiDescription 编辑优选 * @api {get} books/editHighQuality 编辑优选 * @apiName editHighQuality * @apiParam {Int} bid bid * @apiParam {Int} is_high_quality 添加优质1,取消0 * @apiGroup Book * @apiSuccess {Int} code 状态码 * @apiSuccess {String} msg 信息 * @apiSuccess {object} data 结果集 * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * { * code: 0, * msg: "", * data: {} * } */ public function editHighQuality(Request $request) { $bid = $request->input('bid'); $is_high_quality = (int)$request->input('is_high_quality'); if (!$bid) { return response()->error('PARAM_EMPTY'); } if (BookConfigService::editIsHighQuality($bid, $is_high_quality)) { return response()->success(); } return response()->error('UNKNOWN_ERROR'); } /** * @apiVersion 1.0.0 * @apiDescription 上传封面 * @api {post} books/uploadcover 上传封面 * @apiName uploadCover * @apiParam {Int} bid bid * @apiParam {File} photo photo * @apiGroup Book * @apiSuccess {Int} code 状态码 * @apiSuccess {String} msg 信息 * @apiSuccess {object} data 结果集 * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * { * code: 0, * msg: "", * data: {} * } */ public function uploadCover(Request $request) { $bid = $request->input('bid'); if (!$request->hasFile('photo') || !$bid) { return response()->error('PARAM_EMPTY'); } $file = $request->file('photo'); //$extension = $file->getClientOriginalName(); $extension = $file->extension(); $file_name = date('YmdHis') . $bid . '.' . $extension; $upload_res = $this->ossObject()->uploadFile(env('OSS_BUCKET', 'zhuishuyun'), 'book/cover/' . $file_name, $file->path()); $imageUrl = str_ireplace('zhuishuyun.oss-cn-hangzhou.aliyuncs.com', 'cdn-novel.iycdm.com', $upload_res['oss-request-url']); $imageUrl = str_ireplace('http://', 'https://', $imageUrl); $imageUrl = $imageUrl . '?x-oss-process=image/resize,w_200/format,jpg'; $data = ['cover' => $imageUrl]; if (BookConfigService::updateBookConfig($bid, $data)) { return response()->success(); } return response()->error('UNKNOWN_ERROR'); } /** * @apiVersion 1.0.0 * @apiDescription 修改图书描述 * @api {post} books/updateIntro 修改图书描述 * @apiName updateIntro * @apiParam {Int} bid bid * @apiParam {String} intro 内容 * @apiGroup Book * @apiSuccess {Int} code 状态码 * @apiSuccess {String} msg 信息 * @apiSuccess {object} data 结果集 * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * { * code: 0, * msg: "", * data: {} * } */ public function updateIntro(Request $request) { $bid = $request->input('bid'); $intro = $request->input('intro'); if (!$intro || !$bid) { return response()->error('PARAM_EMPTY'); } $res = BookService::updateIntro($bid, $intro); if ($res) { return response()->success(); } return response()->error('UNKNOWN_ERROR'); } /** * @apiVersion 1.0.0 * @apiDescription 修改推荐文案 * @api {post} books/editRecommendChapterPositionWords 修改推荐文案 * @apiName editRecommendChapterPositionWords * @apiParam {String} content 内容 * @apiGroup Book * @apiSuccess {Int} code 状态码 * @apiSuccess {String} msg 信息 * @apiSuccess {object} data 结果集 * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * { * code: 0, * msg: "", * data: {} * } */ public function editRecommendChapterPositionWords(Request $request) { $content = $request->input('content'); if (!$content) { return response()->error('PARAM_EMPTY'); } Storage::put('RecommendChapterPositionWord.txt', $content); return response()->success(); } /** * @apiVersion 1.0.0 * @apiDescription 修改推荐章节 * @api {get} books/editRecommendcid 修改推荐章节 * @apiName editRecommendcid * @apiParam {Int} bid bid * @apiParam {Int} cid cid * @apiGroup Book * @apiSuccess {Int} code 状态码 * @apiSuccess {String} msg 信息 * @apiSuccess {object} data 结果集 * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * { * code: 0, * msg: "", * data: {} * } */ public function editRecommendcid(Request $request) { $bid = $request->input('bid'); $cid = $request->input('cid'); if (!$bid || !$cid) { return response()->error('PARAM_EMPTY'); } if (BookConfigService::editRecommendCid($bid, $cid)) { return response()->success(); } else { return response()->error('UNKNOWN_ERROR'); } } private function ossObject() { $accessKeyId = env('OSS_ACCESS_ID'); $accessKeySecret = env('OSS_ACCESS_KEY'); $endpoint = env('OSS_END_POINT'); $ossClient = null; try { $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); } catch (OssException $e) { return null; } return $ossClient; } /** * @apiVersion 1.0.0 * @apiDescription 获取推荐文案 * @api {get} books/getRecommendChapterPositionWords 获取推荐文案 * @apiName getRecommendChapterPositionWords * @apiGroup Book * @apiSuccess {Int} code 状态码 * @apiSuccess {String} msg 信息 * @apiSuccess {object} data 结果集 * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * { * code: 0, * msg: "", * data: { * content:建议此章节生成推广文案(原文转化率好) * } * } */ public function getRecommendChapterPositionWords(Request $request) { $content = ''; if (Storage::exists('RecommendChapterPositionWord.txt')) { $content = Storage::get('RecommendChapterPositionWord.txt'); } else { $content = '建议此章节生成推广文案(原文转化率好)'; } return response()->success(['content' => $content]); } /** * @apiVersion 1.0.0 * @apiDescription 书籍设置渠道标识功能 * @api {post} books/setChannelSpecialBook 获取推荐文案 * @apiName setChannelSpecialBook * @apiParam {Int} bid 书本id * @apiParam {Int} channel_id 渠道id * @apiGroup Book * @apiSuccess {Int} code 状态码 * @apiSuccess {String}msg 信息 * @apiSuccess {object}data 结果集 * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * { * code: 0, * msg: "", * data: {} * } */ public function setChannelSpecialBook(Request $request) { $bid = $request->has('bid') ? $request->input('bid') : ''; $channel_user_id = $request->has('channel_user_id') ? $request->input('channel_user_id') : ''; if (empty($bid)) { return response()->error("PARAM_EMPTY"); } else { if (empty($channel_user_id)) { $data = BookSpecialChannelService::clearSpecialChannle($bid); } else { $channel_user_ids = explode(',', $channel_user_id); $channels = array_filter($channel_user_ids); $data = BookSpecialChannelService::addSpecialChannle($bid, $channels); } if ($data) { return response()->success(); } return response()->error("HANDLE_FAILED"); } } public function copyBook(Request $request) { //return 1111; $bid = $request->has('bid') ? $request->input('bid') : ''; if (empty($bid)) { return response()->error("PARAM_EMPTY"); } $book_info = Book::find($bid); if (!$book_info) { return response()->error("PARAM_EMPTY"); } $book_config_info = BookConfig::where('bid', $bid)->first(); if (!$book_config_info) { return response()->error("PARAM_EMPTY"); } $book = Book::create([ 'ly_bid' => $book_info->ly_bid, 'name' => $book_info->name, 'author' => $book_info->author, 'intro' => $book_info->intro, 'cover' => $book_info->cover, 'keyword' => $book_info->keyword, 'category_id' => $book_info->category_id, 'status' => $book_info->status, 'chapter_count' => $book_info->chapter_count, 'first_cid' => 0, 'last_cid' => 0, 'last_chapter' => $book_info->last_chapter, 'size' => $book_info->size, 'category_name' => $book_info->category_name, ]); $product = ProductService::addProduct(['price' => 8.99, 'type' => 'BOOK_ORDER', 'given' => 0, 'is_default' => 0, 'is_enabled' => 0]); DB::table('book_configs')->insert([ 'bid' => $book->id, 'force_subscribe_chapter_seq' => $book_config_info->force_subscribe_chapter_seq, 'book_name' => $book_config_info->book_name . '-复制', 'price' => '8.99', 'cover' => $book_config_info->cover, 'charge_type' => $book_config_info->charge_type, 'is_on_shelf' => 0, 'product_id' => $product->id, 'cp_source' => $book_config_info->cp_source, 'vip_seq' => $book_config_info->vip_seq, 'hot' => $book_config_info->hot, 'promotion_domain' => $book_config_info->promotion_domain, 'recommend_cid' => $book_config_info->recommend_cid, 'is_high_quality' => $book_config_info->is_high_quality, 'source_domain' => $book_config_info->source_domain, 'is_show_index_content' => $book_config_info->is_show_index_content, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s') ]); $sql = 'CALL copybook(' . $bid . ',' . $book->id . ')'; DB::select($sql); $this->adjustSequentOne($book->id); return response()->success(['bid' => $book->id]); } public function adjustSequentOne($bid) { $chapter_list = DB::table('chapters')->orderBy('sequence')->where('bid', $bid)->select('id')->get(); $prev = 0; $i = 0; $first = ''; $last = ''; foreach ($chapter_list as $chapter) { if ($i == 0) { $first = $chapter; } if ($prev) { DB::table('chapters')->where('id', $chapter->id)->update(['prev_cid' => $prev]); DB::table('chapters')->where('id', $prev)->update(['next_cid' => $chapter->id]); } $prev = $chapter->id; $i++; $last = $chapter; } Book::where('id', $bid)->update(['first_cid' => $first->id, 'last_cid' => $last->id]); } public function getAllBookSimple(Request $request) { $is_on_shelf = $request->input('is_on_shelf'); $order = $request->input('order'); $seq = $request->input('sequence', 'desc'); if ($is_on_shelf) { $is_on_shelf = explode(',', $is_on_shelf); } else { $is_on_shelf = [1, 2]; } $order_arr = []; if ($order) { $order_arr[0] = $order; $order_arr[1] = 'desc'; if ($seq && $seq == 'asc') { $order_arr[1] = 'asc'; } } // 增加加密的bid字段 $books = BookConfig::getAllBooks($is_on_shelf, $order_arr); foreach ($books as $key => $book) { $books[$key]['bid_hash'] = Hashids::encode($books[$key]['bid']); } return response()->success($books); } /** * @apiVersion 1.0.0 * @apiDescription 设置章节价格 * @api {get} books/setChapterPrice 设置章节价格 * @apiName setChapterPrice * @apiParam {Int} type 类型(1,2) 1代表 单个渠道,2代表渠道下所有的site * @apiParam {Int} channel_id 渠道id * @apiParam {float} price 价格 (千字/毛) * @apiGroup Book * @apiSuccess {Int} code 状态码 * @apiSuccess {String}msg 信息 * @apiSuccess {object}data 结果集 * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * { * code: 0, * msg: "", * data: {} * } */ public function setChapterPrice(Request $request) { $type = $request->input('type', 1); $channel_id = $request->input('channel_id'); $price = $request->input('price'); if (!$channel_id || !$price) { return response()->error("PARAM_EMPTY"); } if (!is_numeric($price)) { return response()->error("PARAM_EMPTY"); } //distribution_channel_id if ($type == 1) { BookService::setChapterPrice($channel_id, $price); } //channel_user_id if ($type == 2) { $res = ChannelService::getByChannelUserId($channel_id); foreach ($res as $v) { BookService::setChapterPrice($v->id, $price); } } return response()->success(); } /** * @apiVersion 1.0.0 * @apiDescription 根据书名获取图书 * @api {get} books/getSimpleBookListByName 根据书名获取图书 * @apiName getSimpleBookListByName * @apiParam {String} book_name 书名 * @apiGroup Book * @apiSuccess {Int} code 状态码 * @apiSuccess {String}msg 信息 * @apiSuccess {object}data 结果集 * @apiSuccess {int} data.bid bid * @apiSuccess {string} data.book_name 书名 * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * { * code: 0, * msg: "", * data: {} * } */ public function getSimpleBookListByName(Request $request) { $name = $request->input('book_name'); if (empty($name)) { return response()->success(); } $res = BookConfigService::getBooksByName(trim($name)); return response()->success($res); } /** * @apiVersion 1.0.0 * @apiDescription 设置分校推荐榜 * @api {post} books/setEditorRecommendBooks 设置分校推荐榜 * @apiName setEditorRecommendBooks * @apiParam {String} important_bids 重点bid列表,逗号隔开(1,2,3) * @apiParam {String} unimportant_bids 非重点bid列表(112,232,312) * @apiGroup Book * @apiSuccess {Int} code 状态码 * @apiSuccess {String} msg 信息 * @apiSuccess {object} ata 结果集 * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * { * code: 0, * msg: "", * data: {} * } */ public function setEditorRecommendBooks(Request $request) { //$type = $request->input('type'); $important_bids = $request->input('important_bids'); $unimportant_bids = $request->input('unimportant_bids'); if (empty($important_bids) || empty($unimportant_bids)) { return response()->error("PARAM_EMPTY"); } Redis::hincrby('channel_recomm_books', 'count', 1); Redis::hset('channel_recomm_books', 'important', $important_bids); Redis::hset('channel_recomm_books', 'unimportant', $unimportant_bids); $nowcount = Redis::hget('channel_recomm_books', 'count'); if (!$nowcount) $nowcount = 0; $old_import = BookConfigService::getSimpleBooksByIds(explode(',', $important_bids)); $data = []; foreach ($old_import as $v) { $data[] = ['bid' => $v->bid, 'book_name' => $v->book_name, 'type' => 'IMPORTANT', 'count' => $nowcount, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s')]; } $old_unimportant = BookConfigService::getSimpleBooksByIds(explode(',', $unimportant_bids)); foreach ($old_unimportant as $val) { $data[] = ['bid' => $val->bid, 'book_name' => $val->book_name, 'type' => 'UNIMPORTANT', 'count' => $nowcount, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s')]; } if ($data) { DB::table('channel_editor_recommend_rank')->insert($data); } return response()->success(); } /** * @apiVersion 1.0.0 * @apiDescription 获取分校推荐榜 * @api {get} books/getEditorRecommendBooks 获取分校推荐榜 * @apiName getEditorRecommendBooks * @apiParam {String} [count] 次数默认最近一次 * @apiGroup Book * @apiSuccess {Int} code 状态码 * @apiSuccess {String} msg 信息 * @apiSuccess {object} data 结果集 * @apiSuccess {int} data.total_count 总次数 * @apiSuccess {int} data.now 当前次数 * @apiSuccess {object} data.important 重点渠道 * @apiSuccess {int} data.important.bid bid * @apiSuccess {string} data.important.book_name 书名 * @apiSuccess {object} data.unimportant * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * { * code: 0, * msg: "", * data: { * total_count:3, * now :3 * important:[] * unimportant * } * } */ public function getEditorRecommendBooks(Request $request) { $type = $request->input('count', 0); $nowcount = Redis::hget('channel_recomm_books', 'count'); if (!$type) $type = $nowcount; $important_books = null; $unimportant_books = null; if ($type) { $important_books = DB::table('channel_editor_recommend_rank')->where('count', $type)->where('type', 'IMPORTANT')->select('bid', 'book_name')->get(); $unimportant_books = DB::table('channel_editor_recommend_rank')->where('count', $type)->where('type', 'UNIMPORTANT')->select('bid', 'book_name')->get(); } else { $important = Redis::hget('channel_recomm_books', 'important'); if ($important) { $important_bid = explode(',', $important); $important_books = BookConfigService::getSimpleBooksByIds($important_bid); } $unimportant = Redis::hget('channel_recomm_books', 'unimportant'); if ($unimportant) { $unimportant_bid = explode(',', $unimportant); $unimportant_books = BookConfigService::getSimpleBooksByIds($unimportant_bid); } } $res = ['total_count' => $nowcount, 'now' => $type, 'important' => $important_books, 'unimportant' => $unimportant_books]; return response()->success($res); } public function getBookIntro(Request $request) { $bid = (int)$request->get('bid', 0); $book_name = $request->get('book_name', ''); if (empty($bid) && empty($book_name)) { return response()->error("PARAM_EMPTY"); } $info = BookConfigService::getBookIntroByBid($bid, $book_name); if (empty($info)) { $info = [ ['book_name' => $book_name.'(0)', 'intro' => ''] ]; } return response()->success($info); } public function getBookCommentStats(Request $request){ /*$bid = $request->input('bid'); if(!$bid){ return response()->error('PARAM_ERROR'); }*/ } /** * 测书更新 * @param Request $request */ public function updateTestBook(Request $request) { $bid = (int)$request->get('bid', 0); if (empty($bid)) { return response()->error("PARAM_EMPTY"); } $status = $request->get('status'); if (empty($status)) { return response()->error("PARAM_EMPTY"); } $plan_push_user_num = $request->get('plan_push_user_num'); if (empty($plan_push_user_num)) { return response()->error("PARAM_EMPTY"); } // 检测书库是否存在这本书 $is_one_shelfs = [1,2]; $origin_book = BookConfigService::getBookByIdAndStatus($bid,$is_one_shelfs); if(empty($origin_book)){ return response()->error("BOOK_NOT_EXIST"); } // 如果已经存在测书,则更新状态, 不存在则要检测测书数量 if($origin_book->test_status == 0){ // 检测书库是否已经达到目标数量的测试书 $test_books = BookConfigService::get_test_books(1); if(count($test_books) >= 50){ return response()->error("TEST_BOOK_LIMIT_NUM"); } } // 开启测试书 BookConfigService::updateTestBook($bid, $status,$plan_push_user_num); return response()->success(); } /** * 测书统计数据 * @param Request $request */ public function getTestBookStatistics(Request $request) { // 获取测试的书籍列表 $test_books = BookConfigService::get_all_test_books(false); $test_books = BookService::getBookStatistics($test_books); return response()->pagination(new SmartPushBookTransformer, $test_books); } /** * 智能推送统计数据 * @param Request $request */ public function getSmartPushBookStatistics(Request $request) { // 获取测试的书籍列表 $smart_push_books = BookConfigService::get_all_smart_push_books(false); $smart_push_books = BookService::getBookStatistics($smart_push_books); return response()->pagination(new SmartPushBookTransformer, $smart_push_books); } /** * 导出测书统计数据 * @param Request $request */ public function exportGetTestBookStatistics(Request $request) { // 获取书籍列表 $books = BookConfigService::get_all_test_books(true); $book_statistics = BookService::getBookStatistics($books); self::exportBookStatistics($book_statistics,'测书统计'); } /** * 导出智能推送统计数据 * @param Request $request */ public function exportGetSmartPushBookStatistics(Request $request) { // 获取书籍列表 $books = BookConfigService::get_all_smart_push_books(true); $book_statistics = BookService::getBookStatistics($books); self::exportBookStatistics($book_statistics,'智能推送统计'); } function exportBookStatistics($book_statistics,$csv_name){ header("Content-type:application/vnd.ms-excel"); header("Content-Disposition:attachment;filename=" . $csv_name . date("YmdHis") . ".csv"); echo iconv("UTF-8", "GBK", "\"书名\",\"bid\",\"创建时间\",\"计划曝光量\",\"真实曝光量\",\"访问uv\",\"第二章uv\",\"订阅人数\",\"订阅金额\",\"充值人数\",\"充值金额\",\"状态\"\r\n"); foreach ($book_statistics as $item) { echo("\"" . mb_convert_encoding($item->book_name, "GBK", "UTF-8") . "\","); echo("\"" . mb_convert_encoding($item->bid, "GBK", "UTF-8") . "\","); echo("\"" . mb_convert_encoding(isset($item->test_update_time) ? date('Y-m-d H:i:s',strtotime($item->test_update_time)):'', "GBK", "UTF-8") . "\","); echo("\"" . mb_convert_encoding($item->plan_push_user_num, "GBK", "UTF-8") . "\","); echo("\"" . mb_convert_encoding($item->real_push_user_num, "GBK", "UTF-8") . "\","); echo("\"" . mb_convert_encoding($item->uv, "GBK", "UTF-8") . "\","); echo("\"" . mb_convert_encoding($item->second_chapter_uv, "GBK", "UTF-8") . "\","); echo("\"" . mb_convert_encoding($item->book_user_num, "GBK", "UTF-8") . "\","); echo("\"" . mb_convert_encoding(round($item->book_amount/100,2), "GBK", "UTF-8") . "\","); echo("\"" . mb_convert_encoding($item->charge_user_num, "GBK", "UTF-8") . "\","); echo("\"" . mb_convert_encoding(round($item->charge_amount/100,2), "GBK", "UTF-8") . "\","); if($item->test_status == 1){ echo("\"" . mb_convert_encoding("测书中", "GBK", "UTF-8") . "\"\r\n"); }else{ echo("\"" . mb_convert_encoding("已暂停", "GBK", "UTF-8") . "\"\r\n"); } } exit(); } /** * @param Request $request * @return mixed */ public function editorRecommendMsg(Request $request) { $msg = trim($request->input('recommend_msg','')); $bid = $request->input('bid',''); if(empty($msg) || empty($bid)) { return response()->error('PARAM_EMPTY'); } $res = BookConfig::where('bid',$bid)->update(['editor_recommend'=>$msg]); return response()->success($res); } public function getEditorRecommendMsg(Request $request) { $bid = $request->input('bid',''); if(empty($bid)) { return response()->error('PARAM_EMPTY'); } $msg = BookConfig::where('bid',$bid) ->select('editor_recommend') ->first(); $msg = $msg?$msg->editor_recommend:''; return response()->success($msg); } }