ProjectLogic.php 4.8 KB
<?php

namespace App\Http\Logic\Aside\Project;


use App\Helper\Arr;
use App\Helper\FormGlobalsoApi;
use App\Http\Logic\Aside\BaseLogic;
use App\Models\InquirySet;
use App\Models\Project\DeployBuild;
use App\Models\Project\DeployOptimize;
use App\Models\Project\Payment;
use App\Models\Project\Project;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;

/**
 * Class ProjectLogic
 * @package App\Http\Logic\Aside\Project
 * @author zbj
 * @date 2023/4/26
 */
class ProjectLogic extends BaseLogic
{
    public function __construct()
    {
        parent::__construct();

        $this->model = new Project();
    }

    public function getList(array $map = [], array $sort = ['id' => 'desc'], array $columns = ['*'], int $limit = 20)
    {
        parent::setWith(['payment', 'deploy_build', 'deploy_optimize']);
        return parent::getList($map, $sort, $columns, $limit);
    }

    public function getInfo($id)
    {
        parent::setWith(['payment', 'deploy_build', 'deploy_optimize']); //删除缓存要添加带with的cache_key
        return parent::getInfo($id);
    }

    public function save($param){
        if(!empty($param['deploy_build']['test_domain'])){
            $param['deploy_build']['test_domain'] = checkDomain($param['deploy_build']['test_domain']);
            if(!$param['deploy_build']['test_domain']){
                $this->fail('测试域名格式不正确');
            }
        }
        if(!empty($param['deploy_optimize']['domain'])){
            $param['deploy_optimize']['domain'] = checkDomain($param['deploy_optimize']['domain']);
            if(!$param['deploy_optimize']['domain']){
                $this->fail('正式域名格式不正确');
            }
        }

        DB::beginTransaction();
        try {
            $res = parent::save($param);
            $param['id'] = $res['id'];
            $this->savePayment($param);
            $this->saveDeployBuild($param);
            $this->saveDeployOptimize($param);

            DB::commit();
        }catch (\Exception $e){
            DB::rollBack();
            errorLog('项目保存失败', $param, $e);
            $this->fail('保存失败');
        }
        return $this->success();
    }

    /**
     * 保存付款续费
     * @author zbj
     * @date 2023/4/26
     */
    protected function savePayment($param){
        if(empty($param['payment'])){
            return true;
        }
        $data = $param['payment'];
        $data['project_id'] = $param['id'];
        $data['id'] = Payment::where('project_id', $param['id'])->value('id');
        Arr::forget($data, ['amount']);
        return (new PaymentLogic)->save($data);
    }

    /**
     * 保存建站部署
     * @author zbj
     * @date 2023/4/26
     */
    protected function saveDeployBuild($param){
        if(empty($param['deploy_build'])){
            return true;
        }
        $data = $param['deploy_build'];
        $data['project_id'] = $param['id'];
        $data['id'] = DeployBuild::where('project_id', $param['id'])->value('id');
        Arr::forget($data, ['test_domain', 'plan']);
        return (new DeployBuildLogic)->save($data);
    }

    /**
     * 保存优化部署
     * @author zbj
     * @date 2023/4/26
     */
    protected function saveDeployOptimize($param){
        if(empty($param['deploy_optimize'])){
            return true;
        }
        $data = $param['deploy_optimize'];
        $data['project_id'] = $param['id'];
        $data['id'] = DeployOptimize::where('project_id', $param['id'])->value('id');
        return (new DeployOptimizeLogic)->save($data);
    }

    public function clearCache($id)
    {
        parent::clearCache($id);
        parent::setWith(['payment', 'deploy_build', 'deploy_optimize']);
        parent::clearCache($id);
    }

    /**
     * 保存询盘通知设置
     * @author zbj
     * @date 2023/5/17
     */
    public function saveInquirySet($param)
    {
        $project = $this->getCacheInfo($param['project_id']);

        //同步到接口
        $domain = parse_url($project['deploy_optimize']['domain'])['host'];
        $emails = Arr::arrToSet($param['emails']??'', 'trim');
        $phones = Arr::arrToSet($param['phones']??'', 'trim');
        $form_globalso_api  = new FormGlobalsoApi();
        $res = $form_globalso_api->setInquiry($domain, $emails, $phones);

        if (!$res) {
            $this->fail('保存失败');
        }
        if ($res['status'] != 200) {
            $this->fail($res['message'] ?? '保存失败');
        }
        //保存
        $set = InquirySet::where('project_id', $param['project_id'])->first();
        if (!$set) {
            $set = new InquirySet();
        }
        $set->project_id = $param['project_id'];
        $set->emails = $emails;
        $set->phones = $phones;
        $set->save();
        return $this->success();
    }
}