RenewProjectController.php 8.2 KB
<?php
/**
 * @remark :
 * @name   :RenewProjectController.php
 * @author :lyh
 * @method :post
 * @time   :2023/8/11 10:22
 */

namespace App\Http\Controllers\Aside\Project;

use App\Enums\Common\Code;
use App\Http\Controllers\Aside\BaseController;
use App\Http\Logic\Aside\Project\RenewLogic;
use App\Models\ASide\APublicModel;
use App\Models\Channel\Channel;
use App\Models\Domain\DomainInfo;
use App\Models\Manage\Manage;
use App\Models\Project\Project;
use App\Models\Project\ProjectRenew;
use App\Models\Task\Task;

class RenewProjectController extends BaseController
{
    /**
     * @remark :获取所有服务天数小于15天的项目
     * @name   :lists
     * @author :lyh
     * @method :post
     * @time   :2023/8/11 10:22
     */
    public function lists(Project $project){
        $map = $this->searchParam($this->map);
        $filed = ['id', 'title', 'type' ,'mysql_id' ,'channel','cooperate_date' ,'type', 'remain_day' ,'created_at','delete_status'];
        $lists = $project->formatQuery($map)->select($filed)->with('payment')->with('deploy_build')
            ->with('deploy_optimize')->with('online_check')->paginate($this->row, ['*'], 'page', $this->page);
        if(!empty($lists)){
            $lists = $lists->toArray();
            $manageModel = new Manage();
            $domainModel = new DomainInfo();
            foreach ($lists['list'] as $k=>$item){
                $item = $this->handleParam($item,$manageModel,$domainModel);
                $lists['list'][$k] = $item;
            }
        }
        $this->response('success',Code::SUCCESS,$lists);
    }


    /**
     * @remark :搜索参数处理
     * @name   :searchParam
     * @author :lyh
     * @method :post
     * @time   :2023/8/30 10:30
     */
    public function searchParam($param){
        $map = [];
        //按类型搜索
        if(!empty($param['search']) && !empty($param['search_type'])){
            $map[$this->param['search_type']] = ['like', "%{$this->param['search']}%"];
        }
        //按类型搜索
        $map['delete_status'] = 0;
        $map['type'] = ['in',[2,3,4]];
        $map['remain_day'] = ['<=',15];
        return $map;
    }

    /**
     * @remark :续费记录单
     * @name   :renewLists
     * @author :lyh
     * @method :post
     * @time   :2023/8/11 17:28
     */
    public function renewLists(RenewLogic $logic){
        if(isset($this->map['company']) && !empty($this->map['company'])){
            $this->map['company'] = ['like','%'.$this->map['company'].'%'];
        }
        $lists = $logic->renewListsLog($this->map,$this->page,$this->row,$this->order);
        $this->response('success',Code::SUCCESS,$lists);
    }

    /**
     * @remark :获取续费单详情
     * @name   :info
     * @author :lyh
     * @method :post
     * @time   :2023/8/14 9:08
     */
    public function info(RenewLogic $logic){
        $this->request->validate([
            'id'=>'required',
        ],[
            'id.required' => 'ID不能为空'
        ]);
        $info = $logic->renewRead();
        $this->response('success',Code::SUCCESS,$info);
    }

    /**
     * @remark :未续费项目列表
     * @name   :notHaveRenewItems
     * @author :lyh
     * @method :post
     * @time   :2023/8/18 14:33
     */
    public function notHaveRenewItems(Project $project){
        $this->map['extend_type'] = $project::TYPE_FIVE;//未续费网站        if(!empty($param['search']) && !empty($param['search_type'])){
        if(!empty($this->map['title'])){
            $this->map['title'] = ['like', '%'.$this->map['title'].'%'];
        }
        $lists = $project->where($this->map)->with('payment')->with('deploy_build')
            ->with('deploy_optimize')->with('online_check')
            ->with('project_after')->paginate($this->row, ['*'], 'page', $this->page);
        if(!empty($lists)){
            $lists = $lists->toArray();
            $manageModel = new Manage();
            $domainModel = new DomainInfo();
            foreach ($lists['list'] as $k=>$item){
                $item = $this->handleParam($item,$manageModel,$domainModel);
                $lists['list'][$k] = $item;
            }
        }
        $this->response('success',Code::SUCCESS,$lists);
    }

    /**
     * @remark :参数处理
     * @name   :handleParam
     * @author :lyh
     * @method :post
     * @time   :2023/8/18 14:44
     */
    public function handleParam(&$item,&$manageModel,&$domainModel){
        if($item['type'] != Project::TYPE_ZERO){
            $data = APublicModel::getNumByProjectId($item['id']);
        }
        $item = [
            'id' => $item['id'],
            'title' => $item['title'],
            'channel' => Channel::getChannelText($item['channel']['user_id'] ?? 0),
            'key' => $item['deploy_build']['keyword_num'] ?? 0,
            'day' => $item['deploy_build']['service_duration'] ?? 0,
            'amount' => $item['payment']['amount'] ?? 0,
            'build_leader' => $manageModel->getName($item['deploy_build']['leader_mid']), //组长
            'build_manager' => $manageModel->getName($item['deploy_build']['manager_mid']), //项目经理
            'build_designer' => $manageModel->getName($item['deploy_build']['designer_mid']), //设计师
            'build_tech' => $manageModel->getName($item['deploy_build']['tech_mid']), //技术助理
            'optimize_manager' => $manageModel->getName($item['deploy_optimize']['manager_mid']), //优化服务经理
            'optimize_optimist' => $manageModel->getName($item['deploy_optimize']['optimist_mid']), //优化师
            'optimize_assist' => $manageModel->getName($item['deploy_optimize']['assist_mid']), //优化助理
            'optimize_tech' => $manageModel->getName($item['deploy_optimize']['tech_mid']), //售后技术
            'type' => $item['type'],
            'test_domain' => $item['deploy_build']['test_domain'] ?? 0,
            'plan' =>Project::planMap()[$item['deploy_build']['plan']],
            'plan_id' =>$item['deploy_build']['plan'],
            'domain' => !empty($item['deploy_optimize']['domain']) ?  $domainModel->getDomain($item['deploy_optimize']['domain']) : '',
            'created_at' => date('Y年m月d日', strtotime($item['created_at'])),
            'autologin_code' => getAutoLoginCode($item['id']),
            'product_num' => $data['product'] ?? 0,
            'keyword_num' => $item['deploy_build']['keyword_num'] ?? 0,
            'article_num' => ($data['blog'] ?? 0) + ($data['news'] ?? 0),
            'task_finish_num' => Task::getNumByProjectId($item['id'], Task::STATUS_DOWN),
            'task_pending_num' => Task::getNumByProjectId($item['id'], [Task::STATUS_DONGING, Task::STATUS_WAIT]),
            'optimist_status'=>$item['online_check']['optimist_status'] ?? 0,
            'qa_status'=>$item['online_check']['qa_status'] ?? 0,
            'service_day'=>$item['remain_day'] ?? 0,
        ];
        return $item;
    }

    /**
     * @remark :关联续费单
     * @name   :editRenew
     * @author :lyh
     * @method :post
     * @time   :2023/9/19 9:59
     */
    public function editRenew(RenewLogic $logic){
        $this->request->validate([
            'id'=>'required',
            'renew_id'=>'required',
        ],[
            'id.required' => 'id不能为空',
            'renew_id'=>'续费单id不能为空',
        ]);
        $logic->editProjectRenew();
        $this->response('同步成功');
    }

    /**
     * @remark :获取所有续费单
     * @name   :getRenewList
     * @author :lyh
     * @method :post
     * @time   :2023/9/19 11:21
     */
    public function getRenewList(ProjectRenew $projectRenew){
        $this->map['project_id'] = 0;
        $this->map['status'] = 0;
        $list = $projectRenew->list($this->map);
        $this->response('success',Code::SUCCESS,$list);
    }

    /**
     * @remark :逻辑删除续费单
     * @name   :delRenew
     * @author :lyh
     * @method :post
     * @time   :2023/9/19 15:47
     */
    public function editStatusRenew(RenewLogic $logic){
        $this->request->validate([
            'id'=>'required',
            'status'=>'required',
        ],[
            'id.required' => 'id不能为空',
            'status.required' => 'status不能为空',
        ]);
        $logic->editStatus();
        $this->response('success');
    }

}