Project.php 5.7 KB
<?php

namespace App\Models\Project;

use App\Helper\Arr;
use App\Models\Base;
use App\Models\Devops\ServerConfig;
use App\Services\Facades\Upload;
use Illuminate\Support\Facades\Cache;

class Project extends Base
{
    //设置关联表名
    protected $table = 'gl_project';

    const DATABASE_NAME_FIX = 'gl_data_';

    /**
     * 星级客户
     * @return string[]
     * @author zbj
     * @date 2023/4/25
     */
    public static function levelMap()
    {
        return [
            1 => '★★★Ads-Customer',
            2 => '暂停优化',
            3 => '告知书一',
            4 => '告知书二',
            5 => 'Q告知书二',
        ];
    }

    /**
     * 项目分类
     * @return string[]
     * @author zbj
     * @date 2023/4/26
     */
    public static function typeMap()
    {
        return [
            1 => '建站进程中',
            2 => '已完成–推广进程中',
            3 => '已完成-建站用户',
            4 => '续费记录单',
            5 => '推广续网站',
            6 => '未续费项目',
            7 => '特殊推广项目'
        ];
    }

    public static function planMap()
    {
        return [
            1 => '标准版',
            2 => '商务版',
            3 => '旗舰版',
            4 => '【PLUS】尊贵版',
            5 => '【PLUS】至尊版',
            6 => '仅建站(模板)',
            7 => '仅建站(订制)',
            8 => '星链网站(1年版)',
            9 => '星链网站(2年版)'
        ];
    }

    public static function specialMap()
    {
        return [
            1 => '自建站项目',
            2 => '重点跟进',
            3 => '推广案例',
            4 => '全球搜案例',
            5 => '设计师案例',
        ];
    }


    /**
     * 项目部署服务器信息
     * @return \Illuminate\Database\Eloquent\Relations\HasOne
     */
    public function serverConfig()
    {
        return self::hasOne(ServerConfig::class, 'id', 'serve_id');
    }

    /**
     * 项目部署mysql数据库信息
     * @return \Illuminate\Database\Eloquent\Relations\HasOne
     */
    public function mysqlConfig()
    {
        return self::hasOne(ServerConfig::class, 'id', 'mysql_id');
    }

    /**
     * 项目使用Redis服务器信息, 如果没有即使用默认配置
     * @return \Illuminate\Database\Eloquent\Relations\HasOne
     */
    public function redisConfig()
    {
        return self::hasOne(ServerConfig::class, 'id', 'redis_id');
    }

    /**
     * 获取项目对应数据库名称
     * 初始化数据库、数据表迭代等功能使用
     * TODO 如果前缀变更,请使用该方法进行处理
     * @return string
     */
    public function databaseName()
    {
        return self::DATABASE_NAME_FIX . $this->id;
    }

    /**
     * 付款续费信息
     * @return \Illuminate\Database\Eloquent\Relations\HasOne
     * @author zbj
     * @date 2023/4/26
     */
    public function payment()
    {
        return self::hasOne(Payment::class, 'project_id', 'id');
    }

    /**
     * 建站部署信息
     * @return \Illuminate\Database\Eloquent\Relations\HasOne
     * @author zbj
     * @date 2023/4/26
     */
    public function deploy_build()
    {
        return self::hasOne(DeployBuild::class, 'project_id', 'id');
    }

    /**
     * 建站部署信息
     * @return \Illuminate\Database\Eloquent\Relations\HasOne
     * @author zbj
     * @date 2023/4/26
     */
    public function deploy_optimize()
    {
        return self::hasOne(DeployOptimize::class, 'project_id', 'id');
    }

    public function setLevelAttribute($value)
    {
        $this->attributes['level'] = Arr::arrToSet($value);
    }

    public function getLevelAttribute($value)
    {
        return Arr::setToArr($value);
    }

    public function setChannelAttribute($value)
    {
        $this->attributes['channel'] = Arr::a2s($value);
    }

    public function getChannelAttribute($value)
    {
        return Arr::s2a($value);
    }

    public function setNoticeFileAttribute($value)
    {
        foreach ($value as &$v) {
            $v = Upload::url2path($v);
        }
        $this->attributes['notice_file'] = Arr::a2s($value);
    }

    public function getNoticeFileAttribute($value)
    {
        $value = Arr::s2a($value);
        if(!empty($value)){
            foreach ($value as &$v) {
                $v = Upload::path2url($v);
            }
        }
        return $value;
    }

    public function setConfirmFileAttribute($value)
    {
        foreach ($value as &$v) {
            $v = Upload::url2path($v);
        }
        $this->attributes['confirm_file'] = Arr::a2s($value);
    }

    public function getConfirmFileAttribute($value)
    {
        $value = Arr::s2a($value);
        if(!empty($value)) {
            foreach ($value as &$v) {
                $v = Upload::path2url($v);
            }
        }
        return $value;
    }

    /**
     * 根据域名获取项目信息
     * @author zbj
     * @date 2023/5/5
     */
    public static function getProjectByDomain($domain)
    {
        $cache_key = 'project_' . $domain;
        $data = Cache::get($cache_key);
        if (!$data) {
            //是否测试域名
            $project_id = DeployBuild::where('test_domain', $domain)->value('project_id');
            //是否正式域名
            if (!$project_id) {
                $project_id = DeployOptimize::where('domain', $domain)->value('project_id');
            }
            if (!$project_id) {
                return [];
            }
            $data = self::find($project_id);
            if ($data) {
                Cache::put($cache_key, $data);
            }
        }
        return $data;
    }

}