正在显示
4 个修改的文件
包含
113 行增加
和
7 行删除
| @@ -8,6 +8,10 @@ use App\Http\Controllers\Bside\BaseController; | @@ -8,6 +8,10 @@ use App\Http\Controllers\Bside\BaseController; | ||
| 8 | use App\Http\Logic\Aside\ServerConfigLogic; | 8 | use App\Http\Logic\Aside\ServerConfigLogic; |
| 9 | use App\Http\Requests\Aside\ServerConfigRequest; | 9 | use App\Http\Requests\Aside\ServerConfigRequest; |
| 10 | use App\Models\Project as ProjectModel; | 10 | use App\Models\Project as ProjectModel; |
| 11 | +use Illuminate\Http\Request; | ||
| 12 | +use Illuminate\Support\Str; | ||
| 13 | +use Illuminate\Validation\Rule; | ||
| 14 | +use Illuminate\Validation\ValidationException; | ||
| 11 | 15 | ||
| 12 | /** | 16 | /** |
| 13 | * @name:项目信息 | 17 | * @name:项目信息 |
| @@ -47,4 +51,39 @@ class ProjectController extends BaseController | @@ -47,4 +51,39 @@ class ProjectController extends BaseController | ||
| 47 | $data = $logic->save($this->param); | 51 | $data = $logic->save($this->param); |
| 48 | return $this->success($data); | 52 | return $this->success($data); |
| 49 | } | 53 | } |
| 54 | + | ||
| 55 | + /** | ||
| 56 | + * 更新表结构 | ||
| 57 | + * @param ServerConfigLogic $logic | ||
| 58 | + * @author zbj | ||
| 59 | + * @date 2023/4/24 | ||
| 60 | + */ | ||
| 61 | + public function updateDatabase(Request $request, ServerConfigLogic $logic){ | ||
| 62 | + $request->validate([ | ||
| 63 | + 'type' => 'in:1,2,3', | ||
| 64 | + 'id'=> Rule::requiredIf($request->type == 1), | ||
| 65 | + 'sql' => ['required', function ($attribute, $value, $fail) { | ||
| 66 | + if(Str::contains(Str::lower($value), ['drop', 'delete', 'truncate'])){ | ||
| 67 | + $fail('危险操作'); | ||
| 68 | + } | ||
| 69 | + }] | ||
| 70 | + ],[ | ||
| 71 | + 'id.required' => 'ID不能为空', | ||
| 72 | + 'sql.required' => '请输入Sql语句', | ||
| 73 | + ]); | ||
| 74 | + | ||
| 75 | + switch ($this->param['type']){ | ||
| 76 | + case "1": | ||
| 77 | + $data = $logic->updateTable($this->param); | ||
| 78 | + break; | ||
| 79 | + case "2": | ||
| 80 | + $data = $logic->updateLocalTable($this->param); | ||
| 81 | + break; | ||
| 82 | + case "3": | ||
| 83 | + $data = $logic->updateAllTable($this->param); | ||
| 84 | + break; | ||
| 85 | + } | ||
| 86 | + | ||
| 87 | + return $this->success($data); | ||
| 88 | + } | ||
| 50 | } | 89 | } |
| @@ -4,6 +4,7 @@ namespace App\Http\Logic\Aside; | @@ -4,6 +4,7 @@ namespace App\Http\Logic\Aside; | ||
| 4 | 4 | ||
| 5 | 5 | ||
| 6 | 6 | ||
| 7 | +use App\Models\Project; | ||
| 7 | use App\Models\ServerConfig; | 8 | use App\Models\ServerConfig; |
| 8 | use App\Services\ProjectServer; | 9 | use App\Services\ProjectServer; |
| 9 | use Illuminate\Support\Facades\DB; | 10 | use Illuminate\Support\Facades\DB; |
| @@ -26,6 +27,10 @@ class ServerConfigLogic extends BaseLogic | @@ -26,6 +27,10 @@ class ServerConfigLogic extends BaseLogic | ||
| 26 | 27 | ||
| 27 | public function save($param) | 28 | public function save($param) |
| 28 | { | 29 | { |
| 30 | + $project = ProjectServer::useProject($param['project_id']); | ||
| 31 | + if(!$project){ | ||
| 32 | + $this->fail('项目不存在或者已经删'); | ||
| 33 | + } | ||
| 29 | DB::beginTransaction(); | 34 | DB::beginTransaction(); |
| 30 | try { | 35 | try { |
| 31 | $res = parent::save($param); | 36 | $res = parent::save($param); |
| @@ -39,12 +44,13 @@ class ServerConfigLogic extends BaseLogic | @@ -39,12 +44,13 @@ class ServerConfigLogic extends BaseLogic | ||
| 39 | 44 | ||
| 40 | (new ProjectLogic())->save($data); | 45 | (new ProjectLogic())->save($data); |
| 41 | 46 | ||
| 42 | - //数据库配置 | ||
| 43 | - $project = ProjectServer::useProject($param['project_id']); | ||
| 44 | - //创建数据库 | ||
| 45 | - ProjectServer::createDatabase($project); | ||
| 46 | - //创建表 | ||
| 47 | - ProjectServer::initTable($project); | 47 | + //初始化数据库 |
| 48 | + if ($param['type'] == ServerConfig::TYPE_MYSQL) { | ||
| 49 | + //创建数据库 | ||
| 50 | + ProjectServer::createDatabase($project); | ||
| 51 | + //创建表 | ||
| 52 | + ProjectServer::initTable($project); | ||
| 53 | + } | ||
| 48 | 54 | ||
| 49 | DB::commit(); | 55 | DB::commit(); |
| 50 | } catch (\Exception $e) { | 56 | } catch (\Exception $e) { |
| @@ -53,4 +59,58 @@ class ServerConfigLogic extends BaseLogic | @@ -53,4 +59,58 @@ class ServerConfigLogic extends BaseLogic | ||
| 53 | } | 59 | } |
| 54 | return $this->success(); | 60 | return $this->success(); |
| 55 | } | 61 | } |
| 62 | + | ||
| 63 | + | ||
| 64 | + /** | ||
| 65 | + * 更新指定项目 数据库 | ||
| 66 | + * @param $param | ||
| 67 | + * @return array | ||
| 68 | + * @author zbj | ||
| 69 | + * @date 2023/4/24 | ||
| 70 | + */ | ||
| 71 | + public function updateTable($param){ | ||
| 72 | + $project = ProjectServer::useProject($param['project_id']); | ||
| 73 | + if(!$project){ | ||
| 74 | + $this->fail('项目不存在或者已经删'); | ||
| 75 | + } | ||
| 76 | + ProjectServer::useProject($param['project_id']); | ||
| 77 | + DB::connection('custom_mysql')->statement($param['sql']); | ||
| 78 | + return $this->success(); | ||
| 79 | + } | ||
| 80 | + | ||
| 81 | + /** | ||
| 82 | + * 更新本地 数据库 | ||
| 83 | + * @param $param | ||
| 84 | + * @return array | ||
| 85 | + * @author zbj | ||
| 86 | + * @date 2023/4/24 | ||
| 87 | + */ | ||
| 88 | + public function updateLocalTable($param){ | ||
| 89 | + DB::statement($param['sql']); | ||
| 90 | + return $this->success(); | ||
| 91 | + } | ||
| 92 | + | ||
| 93 | + /** | ||
| 94 | + * 更新所有项目 数据库 | ||
| 95 | + * @param $param | ||
| 96 | + * @return array | ||
| 97 | + * @author zbj | ||
| 98 | + * @date 2023/4/24 | ||
| 99 | + */ | ||
| 100 | + public function updateAllTable($param){ | ||
| 101 | + $projects = Project::all(); | ||
| 102 | + foreach ($projects as $project){ | ||
| 103 | + //DB类是单例模式,不能用哈 切换配置不会生效 | ||
| 104 | + $conn = new \mysqli( | ||
| 105 | + $project->mysqlConfig->host, | ||
| 106 | + $project->mysqlConfig->user, | ||
| 107 | + $project->mysqlConfig->password, | ||
| 108 | + $project->databaseName(), | ||
| 109 | + $project->mysqlConfig->port, | ||
| 110 | + ); | ||
| 111 | + | ||
| 112 | + $conn->query($param['sql']); | ||
| 113 | + } | ||
| 114 | + return $this->success(); | ||
| 115 | + } | ||
| 56 | } | 116 | } |
| @@ -47,7 +47,13 @@ class ProjectServer extends BaseService | @@ -47,7 +47,13 @@ class ProjectServer extends BaseService | ||
| 47 | */ | 47 | */ |
| 48 | public static function createDatabase($project) | 48 | public static function createDatabase($project) |
| 49 | { | 49 | { |
| 50 | - $conn = new \mysqli($project->mysqlConfig->host, $project->mysqlConfig->user, $project->mysqlConfig->password); | 50 | + $conn = new \mysqli( |
| 51 | + $project->mysqlConfig->host, | ||
| 52 | + $project->mysqlConfig->user, | ||
| 53 | + $project->mysqlConfig->password, | ||
| 54 | + '', | ||
| 55 | + $project->mysqlConfig->port, | ||
| 56 | + ); | ||
| 51 | $conn->query("CREATE DATABASE IF NOT EXISTS {$project->databaseName()}"); | 57 | $conn->query("CREATE DATABASE IF NOT EXISTS {$project->databaseName()}"); |
| 52 | return true; | 58 | return true; |
| 53 | } | 59 | } |
| @@ -45,6 +45,7 @@ Route::middleware(['web'])->group(function (){ //admin用渲染默认要加上w | @@ -45,6 +45,7 @@ Route::middleware(['web'])->group(function (){ //admin用渲染默认要加上w | ||
| 45 | //项目管理 | 45 | //项目管理 |
| 46 | Route::prefix('project')->group(function () { | 46 | Route::prefix('project')->group(function () { |
| 47 | Route::post('/save_server_config', [Aside\ProjectController::class, 'saveServerConfig'])->name('admin.project.save_server_config'); | 47 | Route::post('/save_server_config', [Aside\ProjectController::class, 'saveServerConfig'])->name('admin.project.save_server_config'); |
| 48 | + Route::post('/update_database', [Aside\ProjectController::class, 'updateDatabase'])->name('admin.project.update_database'); | ||
| 48 | }); | 49 | }); |
| 49 | 50 | ||
| 50 | }); | 51 | }); |
-
请 注册 或 登录 后发表评论