PackDirController.php 3.5 KB
<?php

namespace App\Http\Controllers\Aside\PackDir;

use App\Enums\Common\Code;
use App\Http\Controllers\Aside\BaseController;
use App\Models\Devops\ServerConfig;
use App\Models\Devops\Servers;
use App\Models\Devops\ServersIp;
use App\Models\Domain\DomainInfo;
use App\Models\Manage\Manage;
use App\Models\PackDir\SitePackTask;
use App\Models\Project\Project;

class PackDirController extends BaseController
{
    /**
     * 获取打包静态页面任务列表
     * @author Akun
     * @date 2024/10/08 16:12
     */
    public function getTaskLists()
    {
        $autoModule = new SitePackTask();
        $lists = $autoModule->lists($this->map, $this->page, $this->row);
        if (!empty($lists)) {
            $projectModel = new Project();
            $manageModel = new Manage();
            $serverModel = new Servers();
            $domainModel = new DomainInfo();
            foreach ($lists['list'] as $k => $v) {
                $lists['list'][$k]['operator_name'] = $manageModel->getName($v['user_id']);
                $lists['list'][$k]['project_name'] = $projectModel->getProjectName($v['project_id']);

                $download_url = '';
                if ($v['status'] == 2) {
                    $server_info = $serverModel->read(['id' => $v['server_id']], ['init_domain']);
                    $domain_info = $domainModel->read(['project_id' => $v['project_id']], ['domain']);
                    if ($server_info && $domain_info) {
                        $download_url = 'https://' . $server_info['init_domain'] . '/pack_sites/' . $domain_info['domain'] . '_' . date('YmdHis', strtotime($v['created_at'])) . '.zip';
                    }
                }
                $lists['list'][$k]['download_url'] = $download_url;
            }
        }

        $this->response('success', Code::SUCCESS, $lists);
    }

    /**
     * 添加静态页面打包任务
     * @throws \App\Exceptions\AsideGlobalException
     * @author Akun
     * @date 2024/10/08 16:39
     */
    public function saveTask()
    {
        $this->request->validate([
            'project_id' => 'required',
        ], [
            'project_id.required' => '项目不能为空'
        ]);

        $domainModel = new DomainInfo();
        $domain_info = $domainModel->read(['project_id' => $this->param['project_id']], ['domain']);
        if (!$domain_info) {
            $this->fail('项目未上线,无法打包静态页面');
        }
        $projectModel = new Project();
        $project_info = $projectModel->read(['id' => $this->param['project_id']], ['serve_id']);
        if (!$project_info) {
            $this->fail('未查询到项目信息');
        }
        $serverIpModel = new ServersIp();
        $server_ip_info = $serverIpModel->read(['id' => $project_info['serve_id']], ['servers_id']);
        if (!$server_ip_info) {
            $this->fail('未查询到项目所属服务器信息');
        }
        if ($server_ip_info['servers_id'] == ServerConfig::SELF_SITE_ID) {
            $this->fail('自建站项目不持支打包静态页面');
        }

        $data = [
            'user_id' => $this->uid,
            'project_id' => $this->param['project_id'],
            'server_id' => $server_ip_info['servers_id']
        ];
        $model = new SitePackTask();
        $pack_info = $model->read(array_merge($data, ['status' => ['in', [SitePackTask::STATUS_UN, SitePackTask::STATUS_ING]]]));
        if ($pack_info) {
            $this->fail('当前项目已有打包任务进行中,请勿重复提交');
        }
        $model->add($data);

        $this->response('success');
    }
}