DistCustomMessage.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. <?php
  2. namespace App\Distributor\Repositories;
  3. use App\Models\DistMessage as DistMessageModel;
  4. use Dcat\Admin\Grid;
  5. use Dcat\Admin\Repositories\Repository;
  6. use Illuminate\Pagination\LengthAwarePaginator;
  7. class DistCustomMessage extends Repository
  8. {
  9. protected $eloquentClass = DistMessageModel::class;
  10. /**
  11. * 定义主键字段名称
  12. *
  13. * @return string
  14. */
  15. public function getPrimaryKeyColumn()
  16. {
  17. return 'id';
  18. }
  19. /**
  20. * 重写 get 方法
  21. *
  22. * @param Grid\Model $model
  23. * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator|\Illuminate\Database\Eloquent\Collection|array
  24. */
  25. public function get(Grid\Model $model)
  26. {
  27. // 当前页数
  28. $currentPage = $model->getCurrentPage();
  29. // 每页显示行数
  30. $perPage = $model->getPerPage();
  31. // 获取排序字段
  32. [$orderColumn, $orderType] = $model->getSort();
  33. // 获取当前登录用户的 ID
  34. $userId = getDistributorId();
  35. // 使用 getMessagesForUser 方法获取消息列表
  36. $messages = $this->getMessagesForUser($userId);
  37. // 获取总记录数
  38. $total = $messages->count();
  39. // 分页数据
  40. $data = $messages->slice(($currentPage - 1) * $perPage, $perPage)->values();
  41. foreach ($data as $value) {
  42. $value['created_at']=$value['created_at']->toDateTimeString();
  43. $data_out[]=$value;
  44. }
  45. return $model->makePaginator(
  46. $total, // 传入总记录数
  47. $data_out
  48. );
  49. }
  50. public function getMessagesForUser($userId)
  51. {
  52. return DistMessageModel::where('target_type', 'all')
  53. ->orWhere(function ($query) use ($userId) {
  54. $query->where('target_type', 'users')
  55. ->whereJsonContains('target_ids', $userId);
  56. })
  57. ->with(['readStatuses' => function ($query) use ($userId) {
  58. $query->where('user_id', $userId);
  59. }])
  60. ->orderBy('created_at', 'desc')
  61. ->get()
  62. ->map(function ($message) use ($userId) {
  63. $isRead = $message->readStatuses->isNotEmpty() && $message->readStatuses->first()->is_read;
  64. if(!$isRead)
  65. {
  66. $isRead=0;
  67. }
  68. return [
  69. 'id' => $message->id,
  70. 'title' => $message->title,
  71. 'content' => $message->content,
  72. 'sender_id' => $message->sender_id,
  73. 'created_at' => $message->created_at,
  74. 'is_read' => $isRead,
  75. ];
  76. });
  77. }
  78. }