作者 赵彬吉

update

... ... @@ -8,6 +8,10 @@ use App\Http\Controllers\Bside\BaseController;
use App\Http\Logic\Aside\ServerConfigLogic;
use App\Http\Requests\Aside\ServerConfigRequest;
use App\Models\Project as ProjectModel;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException;
/**
* @name:项目信息
... ... @@ -47,4 +51,39 @@ class ProjectController extends BaseController
$data = $logic->save($this->param);
return $this->success($data);
}
/**
* 更新表结构
* @param ServerConfigLogic $logic
* @author zbj
* @date 2023/4/24
*/
public function updateDatabase(Request $request, ServerConfigLogic $logic){
$request->validate([
'type' => 'in:1,2,3',
'id'=> Rule::requiredIf($request->type == 1),
'sql' => ['required', function ($attribute, $value, $fail) {
if(Str::contains(Str::lower($value), ['drop', 'delete', 'truncate'])){
$fail('危险操作');
}
}]
],[
'id.required' => 'ID不能为空',
'sql.required' => '请输入Sql语句',
]);
switch ($this->param['type']){
case "1":
$data = $logic->updateTable($this->param);
break;
case "2":
$data = $logic->updateLocalTable($this->param);
break;
case "3":
$data = $logic->updateAllTable($this->param);
break;
}
return $this->success($data);
}
}
... ...
... ... @@ -4,6 +4,7 @@ namespace App\Http\Logic\Aside;
use App\Models\Project;
use App\Models\ServerConfig;
use App\Services\ProjectServer;
use Illuminate\Support\Facades\DB;
... ... @@ -26,6 +27,10 @@ class ServerConfigLogic extends BaseLogic
public function save($param)
{
$project = ProjectServer::useProject($param['project_id']);
if(!$project){
$this->fail('项目不存在或者已经删');
}
DB::beginTransaction();
try {
$res = parent::save($param);
... ... @@ -39,12 +44,13 @@ class ServerConfigLogic extends BaseLogic
(new ProjectLogic())->save($data);
//数据库配置
$project = ProjectServer::useProject($param['project_id']);
//初始化数据库
if ($param['type'] == ServerConfig::TYPE_MYSQL) {
//创建数据库
ProjectServer::createDatabase($project);
//创建表
ProjectServer::initTable($project);
}
DB::commit();
} catch (\Exception $e) {
... ... @@ -53,4 +59,58 @@ class ServerConfigLogic extends BaseLogic
}
return $this->success();
}
/**
* 更新指定项目 数据库
* @param $param
* @return array
* @author zbj
* @date 2023/4/24
*/
public function updateTable($param){
$project = ProjectServer::useProject($param['project_id']);
if(!$project){
$this->fail('项目不存在或者已经删');
}
ProjectServer::useProject($param['project_id']);
DB::connection('custom_mysql')->statement($param['sql']);
return $this->success();
}
/**
* 更新本地 数据库
* @param $param
* @return array
* @author zbj
* @date 2023/4/24
*/
public function updateLocalTable($param){
DB::statement($param['sql']);
return $this->success();
}
/**
* 更新所有项目 数据库
* @param $param
* @return array
* @author zbj
* @date 2023/4/24
*/
public function updateAllTable($param){
$projects = Project::all();
foreach ($projects as $project){
//DB类是单例模式,不能用哈 切换配置不会生效
$conn = new \mysqli(
$project->mysqlConfig->host,
$project->mysqlConfig->user,
$project->mysqlConfig->password,
$project->databaseName(),
$project->mysqlConfig->port,
);
$conn->query($param['sql']);
}
return $this->success();
}
}
... ...
... ... @@ -47,7 +47,13 @@ class ProjectServer extends BaseService
*/
public static function createDatabase($project)
{
$conn = new \mysqli($project->mysqlConfig->host, $project->mysqlConfig->user, $project->mysqlConfig->password);
$conn = new \mysqli(
$project->mysqlConfig->host,
$project->mysqlConfig->user,
$project->mysqlConfig->password,
'',
$project->mysqlConfig->port,
);
$conn->query("CREATE DATABASE IF NOT EXISTS {$project->databaseName()}");
return true;
}
... ...
... ... @@ -45,6 +45,7 @@ Route::middleware(['web'])->group(function (){ //admin用渲染默认要加上w
//项目管理
Route::prefix('project')->group(function () {
Route::post('/save_server_config', [Aside\ProjectController::class, 'saveServerConfig'])->name('admin.project.save_server_config');
Route::post('/update_database', [Aside\ProjectController::class, 'updateDatabase'])->name('admin.project.update_database');
});
});
... ...