zqwang 1 gadu atpakaļ
vecāks
revīzija
27ace29b50

+ 22 - 0
modules/Common/Services/BaseService.php

@@ -0,0 +1,22 @@
+<?php
+/**
+ *
+ * @file:BaseService.php
+ * @Date: 2023/6/7
+ * @Time: 14:28
+ */
+
+
+namespace Modules\Common\Services;
+
+use Catch\Exceptions\FailedException;
+
+class BaseService
+{
+    protected static  function  throwErrMsg($msg,$code = ""){
+        if ($code){
+            throw  new FailedException($msg,$code);
+        }
+        throw  new FailedException($msg);
+    }
+}

+ 67 - 0
modules/Operation/Http/Controllers/BannerController.php

@@ -0,0 +1,67 @@
+<?php
+/**
+ *
+ * @file:BannerController.php
+ * @Date: 2023/6/7
+ * @Time: 14:04
+ */
+
+
+namespace Modules\Operation\Http\Controllers;
+
+use Catch\Base\CatchController;
+use Catch\Exceptions\FailedException;
+use Illuminate\Http\Request;
+use Modules\Operation\Http\Requests\BannerRequest;
+use Modules\Operation\Service\BannerService;
+
+class BannerController extends CatchController
+{
+
+    /**
+     *  轮播图类列表
+     * name: list
+     */
+    public function list(Request $request)
+    {
+        $param  = $request->all();
+        return BannerService::getBannerLists($param);
+    }
+    /*
+     * 添加
+     */
+    public function add(BannerRequest $request){
+        $param = $request->all();
+        return BannerService::addBanner($param);
+    }
+
+    /*
+     * 编辑
+     */
+    public function edit($id,BannerRequest $request)
+    {
+        return BannerService::updateBanner($id,$request->all());
+    }
+
+    /*
+     *  更新状态
+     */
+    public function updateStatus($id,Request $request)
+    {
+        if (!$request->has('status')){
+            throw  new FailedException("参数错误");
+        }
+        $status = $request->input('status');
+        if (!in_array($status,[1,0])){
+            throw  new FailedException("状态值不正确");
+        }
+        return BannerService::updateBanner($id,['status' => $status]);
+    }
+
+    /*
+     *  删除
+     */
+    public function del($id){
+        return BannerService::delBannerById($id);
+    }
+}

+ 67 - 0
modules/Operation/Http/Requests/BannerRequest.php

@@ -0,0 +1,67 @@
+<?php
+/**
+ *
+ * @file:BannerRequest.php
+ * @Date: 2023/6/7
+ * @Time: 14:54
+ */
+
+
+namespace Modules\Operation\Http\Requests;
+
+use Illuminate\Foundation\Http\FormRequest;
+use Illuminate\Support\Facades\DB;
+use Modules\OrderRefund\Models\OrdersRefundVerify;
+
+class BannerRequest extends FormRequest
+{
+
+    /**
+     * rules
+     *
+     * @return array
+     */
+    public function rules(): array
+    {
+        return [
+            'video_id' => [
+                'required',
+                'Integer',
+                "gt:0",
+                function ($attribute, $value, $fail) {
+                    $has = DB::table('videos')->where('id', $value)->first();
+                    if (empty($has)) {
+                        $fail("剧集不不正确");
+                    }
+                    if ($has->shelf_type != 2){
+                        $fail("短剧未上架");
+                    }
+                }
+            ],
+            'title' => ['required'] ,
+            'miniprogram_type' => ['required','Integer',"in:1,2"] ,
+            'status' => ['required','Integer',"in:0,1"] ,
+            "sort" =>  ['Integer',"gte:0"],
+            'img_url'=>[
+                'required'
+            ]
+        ];
+    }
+
+    /**
+     * messages
+     *
+     * @return string[]
+     */
+    public function messages(): array
+    {
+        return [
+            'video_id' => '请选择短剧',
+            'title' => '名称必填',
+            'miniprogram_type' => '小程序类型不正确',
+            'img_url' => '请上传图片',
+            'status' => '状态值不正确',
+        ];
+    }
+
+}

+ 8 - 7
modules/Operation/Installer.php

@@ -1,8 +1,9 @@
 <?php
 <?php
 
 
-namespace Modules\Video;
+namespace Modules\Operation;
 
 
 use Catch\Support\Module\Installer as ModuleInstaller;
 use Catch\Support\Module\Installer as ModuleInstaller;
+use Modules\Operation\Providers\OperationServiceProvider;
 use Modules\Video\Providers\VideoServiceProvider;
 use Modules\Video\Providers\VideoServiceProvider;
 
 
 class Installer extends ModuleInstaller
 class Installer extends ModuleInstaller
@@ -11,12 +12,12 @@ class Installer extends ModuleInstaller
     {
     {
         // TODO: Implement info() method.
         // TODO: Implement info() method.
         return [
         return [
-            'title' => '视频管理',
-            'name' => 'video',
-            'path' => 'video',
-            'keywords' => '视频管理',
-            'description' => '视频管理模块',
-            'provider' => VideoServiceProvider::class
+            'title' => '运营管理',
+            'name' => 'operation',
+            'path' => 'operation',
+            'keywords' => '运营管理',
+            'description' => '运营管理模块',
+            'provider' => OperationServiceProvider::class,
         ];
         ];
     }
     }
 
 

+ 17 - 0
modules/Operation/Models/DuanJuBanner.php

@@ -0,0 +1,17 @@
+<?php
+
+namespace Modules\Operation\Models;
+
+
+
+use Modules\Common\Models\BaseModel;
+
+class DuanJuBanner extends BaseModel
+{
+    protected $table = 'duanju_banner';
+
+    protected $fillable = [
+        'id', 'title', 'video_id','miniprogram_type', 'gender', 'img_url', 'status', 'created_at', 'updated_at',
+    ];
+
+}

+ 129 - 0
modules/Operation/Service/BannerService.php

@@ -0,0 +1,129 @@
+<?php
+/**
+ *
+ * @file:BannerService.php
+ * @Date: 2023/6/7
+ * @Time: 14:29
+ */
+
+
+namespace Modules\Operation\Service;
+
+use Illuminate\Support\Facades\DB;
+use Modules\Common\Services\BaseService;
+use Modules\Operation\Models\DuanJuBanner;
+
+class BannerService extends BaseService
+{
+
+    /**
+     *  轮播图列表
+     * name: getBannerLists
+     * @param array $param
+     * date 2023/06/07 14:40
+     */
+    public static function getBannerLists(array $param)
+    {
+        $isAll = getProp($param,'is_all',false);
+        $list = self::getQuerySql($param)->orderBy('sort','desc')->orderBy('status','desc')->orderBy('id','desc');
+
+        if ($isAll){
+             $list =  $list->get();
+        }else{
+           $list = $list->paginate(getProp($param,'limit',15));
+        }
+        if (!$list->isEmpty()){
+            $types = self::getMiniProgramType();
+            $types = array_column($types,null,'value');
+            foreach ($list as $value){
+                $value->miniprogram_type_text = $types[$value->miniprogram_type]['name'] ?? "-";
+            }
+        }
+        return $list;
+    }
+
+    public  static  function  getMiniProgramType(){
+        return [
+            ['value' => 1,'name' =>"微信小程序"],
+            ['value' => 2,'name' =>"抖音小程序"],
+        ];
+    }
+
+    /**
+     *  查询构建
+     * name: getQuery
+     * @param array $param
+     * date 2023/06/07 14:41
+     */
+    private static function getQuerySql(array $param)
+    {
+        $sql = DuanJuBanner::query();
+
+        if (getProp($param,'title')){
+            $sql->where("title","like","%{$param['title']}%");
+        }
+        return $sql;
+    }
+
+    /**
+     *  添加轮播图
+     * name: addBanner
+     * @param array $param
+     * date 2023/06/07 15:53
+     */
+    public static function addBanner(array $param)
+    {
+
+        $res = DuanJuBanner::create($param);
+        if ($res){
+            return "操作成功";
+        }
+        self::throwErrMsg("添加失败");
+    }
+
+    /**
+     *  更新banner
+     * name: updateBanner
+     * @param $id
+     * @param $param
+     * date 2023/06/08 09:55
+     */
+    public static function updateBanner($id, $param)
+    {
+        // 禁用检测
+       if( $param['status'] != 1){
+           $type = getProp($param,'miniprogram_type');
+           if (empty($type)){
+               $type = DuanJuBanner::where('id',$id)->value('miniprogram_type');
+           }
+           $other = DuanJuBanner::where('id','<>',$id)->where('miniprogram_type',$type)->where('status',1)->value('id');
+           if (empty($other)){
+               self::throwErrMsg("此类型小程序应最少保障一张可用轮播图");
+           }
+       }
+
+       $res = DuanJuBanner::where('id',$id)->update($param);
+       if ($res){
+           return "操作成功";
+       }
+        self::throwErrMsg("操作失败");
+    }
+
+    /*
+     * 删除
+     */
+    public static function delBannerById($id)
+    {
+        $info = DuanJuBanner::where('id',$id)->first();
+       if (is_empty($info)){
+           return  "操作成功";
+       }
+       
+        $other = DuanJuBanner::where('id','<>',$id)->where('miniprogram_type',$info->miniprogram_type)->where('status',1)->value('id');
+        if (empty($other)){
+            self::throwErrMsg("此类型小程序应最少保障一张可用轮播图");
+        }
+        DuanJuBanner::where('id',$id)->delete();
+        return "操作成功";
+    }
+}

+ 17 - 0
modules/Operation/routes/route.php

@@ -10,5 +10,22 @@ Route::prefix('operationManage')->group(function () {
         Route::post('setConfig', [FirstPageController::class, 'setConfig']);
         Route::post('setConfig', [FirstPageController::class, 'setConfig']);
         Route::get('list', [FirstPageController::class, 'list']);
         Route::get('list', [FirstPageController::class, 'list']);
     });
     });
+
+
 });
 });
 
 
+Route::prefix('operation')->group(function () {
+    // 轮播图管理
+    Route::prefix('banner')->group(function () {
+        // 列表
+        Route::any('list',[\Modules\Operation\Http\Controllers\BannerController::class,'list']);
+        // 添加
+        Route::post('add',[\Modules\Operation\Http\Controllers\BannerController::class,'add']);
+        // 编辑
+        Route::post('edit/{id}',[\Modules\Operation\Http\Controllers\BannerController::class,'edit']);
+        // 删除
+        Route::post('del/{id}',[\Modules\Operation\Http\Controllers\BannerController::class,'del']);
+        // 快速状态
+        Route::post('editStatus/{id}',[\Modules\Operation\Http\Controllers\BannerController::class,'updateStatus']);
+    });
+});