getCurrentPage(); // 每页显示行数 $perPage = $model->getPerPage(); // 获取排序字段 [$orderColumn, $orderType] = $model->getSort(); // 获取当前登录用户的 ID $userId = getDistributorId(); // 使用 getMessagesForUser 方法获取消息列表 $messages = $this->getMessagesForUser($userId); // 获取总记录数 $total = $messages->count(); // 分页数据 $data = $messages->slice(($currentPage - 1) * $perPage, $perPage)->values(); foreach ($data as $value) { $value['created_at']=$value['created_at']->toDateTimeString(); $data_out[]=$value; } return $model->makePaginator( $total, // 传入总记录数 $data_out ); } /** * 获取最近 N 条消息 * * @param int $limit * @return \Illuminate\Support\Collection */ public function getRecentMessages($limit = 10) { // 获取当前登录用户的 ID $userId = getDistributorId(); // 使用 getMessagesForUser 方法获取消息列表 $messages = $this->getMessagesForUser($userId); // 获取最近 N 条消息 $recentMessages = $messages->take($limit); return $recentMessages; } public function getMessagesForUser($userId) { //$userId=str($userId); return DistMessageModel::where('target_type', 'all') ->orWhere(function ($query) use ($userId) { $query->where('target_type', 'users') ->whereJsonContains('target_ids', str($userId)); }) ->with(['readStatuses' => function ($query) use ($userId) { $query->where('user_id', $userId); }]) ->orderBy('created_at', 'desc') ->get() ->map(function ($message) use ($userId) { $isRead = $message->readStatuses->isNotEmpty() && $message->readStatuses->first()->is_read; if(!$isRead) { $isRead=0; } return [ 'id' => $message->id, 'title' => $message->title, 'content' => $message->content, 'sender_id' => $message->sender_id, 'created_at' => $message->created_at, 'is_read' => $isRead, ]; }); } /** * 判断用户是否有权限查看指定 ID 的消息 * * @param int $messageId * @return bool */ public static function canViewMessage($messageId) { // 获取当前登录用户的 ID $userId = getDistributorId(); // 检查消息是否存在且属于当前用户 $message = DistMessageModel::where('id', $messageId) ->where(function ($query) use ($userId) { $query->where('target_type', 'all') ->orWhere(function ($query) use ($userId) { $query->where('target_type', 'users') ->whereJsonContains('target_ids', str($userId)); }); }) ->first(); return $message !== null; } }