zhaoyang vor 2 Jahren
Ursprung
Commit
75960088d0

+ 26 - 0
modules/Channel/Http/Controllers/UserMiniprogramController.php

@@ -0,0 +1,26 @@
+<?php
+
+namespace Modules\Channel\Http\Controllers;
+
+use Catch\Base\CatchController;
+use Illuminate\Http\Request;
+use Modules\User\Models\User;
+use Modules\Channel\Models\UserHasMiniprograms;
+
+class UserMiniprogramController extends CatchController
+{
+    public function __construct(
+        protected readonly User $user,
+        protected readonly UserHasMiniprograms $userHasMiniprograms
+    ) {
+    }
+
+    public function index(Request $request)
+    {
+          return $this->userHasMiniprograms->join('miniprogram','miniprogram.id','=','user_has_miniprograms.miniprogram_id')
+          ->where('user_has_miniprograms.is_enabled',1)
+          ->where('uid',$this->user->id)
+          ->select('user_has_miniprograms.miniprogram_id','miniprogram.name','miniprogram.play_name')
+          ->get();
+    }
+}

+ 6 - 6
modules/Channel/Installer.php

@@ -1,9 +1,9 @@
 <?php
 
-namespace Modules\ContentManage;
+namespace Modules\Channel;
 
 use Catch\Support\Module\Installer as ModuleInstaller;
-use Modules\ContentManage\Providers\ContentManageServiceProvider;
+use Modules\Channel\Providers\ChannelServiceProvider;
 
 class Installer extends ModuleInstaller
 {
@@ -11,12 +11,12 @@ class Installer extends ModuleInstaller
     {
         // TODO: Implement info() method.
         return [
-            'title' => '内容中台',
-            'name' => 'contentManage',
-            'path' => 'contentManage',
+            'title' => '渠道管理',
+            'name' => 'channel',
+            'path' => 'channel',
             'keywords' => '内容中台',
             'description' => '内容中台管理模块',
-            'provider' => ContentManageServiceProvider::class
+            'provider' => ChannelServiceProvider::class
         ];
     }
 

+ 1 - 1
modules/Channel/Models/BaseModel.php

@@ -1,6 +1,6 @@
 <?php
 
-namespace Modules\System\Models;
+namespace Modules\Channel\Models;
 
 use Catch\Base\CatchModel as Model;
 use Illuminate\Database\Eloquent\Builder;

+ 1 - 2
modules/Channel/Models/NoticeTypes.php

@@ -1,7 +1,6 @@
 <?php
 
-namespace Modules\System\Models;
-
+namespace Modules\Channel\Models;
 
 
 class NoticeTypes extends BaseModel

+ 1 - 1
modules/Channel/Models/Notices.php

@@ -1,6 +1,6 @@
 <?php
 
-namespace Modules\System\Models;
+namespace Modules\Channel\Models;
 
 
 class Notices extends BaseModel

+ 14 - 0
modules/Channel/Models/UserHasMiniprograms.php

@@ -0,0 +1,14 @@
+<?php
+
+namespace Modules\Channel\Models;
+
+
+class UserHasMiniprograms extends BaseModel
+{
+    protected $table = 'user_has_miniprograms';
+
+    protected $fillable = [
+        'id', 'uid', 'miniprogram_id', 'is_enabled', 'created_at', 'updated_at'
+    ];
+
+}

+ 1 - 1
modules/Channel/Models/UserNotice.php

@@ -1,6 +1,6 @@
 <?php
 
-namespace Modules\System\Models;
+namespace Modules\Channel\Models;
 
 
 class UserNotice extends BaseModel

+ 14 - 0
modules/Channel/Models/Users.php

@@ -0,0 +1,14 @@
+<?php
+
+namespace Modules\Channel\Models;
+
+
+class Users extends BaseModel
+{
+    protected $table = 'users';
+
+    protected $fillable = [
+        'id', 'username', 'password', 'email', 'avatar', 'remember_token', 'department_id', 'creator_id', 'status', 'login_ip', 'login_at', 'created_at', 'updated_at', 'deleted_at', 'pid', 'remark', 
+    ];
+
+}

+ 0 - 2
modules/Channel/Providers/ChannelServiceProvider.php

@@ -2,9 +2,7 @@
 
 namespace Modules\Channel\Providers;
 
-use Catch\CatchAdmin;
 use Catch\Providers\CatchModuleServiceProvider;
-use Modules\ContentManage\Middlewares\ContentManageGate;
 
 class ChannelServiceProvider extends CatchModuleServiceProvider
 {

+ 35 - 0
modules/Channel/Services/User/UserService.php

@@ -0,0 +1,35 @@
+<?php
+/**
+ * ${CARET}
+ * @file:NoitceService.php
+ * @Created by gnitif
+ * @Date: 2023/3/27
+ * @Time: 11:54
+ */
+
+
+namespace Modules\Channel\Services\User;
+
+use Modules\Channel\Models\Users;
+
+class UserService {
+
+
+    public static function listByRole(string $identify, array $field){
+        return Users::join('user_has_roles','user_has_roles.user_id','=','users.id')
+        ->join('roles','roles.id','=','user_has_roles.role_id')
+        ->where('roles.identify',$identify)
+        ->select($field)
+        ->get();
+    }
+
+
+    public static function getUserInfo(int $uid,array $field){
+        return Users::join('user_has_roles','user_has_roles.user_id','=','users.id')
+        ->join('roles','roles.id','=','user_has_roles.role_id')
+        ->where('users.id',$uid)
+        ->select($field)
+        ->first();
+    }
+
+}

+ 4 - 0
modules/Channel/routes/route.php

@@ -2,6 +2,7 @@
 
 use Illuminate\Support\Facades\Route;
 use Modules\Channel\Http\Controllers\AdvertiserController;
+use Modules\Channel\Http\Controllers\UserMiniprogramController;
 use Modules\System\Http\Controllers\NoticesController;
 use Modules\System\Http\Controllers\NoticeTypesController;
 
@@ -11,5 +12,8 @@ Route::prefix('channel')->group(function () {
 
     Route::get('advertiser/listAdvertiser', [AdvertiserController::class, 'listAdvertiser']);
     Route::get('advertiser/getAdvertiser', [AdvertiserController::class, 'getAdvertiser']);
+
+    Route::get('miniprogram/list', [UserMiniprogramController::class, 'index']);
+
 });
 

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

@@ -6,4 +6,6 @@ class Errors
 {
     public const  EMAIL_EXISTS= [500001, '邮箱已经被使用'];
     public const  USER_NOT_FOUND= [500002, '用户不存在'];
+    public const  PARAM_EMPTY= [500003, '缺少参数'];
+    public const  PARAM_ERROR= [500004, '参数错误'];
 }

+ 14 - 1
modules/Manage/Http/Controllers/MiniprogramController.php

@@ -19,7 +19,20 @@ class MiniprogramController extends Controller
 
     public function index(Request $request)
     {
-        return $this->miniprogram->paginate(20)->map(function($item,$k){
+        $name = $request->get('name');
+        $play_name = $request->get('play_name');
+        $company = $request->get('company');
+        $where = [];
+        if($name){
+            $where[] = ['name','like','%'.$name.'%']; 
+        }
+        if($play_name){
+            $where[] = ['play_name','like','%'.$play_name.'%']; 
+        }
+        if($company){
+            $where[] = ['company','like','%'.$company.'%']; 
+        }
+        return $this->miniprogram->where($where)->paginate(20)->map(function($item,$k){
             $item->type_name = MiniprogramType::from($item->type)->name();
             return $item;
         });

+ 88 - 0
modules/Manage/Http/Controllers/UserMiniprogramController.php

@@ -0,0 +1,88 @@
+<?php
+
+namespace Modules\Manage\Http\Controllers;
+
+use Catch\Base\CatchController;
+use Illuminate\Http\Request;
+use Modules\Channel\Models\UserHasMiniprograms;
+use Modules\Channel\Services\User\UserService;
+use Modules\Channel\Exceptions\ChannelBusinessException;
+use Modules\Common\Errors\Errors;
+use Modules\Manage\Models\Miniprogram;
+use Log;
+
+class UserMiniprogramController extends CatchController
+{
+
+    const  COMPANY_ROLE = 'company';
+    public function __construct(
+        protected readonly UserHasMiniprograms $userHasMiniprograms,
+        protected readonly Miniprogram $miniprogram
+        )
+    {
+        
+    }
+
+
+
+    public function allocationStore($miniprogram_id,Request $request)
+    {
+        $uids  = $request->post('uids');
+        $action = $request->post('action');
+        if(empty($miniprogram_id) || empty($uids) || empty($action) || !in_array($action,['on','off'])){
+            ChannelBusinessException::throwError(Errors::PARAM_EMPTY);
+        }
+
+        $miniprogram_info =  $this->miniprogram->find($miniprogram_id);
+        if(!$miniprogram_info || $miniprogram_info->status == 0){
+            ChannelBusinessException::throwError(Errors::PARAM_ERROR);
+        }
+
+        collect(explode(',',$uids))->filter(function (int $value, int $key) use($miniprogram_id,$action){
+            $user_simple = UserService::getUserInfo($value,['roles.identify']);
+            if($user_simple && $user_simple->identify == self::COMPANY_ROLE){
+                $result = $this->userHasMiniprograms->where('uid',$value)->where('miniprogram_id',$miniprogram_id)->first();
+                if($action == 'off'){
+                    if($result){
+                        $result->is_enabled = 0;
+                        $result->save();
+                    }
+                    return true;
+                }
+                if($result){
+                    if($result->is_enabled == 0){
+                        $result->is_enabled = 1;
+                        $result->save();
+                    }
+                    return true;
+                }
+                $this->userHasMiniprograms->create([
+                    'uid'=>$value,'miniprogram_id'=>$miniprogram_id,'is_enabled'=>1
+                ]);
+                return true;
+            }
+            return false;
+        });
+
+        return [];
+
+    }
+
+
+
+    public function getAllocationInfo($miniprogram_id){
+        $all_company_account = UserService::listByRole(self::COMPANY_ROLE,['users.username','users.id']);
+        return $all_company_account->map(function ($item,$key) use($miniprogram_id) {
+            $info = $this->userHasMiniprograms->where('uid',$item->id)->where('miniprogram_id',$miniprogram_id)->where('is_enabled',1)->count();
+            if($info){
+                $item->user_has_miniprogram = 1;
+                $item->user_has_miniprogram_flag = 'on';
+            }else{
+                $item->user_has_miniprogram = 0;
+                $item->user_has_miniprogram_flag = 'off';
+            }
+            return $item;
+        })->groupBy('user_has_miniprogram_flag')->all();
+    }
+
+}

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

@@ -3,6 +3,7 @@
 use Illuminate\Support\Facades\Route;
 
 use Modules\Manage\Http\Controllers\MiniprogramController;
+use Modules\Manage\Http\Controllers\UserMiniprogramController;
 
 Route::prefix('manage')->group(function(){
     Route::prefix('miniprogram')->group(function () {
@@ -23,7 +24,14 @@ Route::prefix('manage')->group(function(){
         ->withoutMiddleware(config('catch.route.middlewares'));
 
          //小程序详情
-         Route::post('update/{id}',[MiniprogramController::class,'update'])
+         Route::post('/update{id}',[MiniprogramController::class,'update'])
+         ->withoutMiddleware(config('catch.route.middlewares'));
+
+         //小程序分配列表
+         Route::get('allocation/{miniprogram_id}',[UserMiniprogramController::class,'getAllocationInfo'])
+         ->withoutMiddleware(config('catch.route.middlewares'));
+        //分配小程序
+         Route::post('allocation/{miniprogram_id}',[UserMiniprogramController::class,'allocationStore'])
          ->withoutMiddleware(config('catch.route.middlewares'));
 
     });

+ 1 - 0
modules/User/Models/User.php

@@ -115,6 +115,7 @@ class User extends Model implements AuthenticatableContract
      * 否则展示所有isApp为false以及showApp对应的name的模块
      * @param string $showApp
      */
+    
     public function showPermissions($showApp = '') {
         $hiddenAppModuleNames = Modules::getAppModules()->reject(function ($module) use ($showApp) {
             return $showApp == $module['name'];

+ 1 - 1
tests/Feature/ExampleTest.php

@@ -12,7 +12,7 @@ class ExampleTest extends TestCase
      *
      * @return void
      */
-    public function test_the_application_returns_a_successful_response()
+    public function ttest_the_application_returns_a_successful_response()
     {
         $response = $this->get('/');
 

+ 18 - 5
tests/Feature/MiniprogramTest.php

@@ -9,17 +9,19 @@ use Tests\TestCase;
 class MiniprogramTest extends TestCase
 {
     /**
+     * php artisan test --testsuite=Feature
      * A basic feature test example.
      */
-    public function ttest_example(): void
+    public function test_example(): void
     {
-        $response = $this->getJson('/api/manage/miniprogram/typelist');
+        $response = $this->getJson('/api/manage/miniprogram/allocation/13');
+        //$response = $this->getJson('/api/manage/miniprogram/index');
 
-        $response->dd();
+        echo $response->getContent();
     }
 
 
-    public function test_store(): void
+    public function ttest_store(): void
     {
         $response = $this->postJson('/api/manage/miniprogram/update/13',[
             'name'=>'三个十千短剧',
@@ -36,9 +38,20 @@ class MiniprogramTest extends TestCase
     }
 
 
+    public function test_allocation(): void
+    {
+        $response = $this->postJson('/api/manage/miniprogram/allocation/13',[
+            'uids'=>'5,6,7'
+        ]);
+
+        $response->dd();
+    }
+
+
     public function ttest_index(): void
     {
-        $response = $this->getJson('/api/manage/miniprogram/index');
+        $name = '亿';
+        $response = $this->getJson('/api/manage/miniprogram/index?name='.$name);
 
         $response->dd();
     }