|
...
|
...
|
@@ -10,7 +10,6 @@ use App\Helper\Arr; |
|
|
|
use App\Helper\Common;
|
|
|
|
use App\Helper\FormGlobalsoApi;
|
|
|
|
use App\Http\Logic\Aside\BaseLogic;
|
|
|
|
use App\Http\Logic\Aside\Domain\DomainInfoLogic;
|
|
|
|
use App\Jobs\CopyImageFileJob;
|
|
|
|
use App\Jobs\CopyProjectJob;
|
|
|
|
use App\Models\Channel\Channel;
|
|
...
|
...
|
@@ -18,7 +17,8 @@ use App\Models\Channel\User; |
|
|
|
use App\Models\Channel\Zone;
|
|
|
|
use App\Models\Com\NoticeLog;
|
|
|
|
use App\Models\Com\UpdateLog;
|
|
|
|
use App\Models\Devops\ServerConfig;
|
|
|
|
use App\Models\Devops\Servers;
|
|
|
|
use App\Models\Devops\ServersIp;
|
|
|
|
use App\Models\Domain\DomainInfo;
|
|
|
|
use App\Models\Inquiry\InquiryIP;
|
|
|
|
use App\Models\Inquiry\InquirySet;
|
|
...
|
...
|
@@ -38,18 +38,14 @@ use App\Models\RankData\RankData; |
|
|
|
use App\Models\RankData\RankWeek;
|
|
|
|
use App\Models\RankData\RecommDomain;
|
|
|
|
use App\Models\RankData\Speed;
|
|
|
|
use App\Models\RouteMap\RouteMap;
|
|
|
|
use App\Models\User\ProjectMenu;
|
|
|
|
use App\Models\User\ProjectRole;
|
|
|
|
use App\Models\User\User as UserModel;
|
|
|
|
use App\Models\WebSetting\WebLanguage;
|
|
|
|
use App\Services\ProjectServer;
|
|
|
|
use App\Services\SyncService;
|
|
|
|
use App\Utils\HttpUtils;
|
|
|
|
use App\Utils\LogUtils;
|
|
|
|
use GuzzleHttp\Exception\GuzzleException;
|
|
|
|
use Illuminate\Support\Facades\Cache;
|
|
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
use Illuminate\Support\Facades\Http;
|
|
|
|
|
|
|
|
/**
|
|
...
|
...
|
@@ -128,10 +124,10 @@ class ProjectLogic extends BaseLogic |
|
|
|
public function getInitDomain($serve_id = ''){
|
|
|
|
$domain = '';
|
|
|
|
if(!empty($serve_id)){
|
|
|
|
$serveModel = new ServerConfig();
|
|
|
|
$info = $serveModel->read(['id'=>$serve_id]);
|
|
|
|
$serverIpModel = new ServersIp();
|
|
|
|
$info = $serverIpModel->read(['id'=>$serve_id]);
|
|
|
|
if($info !== false){
|
|
|
|
$domain = $info['init_domain'];
|
|
|
|
$domain = $info['domain'];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $this->success(['domain'=>$domain]);
|
|
...
|
...
|
@@ -145,36 +141,64 @@ class ProjectLogic extends BaseLogic |
|
|
|
* @time :2023/8/30 11:57
|
|
|
|
*/
|
|
|
|
public function projectSave(){
|
|
|
|
DB::beginTransaction();
|
|
|
|
try {
|
|
|
|
if($this->param['type'] == Project::TYPE_SEVEN){
|
|
|
|
//错误单直接返回,单独处理
|
|
|
|
$this->setTypeSevenEdit($this->param);
|
|
|
|
}else{
|
|
|
|
//初始化项目
|
|
|
|
$this->createProjectData($this->param);
|
|
|
|
//保存项目信息
|
|
|
|
$this->saveProject($this->param);
|
|
|
|
//保存建站部署信息
|
|
|
|
$this->saveProjectDeployBuild($this->param['deploy_build']);
|
|
|
|
//保存付费信息
|
|
|
|
$this->saveProjectPayment($this->param['payment']);
|
|
|
|
//保存优化信息
|
|
|
|
$this->saveProjectDeployOptimize($this->param['deploy_optimize']);
|
|
|
|
//保存售后信息
|
|
|
|
$this->saveProjectAfter($this->param['project_after']);
|
|
|
|
//单独保存小语种配置
|
|
|
|
$this->saveMinorLanguages($this->param['minor_languages'] ?? [],$this->param['id']);
|
|
|
|
//同步图片文件
|
|
|
|
$this->syncImageFile($this->param['project_location'],$this->param['id']);
|
|
|
|
//同步信息表
|
|
|
|
(new SyncService())->projectAcceptAddress($this->param['id']);
|
|
|
|
if($this->param['type'] == Project::TYPE_SEVEN){
|
|
|
|
//错误单直接返回,单独处理
|
|
|
|
$this->setTypeSevenEdit($this->param);
|
|
|
|
}else{
|
|
|
|
//初始化项目
|
|
|
|
$this->createProjectData($this->param);
|
|
|
|
//双向绑定服务器,需放到保存项目的上方
|
|
|
|
$this->setServers($this->param['serve_id'],$this->param['id']);
|
|
|
|
//保存项目信息
|
|
|
|
$this->saveProject($this->param);
|
|
|
|
//保存建站部署信息
|
|
|
|
$this->saveProjectDeployBuild($this->param['deploy_build']);
|
|
|
|
//保存付费信息
|
|
|
|
$this->saveProjectPayment($this->param['payment']);
|
|
|
|
//保存优化信息
|
|
|
|
$this->saveProjectDeployOptimize($this->param['deploy_optimize']);
|
|
|
|
//保存售后信息
|
|
|
|
$this->saveProjectAfter($this->param['project_after']);
|
|
|
|
//单独保存小语种配置
|
|
|
|
$this->saveMinorLanguages($this->param['minor_languages'] ?? [],$this->param['id']);
|
|
|
|
//同步图片文件
|
|
|
|
$this->syncImageFile($this->param['project_location'],$this->param['id']);
|
|
|
|
//同步信息表
|
|
|
|
(new SyncService())->projectAcceptAddress($this->param['id']);
|
|
|
|
}
|
|
|
|
return $this->success();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @remark :选择服务器后双向绑定
|
|
|
|
* @name :setServers
|
|
|
|
* @author :lyh
|
|
|
|
* @method :post
|
|
|
|
* @time :2024/6/25 15:34
|
|
|
|
*/
|
|
|
|
public function setServers($servers_id,$project_id){
|
|
|
|
//查看當前項目服務器是否有更改
|
|
|
|
$projectModel = new Project();
|
|
|
|
$projectInfo = $projectModel->read(['id'=>$project_id],['serve_id']);
|
|
|
|
$serversIpModel = new ServersIp();
|
|
|
|
$serversModel = new Servers();
|
|
|
|
if(!empty($projectInfo['serve_id'])){
|
|
|
|
if($projectInfo['serve_id'] == $servers_id){
|
|
|
|
return $this->success();
|
|
|
|
}
|
|
|
|
DB::commit();
|
|
|
|
}catch (\Exception $e){
|
|
|
|
DB::rollBack();
|
|
|
|
$this->fail('保存失败,请联系管理员');
|
|
|
|
$oldServerIpInfo = $serversIpModel->read(['id'=>$projectInfo['serve_id']]);
|
|
|
|
if($oldServerIpInfo !== false){
|
|
|
|
$serversIpModel->where(['id'=>$projectInfo['serve_id']])->decrement('total',1);
|
|
|
|
$serversModel->where(['id'=>$oldServerIpInfo['servers_id']])->decrement('being_number',1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$serversIpInfo = $serversIpModel->read(['id'=>$servers_id]);
|
|
|
|
$serversInfo = $serversModel->read(['id'=>$serversIpInfo['servers_id']]);
|
|
|
|
if($serversIpInfo['total'] >= $serversInfo['ip_total']){
|
|
|
|
$this->fail('请选择其他服务器,当前ip已满');
|
|
|
|
}
|
|
|
|
$serversIpModel->where(['id'=>$servers_id])->increment('total',1);
|
|
|
|
$serversModel->where(['id'=>$serversInfo['id']])->increment('being_number',1);
|
|
|
|
return $this->success();
|
|
|
|
}
|
|
|
|
|
|
...
|
...
|
@@ -613,12 +637,21 @@ class ProjectLogic extends BaseLogic |
|
|
|
public function channelSource($param){
|
|
|
|
switch ($param['type']){
|
|
|
|
case Project::TYPE_ONE:
|
|
|
|
return Zone::pluck('title', 'id')->toArray();
|
|
|
|
$data = [0=>'所有'];
|
|
|
|
$list = (new Zone())->list([],'id',['id','title'],'asc');
|
|
|
|
foreach ($list as $v){
|
|
|
|
$data[$v['id']] = $v['title'];
|
|
|
|
}
|
|
|
|
return $data;
|
|
|
|
case Project::TYPE_TWO:
|
|
|
|
if(isset($param['alias'])){
|
|
|
|
return Channel::where('alias', 'like' ,'%'.$param['alias'].'%')->pluck('alias', 'id')->toArray();
|
|
|
|
}
|
|
|
|
return Channel::where('zone_id', $param['zone_id']??0)->pluck('alias', 'id')->toArray();
|
|
|
|
$map = [];
|
|
|
|
if($param['zone_id'] != 0){
|
|
|
|
$map['zone_id'] = $param['zone_id'];
|
|
|
|
}
|
|
|
|
return Channel::where($map)->pluck('alias', 'id')->toArray();
|
|
|
|
case Project::TYPE_THREE:
|
|
|
|
return User::where('channel_id', $param['channel_id']??0)->pluck('name', 'id')->toArray();
|
|
|
|
}
|
|
...
|
...
|
@@ -634,7 +667,18 @@ class ProjectLogic extends BaseLogic |
|
|
|
* @time :2023/9/4 14:29
|
|
|
|
*/
|
|
|
|
public function editDomainStatus($domain,$project_id){
|
|
|
|
|
|
|
|
$projectOptimize = new DeployOptimize();
|
|
|
|
$optimizeInfo = $projectOptimize->read(['project_id'=>$project_id],['domain']);
|
|
|
|
if($optimizeInfo['domain'] == $domain){
|
|
|
|
return $this->success();
|
|
|
|
}
|
|
|
|
$domainModel = new DomainInfo();
|
|
|
|
//查看当前域名是否已使用
|
|
|
|
$domainInfo = $domainModel->read(['id'=>$domain,'project_id'=>['!=',0]]);
|
|
|
|
if($domainInfo !== false){
|
|
|
|
$this->fail('当前域名已被其他服务器使用');
|
|
|
|
}
|
|
|
|
//先清空上一次所绑定的域名
|
|
|
|
$info = $domainModel->read(['project_id'=>$project_id]);
|
|
|
|
if($info !== false){
|
|
...
|
...
|
@@ -664,37 +708,6 @@ class ProjectLogic extends BaseLogic |
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 创建站点
|
|
|
|
* @param $param
|
|
|
|
* @throws AsideGlobalException
|
|
|
|
* @author Akun
|
|
|
|
* @date 2023/10/17 10:04
|
|
|
|
*/
|
|
|
|
public function createSite($param){
|
|
|
|
if(isset($param['serve_id']) && $param['serve_id'] && isset($param['deploy_optimize']['domain']) && $param['deploy_optimize']['domain']){
|
|
|
|
$server_model = new ServerConfig();
|
|
|
|
$server_info = $server_model->read(['id'=>$param['serve_id']],['init_domain','host']);
|
|
|
|
|
|
|
|
$domain_model = new DomainInfo();
|
|
|
|
$domain_info = $domain_model->read(['id'=>$param['deploy_optimize']['domain']],'domain');
|
|
|
|
|
|
|
|
if($server_info && $domain_info){
|
|
|
|
//验证解析
|
|
|
|
if (!empty($domain_info['domain']) && !DomainInfoLogic::instance()->check_cname($domain_info['domain'], $server_info)) {
|
|
|
|
throw new AsideGlobalException(Code::SYSTEM_ERROR,'域名' . $domain_info['domain'] . '未解析至目标服务器');
|
|
|
|
}
|
|
|
|
$api_url = 'http://'.$server_info['init_domain'].'/api/createSite';
|
|
|
|
$api_param = ['domain'=>$domain_info['domain']];
|
|
|
|
try {
|
|
|
|
HttpUtils::get($api_url, $api_param);
|
|
|
|
} catch (\Exception | GuzzleException $e) {
|
|
|
|
errorLog('创建站点', $api_param, $e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @remark :复制项目
|
|
|
|
* @name :copyProject
|
|
|
|
* @author :lyh
|
...
|
...
|
|