update: ticket

This commit is contained in:
tokumeikoi
2022-04-28 00:58:37 +08:00
parent f40480c918
commit b5a614d901
14 changed files with 98 additions and 52 deletions

View File

@ -36,20 +36,20 @@ class TicketController extends Controller
}
$current = $request->input('current') ? $request->input('current') : 1;
$pageSize = $request->input('pageSize') >= 10 ? $request->input('pageSize') : 10;
$model = Ticket::orderBy('created_at', 'DESC');
$model = Ticket::orderBy('updated_at', 'DESC');
if ($request->input('status') !== NULL) {
$model->where('status', $request->input('status'));
}
if ($request->input('reply_status') !== NULL) {
$model->whereIn('reply_status', $request->input('reply_status'));
}
if ($request->input('email') !== NULL) {
$user = User::where('email', $request->input('email'))->first();
if ($user) $model->where('user_id', $user->id);
}
$total = $model->count();
$res = $model->forPage($current, $pageSize)
->get();
for ($i = 0; $i < count($res); $i++) {
if ($res[$i]['last_reply_user_id'] == $request->session()->get('id')) {
$res[$i]['reply_status'] = 0;
} else {
$res[$i]['reply_status'] = 1;
}
}
return response([
'data' => $res,
'total' => $total

View File

@ -39,13 +39,6 @@ class TicketController extends Controller
$total = $model->count();
$res = $model->forPage($current, $pageSize)
->get();
for ($i = 0; $i < count($res); $i++) {
if ($res[$i]['last_reply_user_id'] == $request->session()->get('id')) {
$res[$i]['reply_status'] = 0;
} else {
$res[$i]['reply_status'] = 1;
}
}
return response([
'data' => $res,
'total' => $total

View File

@ -8,6 +8,7 @@ use App\Http\Requests\User\TicketWithdraw;
use App\Jobs\SendTelegramJob;
use App\Models\User;
use App\Services\TelegramService;
use App\Services\TicketService;
use App\Utils\Dict;
use Illuminate\Http\Request;
use App\Models\Ticket;
@ -40,13 +41,6 @@ class TicketController extends Controller
$ticket = Ticket::where('user_id', $request->session()->get('id'))
->orderBy('created_at', 'DESC')
->get();
for ($i = 0; $i < count($ticket); $i++) {
if ($ticket[$i]['last_reply_user_id'] == $request->session()->get('id')) {
$ticket[$i]['reply_status'] = 0;
} else {
$ticket[$i]['reply_status'] = 1;
}
}
return response([
'data' => $ticket
]);
@ -62,8 +56,7 @@ class TicketController extends Controller
'subject',
'level'
]), [
'user_id' => $request->session()->get('id'),
'last_reply_user_id' => $request->session()->get('id')
'user_id' => $request->session()->get('id')
]));
if (!$ticket) {
DB::rollback();
@ -79,7 +72,7 @@ class TicketController extends Controller
abort(500, __('Failed to open ticket'));
}
DB::commit();
$this->sendNotify($ticket, $ticketMessage);
$this->sendNotify($ticket, $request->input('message'));
return response([
'data' => true
]);
@ -105,19 +98,15 @@ class TicketController extends Controller
if ($request->session()->get('id') == $this->getLastMessage($ticket->id)->user_id) {
abort(500, __('Please wait for the technical enginneer to reply'));
}
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();
$ticketService = new TicketService();
if (!$ticketService->reply(
$ticket,
$request->input('message'),
$request->session()->get('id')
)) {
abort(500, __('Ticket reply failed'));
}
DB::commit();
$this->sendNotify($ticket, $ticketMessage);
$this->sendNotify($ticket, $request->input('message'));
return response([
'data' => true
]);
@ -175,8 +164,7 @@ class TicketController extends Controller
$ticket = Ticket::create([
'subject' => $subject,
'level' => 2,
'user_id' => $request->session()->get('id'),
'last_reply_user_id' => $request->session()->get('id')
'user_id' => $request->session()->get('id')
]);
if (!$ticket) {
DB::rollback();
@ -196,15 +184,15 @@ class TicketController extends Controller
abort(500, __('Failed to open ticket'));
}
DB::commit();
$this->sendNotify($ticket, $ticketMessage);
$this->sendNotify($ticket, $message);
return response([
'data' => true
]);
}
private function sendNotify(Ticket $ticket, TicketMessage $ticketMessage)
private function sendNotify(Ticket $ticket, string $message)
{
$telegramService = new TelegramService();
$telegramService->sendMessageWithAdmin("📮工单提醒 #{$ticket->id}\n———————————————\n主题:\n`{$ticket->subject}`\n内容:\n`{$ticketMessage->message}`", true);
$telegramService->sendMessageWithAdmin("📮工单提醒 #{$ticket->id}\n———————————————\n主题:\n`{$ticket->subject}`\n内容:\n`{$message}`", true);
}
}

View File

@ -10,6 +10,27 @@ use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
class TicketService {
public function reply($ticket, $message, $userId)
{
DB::beginTransaction();
$ticketMessage = TicketMessage::create([
'user_id' => $userId,
'ticket_id' => $ticket->id,
'message' => $message
]);
if ($userId !== $ticket->user_id) {
$ticket->reply_status = 0;
} else {
$ticket->reply_status = 1;
}
if (!$ticketMessage || !$ticket->save()) {
DB::rollback();
return false;
}
DB::commit();
return $ticketMessage;
}
public function replyByAdmin($ticketId, $message, $userId):void
{
$ticket = Ticket::where('id', $ticketId)
@ -24,7 +45,11 @@ class TicketService {
'ticket_id' => $ticket->id,
'message' => $message
]);
$ticket->last_reply_user_id = $userId;
if ($userId !== $ticket->user_id) {
$ticket->reply_status = 0;
} else {
$ticket->reply_status = 1;
}
if (!$ticketMessage || !$ticket->save()) {
DB::rollback();
abort(500, '工单回复失败');