123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- <?php
- namespace App\Distributor\Repositories;
- use App\Models\DistMessage as DistMessageModel;
- use Dcat\Admin\Grid;
- use Dcat\Admin\Repositories\Repository;
- use Illuminate\Pagination\LengthAwarePaginator;
- class DistCustomMessage extends Repository
- {
- protected $eloquentClass = DistMessageModel::class;
- /**
- * 定义主键字段名称
- *
- * @return string
- */
- public function getPrimaryKeyColumn()
- {
- return 'id';
- }
- /**
- * 重写 get 方法
- *
- * @param Grid\Model $model
- * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator|\Illuminate\Database\Eloquent\Collection|array
- */
- public function get(Grid\Model $model)
- {
- // 当前页数
- $currentPage = $model->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)
- {
- return DistMessageModel::where('target_type', 'all')
- ->orWhere(function ($query) use ($userId) {
- $query->where('target_type', 'users')
- ->whereJsonContains('target_ids', $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', $userId);
- });
- })
- ->first();
- return $message !== null;
- }
- }
|