DataAnalysisBookConfig.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <?php
  2. namespace App\Modules\Book\Models;
  3. use Illuminate\Database\Eloquent\Model;
  4. use App\Modules\OfficialAccount\Services\ForceSubscribeService;
  5. use App\Modules\User\Services\ReadRecordService;
  6. use App\Modules\Book\Models\Book;
  7. use DB;
  8. use Redis;
  9. class DataAnalysisBookConfig extends Model
  10. {
  11. protected $table = 'data_analysis_book_configs';
  12. protected $fillable = ['bid','book_name','template_title','custom_title','site_banner','sex','status','created_at','updated_at'];
  13. public static function get_data_analysis_book_configs($sex){
  14. return self::select('*')->where('status',1)->where('sex',$sex)->orderBy(DB::raw('RAND()'))->get();
  15. }
  16. /**
  17. * 获取1本推荐的未订购的书籍
  18. */
  19. public static function getUserOneNotOrderBook($uid){
  20. try{
  21. // 判断性别
  22. $sex = ForceSubscribeService::getSimpleSexByUid($uid);
  23. // 配置书籍
  24. $book_configs = self::get_data_analysis_book_configs($sex);
  25. // 获取用户阅读记录详情
  26. $read_bids = ReadRecordService::getSimpleReadRecord($uid);
  27. // 推荐过的
  28. $recommend_bids = Redis::smembers('DataAnalysisBookConfig:'.$uid);
  29. $full_bids = array_merge($read_bids,$recommend_bids);
  30. \Log::info('getUserOneNotOrderBook_uid:'.$uid.' sex:'.$sex. ' read_bids:'.json_encode($read_bids).' recommend_bids:'.json_encode($recommend_bids).' full_bids:'.json_encode($full_bids));
  31. $one_book = $book_configs[0];
  32. do{
  33. foreach($book_configs as $key=>$book_config){
  34. if(in_array($book_config->bid,$full_bids)){
  35. \Log::info('getUserOneNotOrderBook_exists:'.$book_config->bid);
  36. continue;
  37. }
  38. Redis::sadd('DataAnalysisBookConfig:'.$uid,$book_config->bid);
  39. $one_book = $book_configs[$key];
  40. break;
  41. }
  42. }while(false);
  43. $book = Book::getBook($one_book->bid);
  44. $one_book->first_cid = isset($book->first_cid)?$book->first_cid:'0';
  45. }catch(Exception $e){
  46. \Log::info('getUserOneNotOrderBook_ept:'.$e->getMessage());
  47. }
  48. \Log::info('getUserOneNotOrderBook_last_book:'.json_encode($one_book));
  49. return $one_book;
  50. }
  51. public static function getUserReaderPagePushBook($uid,$channel_id,$count=3){
  52. try{
  53. $sex = ForceSubscribeService::getSimpleSexByUid($uid);
  54. $result = self::join('books','books.id','=','data_analysis_book_configs.bid')
  55. ->where('data_analysis_book_configs.sex',$sex)
  56. ->where('data_analysis_book_configs.status',1)
  57. ->select('data_analysis_book_configs.id','books.first_cid','data_analysis_book_configs.bid','data_analysis_book_configs.site_banner');
  58. if($count>1){
  59. $result= $result->get()->random(3)->all();
  60. $data = [];
  61. $link_format = '%s://site%s.%s.com/reader?bid=%s&cid=%s&ru=%s';
  62. $img_array = array_rand(range(1,20),3);
  63. foreach ($result as $k=>$v){
  64. $link = sprintf(
  65. $link_format,
  66. env('PROTOCOL'),
  67. encodeDistributionChannelId($channel_id),
  68. env('CUSTOM_HOST'),
  69. \Hashids::encode($v->bid),
  70. $v->first_cid,
  71. 'title_'.$v->id
  72. );
  73. $img = 'https://cdn-novel.iycdm.com/h5/20181120/'.($img_array[$k]+1).'.jpg';
  74. $data[] = ['title'=>$v->site_banner,'link'=>$link,'img'=>$img];
  75. }
  76. return $data;
  77. }
  78. $result = $result->get()->random(1)->first();
  79. $link_format = '%s://site%s.%s.com/reader?bid=%s&cid=%s&ru=%s';
  80. $link = sprintf(
  81. $link_format,
  82. env('PROTOCOL'),
  83. encodeDistributionChannelId($channel_id),
  84. env('CUSTOM_HOST'),
  85. \Hashids::encode($result->bid),
  86. $result->first_cid,
  87. 'over_'.$result->id
  88. );
  89. return ['title'=>'','link'=>$link,'img'=>''];
  90. }catch (\Exception $e){
  91. \Log::info($e);
  92. }
  93. return [];
  94. }
  95. public static function getUserReaderPagePushBookV2($uid,$channel_id,$charge_type,$count=3){
  96. try{
  97. $sex = ForceSubscribeService::getSimpleSexByUid($uid);
  98. $result = self::join('books','books.id','=','data_analysis_book_configs.bid')
  99. ->where('data_analysis_book_configs.sex',$sex)
  100. ->where('data_analysis_book_configs.status',1)
  101. ->where('data_analysis_book_configs.charge_type',$charge_type)
  102. ->select('data_analysis_book_configs.id','books.first_cid','data_analysis_book_configs.bid','data_analysis_book_configs.site_banner');
  103. if($count>1){
  104. $result= $result->get()->random(3)->all();
  105. $data = [];
  106. $link_format = '%s://site%s.%s.com/reader?bid=%s&cid=%s&ru=%s';
  107. foreach ($result as $k=>$v){
  108. $link = sprintf(
  109. $link_format,
  110. env('PROTOCOL'),
  111. encodeDistributionChannelId($channel_id),
  112. env('CUSTOM_HOST'),
  113. \Hashids::encode($v->bid),
  114. $v->first_cid,
  115. 'title_'.$v->id
  116. );
  117. //$img = 'https://cdn-novel.iycdm.com/h5/20181120/'.($img_array[$k]+1).'.jpg';
  118. $img = 'https://cdn-novel.iycdm.com/h5/20181120/'.($v->id).'.jpg';
  119. $data[] = ['title'=>$v->site_banner,'link'=>$link,'img'=>$img];
  120. }
  121. return $data;
  122. }
  123. $result = $result->get()->random(1)->first();
  124. $link_format = '%s://site%s.%s.com/reader?bid=%s&cid=%s&ru=%s';
  125. $link = sprintf(
  126. $link_format,
  127. env('PROTOCOL'),
  128. encodeDistributionChannelId($channel_id),
  129. env('CUSTOM_HOST'),
  130. \Hashids::encode($result->bid),
  131. $result->first_cid,
  132. 'over_'.$result->id
  133. );
  134. return ['title'=>'','link'=>$link,'img'=>''];
  135. }catch (\Exception $e){
  136. \Log::info($e);
  137. }
  138. return [];
  139. }
  140. }