123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749 |
- <?php
- namespace App\Http\Controllers\Manage\Book;
- use App\Http\Controllers\Controller;
- use App\Http\Controllers\Manage\Book\Transformers\BookTransformer;
- use App\Http\Controllers\Manage\Book\Transformers\SmartPushBookTransformer;
- use App\Modules\Book\Models\Book;
- use App\Modules\Book\Models\BookConfig;
- use App\Modules\Book\Services\BookConfigService;
- use App\Modules\Book\Services\BookService;
- use App\Modules\Book\Services\BookSpecialChannelService;
- use App\Modules\Book\Services\BookTagsService;
- use App\Modules\Channel\Services\ChannelService;
- use App\Modules\Statistic\Services\WapVisitStatService;
- use App\Modules\Product\Services\ProductService;
- use DB;
- use Hashids;
- use Cache;
- use Illuminate\Http\Request;
- use OSS\Core\OssException;
- use OSS\OssClient;
- use Redis;
- use Storage;
- class BookController extends Controller
- {
- /**
- * @apiDefine Book 图书模块
- */
- /**
- * @apiVersion 1.0.0
- * @apiDescription 按bid获取图书详情
- * @api {get} book/{bid} 获取图书详情
- * @apiGroup Book
- * @apiName getBookById
- * @apiSuccess {int} code 状态码
- * @apiSuccess {String} msg 信息
- * @apiSuccess {object} 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 {Int} 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 {Int} data.book_price 价格
- * @apiSuccess {String} data.charge_type 收费类型
- * @apiSuccess {String} data.keyword 关键词
- * @apiSuccess {String} data.recommend_index 推荐指数
- * @apiSuccess {String} data.is_show_index_content 是否显示推荐指数文本
- * @apiSuccess {Int} data.click_count 点击数
- * @apiSuccess {Int} data.product_id product_id
- * @apiSuccess {Int} data.sex_preference 性别偏象
- * @apiSuccess {Int} data.last_cid 最后一章id
- * @apiSuccess {Int} data.last_chapter 最后一章名
- * @apiSuccess {Int} data.first_cid 第一章cid
- * @apiSuccess {String} data.old_name 旧书名
- * @apiSuccess {String} data.recommend_text 推广标题
- * @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: 0,
- * 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:hello
- * }
- * }
- */
- public function getBookById($bid)
- {
- $res = BookConfigService::getBookById($bid);
- $content = '';
- if (Storage::exists('RecommendChapterPositionWord.txt')) {
- $content = Storage::get('RecommendChapterPositionWord.txt');
- } else {
- $content = '建议此章节生成推广文案(原文转化率好)';
- }
- $res->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);
- }
- }
|