WorkOrderController.php 4.1 KB
<?php

namespace App\Http\Controllers\Aside\WorkOrder;

use App\Enums\Common\Code;
use App\Http\Controllers\Aside\BaseController;
use App\Http\Requests\Aside\WorkOrder\WorkOrderListRequest;
use App\Http\Requests\Aside\WorkOrder\WorkOrderUpdateRequest;
use App\Models\WorkOrder\WorkOrder;
use App\Models\WorkOrder\WorkOrderLog;

class WorkOrderController extends BaseController
{
    /**
     * A端工单列表
     * 显示有我参与的工单列表
     */
    public function index(WorkOrderListRequest $request)
    {
        /*
         * A端工程师工单列表, 查询我的工单
         */
        $request->validated();
        # manage_id 或 engineer_id 是我
        $lists = WorkOrderLog::with([
            'workOrder.logs.manager:id,name',
        ])
            ->where('manage_id', $this->manage['id'])
            ->when($request->has('status'), function ($query) use ($request) {
                return $query->where('status', $request->input('status'));
            })
            ->when($request->has('search'), function ($query) use ($request) {
                return $query->whereHas('workOrder', function ($q) use ($request) {
                    $q->where('product', 'like', '%' . $request->input('search') . '%')
                        ->orWhere('content', 'like', '%' . $request->input('search') . '%');
                });
            })
            ->orderBy('id', 'desc')
            ->paginate($this->row, ['*'], 'page', $this->page);
        $this->response('success', Code::SUCCESS, $lists);
    }


    /**
     * @param WorkOrderListRequest $request
     * @return void
     * A端管理员的工单列表
     */
    public function manager(WorkOrderListRequest $request)
    {
        $request->validated();
        // 管理员查看所有工单
        $lists = WorkOrder::with([
            'user:id,name',
            'manager:id,name',
            'engineer:id,name',
            'logs.manager:id,name',
        ])
            ->when($request->has('status'), function ($query) use ($request) {
                return $query->where('status', $request->input('status'));
            })
            ->when($request->has('search'), function ($query) use ($request) {
                return $query->where('product', 'like', '%' . $request->input('search') . '%')
                    ->orWhere('content', 'like', '%' . $request->input('search') . '%');
            })
            ->orderBy('id', 'desc')
            ->paginate($this->row, ['*'], 'page', $this->page);
        $this->response('success', Code::SUCCESS, $lists);
    }

    /**
     * A端工单详情
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        $workOrder = WorkOrder::with([
            'logs.manager:id,name',
            'user:id,name',
            'manager:id,name',
            'engineer:id,name',
        ])->find($id);

        if (!$workOrder)
            $this->response('工单不存在', Code::USER_MODEL_NOTFOUND_ERROE);

        // TODO 判断是否有查看工单详情权限,待添加
        $this->response('success', Code::SUCCESS, $workOrder->toArray());
    }

    /**
     * A端更新工单
     * 要么更新状态,要么分配工程师
     */
    public function update(WorkOrderUpdateRequest $request, $id)
    {
        $request->validated();
        // 更新工单状态
        $workOrder = WorkOrder::find($id);
        if (!$workOrder) {
            $this->response('工单不存在', Code::USER_MODEL_NOTFOUND_ERROE);
        }
        if ($request->has('status'))
            $workOrder->status = $request->input('status');
        if ($request->has('engineer_id'))
        {
            try {
                // 利用唯一索引去重
                $log = new WorkOrderLog();
                $log->manage_id = $request->input('engineer_id');
                $workOrder->logs()->save($log);
            }catch (\Exception $exception){}
            $workOrder->engineer_id = $request->input('engineer_id');
        }
        $workOrder->save();
        $this->response('success', Code::SUCCESS, $workOrder->toArray());
    }

}