Explorar el Código

wesmiler 报恩寺项目提交

wesmiler hace 4 años
padre
commit
b5efe72b0d

+ 42 - 0
app/Http/Controllers/Api/v1/CollectController.php

@@ -0,0 +1,42 @@
+<?php
+
+namespace App\Http\Controllers\Api\v1;
+
+use App\Http\Controllers\Api\BaseController;
+use App\Http\Validator\ArticleValidator;
+use App\Services\ArticleBooksService;
+use App\Services\ArticleService;
+use App\Services\ConfigService;
+use Illuminate\Http\Request;
+
+/**
+ * 收藏控制器类
+ * @author wesmiler
+ * @since 2020/11/10
+ * Class CollectController
+ * @package App\Http\Controllers
+ */
+class CollectController extends BaseController
+{
+    /**
+     * 构造函数
+     * @author wesmiler
+     * @since 2020/11/11
+     * CollectController constructor.
+     */
+    public function __construct()
+    {
+        parent::__construct();
+
+        $this->service = new ArticleService();
+    }
+
+    /**
+     * 列表
+     * @return array
+     */
+    public function index(){
+        $params = request()->all();
+        return $this->service->getDataList($params);
+    }
+}

+ 8 - 0
app/Http/Controllers/Api/v1/MemberController.php

@@ -76,6 +76,14 @@ class MemberController extends BaseController
     }
 
     /**
+     * 功德榜
+     * @return array
+     */
+    public function follow(){
+        return $this->service->follow($this->userId);
+    }
+
+    /**
      * 注销账号
      */
     public function logout(){

+ 40 - 0
app/Models/CollectModel.php

@@ -0,0 +1,40 @@
+<?php
+// +----------------------------------------------------------------------
+// | Laravel框架 [ Laravel ]
+// +----------------------------------------------------------------------
+// | 版权所有 2017~2021 Laravel研发中心
+// +----------------------------------------------------------------------
+// | 官方网站: http://www.laravel.cn
+// +----------------------------------------------------------------------
+// | Author: wesmiler <12345678@qq.com>
+// +----------------------------------------------------------------------
+
+namespace App\Models;
+
+/**
+ * 文章管理-模型
+ * @author wesmiler
+ * @since 2020/11/11
+ * Class ArticleModel
+ * @package App\Models
+ */
+class CollectModel extends BaseModel
+{
+    // 设置数据表
+    protected $table = 'collect';
+
+    /**
+     * 获取记录信息
+     * @param int $id 记录ID
+     * @return array|string
+     * @author wesmiler
+     * @since 2020/11/11
+     */
+    public function getInfo($id)
+    {
+        $info = parent::getInfo($id); // TODO: Change the autogenerated stub
+
+        return $info;
+    }
+
+}

+ 40 - 0
app/Models/FollowModel.php

@@ -0,0 +1,40 @@
+<?php
+// +----------------------------------------------------------------------
+// | Laravel框架 [ Laravel ]
+// +----------------------------------------------------------------------
+// | 版权所有 2017~2021 Laravel研发中心
+// +----------------------------------------------------------------------
+// | 官方网站: http://www.laravel.cn
+// +----------------------------------------------------------------------
+// | Author: wesmiler <12345678@qq.com>
+// +----------------------------------------------------------------------
+
+namespace App\Models;
+
+/**
+ * 用户关注管理-模型
+ * @author wesmiler
+ * @since 2020/11/11
+ * Class FollowModel
+ * @package App\Models
+ */
+class FollowModel extends BaseModel
+{
+    // 设置数据表
+    protected $table = 'member_follow';
+
+    /**
+     * 获取记录信息
+     * @param int $id 记录ID
+     * @return array|string
+     * @author wesmiler
+     * @since 2020/11/11
+     */
+    public function getInfo($id)
+    {
+        $info = parent::getInfo($id); // TODO: Change the autogenerated stub
+
+        return $info;
+    }
+
+}

+ 193 - 0
app/Services/CollectService.php

@@ -0,0 +1,193 @@
+<?php
+// +----------------------------------------------------------------------
+// | Laravel框架 [ Laravel ]
+// +----------------------------------------------------------------------
+// | 版权所有 2017~2021 Laravel研发中心
+// +----------------------------------------------------------------------
+// | 官方网站: http://www.laravel.cn
+// +----------------------------------------------------------------------
+// | Author: wesmiler <12345678@qq.com>
+// +----------------------------------------------------------------------
+
+namespace App\Services;
+
+use App\Models\CollectModel;
+
+/**
+ * 收藏管理-服务类
+ * @author wesmiler
+ * @since 2020/11/11
+ * Class CollectService
+ * @package App\Services
+ */
+class CollectService extends BaseService
+{
+    protected static $instance = null;
+    /**
+     * 构造函数
+     * @author wesmiler
+     * @since 2020/11/11
+     * CollectService constructor.
+     */
+    public function __construct()
+    {
+        $this->model = new CollectModel();
+    }
+
+    /**
+     * 静态入口
+     * @return ArticleService|null
+     */
+    public static function make(){
+        if(!self::$instance){
+            self::$instance = new ArticleService();
+        }
+
+        return self::$instance;
+    }
+
+    /**
+     * 获取列表
+     * @return array
+     * @since 2020/11/11
+     * @author wesmiler
+     */
+    public function getDataList($params)
+    {
+        $page = isset($params['pageSize']) ? intval($params['pageSize']) : PAGE;
+        $pageSize = isset($params['pageSize']) ? intval($params['pageSize']) : PERPAGE;
+
+        $dataList = $this->model::from('collect as a')
+            ->leftJoin('article as c', 'a.source_id', '=', 'c.id')
+            ->where(function ($query) use ($params) {
+                $query->where(['a.mark'=> 1,'a.status'=> 1,'c.mark','c.status']);
+
+                $type = isset($params['type']) ? intval($params['type']) : 0;
+                if ($type > 0) {
+                    $query->where('a.type', $type);
+                }
+
+            })
+            ->select(['a.id', 'a.user_id','a.source_id', 'c.title as title', 'c.thumb', 'c.description', 'c.view_num', 'a.view_num', 'a.status', 'a.create_time'])
+            ->orderBy('a.create_time', 'desc')
+            ->paginate($pageSize);
+
+        $dataList = $dataList ? $dataList->toArray() : [];
+        if ($dataList) {
+            foreach ($dataList['data'] as &$item) {
+                $item['thumb'] = $item['thumb'] ? get_image_url($item['thumb']) : '';
+                $item['create_time'] = $item['create_time'] ? datetime($item['create_time'],'Y-m-d H:i:s') : '';
+            }
+            unset($item);
+        }
+
+        return [
+            'code' => 0,
+            'success'=> true,
+            'msg' => '操作成功',
+            'count' => isset($dataList['total']) ? $dataList['total'] : 0,
+            'data' => isset($dataList['data']) ? $dataList['data'] : 0,
+        ];
+    }
+
+    /**
+     * 收藏
+     * @param $userId
+     * @return array
+     */
+    public function collect($userId){
+        $params = request()->all();
+        $id = isset($params['id'])? $params['id'] : 0;
+        $type = isset($params['type'])? $params['type'] : 1;
+        $status = isset($params['status'])? $params['status'] : 1;
+        $type = $type<=0? 1 : $type;
+
+        if($id<=0){
+            return message('参数错误', false);
+        }
+
+        if(!in_array($status, [1,2])){
+            return message('参数错误', false);
+        }
+
+        $info = $this->model::where(['user_id'=> $userId, 'source_id'=> $id,'type'=> $type])->select(['id','status'])->first();
+        if($info && $info->status == 1 && $status == 1){
+            return message('您已收藏过', false);
+        }else if($info && $info->status == 2 && $status == 2){
+            return message('您已取消收藏', false);
+        }else if(!$info && $status == 2){
+            return message('您未收藏过', false);
+        }
+
+        // 处理
+        if($info){
+            $info->status = $status;
+            $info->create_time = time();
+            if($info->save()){
+                return message($status == 1? '收藏成功':'取消收藏成功', true);
+            }
+        }else{
+            $data = [
+                'user_id'=> $userId,
+                'source_id'=> $id,
+                'type'=> $type,
+                'create_time'=> time(),
+                'status'=> 1,
+            ];
+            if($this->model::insertGetId($data)){
+                return message('收藏成功', true);
+            }
+        }
+
+        return message('操作失败', false);
+    }
+
+    /**
+     * 获取详情
+     * @param $id
+     */
+    public function getDetail($id){
+        $info = $this->model::from('article as a')
+            ->leftJoin('article_cates as c', 'a.cate_id', '=', 'c.id')
+            ->where(['a.mark'=> 1,'a.status'=> 1,'a.id'=> $id])
+            ->select(['a.id','a.title','a.thumb','a.cate_id','c.name as cate_name','a.view_num','a.description','a.content','a.publish_at','a.create_time'])
+            ->first();
+        $info = $info? $info->toArray() : [];
+        if($info){
+            $info['thumb'] = $info['thumb']? get_image_url($info['thumb']) : '';
+            $info['publish_at'] = $info['publish_at']? $info['publish_at'] : datetime( $info['create_time'],'Y-m-d H:i:s');
+
+        }
+        return $info;
+    }
+
+    /**
+     * 添加或编辑
+     * @return array
+     * @since 2020/11/11
+     * @author wesmiler
+     */
+    public function edit()
+    {
+        $data = request()->all();
+
+        // 图片处理
+        $type = isset($data['type'])? intval($data['type']) : 0;
+
+        $image = $data['thumb']? trim($data['thumb']) : '';
+        $id = isset($data['id']) ? $data['id'] : 0;
+        if (!$id && !$image && $type == 1) {
+            return message('请上传封面图片', false);
+        }
+        if (strpos($image, "temp")) {
+            $data['thumb'] = save_image($image, 'item');
+        } else {
+            $data['thumb'] = str_replace(IMG_URL, "", $data['thumb']);
+        }
+
+        $data['update_time'] = time();
+        $data['publish_at'] = isset($data['publish_at']) && $data['publish_at']? $data['publish_at'] : date('Y-m-d H:i:s');
+        return parent::edit($data); // TODO: Change the autogenerated stub
+    }
+
+}

+ 118 - 7
app/Services/MemberService.php

@@ -13,6 +13,7 @@ namespace App\Services;
 
 use App\Models\CityModel;
 use App\Models\FansModel;
+use App\Models\FollowModel;
 use App\Models\MemberModel;
 use App\Models\SiyuanModel;
 use App\Models\TradeModel;
@@ -576,7 +577,7 @@ class MemberService extends BaseService
             ->where('merits_num','>',0)
             ->select(['id', 'avatar', 'nickname','gender','merits_num','status','create_time'])
             ->orderBy('merits_num', 'desc')
-            ->orderBy('create_time', 'desc')
+            ->orderBy('create_time', 'asc')
             ->paginate($pageSize);
 
         $dataList = $dataList ? $dataList->toArray() : [];
@@ -593,15 +594,22 @@ class MemberService extends BaseService
         $ranks['rank'] = 0;
         $ranks['merits_num'] = $meritsNum>0? $meritsNum : 0;
         if($meritsNum>0){
-            $rankData = $this->model::from(\DB::raw(env('DB_PREFIX').'member as m,(select (@rank:=0)) as rank'))->where(['mark'=> 1,'status'=> 1])
+            $model = $this->model::from(\DB::raw(env('DB_PREFIX').'member as m,(select (@rank:=0)) as rank'))
+                ->where(['mark'=> 1,'status'=> 1])
                 ->where('merits_num','>',0)
                 ->orderBy('merits_num', 'desc')
                 ->orderBy('create_time', 'asc')
-                ->select(['merits_num','id',\DB::raw('(@rank:=@rank+1) as rank')])
-                ->get()
-                ->keyBy('id');
-            $rankData = $rankData? $rankData->toArray() : [];
-            $ranks = isset($rankData[$userId])? $rankData[$userId] : $ranks;
+                ->select(['merits_num','mark','id',\DB::raw('(@rank:=@rank+1) as rank')]);
+            $binds = $model->getBindings();
+            $sql = str_replace('?', '%s', $model->toSql());
+            $sql = sprintf($sql, ...$binds);
+
+            $ranks = $this->model::from(\DB::raw("({$sql}) as a"))
+
+                    ->where(['id'=> $userId])
+                ->select(['merits_num','id','rank'])
+                ->first();
+
         }
         return [
             'code' => 0,
@@ -612,4 +620,107 @@ class MemberService extends BaseService
             'data' => isset($dataList['data']) ? $dataList['data'] : 0,
         ];
     }
+
+    /**
+     * 关注
+     * @param $userId
+     * @return array
+     */
+    public function follow($userId){
+        $params = request()->all();
+        $followUid = isset($params['follow_uid'])? $params['follow_uid'] : 0;
+        $status = isset($params['status'])? $params['status'] : 1;
+        $status = $status<=0? 1 : $status;
+        if(empty($followUid)){
+            return message('参数错误', false);
+        }
+
+        if(!in_array($status, [1,2])){
+            return message('参数错误', false);
+        }
+
+        $memberInfo = $this->model::where(['id'=> $userId, 'maek'=> 1,'status'=> 1])
+            ->select(['id','openid','nickname','status'])
+            ->first();
+        if(!$memberInfo){
+            return message('账户不可操作已冻结或不存在,请联系客服',false);
+        }
+
+        $followInfo = FollowModel::where(['id'=> $followUid, 'maek'=> 1,'status'=> 1])
+            ->select(['id','openid','nickname','status'])
+            ->first();
+        if(!$followInfo){
+            return message('关注用户不可操作或不存在',false);
+        }
+
+        $info = FollowModel::where(['user_id'=> $userId, 'follow_uid'=> $followUid])->select(['id','status'])->first();
+        if($info && $info->status == 1 && $status == 1){
+            return message('您已关注过', false);
+        }else if($info && $info->status == 2 && $status == 2){
+            return message('您已取消关注', false);
+        }else if(!$info && $status == 2){
+            return message('您未关注过', false);
+        }
+
+        // 处理
+        if($info){
+            $info->status = $status;
+            $info->create_time = time();
+            if($info->save()){
+                return message($status == 1? '关注成功':'取消关注成功', true);
+            }
+        }else{
+            $data = [
+                'user_id'=> $userId,
+                'follow_uid'=> $followUid,
+                'create_time'=> time(),
+                'status'=> 1,
+            ];
+            if(FollowModel::insertGetId($data)){
+                return message('关注成功', true);
+            }
+        }
+
+        return message('操作失败', false);
+
+    }
+
+    /**
+     * 关注的人
+     * @return array
+     * @since 2020/11/11
+     * @author wesmiler
+     */
+    public function followList($userId)
+    {
+        $params = request()->all();
+        $page = isset($params['pageSize']) ? intval($params['pageSize']) : PAGE;
+        $pageSize = isset($params['pageSize']) ? intval($params['pageSize']) : PERPAGE;
+
+        $dataList = $this->model::from('member_follow as mf')
+            ->leftJoin('member as m','mf.follow_uid','=','m.id')
+            ->where(['m1.mark'=>1,'m1.status'=> 1,'mf.mark'=> 1,'mf.status'=> 1])
+            ->select(['mf.id', 'mf.user_id','mf.follow_uid','m.avatar','m.nickname', 'm.merits_num','m.gender','m.status','m.create_time'])
+            ->orderBy('m.merits_num', 'desc')
+            ->orderBy('mf.create_time', 'asc')
+            ->paginate($pageSize);
+
+        $dataList = $dataList ? $dataList->toArray() : [];
+        if ($dataList) {
+            foreach ($dataList['data'] as &$item) {
+                $item['avatar'] = $item['avatar']? get_image_url($item['avatar']) : '';
+                $item['create_time'] = $item['create_time'] ? datetime($item['create_time'],'Y-m-d H:i:s') : '';
+            }
+            unset($item);
+        }
+
+        return [
+            'code' => 0,
+            'success'=> true,
+            'msg' => '操作成功',
+            'count' => isset($dataList['total']) ? $dataList['total'] : 0,
+            'data' => isset($dataList['data']) ? $dataList['data'] : 0,
+        ];
+    }
+
 }

BIN
public/uploads/img/qrcode/U_11770EE25BB6370D6FB7581C7F683E33.png


BIN
public/uploads/img/qrcode/U_7631C1DAE7476C4DC65188B55DD0276D.png


+ 2 - 0
routes/api.php

@@ -49,6 +49,8 @@ Route::post('/member/info', [\App\Http\Controllers\Api\v1\MemberController::clas
 Route::post('/member/save', [\App\Http\Controllers\Api\v1\MemberController::class, 'saveInfo']);
 Route::post('/member/vip', [\App\Http\Controllers\Api\v1\MemberController::class, 'vip']);
 Route::post('/member/sign', [\App\Http\Controllers\Api\v1\MemberController::class, 'sign']);
+Route::post('/member/follow', [\App\Http\Controllers\Api\v1\MemberController::class, 'follow']);
+Route::post('/member/followList', [\App\Http\Controllers\Api\v1\MemberController::class, 'followList']);
 Route::post('/member/gdList', [\App\Http\Controllers\Api\v1\MemberController::class, 'gdList']);
 Route::post('/member/logout', [\App\Http\Controllers\Api\v1\MemberController::class, 'logout']);