zhuchengjie 3 năm trước cách đây
mục cha
commit
cff2911b83
34 tập tin đã thay đổi với 624 bổ sung95 xóa
  1. 9 7
      app/Console/Commands/Push/PushStats.php
  2. 27 1
      app/Console/Commands/Test.php
  3. 61 12
      app/Http/Controllers/QuickApp/Book/BookController.php
  4. 174 32
      app/Http/Controllers/QuickApp/Book/ChapterController.php
  5. 3 0
      app/Http/Controllers/QuickApp/Book/Transformers/ChapterListTransformer.php
  6. 4 1
      app/Http/Controllers/QuickApp/Book/Transformers/ChapterTransformer.php
  7. 5 2
      app/Http/Controllers/QuickApp/Order/OrdersController.php
  8. 8 0
      app/Http/Controllers/QuickApp/User/ReadRecordController.php
  9. 5 1
      app/Http/Controllers/QuickApp/User/Transformers/ReadRecordTransformer.php
  10. 25 0
      app/Http/Controllers/QuickApp/User/UserController.php
  11. 10 2
      app/Http/Controllers/QuickApp/User/UserShelfBooksController.php
  12. 2 0
      app/Http/Kernel.php
  13. 45 0
      app/Http/Middleware/QuickAppUserInfoRefresh.php
  14. 43 0
      app/Http/Middleware/QuickAppUserStatus.php
  15. 32 13
      app/Http/Routes/QuickApp/QuickAppRoutes.php
  16. 2 1
      app/Jobs/QappTikTok/NewQappTikTokUserCharge.php
  17. 1 1
      app/Jobs/QappTikTok/QappTikTokUser.php
  18. 2 1
      app/Jobs/QappTikTok/QappTikTokUserCharge.php
  19. 15 2
      app/Jobs/UserAddDeskJob.php
  20. 1 1
      app/Jobs/UserRententionJob.php
  21. 9 0
      app/Libs/Helpers.php
  22. 6 2
      app/Modules/Book/Models/BookConfig.php
  23. 2 1
      app/Modules/Book/Models/UserShelfBooks.php
  24. 6 1
      app/Modules/Book/Services/BookConfigService.php
  25. 2 2
      app/Modules/Book/Services/BookService.php
  26. 1 1
      app/Modules/Push/Models/QappPushTask.php
  27. 18 0
      app/Modules/RecommendBook/Models/QappRecommend.php
  28. 27 0
      app/Modules/RecommendBook/Services/QappRecommendService.php
  29. 1 0
      app/Modules/Trade/Pay/OrderPaySuccess.php
  30. 1 0
      app/Modules/User/Models/QappUser.php
  31. 21 0
      app/Modules/User/Services/QappUserService.php
  32. 23 2
      app/Modules/User/Services/ReadRecordService.php
  33. 1 1
      app/Modules/User/Services/SignService.php
  34. 32 8
      app/Modules/User/Services/UserService.php

+ 9 - 7
app/Console/Commands/Push/PushStats.php

@@ -43,13 +43,15 @@ class PushStats extends Command
             $cachePv = PushCache::getPushyPv($pushId, $date);
             $cacheUv = PushCache::getPushUv($pushId, $date);
 
-            myLog('pushStats')->info('', compact('date', 'pushId', 'pv', 'uv', 'cachePv', 'cacheUv'));
-
-            // 更新pv uv
-            QappPushTask::updatePushTask($pushId, [
-                'pv' => $pv + $cachePv,
-                'uv' => $uv + $cacheUv,
-            ]);
+            if(!empty($cachePv) || !empty($cacheUv)){
+                myLog('pushStats')->info('', compact('date', 'pushId', 'pv', 'uv', 'cachePv', 'cacheUv'));
+
+                // 更新pv uv
+                QappPushTask::updatePushTask($pushId, [
+                    'pv' => $pv + $cachePv,
+                    'uv' => $uv + $cacheUv,
+                ]);
+            }
         }
 
         return true;

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 27 - 1
app/Console/Commands/Test.php


+ 61 - 12
app/Http/Controllers/QuickApp/Book/BookController.php

@@ -4,8 +4,11 @@ namespace App\Http\Controllers\QuickApp\Book;
 
 use App\Libs\Utils;
 use App\Modules\Book\Services\BookAuditService;
+use App\Modules\RecommendBook\Services\QappRecommendService;
 use App\Modules\RecommendBook\Services\RecommendService;
 use App\Modules\Book\Services\RecoBannerService;
+use App\Modules\User\Models\QappPackage;
+use App\Modules\User\Services\QappUserService;
 use Illuminate\Http\Request;
 use App\Http\Controllers\QuickApp\BaseController;
 use App\Http\Controllers\QuickApp\Book\Transformers\BookTransformer;
@@ -31,13 +34,18 @@ class BookController extends BaseController
             return response()->error('QAPP_SYS_ERROR');
         }
         //yuyuedu、xinghe  快应用这两个cp的书屏蔽下
-        if(in_array($book_info->cp_source,['yuyuedu','xinghe','dingtian','dingtian3'])){
+        if(in_array($book_info->cp_source,getHiddenCp())){
             return response()->error('QAPP_SYS_ERROR');
         }
 
         if($this->distribution_channel_id == 7477 && $bid == 13765){
             $book_info->is_on_shelf = 2;
         }
+
+        if($bid == 58886){
+            $book_info->is_on_shelf = 0;
+        }
+
         if (!in_array($book_info->is_on_shelf, [2])) {
             return response()->error('QAPP_OFF_SHELF');
         }
@@ -188,19 +196,55 @@ class BookController extends BaseController
             return $item;
         });
 
-        $hotBids   = RecommendService::getRecommendIdsStatic($channel, 'hot');
-        $liveBids  = RecommendService::getRecommendIdsStatic($channel, 'live');
-        $recomBids = RecommendService::getRecommendIdsStatic($channel, 'recom');
-        $newBids   = RecommendService::getRecommendIdsStatic($channel, 'new_recom');
+        //新判断: 根据包名来获取对应所需的bid
+        $qapp_package = QappPackage::getPackageByPackage($package);
+        if($qapp_package){
+            $package_id = $qapp_package->id;
+        }else{
+            $package_id = 0;
+        }
+        \Log::info('un_send_order_book:package_id1:'.$package_id);
+        $user =  (new QappUserService)->getGolableUser();
+        if(isset($user->uid) && !empty($user->uid)){
+            if(!$this->send_order_id || $this->send_order_id == 0 ){
+                \Log::info('un_send_order_book:uid:'.$this->uid);
+                $result = $this->getCheckBids($channel,$books,$package_id);
+                return response()->success($result);
+            }else{
+                $package_id = 0;
+            }
+            \Log::info('un_send_order_book:package_id2:'.$package_id);
+        }else{
+            $package_id = 0;
+        }
+        \Log::info('un_send_order_book:package_id3:'.$package_id);
+        $result = $this->getCheckBids($channel,$books,$package_id);
+        return response()->success($result);
+
+    }
+
+    /**
+     * 根据包名
+     * @param $channel
+     * @param $books
+     * @param $package_id
+     * @return array
+     */
+    private function getCheckBids($channel,$books,$package_id)
+    {
+        $hotBids   = QappRecommendService::getRecommendByPacketId($channel, 'hot',$package_id);
+        $liveBids  = QappRecommendService::getRecommendByPacketId($channel, 'live',$package_id);
+        $recomBids = QappRecommendService::getRecommendByPacketId($channel, 'recom',$package_id);
+        $newBids   = QappRecommendService::getRecommendByPacketId($channel, 'new_recom',$package_id);
 
-        $result = [
+        return array_filter([
             ['type' => 'reco_banner', 'lable' => '首页banner', 'books' => $books],
             ['type' => 'hot', 'lable' => '热门推荐', 'books' => collectionTransform(new BookTransformer, BookConfigService::getBooksByIds($hotBids))],
             ['type' => 'zhibo', 'lable' => '神书直播', 'books' => collectionTransform(new BookTransformer, BookConfigService::getBooksByIds($liveBids))],
             ['type' => 'recom', 'lable' => '编辑推荐', 'books' => collectionTransform(new BookTransformer, BookConfigService::getBooksByIds($recomBids))],
-            ['type' => 'new_recom', 'lable' => '新书推荐', 'books' => collectionTransform(new BookTransformer, BookConfigService::getBooksByIds($newBids))],
-        ];
-        return response()->success($result);
+            ['type' => 'new_recom', 'lable' => '新书推荐', 'books' => collectionTransform(new BookTransformer, BookConfigService::getBooksByIds($newBids))]
+        ]);
+
     }
 
 
@@ -292,7 +336,7 @@ class BookController extends BaseController
     {
         $category_id = $request->input('category_id');
         $bid         = $request->input('bid');
-        if (empty($bid) || empty($category_id)) {
+        if (empty($bid) || (empty($category_id) && $category_id != 0)) {
             return response()->error('PARAM_ERROR');
         }
         $bid   = BookService::decodeBidStatic($bid);
@@ -341,7 +385,9 @@ class BookController extends BaseController
         }
 
         // 默认
-        $bids = [11529, 11941, 12720, 11990, 11988, 11976, 11977, 4183, 12717, 11833];
+        $bids = [11529, 11941, 12720, 11990, 11988, 11976, 11977, 4183, 12717, 11833,
+            7287,14297,12716,14312,14000,13577,16712,13002,12717,15103,13928,14793,
+            12708,13286];
         if ($sex === 2) {
             $bids = [8469, 11660, 9117, 7891, 12281, 12470, 8167, 11661, 11670, 8476, 8557, 11662,
                 11680, 11926, 12462, 7836, 11681, 11664, 11928, 8631];
@@ -366,7 +412,10 @@ class BookController extends BaseController
         $brand       = $request->header('x-nbrand', '');
         $codeVersion = $request->header('x-codeversion', '');
         if (Utils::checkIsAudit($package, $brand, $codeVersion)) {
-            $bids = [2266, 3838, 9700, 10175, 10301, 3422, 1166, 4546, 9163, 2509];
+            $bids = [2266, 3838, 9700, 10175, 10301, 3422, 1166, 4546, 9163, 2509,
+                7287,14297,12716,14312,14000,13577,16712,13002,12717,15103,13928,
+                14793,12708,13286,13336,13275,13073,15121,13929,12693,13254,3526,
+                10313,3483,13278,14004,4098,10378,14072,21376,21139,21757,19449];
             if ($sex === 2) {
                 $bids = [159, 2439, 6276, 10074, 5409, 9379, 10323, 9078, 3603, 487];
             }

+ 174 - 32
app/Http/Controllers/QuickApp/Book/ChapterController.php

@@ -38,6 +38,7 @@ class ChapterController extends BaseController
         if (!$book_info) {
             return response()->error('PARAM_ERROR');
         }
+        $this->book_info = $book_info;
         $lists = $this->getChapterCatalog($bid, $lists, $book_info);
         return response()->collection(new ChapterListTransformer, $lists);
     }
@@ -49,6 +50,7 @@ class ChapterController extends BaseController
         if (!$book_info) {
             return response()->error('PARAM_ERROR');
         }
+        $this->book_info = $book_info;
         $page_size = $request->input('page_size', 15);
         if ($page_size >= 100) $page_size = 100;
         $res   = ChapterService::getChapterListsPage($bid, $page_size);
@@ -74,6 +76,8 @@ class ChapterController extends BaseController
                 $price          = $this->getPrice($book_info);
                 $is_need_charge = $this->isBookNeedCharge($bid, $price);
                 foreach ($chapters as $v) {
+                    $v->next_chapter_status = 0;
+                    $v->next_price = 0;
                     $v->is_need_charge = $v->is_vip ? $is_need_charge : false;
                     $v->price          = $price;
 
@@ -97,6 +101,14 @@ class ChapterController extends BaseController
                 break;
             default:
                 foreach ($chapters as $v) {
+                    if($vip_sequence){
+                        if($v->sequence >= $vip_sequence){
+                            $v->is_vip = 1;
+                        }else{
+                            $v->is_vip = 0;
+                        }
+                    }
+
                     // 限免判断
                     if ($isFree) {
                         $v->is_need_charge = false;
@@ -105,13 +117,15 @@ class ChapterController extends BaseController
                         $v->price          = $v->is_vip ? $this->getPrice($book_info, $v->size) : 0;
                         $v->is_need_charge = $v->is_vip ? $this->isChapterNeedCharge($bid, $v->id, $v->price) : false;
                     }
-                    if($vip_sequence){
-                        if($v->sequence >= $vip_sequence){
-                            $v->is_vip = 1;
-                        }else{
-                            $v->is_vip = 0;
-                        }
+                    //下一章付费信息
+                    $v->next_chapter_status = 0;
+                    $v->next_price = 0;
+                    if($v->is_vip){
+                        $next_chapter_order_status = $this->nextChapterOrderStatus($bid,$v->next_cid);
+                        $v->next_chapter_status = $next_chapter_order_status['next_chapter_status'];
+                        $v->next_price = $next_chapter_order_status['next_price'];
                     }
+
                     //拆章
                     if($change_chapter_name){
                         $v->name = '第'.$v->sequence.'章';
@@ -124,6 +138,9 @@ class ChapterController extends BaseController
 
     public function index(Request $request, $bid, $cid)
     {
+        $send_order_id   = $request->header('send_order_id', '');
+        //每次绑定用户和派单的关系
+        $this->bindSendOrderId($this->uid,$send_order_id);
         $oldbid = $bid;
         $bid    = BookService::decodeBidStatic($bid);
         //获取图书信息
@@ -131,23 +148,29 @@ class ChapterController extends BaseController
         if (empty($book_info))
             return response()->error('QAPP_SYS_ERROR');
 
-        //yuyuedu、xinghe  快应用这两个cp的书屏蔽下
-        if(in_array($book_info->cp_source,['yuyuedu','xinghe','dingtian','dingtian3'])){
+        $this->book_info = $book_info;
+
+        //yuyuedu、xinghe  快应用这两个cp的书屏蔽下 wutong,wutong2,wutong3下所有内容都不放快应用
+        if(in_array($book_info->cp_source,getHiddenCp())){
             return response()->error('QAPP_SYS_ERROR');
         }
 
         if($this->distribution_channel_id == 7477 && $bid == 13765){
             $book_info->is_on_shelf = 2;
         }
+        if($bid == 58886){
+            $book_info->is_on_shelf = 0;
+        }
+
         if (!in_array($book_info->is_on_shelf, [1,2])) {
             return response()->error('QAPP_OFF_SHELF');
         }
 
         //wutong,wutong2,wutong3下所有内容都不放快应用
 
-        if(in_array($book_info->cp_source,['wutong','wutong2','wutong3','youyan2'])){
-            return response()->error('QAPP_OFF_SHELF');
-        }
+//        if(in_array($book_info->cp_source,['wutong','wutong2','wutong3','youyan2'])){
+//            return response()->error('QAPP_OFF_SHELF');
+//        }
 
         $this->book_info = $book_info;
         //获取章节信息
@@ -276,6 +299,14 @@ class ChapterController extends BaseController
                 return response()->error('QAPP_SYS_ERROR');
             }
         }
+        if(!$this->send_order_id){
+            if($book_info->charge_type == 'BOOK'){
+                return response()->error('QAPP_BOOK_BUY', $data);
+            }/*else{
+                return response()->error('QAPP_CHAPTER_BUY', $data);
+            }*/
+        }
+
         //付费 不提醒
         if ($this->balancePay($book_info, $cid, $chapter->size, $chapter->name, 0)) {
             UserTaskService::addUserTaskQueue($this->uid, BaseTask::read, UserTaskService::judge_trigger);
@@ -303,6 +334,10 @@ class ChapterController extends BaseController
                     }
                 }
             }
+            if($this->uid == 247081369){
+                $item = itemTransform(new ChapterTransformer, $this->getChapter($bid, $cid, $chapter));
+                myLog('xueqi')->info($item);
+            }
             return response()->item(new ChapterTransformer, $this->getChapter($bid, $cid, $chapter));
         } else {
             if ($book_info->charge_type == 'BOOK') {
@@ -323,7 +358,7 @@ class ChapterController extends BaseController
         $bid       = BookService::decodeBidStatic($bid);
         $book_info = BookConfigService::getBookById($bid);;
         if (empty($book_info)) response()->error('QAPP_SYS_ERROR');
-
+        $this->book_info = $book_info;
         if($this->distribution_channel_id == 7477 && $bid == 13765){
             $book_info->is_on_shelf = 2;
         }
@@ -348,11 +383,50 @@ class ChapterController extends BaseController
             }
         }
 
+        if ($this->getOrderRecord($bid, $cid)) {
+            ReadRecordService::addReadLog($this->uid, [
+                'distribution_channel_id' => $this->distribution_channel_id,
+                'bid' => $bid,
+                'cid' => $chapter->id,
+                'uid' => $this->uid,
+                'send_order_id' => $this->send_order_id,
+                'sequence' => $chapter->sequence,
+            ]);
+            ReadRecordService::addReadRecord([
+                'uid' => $this->uid, 'bid' => $bid, 'book_name' => $book_info->book_name,
+                'cid' => $cid, 'chapter_name' => $chapter->name, 'sequence' => $chapter->sequence
+            ]);
+
+
+            return response()->item(new ChapterTransformer, $this->getChapter($bid, $cid, $chapter));
+        }
+
         if ($this->balancePay($book_info, $cid, $chapter->size, $chapter->name, $remind)) {
+            UserTaskService::addUserTaskQueue($this->uid, BaseTask::read, UserTaskService::judge_trigger);
+            ReadRecordService::addReadLog($this->uid, [
+                'distribution_channel_id' => $this->distribution_channel_id,
+                'bid' => $bid,
+                'cid' => $chapter->id,
+                'uid' => $this->uid,
+                'send_order_id' => $this->send_order_id,
+                'sequence' => $chapter->sequence,
+            ]);
             ReadRecordService::addReadRecord([
                 'uid' => $this->uid, 'bid' => $bid, 'book_name' => $book_info->book_name,
                 'cid' => $cid, 'chapter_name' => $chapter->name, 'sequence' => $chapter->sequence
             ]);
+            $free_book = BookConfigService::getByBidNoFilter($bid);
+            if($free_book) {
+                if(strtotime($free_book->end_time)+7*86400 >= strtotime(date('Y-m-d')))   {
+                    if(Redis::Sismember('qapp:free:virtual:uids'.$free_book->id,$this->uid)){
+                        $now = date('Y-m-d');
+                        $fee  = $this->getPrice($book_info, $chapter->size);
+                        Redis::hincrby('qapp:book:free:actuality:' . $free_book->id, $now, $fee);
+                        Redis::sadd('qapp:free:actuality' . $now, $free_book->id);
+                        Redis::sadd('qapp:free:actuality:uids'.$now.$free_book->id,$this->uid);
+                    }
+                }
+            }
 
             return response()->item(new ChapterTransformer, $this->getChapter($bid, $cid, $chapter));
         } else {
@@ -416,6 +490,17 @@ class ChapterController extends BaseController
         $chapter_content = ChapterService::getChapter($bid, $cid);
         if (!$chapter_content) return false;
         $chapter->content = trim(str_replace($chapter_content->name, '', $chapter_content->content));
+        // 格式特殊处理
+        $qian=array(" "," ","\t");
+        $hou=array("","","");
+        // 去掉所有空格
+        $chapter->content = str_replace($qian,$hou,$chapter->content);
+        // 2换行变1换行
+        $chapter->content = str_replace("\n\n", "\n", $chapter->content);
+        $chapter->content = str_replace("\r\n\r\n", "\r\n", $chapter->content);
+        
+//         \Log::info('getChapter_chapter:'.$bid.' cid:'.$cid);
+//         \Log::info($chapter->content);
         //统计点击率
         $key   = 'book_click_num_bid_' . $bid;
         $field = date('Y-m-d');
@@ -426,9 +511,29 @@ class ChapterController extends BaseController
         $chapter->force_add_desk_type = $force_add_desk_type;
         //统计
         $this->stats();
+        $next_chapter_order_status = $this->nextChapterOrderStatus($bid,$chapter->next_cid);
+        $chapter->next_chapter_status = $next_chapter_order_status['next_chapter_status'];
+        $chapter->next_price = $next_chapter_order_status['next_price'];
+        $chapter->charge_type = $this->book_info->charge_type;
         $this->userBookCombination($chapter);
         return $chapter;
     }
+
+
+    private function nextChapterOrderStatus($bid,$cid){
+        $chapter = ChapterService::getChapterNameById($cid, $bid);
+        if(!$chapter || $chapter->is_vip == 0 || $this->book_info->charge_type == 'BOOK'){
+            return  ['next_chapter_status'=>0,'next_price'=>0];
+        }
+
+        $is_paid = $this->getOrderRecord($bid,$cid);
+        if($is_paid){
+            return  ['next_chapter_status'=>1,'next_price'=>0];
+        }
+        $fee  = $this->getPrice($this->book_info, $chapter->size);
+        return  ['next_chapter_status'=>2,'next_price'=>$fee];
+    }
+
     //短续长
     private function userBookCombination($chapter){
         if($chapter->prev_cid && $chapter->next_cid){
@@ -605,7 +710,7 @@ class ChapterController extends BaseController
                 $account_send_order = QappSendOrder::getSendOrderById($this->user_info->send_order_id);
                 $account = isset($account_send_order['account'])?$account_send_order['account']:'';
                 
-                \Log::info('getPrice:'.$this->uid.' account:'.$account.' send_order_id:'.$this->user_info->send_order_id);
+                //\Log::info('getPrice:'.$this->uid.' account:'.$account.' send_order_id:'.$this->user_info->send_order_id);
             }
             
             $fee = BookService::getPrice($book_info, $this->distribution_channel_id, $chapter_size,$account);
@@ -687,28 +792,65 @@ class ChapterController extends BaseController
     //加桌类型
     private function addDesktopType($bid, $sequence)
     {
-        $force_add_desk_type = 0;
-        \log::info('force_add_desk_log:uid:'.$this->uid);
-        $send_order_id       = ReadRecordService::getSendOrderId($this->uid);
-        if (!$send_order_id) return $force_add_desk_type;
-        \log::info('force_add_desk_log:send_order_id:'.$send_order_id);
-        $send_order_info = SendOrderService::getById($send_order_id);
-        if (!$send_order_info) return $force_add_desk_type;
-        \log::info('force_add_desk_log:book_id:'.$send_order_info->book_id.' bid:'.$bid.' sequence:'.$sequence);
-        if ($send_order_info->book_id == $bid) {
-            \log::info(' force_add_desk_type:'.$send_order_info->force_add_desk_type);
-            if ($send_order_info->force_add_desk_type == 1 && $send_order_info->force_add_desk_seq) {
-                \log::info('force_add_desk_seq:'.$send_order_info->force_add_desk_seq);
-                if ($sequence >= $send_order_info->force_add_desk_seq) {
-                    $force_add_desk_type = $send_order_info->force_add_desk_type;
+        $deault_force_add_desk_type = 0;
+        $send_order_id = $this->GetBindSendOrderId($this->uid);
+        if ($send_order_id) {
+            $send_order_info = SendOrderService::getById($send_order_id);
+            if (!$send_order_info) return $deault_force_add_desk_type;
+            if ($send_order_info->book_id == $bid) {
+                // 派单书籍和观看书籍一致,并设置了强加桌,判断当前章节和设置的强加桌章节
+                if ($send_order_info->force_add_desk_type == 1 && $send_order_info->force_add_desk_seq) {
+                    //在设置的强加桌章节前一章开始
+                    if ($sequence >= ($send_order_info->force_add_desk_seq - 1) ) {
+                        $force_add_desk_type = $send_order_info->force_add_desk_type;
+                        return $force_add_desk_type;
+                    }
+
                 }
-            }
-            if ($send_order_info->force_add_desk_type == 2) {
-                if ($sequence >= $this->book_info->force_subscribe_chapter_seq && $sequence <= $this->book_info->force_subscribe_chapter_seq + 3) {
-                    $force_add_desk_type = $send_order_info->force_add_desk_type;
+                if ($send_order_info->force_add_desk_type == 2) {
+                    if ($sequence >= $this->book_info->force_subscribe_chapter_seq && $sequence <= $this->book_info->force_subscribe_chapter_seq + 3) {
+                        $force_add_desk_type = $send_order_info->force_add_desk_type;
+                        return $force_add_desk_type;
+                    }
                 }
+                return $deault_force_add_desk_type;
+            }
+        }
+        //无派单,或者派单书籍与 此次书籍不一致,直接使用 原书籍的默认强关章节
+        $book_info = BookConfigService::getBookById($bid);
+        if ($book_info && $book_info->force_subscribe_chapter_seq) {
+            if ($sequence >= ($book_info->force_subscribe_chapter_seq - 1) ) {
+                return 1;
             }
         }
-        return $force_add_desk_type;
+        return $deault_force_add_desk_type;
+    }
+    /**
+     * [bindSendOrderId description]
+     * @param  [type] $uid           [description]
+     * @param  [type] $send_order_id [description]
+     * @return [type]                [description]
+     */
+    public function bindSendOrderId($uid, $send_order_id)
+    {
+        if ($send_order_id) {
+            $res = Redis::hset('book_read_chapter:' . $uid,'send_order_id', $send_order_id);
+        }
+    }
+
+    /**
+     * [bindSendOrderId description]
+     * @param  [type] $uid           [description]
+     * @param  [type] $send_order_id [description]
+     * @return [type]                [description]
+     */
+    public function GetBindSendOrderId($uid)
+    {
+        try {
+            $send_order_id = Redis::hget('book_read_chapter:' . $uid, 'send_order_id');
+            if ($send_order_id)
+                return (int)$send_order_id;
+        } catch (\Exception $e) {
+        }
     }
 }

+ 3 - 0
app/Http/Controllers/QuickApp/Book/Transformers/ChapterListTransformer.php

@@ -16,10 +16,13 @@ class ChapterListTransformer
             'chapter_sequence' => $chapter->sequence,
             'chapter_is_vip'   => $chapter->is_vip,
             'chapter_size'     => $chapter->size,
+            'need_coin'     => $chapter->is_need_charge ? 37:0,
             'prev_cid'         => $chapter->prev_cid,
             'next_cid'         => $chapter->next_cid,
             'recent_update_at' => $chapter->recent_update_at,
             'is_need_charge'   => $chapter->is_need_charge ? 1 : 0,
+            'next_chapter_status'   => $chapter->next_chapter_status,
+            'next_price'   => $chapter->next_price,
         ];
     }
 }

+ 4 - 1
app/Http/Controllers/QuickApp/Book/Transformers/ChapterTransformer.php

@@ -18,7 +18,10 @@ class ChapterTransformer
             'recent_update_at'   =>  $chapter->recent_update_at,
             'chapter_content'   =>  $chapter->content,
             'sign_status'   =>  $chapter->sign_status,
-            'force_add_desk_type'   =>  $chapter->force_add_desk_type
+            'force_add_desk_type'   =>  $chapter->force_add_desk_type,
+            'next_chapter_status'   =>  $chapter->next_chapter_status,
+            'next_price'   =>  $chapter->next_price,
+            'charge_type'   =>  $chapter->charge_type
         ];
     }
 }

+ 5 - 2
app/Http/Controllers/QuickApp/Order/OrdersController.php

@@ -126,6 +126,7 @@ class OrdersController extends BaseController
         $template_id = PayTemplateService::getPayTemplate($this->distribution_channel_id);
 
         // 获取派单id
+        $sendOrderId = 0;
         $sendOrderId = ReadRecordService::getSendOrderId($this->uid);
         if ($sendOrderId) {
             // 获取快应用账号
@@ -152,7 +153,7 @@ class OrdersController extends BaseController
             }
             // 杨子行
             // 32,52,66,100,200,499
-            if (in_array($account, ['yangzh'])) {
+            if (in_array($account, ['yangzh','yangzh2'])) {
                 $template_id = 9998;
             }
 
@@ -162,6 +163,7 @@ class OrdersController extends BaseController
             }
         }
 
+        myLog('charge')->info('chargeList_1', ['uid' => $this->uid, 'bid' => $bid, 'template_id' => $template_id, 'sendOrderId' => $sendOrderId]);
         $book_config = null;
         if ($bid) {
             $bid         = Hashids::decode($bid)[0];
@@ -185,7 +187,8 @@ class OrdersController extends BaseController
         //TODO 长篇小数才有模板2
         $uid               = $this->uid;
         $is_first_recharge = OrderService::judgeUserFirstRecharge($uid);
-        
+
+        myLog('charge')->info('chargeList_2', ['uid' => $this->uid, 'is_first_recharge' => $is_first_recharge, 'res' => $res]);
         \Log::info('qappchargeList:uid:'.$uid.' send_order_id:'.$sendOrderId.' template_id:'.$template_id.' is_first_recharge:'.$is_first_recharge);
 
         $data  = [];

+ 8 - 0
app/Http/Controllers/QuickApp/User/ReadRecordController.php

@@ -75,11 +75,19 @@ class ReadRecordController extends BaseController
             foreach ($res as $key => &$value) {
                 $value['cover']        = '';
                 $value['last_chapter'] = 0;
+                $value['intro'] = '';
+                $value['status'] = '';
+                $value['size'] = 0;
+                $value['author'] = '';
                 foreach ($book as $val) {
                     if ($value['bid'] == $val->bid) {
                         $value['book_name']    = $val->book_name;
                         $value['cover']        = $val->cover;
                         $value['last_chapter'] = $val->last_chapter;
+                        $value['intro'] = $val->intro;
+                        $value['status'] = $val->status;
+                        $value['size'] = $val->size;
+                        $value['author'] = $val->author;
                         break;
                     }
                 }

+ 5 - 1
app/Http/Controllers/QuickApp/User/Transformers/ReadRecordTransformer.php

@@ -16,7 +16,11 @@ class ReadRecordTransformer
             'time'         => $res->time,
             'cover_url'    => $res->cover,
             'cover'        => $res->cover,
-            'last_chapter' => $res->last_chapter
+            'last_chapter' => $res->last_chapter,
+            'intro' => $res->intro,
+            'author' => $res->author,
+            'size' => $res->size,
+            'status' => $res->status,
         ];
     }
 }

+ 25 - 0
app/Http/Controllers/QuickApp/User/UserController.php

@@ -92,7 +92,17 @@ class UserController extends BaseController
         }
         $data['pay_mode_default'] = 'weixin';
         $data['is_check'] = $data->distribution_channel_id == 9487 ? true : false;
+        $user = (new QappUserService())->getQAppUserByUid($data['id']);
+        if(!$user || $user->status == 0){
+            \Log::info('user_log_off_user_info:uid:'.$user->uid);
+            $data['balance'] = 0;
+            $data['charge_balance'] = 0;
+            $data['reward_balance'] = 0;
+            $data['is_vip'] = 0;
+            $data['vip_days'] = 0;
+        }
         // $data['is_check'] = !$this->phone;
+        \Log::info('user_info:'.$this->uid.' data:'.json_encode($data));
         return response()->success($data);
     }
 
@@ -359,6 +369,21 @@ class UserController extends BaseController
     }
 
     /**
+     * 注销用户
+     * @return mixed
+     */
+    public function logOff()
+    {
+        $service        = new QappUserService();
+        $res = $service->getLogOff($this->uid);
+        \Log::info('user_log_off:uid:'.$this->uid.' res:'.$res);
+        if($res){
+            return response()->success();
+        }
+        return response()->error('QAPP_SYS_ERROR');
+    }
+
+    /**
      * 新版签到信息
      */
     public function findSignInfo()

+ 10 - 2
app/Http/Controllers/QuickApp/User/UserShelfBooksController.php

@@ -63,9 +63,13 @@ class UserShelfBooksController extends BaseController
         foreach ($record as $item){
             $bids[] = $item['bid'];
         }
-        $book_infos = BookConfigService::getBookByField($bids,['bid','cover']);
+        $book_infos = BookConfigService::getBookByField($bids,
+            ['bid','book_configs.cover','books.author','books.status','books.size','books.intro']);
         $cover = [];
+        $book_base_info = [];
         foreach ($book_infos as $book){
+            $book_base_info[$book->bid] = ['cover'=>$book->cover,'author'=>$book->author,'status'=>$book->status,
+                'intro'=>$book->intro,'size'=>$book->size];
             $cover[$book->bid] = $book->cover;
         }
 
@@ -75,7 +79,11 @@ class UserShelfBooksController extends BaseController
                 'id'=>0,'uid'=>$this->uid,'bid'=>Hashids::encode($item['bid']),
                 'book_name'=>$item['book_name'],'cover'=>isset($cover[$item['bid']])?$cover[$item['bid']]:'',
                 'first_cid'=>$item['cid'],'last_cid'=>$item['cid'],'last_chapter'=>$item['chapter_name'],
-                'recent_reading_chapter'=>$item['chapter_name'],'recent_cid'=>$item['cid']
+                'recent_reading_chapter'=>$item['chapter_name'],'recent_cid'=>$item['cid'],
+                'intro' => isset($book_base_info[$item['bid']]) ? $book_base_info[$item['bid']]['intro']:'',
+                'author' => isset($book_base_info[$item['bid']]) ? $book_base_info[$item['bid']]['author']:'',
+                'size' => isset($book_base_info[$item['bid']]) ? $book_base_info[$item['bid']]['size']:0,
+                'status' =>isset($book_base_info[$item['bid']]) ? $book_base_info[$item['bid']]['status']:0
             ];
         }
         return response()->success($result);

+ 2 - 0
app/Http/Kernel.php

@@ -48,5 +48,7 @@ class Kernel extends HttpKernel
     protected $routeMiddleware = [
         'throttle'  => \Illuminate\Routing\Middleware\ThrottleRequests::class,
         'checkSign' => \App\Http\Middleware\CheckSign::class,
+        'userstatus'=> \App\Http\Middleware\QuickAppUserStatus::class,
+        'userrefresh'=> \App\Http\Middleware\QuickAppUserInfoRefresh::class
     ];
 }

+ 45 - 0
app/Http/Middleware/QuickAppUserInfoRefresh.php

@@ -0,0 +1,45 @@
+<?php
+
+namespace App\Http\Middleware;
+
+use App\Modules\SendOrder\Services\SendOrderService;
+use App\Modules\User\Services\QappUserService;
+use App\Modules\User\Services\UserService;
+use Closure;
+use Exception;
+use Tymon\JWTAuth\Middleware\BaseMiddleware;
+
+class QuickAppUserInfoRefresh extends BaseMiddleware
+{
+    /**
+     * Handle an incoming request.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \Closure  $next
+     * @return mixed
+     */
+    public function handle($request, Closure $next)
+    {
+        // 获取头部信息
+        $package     = $request->header('x-package', '');
+
+        // 判断是否登录
+        $token = $this->auth->setRequest($request)->getToken();
+        if ($token) {
+
+            try {
+                //获取用户信息
+                $user = $this->auth->authenticate($token);
+
+                // 设置全局信息
+                (new QappUserService)->setGolableUser($user->id, $package);
+            } catch (\Exception $e) {
+                \Log::info('book_list_user_info_error:');
+                \Log::info($e->getMessage());
+            }
+
+        }
+
+        return $next($request);
+    }
+}

+ 43 - 0
app/Http/Middleware/QuickAppUserStatus.php

@@ -0,0 +1,43 @@
+<?php
+
+namespace App\Http\Middleware;
+
+use App\Modules\User\Services\QappUserService;
+use Closure;
+use Exception;
+use Tymon\JWTAuth\Middleware\BaseMiddleware;
+
+class QuickAppUserStatus extends BaseMiddleware
+{
+    /**
+     * Handle an incoming request.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \Closure  $next
+     * @return mixed
+     */
+    public function handle($request, Closure $next)
+    {
+        // 判断是否登录
+        if (!$token = $this->auth->setRequest($request)->getToken()) {
+            return response()->error('QAPP_NOT_LOGIN');
+        }
+        try {
+            //获取用户信息
+            $user = $this->auth->authenticate($token);
+            //根据uid判断用户状态 0为已注销
+            $user_info = (new QappUserService)->getQAppUserByUid($user->id);
+            if(!$user_info || $user_info->status == 0){
+                \Log::info('user_log_off_middleware:uid:'.$user->uid);
+                return response()->success();
+            }else{
+                \Log::info('user_ok:'.$user->id);
+            }
+        } catch (Exception $e) {
+            myLog('QuickAppGetUserFromToken')->info($e->getMessage());
+            return response()->error('QAPP_NOT_LOGIN');
+        }
+
+        return $next($request);
+    }
+}

+ 32 - 13
app/Http/Routes/QuickApp/QuickAppRoutes.php

@@ -21,8 +21,10 @@ Route::group(['domain' => env('QUICKAPP_DOMAIN'), 'namespace' => 'App\Http\Contr
     // 无需登录的接口
     Route::group(['prefix' => 'api'], function () {
 
-        // 首页
-        Route::get('books/{sex}/index', 'Book\BookController@getBookLists');
+        Route::middleware(['userrefresh'])->group(function (){
+            // 首页
+            Route::get('books/{sex}/index', 'Book\BookController@getBookLists');
+        });
 
         // 书库
         Route::get('books/library', 'Book\BookController@library');
@@ -41,6 +43,26 @@ Route::group(['domain' => env('QUICKAPP_DOMAIN'), 'namespace' => 'App\Http\Contr
     });
 
     Route::group(['prefix' => 'api', 'middleware' => 'jwttoken'], function () {
+
+        Route::middleware(['userstatus'])->group(function (){
+            //章节订购列表
+            Route::get('order/chapterOrderList', 'Order\OrdersController@chapterOrderList');
+
+            //单本订购列表
+            Route::get('order/bookOrderList', 'Order\OrdersController@bookOrderList');
+
+            //充值记录
+            Route::get('order/chargeRecordLists', 'Order\OrdersController@chargeRecordLists');
+
+            Route::get('user/sign_record', 'User\UserController@signRecord');
+
+            //书架
+            Route::get('userShelfBooks', 'User\UserShelfBooksController@index');
+
+            //阅读记录
+            Route::get('readrecord', 'User\ReadRecordController@index');
+        });
+
         //限免
         Route::get('books/free/{sex}', 'Book\BookController@free')->where('sex', '\d+');
         // 全局配置
@@ -63,12 +85,6 @@ Route::group(['domain' => env('QUICKAPP_DOMAIN'), 'namespace' => 'App\Http\Contr
         Route::get('books/{bid}/balance/chapterOrders/{cid}', 'Book\ChapterController@pay');
         //充值列表
         Route::get('order/chargeList', 'Order\OrdersController@chargeList');
-        //章节订购列表
-        Route::get('order/chapterOrderList', 'Order\OrdersController@chapterOrderList');
-        //单本订购列表
-        Route::get('order/bookOrderList', 'Order\OrdersController@bookOrderList');
-        //充值记录
-        Route::get('order/chargeRecordLists', 'Order\OrdersController@chargeRecordLists');
 
         Route::get('order/issuccess', 'Order\OrdersController@isSuccess');
         //个人中心
@@ -77,6 +93,10 @@ Route::group(['domain' => env('QUICKAPP_DOMAIN'), 'namespace' => 'App\Http\Contr
         Route::post('user/bindPhone', 'User\UserController@bindPhone');
         Route::any('user/task/get/{id}', 'User\UserController@getUserTaskReward')->where('id', '\d+');
         Route::any('user/task', 'User\UserController@taskList');
+
+        //用户注销
+        Route::get('user/logOff', 'User\UserController@logOff');
+
         //催更
         Route::post('user/urgeUpdate', 'User\UserController@urgeUpdate');
         //设置派单ID
@@ -85,18 +105,16 @@ Route::group(['domain' => env('QUICKAPP_DOMAIN'), 'namespace' => 'App\Http\Contr
         Route::get('sign', 'User\UserController@sign');
         Route::get('sign/new', 'User\UserController@newSign');
         Route::get('sign/info', 'User\UserController@findSignInfo');
-        Route::get('user/sign_record', 'User\UserController@signRecord');
+
         Route::get('user/addDesktop', 'User\UserController@addDesktop');
-        //书架
-        Route::get('userShelfBooks', 'User\UserShelfBooksController@index');
+
         //添加书架
         Route::post('userShelfBooks', 'User\UserShelfBooksController@addShelf');
         //删除书架
         Route::get('userShelfBooks/delete', 'User\UserShelfBooksController@delShelf');
 
         Route::get('userShelfBooks/isonshelf', 'User\UserShelfBooksController@isOnshelf');
-        //阅读记录
-        Route::get('readrecord', 'User\ReadRecordController@index');
+
         //添加阅读记录
         Route::post('readrecord', 'User\ReadRecordController@addReadRecord');
         //删除阅读记录
@@ -116,6 +134,7 @@ Route::group(['domain' => env('QUICKAPP_DOMAIN'), 'namespace' => 'App\Http\Contr
         Route::get('activity/detail', 'Activity\ActivityController@channelCustomActivityV3');
     });
 
+
     // 推送
     Route::group(['prefix' => 'api/push'], function () {
         Route::post('pushToUser', 'Push\PushController@pushToUser');

+ 2 - 1
app/Jobs/QappTikTok/NewQappTikTokUserCharge.php

@@ -19,7 +19,7 @@ class NewQappTikTokUserCharge implements ShouldQueue
 
     private $reportParams;
 
-    protected $url = 'https://newtrackapi.zhuishuyun.com/api/qappuser/new_charge';
+    protected $url;
 
     /**
      * QappTikTokUserCharge constructor.
@@ -28,6 +28,7 @@ class NewQappTikTokUserCharge implements ShouldQueue
     public function __construct(QappTikTokUserChargeRequest $reportParams)
     {
         $this->reportParams = $reportParams;
+        $this->url = env('TIKTOK_API_URL'). 'api/qappuser/new_charge';
     }
 
     /**

+ 1 - 1
app/Jobs/QappTikTok/QappTikTokUser.php

@@ -47,7 +47,7 @@ class QappTikTokUser implements ShouldQueue
             'send_order_id' => $this->reportParams->send_order_id,
         ];
         $params['sign'] = _sign($params, SysConsts::TIKTOK_KEY);
-        $url            = 'https://newtrackapi.zhuishuyun.com/api/qappuser/register';
+        $url            = env('TIKTOK_API_URL').'api/qappuser/register';
         $response       = $client->request('post', $url, ['form_params' => $params])->getBody()->getContents();
         myLog('qapp_user_register')->info($response);
         $result = json_decode($response);

+ 2 - 1
app/Jobs/QappTikTok/QappTikTokUserCharge.php

@@ -19,7 +19,7 @@ class QappTikTokUserCharge implements ShouldQueue
 
     private $reportParams;
 
-    protected $url = 'https://newtrackapi.zhuishuyun.com/api/qappuser/charge';
+    protected $url;
 
     /**
      * 一般情况都上传
@@ -41,6 +41,7 @@ class QappTikTokUserCharge implements ShouldQueue
     public function __construct(QappTikTokUserChargeRequest $reportParams)
     {
         $this->reportParams = $reportParams;
+        $this->url = env('TIKTOK_API_URL'). 'api/qappuser/charge';
     }
 
     /**

+ 15 - 2
app/Jobs/UserAddDeskJob.php

@@ -4,6 +4,7 @@ namespace App\Jobs;
 
 use App\Consts\SysConsts;
 use App\Modules\User\Models\QappUserAddDestop;
+use App\Modules\User\Models\QappUserRententionLog;
 use GuzzleHttp\Client;
 use Illuminate\Bus\Queueable;
 use Illuminate\Queue\SerializesModels;
@@ -47,8 +48,20 @@ class UserAddDeskJob implements ShouldQueue
             'source' => 'zsy'
         ];
         $params['sign'] = _sign($params, SysConsts::TIKTOK_KEY);
-        $url = 'https://newtrackapi.zhuishuyun.com/api/qappuser/addDesk';
+        $url = env('TIKTOK_API_URL').'api/qappuser/addDesk';
+        myLog('user_add_desk')->info(compact('url'));
+        myLog('user_add_desk')->info($params);
         $response =  $client->post($url, ['form_params' => $params])->getBody()->getContents();
-        myLog('new_user_rentention')->info($response);
+        myLog('user_add_desk')->info($response);
+        $result =  json_decode($response);
+        if ($result) {
+            if ($result->code == 0) {
+                QappUserAddDestop::create([
+                    'uid' => $this->uid,
+                    'status' => 1,
+                ]);
+            }
+            myLog('user_add_desk')->info(json_encode(['code' => $result->code,'msg' => $result->msg,'uid' => $this->uid]));
+        }
     }
 }

+ 1 - 1
app/Jobs/UserRententionJob.php

@@ -52,7 +52,7 @@ class UserRententionJob implements ShouldQueue
             'source' => 'zsy'
         ];
         $params['sign'] = _sign($params, SysConsts::TIKTOK_KEY);
-        $url = 'https://newtrackapi.zhuishuyun.com/api/qappuser/rentention';
+        $url = env('TIKTOK_API_URL').'api/qappuser/rentention';
         $response =  $client->post($url, ['form_params' => $params])->getBody()->getContents();
         myLog('new_user_rentention')->info($response);
         $result =  json_decode($response);

+ 9 - 0
app/Libs/Helpers.php

@@ -783,4 +783,13 @@ function sendNotice($message)
     ];
 
     httpPostRequest($webHook, json_encode($data), true);
+}
+
+/**
+ * 获取隐藏cp
+ * @return false|string[]
+ */
+function getHiddenCp()
+{
+    return array_filter(explode(',',env('HIDDEN_CP_SOURCE')));
 }

+ 6 - 2
app/Modules/Book/Models/BookConfig.php

@@ -162,7 +162,7 @@ class BookConfig extends Model
                 }
             }
         }
-        $res->whereNotIn('book_configs.cp_source',['wutong','wutong2','wutong3','youyan2','yuyuedu','xinghe','dingtian','dingtian3']);
+        $res->whereNotIn('book_configs.cp_source',getHiddenCp());
         return $res->orderBy($order[0], $order[1])->orderBy('book_configs.updated_at', 'desc')->paginate($page_size);
     }
 
@@ -224,7 +224,7 @@ class BookConfig extends Model
             $field = 'bid,' . $str;
             $res->orderBy(DB::raw('field(' . $field . ')'));
         }
-        $res->whereNotIn('book_configs.cp_source',['wutong','wutong2','wutong3','youyan2','yuyuedu','xinghe','dingtian','dingtian3']);
+        $res->whereNotIn('book_configs.cp_source',getHiddenCp());
 
         return $res->limit(30)->get();
     }
@@ -398,6 +398,8 @@ class BookConfig extends Model
             ->where('book_categories.id', $categories_id)
             ->where('book_configs.bid', '!=', $bid)
             ->where('book_configs.is_high_quality', 1)
+            ->where('book_configs.is_on_shelf', 2)
+            ->whereNotIn('book_configs.cp_source',getHiddenCp())
             ->orderBy('recommend_index', 'desc')->get();
         $count = $res->count() >= $num ? $num : $res->count();
         return $res->random($count);
@@ -449,6 +451,8 @@ class BookConfig extends Model
             ->where('book_categories.channel_name', $channel_name)
             ->where('book_configs.bid', '!=', $bid)
             ->where('book_configs.is_high_quality', 1)
+            ->where('book_configs.is_on_shelf', 2)
+            ->whereNotIn('book_configs.cp_source',getHiddenCp())
             ->orderBy('recommend_index', 'desc')->get();
         $count = $res->count() >= $num ? $num : $res->count();
         return $res->random($count);

+ 2 - 1
app/Modules/Book/Models/UserShelfBooks.php

@@ -30,7 +30,8 @@ class UserShelfBooks extends Model
             ->join('books','user_shelf_books.bid','=','books.id')
             ->select('book_configs.cover','book_configs.book_name','user_shelf_books.bid',
                 'user_shelf_books.distribution_channel_id','user_shelf_books.bid','user_shelf_books.id',
-                'user_shelf_books.uid','user_shelf_books.updated_at','books.first_cid','books.last_cid as last_cid'
+                'user_shelf_books.uid','user_shelf_books.updated_at','books.first_cid','books.last_cid as last_cid',
+                'books.intro','books.author','books.size','books.status'
             )->orderBy('user_shelf_books.id','desc');
 
         if($is_all)

+ 6 - 1
app/Modules/Book/Services/BookConfigService.php

@@ -149,6 +149,8 @@ class BookConfigService
     public static function findFreeBooks(int $sex)
     {
         $config = self::findFreeBookConfig($sex);
+        \Log::info('return_empty_free_books:'.$sex);
+        \Log::info($config);
         if ($config) {
             $free_books =  FreeBook::where('config_id', $config->id)
                 ->where('is_enabled', 1)
@@ -159,6 +161,8 @@ class BookConfigService
                 ->select('bid', 'book_name', 'cover')
                 ->get();
             $books = Book::whereIn('id', $bids)->select('id', 'intro')->get();
+            \Log::info('return_empty_data:');
+            \Log::info($books);
             $book_list = $book_configs->transform(function ($item) use ($books) {
                 $book = $books->where('id', $item->bid)->first();
                 return [
@@ -219,6 +223,7 @@ class BookConfigService
 
     public static function getBookByField($bids,$field){
         if(!$bids || !$field) return null;
-        return BookConfig::whereIn('bid',$bids)->select($field)->get();
+        return BookConfig::join('books','books.id','=','book_configs.bid')->
+        whereIn('bid',$bids)->select($field)->get();
     }
 }

+ 2 - 2
app/Modules/Book/Services/BookService.php

@@ -198,7 +198,7 @@ class BookService
             
             $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);
+            //\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;
         }
@@ -226,7 +226,7 @@ class BookService
         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);
+        //\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;
     }

+ 1 - 1
app/Modules/Push/Models/QappPushTask.php

@@ -76,7 +76,7 @@ class QappPushTask extends Model
      */
     public static function getAllValidTasks()
     {
-        $result = self::where('status', PushConst::STATUS_SUCCESS)
+        $result = self::whereIn('status', [PushConst::STATUS_SUCCESS,PushConst::STATUS_FAIL])
             ->where('select_user_status', PushConst::SELECT_USER_OK)
             ->where('push_time', '<=', date('Y-m-d H:i:s'))
             ->orderBy('push_time', 'ASC')

+ 18 - 0
app/Modules/RecommendBook/Models/QappRecommend.php

@@ -0,0 +1,18 @@
+<?php
+
+/**
+ * Created by PhpStorm.
+ * User: admin
+ * Date: 2018/8/17
+ * Time: 11:02
+ */
+
+namespace App\Modules\RecommendBook\Models;
+
+use Illuminate\Database\Eloquent\Model;
+
+class QappRecommend extends Model
+{
+    protected $table = 'qapp_recommend_books';
+    protected $fillable = ['id', 'bid', 'channel', 'sequence', 'version_id', 'subject', 'is_show','qapp_packet_id'];
+}

+ 27 - 0
app/Modules/RecommendBook/Services/QappRecommendService.php

@@ -0,0 +1,27 @@
+<?php
+
+/**
+ * Created by PhpStorm.
+ * User: admin
+ * Date: 2018/8/20
+ * Time: 10:42
+ */
+
+namespace App\Modules\RecommendBook\Services;
+
+use App\Modules\RecommendBook\Models\QappRecommend;
+
+class QappRecommendService
+{
+    public static function getRecommendByPacketId(int $channel, string $type, int $packet_id)
+    {
+        return QappRecommend::where([
+            ['is_show', '=', 1],
+            ['channel', '=', $channel],
+            ['qapp_packet_id', '=', $packet_id],
+            ['subject', '=', $type]
+        ])->orderBy('sequence', 'asc')
+            ->pluck('bid')
+            ->all();
+    }
+}

+ 1 - 0
app/Modules/Trade/Pay/OrderPaySuccess.php

@@ -20,6 +20,7 @@ class OrderPaySuccess
     public static function handle(string $trade_no, string $transaction_id)
     {
         $order = Order::where('trade_no', $trade_no)->first();
+        \Log::info('OrderPaySuccess_handle:trade_no:'.$trade_no.' transaction_id:'.$transaction_id);
         //订单跨天
         $is_change = self::orderAcrossDay($order);
         $order->transaction_id = $transaction_id;

+ 1 - 0
app/Modules/User/Models/QappUser.php

@@ -17,6 +17,7 @@ class QappUser extends Model
         'device_info',
         'phone',
         'channel_id',
+        'status',
     ];
 
     /**

+ 21 - 0
app/Modules/User/Services/QappUserService.php

@@ -68,6 +68,7 @@ class QappUserService
                 // 注册统计
                 QappAddDeskTopService::incrAddDeskTop($uid, QuickConst::FIELD_REGISTER);
             }
+            myLog('login')->info('uid:'.$uid.'-token:'.$token);
             return compact('token', 'time', 'uid');
         } else {
             return [];
@@ -81,6 +82,23 @@ class QappUserService
     }
 
     /**
+     * 注销用户
+     * @param $uid
+     * @return bool
+     */
+    public function getLogOff($uid)
+    {
+        $user = QappUser::getUserByUid($uid);
+        if($user && $user->status == 1){
+            $res = QappUser::where('uid',$uid)->update(['status' => 0, 'updated_at' => date('Y-m-d H:i:s')]);
+            if(!$res){
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
      * 绑定手机号
      * 多个账号可以绑定一个手机号
      */
@@ -117,6 +135,7 @@ class QappUserService
 
     public function setGolableUser(int $uid, string $package)
     {
+        \Log::info('setGolableUser:'.$uid);
         $user_info                     = $this->getQAppUserByUid($uid, $package);
         $qapp_user                     = app()->make('qapp_user');
         $qapp_user->id                 = $user_info->id;
@@ -129,6 +148,8 @@ class QappUserService
         $qapp_user->app_pay_merchat_id = $user_info->app_pay_merchat_id;
         $qapp_user->h5_pay_merchat_id  = $user_info->h5_pay_merchat_id;
         $qapp_user->ali_pay_merchat_id = $user_info->ali_pay_merchat_id;
+        $qapp_user->status             = $user_info->status;
+//        \Log::info('setGolableUser_uid:'.$uid.' data:'.json_encode($this->getGolableUser()));
     }
 
     /**

+ 23 - 2
app/Modules/User/Services/ReadRecordService.php

@@ -489,7 +489,28 @@ class ReadRecordService
      */
     public static function addReadLog(int $uid, array $data)
     {
-        $log = ReadLog::model($uid);
-        $log->create($data);
+        //$log = ReadLog::model($uid);
+        //$log->create($data);
+        //启用redis 记录阅读记录,不直接插入数据库
+        self::addRecord($uid,$data['bid'],$data['cid'],$data['distribution_channel_id'],$data['send_order_id'],'',$data['sequence']);
+    }
+    /**
+     * 使用redis队列记录阅读记录
+     * @param  [type] $uid                     [用户id]
+     * @param  [type] $bid                     [书籍id]
+     * @param  [type] $cid                     [章节id]
+     * @param  [type] $distribution_channel_id [分销用户id]
+     * @param  [type] $send_order_id           [派单id]
+     * @param  [type] $from                    []
+     * @param  [type] $sequence                [当前章节]
+     * @return [type]                          [description]
+     */
+    public static function addRecord($uid,$bid,$cid,$distribution_channel_id,$send_order_id,$from,$sequence){
+        $data = compact('uid', 'bid','cid','distribution_channel_id','send_order_id','from','sequence');
+        $data['created_at'] = $data['updated_at'] = date('Y-m-d H:i:s');
+        $data['attach'] = '';
+        try{
+            Redis::lpush('QappReadRecordPersistence',json_encode($data));
+        }catch (\Exception $e){}
     }
 }

+ 1 - 1
app/Modules/User/Services/SignService.php

@@ -75,7 +75,7 @@ class SignService
         $sign_data = [
             'uid' => $this->uid,
             'price' => $reward,
-            'day' => $sign_day,
+            'day' => date('Y-m-d'),
             'sign_time' => time(),
             'created_at' => date('Y-m-d H:i:s'),
             'updated_at' => date('Y-m-d H:i:s')

+ 32 - 8
app/Modules/User/Services/UserService.php

@@ -56,19 +56,43 @@ class UserService
 
     public static function qappAddDesktop(int $uid, int $status)
     {
-        //myLog('incrAddDeskTop')->info('qappAddDesktop', compact('uid', 'status'));
+        myLog('incrAddDeskTop')->info('qappAddDesktop', compact('uid', 'status'));
         $log = QappUserAddDestop::where('uid', $uid)->orderBy('id', 'desc')->first();
-        if ((!$log && $status == 1) || ($log && $log->status != $status)) {
-            if ($status == 1) {
+
+        if (!$log) {
+            //第一次加桌 没有任何记录,加桌状态为1
+            if($status == 1){
                 $job = new UserAddDeskJob($uid);
                 dispatch($job)->onConnection('rabbitmq')->onQueue('qapp_user_add_desk')->delay(now()->addMinutes(3));
             }
-            QappUserAddDestop::create([
-                'uid'    => $uid,
-                'status' => $status
-            ]);
-        }
+            //第一次加桌 没有任何记录,加桌状态为0
+            if($status == 0){
+                QappUserAddDestop::create([
+                    'uid' => $uid,
+                    'status' => $status,
+                ]);
+            }
+        }else{
+            //如果有记录,但是都是0 没有1的记录
+            $oneexists = QappUserAddDestop::where('uid', $uid)->where('status', 1)->exists();
+            if(!$oneexists && $status == 1){
+                $job = new UserAddDeskJob($uid);
+                dispatch($job)->onConnection('rabbitmq')->onQueue('qapp_user_add_desk')->delay(now()->addMinutes(3));
+                return false;
+            }
 
+            //有加桌记录 最近一次加桌状态和和此次状态是否相等
+            if($log->status != $status){
+                //不相等 插入记录
+                QappUserAddDestop::create([
+                    'uid' => $uid,
+                    'status' => $status,
+                ]);
+            }
+            //相等 不做处理
+            return false;
+        }
+        
         // 加桌统计
         if (!$log && $status === 1) {
             QappAddDeskTopService::incrAddDeskTop($uid, QuickConst::FIELD_ADD_DESKTOP);