DomainInfoLogic.php 5.0 KB
<?php

namespace App\Http\Logic\Aside\Domain;


use App\Http\Logic\Aside\BaseLogic;
use App\Models\Domain\DomainInfo;
use App\Models\Project\Project;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Support\Carbon;

class DomainInfoLogic extends BaseLogic
{

    public function __construct()
    {
        parent::__construct();
        $this->model = new DomainInfo();
        $this->param = $this->requestAll;

    }

    /**
     * @remark :保存域名
     * @name   :createDomain
     * @author :lyh
     * @method :post
     * @time   :2023/8/1 14:52
     */
    public function saveDomain()
    {
        //验证域名
        $this->verifyDomain($this->param['domain'],isset($this->param['id']) ?? '');
        if(isset($this->param['id']) && !empty($this->param['id'])){
            $rs = $this->model->edit($this->param,['id'=>$this->param['id']]);
        }else{
            $data = $this->getDomainInfo($this->param['domain']);
            if(!empty($data['domain_start_time']) && !empty($data['domain_end_time'])){
                $this->param['domain_start_time'] = $data['domain_start_time'];
                $this->param['domain_end_time'] = $data['domain_end_time'];
            }

            $rs = $this->model->add($this->param);
        }
        if($rs === false){
            $this->fail('error');
        }
        return $this->success();
    }

    public function getDomainInfo($domain)
    {
        // 获取域名的开始时间
        $data['domain_start_time'] = Carbon::parse(dns_get_record($domain, DNS_TXT)['0']['entries']['0'])->toDateTimeString();
        // 获取域名的到期时间
        $data['domain_end_time'] = Carbon::parse(dns_get_record($domain, DNS_TXT)['1']['entries']['0'])->toDateTimeString();
        return $this->success($data);
    }

    /**
     * @remark :验证域名是否存在
     * @name   :verifyDomain
     * @author :lyh
     * @method :post
     * @time   :2023/8/1 14:59
     */
    public function verifyDomain($domain,$id = ''){
        if(!empty($id)){
            $info = $this->model->read(['domain'=>$domain,'id'=>['!=',$id]]);
            if ($info !== false) {
                $this->fail('当前域名已存在');
            }
        }else{
            $info = $this->model->read(['domain'=>$domain]);
            if ($info !== false) {
                $this->fail('当前域名已存在');
            }
        }
        return $this->success();
    }

    /**
     * @remark :修改当前域名状态
     * @name   :editStatus
     * @author :lyh
     * @method :post
     * @time   :2023/8/1 15:43
     */
    public function editDomainStatus(){
        //查看当前域名是否有项目在使用
        if($this->param['status'] != $this->model::STATUS_ONE){
            $info = $this->model->read(['id'=>$this->param['id']]);
            if($info === false){
                $this->fail('当前域名有项目正在使用中');
            }
        }
        $rs = $this->model->edit(['status'=>$this->param['status']],['id'=>$this->param['id']]);
        if($rs === false){
            $this->fail('error');
        }
        return $this->success();
    }

    /**
     * @remark :获取所有项目列表
     * @name   :getProjectList
     * @author :lyh
     * @method :post
     * @time   :2023/8/1 16:10
     */
    public function getProjectList($map){
        $projectModel = new Project();
        $lists = $projectModel->list($map,'id',['id','title']);
        return $this->success($lists);
    }

    /**
     * @remark :删除域名
     * @name   :delDomain
     * @author :lyh
     * @method :post
     * @time   :2023/8/1 15:41
     */
    public function delDomain(){
        $this->param['id'] = ['in',$this->param['id']];
        $rs = $this->model->del($this->param);
        if($rs === false){
            $this->fail('error');
        }
        return $this->success();
    }


    public function infoDomain(){
        $info = $this->model->read(['id'=>$this->param['id']]);
        if($info === false){
            $this->fail('当前数据不存在或者已被删除');
        }
        if(!empty($info['project_id'])){
            $info['company'] = (new Project())->read(['id'=>$info['project_id']],['title'])['title'];
        }
        return $this->success($info);
    }



    /**
     * 域名到期时间
     * @param $domain
     * @return array
     * @throws GuzzleException
     */
    public function getDomainTime($domain)
    {
        $url    = "http://openai.waimaoq.com/v1/whois_api?domain={$domain}";
        $client = new Client(['verify' => false]);
        $http   = $client->get($url);
        $data   = [];
        if ($http->getStatusCode() != 200) {
            return $data;
        }
        $content = $http->getBody()->getContents();
        $json    = json_decode($content, true);
        if ($json['code'] == 200) {
            $con               = $json['text'];
            $data['domain']    = $domain;
            $data['validFrom'] = $con['creation_date'];
            $data['validTo']   = $con['expiration_date'];
        }
        return $data;
    }


}