Project.php 4.8 KB
<?php

namespace App\Models\Project;

use App\Helper\Arr;
use App\Models\Base;
use App\Models\Devops\ServerConfig;
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 [
            '营销大师-体验版',
            '营销大师-标准版',
            '营销大师-商务版',
            '营销大师-旗舰版',
            '数据大师-体验版',
            '数据大师-智能版',
            '数据大师-智慧版',
            'PLUS-尊享版',
            'PLUS-尊贵版',
            'PLUS-至尊版',
            '防疫物质推广方案',
            '疫情期间免费版',
            '建站大师定制优化方案',
            '星链网站(1年版)',
            '星链网站(2年版)',
        ];
    }

    /**
     * 项目部署服务器信息
     * @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 setNoticeAttribute($value){
        $this->attributes['notice'] = Arr::a2s($value);
    }

    public function getNoticeAttribute($value){
        return Arr::s2a($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;
    }

}