AsideTicketLogController.php 3.0 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\AsideTicketLogUpdateRequest;
use App\Models\WorkOrder\TicketLog;
use App\Models\WorkOrder\Tickets;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class AsideTicketLogController extends BaseController
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * A 端完结工单任务
     */
    public function update(AsideTicketLogUpdateRequest $request, $id)
    {
        $log = TicketLog::find($id);  // 拆分的子工单
        if (!$log) {
            $this->response('工单不存在', Code::USER_MODEL_NOTFOUND_ERROE);
        }
        if ($log->engineer_id != $this->manage['id']) {
            // 只能操作自己的工单
            $this->response('没有权限操作该工单', Code::USER_PERMISSION_ERROE);
        }
        if ($log->status >= TicketLog::STATUS_COMPLETED) {
            // 已经完成的工单不能再操作
            $this->response('工单已完成,不能再操作', Code::USER_PERMISSION_ERROE);
        }
        $ticket = $log->ticket;
        $result = DB::transaction(function () use ($request, $ticket, $log) {
            if ($request->input('status') !== null)
            {
                $log->status = $request->input('status');
                if ($log->status >= TicketLog::STATUS_COMPLETED)
                {
                    // 我的工单标记为已完成
                    $log->end_at = now();
                }
            }
            if ($request->input('reply') !== null)
                $log->reply = $request->input('reply', '');
            $log->save();
            // 是否有未完成的子任务
            $pending = $ticket->logs()
                ->where('status', '<', TicketLog::STATUS_COMPLETED)
                ->count();
            if ($pending)
            {
                $ticket->status = Tickets::STATUS_PROCESSING;
            }else
            {
                $ticket->status = Tickets::STATUS_COMPLETED;
                // 如果所有子任务都完成了,则将工单状态改为已完成
                $ticket->end_at = now();
            }
            $ticket->save();
            return $log;
        });
        $this->response('success', Code::SUCCESS, $result->toArray());

    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}