RenewProjectController.php 7.5 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\Manage\ManageLogic;
use App\Http\Logic\Aside\Project\ProjectLogic;
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\HomeCount\Count;
use App\Models\Manage\Manage;
use App\Models\Project\DeployBuild;
use App\Models\Project\DeployOptimize;
use App\Models\Project\Project;
use App\Models\Task\Task;
use Carbon\Carbon;

class RenewProjectController extends BaseController
{
    /**
     * @remark :获取所有服务天数小于15天的项目
     * @name   :lists
     * @author :lyh
     * @method :post
     * @time   :2023/8/11 10:22
     */
    public function lists(Project $project){
        $arr = $this->getLessThanFifteenProjectId();
        $map = [];
        $this->searchParam($map,$this->map,$arr);
        //按类型搜索
        $map['id'] = ['in', $arr];
        $filed = ['id', 'title', 'mysql_id' ,'channel','cooperate_date' ,'type', 'created_at'];
        $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 :获取小于15天的项目id
     * @name   :getlessThanFifteenProjectId
     * @author :lyh
     * @method :post
     * @time   :2023/8/30 11:49
     */
    public function getLessThanFifteenProjectId(){
        $count = new Count();
        $yesterday = Carbon::yesterday()->toDateString();
        $count_list = $count->list(['date'=>$yesterday,'service_day'=>['<=',15]],'id',['project_id']);
        $arr = [];
        if(!empty($count_list)){
            foreach ($count_list as $v){
                $arr[] = $v['project_id'];
            }
        }
        return $arr;
    }

    /**
     * @remark :搜索参数处理
     * @name   :searchParam
     * @author :lyh
     * @method :post
     * @time   :2023/8/30 10:30
     */
    public function searchParam(&$map,$param,&$arr){
        //按类型搜索
        if(!empty($param['search']) && !empty($param['search_type'])){
            if($this->param['search_type'] == 'domain'){
                //搜索域名
                $map['id'] = ['id', 'in', DeployOptimize::where('domain', 'like', "%{$param['search']}%")->where('id','in',$arr)->pluck('project_id')->toArray()];
            }else{
                $map[$this->param['search_type']] = ['like', "%{$this->param['search']}%"];
            }
        }
        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;//未续费网站
        $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']],
            '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,
        ];
        return $item;
    }
}