|
@@ -5,6 +5,8 @@ namespace App\Http\Controllers\QuickApp\Book;
|
|
|
use App\Consts\BaseConst;
|
|
|
use App\Libs\Utils;
|
|
|
use App\Modules\Book\Services\BookAuditService;
|
|
|
+use App\Modules\Channel\Models\ChannelAdvert;
|
|
|
+use App\Modules\Channel\Services\ChannelAdvertService;
|
|
|
use App\Modules\Channel\Services\ChannelRecommendBookConfigService;
|
|
|
use App\Modules\Channel\Services\ChannelRecommendBooksService;
|
|
|
use App\Modules\RecommendBook\Services\QappRecommendService;
|
|
@@ -202,20 +204,7 @@ class BookController extends BaseController
|
|
|
}
|
|
|
|
|
|
if($isAuth){
|
|
|
- $books = (new RecoBannerService)->getByType($reco_banner_type, 2);
|
|
|
-
|
|
|
- $books->transform(function ($item) {
|
|
|
- $result = $this->getBidCidFromUrl($item->redirect_url);
|
|
|
- $item->bid = $result['bid'];
|
|
|
- $item->cid = $result['cid'];
|
|
|
- $item->id = Hashids::encode($item->id);
|
|
|
- if ($result['cid']) {
|
|
|
- $item->redirect_url = "views/Reader";
|
|
|
- } else {
|
|
|
- $item->redirect_url = "views/Detail";
|
|
|
- }
|
|
|
- return $item;
|
|
|
- });
|
|
|
+ $books = $this->getDefaultBanner();
|
|
|
}else{
|
|
|
$home = config('home.ycsd');
|
|
|
$banner = $home['reco_banner'];
|
|
@@ -568,20 +557,7 @@ class BookController extends BaseController
|
|
|
*/
|
|
|
public function recommen()
|
|
|
{
|
|
|
- $reco_banner_type = ['FEMALE', 'PUBLIC'];
|
|
|
- $books = (new RecoBannerService)->getByType($reco_banner_type, 2);
|
|
|
- $books->transform(function ($item) {
|
|
|
- $result = $this->getBidCidFromUrl($item->redirect_url);
|
|
|
- $item->bid = $result['bid'];
|
|
|
- $item->cid = $result['cid'];
|
|
|
- $item->id = Hashids::encode($item->id);
|
|
|
- if ($result['cid']) {
|
|
|
- $item->redirect_url = "views/Reader";
|
|
|
- } else {
|
|
|
- $item->redirect_url = "views/Detail";
|
|
|
- }
|
|
|
- return $item;
|
|
|
- });
|
|
|
+ $books = $this->getDefaultBanner();
|
|
|
return response()->success($books);
|
|
|
}
|
|
|
/**
|
|
@@ -604,13 +580,118 @@ class BookController extends BaseController
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ $books = $this->getDefaultBanner();
|
|
|
+ return response()->success($books);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 新获取各种广告列表
|
|
|
+ * @param Request $request
|
|
|
+ * @return mixed
|
|
|
+ */
|
|
|
+ public function getRecommendBanners(Request $request)
|
|
|
+ {
|
|
|
+ $release_type = $request->get('release_type','');
|
|
|
+ $distribution_id = $this->distribution_channel_id;
|
|
|
+ if(empty($release_type)){
|
|
|
+ //默认原banner
|
|
|
+ $banner = $this->getDefaultBanner();
|
|
|
+ return response()->success($banner);
|
|
|
+ }
|
|
|
+
|
|
|
+ if($release_type == '4' || $release_type == '5'){
|
|
|
+ //弹窗和充值页返回需要先判断频率跟权限
|
|
|
+ $advert = ChannelAdvert::where('distribution_id',$distribution_id)
|
|
|
+ ->where('release_type',$release_type)
|
|
|
+ ->where('status',1)
|
|
|
+ ->first();
|
|
|
+ if(!$advert){
|
|
|
+ return response()->success([]);
|
|
|
+ }
|
|
|
+
|
|
|
+ $advert->id = Hashids::encode($advert->id);
|
|
|
+ if($advert->type == 1){
|
|
|
+ $advert->redirect_url = 'views/Reader';
|
|
|
+ $content = explode(';',$advert->content);
|
|
|
+ $advert->bid = isset($content[2]) ? $content[2] : '';
|
|
|
+ $advert->cid = isset($content[3]) ? $content[3] : '';
|
|
|
+ }else{
|
|
|
+ $advert->redirect_url = 'views/Detail';
|
|
|
+ }
|
|
|
+
|
|
|
+ if($release_type == '4'){
|
|
|
+ //弹窗需要判断频率
|
|
|
+ if($advert->frequency == 'always'){
|
|
|
+ return response()->success($advert);
|
|
|
+ }
|
|
|
+
|
|
|
+ $day = strtotime(date('Y-m-d H:i:s'));
|
|
|
+ $nextDay = strtotime( date('Y-m-d'). ' +1 day');
|
|
|
+ $nextWeek = strtotime(date('Y-m-d',strtotime('+1 week last monday')));
|
|
|
+ if($advert->frequency == 'day'){
|
|
|
+ if(!Redis::exists('banner:'.$distribution_id.':'.$this->uid)){
|
|
|
+ Redis::setex('banner:'.$distribution_id.':'.$this->uid,($nextDay-$day),1);
|
|
|
+ return response()->success($advert);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if($advert->frequency == 'week'){
|
|
|
+ if(!Redis::exists('banner:'.$distribution_id.':'.$this->uid)){
|
|
|
+ Redis::setex('banner:'.$distribution_id.':'.$this->uid,($nextWeek-$day),1);
|
|
|
+ return response()->success($advert);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ return response()->success([]);
|
|
|
+ }
|
|
|
+
|
|
|
+ if($release_type == '5'){
|
|
|
+ //充值页返回需要判断用户权限
|
|
|
+ $check_user = $this->checkUsers($advert->person);
|
|
|
+ if(!$check_user){
|
|
|
+ return response()->success([]);
|
|
|
+ }
|
|
|
+ return response()->success($advert);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //男女频,书架列表
|
|
|
+ $banner = ChannelAdvertService::getAdvertList($distribution_id,$release_type);
|
|
|
+ if($banner->isEmpty()){
|
|
|
+ $banner = $this->getDefaultBanner();
|
|
|
+ return response()->success($banner);
|
|
|
+ }
|
|
|
+
|
|
|
+ $banner->transform(function ($item) {
|
|
|
+ $item->id = Hashids::encode($item->id);
|
|
|
+ if($item->type == 1){
|
|
|
+ $item->redirect_url = 'views/Reader';
|
|
|
+ $content = explode(';',$item->content);
|
|
|
+ $item->bid = isset($content[2]) ? $content[2] : '';
|
|
|
+ $item->cid = isset($content[3]) ? $content[3] : '';
|
|
|
+ }else{
|
|
|
+ $item->redirect_url = 'views/Detail';
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return response()->success($banner);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 默认获取banner
|
|
|
+ * @return mixed
|
|
|
+ */
|
|
|
+ protected function getDefaultBanner()
|
|
|
+ {
|
|
|
$reco_banner_type = ['FEMALE', 'PUBLIC'];
|
|
|
- $books = (new RecoBannerService)->getByType($reco_banner_type, 2);
|
|
|
- $books->transform(function ($item) {
|
|
|
+ $banner = (new RecoBannerService)->getByType($reco_banner_type, 2);
|
|
|
+ $banner->transform(function ($item) {
|
|
|
$result = $this->getBidCidFromUrl($item->redirect_url);
|
|
|
$item->bid = $result['bid'];
|
|
|
$item->cid = $result['cid'];
|
|
|
$item->id = Hashids::encode($item->id);
|
|
|
+ $item->type = 'default';
|
|
|
if ($result['cid']) {
|
|
|
$item->redirect_url = "views/Reader";
|
|
|
} else {
|
|
@@ -618,7 +699,7 @@ class BookController extends BaseController
|
|
|
}
|
|
|
return $item;
|
|
|
});
|
|
|
- return response()->success($books);
|
|
|
+ return $banner;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -767,8 +848,50 @@ class BookController extends BaseController
|
|
|
\Log::info($config);
|
|
|
\Log::info('$config->person:'.$config->person);
|
|
|
\Log::info($this->uid);
|
|
|
+
|
|
|
+ $res = $this->checkUsers($config->person);
|
|
|
+ if($res === false){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ //频率判断
|
|
|
+ if($config->frequency == 'back'){
|
|
|
+ //返回即推送
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ $day = strtotime(date('Y-m-d H:i:s'));
|
|
|
+ $nextDay = strtotime( date('Y-m-d'). ' +1 day');
|
|
|
+ $nextWeek = strtotime(date('Y-m-d',strtotime('+1 week last monday')));
|
|
|
+ if($config->frequency == 'day'){
|
|
|
+ //每日推送
|
|
|
+ if(!Redis::exists('recommend:'.$config->channel_id.':'.$this->uid)){
|
|
|
+ Redis::setex('recommend:'.$config->channel_id.':'.$this->uid,($nextDay-$day),1);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ \Log::info('当天已经推送过了');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if($config->frequency == 'week'){
|
|
|
+ //每周推送
|
|
|
+ if(!Redis::exists('recommend:'.$config->channel_id.':'.$this->uid)){
|
|
|
+ Redis::setex('recommend:'.$config->channel_id.':'.$this->uid,($nextWeek-$day),1);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ \Log::info('该周已经推送过了');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 判断用户是否有权限
|
|
|
+ * @param $type
|
|
|
+ * @return bool
|
|
|
+ */
|
|
|
+ protected function checkUsers($type)
|
|
|
+ {
|
|
|
$res = false;
|
|
|
- switch($config->person)
|
|
|
+ switch($type)
|
|
|
{
|
|
|
case 'pay':
|
|
|
//付费用户
|
|
@@ -795,44 +918,19 @@ class BookController extends BaseController
|
|
|
\Log::info('用户是否是付费派单用户:$this->send_order_id:'.$this->send_order_id);
|
|
|
\Log::info($orders);
|
|
|
break;
|
|
|
+ case 'unpaid':
|
|
|
+ $orders = OrderService::getUserLastestOrder($this->uid);
|
|
|
+ if(!$orders){
|
|
|
+ $res = true;
|
|
|
+ }
|
|
|
+ break;
|
|
|
case 'all':
|
|
|
$res = true;
|
|
|
\Log::info('所有用户返回');
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- if($res === false){
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- //频率判断
|
|
|
- if($config->frequency == 'back'){
|
|
|
- //返回即推送
|
|
|
- return true;
|
|
|
- }
|
|
|
-
|
|
|
- $day = strtotime(date('Y-m-d H:i:s'));
|
|
|
- $nextDay = strtotime( date('Y-m-d'). ' +1 day');
|
|
|
- $nextWeek = strtotime(date('Y-m-d',strtotime('+1 week last monday')));
|
|
|
- if($config->frequency == 'day'){
|
|
|
- //每日推送
|
|
|
- if(!Redis::exists('recommend:'.$config->channel_id.':'.$this->uid)){
|
|
|
- Redis::setex('recommend:'.$config->channel_id.':'.$this->uid,($nextDay-$day),1);
|
|
|
- return true;
|
|
|
- }
|
|
|
- \Log::info('当天已经推送过了');
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- if($config->frequency == 'week'){
|
|
|
- //每周推送
|
|
|
- if(!Redis::exists('recommend:'.$config->channel_id.':'.$this->uid)){
|
|
|
- Redis::setex('recommend:'.$config->channel_id.':'.$this->uid,($nextWeek-$day),1);
|
|
|
- return true;
|
|
|
- }
|
|
|
- \Log::info('该周已经推送过了');
|
|
|
- return false;
|
|
|
- }
|
|
|
+ return $res;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -869,6 +967,13 @@ class BookController extends BaseController
|
|
|
if($type == 'default'){
|
|
|
//默认原表reco_banners广告,区分跟新表channel_advert的id
|
|
|
$id = -$id;
|
|
|
+ }else{
|
|
|
+ $advert = ChannelAdvert::find($id);
|
|
|
+ if(!$advert){
|
|
|
+ \Log::info('getCheckAdvertisement:error:不存在该广告');
|
|
|
+ \Log::info(json_encode($request->all()));
|
|
|
+ return response()->success();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
$where = ['channel_ad_id' => $id, 'uid' => $this->uid, 'distribution_id' => $distribution_id];
|