TaskController.php 4.6 KB
<?php

namespace App\Http\Controllers\Aside\Task;

use App\Enums\Common\Code;
use App\Http\Controllers\Aside\BaseController;
use App\Http\Logic\Aside\Manage\ManageLogic;
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\File\File;
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\Support\Facades\DB;
use Illuminate\Validation\Rule;


/**
 * 工单管理
 * Class TaskController
 * @package App\Http\Controllers\Aside\Task
 * @author zbj
 * @date 2023/4/27
 */
class TaskController extends BaseController
{
    /**
     * @remark :获取工单列表
     * @name   :list
     * @author :lyh
     * @method :post
     * @time   :2023/8/23 15:11
     */
    public function list(Task $task)
    {
        $lists = [];
        //获取所有人员
        $taskOwnerModel = new TaskOwner();
        $manager_list = $taskOwnerModel->select('manage_id', DB::raw('COUNT(*) as count'))
            ->groupBy('manage_id')->get()->toArray();
        $managerModel = new Manage();
        foreach ($manager_list as $k => $v){
            $ids = $taskOwnerModel->where('manage_id', $v['manage_id'])->pluck('task_id')->toArray();
            $lists[$k]['manager_id'] = $v['manage_id'];
            $lists[$k]["manage_id_text"] = $managerModel->read(['id'=>$v['manage_id']])['name'];
            $lists[$k]["count"] = $v['count'];
            $lists[$k]['task_list'] = $this->getTaskList($task,$ids);
        }
        $this->response('success',Code::SUCCESS,$lists);
    }

    /**
     * @remark :获取详情
     * @name   :info
     * @author :lyh
     * @method :post
     * @time   :2023/8/23 15:09
     */
    public function info(TaskLogic $logic){
        $this->request->validate([
            'id'=>'required'
        ],[
            'id.required' => 'ID不能为空'
        ]);
        $data = $logic->getTaskInfo();
        return $this->response('success',Code::SUCCESS,$data);
    }

    /**
     * @remark :保存
     * @name   :save
     * @author :lyh
     * @method :post
     * @time   :2023/8/23 17:13
     */
    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){
        $this->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);
    }

    /**
     * @remark :获取任务列表
     * @name   :getTaskList
     * @author :lyh
     * @method :post
     * @time   :2023/8/23 15:44
     */
    public function getTaskList(&$task,$ids){
        $lists = $task->list(['id'=>['in',$ids]]);
        foreach ($lists as $k => $v){
            $v = $this->getFileUrl($v);
            $lists[$k] = $v;
        }
        return $lists;
    }

    /**
     * @remark :处理文件
     * @name   :getFileUrl
     * @author :lyh
     * @method :post
     * @time   :2023/8/23 16:15
     */
    public function getFileUrl(&$v){
        $fileModel = new File();
        $file_info = $fileModel->read(['hash'=>$v['attachment']]);
        if($file_info !== false){
            $v['attachment_name'] = basename($file_info['path']);
            if($file_info['is_cos'] == 1){
                $cos = config('filesystems.disks.cos');
                $cosCdn = $cos['cdn'];
                $v['attachment'] = $cosCdn.$file_info['path'];
            }else{
                $v['attachment'] = url('a/download_files?hash='.$v['attachment']);
            }
        }
        return $v;
    }
}