From f626acc0aad2d2db3c98d5762f9a6ff47249410d Mon Sep 17 00:00:00 2001 From: Tokumeikoi Date: Mon, 3 Aug 2020 16:10:56 +0800 Subject: [PATCH] opt: ticket service --- .../Controllers/Admin/TicketController.php | 48 +++------------- app/Services/TicketService.php | 57 +++++++++++++++++++ 2 files changed, 64 insertions(+), 41 deletions(-) create mode 100644 app/Services/TicketService.php diff --git a/app/Http/Controllers/Admin/TicketController.php b/app/Http/Controllers/Admin/TicketController.php index c5314284..f89e670a 100644 --- a/app/Http/Controllers/Admin/TicketController.php +++ b/app/Http/Controllers/Admin/TicketController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Admin; use App\Jobs\SendEmailJob; +use App\Services\TicketService; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use App\Models\Ticket; @@ -63,27 +64,12 @@ class TicketController extends Controller if (empty($request->input('message'))) { abort(500, '消息不能为空'); } - $ticket = Ticket::where('id', $request->input('id')) - ->first(); - if (!$ticket) { - abort(500, '工单不存在'); - } - if ($ticket->status) { - abort(500, '工单已关闭,无法回复'); - } - DB::beginTransaction(); - $ticketMessage = TicketMessage::create([ - 'user_id' => $request->session()->get('id'), - 'ticket_id' => $ticket->id, - 'message' => $request->input('message') - ]); - $ticket->last_reply_user_id = $request->session()->get('id'); - if (!$ticketMessage || !$ticket->save()) { - DB::rollback(); - abort(500, '工单回复失败'); - } - DB::commit(); - $this->sendEmailNotify($ticket, $ticketMessage); + $ticketService = new TicketService(); + $ticketService->replayByAdmin( + $request->input('id'), + $request->input('message'), + $request->session()->get('id') + ); return response([ 'data' => true ]); @@ -107,24 +93,4 @@ class TicketController extends Controller 'data' => true ]); } - - // 半小时内不再重复通知 - private function sendEmailNotify(Ticket $ticket, TicketMessage $ticketMessage) - { - $user = User::find($ticket->user_id); - $cacheKey = 'ticket_sendEmailNotify_' . $ticket->user_id; - if (!Cache::get($cacheKey)) { - Cache::put($cacheKey, 1, 1800); - SendEmailJob::dispatch([ - 'email' => $user->email, - 'subject' => '您在' . config('v2board.app_name', 'V2Board') . '的工单得到了回复', - 'template_name' => 'notify', - 'template_value' => [ - 'name' => config('v2board.app_name', 'V2Board'), - 'url' => config('v2board.app_url'), - 'content' => "主题:{$ticket->subject}\r\n回复内容:{$ticketMessage->message}" - ] - ]); - } - } } diff --git a/app/Services/TicketService.php b/app/Services/TicketService.php new file mode 100644 index 00000000..87a17e73 --- /dev/null +++ b/app/Services/TicketService.php @@ -0,0 +1,57 @@ +first(); + if (!$ticket) { + abort(500, '工单不存在'); + } + if ($ticket->status) { + abort(500, '工单已关闭,无法回复'); + } + DB::beginTransaction(); + $ticketMessage = TicketMessage::create([ + 'user_id' => $userId, + 'ticket_id' => $ticket->id, + 'message' => $message + ]); + $ticket->last_reply_user_id = $userId; + if (!$ticketMessage || !$ticket->save()) { + DB::rollback(); + abort(500, '工单回复失败'); + } + DB::commit(); + $this->sendEmailNotify($ticket, $ticketMessage); + } + + // 半小时内不再重复通知 + private function sendEmailNotify(Ticket $ticket, TicketMessage $ticketMessage) + { + $user = User::find($ticket->user_id); + $cacheKey = 'ticket_sendEmailNotify_' . $ticket->user_id; + if (!Cache::get($cacheKey)) { + Cache::put($cacheKey, 1, 1800); + SendEmailJob::dispatch([ + 'email' => $user->email, + 'subject' => '您在' . config('v2board.app_name', 'V2Board') . '的工单得到了回复', + 'template_name' => 'notify', + 'template_value' => [ + 'name' => config('v2board.app_name', 'V2Board'), + 'url' => config('v2board.app_url'), + 'content' => "主题:{$ticket->subject}\r\n回复内容:{$ticketMessage->message}" + ] + ]); + } + } +}