소스 검색

Merge branch 'stable' of 121.36.198.49:zy_duanju/duanju_manage

zhaoyang 1 년 전
부모
커밋
23cd5c661c
100개의 변경된 파일1283개의 추가작업 그리고 180개의 파일을 삭제
  1. 5 2
      app/Console/Commands/ContentManage/ContentTest.php
  2. 62 0
      app/Console/Commands/Video/WechatCheckGetTask.php
  3. 35 0
      app/Jobs/Video/WechatCheck.php
  4. 11 0
      app/Libs/Helpers.php
  5. 7 1
      config/database.php
  6. 2 1
      config/logging.php
  7. 7 0
      config/queue.php
  8. 96 2
      modules/Callback/Http/Controllers/JuliangAccountController.php
  9. 1 0
      modules/Callback/routes/route.php
  10. 0 2
      modules/Channel/Http/Controllers/OrdersController.php
  11. 12 12
      modules/Channel/Http/Controllers/PayTemplateController.php
  12. 2 2
      modules/Channel/Http/Controllers/UserMiniprogramController.php
  13. 1 1
      modules/Channel/Http/Controllers/WechatMinprogramUserController.php
  14. 1 3
      modules/Channel/Models/PayTemplate.php
  15. 1 3
      modules/Channel/Models/PayTemplateItem.php
  16. 0 1
      modules/Channel/Services/Notice/NoitceTypeService.php
  17. 1 2
      modules/Channel/Services/Notice/NoticesService.php
  18. 7 2
      modules/Common/Errors/Errors.php
  19. 0 1
      modules/Common/Http/Controllers/ModuleController.php
  20. 0 4
      modules/Common/Providers/CommonServiceProvider.php
  21. 4 0
      modules/Common/Repository/Options/CommonParams.php
  22. 39 0
      modules/Common/Services/BaseService.php
  23. 53 0
      modules/Common/Services/CommonConfigService.php
  24. 1 1
      modules/Common/Support/Upload/Uploader.php
  25. 27 14
      modules/Common/config/common.php
  26. 2 1
      modules/Common/routes/route.php
  27. 0 1
      modules/CpManage/Models/Cp/Cps.php
  28. 0 1
      modules/CpManage/Providers/CpManageServiceProvider.php
  29. 0 2
      modules/Develop/Http/Controllers/ModuleController.php
  30. 1 1
      modules/Develop/Models/Schemas.php
  31. 0 1
      modules/Develop/Providers/DevelopServiceProvider.php
  32. 1 1
      modules/Develop/Support/Generate/Create/Model.php
  33. 1 1
      modules/Develop/Support/Generate/Create/Schema.php
  34. 1 1
      modules/Develop/database/migrations/Schemas.php
  35. 1 1
      modules/Develop/routes/route.php
  36. 5 4
      modules/Develop/views/generate/components/codeGen.vue
  37. 1 1
      modules/Develop/views/generate/components/store.ts
  38. 3 3
      modules/Develop/views/generate/components/structure.vue
  39. 1 4
      modules/Develop/views/generate/index.vue
  40. 3 3
      modules/Develop/views/module/create.vue
  41. 4 4
      modules/Develop/views/module/index.vue
  42. 3 3
      modules/Develop/views/module/install.vue
  43. 1 1
      modules/Develop/views/router.ts
  44. 2 2
      modules/Develop/views/schema/create.vue
  45. 4 4
      modules/Develop/views/schema/index.vue
  46. 2 1
      modules/Develop/views/schema/show.vue
  47. 3 3
      modules/Develop/views/schema/steps/schema.vue
  48. 5 5
      modules/Develop/views/schema/steps/structure.vue
  49. 1 1
      modules/Develop/views/schema/store/index.ts
  50. 1 3
      modules/Jiesuan/Http/Controllers/VerifyBankInfoController.php
  51. 0 1
      modules/Jiesuan/Providers/JiesuanServiceProvider.php
  52. 0 1
      modules/Jiesuan/routes/route.php
  53. 7 6
      modules/Manage/Http/Controllers/MiniprogramController.php
  54. 5 4
      modules/Manage/Http/Controllers/PayConfigController.php
  55. 1 1
      modules/Manage/Http/Requests/MiniprogramRequest.php
  56. 1 1
      modules/Manage/Http/Requests/MiniprogramUpdateRequest.php
  57. 0 1
      modules/Manage/Providers/ManageServiceProvider.php
  58. 31 0
      modules/Manage/Services/WechatMiniprogramService.php
  59. 7 2
      modules/Manage/config/miniprogram.php
  60. 0 1
      modules/Manage/routes/route.php
  61. 67 0
      modules/Operation/Http/Controllers/BannerController.php
  62. 71 0
      modules/Operation/Http/Controllers/ChannelController.php
  63. 119 0
      modules/Operation/Http/Controllers/FirstPageController.php
  64. 63 0
      modules/Operation/Http/Requests/AddChannelRequest.php
  65. 67 0
      modules/Operation/Http/Requests/BannerRequest.php
  66. 33 0
      modules/Operation/Installer.php
  67. 17 0
      modules/Operation/Models/DuanJuBanner.php
  68. 16 0
      modules/Operation/Models/NavPages.php
  69. 29 0
      modules/Operation/Providers/OperationServiceProvider.php
  70. 10 0
      modules/Operation/README.md
  71. 137 0
      modules/Operation/Service/BannerService.php
  72. 93 0
      modules/Operation/Service/ChannelServic.php
  73. 43 0
      modules/Operation/routes/route.php
  74. 0 1
      modules/OrderRefund/Providers/OrderRefundServiceProvider.php
  75. 0 1
      modules/OrderRefund/Services/RefundOrderService.php
  76. 0 1
      modules/Payment/Providers/PaymentServiceProvider.php
  77. 1 1
      modules/Permissions/Http/Controllers/DepartmentsController.php
  78. 1 1
      modules/Permissions/Http/Controllers/JobsController.php
  79. 1 1
      modules/Permissions/Http/Controllers/PermissionsController.php
  80. 1 1
      modules/Permissions/Http/Controllers/RolesController.php
  81. 0 3
      modules/Permissions/Middlewares/RoleCheck.php
  82. 1 1
      modules/Permissions/Models/Traits/DataRange.php
  83. 0 1
      modules/Permissions/Providers/PermissionsServiceProvider.php
  84. 0 1
      modules/Permissions/database/seeder/PermissionsMenusSeeder.php
  85. 2 2
      modules/Permissions/routes/route.php
  86. 3 3
      modules/Permissions/views/departments/form/create.vue
  87. 4 4
      modules/Permissions/views/departments/index.vue
  88. 3 3
      modules/Permissions/views/jobs/form/create.vue
  89. 4 4
      modules/Permissions/views/jobs/index.vue
  90. 5 5
      modules/Permissions/views/permissions/form/create.vue
  91. 5 5
      modules/Permissions/views/permissions/index.vue
  92. 3 3
      modules/Permissions/views/roles/form/create.vue
  93. 4 4
      modules/Permissions/views/roles/index.vue
  94. 0 1
      modules/System/Http/Controllers/NoticeTypesController.php
  95. 0 1
      modules/System/Providers/SystemServiceProvider.php
  96. 0 1
      modules/System/Services/Notice/NoitceTypeService.php
  97. 1 2
      modules/System/Services/Notice/NoticesService.php
  98. 4 2
      modules/Tuiguang/Http/Controllers/PromotionController.php
  99. 2 2
      modules/Tuiguang/config/tuiguang.php
  100. 0 0
      modules/Tuiguang/routes/route.php

+ 5 - 2
app/Console/Commands/ContentManage/ContentTest.php

@@ -2,8 +2,11 @@
 
 namespace App\Console\Commands\ContentManage;
 
+use http\Exception\RuntimeException;
 use Illuminate\Console\Command;
 use Illuminate\Support\Facades\Redis;
+use Modules\Common\Errors\Errors;
+use Modules\Common\Exceptions\CommonBusinessException;
 
 class ContentTest extends Command
 {
@@ -26,7 +29,7 @@ class ContentTest extends Command
      */
     public function handle(): void
     {
-        Redis::set('test-aa', 1132412);
-        $this->info(Redis::get('test-aa'));
+       myLog('kkkkk')->info(date('Y-m-d H:i:s'));
+       throw new RuntimeException('kljkjljkjkl');
     }
 }

+ 62 - 0
app/Console/Commands/Video/WechatCheckGetTask.php

@@ -0,0 +1,62 @@
+<?php
+
+namespace App\Console\Commands\Video;
+
+use Illuminate\Console\Command;
+use Illuminate\Support\Facades\DB;
+use Modules\Video\Services\WechatCheckSyncService;
+
+class WechatCheckGetTask extends Command
+{
+    /**
+     * The name and signature of the console command.
+     *
+     * @var string
+     */
+    protected $signature = 'Video:WechatCheckGetTask {--task_ids= : 英文逗号分割的任务id}';
+
+    /**
+     * The console command description.
+     *
+     * @var string
+     */
+    protected $description = '查询短剧同步到微信的任务状态';
+
+    /**
+     * Execute the console command.
+     */
+    public function handle(): void
+    {
+        $task_ids = $this->option('task_ids');
+        $taskIdArr = null;
+        if($task_ids) {
+            $taskIdArr = explode(',', trim($task_ids, ','));
+        }
+        DB::table('video_series_wechat_check')
+            ->whereIn('sync_status', [1,2])
+            ->where('sync_task_id', '<>', '')
+            ->where('is_enabled', 1)
+            ->when($taskIdArr, function ($query, $taskIdArr) {
+                return $query->whereIn('task_id', $taskIdArr);
+            })->orderBy('id', 'asc')
+            ->chunk(100, function ($items) {
+                $now = date('Y-m-d H:i:s');
+                foreach ($items as $item) {
+                    $taskInfo = WechatCheckSyncService::getTask($item);
+                    if($taskInfo && 1 == $taskInfo['task_type']) {
+                        if(in_array($taskInfo['status'], [3,4])) {
+                            DB::table('video_series_wechat_check')
+                                ->where(['id' => $item->id])
+                                ->update([
+                                    'status' => $taskInfo['status'],
+                                    'remark' => $taskInfo['errmsg'] ?? '',
+                                    'media_id' => $taskInfo['media_id'] ?? '',
+                                    'updated_at' => $now,
+                                    'sync_task_info' => \json_encode($taskInfo),
+                                ]);
+                        }
+                    }
+                }
+            });
+    }
+}

+ 35 - 0
app/Jobs/Video/WechatCheck.php

@@ -0,0 +1,35 @@
+<?php
+
+namespace App\Jobs\Video;
+
+use Illuminate\Bus\Queueable;
+use Illuminate\Contracts\Queue\ShouldBeUnique;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Foundation\Bus\Dispatchable;
+use Illuminate\Queue\InteractsWithQueue;
+use Illuminate\Queue\SerializesModels;
+
+/**
+ * 剧目提审,真实处理逻辑在 duanju_crontab_script 项目
+ */
+class WechatCheck implements ShouldQueue
+{
+    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
+
+    private $info;
+    /**
+     * Create a new job instance.
+     */
+    public function __construct($info)
+    {
+        $this->info = $info;
+    }
+
+    /**
+     * Execute the job.
+     */
+    public function handle(): void
+    {
+        //
+    }
+}

+ 11 - 0
app/Libs/Helpers.php

@@ -3,6 +3,7 @@
 
 use Illuminate\Http\UploadedFile;
 use Illuminate\Support\Facades\DB;
+use Modules\Common\Support\Trace\TraceContext;
 use Modules\Common\Support\Upload\Uploader;
 use PhpOffice\PhpSpreadsheet\IOFactory;
 use PhpOffice\PhpSpreadsheet\Spreadsheet;
@@ -404,3 +405,13 @@ if (!function_exists('print_sql')) {
         });
     }
 }
+
+if(!function_exists('getTraceContext')) {
+
+    /**
+     * @return TraceContext
+     */
+    function getTraceContext() {
+        return app(TraceContext::class);
+    }
+}

+ 7 - 1
config/database.php

@@ -145,7 +145,13 @@ return [
             'port' => env('REDIS_PORT', '6379'),
             'database' => env('REDIS_CACHE_DB', '1'),
         ],
-
+        // 普通redis队列
+        'queue-redis' => [
+            'host' => env('COMMON_QUEUE_REDIS_HOST', 'localhost'),
+            'password' => env('COMMON_QUEUE_REDIS_PASSWORD', null),
+            'port' => env('COMMON_QUEUE_REDIS_PORT', 6379),
+            'database' => 2,
+        ],
     ],
 
 ];

+ 2 - 1
config/logging.php

@@ -4,6 +4,7 @@ use Monolog\Handler\NullHandler;
 use Monolog\Handler\StreamHandler;
 use Monolog\Handler\SyslogUdpHandler;
 
+$hostname = gethostname();
 return [
 
     /*
@@ -65,7 +66,7 @@ return [
 
         'daily' => [
             'driver' => 'daily',
-            'path' => storage_path('logs/laravel.log'),
+            'path' => storage_path('logs/'.$hostname. '/'. env('APP_NAME').'/system/laravel.log'),
             'level' => env('LOG_LEVEL', 'debug'),
             'days' => 14,
         ],

+ 7 - 0
config/queue.php

@@ -71,6 +71,13 @@ return [
             'after_commit' => false,
         ],
 
+        'queue-redis' => [
+            'driver' => 'redis',
+            'connection' => 'queue-redis',
+            'queue' => 'default',
+            'expire' => 60,
+        ]
+
     ],
 
     /*

+ 96 - 2
modules/Callback/Http/Controllers/JuliangAccountController.php

@@ -18,15 +18,48 @@ class JuliangAccountController extends CatchController
     public function list(Request $request) {
         $advAccountId = $request->input('account_id');
         $advAccountName = $request->input('account_name');
+        $unBind = $request->input('unbind', 0);
+        $alreadyBindConfigIds = null;
+        if($unBind) {
+            $alreadyBindConfigIds = DB::table('promotions')
+                ->where([
+                    'uid' => $this->getOptimizerUid(),
+                    'callback_type' => 1,
+                    'status' => 1,
+                    'is_enabled' => 1,
+                ])->where('callback_config_id' , '<>', 0)
+                ->distinct()
+                ->select('callback_config_id')
+                ->get()->pluck('callback_config_id')->toArray();
+        }
 
-        return DB::table('juliang_account_callback_config')
+        $list =  DB::table('juliang_account_callback_config')
             ->where(['company_uid' => $this->getOptimizerUid()])
             ->when($advAccountId, function ($query, $advAccountId) {
                 return $query->where('adv_account_id' , $advAccountId);
             })->when($advAccountName, function ($query, $advAccountName) {
                 return $query->where('adv_account_name', 'like', '%'. $advAccountName. '%');
-            })->orderBy('id', 'desc')
+            })->when($alreadyBindConfigIds, function ($query, $alreadyBindConfigIds) {
+                return $query->whereNotIn('id', $alreadyBindConfigIds);
+            })
+            ->orderBy('id', 'desc')
             ->paginate($request->input('limit', 30));
+        $ids = collect($list->items())->pluck('id');
+        $promotions = DB::table('promotions')
+            ->where([
+                'uid' => $this->getOptimizerUid(),
+                'callback_type' => 1,
+                'status' => 1,
+                'is_enabled' => 1,
+            ])->whereIn('callback_config_id', $ids)
+            ->select('name', 'id', 'callback_config_id')
+            ->get()->keyBy('callback_config_id');
+        foreach ($list as $item) {
+            $item->promotion_name = $promotions->get($item->id)->name ?? '';
+            $item->promotion_id = $promotions->get($item->id)->id ?? '';
+        }
+
+        return $list;
     }
 
     public function addAccount(Request $request) {
@@ -270,4 +303,65 @@ class JuliangAccountController extends CatchController
 
         return 'ok';
     }
+
+    /**
+     * 解绑推广
+     * @param Request $request
+     */
+    public function unbindPromotion(Request $request) {
+        $this->validate($request, [
+            'id' => 'required'
+        ]);
+
+        $config = DB::table('juliang_account_callback_config')
+            ->where([
+                'id' => $request->input('id'),
+                'company_uid' => $this->getOptimizerUid(),
+            ])->first();
+
+        if(!$config) {
+            CommonBusinessException::throwError(Errors::JULIANG_ACCOUNT_CONFIG_NOT_EXISTS);
+        }
+        $now = date('Y-m-d H:i:s');
+        $affected = DB::table('promotions')
+            ->where([
+                'callback_type' => 1,
+                'callback_config_id' => $request->input('id'),
+                'is_enabled' => 1,
+                'status' => 1,
+            ])->update([
+                'status' => 0,
+                'updated_at' => $now,
+            ]);
+        if($affected) {
+            DB::table('juliang_account_rate_config_log')
+                ->where('company_uid', $this->getOptimizerUid())
+                ->where('account_id', $config->adv_account_id)
+                ->where('is_enabled', 1)
+                ->update(['is_enabled' => 0, 'updated_at' => $now]);
+            DB::table('juliang_account_promotion_protect_record')
+                ->where('optimizer_uid', $this->getOptimizerUid())
+                ->where('advertiser_id', $config->adv_account_id)
+                ->where('is_enabled', 1)
+                ->update(['is_enabled' => 0, 'updated_at' => $now]);
+            DB::table('juliang_account_rate_config_log')
+                ->insert([
+                    'company_uid' => $this->getOptimizerUid(),
+                    'account_id' => $config->adv_account_id,
+                    'config_per' => $config->default_rate,
+                    'created_at' => $now,
+                    'updated_at' => $now,
+                ]);
+            // 让所有的时间区间比例配置,在定时任务中,重新执行一遍
+            DB::table('juliang_account_promotion_config_time')
+                ->where('is_enable',1)
+                ->where('company_uid',$this->getOptimizerUid())
+                ->where('account_id',$config->adv_account_id)
+                ->update(['next_exec_time' => date('Y-m-d'), 'updated_at' => $now]);
+        }
+
+
+        return 'ok';
+    }
+
 }

+ 1 - 0
modules/Callback/routes/route.php

@@ -10,6 +10,7 @@ Route::prefix('callback')->group(function () {
         Route::post('addAccount', [JuliangAccountController::class, 'addAccount']);
         Route::post('updateCallbackConfig', [JuliangAccountController::class, 'updateCallbackConfig']);
         Route::post('turnCallbackState', [JuliangAccountController::class, 'turnCallbackState']);
+        Route::post('unbindPromotion', [JuliangAccountController::class, 'unbindPromotion']);
         Route::get('log/list', [CallbackLogController::class, 'list']);
         Route::post('log/callbackAgain', [CallbackLogController::class, 'callbackAgain']);
     });

+ 0 - 2
modules/Channel/Http/Controllers/OrdersController.php

@@ -11,11 +11,9 @@ namespace Modules\Channel\Http\Controllers;
 
 use Catch\Base\CatchController;
 use Illuminate\Http\Request;
-use Illuminate\Support\Facades\DB;
 use Modules\Channel\Models\UserHasMiniprograms;
 use Modules\Channel\Services\Order\OrderService;
 use Modules\User\Http\Controllers\UserTrait;
-use Modules\User\Models\User;
 
 class OrdersController extends CatchController
 {

+ 12 - 12
modules/Channel/Http/Controllers/PayTemplateController.php

@@ -3,20 +3,20 @@
 namespace Modules\Channel\Http\Controllers;
 
 use Carbon\Carbon;
-use Illuminate\Http\Request;
 use Catch\Base\CatchController;
-use Modules\Common\Errors\Errors;
+use Illuminate\Http\Request;
+use Modules\Channel\Exceptions\ChannelBusinessException;
 use Modules\Channel\Models\PayProduct;
 use Modules\Channel\Models\PayTemplate;
 use Modules\Channel\Models\PayTemplateItem;
-use Modules\Channel\Exceptions\ChannelBusinessException;
 use Modules\Channel\Services\User\UserService;
+use Modules\Common\Errors\Errors;
 
 class PayTemplateController extends CatchController
 {
     public function __construct(protected readonly PayTemplate $payTemplate,protected readonly PayTemplateItem $payTemplateItem,protected readonly PayProduct $payProduct)
     {
-        
+
     }
 
 
@@ -41,7 +41,7 @@ class PayTemplateController extends CatchController
             'uid','=',$uid
         ]];
         if($name){
-            $where[] = ['name','like','%'.$name.'%']; 
+            $where[] = ['name','like','%'.$name.'%'];
         }
         return $this->payTemplate->orderBy('id','desc')->where($where)->paginate(20);
     }
@@ -117,7 +117,7 @@ class PayTemplateController extends CatchController
             $data[] = [
                 'pay_template_id'=>$pay_template_info->id,'pay_product_id'=>$product_info->id,
                 'is_first_pay'=>$option['type'] == 'FIRST_COIN' ?1:0,'is_default'=>$option['price'] == $default_optioin ?1:0,
-                'status'=>1,'sequence'=>$option['sequence'],'created_at'=>Carbon::now(),'updated_at'=>Carbon::now()  
+                'status'=>1,'sequence'=>$option['sequence'],'created_at'=>Carbon::now(),'updated_at'=>Carbon::now()
             ];
         }
 
@@ -151,7 +151,7 @@ class PayTemplateController extends CatchController
         ->get();
         $type_list = collect($this->optionTypeList());
         foreach($pay_template_item as $item){
-            
+
             if($item->type == 'COIN' && $item->is_first_pay == 1){
                 $item->type == 'FIRST_COIN';
             }
@@ -162,7 +162,7 @@ class PayTemplateController extends CatchController
                 $item->charge_coin = $item->type_name;
             }
 
-            
+
             $item->sequence_text = $this->sequence_map[$item->sequence];
             $item->default_text = $item->is_default? '默认项':"非默认项";
         }
@@ -247,7 +247,7 @@ class PayTemplateController extends CatchController
                     $type = 'COIN';
                 }
                 $product_info = $this->getPayProduct($option['price'], $type,$option['given']);
-            
+
                 $pay_template_item = $this->payTemplateItem->where('pay_template_id',$id)->where('pay_product_id',$product_info->id)->first();
                 if($pay_template_item){
                     $pay_template_item->status = 1;
@@ -259,7 +259,7 @@ class PayTemplateController extends CatchController
                     $data = [
                         'pay_template_id'=>$id,'pay_product_id'=>$product_info->id,
                         'is_first_pay'=>$option['type'] == 'FIRST_COIN' ?1:0,'is_default'=>$option['price'] == $default_optioin ?1:0,
-                        'status'=>1,'sequence'=>$option['sequence'],'created_at'=>Carbon::now(),'updated_at'=>Carbon::now()  
+                        'status'=>1,'sequence'=>$option['sequence'],'created_at'=>Carbon::now(),'updated_at'=>Carbon::now()
                     ];
                     $this->payTemplateItem->insert($data);
                 }
@@ -298,7 +298,7 @@ class PayTemplateController extends CatchController
         }
         $product_info = $this->getPayProduct($price,$type,$given);
         if($info->pay_product_id == $product_info->id){
-            $info->is_first_pay = $is_first_pay; 
+            $info->is_first_pay = $is_first_pay;
             $info->is_default = $is_default;
             $info->save();
         }else{
@@ -307,7 +307,7 @@ class PayTemplateController extends CatchController
             $data = [
                 'pay_template_id'=>$info->pay_template_id,'pay_product_id'=>$product_info->id,
                 'is_first_pay'=>$is_first_pay,'is_default'=>$is_default,
-                'status'=>1,'sequence'=>$sequence,'created_at'=>Carbon::now(),'updated_at'=>Carbon::now()  
+                'status'=>1,'sequence'=>$sequence,'created_at'=>Carbon::now(),'updated_at'=>Carbon::now()
             ];
             $this->payTemplateItem->insert($data);
         }

+ 2 - 2
modules/Channel/Http/Controllers/UserMiniprogramController.php

@@ -4,9 +4,9 @@ namespace Modules\Channel\Http\Controllers;
 
 use Catch\Base\CatchController;
 use Illuminate\Http\Request;
-use Modules\User\Models\User;
-use Modules\Channel\Models\UserHasMiniprograms;
 use Log;
+use Modules\Channel\Models\UserHasMiniprograms;
+use Modules\User\Models\User;
 
 class UserMiniprogramController extends CatchController
 {

+ 1 - 1
modules/Channel/Http/Controllers/WechatMinprogramUserController.php

@@ -10,8 +10,8 @@
 namespace Modules\Channel\Http\Controllers;
 
 use Catch\Base\CatchController;
-use Illuminate\Http\Request;
 use Catch\Exceptions\FailedException;
+use Illuminate\Http\Request;
 use Modules\Channel\Services\WechatMinprogram\WechatMinprogramUserService;
 use Modules\User\Http\Controllers\UserTrait;
 

+ 1 - 3
modules/Channel/Models/PayTemplate.php

@@ -2,15 +2,13 @@
 
 namespace Modules\Channel\Models;
 
-use Catch\Base\CatchModel as Model;
-
 
 class PayTemplate extends BaseModel
 {
     protected $table = 'pay_templates';
 
     protected $fillable = [
-        'id', 'name', 'uid','status', 'created_at', 'updated_at', 
+        'id', 'name', 'uid','status', 'created_at', 'updated_at',
     ];
 
 }

+ 1 - 3
modules/Channel/Models/PayTemplateItem.php

@@ -2,15 +2,13 @@
 
 namespace Modules\Channel\Models;
 
-use Catch\Base\CatchModel as Model;
-
 
 class PayTemplateItem extends BaseModel
 {
     protected $table = 'pay_template_items';
 
     protected $fillable = [
-        'id', 'pay_template_id', 'pay_product_id', 'is_first_pay', 'is_default', 'status', 'sequence', 'created_at', 'updated_at', 
+        'id', 'pay_template_id', 'pay_product_id', 'is_first_pay', 'is_default', 'status', 'sequence', 'created_at', 'updated_at',
     ];
 
 }

+ 0 - 1
modules/Channel/Services/Notice/NoitceTypeService.php

@@ -10,7 +10,6 @@
 
 namespace Modules\System\Services\Notice;
 
-use Illuminate\Support\Facades\DB;
 use Modules\System\Models\NoticeTypes;
 
 class NoitceTypeService

+ 1 - 2
modules/Channel/Services/Notice/NoticesService.php

@@ -14,11 +14,10 @@ use Catch\Exceptions\FailedException;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\DB;
+use Modules\Permissions\Models\Roles;
 use Modules\System\Models\Notices;
 use Modules\System\Models\UserNotice;
-use Modules\Permissions\Models\Roles;
 use Modules\User\Models\User;
-use PharIo\Manifest\Author;
 
 class NoticesService
 {

+ 7 - 2
modules/Common/Errors/Errors.php

@@ -10,7 +10,7 @@ class Errors
     public const  PARAM_ERROR= [500004, '参数错误'];
     public const  NO_OPERATE_PERMISSION= [500007, '用户无操作权限'];
     public const  VIDEO_NOT_EXISTS= [500008, '视频不存在'];
-    public const  MINIPROGRAM_STATUS_ERROR= [500005, '小程序未启用'];
+    public const  MINIPROGRAM_STATUS_ERROR= [50005, '小程序未启用'];
     public const  PAY_TEMPLATE_EXISTS_ERROR= [500006, '充值模板已经存在'];
     public const  PAY_TEMPLATE_GIVEN_TOO_MUCH= [500007, '赠送不能超过金额3倍'];
     public const  PAY_TEMPLATE_NOT_EXISTS_ERROR= [500008, '充值模板不存在'];
@@ -21,10 +21,15 @@ class Errors
     public const  CALLBACK_RATE_TIME_RANGE_ERROR= [500102, '回传比例时间区间不合法'];
     public const  CALLBACK_RECORD_NOT_EXISTS= [500103, '回传日志不存在'];
     public const  CALLBACK_RECORD_LOG_ERROR= [500104, '回传日志补传信息缺失'];
-    public const  JULIANG_ACCOUNT_PROMOTION_UNIQUE = [500105, '巨量广告账户只允许绑定一个推广'];
+    public const  JULIANG_ACCOUNT_PROMOTION_UNIQUE = [500105, '巨量广告账户只允许绑定一个推广,请先解绑'];
     public const  JULIANG_ACCOUNT_CONFIG_NOT_EXISTS = [500106, '回传配置不存在'];
     public const  TIXIAN_YUE_BUZU = [500201, '提现余额不足'];
     public const  BANK_CARD_STATUS_ERROR = [500202, '银行卡不存在或当前状态不可提现'];
     public const  TIXIAN_RECORD_NOT_EXISTS = [500203, '提现记录不存在'];
     public const  TIXIAN_ONLY_ONCE_EVERY_DAY = [500204, '每天只能提现一次'];
+    public const  OPERATION_FIRST_PAGE_LIST_NOT_EXISTS = [500301, '首页列表配置项不存在'];
+    public const  VIDEO_SERIES_NOT_EXISTS = [500302, '剧集不存在'];
+    public const REQUEST_HTTP_STATUS_ERROR = [500401, '请求上游接口返回http状态码有误'];
+    public const REQUEST_CODE_STATUS_ERROR = [500402, '请求上游接口返回code状态码有误'];
+    public const SYNC_WECHAT_NOT_OK = [500302, '剧集没有成功同步到微信'];
 }

+ 0 - 1
modules/Common/Http/Controllers/ModuleController.php

@@ -5,7 +5,6 @@ namespace Modules\Common\Http\Controllers;
 use Catch\Base\CatchController;
 use Illuminate\Http\Request;
 use Modules\Common\Repository\Options\Modules;
-use Modules\User\Models\User;
 
 class ModuleController extends CatchController
 {

+ 0 - 4
modules/Common/Providers/CommonServiceProvider.php

@@ -2,12 +2,8 @@
 
 namespace Modules\Common\Providers;
 
-use Catch\CatchAdmin;
 use Catch\Providers\CatchModuleServiceProvider;
 use Modules\Common\Support\Trace\TraceContext;
-use Modules\User\Events\Login;
-use Modules\User\Listeners\Login as LoginListener;
-use Modules\User\Middlewares\OperatingMiddleware;
 
 class CommonServiceProvider extends CatchModuleServiceProvider
 {

+ 4 - 0
modules/Common/Repository/Options/CommonParams.php

@@ -21,6 +21,10 @@ class CommonParams implements OptionInterface
              * 小程序类型
              */
             'miniprogramType' => $commonConfig['miniprogramType'],
+            /**
+             * 首页列表类型
+             */
+            'firstPageListType' => $commonConfig['firstPageListType'],
         ];
     }
 }

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

@@ -0,0 +1,39 @@
+<?php
+/**
+ *
+ * @file:BaseService.php
+ * @Date: 2023/6/7
+ * @Time: 14:28
+ */
+
+
+namespace Modules\Common\Services;
+
+use Catch\Exceptions\FailedException;
+
+class BaseService
+{
+    public static function getMiniProgramType()
+    {
+        return [
+            ['value' => 1, 'name' => "微信小程序"],
+            ['value' => 2, 'name' => "抖音小程序"],
+        ];
+    }
+
+    public static function getNavPagesType()
+    {
+        return [
+            ['value' => 1, 'name' => "排行榜"],
+            ['value' => 2, 'name' => "最新"],
+        ];
+    }
+
+    protected static function throwErrMsg($msg, $code = "")
+    {
+        if ($code) {
+            throw  new FailedException($msg, $code);
+        }
+        throw  new FailedException($msg);
+    }
+}

+ 53 - 0
modules/Common/Services/CommonConfigService.php

@@ -0,0 +1,53 @@
+<?php
+
+namespace Modules\Common\Services;
+
+class CommonConfigService
+{
+    /**
+     * 获取首页列表类型映射
+     * @return mixed[]
+     * <pre>
+     * [
+     *   1 => [
+     *      'label' => 'xxx',
+     *      'value' => 1,
+     *   ],
+     * ]
+     * </pre>
+     */
+    public static function getFirstPageListTypeMap() {
+        return collect(config('common.common.firstPageListType'))->keyBy('value')->toArray();
+    }
+    /**
+     * 获取小程序类型映射
+     * @return mixed[]
+     * <pre>
+     * [
+     *   1 => [
+     *      'label' => 'xxx',
+     *      'value' => 1,
+     *   ],
+     * ]
+     * </pre>
+     */
+    public static function getMiniprogramTypeMap() {
+        return collect(config('common.common.miniprogramType'))->keyBy('value')->toArray();
+    }
+
+    /**
+     * 获取支付类型映射
+     * @return mixed[]
+     * <pre>
+     * [
+     *   1 => [
+     *      'label' => 'xxx',
+     *      'value' => 1,
+     *   ],
+     * ]
+     * </pre>
+     */
+    public static function getPayTypeMap() {
+        return collect(config('common.common.payType'))->keyBy('value')->toArray();
+    }
+}

+ 1 - 1
modules/Common/Support/Upload/Uploader.php

@@ -3,8 +3,8 @@
 namespace Modules\Common\Support\Upload;
 
 use Catch\Exceptions\FailedException;
-use Modules\Common\Support\Upload\Uses\LocalUpload;
 use Illuminate\Http\UploadedFile;
+use Modules\Common\Support\Upload\Uses\LocalUpload;
 
 class Uploader
 {

+ 27 - 14
modules/Common/config/common.php

@@ -2,14 +2,14 @@
 
 return [
     'logos' => [
-        '2' => 'https://zhuishuyun.oss-cn-hangzhou.aliyuncs.com/channel/logo/DOUYIN.png',
-        '1' => 'https://zhuishuyun.oss-cn-hangzhou.aliyuncs.com/channel/logo/WEIXIN.png',
-        'QQ' => 'https://zhuishuyun.oss-cn-hangzhou.aliyuncs.com/channel/logo/QQ.png',
+        '2' => 'https://minifile-cdn.zvyhjkx.com/logo/DOUYIN.png',
+        '1' => 'https://minifile-cdn.zvyhjkx.com/logo/WEIXIN.png',
+        'QQ' => 'https://minifile-cdn.zvyhjkx.com/logo/QQ.png',
     ],
     /**
      * 短剧管理后台的域名
      */
-    'duanjuManageDomain' => env('COMMON_DUANJU_MANAGE_DOMAIN', 'http://m.test.duanju.dududus.com'),
+    'duanjuManageDomain' => env('COMMON_DUANJU_MANAGE_DOMAIN', 'https://manage.zhiyupa.com'),
     /**
      * 模块和小程序type值的映射
      */
@@ -22,16 +22,16 @@ return [
      */
     'payType' => [
         [
-            'key' => 1,
-            'val' => '易宝支付',
+            'label' => '易宝支付',
+            'value' => 1,
         ],
         [
-            'key' => 2,
-            'val' => '微信原生支付',
+            'label' => '微信原生支付',
+            'value' => 2,
         ],
         [
-            'key' => 3,
-            'val' => '抖音支付'
+            'label' => '抖音支付',
+            'value' => 2,
         ],
     ],
     /**
@@ -39,12 +39,25 @@ return [
      */
     'miniprogramType' => [
         [
-            'key' => 1,
-            'val' => '微信'
+            'value' => 1,
+            'label' => '微信'
         ],
         [
-            'key' => 2,
-            'val' => '抖音'
+            'value' => 2,
+            'label' => '抖音'
         ]
     ],
+    /**
+     * 首页列表分类
+     */
+    'firstPageListType' => [
+        [
+            'label' => '本周精选',
+            'value' => 1
+        ],
+        [
+            'label' => '优选好剧',
+            'value' => 2
+        ],
+    ],
 ];

+ 2 - 1
modules/Common/routes/route.php

@@ -6,6 +6,7 @@ use Modules\Common\Http\Controllers\OptionController;
 use Modules\Common\Http\Controllers\Qiniu\CallbackController;
 use Modules\Common\Http\Controllers\Qiniu\ImageUploadController;
 use Modules\Common\Http\Controllers\UploadController;
+use Modules\Permissions\Middlewares\PermissionGate;
 
 /*
 |--------------------------------------------------------------------------
@@ -33,7 +34,7 @@ Route::prefix('qiniu')->group(function() {
     Route::get('upload/token', [CallbackController::class, 'uploadToken']);
     Route::get('downloadUrl', [CallbackController::class, 'downloadUrl']);
     Route::post('upload/callback', [CallbackController::class, 'callback'])->withoutMiddleware(config('catch.route.middlewares'));
-    Route::post('upload/image', [ImageUploadController::class, 'uploadImage']);
+    Route::post('upload/image', [ImageUploadController::class, 'uploadImage'])->withoutMiddleware([PermissionGate::class]);
 });
 
 

+ 0 - 1
modules/CpManage/Models/Cp/Cps.php

@@ -13,7 +13,6 @@ namespace Modules\CpManage\Models\Cp;
 use Catch\Exceptions\FailedException;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Support\Facades\DB;
-use Modules\CpManage\Services\CpManage\CpService;
 
 class Cps extends Model
 {

+ 0 - 1
modules/CpManage/Providers/CpManageServiceProvider.php

@@ -4,7 +4,6 @@ namespace Modules\CpManage\Providers;
 
 
 use Catch\Providers\CatchModuleServiceProvider;
-use Modules\CpManage\Middlewares\CpManageGate;
 
 class CpManageServiceProvider extends CatchModuleServiceProvider
 {

+ 0 - 2
modules/Develop/Http/Controllers/ModuleController.php

@@ -3,14 +3,12 @@
 namespace Modules\Develop\Http\Controllers;
 
 use Catch\Base\CatchController;
-use Catch\CatchAdmin;
 use Catch\Contracts\ModuleRepositoryInterface;
 use Catch\Exceptions\FailedException;
 use Catch\Support\Module\ModuleRepository;
 use Illuminate\Http\Request;
 use Illuminate\Support\Collection;
 use Illuminate\Support\Facades\Storage;
-use Modules\Develop\Support\Generate\Module;
 use Modules\Develop\Support\ModuleInstall;
 
 class ModuleController extends CatchController

+ 1 - 1
modules/Develop/Models/Schemas.php

@@ -7,8 +7,8 @@ use Catch\Enums\Status;
 use Exception;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Support\Facades\DB;
-use Modules\Develop\Support\Generate\Create\Schema;
 use Illuminate\Support\Facades\Schema as SchemaFacade;
+use Modules\Develop\Support\Generate\Create\Schema;
 
 class Schemas extends CatchModel
 {

+ 0 - 1
modules/Develop/Providers/DevelopServiceProvider.php

@@ -2,7 +2,6 @@
 
 namespace Modules\Develop\Providers;
 
-use Catch\CatchAdmin;
 use Catch\Events\Module\Created;
 use Catch\Events\Module\Deleted;
 use Catch\Providers\CatchModuleServiceProvider;

+ 1 - 1
modules/Develop/Support/Generate/Create/Model.php

@@ -14,11 +14,11 @@ declare(strict_types=1);
 namespace Modules\Develop\Support\Generate\Create;
 
 use Catch\CatchAdmin;
+use Illuminate\Database\Eloquent\Model as EloquentModel;
 use Illuminate\Database\Eloquent\SoftDeletes;
 use Illuminate\Support\Facades\File;
 use Illuminate\Support\Facades\Schema as SchemaFacade;
 use Illuminate\Support\Str;
-use Illuminate\Database\Eloquent\Model as EloquentModel;
 
 class Model extends Creator
 {

+ 1 - 1
modules/Develop/Support/Generate/Create/Schema.php

@@ -17,8 +17,8 @@ use Catch\CatchAdmin;
 use Exception;
 use Illuminate\Database\Schema\Blueprint;
 use Illuminate\Support\Facades\File;
-use Illuminate\Support\Str;
 use Illuminate\Support\Facades\Schema as MigrationSchema;
+use Illuminate\Support\Str;
 
 /**
  * schema

+ 1 - 1
modules/Develop/database/migrations/Schemas.php

@@ -1,8 +1,8 @@
 <?php
 
 use Illuminate\Database\Migrations\Migration;
-use Illuminate\Support\Facades\Schema;
 use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
 
 return new class () extends Migration {
     public function up()

+ 1 - 1
modules/Develop/routes/route.php

@@ -1,8 +1,8 @@
 <?php
 
 use Illuminate\Support\Facades\Route;
-use Modules\Develop\Http\Controllers\ModuleController;
 use Modules\Develop\Http\Controllers\GenerateController;
+use Modules\Develop\Http\Controllers\ModuleController;
 use Modules\Develop\Http\Controllers\SchemaController;
 
 Route::apiResource('module', ModuleController::class);

+ 5 - 4
modules/Develop/views/generate/components/codeGen.vue

@@ -55,12 +55,13 @@
   </el-card>
 </template>
 <script lang="ts" setup>
-import { watch, onMounted, reactive, ref } from 'vue'
-import { useGenerateStore } from './store'
-import type { FormInstance } from 'element-plus'
+import {onMounted, reactive, ref} from 'vue'
+import {useGenerateStore} from './store'
+import type {FormInstance} from 'element-plus'
 import http from '/admin/support/http'
 import Structure from './structure.vue'
-import { useRouter } from 'vue-router'
+import {useRouter} from 'vue-router'
+
 const generateStore = useGenerateStore()
 const gen = reactive(generateStore.getCodeGen)
 

+ 1 - 1
modules/Develop/views/generate/components/store.ts

@@ -1,4 +1,4 @@
-import { defineStore } from 'pinia'
+import {defineStore} from 'pinia'
 
 /**
  * 表结构信息

+ 3 - 3
modules/Develop/views/generate/components/structure.vue

@@ -53,9 +53,9 @@
   </div>
 </template>
 <script lang="ts" setup>
-import { computed } from 'vue'
-import { useGenerateStore } from './store'
-import { Delete } from '@element-plus/icons-vue'
+import {computed} from 'vue'
+import {useGenerateStore} from './store'
+import {Delete} from '@element-plus/icons-vue'
 
 const generateStore = useGenerateStore()
 

+ 1 - 4
modules/Develop/views/generate/index.vue

@@ -4,7 +4,4 @@
   </div>
 </template>
 <script lang="ts" setup>
-import { ref } from 'vue'
-
-import CodeGen from './components/codeGen.vue'
-</script>
+import CodeGen from './components/codeGen.vue'</script>

+ 3 - 3
modules/Develop/views/module/create.vue

@@ -45,10 +45,10 @@
 </template>
 
 <script lang="ts" setup>
-import { useCreate } from '/admin/composables/curd/useCreate'
-import { useShow } from '/admin/composables/curd/useShow'
+import {useCreate} from '/admin/composables/curd/useCreate'
+import {useShow} from '/admin/composables/curd/useShow'
 
-import { onMounted } from 'vue'
+import {onMounted} from 'vue'
 
 const props = defineProps({
   primary: String | Number,

+ 4 - 4
modules/Develop/views/module/index.vue

@@ -47,12 +47,12 @@
 </template>
 
 <script lang="ts" setup>
-import { computed, onMounted, ref } from 'vue'
+import {computed, onMounted, ref} from 'vue'
 import Create from './create.vue'
 import Install from './install.vue'
-import { useGetList } from '/admin/composables/curd/useGetList'
-import { useDestroy } from '/admin/composables/curd/useDestroy'
-import { useOpen } from '/admin/composables/curd/useOpen'
+import {useGetList} from '/admin/composables/curd/useGetList'
+import {useDestroy} from '/admin/composables/curd/useDestroy'
+import {useOpen} from '/admin/composables/curd/useOpen'
 
 const api = 'module'
 

+ 3 - 3
modules/Develop/views/module/install.vue

@@ -41,10 +41,10 @@
 </template>
 
 <script lang="ts" setup>
-import { useCreate } from '/admin/composables/curd/useCreate'
+import {useCreate} from '/admin/composables/curd/useCreate'
 
-import { onMounted } from 'vue'
-import { Code } from '/admin/enum/app'
+import {onMounted} from 'vue'
+import {Code} from '/admin/enum/app'
 import Message from '/admin/support/message'
 
 const { formData, form, loading, submitForm, close } = useCreate('module/install')

+ 1 - 1
modules/Develop/views/router.ts

@@ -1,4 +1,4 @@
-import { RouteRecordRaw } from 'vue-router'
+import {RouteRecordRaw} from 'vue-router'
 
 // @ts-ignore
 const router: RouteRecordRaw[] = [

+ 2 - 2
modules/Develop/views/schema/create.vue

@@ -5,10 +5,10 @@
   </div>
 </template>
 <script lang="ts" setup>
-import { ref, watch } from 'vue'
+import {ref, watch} from 'vue'
 import Schema from './steps/schema.vue'
 import Structure from './steps/structure.vue'
-import { useSchemaStore } from './store'
+import {useSchemaStore} from './store'
 
 const schemaStore = useSchemaStore()
 

+ 4 - 4
modules/Develop/views/schema/index.vue

@@ -52,12 +52,12 @@
 </template>
 
 <script lang="ts" setup>
-import { computed, onMounted, ref } from 'vue'
+import {computed, onMounted, ref} from 'vue'
 import Create from './create.vue'
 import Show from './show.vue'
-import { useGetList } from '/admin/composables/curd/useGetList'
-import { useDestroy } from '/admin/composables/curd/useDestroy'
-import { useOpen } from '/admin/composables/curd/useOpen'
+import {useGetList} from '/admin/composables/curd/useGetList'
+import {useDestroy} from '/admin/composables/curd/useDestroy'
+import {useOpen} from '/admin/composables/curd/useOpen'
 
 const schemaVisible = ref<boolean>(false)
 

+ 2 - 1
modules/Develop/views/schema/show.vue

@@ -16,7 +16,8 @@
 </template>
 
 <script lang="ts" setup>
-import { useShow } from '/admin/composables/curd/useShow'
+import {useShow} from '/admin/composables/curd/useShow'
+
 const props = defineProps({
   id: {
     type: Number,

+ 3 - 3
modules/Develop/views/schema/steps/schema.vue

@@ -66,9 +66,9 @@
   </div>
 </template>
 <script lang="ts" setup>
-import { reactive, computed, ref, unref } from 'vue'
-import { useSchemaStore } from '../store'
-import type { FormInstance } from 'element-plus'
+import {computed, ref, unref} from 'vue'
+import {useSchemaStore} from '../store'
+import type {FormInstance} from 'element-plus'
 
 const schemaStore = useSchemaStore()
 schemaStore.start()

+ 5 - 5
modules/Develop/views/schema/steps/structure.vue

@@ -88,13 +88,13 @@
   </div>
 </template>
 <script lang="ts" setup>
-import { computed, onMounted, Ref, ref } from 'vue'
-import { useSchemaStore, Structure } from '../store'
-import { Delete, Plus, Edit } from '@element-plus/icons-vue'
-import type { FormInstance } from 'element-plus'
+import {computed, onMounted, Ref, ref} from 'vue'
+import {Structure, useSchemaStore} from '../store'
+import {Delete, Edit, Plus} from '@element-plus/icons-vue'
+import type {FormInstance} from 'element-plus'
 import Message from '/admin/support/message'
 import http from '/admin/support/http'
-import { Code } from '/admin/enum/app'
+import {Code} from '/admin/enum/app'
 import Sortable from 'sortablejs'
 
 const schemaStore = useSchemaStore()

+ 1 - 1
modules/Develop/views/schema/store/index.ts

@@ -1,4 +1,4 @@
-import { defineStore } from 'pinia'
+import {defineStore} from 'pinia'
 
 /**
  * 表信息

+ 1 - 3
modules/Jiesuan/Http/Controllers/VerifyBankInfoController.php

@@ -10,8 +10,6 @@
 namespace Modules\Jiesuan\Http\Controllers;
 
 use Catch\Base\CatchController;
-
-use Catch\Exceptions\FailedException;
 use Illuminate\Http\Request;
 use Modules\Jiesuan\Http\Requests\VerifyCheckRequest;
 use Modules\Jiesuan\Services\BusinessmanService;
@@ -44,7 +42,7 @@ class VerifyBankInfoController extends CatchController
 
     public function check(VerifyCheckRequest $request)
     {
-       
+
         $param = [
             'status' => $request->input('status'),
             'checked_user' => [

+ 0 - 1
modules/Jiesuan/Providers/JiesuanServiceProvider.php

@@ -2,7 +2,6 @@
 
 namespace Modules\Jiesuan\Providers;
 
-use Catch\CatchAdmin;
 use Catch\Providers\CatchModuleServiceProvider;
 
 class JiesuanServiceProvider extends CatchModuleServiceProvider

+ 0 - 1
modules/Jiesuan/routes/route.php

@@ -4,7 +4,6 @@ use Illuminate\Support\Facades\Route;
 use Modules\Jiesuan\Http\Controllers\BankAccountController;
 use Modules\Jiesuan\Http\Controllers\FinanceCheckController;
 use Modules\Jiesuan\Http\Controllers\JiesuanController;
-use PhpOffice\PhpSpreadsheet\Calculation\Statistical\Distributions\F;
 
 
 Route::prefix('jiesuanManage')->group(function () {

+ 7 - 6
modules/Manage/Http/Controllers/MiniprogramController.php

@@ -6,16 +6,16 @@ use Catch\Exceptions\FailedException;
 use Illuminate\Routing\Controller;
 use Catch\Base\CatchController;
 use Illuminate\Http\Request;
+use Illuminate\Support\Facades\DB;
+use Modules\Channel\Exceptions\ChannelBusinessException;
+use Modules\Channel\Models\UserHasMiniprograms;
+use Modules\Channel\Services\User\UserService;
+use Modules\Common\Errors\Errors;
 use Modules\Manage\Enmus\MiniprogramType;
 use Modules\Manage\Http\Requests\MiniprogramRequest;
 use Modules\Manage\Http\Requests\MiniprogramUpdateRequest;
 use Modules\Manage\Models\Miniprogram;
-use Modules\Channel\Models\UserHasMiniprograms;
-use Illuminate\Support\Facades\DB;
 use Modules\User\Http\Controllers\UserTrait;
-use Modules\Common\Errors\Errors;
-use Modules\Channel\Exceptions\ChannelBusinessException;
-use Modules\Channel\Services\User\UserService;
 
 
 class MiniprogramController extends CatchController
@@ -68,6 +68,7 @@ class MiniprogramController extends CatchController
             ->select('miniprogram.*')
             ->paginate($page_size);
         }
+
         foreach($result as $item){
             $item->type_name = MiniprogramType::from($item->type)->name();
             $item->status_name = $item->status == 1 ?'启用':'禁用';
@@ -109,7 +110,7 @@ class MiniprogramController extends CatchController
             $validate_result['pay_merchant_id'] = 0;
             $validate_result['pay_merchant_info'] = [];
         }
-        
+
         return $this->miniprogram->create($validate_result)->toArray();
 
     }

+ 5 - 4
modules/Manage/Http/Controllers/PayConfigController.php

@@ -6,6 +6,7 @@ use Catch\Base\CatchController;
 use Illuminate\Foundation\Validation\ValidatesRequests;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\DB;
+use Modules\Common\Services\CommonConfigService;
 
 /**
  * 支付配置管理
@@ -53,11 +54,11 @@ class PayConfigController extends CatchController
             $result =  $sql->paginate($request->input('limit', 15));
         }
 
-        $payTypeMap = collect($commonConfig['payType'])->keyBy('key');
-        $miniprogramTypeMap = collect($commonConfig['miniprogramType'])->keyBy('key');
+        $payTypeMap = CommonConfigService::getPayTypeMap();
+        $miniprogramTypeMap = CommonConfigService::getMiniprogramTypeMap();
         foreach ($result as $item) {
-            $item->pay_type_str = $payTypeMap[$item->pay_type]['val'] ?? '';
-            $item->miniprogram_type_str = $miniprogramTypeMap[$item->miniprogram_type]['val'] ?? '';
+            $item->pay_type_str = $payTypeMap[$item->pay_type]['label'] ?? '';
+            $item->miniprogram_type_str = $miniprogramTypeMap[$item->miniprogram_type]['label'] ?? '';
         }
 
         return $result;

+ 1 - 1
modules/Manage/Http/Requests/MiniprogramRequest.php

@@ -3,8 +3,8 @@
 namespace Modules\Manage\Http\Requests;
 
 use Illuminate\Foundation\Http\FormRequest;
-use Modules\Manage\Enmus\MiniprogramType;
 use Illuminate\Validation\Rule;
+use Modules\Manage\Enmus\MiniprogramType;
 
 class MiniprogramRequest extends FormRequest
 {

+ 1 - 1
modules/Manage/Http/Requests/MiniprogramUpdateRequest.php

@@ -3,8 +3,8 @@
 namespace Modules\Manage\Http\Requests;
 
 use Illuminate\Foundation\Http\FormRequest;
-use Modules\Manage\Enmus\MiniprogramType;
 use Illuminate\Validation\Rule;
+use Modules\Manage\Enmus\MiniprogramType;
 
 class MiniprogramUpdateRequest extends FormRequest
 {

+ 0 - 1
modules/Manage/Providers/ManageServiceProvider.php

@@ -2,7 +2,6 @@
 
 namespace Modules\Manage\Providers;
 
-use Catch\CatchAdmin;
 use Catch\Providers\CatchModuleServiceProvider;
 
 class ManageServiceProvider extends CatchModuleServiceProvider

+ 31 - 0
modules/Manage/Services/WechatMiniprogramService.php

@@ -0,0 +1,31 @@
+<?php
+
+namespace Modules\Manage\Services;
+
+use Illuminate\Support\Facades\Redis;
+
+class WechatMiniprogramService
+{
+    /**
+     * 微信短剧提审appid
+     * @return string
+     */
+    public static function getDuanjuCheckAppid() {
+        return config('manage.miniprogram.duanjuWechatCheck.appid');
+    }
+
+    /**
+     * 微信短剧提审小程序 accessToken
+     * @param string|null $appid
+     * @return string
+     */
+    public static function getDuanjuCheckAccessToken($appid=null) {
+        $checkAppid = $appid ?: self::getDuanjuCheckAppid();
+
+        return Redis::get(self::getAccessTokenRedisKey($checkAppid));
+    }
+
+    private static function getAccessTokenRedisKey($appid) {
+        return 'dj.miniWechat.at.' . $appid;
+    }
+}

+ 7 - 2
modules/Manage/config/miniprogram.php

@@ -4,9 +4,14 @@
  * 小程序配置
  */
 return [
-    
+
     'typelist'=>[
         'WEIXIN','BYTECODE'
     ],
-    
+    /**
+     * 微信短剧提审小程序
+     */
+    'duanjuWechatCheck' => [
+        'appid' => env('MINIPROGRAM_DUANJU_WECHATCHEECK_APPID', 'wx86822355ccd03a78')
+    ]
 ];

+ 0 - 1
modules/Manage/routes/route.php

@@ -1,7 +1,6 @@
 <?php
 
 use Illuminate\Support\Facades\Route;
-
 use Modules\Manage\Http\Controllers\MiniprogramController;
 use Modules\Manage\Http\Controllers\PayConfigController;
 

+ 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);
+    }
+}

+ 71 - 0
modules/Operation/Http/Controllers/ChannelController.php

@@ -0,0 +1,71 @@
+<?php
+/**
+ *
+ * @file:ChannelController.php
+ * @Date: 2023/6/8
+ * @Time: 11:16
+ */
+
+
+namespace Modules\Operation\Http\Controllers;
+
+use Catch\Base\CatchController;
+use Catch\Exceptions\FailedException;
+use Illuminate\Contracts\Pagination\LengthAwarePaginator;
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Database\Eloquent\Collection;
+use Illuminate\Http\Request;
+use Modules\Operation\Http\Requests\AddChannelRequest;
+use Modules\Operation\Service\ChannelServic;
+
+class ChannelController extends CatchController
+{
+    /**
+     *   频道列表
+     * name: list
+     * @param Request $request
+     * @return LengthAwarePaginator|Builder[]|Collection
+     * date 2023/06/08 14:03
+     */
+    public function list(Request $request)
+    {
+        $param = $request->all();
+        return ChannelServic::ChannelList($param);
+    }
+
+    /**
+     *  编辑
+     * name: add
+     * @param AddChannelRequest $request
+     * @return string|void
+     * date 2023/06/08 15:18
+     */
+    public function add(AddChannelRequest $request)
+    {
+        $param = $request->validated();
+        return ChannelServic::addChannel($param);
+    }
+
+    /*
+    *  更新状态
+    */
+    public function enableStatus($id)
+    {
+        if ($id <  1){
+            throw  new  FailedException("id不正确");
+        }
+        return ChannelServic::enableChannel($id);
+    }
+
+
+    public function setting($id,Request $request){
+        if ($id <  1){
+            throw  new  FailedException("id不正确");
+        }
+        if(!$request->has('duanjus')){
+            throw  new  FailedException("配置项必填");
+        }
+        $set = $request->input('duanjus', []);
+        return ChannelServic::setChannel($id,$set);
+    }
+}

+ 119 - 0
modules/Operation/Http/Controllers/FirstPageController.php

@@ -0,0 +1,119 @@
+<?php
+
+namespace Modules\Operation\Http\Controllers;
+
+use Catch\Base\CatchController;
+use Illuminate\Foundation\Validation\ValidatesRequests;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\DB;
+use Modules\Common\Errors\Errors;
+use Modules\Common\Exceptions\CommonBusinessException;
+use Modules\Common\Services\CommonConfigService;
+use Modules\User\Http\Controllers\UserTrait;
+
+class FirstPageController extends CatchController
+{
+    use ValidatesRequests;
+    use UserTrait;
+
+    /**
+     *  首页列表
+     */
+    public function list(Request $request) {
+        $firstPageListTypeMap = CommonConfigService::getFirstPageListTypeMap();
+        $miniprogramTypeMap = CommonConfigService::getMiniprogramTypeMap();
+        $result = DB::table('first_pages')
+            ->orderBy('id', 'desc')
+            ->paginate($request->input('limit', 15));
+        foreach ($result as $item) {
+            $item->type_str = $firstPageListTypeMap[$item->type]['label'] ?? '';
+            $item->duanjus = collect(\json_decode($item->duanjus, true))->sortBy('sort')->values();
+            $item->miniprogram_type_str = $miniprogramTypeMap[$item->miniprogram_type]['label'] ?? '';
+        }
+        return $result;
+    }
+
+    /**
+     * 添加配置
+     * @param Request $request
+     * @return string
+     * @throws \Illuminate\Validation\ValidationException
+     */
+    public function add(Request $request) {
+        $this->validate($request, [
+            'type' => 'required|in:1,2',
+            'status' => 'required|in:0,1',
+            'miniprogram_type' => 'required|in:1,2'
+        ]);
+
+        $now = date('Y-m-d H:i:s');
+        if(1 == $request->input('status')) {
+            DB::table('first_pages')
+                ->where([
+                    'type' => $request->input('type'),
+                    'miniprogram_type' => $request->input('miniprogram_type')
+                ])
+                ->update(['status' => 0, 'updated_at' => $now]);
+        }
+
+        DB::table('first_pages')
+            ->insert([
+                'type' => $request->input('type'),
+                'status' => $request->input('status'),
+                'miniprogram_type' => $request->input('miniprogram_type'),
+                'created_at' => $now,
+                'updated_at' => $now,
+            ]);
+        return 'ok';
+    }
+
+    /**
+     * 开启配置,一个列表类型中只允许一个配置开启
+     * @param Request $request
+     * @return string
+     * @throws \Illuminate\Validation\ValidationException
+     */
+    public function enableStatus(Request $request) {
+        $this->validate($request, ['id' => 'required']);
+        $info = DB::table('first_pages')
+            ->where('id', $request->input('id'))
+            ->first();
+        if(!$info) {
+            CommonBusinessException::throwError(Errors::OPERATION_FIRST_PAGE_LIST_NOT_EXISTS);
+        }
+
+        $now = date('Y-m-d H:i:s');
+        DB::table('first_pages')
+            ->where([
+                'type' => $info->type,
+                'miniprogram_type' => $info->miniprogram_type,
+            ])
+            ->update(['status' => 0, 'updated_at' => $now]);
+        DB::table('first_pages')
+            ->where('id', $request->input('id'))
+            ->update(['status' => 1, 'updated_at' => $now]);
+        return 'ok';
+    }
+
+    /**
+     * 配置剧集
+     * @param Request $request
+     * @return string
+     * @throws \Illuminate\Validation\ValidationException
+     */
+    public function setConfig(Request $request) {
+        $this->validate($request, [
+            'id' => 'required',
+            'duanjus' => 'nullable|array',
+        ]);
+
+        $now = date('Y-m-d H:i:s');
+        DB::table('first_pages')
+            ->where('id', $request->input('id'))
+            ->update(['duanjus' => \json_encode($request->input('duanjus', [])),
+                'updated_at' => $now]);
+
+        return 'ok';
+    }
+}
+

+ 63 - 0
modules/Operation/Http/Requests/AddChannelRequest.php

@@ -0,0 +1,63 @@
+<?php
+/**
+ *
+ * @file:AddChannelRequest.php
+ * @Date: 2023/6/8
+ * @Time: 14:50
+ */
+
+
+namespace Modules\Operation\Http\Requests;
+
+use Illuminate\Foundation\Http\FormRequest;
+use Modules\Operation\Service\ChannelServic;
+
+class AddChannelRequest extends FormRequest
+{
+
+    public function rules(): array
+    {
+        return [
+            'status' => 'required|in:0,1',
+            'type' => [
+                'required',
+                'Integer',
+                "gt:0",
+                function ($attribute, $value, $fail) {
+                    $types = array_column(ChannelServic::getNavPagesType(),'value');
+                    if (!in_array($value,$types)) {
+                        $fail("频道类型不正确");
+                    }
+                },
+            ],
+            'miniprogram_type' => [
+                'required',
+                'Integer',
+                "gt:0",
+                function ($attribute, $value, $fail) {
+                    $types = array_column(ChannelServic::getNavPagesType(),'value');
+                    if (!in_array($value,$types)) {
+                        $fail("小程序类型不正确");
+                    }
+                },
+            ],
+
+
+        ];
+    }
+
+    /**
+     * messages
+     *
+     * @return string[]
+     */
+    public function messages(): array
+    {
+        return [
+            'type' => '频道类型不正确',
+            'miniprogram_type' => '小程序类型不正确',
+            'status' => '状态值不正确',
+        ];
+    }
+
+}

+ 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' => '状态值不正确',
+        ];
+    }
+
+}

+ 33 - 0
modules/Operation/Installer.php

@@ -0,0 +1,33 @@
+<?php
+
+namespace Modules\Operation;
+
+use Catch\Support\Module\Installer as ModuleInstaller;
+use Modules\Operation\Providers\OperationServiceProvider;
+use Modules\Video\Providers\VideoServiceProvider;
+
+class Installer extends ModuleInstaller
+{
+    protected function info(): array
+    {
+        // TODO: Implement info() method.
+        return [
+            'title' => '运营管理',
+            'name' => 'operation',
+            'path' => 'operation',
+            'keywords' => '运营管理',
+            'description' => '运营管理模块',
+            'provider' => OperationServiceProvider::class,
+        ];
+    }
+
+    protected function requirePackages(): void
+    {
+        // TODO: Implement requirePackages() method.
+    }
+
+    protected function removePackages(): void
+    {
+        // TODO: Implement removePackages() method.
+    }
+}

+ 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', 'sort','gender', 'img_url', 'status', 'created_at', 'updated_at',
+    ];
+
+}

+ 16 - 0
modules/Operation/Models/NavPages.php

@@ -0,0 +1,16 @@
+<?php
+
+namespace Modules\Operation\Models;
+
+use Modules\Common\Models\BaseModel;
+
+
+class NavPages extends BaseModel
+{
+    protected $table = 'nav_pages';
+
+    protected $fillable = [
+        'id', 'type', 'status', 'duanjus', 'created_at', 'updated_at', 'miniprogram_type',
+    ];
+    protected  $casts = ['duanjus' =>  'array'];
+}

+ 29 - 0
modules/Operation/Providers/OperationServiceProvider.php

@@ -0,0 +1,29 @@
+<?php
+
+namespace Modules\Operation\Providers;
+
+use Catch\Providers\CatchModuleServiceProvider;
+
+class OperationServiceProvider extends CatchModuleServiceProvider
+{
+    /**
+     * middlewares
+     *
+     * @return string[]
+     */
+    protected function middlewares(): array
+    {
+       return [];
+    }
+
+    /**
+     * route path
+     *
+     * @return string|array
+     */
+    public function moduleName(): string|array
+    {
+        // TODO: Implement path() method.
+        return 'operation';
+    }
+}

+ 10 - 0
modules/Operation/README.md

@@ -0,0 +1,10 @@
+#内容中台管理模块
+关于内容中台 相关的后台接口,对外api接口,都写在这里
+配置文件放在: config目录下,读取配置文件示例:config('contentManage.zhushuyunpublicapi.public_domain');
+config("模块名.配置文件名.配置项");
+
+数据库模型文件放在:Models 目录下面
+服务层文件放在:Services 目录下面
+控制器放在:modules/ContentManage/Http/Controllers 目录下面
+中间件放在:modules/ContentManage/Middlewares 目录下面
+路由只能现在 modules/ContentManage/rout/route.php 文件里

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

@@ -0,0 +1,137 @@
+<?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');
+            $videoIds = array_unique(array_column($list->items(),'video_id'));
+            $videoInfo = DB::table('videos')->whereIn('id',$videoIds)->select('id','name','cover_image')->get();
+
+            if ($videoInfo){
+                $videoInfo  = json_decode(json_encode($videoInfo),true);
+
+                $videoInfo = array_column($videoInfo,null,'id');
+            }else{
+                $videoInfo = [];
+            }
+
+            foreach ($list as $value){
+                $value->miniprogram_type_text = $types[$value->miniprogram_type]['name'] ?? "-";
+                $value->videoInfo = $videoInfo[$value->video_id] ?? [];
+            }
+        }
+        return $list;
+    }
+
+    /**
+     *  查询构建
+     * 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']}%");
+        }
+        if (getProp($param,'miniprogram_type')){
+            $sql->where("miniprogram_type",$param['miniprogram_type']);
+        }
+        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 "操作成功";
+    }
+}

+ 93 - 0
modules/Operation/Service/ChannelServic.php

@@ -0,0 +1,93 @@
+<?php
+/**
+ *
+ * @file:Channel.php
+ * @Date: 2023/6/8
+ * @Time: 11:17
+ */
+
+
+namespace Modules\Operation\Service;
+
+use Modules\Common\Services\BaseService;
+use Modules\Operation\Models\NavPages;
+
+class ChannelServic extends BaseService
+{
+
+    public static function ChannelList($param)
+    {
+        $sql = self::getQuerySql($param);
+        $isAll = getProp($param,'is_all',false);
+        if ($isAll){
+            $list = $sql->get();
+        }else{
+            $list = $sql->paginate(getProp($param,'limit',15));
+        }
+        if (!$list->isEmpty()){
+            $type = array_column(self::getNavPagesType(),null,'value');
+            $minParamType = array_column(self::getMiniProgramType(),null,'value');
+            foreach ($list as  $value){
+                $value->type_txt = $type[$value->type]['name'] ?? "-";
+                $value->miniprogram_type_text = $minParamType[$value->miniprogram_type]['name'] ?? "-";
+                $value->duanjus = collect($value->duanjus)->sortBy('sort');
+            }
+        }
+        return $list;
+    }
+
+    public static function getQuerySql($param)
+    {
+        $sql = NavPages::query()->orderBy('status','desc')->orderBy('id','desc');
+        if (getProp($param,'type')){
+            $sql->where('type',$param['type']);
+        }
+        if (getProp($param,'miniprogram_type')){
+            $sql->where("miniprogram_type",$param['miniprogram_type']);
+        }
+        return $sql;
+    }
+
+    /**
+     *  添加
+     * name: addChannel
+     * @param mixed $param
+     * @return string|void
+     * date 2023/06/08 15:11
+     */
+    public static function addChannel(mixed $param)
+    {
+        $res = NavPages::create($param);
+        if ($res){
+            if ($param['status'] == 1){
+                NavPages::where('id','<>',$res->id)->where('type',$param['type'])->where('miniprogram_type',$param['miniprogram_type'])->update(['status' => 0]);
+            }
+            return "操作成功";
+        }
+        self::throwErrMsg("添加失败");
+    }
+
+    public static function enableChannel($id)
+    {
+        $info = NavPages::where('id',$id)->first();
+        if(is_empty($info)){
+            self::throwErrMsg("频道配置不存在");
+        }
+        NavPages::where('type',$info->type)->where('miniprogram_type',$info->miniprogram_type)->update(['status'=>0]);
+        NavPages::where('id',$id)->update(['status'=>1]);
+        return "操作成功";
+    }
+
+    public static function setChannel($id, array $set)
+    {
+        $info = NavPages::where('id',$id)->first();
+        if(is_empty($info)){
+            self::throwErrMsg("频道配置不存在");
+        }
+        $res = NavPages::where('id',$id)->update(['duanjus' => $set]);
+        if ($res){
+            return "操作成功";
+        }
+        self::throwErrMsg("操作失败");
+    }
+}

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

@@ -0,0 +1,43 @@
+<?php
+
+use Illuminate\Support\Facades\Route;
+use Modules\Operation\Http\Controllers\FirstPageController;
+
+Route::prefix('operationManage')->group(function () {
+    Route::prefix('firstPage')->group(function(){
+        Route::post('add', [FirstPageController::class, 'add']);
+        Route::post('enableStatus', [FirstPageController::class, 'enableStatus']);
+        Route::post('setConfig', [FirstPageController::class, 'setConfig']);
+        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']);
+    });
+
+    // 频道管理
+    Route::prefix('channel')->group(function (){
+        // 列表
+        Route::any('list',[\Modules\Operation\Http\Controllers\ChannelController::class,'list']);
+        // 添加
+        Route::post('add',[\Modules\Operation\Http\Controllers\ChannelController::class,'add']);
+        // 启用
+        Route::post('enableStatus/{id}',[\Modules\Operation\Http\Controllers\ChannelController::class,'enableStatus']);
+        // 配置
+        Route::post("setting/{id}",[\Modules\Operation\Http\Controllers\ChannelController::class,"setting"]);
+    });
+});

+ 0 - 1
modules/OrderRefund/Providers/OrderRefundServiceProvider.php

@@ -2,7 +2,6 @@
 
 namespace Modules\OrderRefund\Providers;
 
-use Catch\CatchAdmin;
 use Catch\Providers\CatchModuleServiceProvider;
 
 class OrderRefundServiceProvider extends CatchModuleServiceProvider

+ 0 - 1
modules/OrderRefund/Services/RefundOrderService.php

@@ -10,7 +10,6 @@
 namespace Modules\OrderRefund\Services;
 
 use App\Libs\Pay\Palmpay;
-use Catch\Exceptions\FailedException;
 use Illuminate\Support\Facades\DB;
 use Modules\Channel\Services\Order\OrderService;
 use Modules\Manage\Models\Miniprogram;

+ 0 - 1
modules/Payment/Providers/PaymentServiceProvider.php

@@ -2,7 +2,6 @@
 
 namespace Modules\Payment\Providers;
 
-use Catch\CatchAdmin;
 use Catch\Providers\CatchModuleServiceProvider;
 
 class PaymentServiceProvider extends CatchModuleServiceProvider

+ 1 - 1
modules/Permissions/Http/Controllers/DepartmentsController.php

@@ -5,8 +5,8 @@ declare(strict_types=1);
 namespace Modules\Permissions\Http\Controllers;
 
 use Catch\Base\CatchController as Controller;
-use Modules\Permissions\Models\Departments;
 use Illuminate\Http\Request;
+use Modules\Permissions\Models\Departments;
 
 class DepartmentsController extends Controller
 {

+ 1 - 1
modules/Permissions/Http/Controllers/JobsController.php

@@ -5,8 +5,8 @@ declare(strict_types=1);
 namespace Modules\Permissions\Http\Controllers;
 
 use Catch\Base\CatchController as Controller;
-use Modules\Permissions\Models\Jobs;
 use Illuminate\Http\Request;
+use Modules\Permissions\Models\Jobs;
 
 class JobsController extends Controller
 {

+ 1 - 1
modules/Permissions/Http/Controllers/PermissionsController.php

@@ -7,9 +7,9 @@ namespace Modules\Permissions\Http\Controllers;
 use Catch\Base\CatchController as Controller;
 use Catch\Exceptions\FailedException;
 use Illuminate\Database\Eloquent\Model;
+use Illuminate\Http\Request;
 use Modules\Permissions\Enums\MenuType;
 use Modules\Permissions\Models\Permissions;
-use Illuminate\Http\Request;
 
 class PermissionsController extends Controller
 {

+ 1 - 1
modules/Permissions/Http/Controllers/RolesController.php

@@ -7,8 +7,8 @@ namespace Modules\Permissions\Http\Controllers;
 use Catch\Base\CatchController as Controller;
 use Catch\Exceptions\FailedException;
 use Modules\Permissions\Enums\DataRange;
-use Modules\Permissions\Models\Roles;
 use Modules\Permissions\Http\Requests\RoleRequest;
+use Modules\Permissions\Models\Roles;
 
 class RolesController extends Controller
 {

+ 0 - 3
modules/Permissions/Middlewares/RoleCheck.php

@@ -3,11 +3,8 @@
 namespace Modules\Permissions\Middlewares;
 
 use Illuminate\Http\Request;
-use Illuminate\Support\Facades\Route;
 use Modules\Common\Errors\Errors;
 use Modules\Common\Exceptions\CommonBusinessException;
-use Modules\Jiesuan\Http\Controllers\FinanceCheckController;
-use Modules\Permissions\Exceptions\PermissionForbidden;
 use Modules\User\Models\User;
 
 /**

+ 1 - 1
modules/Permissions/Models/Traits/DataRange.php

@@ -5,9 +5,9 @@ namespace Modules\Permissions\Models\Traits;
 
 use Illuminate\Support\Collection;
 use Illuminate\Support\Facades\Auth;
+use Modules\Permissions\Enums\DataRange as DataRangeEnum;
 use Modules\Permissions\Models\Departments;
 use Modules\Permissions\Models\Roles;
-use Modules\Permissions\Enums\DataRange as DataRangeEnum;
 
 trait DataRange
 {

+ 0 - 1
modules/Permissions/Providers/PermissionsServiceProvider.php

@@ -2,7 +2,6 @@
 
 namespace Modules\Permissions\Providers;
 
-use Catch\CatchAdmin;
 use Catch\Providers\CatchModuleServiceProvider;
 use Modules\Permissions\Middlewares\PermissionGate;
 

+ 0 - 1
modules/Permissions/database/seeder/PermissionsMenusSeeder.php

@@ -1,6 +1,5 @@
 <?php
 
-use Illuminate\Database\Console\Seeds\WithoutModelEvents;
 use Illuminate\Database\Seeder;
 
 return new class extends Seeder

+ 2 - 2
modules/Permissions/routes/route.php

@@ -1,10 +1,10 @@
 <?php
 
 use Illuminate\Support\Facades\Route;
-use Modules\Permissions\Http\Controllers\RolesController;
-use Modules\Permissions\Http\Controllers\JobsController;
 use Modules\Permissions\Http\Controllers\DepartmentsController;
+use Modules\Permissions\Http\Controllers\JobsController;
 use Modules\Permissions\Http\Controllers\PermissionsController;
+use Modules\Permissions\Http\Controllers\RolesController;
 
 Route::prefix('permissions')->group(function () {
     Route::apiResource('roles', RolesController::class);

+ 3 - 3
modules/Permissions/views/departments/form/create.vue

@@ -25,10 +25,10 @@
 </template>
 
 <script lang="ts" setup>
-import { useCreate } from '/admin/composables/curd/useCreate'
-import { useShow } from '/admin/composables/curd/useShow'
+import {useCreate} from '/admin/composables/curd/useCreate'
+import {useShow} from '/admin/composables/curd/useShow'
 import http from '/admin/support/http'
-import { onMounted, ref, unref } from 'vue'
+import {onMounted, ref, unref} from 'vue'
 
 const props = defineProps({
   primary: String | Number,

+ 4 - 4
modules/Permissions/views/departments/index.vue

@@ -34,11 +34,11 @@
 </template>
 
 <script lang="ts" setup>
-import { computed, onMounted } from 'vue'
+import {computed, onMounted} from 'vue'
 import Create from './form/create.vue'
-import { useGetList } from '/admin/composables/curd/useGetList'
-import { useDestroy } from '/admin/composables/curd/useDestroy'
-import { useOpen } from '/admin/composables/curd/useOpen'
+import {useGetList} from '/admin/composables/curd/useGetList'
+import {useDestroy} from '/admin/composables/curd/useDestroy'
+import {useOpen} from '/admin/composables/curd/useOpen'
 
 const api = 'permissions/departments'
 

+ 3 - 3
modules/Permissions/views/jobs/form/create.vue

@@ -24,10 +24,10 @@
 </template>
 
 <script lang="ts" setup>
-import { useCreate } from '/admin/composables/curd/useCreate'
-import { useShow } from '/admin/composables/curd/useShow'
+import {useCreate} from '/admin/composables/curd/useCreate'
+import {useShow} from '/admin/composables/curd/useShow'
 
-import { onMounted } from 'vue'
+import {onMounted} from 'vue'
 
 const props = defineProps({
   primary: String | Number,

+ 4 - 4
modules/Permissions/views/jobs/index.vue

@@ -36,11 +36,11 @@
 </template>
 
 <script lang="ts" setup>
-import { computed, onMounted } from 'vue'
+import {computed, onMounted} from 'vue'
 import Create from './form/create.vue'
-import { useGetList } from '/admin/composables/curd/useGetList'
-import { useDestroy } from '/admin/composables/curd/useDestroy'
-import { useOpen } from '/admin/composables/curd/useOpen'
+import {useGetList} from '/admin/composables/curd/useGetList'
+import {useDestroy} from '/admin/composables/curd/useDestroy'
+import {useOpen} from '/admin/composables/curd/useOpen'
 
 const api = 'permissions/jobs'
 

+ 5 - 5
modules/Permissions/views/permissions/form/create.vue

@@ -99,12 +99,12 @@
 </template>
 
 <script lang="ts" setup>
-import { useCreate } from '/admin/composables/curd/useCreate'
-import { useShow } from '/admin/composables/curd/useShow'
-import { useOpen } from '/admin/composables/curd/useOpen'
-import { onMounted, ref, watch } from 'vue'
+import {useCreate} from '/admin/composables/curd/useCreate'
+import {useShow} from '/admin/composables/curd/useShow'
+import {useOpen} from '/admin/composables/curd/useOpen'
+import {onMounted, ref, watch} from 'vue'
 import http from '/admin/support/http'
-import { MenuType } from '/admin/enum/app'
+import {MenuType} from '/admin/enum/app'
 
 const props = defineProps({
   primary: String | Number,

+ 5 - 5
modules/Permissions/views/permissions/index.vue

@@ -51,12 +51,12 @@
 </template>
 
 <script lang="ts" setup>
-import { computed, onMounted, ref } from 'vue'
+import {computed, onMounted, ref} from 'vue'
 import Create from './form/create.vue'
-import { useGetList } from '/admin/composables/curd/useGetList'
-import { useDestroy } from '/admin/composables/curd/useDestroy'
-import { useOpen } from '/admin/composables/curd/useOpen'
-import { MenuType } from '/admin/enum/app'
+import {useGetList} from '/admin/composables/curd/useGetList'
+import {useDestroy} from '/admin/composables/curd/useDestroy'
+import {useOpen} from '/admin/composables/curd/useOpen'
+import {MenuType} from '/admin/enum/app'
 import http from '../../../../resources/admin/support/http'
 
 const api = 'permissions/permissions'

+ 3 - 3
modules/Permissions/views/roles/form/create.vue

@@ -86,9 +86,9 @@
 </template>
 
 <script lang="ts" setup>
-import { useCreate } from '/admin/composables/curd/useCreate'
-import { useShow } from '/admin/composables/curd/useShow'
-import { nextTick, onMounted, ref, unref, watch } from 'vue'
+import {useCreate} from '/admin/composables/curd/useCreate'
+import {useShow} from '/admin/composables/curd/useShow'
+import {nextTick, onMounted, ref, unref, watch} from 'vue'
 import http from '/admin/support/http'
 
 const props = defineProps({

+ 4 - 4
modules/Permissions/views/roles/index.vue

@@ -31,11 +31,11 @@
 </template>
 
 <script lang="ts" setup>
-import { computed, onMounted, ref } from 'vue'
+import {computed, onMounted, ref} from 'vue'
 import Create from './form/create.vue'
-import { useGetList } from '/admin/composables/curd/useGetList'
-import { useDestroy } from '/admin/composables/curd/useDestroy'
-import { useOpen } from '/admin/composables/curd/useOpen'
+import {useGetList} from '/admin/composables/curd/useGetList'
+import {useDestroy} from '/admin/composables/curd/useDestroy'
+import {useOpen} from '/admin/composables/curd/useOpen'
 
 const api = 'permissions/roles'
 

+ 0 - 1
modules/System/Http/Controllers/NoticeTypesController.php

@@ -11,7 +11,6 @@
 namespace Modules\System\Http\Controllers;
 
 use Catch\Base\CatchController as Controller;
-
 use Illuminate\Http\Request;
 use Modules\System\Http\Requests\NoticeTypeRequest;
 use Modules\System\Services\Notice\NoitceTypeService;

+ 0 - 1
modules/System/Providers/SystemServiceProvider.php

@@ -2,7 +2,6 @@
 
 namespace Modules\System\Providers;
 
-use Catch\CatchAdmin;
 use Catch\Providers\CatchModuleServiceProvider;
 use Modules\System\Middlewares\SystemGate;
 

+ 0 - 1
modules/System/Services/Notice/NoitceTypeService.php

@@ -10,7 +10,6 @@
 
 namespace Modules\System\Services\Notice;
 
-use Illuminate\Support\Facades\DB;
 use Modules\System\Models\NoticeTypes;
 
 class NoitceTypeService

+ 1 - 2
modules/System/Services/Notice/NoticesService.php

@@ -14,11 +14,10 @@ use Catch\Exceptions\FailedException;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\DB;
+use Modules\Permissions\Models\Roles;
 use Modules\System\Models\Notices;
 use Modules\System\Models\UserNotice;
-use Modules\Permissions\Models\Roles;
 use Modules\User\Models\User;
-use PharIo\Manifest\Author;
 
 class NoticesService
 {

+ 4 - 2
modules/Tuiguang/Http/Controllers/PromotionController.php

@@ -54,9 +54,10 @@ class PromotionController extends CatchController
             })->orderBy('created_at', 'desc')
             ->select('promotions.id', 'promotions.name', 'promotions.created_at',
             'videos.name as video_name', 'promotions.series_sequence', 'promotions.callback_type',
-                'promotions.callback_config_id', 'promotions.video_id', 'promotions.remark')
+                'promotions.callback_config_id', 'promotions.video_id', 'promotions.remark', 'promotions.status')
             ->paginate($request->input('limit', 15));
         foreach ($result as $item) {
+            $item->status_str = $item->status ? '启用':'禁用';
             $item->series_sequence_name = '第'. $item->series_sequence . '集';
             $item->callback_type_str = $callbackTypeMap[$item->callback_type] ?? '';
             $item->promotion_path = config('tuiguang.tuiguang.url') . DIRECTORY_SEPARATOR . 'api/promotion/index?ranse_id='. $item->id;
@@ -131,7 +132,8 @@ class PromotionController extends CatchController
         if(1 == $request->input('callback_type')) {
             $exist = DB::table('promotions')
                 ->where(['is_enabled' => 1, 'callback_type' => $request->input('callback_type'),
-                    'callback_config_id' => $request->input('callback_config_id')])
+                    'callback_config_id' => $request->input('callback_config_id'),
+                    'status' => 1])
                 ->first();
             if($exist && $exist->id != $request->input('id')) {
                 CommonBusinessException::throwError(Errors::JULIANG_ACCOUNT_PROMOTION_UNIQUE);

+ 2 - 2
modules/Tuiguang/config/tuiguang.php

@@ -4,9 +4,9 @@ return [
     /**
      * 推广链接地址
      */
-    'url' => env('TUIGUAGN_URL', 'https://api.dududus.com'),
+    'url' => env('TUIGUAGN_URL', 'https://api.zhiyupa.com'),
     /**
      * 监测链接地址
      */
-    'trackUrl' => env('TUIGUAGN_TRACK_URL', 'https://track.dududus.com')
+    'trackUrl' => env('TUIGUAGN_TRACK_URL', 'https://track.zhiyupa.com')
 ];

+ 0 - 0
modules/Tuiguang/routes/route.php


이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.