TaskController.php 4.9 KB
<?php

namespace App\Http\Controllers\Aside\Task;

use App\Http\Controllers\Aside\BaseController;
use App\Http\Logic\Aside\Task\TaskFollowLogic;
use App\Http\Logic\Aside\Task\TaskLogic;
use App\Http\Logic\Aside\Task\TaskOwnerLogic;
use App\Http\Requests\Aside\Task\TaskFollowRequest;
use App\Http\Requests\Aside\Task\TaskRequest;
use App\Models\Manage\Manage;
use App\Models\Project\Project;
use App\Models\Task\Task;
use App\Models\Task\TaskOwner;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;


/**
 * 工单管理
 * Class TaskController
 * @package App\Http\Controllers\Aside\Task
 * @author zbj
 * @date 2023/4/27
 */
class TaskController extends BaseController
{

    public function list(TaskLogic $logic)
    {
        $map = [];
        if(!empty($this->param['search']) && !empty($this->param['search_type'])){
            if($this->param['search_type'] == 'project'){
                $map[] = ['project_id', 'in', Project::where('title', 'like', "%{$this->param['search']}%")->pluck('id')->toarray()];
            }else{
                $map[] = [$this->param['search_type'], 'like', "%{$this->param['search']}%"];
            }
        }
        if(!empty($this->param['dep_id'])){
            $manage_ids = Manage::where('dept_id', $this->param['dep_id'])->pluck('id')->toArray();
            $map[] = ['gto.manage_id', 'in', $manage_ids];
        }
        if(!empty($this->param['manage_id']) && !empty($this->param['type'])){
            if($this->param['type'] == 1){
                $map[] = ['created_manage_id', $this->param['manage_id']];
            }else{
                $map[] = ['gto.manage_id', $this->param['manage_id']];
            }
        }

        $sort = ['id' => 'desc'];
        $data = $logic->getUserlist($map, $sort, ['id', 'project_id', 'workload', 'priority', 'content', 'attachment', 'status', 'end_at', 'created_manage_id']);

        return $this->success($data);
    }

    public function items(Request $request, TaskLogic $logic)
    {
        $request->validate([
            'own_manage_id'=>'required'
        ],[
            'own_manage_id.required' => '所属人ID不能为空'
        ]);
        $map[] = ['id', 'in', TaskOwner::where('manage_id', $this->param['own_manage_id'])->pluck('id')->toArray()];
        if(!empty($this->param['search']) && !empty($this->param['search_type'])){
            if($this->param['search_type'] == 'project'){
                $map[] = ['project_id', 'in', Project::where('title', 'like', "%{$this->param['search']}%")->pluck('id')->toarray()];
            }else{
                $map[] = [$this->param['search_type'], 'like', "%{$this->param['search']}%"];
            }
        }
        if(!empty($this->param['dep_id'])){
            $manage_ids = Manage::where('dept_id', $this->param['dep_id'])->pluck('id')->toArray();
            $map[] = ['id', 'in', TaskOwner::whereIn('manage_id',$manage_ids)->pluck('task_id')->toArray()];
        }
        if(!empty($this->param['manage_id']) && !empty($this->param['type'])){
            if($this->param['type'] == 1){
                $map[] = ['created_manage_id', $this->param['manage_id']];
            }else{
                $map[] = ['id', 'in', TaskOwner::where('manage_id', $this->param['manage_id'])->pluck('task_id')->toArray()];
            }
        }
        $sort = ['id' => 'desc'];
        $data = $logic->getList($map, $sort, ['id', 'project_id', 'workload', 'priority', 'content', 'attachment', 'status', 'end_at', 'created_manage_id']);

        return $this->success($data);
    }


    public function info(Request $request, TaskLogic $logic){
        $request->validate([
            'id'=>'required'
        ],[
            'id.required' => 'ID不能为空'
        ]);
        $data = $logic->getInfo($this->param['id']);
        return $this->success($data);
    }

    public function save(TaskRequest $request, TaskLogic $logic)
    {
        $this->param['created_manage_id'] = $this->manage->id;
        $data = $logic->save($this->param);
        return $this->success($data);
    }

    /**
     * 修改状态
     * @param Request $request
     * @param TaskLogic $logic
     * @author zbj
     * @date 2023/4/27
     */
    public function status(Request $request, TaskLogic $logic){
        $request->validate([
            'id'=>'required',
            'status' => ['required', Rule::in(array_keys(Task::statusMap()))]
        ],[
            'id.required' => 'ID不能为空',
            'status.required' => '请选择状态',
            'status.in' => '状态值不正确',
        ]);
        $data = $logic->status($this->param['id'], $this->param['status']);
        return $this->success($data);
    }


    /**
     * 添加跟进记录
     * @param TaskFollowRequest $request
     * @param TaskFollowLogic $logic
     * @author zbj
     * @date 2023/4/27
     */
    public function save_follow(TaskFollowRequest $request, TaskFollowLogic $logic){
        $data = $logic->save($this->param);
        return $this->success($data);
    }
}