Browse Source

新增推荐用户

zhangchangchun 5 years ago
parent
commit
28fd7828c6

+ 137 - 0
app/Http/Controllers/V2/MemberGroupController.php

@@ -0,0 +1,137 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019-06-12
+ * Time: 17:34
+ */
+
+namespace App\Http\Controllers\V2;
+
+use App\Http\Controllers\Controller;
+use App\Repositories\V2\MemberGroupRepository;
+use App\Transformers\MemberGroupTansformer;
+use Illuminate\Validation\Rule;
+
+class MemberGroupController extends Controller {
+    public function __construct(MemberGroupRepository $memberGroupRepository) {
+        $this->memberGroupRepository = $memberGroupRepository;
+    }
+    //列表
+    public function index(Request $request){
+        $topicGroup = $this->memberGroupRepository->index($request->all());
+        $fractal = new Manager();
+        $resource = new Collection($topicGroup, new MemberGroupTansformer());
+        $resource->setPaginator(new IlluminatePaginatorAdapter($topicGroup));
+        $data = $fractal->createData($resource)->toArray();
+        $data['extra'] = [
+            'filters' => [
+                'name',
+            ],
+            'columns' => [
+                'id',
+                'name',
+                'member_list',
+                'video_count',
+                'created_at',
+                'is_suggest',
+            ]
+        ];
+        return $data;
+    }
+    //创建
+    public function create(Request $request){
+        $data = $request->only('name','is_suggest','member_list');
+        $validator = Validator::make($data, [
+            'name' => 'required|string|max:20',
+            'is_suggest' => ['required', Rule::in(0,1)],
+            'member_list' => 'string',
+        ]);
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+        return  $this->memberGroupRepository->create($data);
+    }
+    //详情
+    public function view(Request $request){
+        $data = $request->all();
+        $validator = Validator::make($data, [
+            'id' => 'required|integer|max:12',
+        ]);
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+        $info = $this->videoGroupRepository->view($data);
+        $videoInfo = $this->videoGroupRepository->VideoInfoIndex($data);
+        $fractal = new Manager();
+        $resource = new Collection($videoInfo, new VideoGroupInfoTransformer());
+        $resource->setPaginator(new IlluminatePaginatorAdapter($videoInfo));
+        $data = $fractal->createData($resource)->toArray();
+        $data['extra'] = [
+            'filters' => [
+                'name',
+            ],
+            'columns' => [
+                'post_id',
+                'username',
+                'topic',
+                'video',
+                'pv',
+                'praise_count',
+            ],
+            'name'=>$info['name'],
+            'id'=>$info['id'],
+        ];
+        return $data;
+    }
+    //设置排序
+    public function edit(Request $request){
+        $data = $request->only('id','name','is_suggest','member_list');
+        $validator = Validator::make($data, [
+            'id' => 'required|integer|max:12',
+            'name' => 'required|string|max:20',
+            'is_suggest' => ['required', Rule::in(0,1)],
+            'member_list' => 'string',
+        ]);
+
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+        return  $this->memberGroupRepository->edit($data);
+    }
+    //删除内容
+    public function delete(Request $request){
+        $data = $request->only('id');
+        $validator = Validator::make($data, [
+            'id' => 'required|integer|max:12',
+        ]);
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+        return  $this->memberGroupRepository->delete($data['id']);
+    }
+    //删除内容
+    public function deleteMemberInfo(Request $request){
+        $data = $request->only('id');
+        $validator = Validator::make($data, [
+            'id' => 'required|integer|max:12',
+        ]);
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+        return  $this->memberGroupRepository->deleteMemberInfo($data['id']);
+    }
+    //设置推荐
+    public function setIsSuggest(Request $request){
+        $data = $request->only('id','is_suggest');
+        $validator = Validator::make($data, [
+            'id' => 'required|string|max:20',
+            'is_suggest' => ['required', Rule::in(0,1)],
+        ]);
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+        return  $this->memberGroupRepository->setIsSuggest($data);
+    }
+
+}

+ 24 - 0
app/Models/MemberGroup.php

@@ -0,0 +1,24 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019-06-12
+ * Time: 17:29
+ */
+
+namespace App\Models;
+
+
+use Illuminate\Database\Eloquent\Model;
+
+class MemberGroup extends Model {
+    protected $table = 'member_group';
+
+    protected $guarded = ['id'];
+    protected $hidden = ['deleted_at'];
+
+    public function mgi()
+    {
+        return $this->hasMany('App\Models\MemberGroupInfo','member_group_id','id');
+    }
+}

+ 19 - 0
app/Models/MemberGroupInfo.php

@@ -0,0 +1,19 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019-06-12
+ * Time: 17:29
+ */
+
+namespace App\Models;
+
+
+use Illuminate\Database\Eloquent\Model;
+
+class MemberGroupInfo extends Model {
+    protected $table = 'member_group_info';
+
+    protected $guarded = ['id'];
+    protected $hidden = ['deleted_at'];
+}

+ 1 - 1
app/Models/VideoGroup.php

@@ -19,6 +19,6 @@ class VideoGroup extends Model {
 
     public function vgi()
     {
-        return $this->hasMany('App\Models\videoGroupInfo','video_group_id','id');
+        return $this->hasMany('App\Models\VideoGroupInfo','video_group_id','id');
     }
 }

+ 211 - 0
app/Repositories/V2/MemberGroupRepository.php

@@ -0,0 +1,211 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019-06-12
+ * Time: 17:35
+ */
+
+namespace App\Repositories\V2;
+
+use App\Models\MemberGroup;
+use App\Models\MemberGroupInfo;
+use Dingo\Api\Http\Response;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Database\QueryException;
+use Illuminate\Support\Facades\Log;
+
+class MemberGroupRepository {
+    public function __construct(MemberGroup $memberGroup,MemberGroupInfo $memberGroupInfo) {
+        $this->memberGroup = $memberGroup;
+        $this->memberGroupInfo = $memberGroupInfo;
+    }
+    //列表
+    public function index($request){
+        $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
+        $where = [];
+        if(isset($request['name'])){
+            $where[] = ['name', 'like', "%{$request['name']}%"];
+        }
+        return $this->memberGroup->where($where)->paginate($perPage);
+    }
+    //详情
+    public function view($request){
+        return $this->memberGroup->where(['id'=>$request['id']])->first();
+    }
+    //创建
+    public function create($request){
+        $memberGroup = $this->memberGroup->where(['name'=>$request['name']])->first();
+        if($memberGroup){
+            return Response::create([
+                'message'  => '该分组已存在',
+                'status_code'   => 500
+            ]);
+        }
+        $data = [
+            'name' => $request['name'],
+            'is_suggest' =>$request['is_suggest'],
+        ];
+        if(!empty($request['member_list'])){
+            $member_ids = explode(',', $request['member_list']);
+        }
+        $count =$member_ids;
+        DB::beginTransaction();
+        try{
+            if($request['is_suggest'] == 1){
+                $_memberGroup = $this->memberGroup->where(['is_suggest'=>1])->first();
+                if($_memberGroup){
+                    $this->memberGroup->where(['id'=>$_memberGroup->id])->update(['is_suggest'=>0]);
+                }
+            }
+            $res  = $this->memberGroup->create($data);
+            if($res){
+                if($member_ids){
+                    $member_data = [];
+                    foreach($member_ids as $value){
+                        $member_data[] = [
+                            'member_group_id' => $res->id,
+                            'uid' => $value,
+                        ];
+                    }
+                    $this->memberGroupInfo->insert($member_data);
+                }
+            }
+            DB::commit();
+            return Response::create();
+        }catch (QueryException $exception){
+            DB::rollBack();
+            Log::debug('新增推荐用户:'.$exception->getMessage());
+            return Response::create([
+                'message'  => '新增推荐用户失败,请重试',
+                'error' => $exception->getMessage(),
+                'status_code'   => 500
+            ]);
+        }
+    }
+    //编辑
+    public function edit($request){
+        $memberGroup = $this->memberGroup->where(['id'=>$request['id']])->first();
+        if(!$memberGroup){
+            return Response::create([
+                'message'  => '该分组不存在',
+                'status_code'   => 500
+            ]);
+        }
+        $memberGroup->name = $request['name'];
+        $memberGroup->name = $request['name'];
+
+        if(!empty($request['member_list'])){
+            $member_ids = explode(',', $request['member_list']);
+        }
+        DB::beginTransaction();
+        try{
+            if($request['is_suggest'] == 1){
+                $_memberGroup = $this->memberGroup->where(['is_suggest'=>1])->where('id','<>',$memberGroup->id)->first();
+                if($_memberGroup){
+                    $this->memberGroup->where(['id'=>$_memberGroup->id])->update(['is_suggest'=>0]);
+                }
+            }
+            $group = $memberGroup->save();
+            if($group){
+                //删除
+                $this->memberGroupInfo->where(['member_group_id'=>$memberGroup->id])->delete();
+
+                $member_data = [];
+                foreach($member_ids as $value){
+                    $member_data[] = [
+                        'member_group_id' => $memberGroup->id,
+                        'uid' => $value,
+                    ];
+                }
+                $this->memberGroupInfo->insert($member_data);
+            }
+            DB::commit();
+            return Response::create();
+        }catch (QueryException $exception){
+            DB::rollBack();
+            Log::debug('编辑推荐用户分组:'.$exception->getMessage());
+            return Response::create([
+                'message'  => '编辑推荐用户分组失败,请重试',
+                'error' => $exception->getMessage(),
+                'status_code'   => 500
+            ]);
+        }
+    }
+    //删除内容
+    public function delete($id){
+        $memberGroup = $this->memberGroup->where(['id'=>$id])->first();
+        if($memberGroup->is_suggest == 1){
+            return Response::create([
+                'message'  => '该用户组推荐中无法删除,请关闭推荐后删除',
+                'status_code'   => 500
+            ]);
+        }
+        DB::beginTransaction();
+        try{
+            $res = $this->memberGroup->where('id',$id)->delete();
+            if($res){
+                $this->memberGroupInfo->where('member_group_id',$id)->delete();
+            }
+            if(!$res){
+                return Response::create([
+                    'message'  => '删除失败',
+                    'status_code'   => 500
+                ]);
+            }
+            DB::commit();
+            return Response::create();
+        }catch (QueryException $exception){
+            DB::rollBack();
+            Log::debug('删除推荐用户分组:'.$exception->getMessage());
+            return Response::create([
+                'message'  => '删除推荐用户分组,请重试',
+                'error' => $exception->getMessage(),
+                'status_code'   => 500
+            ]);
+        }
+
+    }
+    //删除内容
+    public function deleteMemberInfo($id){
+        $res = $this->memberGroupInfo->where('id',$id)->delete();
+        if(!$res){
+            return Response::create([
+                'message'  => '删除失败',
+                'status_code'   => 500
+            ]);
+        }
+        return Response::create();
+    }
+    public function setIsSuggest($request){
+        $memberGroup = $this->memberGroup->where('id',$request['id'])->first();
+        if(!$memberGroup){
+            return Response::create([
+                'message'  => '该分组不存在',
+                'status_code'   => 500
+            ]);
+        }
+        DB::beginTransaction();
+        try{
+            if($request['is_suggest'] == 1){
+                $_memberGroup = $this->memberGroup->where(['is_suggest'=>1])->first();
+                if($_memberGroup){
+                    $this->memberGroup->where(['id'=>$_memberGroup->id])->update(['is_suggest'=>0]);
+                }
+            }
+            $memberGroup->is_suggest = $request['is_suggest'];
+            $memberGroup->save();
+            DB::commit();
+            return Response::create();
+        }catch (QueryException $exception){
+            DB::rollBack();
+            Log::debug('设置推荐用户分组:'.$exception->getMessage());
+            return Response::create([
+                'message'  => '设置推荐用户分组,请重试',
+                'error' => $exception->getMessage(),
+                'status_code'   => 500
+            ]);
+        }
+
+    }
+}

+ 30 - 0
app/Transformers/MemberGroupTansformer.php

@@ -0,0 +1,30 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019-06-12
+ * Time: 17:39
+ */
+
+namespace App\Transformers;
+use App\Models\MemberGroup;
+use League\Fractal\TransformerAbstract;
+use Illuminate\Support\Carbon;
+
+class MemberGroupTansformer {
+    public function transform(MemberGroup $memberGroup)
+    {
+        $memberList = [];
+        foreach ($memberGroup->mgi as $key=>$value){
+            $memberList[] = $value;
+        }
+        return [
+            'id' => $memberGroup['id'],
+            'name' => $memberGroup['name'],
+            'is_suggest' => $memberGroup['is_suggest'],
+            'created_at' => Carbon::parse($memberGroup['created_at'])->toDateTimeString(),
+            'member_list'=>$memberList,
+            'member_list'=>count($memberList)
+        ];
+    }
+}

+ 1 - 0
app/Transformers/VideoGroupInfoTransformer.php

@@ -18,6 +18,7 @@ class VideoGroupInfoTransformer extends  TransformerAbstract{
     public function transform(VideoGroupInfo $videoGroupInfo)
     {
         $videoInfo = $this->getVideo($videoGroupInfo['post_id']);
+        dd($videoInfo);
         return [
             'id' => $videoGroupInfo['id'],
             'video_group_id' => $videoGroupInfo['name'],

+ 12 - 0
routes/api.php

@@ -138,6 +138,18 @@ $api->version('v1', [
             $api->delete('VideoGroupDeleteVideoInfo', 'VideoGroupController@deleteVideoInfo');
             //删除分组
             $api->delete('VideoGroupDelete', 'VideoGroupController@delete');
+            //推荐用户列表
+            $api->get('MemberGroupIndex', 'MemberGroupController@index');
+            //推荐用户详情
+            $api->get('MemberGroupView', 'MemberGroupController@view');
+            //推荐用户添加
+            $api->post('MemberGroupCreate', 'MemberGroupController@create');
+            //推荐用户修改
+            $api->put('MemberGroupEdit', 'MemberGroupController@edit');
+            //推荐用户删除
+            $api->delete('MemberGroupDelete', 'MemberGroupController@delete');
+            //设置推荐
+            $api->put('MemberGroupSetIsSuggest', 'MemberGroupController@setIsSuggest');
 
         });