ProjectServer.php 4.6 KB
<?php
/**
 * Created by PhpStorm.
 * User: zhl
 * Date: 2023/4/17
 * Time: 15:16
 */

namespace App\Services;

use App\Models\Project\Project;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;

/**
 * Class ProjectServer
 * @package App\Services
 */
class ProjectServer extends BaseService
{
    /**
     * @param $project_id
     * @return Project|false
     */
    public static function useProject($project_id)
    {
        $project = Project::where(['id' => $project_id])->first();
        if (empty($project)){
            return false;
        }
        if(!$project->mysqlConfig){
            return false;
        }
        // 设置 database.connections.custom_mysql 配置
        config(['database.connections.custom_mysql.host' => $project->mysqlConfig->host]);
        config(['database.connections.custom_mysql.port' => $project->mysqlConfig->port]);
        config(['database.connections.custom_mysql.database' => $project->databaseName()]);
        config(['database.connections.custom_mysql.username' => $project->mysqlConfig->user]);
        config(['database.connections.custom_mysql.password' => $project->mysqlConfig->password]);

        //清除现有的数据库连接配置
        DB::purge('custom_mysql');
        //重连
        DB::connection('custom_mysql')->reconnect();

        // 设置 redis 配置
        return $project;
    }


    /**
     * 创建数据库
     * @param $project
     * @return bool
     * @author zbj
     * @date 2023/4/23
     */
    public static function createDatabase($project)
    {
        $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;
    }


    /**
     * @param $project
     * @return bool
     * @author zbj
     * @date 2023/4/23
     */
    public static function initTable()
    {
        $database_name = DB::connection('custom_tmp_mysql')->getDatabaseName();
        $table = Schema::connection('custom_tmp_mysql')->getAllTables();
        $table = array_column($table, 'Tables_in_' . $database_name);
        foreach ($table as $v) {
            $has_table = Schema::connection('custom_mysql')->hasTable($v);
            if ($has_table) {
                continue;
            }
            $sql = DB::connection('custom_tmp_mysql')->select("SHOW CREATE TABLE {$v}");
            DB::connection('custom_mysql')->statement(get_object_vars($sql[0])['Create Table']);
        }
        return true;
    }

    /**
     * @remark :执行初始数据
     * @name   :saveInitParam
     * @author :lyh
     * @method :post
     * @time   :2023/9/19 14:45
     */
    public static function saveInitParam($project_id){
        $info = DB::connection('custom_mysql')->table('gl_web_nav')->first();
        if(empty($info)){
            $created_at = date('Y-m-d H:i:s');
            $data = [
                ['project_id'=>$project_id,'name'=>'Home','url'=>'nav-home-'.$project_id,'location'=>'header','group_id'=>1,'created_at'=>$created_at,'updated_at'=>$created_at],
                ['project_id'=>$project_id,'name'=>'Products','url'=>'nav-product'.$project_id,'location'=>'header','group_id'=>1,'created_at'=>$created_at,'updated_at'=>$created_at],
                ['project_id'=>$project_id,'name'=>'News','url'=>'nav-news'.$project_id,'location'=>'header','group_id'=>1,'created_at'=>$created_at,'updated_at'=>$created_at],
                ['project_id'=>$project_id,'name'=>'ABOUT US','url'=>'nav-about-us'.$project_id,'location'=>'footer','group_id'=>2,'created_at'=>$created_at,'updated_at'=>$created_at],
                ['project_id'=>$project_id,'name'=>'Contact Us','url'=>'nav-contact-us'.$project_id,'location'=>'footer','group_id'=>2,'created_at'=>$created_at,'updated_at'=>$created_at],
                ['project_id'=>$project_id,'name'=>'FAQ','url'=>'nav-faq'.$project_id,'location'=>'footer','group_id'=>2,'created_at'=>$created_at,'updated_at'=>$created_at],
            ];
            DB::connection('custom_mysql')->table('gl_web_nav')->insert($data);

            $data = [
                ['project_id'=>$project_id,'name'=>'全局顶部菜单','created_at'=>$created_at,'updated_at'=>$created_at],
                ['project_id'=>$project_id,'name'=>'底部菜单','created_at'=>$created_at,'updated_at'=>$created_at],
            ];
            DB::connection('custom_mysql')->table('gl_web_nav_group')->insert($data);
        }
        DB::disconnect('custom_mysql');
        return true;
    }
}