Ver código fonte

'返回列表'

zhuchengjie 2 anos atrás
pai
commit
79b826f82d

+ 6 - 0
app/Console/Commands/Test.php

@@ -9,6 +9,7 @@ use App\Jobs\QappTikTok\QappTikTokUser;
 use App\Jobs\QappTikTok\QappTikTokUserRequest;
 use App\Libs\Push\OPPOPush\OPPOPushCommon;
 use App\Libs\Utils;
+use App\Modules\Channel\Models\ChannelAdvert;
 use App\Modules\User\Models\QappUser;
 use App\Modules\User\Models\User;
 use Hashids;
@@ -37,6 +38,11 @@ class Test extends Command
      */
     public function handle()
     {
+        $advert = ChannelAdvert::where('distribution_id',192)
+            ->where('release_type',5)
+            ->where('status',1)
+            ->first();
+        dd($advert);
         $user = User::find(278217244);
         $data = QappUser::find(11954352);
         if(is_object($data)){

+ 169 - 64
app/Http/Controllers/QuickApp/Book/BookController.php

@@ -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];

+ 1 - 0
app/Http/Routes/QuickApp/QuickAppRoutes.php

@@ -82,6 +82,7 @@ Route::group(['domain' => env('QUICKAPP_DOMAIN'), 'namespace' => 'App\Http\Contr
         Route::get('books/recommend_books', 'Book\BookController@recommendBooks');
         Route::get('books/clickRecommendBooks', 'Book\BookController@clickRecommendBooks');
         Route::get('books/checkAdvertisement', 'Book\BookController@getCheckAdvertisement');
+        Route::get('books/recommendBanners', 'Book\BookController@getRecommendBanners');
 
         //阅爱小说返回推荐书单
         Route::get('books/back_recom_yueai', 'Book\BookController@yueaiBackRecom');

+ 22 - 0
app/Modules/Channel/Models/ChannelAdvert.php

@@ -0,0 +1,22 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: tandunzhao
+ * Date: 2018/3/22
+ * Time: 下午5:58
+ */
+
+namespace App\Modules\Channel\Models;
+
+
+use Illuminate\Database\Eloquent\Model;
+
+class ChannelAdvert extends Model
+{
+
+    protected  $table = 'channel_advert';
+    protected  $fillable = ['id','distribution_id', 'advert_name', 'release_type','type','frequency','person',
+        'activity_id','position','photo','content','status','created_at','updated_at'];
+
+
+}

+ 23 - 0
app/Modules/Channel/Services/ChannelAdvertService.php

@@ -0,0 +1,23 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: tandunzhao
+ * Date: 2018/3/22
+ * Time: 下午6:00
+ */
+
+namespace App\Modules\Channel\Services;
+
+use App\Modules\Channel\Models\ChannelAdvert;
+use DB;
+
+class ChannelAdvertService
+{
+    static function getAdvertList($distribution_id,$release_type)
+    {
+        return ChannelAdvert::where('status',1)
+            ->where('distribution_id',$distribution_id)
+            ->where('release_type',$release_type)
+            ->get();
+    }
+}