ProjectLogic.php 3.0 KB
<?php

namespace App\Http\Logic\Aside\Project;


use App\Helper\Arr;
use App\Http\Logic\Aside\BaseLogic;
use App\Models\Project\DeployBuild;
use App\Models\Project\DeployOptimize;
use App\Models\Project\Payment;
use App\Models\Project\Project;
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){
        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);
    }
}