Ver código fonte

专题的列表、查看、新增、删除接口新增

duqinya 6 anos atrás
pai
commit
e4d96d13c5

+ 170 - 0
app/Events/CmsSubjectController.php

@@ -0,0 +1,170 @@
+<?php
+namespace App\Http\Controllers;
+
+use App\Repositories\CmsSubjectRepository;
+use Illuminate\Http\Request;
+use App\Transformers\PickupNodeTransformer;
+use Illuminate\Support\Facades\Validator;
+use League\Fractal\Resource\Collection;
+use League\Fractal\Manager;
+use Illuminate\Validation\Rule;
+use League\Fractal\Pagination\IlluminatePaginatorAdapter;
+/**
+ * Created by PhpStorm.
+ * User: qinyaer
+ * Date: 2019/4/28
+ * Time: 下午15:12
+ */
+
+class CmsSubjectController extends BaseController
+{
+    public function __construct(CmsSubjectRepository $cmsSubjectRepository)
+    {
+        $this->cmsSubjectRepository = $cmsSubjectRepository;
+    }
+
+    //专题列表
+    public function index(Request $request)
+    {
+        $cmsSubject = $this->cmsSubjectRepository->index($request->all());
+
+//        if (count($cmsSubject)>0) {
+//
+//            foreach ($ConfigPickupNode as $k => $v) {
+//
+//                $ConfigPickupNode[$k]->receive_type = $v->receive_type == 0 ? '信任交付' : '手动确认接货';
+//
+//                $ConfigPickupNode[$k]->status = $v->status == 0 ? '启用' : '禁用';
+//
+//                $ConfigPickupNode[$k]->store_ids = $v->getStoreNameAttribute();//储存方式名称
+//                $ConfigPickupNode[$k]->pickup_group_id = $v->getGroupNameAttribute();//自提点分组名称
+//            }
+//        }
+        $fractal = new Manager();
+        $resource = new Collection($cmsSubject, new PickupNodeTransformer());
+        $resource->setPaginator(new IlluminatePaginatorAdapter($cmsSubject));
+        $data = $fractal->createData($resource)->toArray();
+        $data['extra'] = [
+            'filters' => [
+                'id'
+            ],
+            'columns' => [
+                'id',
+                'city_id',
+                'city_name',
+                'title',
+                'show_type',
+                'is_open',
+                'product_count',
+            ]
+        ];
+        return $data;
+    }
+
+
+    //新建专题
+    public function create(Request $request)
+    {
+        $validator = Validator::make($request->all(), [
+            'product_id' => 'required|integer',
+            'product_sort' => 'required|integer',
+            'city_id' => 'required|integer',
+            'city_name' => 'required|string',
+            'title' => 'required|string',
+            'show_type' => ['required', Rule::in(0,1)],
+            'is_open' => ['required', Rule::in(0,1)],
+        ]);
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+        return  $this->cmsSubjectRepository->create($request->all());
+
+    }
+
+
+    //编辑自提点
+    public function edit(Request $request)
+    {
+        $validator = Validator::make($request->all(), [
+            'id' => 'required|exists:config_pickup_node',
+            'name' => 'required|string|max:20',
+            'manager_mobile' => ['required', 'regex:/^1(3[0-9]|4[57]|5[0-35-9]|6[56]|7[0135678]|8[0-9]|9[89])\\d{8}$/'],
+            'address' => 'required|string|max:200',
+            'pickup_group_id' => 'required|integer',
+            'city_id' => 'required|integer',
+            'city_name' => 'required|string',
+            'longitude' => 'required',
+            'latitude' => 'required',
+            'pickup_code' => 'required',
+            'work_time' => 'required',
+            'store_ids' => 'required',
+            'receive_type' => ['required', Rule::in(0,1)],
+        ]);
+
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+        return  $this->configPickupNodeRepository->edit($request->all());
+    }
+
+
+    //查看某自提点
+    public function view(Request $request)
+    {
+        $all = $request->all();
+        $validator = Validator::make($all, [
+            'id' => 'required|integer',
+        ]);
+
+        if($validator->fails()) {
+
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+        $getPickup = $this->configPickupNodeRepository->index($request->all());
+
+        if (count($getPickup)>0) {
+            foreach ($getPickup as $k => $v) {
+
+                $getPickup[$k]->receive_type = $v->receive_type == 0 ? '信任交付' : '手动确认接货';
+
+                $getPickup[$k]->status = $v->status == 0 ? '启用' : '禁用';
+
+                $getPickup[$k]->store_ids = $v->getStoreNameAttribute();//储存方式名称
+                $getPickup[$k]->pickup_group_id = $v->getGroupNameAttribute();//自提点分组名称
+            }
+        }
+
+        if(!$getPickup){
+
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+
+        $fractal = new Manager();
+        $resource = new Collection($getPickup, new PickupNodeTransformer());
+        $resource->setPaginator(new IlluminatePaginatorAdapter($getPickup));
+        $data = $fractal->createData($resource)->toArray();
+        $data['extra'] = [
+            'filters' => [
+                'id'
+            ],
+            'columns' => [
+                'id',
+                'city_id',
+                'city_name',
+                'name',
+                'address',
+                'work_time',
+                'manager_name',
+                'manager_mobile',
+                'receive_type',
+                'longitude',
+                'latitude',
+                'store_ids',
+                'pickup_group_id',
+                'status',
+            ]
+        ];
+        return $data;
+
+    }
+}

+ 173 - 0
app/Http/Controllers/CmsSubjectController.php

@@ -0,0 +1,173 @@
+<?php
+namespace App\Http\Controllers;
+
+use App\Models\CmsSubjectProduct;
+use App\Repositories\CmsSubjectRepository;
+use App\Transformers\CmsSubjectTransformer;
+use App\Transformers\CmsSubjectViewTransformer;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Validator;
+use League\Fractal\Resource\Collection;
+use League\Fractal\Manager;
+use Illuminate\Validation\Rule;
+use League\Fractal\Pagination\IlluminatePaginatorAdapter;
+/**
+ * Created by PhpStorm.
+ * User: qinyaer
+ * Date: 2019/4/28
+ * Time: 下午15:12
+ */
+
+class CmsSubjectController extends BaseController
+{
+    public function __construct(CmsSubjectRepository $cmsSubjectRepository)
+    {
+        $this->cmsSubjectRepository = $cmsSubjectRepository;
+    }
+
+    //专题列表
+    public function index(Request $request)
+    {
+        $cmsSubject = $this->cmsSubjectRepository->index($request->all());
+        if (count($cmsSubject)>0) {
+            foreach ($cmsSubject as $k => $v) {
+                $v->product_count = 0;
+                $product = CmsSubjectProduct::where('subject_id',$v['id'])->get();
+                $count = $product->toArray();
+                foreach ($count as $key => $value){
+                    if ($value['subject_id'] == $v['id']){
+                        $v->product_count ++ ;
+                    }
+                }
+            }
+        }
+
+        $fractal = new Manager();
+        $resource = new Collection($cmsSubject, new CmsSubjectTransformer());
+        $resource->setPaginator(new IlluminatePaginatorAdapter($cmsSubject));
+        $data = $fractal->createData($resource)->toArray();
+        $data['extra'] = [
+            'filters' => [
+                'id'
+            ],
+            'columns' => [
+                'id',
+                'city_id',
+                'city_name',
+                'title',
+                'show_type',
+                'is_open',
+                'product_count',
+            ]
+        ];
+        return $data;
+    }
+
+
+    //新建专题
+    public function create(Request $request)
+    {
+        $validator = Validator::make($request->all(), [
+            'product_id' => 'required',
+            'sort' => 'required',
+            'city_id' => 'required|integer',
+            'city_name' => 'required|string',
+            'title' => 'required|string',
+            'show_type' => ['required', Rule::in(0,1,2)],
+            'is_open' => ['required', Rule::in(0,1)],
+        ]);
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+        return  $this->cmsSubjectRepository->create($request->all());
+
+    }
+
+
+    //编辑专题
+    public function edit(Request $request)
+    {
+        $validator = Validator::make($request->all(), [
+            'id' => 'required|exists:cms_subject',
+            'product_id' => 'required',
+            'sort' => 'required',
+            'city_id' => 'required|integer',
+            'city_name' => 'required|string',
+            'title' => 'required|string',
+            'show_type' => ['required', Rule::in(0,1,2)],
+            'is_open' => ['required', Rule::in(0,1)],
+        ]);
+
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+        return  $this->cmsSubjectRepository->edit($request->all());
+    }
+
+
+    //查看某专题
+    public function view(Request $request)
+    {
+        $all = $request->all();
+        $validator = Validator::make($all, [
+            'id' => 'required|integer',
+        ]);
+
+        if($validator->fails()) {
+
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+        $getSubject = $this->cmsSubjectRepository->index($request->all());
+
+        if (count($getSubject)>0) {
+            foreach ($getSubject as $k => $v) {
+                $product = CmsSubjectProduct::select('subject_id','product_id','sort')->where('subject_id',$v['id'])->get();
+                $num = $product->toArray();
+                $product_arr = array_column($num,'product_id');
+                $getSubject[$k]->product_id = implode(',',$product_arr);
+                $sort_arry = array_column($num,'sort');
+                $getSubject[$k]->sort = implode(',',$sort_arry);
+        }
+            }
+
+        if(!$getSubject){
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+
+        $fractal = new Manager();
+        $resource = new Collection($getSubject, new CmsSubjectViewTransformer());
+        $resource->setPaginator(new IlluminatePaginatorAdapter($getSubject));
+        $data = $fractal->createData($resource)->toArray();
+        $data['extra'] = [
+            'filters' => [
+                'id'
+            ],
+            'columns' => [
+                'id',
+                'city_id',
+                'city_name',
+                'title',
+                'show_type',
+                'is_open',
+                'product_id',
+                'sort',
+            ]
+        ];
+        return $data;
+
+    }
+
+
+    //删除专题
+    public function delete(Request $request)
+    {
+        $validator = Validator::make($request->all(), [
+            'id' => 'required|exists:cms_subject'
+        ]);
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+        return  $this->cmsSubjectRepository->delete($request->all());
+
+    }
+}

+ 26 - 0
app/Models/CmsSubject.php

@@ -0,0 +1,26 @@
+<?php
+
+namespace App\Models;
+use Illuminate\Database\Eloquent\SoftDeletes;
+
+class CmsSubject extends BaseModel
+{
+    use SoftDeletes;
+
+    protected $dates = ['deleted_at'];
+    protected  $table = 'cms_subject';
+
+
+    /**
+     * 可被批量赋值的字段
+     * @var array
+     */
+    protected $fillable = ['city_id','city_name','title','show_type','is_open'];
+
+    //一对多关联专题商品表
+    public function cmsSubjectProduct()
+    {
+        return $this->hasMany('App\Models\CmsSubjectProduct','subject_id');
+    }
+
+}

+ 26 - 0
app/Models/CmsSubjectProduct.php

@@ -0,0 +1,26 @@
+<?php
+
+namespace App\Models;
+use Illuminate\Database\Eloquent\SoftDeletes;
+
+class CmsSubjectProduct extends BaseModel
+{
+    use SoftDeletes;
+
+    protected $dates = ['deleted_at'];
+    protected  $table = 'cms_subject_product';
+
+
+    /**
+     * 可被批量赋值的字段
+     * @var array
+     */
+    protected $fillable = ['product_id','sort','subject_id'];
+
+    //相对关联到专题表
+    public function cmsSubject()
+    {
+        return $this->belongsTo('App\Models\CmsSubject','subject_id');
+    }
+
+}

+ 165 - 0
app/Repositories/CmsSubjectRepository.php

@@ -0,0 +1,165 @@
+<?php
+
+namespace App\Repositories;
+
+
+use App\Models\CmsSubject;
+use App\Models\CmsSubjectProduct;
+use Symfony\Component\HttpKernel\Exception\HttpException;
+use Dingo\Api\Http\Response;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Database\QueryException;
+
+class CmsSubjectRepository {
+    public function __construct(CmsSubject $cmsSubject,CmsSubjectProduct $cmsSubjectProduct) {
+
+        $this->cmsSubject = $cmsSubject;
+        $this->cmsSubjectProduct = $cmsSubjectProduct;
+    }
+    //专题列表
+    public function index($request)
+    {
+        $where = [];
+        if(isset($request['id'])){
+            $where[] = ['id', '=', $request['id']];
+        }
+
+        return $this->cmsSubject->where($where)->orderBy('id', 'asc')->paginate(20);
+
+    }
+
+    /**
+     * 添加专题
+     */
+    public function create($request)
+    {
+        if($this->cmsSubject->where('title', trim($request['title']))->exists()){
+            throw new HttpException(500, '该专题已经存在');
+        }
+
+        $subject = [
+            'title' => $request['title'],
+            'city_id' => $request['city_id'],
+            'city_name' => $request['city_name'],
+            'show_type' => $request['show_type'],
+            'is_open' => $request['is_open'],
+        ];
+        $date = date('Y-m-d H:i:s');
+
+        DB::beginTransaction();
+        try{
+            $res = $this->cmsSubject->create($subject);
+            if ($res && $request['product_id']){
+                $products = explode(',',$request['product_id']);
+                $sort = explode(',',$request['sort']);
+
+                $product_num = count($products);
+                $sort_num = count($sort);
+                if ($sort_num != $product_num){
+                    throw new HttpException(500, '请检查商品与排序数目是否对应');
+                }
+
+                $subject_product = new CmsSubjectProduct();
+                for ($i = 0;$i < $product_num;$i++){
+                    $resert_data =[
+                        'product_id' => $products[$i],
+                        'sort' => $sort[$i],
+                        'subject_id' => $res['id'],
+                        'created_at' => $date,
+                        'updated_at' => $date,
+                    ];
+                 $subject_product->insert($resert_data);
+
+                }
+            }
+            DB::commit();
+            return Response::create();
+
+        }catch (QueryException $exception){
+            DB::rollBack();
+            return Response::create([
+                'message'  => '添加失败,请重试',
+                'error' => $exception->getMessage(),
+                'status_code'   => 500
+            ]);
+        }
+    }
+
+    public function edit($request)
+    {
+        $subject = $this->cmsSubject->find($request['id']);
+
+        $subject->title = $request['title'];
+        $subject->city_id = $request['city_id'];
+        $subject->city_name = $request['city_name'];
+        $subject->show_type = $request['show_type'];
+        $subject->is_open = $request['is_open'];
+
+        $date = date('Y-m-d H:i:s');
+
+        DB::beginTransaction();
+        try{
+            $res = $subject->save();
+
+            if($res && $request['product_id']) {
+                $this->cmsSubjectProduct->where('subject_id',$subject->id)->delete();
+
+                $products = explode(',', $request['product_id']);
+                $sort = explode(',', $request['sort']);
+
+                $product_num = count($products);
+                $sort_num = count($sort);
+                if ($sort_num != $product_num) {
+                    throw new HttpException(500, '请检查商品与排序数目是否对应');
+                }
+
+                $subject_product = new CmsSubjectProduct();
+                for ($i = 0; $i < $product_num; $i++) {
+                    $resert_data = [
+                        'product_id' => $products[$i],
+                        'sort' => $sort[$i],
+                        'subject_id' => $subject->id,
+                        'created_at' => $date,
+                        'updated_at' => $date,
+                    ];
+                    $subject_product->insert($resert_data);
+                }
+            }
+            DB::commit();
+            return Response::create();
+
+        }catch (QueryException $exception){
+            DB::rollBack();
+            return Response::create([
+                'message'  => '编辑失败,请重试',
+                'error' => $exception->getMessage(),
+                'status_code'   => 500
+            ]);
+        }
+    }
+
+    public function delete($request)
+    {
+        $subject = $this->cmsSubject->find($request['id']);
+
+        DB::beginTransaction();
+        try{
+            $res = $subject->delete();
+            if ($res){
+                $this->cmsSubjectProduct->where('subject_id',$subject->id)->delete();
+            }
+                DB::commit();
+                return Response::create();
+
+        }catch (QueryException $exception){
+            DB::rollBack();
+            return Response::create([
+                'message'  => '删除失败,请重试',
+                'error' => $exception->getMessage(),
+                'status_code'   => 500
+            ]);
+        }
+
+    }
+
+}

+ 23 - 0
app/Transformers/CmsSubjectTransformer.php

@@ -0,0 +1,23 @@
+<?php
+
+namespace App\Transformers;
+
+use App\Models\CmsSubject;
+use League\Fractal\TransformerAbstract;
+
+class CmsSubjectTransformer extends TransformerAbstract
+{
+
+    public function transform(CmsSubject $cmsSubject)
+    {
+        return [
+            'id'  => $cmsSubject['id'],
+            'city_id'  => $cmsSubject['city_id'],
+            'city_name'    => $cmsSubject['city_name'],
+            'title'    => $cmsSubject['title'],
+            'show_type'    => $cmsSubject['show_type'],
+            'product_count'    => $cmsSubject['product_count'],
+            'is_open'    => $cmsSubject['is_open'],
+        ];
+    }
+}

+ 24 - 0
app/Transformers/CmsSubjectViewTransformer.php

@@ -0,0 +1,24 @@
+<?php
+
+namespace App\Transformers;
+
+use App\Models\CmsSubject;
+use League\Fractal\TransformerAbstract;
+
+class CmsSubjectViewTransformer extends TransformerAbstract
+{
+
+    public function transform(CmsSubject $cmsSubject)
+    {
+        return [
+            'id'  => $cmsSubject['id'],
+            'city_id'  => $cmsSubject['city_id'],
+            'city_name'    => $cmsSubject['city_name'],
+            'title'    => $cmsSubject['title'],
+            'show_type'    => $cmsSubject['show_type'],
+            'is_open'    => $cmsSubject['is_open'],
+            'product_id'    => $cmsSubject['product_id'],
+            'sort'    => $cmsSubject['sort'],
+        ];
+    }
+}

+ 14 - 1
routes/api.php

@@ -14,7 +14,7 @@
 $api = app('Dingo\Api\Routing\Router');
 
 $api->version('v1', [
-    'namespace' => 'App\Http\Controllers\V1',
+    'namespace' => 'App\Http\Controllers',
 ], function ($api) {
     //登录
 
@@ -44,5 +44,18 @@ $api->version('v1', [
         $api->post('setAttr', 'MemberController@setAttr');
         //公共配置
         $api->post('configIndex', 'ConfigController@index');
+
+
+        //专题列表
+        $api->get('/subject/index', 'CmsSubjectController@index');
+        //新增专题
+        $api->post('/subject/create', 'CmsSubjectController@create');
+        //查看某专题
+        $api->post('/subject/view', 'CmsSubjectController@view');
+        //编辑专题
+        $api->post('/subject/edit', 'CmsSubjectController@edit');
+        //删除专题
+        $api->post('/subject/delete', 'CmsSubjectController@delete');
     });
+
 });