ProjectLogic.php 6.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\Http\Logic\Aside\Manage\ManageLogic;
use App\Models\City;
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\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']);
        $list =  parent::getList($map, $sort, ['id', 'title', 'channel', 'type', 'created_at'], $limit);
        foreach ($list['list'] as &$item){
            $item = [
                'id' => $item['id'],
                'title' => $item['title'],
                'channel' => $item['channel']['channel']??'' . ' - ' . $item['channel']['saler']??'',
                'key' => $item['deploy_build']['keyword_num'] ?? 0,
                'day' => $item['deploy_build']['service_duration'] ?? 0,
                'amount' => $item['payment']['amount'] ?? 0,
                'build_leader' => ManageLogic::getCacheName($item['deploy_build']['leader_mid'] ?? 0), //组长
                'build_manager' => ManageLogic::getCacheName($item['deploy_build']['manager_mid'] ?? 0), //项目经理
                'build_designer' => ManageLogic::getCacheName($item['deploy_build']['designer_mid'] ?? 0), //设计师
                'build_tech' => ManageLogic::getCacheName($item['deploy_build']['tech_mid'] ?? 0), //技术助理
                'optimize_manager' => ManageLogic::getCacheName($item['deploy_optimize']['manager_mid'] ?? 0), //优化服务经理
                'optimize_optimist' => ManageLogic::getCacheName($item['deploy_optimize']['optimist_mid'] ?? 0), //优化师
                'optimize_assist' => ManageLogic::getCacheName($item['deploy_optimize']['assist_mid'] ?? 0), //优化助理
                'optimize_tech' => ManageLogic::getCacheName($item['deploy_optimize']['tech_mid'] ?? 0), //售后技术
                'type' => $this->model::typeMap()[$item['type']] ?? '',
                'test_domain' => $item['deploy_build']['test_domain'] ?? 0,
                'domain' => $item['deploy_optimize']['domain'] ?? 0,
                'crated_at' => date('Y年m月d日', strtotime($item['created_at'])),
            ];
        }
        return $list;
    }

    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_optimize']['domain'])){
            $param['deploy_optimize']['domain'] = checkDomain($param['deploy_optimize']['domain']);
            if(!$param['deploy_optimize']['domain']){
                $this->fail('正式域名格式不正确');
            }
        }

        DB::beginTransaction();
        try {
            if(!empty($param['payment']['amount'])) unset($param['payment']['amount']);
            if(!empty($param['deploy_build']['test_domain'])) unset($param['deploy_build']['test_domain']);
            if(!empty($param['deploy_build']['plan'])) unset($param['deploy_build']['plan']);
            $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();
    }

    public function dataSource(){
        $data = [];
        $data['level'] = $this->model::levelMap();
        $data['type'] = $this->model::typeMap();
        $data['special'] = $this->model::specialMap();
        $data['city'] = City::getTreeList();
        return $data;
    }


}