ServerConfigLogic.php 2.9 KB
<?php

namespace App\Http\Logic\Aside;



use App\Models\Project;
use App\Models\ServerConfig;
use App\Services\ProjectServer;
use Illuminate\Support\Facades\DB;

/**
 * Class ServerConfigLogic
 * @package App\Http\Logic\Aside
 * @author zbj
 * @date 2023/4/23
 */
class ServerConfigLogic extends BaseLogic
{
    public function __construct()
    {
        parent::__construct();

        $this->model = new ServerConfig();
    }


    public function save($param)
    {
        $project = ProjectServer::useProject($param['project_id']);
        if(!$project){
            $this->fail('项目不存在或者已经删');
        }
        DB::beginTransaction();
        try {
            $res = parent::save($param);

            $data['id'] = $param['project_id'];
            if ($param['type'] == ServerConfig::TYPE_SERVER) {
                $data['serve_id'] = $res['id'];
            }else{
                $data['mysql_id'] = $res['id'];
            }

            (new ProjectLogic())->save($data);

            //初始化数据库
            if ($param['type'] == ServerConfig::TYPE_MYSQL) {
                //创建数据库
                ProjectServer::createDatabase($project);
                //创建表
                ProjectServer::initTable($project);
            }

            DB::commit();
        } catch (\Exception $e) {
            DB::rollBack();
            $this->fail('保存失败');
        }
        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();
    }
}