update(['intro' => $intro]); } /** * 设置章节价格 * @param int $channel_id * @param int $price */ public static function setChapterPrice(int $channel_id, float $price): void { try { Redis::hset('book_chapter_price', $channel_id, $price); } catch (\Exception $e) { } } /** * 获取渠道设置的价格 * @param int $channel_id * @return int */ public static function getChapterPrice(int $channel_id) { try { $fee = Redis::hget('book_chapter_price', $channel_id); if ($fee) return (float) $fee; else return 0; } catch (\Exception $e) { } return 0; } public static function getBookStatistics($smart_push_books) { // 获取书籍统计数据 if (!empty($smart_push_books)) { foreach ($smart_push_books as $key => $smart_push_book) { $book_statistics = WapVisitStatService::smartPushTestBookStats($smart_push_book->bid); $smart_push_books[$key]->uv = $book_statistics['uv']; $smart_push_books[$key]->pv = $book_statistics['pv']; $smart_push_books[$key]->charge_amount = $book_statistics['charge_amount']; $smart_push_books[$key]->charge_user_num = $book_statistics['charge_user_num']; $smart_push_books[$key]->book_amount = $book_statistics['book_amount']; $smart_push_books[$key]->book_user_num = $book_statistics['book_user_num']; $smart_push_books[$key]->real_push_user_num = $book_statistics['real_push_user_num']; $smart_push_books[$key]->second_chapter_uv = $book_statistics['second_chapter_uv']; } } return $smart_push_books; } public static function getBookById($bid) { return Book::find($bid); } public static function newYunQiBook($bid) { $old = DB::table('book_yunqi')->where('yq_bid', $bid)->where('type', 'NEW_YUNQI')->first(); if ($old) { return -1; } $new_yunqi_book = DB::connection('new_yunqi') ->table('books') ->join('book_configs', 'books.id', '=', 'book_configs.bid') ->select( 'books.id', 'books.author', 'books.author', 'books.intro', 'books.category_name', 'books.keyword', 'books.status', 'books.chapter_count', 'books.size', 'books.last_chapter', 'book_configs.book_name as name', 'book_configs.cover', 'book_configs.force_subscribe_chapter_seq', 'book_configs.charge_type', 'book_configs.roles' ) ->where('books.id', $bid) ->first(); if (!$new_yunqi_book) { return -2; } $book = Book::create( [ 'ly_bid' => 0, 'name' => $new_yunqi_book->name, 'author' => $new_yunqi_book->author, 'intro' => $new_yunqi_book->intro, 'cover' => $new_yunqi_book->cover, 'category_name' => $new_yunqi_book->category_name, 'keyword' => $new_yunqi_book->keyword, 'category_id' => 0, 'status' => $new_yunqi_book->status, 'chapter_count' => $new_yunqi_book->chapter_count, 'first_cid' => 0, 'last_cid' => 0, 'size' => $new_yunqi_book->size, 'last_chapter' => $new_yunqi_book->last_chapter, 'sequence' => 0, 'yq_bid' => $bid ] ); DB::table('book_yunqi')->insert([ 'bid' => $book->id, 'yq_bid' => $bid, 'type' => 'NEW_YUNQI', 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s') ]); for ($i = 1; $i <= $new_yunqi_book->chapter_count; $i++) { $temp = DB::connection('new_yunqi')->table('chapters')->where('bid', $bid)->where('sequence', $i)->select('name', 'content', 'is_vip', 'size')->first(); if ($temp) { Chapter::create([ 'bid' => $book->id, 'name' => $temp->name, 'sequence' => $i, 'is_vip' => $temp->is_vip, 'size' => $temp->size, 'prev_cid' => 0, 'next_cid' => 0, 'recent_update_at' => date('Y-m-d H:i:s'), 'content' => $temp->content, 'ly_chapter_id' => 0 ]); } } \Artisan::call('book:afs', ['bid' => [$book->id]]); DB::table('book_configs')->where('bid', $book->id)->update([ 'force_subscribe_chapter_seq' => $new_yunqi_book->force_subscribe_chapter_seq, 'roles' => $new_yunqi_book->roles, 'charge_type' => $new_yunqi_book->charge_type, 'cp_source' => 'new_yunqi' ]); return 0; } public static function getPrice($book_info,$distribution_channel_id,$size,$account=''){ // 书默认--- 收费类型 $calculate_price_type = $book_info->calculate_price_type; // 渠道bid--- 收费类型 $channel_calculate_price_type = Redis::hget('channel:charge_type:setting:' . $distribution_channel_id, $book_info->bid); if($channel_calculate_price_type){ $calculate_price_type = $channel_calculate_price_type; } // 账户bid优先--- 收费类型 $channel_account_calculate_price_type = Redis::hget('channel:charge_type:setting:' . $distribution_channel_id.':'.$account, $book_info->bid); if($channel_account_calculate_price_type){ $calculate_price_type = $channel_account_calculate_price_type; } // 渠道bid价格 $distribution_channel_id_price = Redis::hget('channel:price:setting:'.$distribution_channel_id,$book_info->bid); // 账户bid默认价格 $distribution_account_channel_id_price = Redis::hget('channel:price:setting:'.$distribution_channel_id.':'.$account, $book_info->bid); //固定价格 if(strtolower($calculate_price_type) == 'const'){ $price = (int)$book_info->unit_price; if($distribution_channel_id_price){ $price = (int)$distribution_channel_id_price; } if($distribution_account_channel_id_price){ $price = (int)$distribution_account_channel_id_price; } $price = $price < 30 ? 30 : $price; \Log::info('getprice:book:'.$book_info->bid.' calculate_price_type:'.$calculate_price_type.' distribution_channel_id:'.$distribution_channel_id.' account:'.$account.' price:'.$price); return $price; } //千字价格 $channel_fee = self::getChapterPrice($distribution_channel_id); if ($channel_fee) { $price_rate = $channel_fee / 100; } else { $price_rate = env('DEFAULT_CHAPTER_PRICE', 0.015); } if($book_info->unit_price){ $price_rate = $book_info->unit_price; } if($distribution_channel_id_price){ $price_rate = $distribution_channel_id_price; } if($distribution_account_channel_id_price){ $price_rate = $distribution_account_channel_id_price; } $fee = ceil($size * $price_rate); if($fee >189) $fee = 189; if($fee <37) $fee = 37; \Log::info('getprice:book:'.$book_info->bid.' calculate_price_type:'.$calculate_price_type.' distribution_channel_id:'.$distribution_channel_id.' account:'.$account.' price:'.$fee.' size:'.$size.' $price_rate:'.$price_rate); return $fee; } /** * 切章后,[是否切章,是否改名] * @param $bid * @return array */ public static function splitContent($bid){ $config = DB::table('book_split_operate_record')->where('bid',$bid)->select('chapter_name_type','is_process')->orderBy('id','desc')->first(); if(!$config) return [0,0]; if($config->is_process == 2){ return [1,$config->chapter_name_type]; } return [0,0]; } }