Forráskód Böngészése

新增banner配置

duqinya 5 éve
szülő
commit
a2ff80953f

+ 100 - 0
app/Http/Controllers/BannerController.php

@@ -0,0 +1,100 @@
+<?php
+namespace App\Http\Controllers;
+use App\Repositories\BannerRepository;
+use App\Transformers\BannerTransformer;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Validator;
+use Illuminate\Validation\Rule;
+use League\Fractal\Pagination\IlluminatePaginatorAdapter;
+use League\Fractal\Resource\Collection;
+use League\Fractal\Manager;
+/**
+ * Created by PhpStorm.
+ * User: durong
+ * Date: 2019/6/5
+ * Time: 下午15:10
+ */
+
+class BannerController extends BaseController
+{
+    public function __construct(BannerRepository $bannerRepository)
+    {
+        $this->bannerRepository = $bannerRepository;
+    }
+
+    //banner列表
+    public function lists(Request $request)
+    {
+        $banner = $this->bannerRepository->index($request->all());
+
+        $fractal = new Manager();
+        $resource = new Collection($banner, new BannerTransformer());
+        $resource->setPaginator(new IlluminatePaginatorAdapter($banner));
+        $data = $fractal->createData($resource)->toArray();
+        $data['extra'] = [
+            'filters' => [
+                'id',
+                'name',
+                'is_open'
+            ],
+            'columns' => [
+                'id',
+                'tpl_id',
+                'rule',
+                'area_type',
+                'name',
+                'link_content_id',
+                'image',
+                'type',
+                'use_background',
+                'status',
+                'is_open',
+                'updated_at',
+            ]
+        ];
+        return $data;
+
+    }
+
+    //新增banner
+    public function bannerSet(Request $request)
+    {
+        $validator = Validator::make($request->all(), [
+            'use_background' => ['required',Rule::in(0,1)],
+        ]);
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+
+        return  $this->bannerRepository->bannerSets($request->all());
+
+    }
+
+    //修改banner
+    public function edit(Request $request)
+    {
+        $validator = Validator::make($request->all(), [
+            'id' => 'required|exists:config_banner',
+        ]);
+
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+        return  $this->bannerRepository->edit($request->all());
+    }
+
+    //删除banner
+    public function bannerDelete(Request $request)
+    {
+        $validator = Validator::make($request->all(), [
+            'id' => 'required|exists:config_banner'
+        ]);
+        if ($validator->fails()) {
+            return $this->response->error($validator->errors()->first(), 500);
+        }
+        return $this->bannerRepository->bannerDelete($request->only('id'));
+
+    }
+
+
+}

+ 24 - 0
app/Models/Banner.php

@@ -0,0 +1,24 @@
+<?php
+namespace App\Models;
+/**
+ * Created by PhpStorm.
+ * User: durong
+ * Date: 2019/6/3
+ * Time: 下午4:11
+ */
+use Illuminate\Database\Eloquent\SoftDeletes;
+
+class Banner extends BaseModel
+{
+    use SoftDeletes;
+
+    protected $dates = ['deleted_at'];
+    protected  $table = 'config_banner';
+    /**
+     * 可被批量赋值的字段
+     * @var array
+     */
+    protected $fillable = ['tpl_id','rule','status','area_type','name','link_content_id','image','type','is_open','use_background'];
+
+
+}

+ 143 - 0
app/Repositories/BannerRepository.php

@@ -0,0 +1,143 @@
+<?php
+namespace App\Repositories;
+use App\Models\Banner;
+use Dingo\Api\Http\Response;
+use Symfony\Component\HttpKernel\Exception\HttpException;
+use Tymon\JWTAuth\Facades\JWTAuth;
+/**
+ * Created by PhpStorm.
+ * User: durong
+ * Date: 2019/6/4
+ * Time: 上午9:39
+ */
+
+class BannerRepository
+{
+    public function __construct(Banner $banner)
+    {
+        $this->banner = $banner;
+    }
+
+    public function index($request)
+    {
+        $perPage = isset($request['per_page']) ? $request['per_page'] : env('PER_PAGE');
+        $where = [];
+        if(isset($request['id'])){
+            $where[] = ['id', '=', $request['id']];
+        }
+        if(isset($request['is_open'])){
+            $where[] = ['is_open', '=', $request['is_open']];
+        }
+        if (isset($request['name'])){
+            $where[] = ['name', 'like', "%{$request['name']}%"];
+        }
+
+        return $this->banner->where($where)->orderBy('id', 'desc')->paginate($perPage);
+
+    }
+
+    public function bannerSets($request)
+    {
+        if ($request['use_background'] == 0){
+          $banner = [
+              'status' => 0,
+              'tpl_id' => $request['tpl_id'],
+              'area_type' => $request['area_type'],
+              'rule' => json_encode($request['rule']),
+          ];
+        }else{
+            $banner = [
+                'name' => $request['name'],
+                'link_content_id' => $request['link_content_id'],
+                'image' => $request['image'],
+                'type' => $request['type'],
+                'is_open' => $request['is_open'] ?? '',
+            ];
+        }
+            $banner['use_background'] = $request['use_background'];
+            $banner['created_at'] = date('Y-m-d H:i:s');
+            $banner['updated_at'] = date('Y-m-d H:i:s');
+
+            $res = $this->banner->create($banner);
+
+            if (!$res) {
+                throw new HttpException(500, '添加失败,请重试');
+            }
+            if ($request['use_background'] == 0){
+                $request['type'] = 0;//0表示新增
+                $request['id'] = $res['id'];
+                $request['rule'] = $res['rule'];
+                $this->bannerIds($request);
+            }
+    }
+
+    public function edit($request)
+    {
+        $banner = $this->banner->where('id', $request['id'])->first();
+        $rule = $request['rule'];
+        $banner->use_background = $request['use_background'];
+        $banner->updated_at = date('Y-m-d H:i:s');
+        if ($request['use_background'] == 0){
+                $banner->tpl_id = $request['tpl_id'];
+                $banner->area_type = $request['area_type'];
+                $banner->rule = json_encode($rule);
+                $banner->status = 0;
+
+            $banner_update = $banner->save();
+            if (!$banner_update) {
+                throw new HttpException(500, 'cms-banner更新失败');
+            }
+            $old_subject_id = $this->banner->select('rule')->find($request['id']);
+            $request['id'] = $banner_update['id'];
+            $request['rule'] = $rule;
+            $request['old_rule'] = $old_subject_id->rule;
+            $request['type'] = 1;//1表示修改
+            $this->bannerIds($request);
+        }else{
+                $banner->name = $request['name'];
+                $banner->link_content_id = $request['link_content_id'];
+                $banner->image = $request['image'];
+                $banner->type = $request['type'];
+                $banner->is_open = $request['is_open'] ?? '';
+
+            $banner_update = $banner->save();
+            if (!$banner_update) {
+                throw new HttpException(500, '社区banner更新失败');
+            }
+        }
+
+    }
+
+    function bannerIds($request)
+    {
+        try {
+            $url = config("customer.app_service_url") . '/cms/count_subject';
+            if ($request['type'] == 0){
+                $array = [
+                    'json' => ['rule' => $request['rule'],'type' => $request['type']], 'query' => [], 'http_errors' => false, 'headers' => ['Authorization' => "Bearer " . JWTAuth::getToken()]
+                ];
+            }else{
+                $array = [
+                    'json' => ['id' => $request['id'],'rule' => $request['rule'],'type' => $request['type'],'old_rule' =>$request['old_rule']], 'query' => [], 'http_errors' => false, 'headers' => ['Authorization' => "Bearer " . JWTAuth::getToken()]
+                ];
+            }
+
+            return http($url, $array, 'post');
+        } catch (\Exception $e) {
+            return [];
+        }
+
+    }
+
+    public function bannerDelete($request)
+    {
+        $advertisement = $this->banner->where('id', $request['id'])->first();
+        $res = $advertisement->delete();
+        if (!$res){
+            return Response::create([
+                'message'  => '删除失败,请重试',
+                'status_code'   => 500
+            ]);
+        }
+    }
+}

+ 27 - 0
app/Transformers/BannerTransformer.php

@@ -0,0 +1,27 @@
+<?php
+
+namespace App\Transformers;
+
+use App\Models\Banner;
+use League\Fractal\TransformerAbstract;
+
+class BannerTransformer extends TransformerAbstract
+{
+
+    public function transform(Banner $banner)
+    {
+        return [
+            'id'  => $banner['id'],
+            'tpl_id'  => $banner['tpl_id'],
+            'name'    => $banner['name'],
+            'link_content_id'    => $banner['link_content_id'],
+            'image'    => $banner['image'],
+            'type'    => $banner['type'],
+            'use_background'    => $banner['use_background'],
+            'rule'    => $banner['rule'],
+            'status'    => $banner['status'],
+            'is_open'    => $banner['is_open'],
+            'updated_at'    => $banner['updated_at'],
+        ];
+    }
+}

+ 43 - 0
database/migrations/2019_06_05_065619_create_config_banner_table.php

@@ -0,0 +1,43 @@
+<?php
+
+use Illuminate\Support\Facades\Schema;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class CreateConfigBannerTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('config_banner', function (Blueprint $table) {
+            $table->increments('id');
+            $table->string('name', 20)->nullable()->comment('社区-banner名称');
+            $table->integer('link_content_id')->nullable()->comment('社区-链接内容id:用户/内容/活动/话题ID');
+            $table->string('image', 255)->nullable()->comment('社区-banner图片');
+            $table->tinyInteger('type')->nullable()->comment('社区-banner类型:0.纯展示;1.内容;2.用户;3.活动;4.话题');
+            $table->tinyInteger('use_background')->comment('使用后台:0.CMS;1.社区后台');
+            $table->tinyInteger('is_open')->nullable()->comment('社区-开关状态:0:关闭;1:开启');
+
+            $table->integer('tpl_id')->nullable()->comment('cms-模板ID');
+            $table->json('rule')->nullable()->comment('cms-设置项');
+            $table->tinyInteger('status')->nullable()->comment('cms-状态:0:草稿;1:发布');
+            $table->tinyInteger('area_type')->nullable()->comment('cms-板块类型:0:banner;1:专题广告;2.商品楼层;3.分类专题(菜市场)');
+            $table->timestamps();
+            $table->softDeletes();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('config_banner');
+    }
+}

+ 9 - 0
routes/api.php

@@ -56,6 +56,15 @@ $api->version('v1', [
         //新增城市
         $api->post('/cityManagement/create', 'ConfigCityManagementController@create');
 
+        //banner列表
+        $api->get('/bannerSet/lists', 'BannerController@lists');
+        //新增banner
+        $api->post('/bannerSet', 'BannerController@bannerSet');
+        //编辑banner
+        $api->put('/bannerSet/edit', 'BannerController@edit');
+        //删除banner
+        $api->delete('/bannerSet/delete', 'BannerController@bannerDelete');
+
     });
     //配置文件
     $api->get('/config', 'ConfigController@index');