user())->with(['logs'=>function ($q) use ($request) { return $q->where('user_id', '=', $request->user()->id); }])->orderBy('created_at', 'desc')->simplePaginate(PaginatorHelper::resolvePerPage('per_page', 20, 50)); return MessageResource::collection($list); } /** * 确认消息 * * @param Request $request * @return void */ public function read($id, Request $request) { $message = Message::userMessages($request->user())->findOrFail($id); if (MessageReadLog::where('message_id', $message->id)->exists()) { throw new BizException('该消息已确认,无需重复操作'); } MessageReadLog::create([ 'user_id' => $request->user()->id, 'message_id' => $message->id, ]); return response()->noContent(); } /** * 批量已读 * 只有系统消息才能批量已读 * * @param Request $request * @return void */ public function batchRead(Request $request) { $ids = Message::userMessages($request->user())->with('logs')->where('user_id', 0)->whereDoesntHave('logs', function ($q) use ($request) { return $q->where('user_id', '=', $request->user()->id); })->pluck('id')->toArray(); if (count($ids) > 0) { try { DB::beginTransaction(); MessageReadLog::insert(array_map(function ($value) use ($request) { return [ 'user_id' => $request->user()->id, 'message_id' => $value, 'created_at' => now(), 'updated_at' => now(), ]; }, $ids)); DB::commit(); } catch (Throwable $th) { DB::rollBack(); report($th); throw new BizException('操作失败,请稍后再试'); } } return response()->noContent(); } /** * 待读条数 * * @param Request $request * @return void */ public function waitReadNum(Request $request) { // $num = 0; $num = Message::userMessages($request->user())->with('logs') ->whereDoesntHave('logs', function ($q) use ($request) { return $q->where('user_id', '=', $request->user()->id); })->count(); return response()->json([ 'num' => $num, ]); } }