浏览代码

Merge branch 'develop' of http://git.caihongxingqiu.net/rainbow/community-service into develop

zhangchangchun 5 年之前
父节点
当前提交
d403652e54

+ 3 - 4
app/Console/Commands/ContentFeedCreate.php

@@ -81,10 +81,9 @@ class ContentFeedCreate extends Command
 
         $callback = function ($msg) {
             $param = \GuzzleHttp\json_decode($msg->body,true);
-            $row = $this->feedRepositories->feedCreate($param);
-            if($row){
-                $msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);
-            }
+            $this->line('收到消息'.$msg->body);
+            $this->feedRepositories->contentCreate($param);
+            $msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);
         };
         $this->channel->basic_qos(null, 1, null);
         $this->channel->basic_consume($this->queue, '', false, false, false, false, $callback);

+ 0 - 103
app/Console/Commands/VirusRule.php

@@ -1,103 +0,0 @@
-<?php
-/**
- * Created by PhpStorm.
- * User: Administrator
- * Date: 2019-05-13
- * Time: 10:52
- */
-
-namespace App\Console\Commands;
-
-use Illuminate\Console\Command;
-use Illuminate\Support\Facades\Log;
-use PhpAmqpLib\Connection\AMQPStreamConnection;
-
-class VirusRule extends Command
-{
-    /**
-     * The name and signature of the console command.
-     *
-     * @var string
-     */
-    protected $signature = 'virus:rule';
-
-    /**
-     * The console command description.
-     *
-     * @var string
-     */
-    protected $description = '订阅VIRUS事件通知';
-
-    protected $connection;
-    protected $channel;
-
-    /**
-     * Create a new command instance.
-     *
-     * @return void
-     */
-    public function __construct()
-    {
-        parent::__construct();
-    }
-
-    public function getConnection()
-    {
-        $conn = false;
-        if ($this->connection) {
-            return $this->connection;
-        }
-        for ($i = 0; $i < 3; $i++) {
-            $connection = $this->createConn();
-            if ($connection) {
-                $conn = $connection;
-                break;
-            }
-            Log::info("create amqp conn retry=" . $i);
-        }
-        return $conn;
-    }
-
-    public function createConn()
-    {
-        try {
-            $connection = new AMQPStreamConnection(env('MQ_HOST'), env('MQ_PORT'), env('MQ_USERNAME'), env('MQ_PWD'), env('MQ_VHOST'));
-        } catch (\Exception $exception) {
-            Log::info("AMQP connection Error" . $exception->getMessage());
-            $connection = false;
-        }
-        return $connection;
-    }
-
-    /**
-     * Execute the console command.
-     *
-     * @return mixed
-     */
-    public function handle()
-    {
-        //监听virus队列
-        $this->queue = 'virus_';
-        $this->connection = $this->getConnection();
-        $this->channel = $this->connection->channel();
-        $this->channel->exchange_declare($this->queue, 'fanout', false, true, false);
-
-        $queue_name = $this->queue.'-community-service';
-        $this->channel->queue_declare($queue_name, false, true, false, false);
-        $this->channel->queue_bind($queue_name, $this->queue);
-        $callback = function ($msg) {
-            $data = \GuzzleHttp\json_decode($msg->body,true);
-            $this->line(date('Y-m-d H:i:s')."收到数据---------$msg->body-----------");
-            $result = $this->productCartRepository->deleteCarts($data);
-            $this->line(date('Y-m-d H:i:s')."返回---------$result-----------");
-            $msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);
-        };
-        $this->channel->basic_qos(null, 1, null);
-        $this->channel->basic_consume($queue_name, '', false, false, false, false, $callback);
-        while (count($this->channel->callbacks)) {
-            $this->channel->wait();
-        }
-        $this->channel->close();
-        $this->connection->close();
-    }
-}

+ 8 - 1
app/Console/Kernel.php

@@ -3,6 +3,9 @@
 namespace App\Console;
 
 use App\Console\Commands\Apollo;
+use App\Console\Commands\BehaviorRecord;
+use App\Console\Commands\CalcPostWeight;
+use App\Console\Commands\ContentFeedCreate;
 use Illuminate\Console\Scheduling\Schedule;
 use Laravel\Lumen\Console\Kernel as ConsoleKernel;
 
@@ -15,6 +18,9 @@ class Kernel extends ConsoleKernel
      */
     protected $commands = [
         Apollo::class,
+        BehaviorRecord::class,
+        CalcPostWeight::class,
+        ContentFeedCreate::class
     ];
 
     /**
@@ -26,6 +32,7 @@ class Kernel extends ConsoleKernel
     protected function schedule(Schedule $schedule)
     {
         $path = storage_path('logs/'.date('Y-m-d').'-schedule.log');
-
+        $schedule->command('post:calc_weight')
+            ->everyFifteenMinutes()->withoutOverlapping()->appendOutputTo($path);
     }
 }

+ 9 - 0
app/Helper/helper.php

@@ -120,3 +120,12 @@ function http($url, $param, $method = 'post')
     );
     return $response;
 }
+
+function subtext($text, $length)
+{
+    if(mb_strlen($text, 'utf8') > $length) {
+        return mb_substr($text, 0, $length, 'utf8').'...';
+    } else {
+        return $text;
+    }
+}

+ 2 - 2
app/Http/Controllers/V1/BehaviorController.php

@@ -11,7 +11,7 @@ namespace App\Http\Controllers\V1;
 use App\Http\Controllers\Controller;
 use App\Repositories\BehaviorRepositories;
 use Illuminate\Http\Request;
-use Illuminate\Validation\Validator;
+use Illuminate\Support\Facades\Validator;
 
 class BehaviorController extends Controller
 {
@@ -31,7 +31,7 @@ class BehaviorController extends Controller
             'identify' => 'required',
         ]);
         if ($validator->fails()) {
-            return $this->jsonError($validator->errors()->first());
+            return jsonError($validator->errors()->first());
         }
         $row = $this->behaviorRepositories->getBehavior($request['identify']);
         return jsonSuccess($row);

+ 0 - 44
app/Http/Controllers/V1/Controller.php

@@ -9,48 +9,4 @@ use App\Http\Controllers\Controller as BaseController;
 class Controller extends BaseController
 {
     use Helpers;
-
-    public function jsonSuccess($data = [], $msg = "成功")
-    {
-        $response = array(
-            'code' => 0,
-            'msg' => $msg,
-            'data' => []
-        );
-        if ($data) {
-            if (is_array($data)) {
-                //带有分页格式转换
-                if (isset($data['meta'])) {
-                    // 更改元数据格式,全部包含在data下
-                    $temp = array(
-                        'data' => array(
-                            'data' => $data['data'],
-                            'pagination' => $data['meta']['pagination']
-                        )
-                    );
-                    $response = array_merge($response, $temp);
-                } elseif(isset($data['data'])) {
-                    $response = array_merge($response, $data);
-                }else{
-                    $temp = array(
-                        'data' => $data
-                    );
-                    $response = array_merge($response, $temp);
-                }
-            } else {
-                $response['data'] = $data;
-            }
-        }
-        return $response;
-    }
-
-    public function jsonError($msg)
-    {
-        $response = array(
-            'code' => 1,
-            'msg' => $msg,
-            'data' => ""
-        );
-        return $response;
-    }
 }

+ 89 - 7
app/Http/Controllers/V1/PostController.php

@@ -9,8 +9,13 @@
 namespace App\Http\Controllers\V1;
 
 use App\Repositories\PostRepositories;
+use App\Traits\UserTrait;
+use App\Transformers\Post\CommentTransformer;
+use App\Transformers\Post\ListTransformer;
+use App\Transformers\Post\ReplyTransformer;
 use App\Transformers\Post\SuggestTransformer;
 use Illuminate\Http\Request;
+use Illuminate\Support\Carbon;
 use Illuminate\Support\Facades\Log;
 use Illuminate\Support\Facades\Validator;
 use Illuminate\Validation\Rule;
@@ -21,34 +26,111 @@ use League\Fractal\Resource\Item;
 
 class PostController extends Controller
 {
-
+    use UserTrait;
     public function __construct(PostRepositories $postRepositories)
     {
         $this->postRepositories = $postRepositories;
     }
 
+    /**
+     * 内容列表
+     */
+    public function index(Request $request)
+    {
+        $userInfo = $this->getUserInfo();
+        if(empty($userInfo)){
+            Log::info('获取用户信息失败');
+            return jsonError('获取用户信息失败');
+        }
+        $list = $this->postRepositories->lists($request->all());
+        $fractal = new Manager();
+        $resource = new Collection($list, new ListTransformer($userInfo['uid']));
+        $resource->setPaginator(new IlluminatePaginatorAdapter($list));
+        $data = $fractal->createData($resource)->toArray();
+
+        return jsonSuccess($data);
+    }
+
     /**
      * 推荐内容列表
      */
     public function suggestPost(Request $request)
     {
+        $userInfo = $this->getUserInfo();
+        if(empty($userInfo)){
+            Log::info('获取用户信息失败');
+            return jsonError('获取用户信息失败');
+        }
         $param = $request->all();
-        $purchaseList = $this->postRepositories->suggestPost($param);
+        $list = $this->postRepositories->suggestPost($param);
         $fractal = new Manager();
-        $resource = new Collection($purchaseList, new SuggestTransformer());
-        $resource->setPaginator(new IlluminatePaginatorAdapter($purchaseList));
+        $resource = new Collection($list, new SuggestTransformer($userInfo['uid']));
+        $resource->setPaginator(new IlluminatePaginatorAdapter($list));
         $data = $fractal->createData($resource)->toArray();
 
         if(!(isset($param['current_page']) && $param['current_page'] > 1)){
             $newData = [];
             foreach($data['data'] as $key => $val){
-                $newData[] = $val;
-                if($key == 3){
-                    $newData[] = ['type' => 1];
+                if($key == 1){
+                    $newData[] = ['show_type' => 1];
                 }
+                $newData[] = $val;
             }
             $data['data'] = $newData;
         }
         return jsonSuccess($data);
     }
+
+    /**
+     * 评论列表
+     */
+    public function commentList(Request $request)
+    {
+        $validator = Validator::make($request->all(), [
+            'post_id' => 'required|integer',
+        ]);
+        if ($validator->fails()) {
+            return jsonError($validator->errors()->first());
+        }
+        $list = $this->postRepositories->commentList($request->all());
+        $fractal = new Manager();
+        $resource = new Collection($list, new CommentTransformer());
+        $resource->setPaginator(new IlluminatePaginatorAdapter($list));
+        $data = $fractal->createData($resource)->toArray();
+
+        return jsonSuccess($data);
+    }
+
+    /**
+     * 回复列表
+     */
+    public function replyList(Request $request)
+    {
+        $validator = Validator::make($request->all(), [
+            'id' => 'required|integer',
+        ]);
+        if ($validator->fails()) {
+            return jsonError($validator->errors()->first());
+        }
+        $detail = $this->postRepositories->commentDetail($request->all());
+        if(!$detail){
+            return jsonError('获取评论信息失败');
+        }
+        $list = $this->postRepositories->replyList($request->all());
+        $fractal = new Manager();
+        $resource = new Collection($list, new ReplyTransformer());
+        $resource->setPaginator(new IlluminatePaginatorAdapter($list));
+        $data = $fractal->createData($resource)->toArray();
+
+        $data['data']['extra'] = [
+            'id' => $detail['id'],
+            'uid' => $detail['uid'],
+            'username' => $detail['username'],
+            'reply_count' => $detail->reply->count(),
+            'avatar' => $detail['avatar'],
+            'content' => $detail['is_delete']?'该评论已被删除':$detail['content'],
+            'created_at' => Carbon::parse($detail['created_at'])->diffForHumans(),
+        ];
+        return jsonSuccess($data);
+    }
 }

+ 0 - 2
app/Models/Behavior.php

@@ -9,12 +9,10 @@
 namespace App\Models;
 
 use Illuminate\Database\Eloquent\Model;
-use Illuminate\Database\Eloquent\SoftDeletes;
 
 class Behavior extends Model
 {
     //
-    use SoftDeletes;
     protected $table = 'behavior';
     protected $guarded = [];
 

+ 0 - 22
app/Models/BindPhoneRecord.php

@@ -1,22 +0,0 @@
-<?php
-/**
- * Created by PhpStorm.
- * User: wangzhiqiang
- * Date: 2019/4/24
- * Time: 15:21
- */
-
-namespace App\Models;
-
-use Illuminate\Database\Eloquent\Model;
-use Illuminate\Database\Eloquent\SoftDeletes;
-
-class BindPhoneRecord extends Model
-{
-    //
-    use SoftDeletes;
-    protected $table = 'bind_phone_record';
-    protected $guarded = [];
-
-
-}

+ 0 - 22
app/Models/BindWxRecord.php

@@ -1,22 +0,0 @@
-<?php
-/**
- * Created by PhpStorm.
- * User: wangzhiqiang
- * Date: 2019/4/24
- * Time: 15:21
- */
-
-namespace App\Models;
-
-use Illuminate\Database\Eloquent\Model;
-use Illuminate\Database\Eloquent\SoftDeletes;
-
-class BindWxRecord extends Model
-{
-    //
-    use SoftDeletes;
-    protected $table = 'bind_wx_record';
-    protected $guarded = [];
-
-
-}

+ 0 - 2
app/Models/CommentAccountRecord.php

@@ -9,12 +9,10 @@
 namespace App\Models;
 
 use Illuminate\Database\Eloquent\Model;
-use Illuminate\Database\Eloquent\SoftDeletes;
 
 class CommentAccountRecord extends Model
 {
     //
-    use SoftDeletes;
     protected $table = 'comment_account_record';
     protected $guarded = [];
 

+ 0 - 2
app/Models/GeneralLedgerRecord.php

@@ -9,12 +9,10 @@
 namespace App\Models;
 
 use Illuminate\Database\Eloquent\Model;
-use Illuminate\Database\Eloquent\SoftDeletes;
 
 class GeneralLedgerRecord extends Model
 {
     //
-    use SoftDeletes;
     protected $table = 'general_ledger_record';
     protected $guarded = [];
 

+ 5 - 0
app/Models/PostComment.php

@@ -14,4 +14,9 @@ class PostComment extends Model
 //
     protected $table = 'post_comment';
     protected $guarded = [];
+
+    public function reply()
+    {
+        return $this->hasMany('App\Models\PostComment', 'parent_id', 'id');
+    }
 }

+ 16 - 0
app/Models/PostDislike.php

@@ -0,0 +1,16 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019/6/15
+ * Time: 16:12
+ */
+namespace App\Models;
+use Illuminate\Database\Eloquent\Model;
+
+class PostDislike extends Model
+{
+//
+    protected $table = 'post_dislike';
+    protected $guarded = [];
+}

+ 0 - 2
app/Models/RegisteredAccountsRecord.php

@@ -9,12 +9,10 @@
 namespace App\Models;
 
 use Illuminate\Database\Eloquent\Model;
-use Illuminate\Database\Eloquent\SoftDeletes;
 
 class RegisteredAccountsRecord extends Model
 {
     //
-    use SoftDeletes;
     protected $table = 'registered_accounts_record';
     protected $guarded = [];
 

+ 1 - 0
app/Providers/AppServiceProvider.php

@@ -17,5 +17,6 @@ class AppServiceProvider extends ServiceProvider
         Validator::extend('mobile', function ($attribute, $value, $parameters) {
             return preg_match('/^1[3456789]{1}\d{9}$/', $value);
         });
+        \Carbon\Carbon::setLocale('zh');
     }
 }

+ 67 - 5
app/Repositories/BehaviorRecordRepositories.php

@@ -9,11 +9,13 @@
 namespace App\Repositories;
 
 
+use App\Models\Behavior;
 use App\Models\CommentAccountRecord;
 use App\Models\GeneralLedgerRecord;
 use App\Models\RegisteredAccountsRecord;
 use App\Models\ReleaseRecord;
 use Illuminate\Database\QueryException;
+use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Log;
 
 class BehaviorRecordRepositories
@@ -21,12 +23,14 @@ class BehaviorRecordRepositories
     public function __construct(RegisteredAccountsRecord $registeredAccountsRecord,
                                 GeneralLedgerRecord $generalLedgerRecord,
                                 ReleaseRecord $releaseRecord,
-                                CommentAccountRecord $commentAccountRecord)
+                                CommentAccountRecord $commentAccountRecord,
+                                Behavior $behavior)
     {
         $this->registeredAccountsRecord = $registeredAccountsRecord;
         $this->generalLedgerRecord = $generalLedgerRecord;
         $this->releaseRecord = $releaseRecord;
         $this->commentAccountRecord = $commentAccountRecord;
+        $this->behavior = $behavior;
     }
 
     /**
@@ -80,6 +84,7 @@ class BehaviorRecordRepositories
      */
     private function addRegisterRecord($register)
     {
+        DB::beginTransaction();
         try {
             $data['virus_behavior_id'] = $register['virus_behavior_id'];
             $data['uid'] = $register['uid'];
@@ -92,8 +97,22 @@ class BehaviorRecordRepositories
             $data['release_status'] = $register['release_status'];
             $data['generation_quantity'] = $register['generation_quantity'];
             $data['quantity_issued'] = $register['quantity_issued'];
-            return $this->registeredAccountsRecord->create($data);
+            $this->registeredAccountsRecord->create($data);
+            $behavior = Behavior::where('virus_behavior_id',$register['virus_behavior_id'])->first();
+            $behavior->physical_strength += $register['physical_exertion'];
+            $behavior->grant_rainbow_beans += $register['quantity_issued'];
+            $behavior->trigger_times += 1;
+            $behavior->absolute_progression += $register['absolute_progression'];
+            if($register['trigger_type']){
+                $behavior->effective_trigger += 1;
+            }
+            $behavior->effective_trigger += 1;
+            $behavior->save();
+            DB::commit();
+            return true;
         } catch (QueryException $exception) {
+            Log::debug('addRegisterRecord-exception:'.$exception->getMessage());
+            DB::rollBack();
             return false;
         }
     }
@@ -105,6 +124,7 @@ class BehaviorRecordRepositories
      */
     private function addReleaseRecord($release)
     {
+        DB::beginTransaction();
         try {
             $data['virus_behavior_id'] = $release['virus_behavior_id'];
             $data['uid'] = $release['uid'];
@@ -116,8 +136,21 @@ class BehaviorRecordRepositories
             $data['release_status'] = $release['release_status'];
             $data['generation_quantity'] = $release['generation_quantity'];
             $data['quantity_issued'] = $release['quantity_issued'];
-            return $this->releaseRecord->create($data);
+            $this->releaseRecord->create($data);
+            $behavior = Behavior::where('virus_behavior_id',$release['virus_behavior_id'])->first();
+            $behavior->physical_strength += $release['physical_exertion'];
+            $behavior->grant_rainbow_beans += $release['quantity_issued'];
+            $behavior->trigger_times += 1;
+            if($release['trigger_type']){
+                $behavior->effective_trigger += 1;
+            }
+            $behavior->effective_trigger += 1;
+            $behavior->save();
+            DB::commit();
+            return true;
         } catch (QueryException $exception) {
+            Log::debug('addReleaseRecord-exception:'.$exception->getMessage());
+            DB::rollBack();
             return false;
         }
     }
@@ -141,8 +174,22 @@ class BehaviorRecordRepositories
             $data['release_status'] = $general['release_status'];
             $data['generation_quantity'] = $general['generation_quantity'];
             $data['quantity_issued'] = $general['quantity_issued'];
-            return $this->generalLedgerRecord->create($data);
+            $data['behavior_value'] = $general['behavior_value'];
+            $this->generalLedgerRecord->create($data);
+            $behavior = Behavior::where('virus_behavior_id',$general['virus_behavior_id'])->first();
+            $behavior->physical_strength += $general['physical_exertion'];
+            $behavior->grant_rainbow_beans += $general['quantity_issued'];
+            $behavior->trigger_times += 1;
+            if($general['trigger_type']){
+                $behavior->effective_trigger += 1;
+            }
+            $behavior->effective_trigger += 1;
+            $behavior->save();
+            DB::commit();
+            return true;
         } catch (QueryException $exception) {
+            Log::debug('addGeneralRecord-exception:'.$exception->getMessage());
+            DB::rollBack();
             return false;
         }
     }
@@ -167,8 +214,23 @@ class BehaviorRecordRepositories
             $data['release_status'] = $comment['release_status'];
             $data['generation_quantity'] = $comment['generation_quantity'];
             $data['quantity_issued'] = $comment['quantity_issued'];
-            return $this->generalLedgerRecord->create($data);
+            $data['current_comment_id'] = $comment['comment_id'];
+            $data['superior_comment_id'] = $comment['parent_comment_id'];
+            $this->generalLedgerRecord->create($data);
+            $behavior = Behavior::where('virus_behavior_id',$comment['virus_behavior_id'])->first();
+            $behavior->physical_strength += $comment['physical_exertion'];
+            $behavior->grant_rainbow_beans += $comment['quantity_issued'];
+            $behavior->trigger_times += 1;
+            if($comment['trigger_type']){
+                $behavior->effective_trigger += 1;
+            }
+            $behavior->effective_trigger += 1;
+            $behavior->save();
+            DB::commit();
+            return true;
         } catch (QueryException $exception) {
+            Log::debug('addCommentRecord-exception:'.$exception->getMessage());
+            DB::rollBack();
             return false;
         }
     }

+ 28 - 8
app/Repositories/FeedRepositories.php

@@ -10,12 +10,15 @@ namespace App\Repositories;
 
 
 use App\Models\Behavior;
+use App\Models\Feed;
 use Illuminate\Support\Facades\Log;
 
 class FeedRepositories
 {
-    public function __construct()
+    public function __construct(Feed $feed,PostRepositories $postRepositories)
     {
+        $this->feed = $feed;
+        $this->postRepositories = $postRepositories;
     }
 
     public function getFeedType($action)
@@ -31,6 +34,15 @@ class FeedRepositories
         return isset($type[$action]) ? $type[$action] : 0;
     }
 
+    /**
+     *  创建feed流
+     *  更新帖子统计数
+     * @param $request
+     */
+    public function contentCreate($request){
+        $this->feedCreate($request);
+        $this->postRepositories->updatePostData($request);
+    }
 
 
     /**
@@ -39,33 +51,41 @@ class FeedRepositories
      */
     public function feedCreate($request)
     {
-        $fans = $request['fans'];
-        $behaviorFlag = $request['behavior_flag'];
-        $feedType = $this->feedCreate($behaviorFlag);
+        Log::debug('feedCreate-request:'.json_encode($request));
+        $fans = isset($request['fans'])?$request['fans']:[];
+        if(empty($fans)){//没有粉丝,不用插入
+            return true;
+        }
+        $behaviorFlag = isset($request['behavior_flag'])?$request['behavior_flag']:'';
+        $feedType = $this->getFeedType($behaviorFlag);
+        Log::debug('feed_type:'.$feedType);
         if($feedType){
             $data = [];
             foreach ($fans as $fan) {
                 $data['uid'] = $fan;
                 $data['follow_uid'] = $request['target_id'];
                 $data['follow_username'] = $request['target_username'];
-                $data['follow_avatar'] = $request['target_avatar'];
+                $data['follow_avatar'] = isset($request['target_avatar'])?$request['target_avatar']:'';
                 $data['type'] = $feedType;
 
                 if(in_array($feedType,[1,2,3])){
                     $data['relate_id'] = $request['post_id'];
                     $content['post_desc'] = $request['post_desc'];
-                }elseif ($feedType==4){
+                }elseif ($feedType==4){//评论
                     $data['relate_id'] = $request['post_id'];
                     $content['post_desc'] = $request['post_desc'];
                     $content['comment_desc'] = $request['comment_content'];
-                }elseif ($feedType==6){
+                }elseif ($feedType==6){//发布
                     $data['relate_id'] = $request['post_id'];
-                }elseif ($feedType==5){
+                }elseif ($feedType==5){//关注
                     $data['relate_id'] = $request['focus_uid'];
                 }
                 $data['content'] = json_encode($content);
+                Log::debug('feed-create:'.json_encode($data));
+                $this->feed->insert($data);
             }
         }
+        return true;
     }
 
 

+ 68 - 52
app/Repositories/PostRepositories.php

@@ -12,6 +12,7 @@ namespace App\Repositories;
 use App\Models\Behavior;
 use App\Models\Post;
 use App\Models\PostCollect;
+use App\Models\PostComment;
 use App\Models\PostData;
 use App\Models\PostLike;
 use Illuminate\Support\Facades\Log;
@@ -19,77 +20,84 @@ use Illuminate\Support\Facades\Redis;
 
 class PostRepositories
 {
-    public function __construct(Post $post)
+    public function __construct(Post $post,PostComment $postComment)
     {
         $this->post = $post;
+        $this->postComment = $postComment;
     }
 
     /**
-     * 推荐内容列表
+     * 内容列表
      */
-    public function suggestPost($request)
+    public function lists($request)
     {
         $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
-        $where = [];
-        if(isset($request['content'])){
-            $where[] = ['content', 'like', "%{$request['content']}%"];
-        }
-        if(isset($request['is_suggest'])){
-            $where[] = ['is_suggest', $request['is_suggest']];
-        }
-        if(isset($request['type'])){
-            $where[] = ['type', $request['type']];
-        }
-
-        if(isset($request['uid'])){
-            $where[] = ['uid', $request['uid']];
-        }
-
-        $sort = 'post.id';
-        if(isset($request['sort']) && in_array($request['sort'], ['praise_count', 'share_count', 'pv', 'comment_count', 'create_bean'])){
-            $sort = $request['sort'];
-        }
 
         return $this->post
             ->join('post_data', 'post_data.post_id', '=', 'post.id')
             ->select('post.*')
-            ->where($where)
             ->where(function($query) use ($request){
                 if(isset($request['keyword'])){
-                    $query->where('uid', '=', $request['keyword'])
-                        ->orWhere('username', 'like', "%{$request['keyword']}%")
-                        ->orWhere('mobile', 'like', "%{$request['keyword']}%");
-                }
-            })
-            ->where(function($query) use ($request){
-                if(isset($request['created_at'])){
-                    $time = explode('_', $request['created_at']);
-                    $query->whereBetween('post.created_at', $time);
+                    $query->where('title', 'like', "%{$request['keyword']}%")
+                        ->orWhere('content', 'like', "%{$request['keyword']}%");
                 }
             })
-            ->where(function ($query) use ($request){
-                if(isset($request['category_ids']) || isset($request['topic_ids'])){
-                    $ids = [];
-                    if (isset($request['category_ids'])) {
-                        $categoryIds = explode('_', $request['category_ids']);
-                        $ids = $this->categoryTopic->whereIn('category_id', $categoryIds)->pluck('topic_id')->toArray();
-                    }
-                    if (isset($request['topic_ids'])) {
-                        $ids = array_merge($ids, explode('_', $request['topic_ids']));
-                    }
-                    foreach ($ids as $key=>$id) {
-                        if ($key==0) {
-                            $query = $query->whereRaw('FIND_IN_SET('.$id.',topic_ids)');
-                        } else {
-                            $query = $query->orWhereRaw('FIND_IN_SET('.$id.',topic_ids)');
-                        }
-                    }
-                }
-            })
-            ->orderBy($sort,'desc')
+            ->orderBy('weight','desc')
             ->paginate($perPage);
     }
 
+    /**
+     * 推荐内容列表
+     */
+    public function suggestPost($request)
+    {
+        $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
+
+        return $this->post
+            ->join('post_data', 'post_data.post_id', '=', 'post.id')
+            ->select('post.*')
+            ->orderBy('weight','desc')
+            ->paginate($perPage);
+    }
+
+
+    /**
+     * 评论列表
+     */
+    public function commentList($request)
+    {
+        $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
+
+        return $this->postComment
+            ->where('post_id', $request['post_id'])
+            ->where('parent_id', 0)
+            ->orderBy('id','desc')
+            ->paginate($perPage);
+    }
+
+    /**
+     * 回复列表
+     */
+    public function replyList($request)
+    {
+        $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
+
+        return $this->postComment
+            ->where('parent_id', $request['id'])
+            ->orderBy('id','desc')
+            ->paginate($perPage);
+    }
+
+    /**
+     * 评论详情
+     */
+    public function commentDetail($request)
+    {
+        return $this->postComment
+            ->where('id', $request['id'])
+            ->first();
+    }
+
     /**
      * 更新帖子统计数量
      * @param $request
@@ -102,32 +110,40 @@ class PostRepositories
         if (isset($request['behavior_flag']) && $request['behavior_flag'] == 'read') {
             $post->pv += 1;
             $post->pv_real += 1;
+            Log::debug("帖子:".$postId."被阅读,pv +1");
         } elseif (isset($request['behavior_flag']) && $request['behavior_flag'] == 'unlike') {
             $post->dislike += 1;
+            Log::debug("帖子:".$postId."被不喜欢,unlike +1");
         } elseif (isset($request['behavior_flag']) && $request['behavior_flag'] == 'like') {
             if($request['behavior_value']){
                 $post->praise_count += 1;
                 $post->praise_real_count += 1;
                 PostLike::create(['uid'=>$request['target_id'],'post_id'=>$request['post_id']]);
+                Log::debug("帖子:".$postId."被点赞,praise_count +1");
             }else{
                 $post->praise_count -= 1;
                 $post->praise_real_count -= 1;
                 PostLike::where(['uid'=>$request['target_id'],'post_id'=>$request['post_id']])->delete();
+                Log::debug("帖子:".$postId."被取消点赞,praise_count -1");
             }
         } elseif (isset($request['behavior_flag']) && $request['behavior_flag'] == 'forward') {
             $post->share_count += 1;
             $post->share_real_count += 1;
+            Log::debug("帖子:".$postId."被分享,share_count +1");
         } elseif (isset($request['behavior_flag']) && $request['behavior_flag'] == 'comment') {
             $post->comment_count += 1;
+            Log::debug("帖子:".$postId."被评论,comment_count +1");
         } elseif (isset($request['behavior_flag']) && $request['behavior_flag'] == 'collect') {
             if($request['behavior_value']) {
                 $post->collect_count += 1;
                 $post->collect_real_count += 1;
                 PostCollect::create(['uid'=>$request['target_id'],'post_id'=>$request['post_id']]);
+                Log::debug("帖子:".$postId."被收藏,collect_count +1");
             }else{
                 $post->collect_count -= 1;
                 $post->collect_real_count -= 1;
                 PostCollect::where(['uid'=>$request['target_id'],'post_id'=>$request['post_id']])->delete();
+                Log::debug("帖子:".$postId."被取消收藏,collect_count -1");
             }
         }
         return $post->save();

+ 28 - 0
app/Traits/UserTrait.php

@@ -0,0 +1,28 @@
+<?php
+
+/**
+ * Created by PhpStorm.
+ * User: wangzhiqiang
+ * Date: 2019/5/5
+ * Time: 17:11
+ */
+namespace App\Traits;
+use Tymon\JWTAuth\Facades\JWTAuth;
+
+trait UserTrait
+{
+
+    public function getUserInfo() {
+        try {
+            $sign = generateSign([], config('customer.app_secret'));
+            $url = config("customer.app_service_url").'/user/userInfo';
+            $array = [
+                'json' => ['sign' => $sign], 'query' => [], 'http_errors' => false,'headers'=>['Authorization'=>"Bearer ".JWTAuth::getToken()]
+            ];
+            return http($url,$array);
+        } catch (\Exception $e) {
+            return [];
+        }
+
+    }
+}

+ 41 - 0
app/Transformers/Post/CommentTransformer.php

@@ -0,0 +1,41 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019/6/15
+ * Time: 16:40
+ */
+namespace  App\Transformers\Post;
+
+use App\Models\PostComment;
+use Carbon\Carbon;
+use League\Fractal\TransformerAbstract;
+
+class CommentTransformer extends TransformerAbstract
+{
+    
+    public function transform(PostComment $postComment)
+    {
+        $replies = PostComment::where('parent_id', $postComment['id'])->orderBy('id', 'desc')->limit(2)->get();
+        $reply = [];
+        foreach($replies as $val){
+            $reply[] = [
+                'uid' => $val->uid,
+                'nickname' => $val->nickname,
+                'avatar' => $val->avatar,
+                'reply_username' => $val->reply_username,
+                'content' => $val->content,
+            ];
+        }
+        return [
+            'id' => $postComment['id'],
+            'uid' => $postComment['uid'],
+            'username' => $postComment['username'],
+            'avatar' => $postComment['avatar'],
+            'content' => $postComment['is_delete']?'该评论已被删除':$postComment['content'],
+            'created_at' => Carbon::parse($postComment['created_at'])->diffForHumans(),
+            'reply_count' => $postComment->reply->count(),
+            'reply' => $reply,
+        ];
+    }
+}

+ 34 - 0
app/Transformers/Post/ListTransformer.php

@@ -0,0 +1,34 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019/6/15
+ * Time: 17:59
+ */
+namespace  App\Transformers\Post;
+
+use App\Models\Post;
+use App\Models\PostLike;
+use League\Fractal\TransformerAbstract;
+
+class ListTransformer extends TransformerAbstract
+{
+    public function __construct($uid)
+    {
+        $this->uid = $uid;
+    }
+    public function transform(Post $post)
+    {
+        return [
+            'id' => $post['id'],
+            'type' => $post['type'],
+            'uid' => $post['uid'],
+            'username' => $post['username'],
+            'avatar' => $post['avatar'],
+            'title' => $post['title'],
+            'img' => $post['img'],
+            'praise_count' => $post->data->praise_count,
+            'is_like' => PostLike::where('post_id', $post['id'])->where('uid', $this->uid)->exists()?1:0,
+        ];
+    }
+}

+ 29 - 0
app/Transformers/Post/ReplyTransformer.php

@@ -0,0 +1,29 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019/6/15
+ * Time: 17:08
+ */
+namespace  App\Transformers\Post;
+
+use App\Models\PostComment;
+use Carbon\Carbon;
+use League\Fractal\TransformerAbstract;
+
+class ReplyTransformer extends TransformerAbstract
+{
+
+    public function transform(PostComment $postComment)
+    {
+        return [
+            'id' => $postComment['id'],
+            'uid' => $postComment['uid'],
+            'username' => $postComment['username'],
+            'reply_username' => $postComment['reply_username'],
+            'avatar' => $postComment['avatar'],
+            'content' => $postComment['is_delete']?'该回复已被删除':$postComment['content'],
+            'created_at' => Carbon::parse($postComment['created_at'])->diffForHumans(),
+        ];
+    }
+}

+ 55 - 1
app/Transformers/Post/SuggestTransformer.php

@@ -9,16 +9,70 @@
 namespace  App\Transformers\Post;
 
 use App\Models\Post;
+use App\Models\PostCollect;
+use App\Models\PostComment;
+use App\Models\PostDislike;
+use App\Models\PostLike;
 use Carbon\Carbon;
 use League\Fractal\TransformerAbstract;
 
 class SuggestTransformer extends TransformerAbstract
 {
+    public function __construct($uid)
+    {
+        $this->uid = $uid;
+    }
     public function transform(Post $post)
     {
+        $imgs = [];
+        foreach($post->imgs as $img){
+            $imgs[] = $img['img'];
+        }
+        $comment = [];
+        $comments = PostComment::where('post_id', $post['id'])->where('parent_id', 0)->orderBy('id', 'desc')->limit(2)->get();
+        foreach($comments as $item){
+            $replyCount = $item->reply->count();
+            $replies = PostComment::where('parent_id', $item->id)->orderBy('id', 'desc')->limit(2)->get();
+            $reply = [];
+            foreach($replies as $val){
+                $reply[] = [
+                    'nickname' => $val->nickname,
+                    'reply_username' => $val->reply_username,
+                    'content' => $val->content,
+                ];
+            }
+            $comment[] = [
+                'id' => $item->id,
+                'nickname' => $item->nickname,
+                'content' => $item->content,
+                'reply_count' => $replyCount,
+                'reply' => $reply,
+            ];
+        }
         return [
-            'type' => 0,
+            'show_type' => 0,
             'id' => $post['id'],
+            'type' => $post['type'],
+            'created_at' => Carbon::parse($post['created_at'])->diffForHumans(),
+            'uid' => $post['uid'],
+            'username' => $post['username'],
+            'avatar' => $post['avatar'],
+            'topic' => $post->topic(),
+            'title' => $post['title'],
+            'content' => $post['content'],
+            'location' => $post['location'],
+            'img' => $post['img'],
+            'imgs' => $imgs,
+            'video' => $post['video'],
+            'pv' => $post->data->pv,
+            'praise_count' => $post->data->praise_count,
+            'comment_count' => $post->data->comment_count,
+            'will_collect_bean' => $post->data->will_collect_bean,
+            'is_like' => PostLike::where('post_id', $post['id'])->where('uid', $this->uid)->exists()?1:0,
+            'is_dislike' => PostDislike::where('post_id', $post['id'])->where('uid', $this->uid)->exists()?1:0,
+            'is_collect' => PostCollect::where('post_id', $post['id'])->where('uid', $this->uid)->exists()?1:0,
+            'comment' => $comment,
+            'is_follow' => 1,
         ];
     }
 }

+ 1 - 1
resources/lang/zh-CN/validation.php

@@ -100,7 +100,7 @@ return [
     */
 
     'attributes' => [
-        'id' => 'id',
+        'post_id' => '内容id',
     ],
     'mobile'    => '手机号码格式不正确。',
 ];

+ 3 - 1
routes/api.php

@@ -20,8 +20,10 @@ $api->version('v1', [
     $api->get('getBehaviorByIdentify', 'BehaviorController@getBehaviorByIdentify');
     //登录+验签
     $api->group(['middleware' => ['chxq_jwt_auth']], function ($api) {
-        //$api->get('test', 'TestController@index');
+        $api->get('post', 'PostController@index');
         $api->get('post/suggest', 'PostController@suggestPost');
+        $api->get('post/comment', 'PostController@commentList');
+        $api->get('post/reply', 'PostController@replyList');
         $api->get('topicCategory', 'CategoryController@index');
         $api->get('topicCategory/getTopics', 'CategoryController@getTopics');
         //关注推荐话题